diff --git a/.github/workflows/Dockerfile b/.github/workflows/Dockerfile new file mode 100644 index 0000000000..371931a5e4 --- /dev/null +++ b/.github/workflows/Dockerfile @@ -0,0 +1,24 @@ +# GitHub action dockerfile +# Requires docker experimental features as buildx and BuildKit so not suitable for developers regular use. +# https://docs.docker.com/develop/develop-images/build_enhancements/#to-enable-buildkit-builds + +########################### +# Build binaries stage +########################### +FROM --platform=$BUILDPLATFORM golang:1.17.8-alpine3.15 AS build +ADD . /app +WORKDIR /app +# Arguments required to build binaries targetting the correct OS and CPU architectures +ARG TARGETOS TARGETARCH +# Actually building the binaries +RUN GOOS=$TARGETOS GOARCH=$TARGETARCH go install -v . ./cmd/... + +########################### +# Build docker image stage +########################### +FROM alpine:3.15 +COPY --from=build /go/bin /bin +# 8333 Mainnet Bitcoin peer-to-peer port +# 8334 Mainet RPC port +EXPOSE 8333 8334 +ENTRYPOINT ["btcd"] diff --git a/.github/workflows/dimagespub.yml b/.github/workflows/dimagespub.yml new file mode 100644 index 0000000000..19056ee07b --- /dev/null +++ b/.github/workflows/dimagespub.yml @@ -0,0 +1,52 @@ +name: Docker images build and publish + +on: + push: + tags: + - v* + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +env: + REGISTRY: ghcr.io + IMAGE_NAME: ${{ github.repository }} + # Build for default OS, linux, and common CPU architectures + # Reference https://github.com/docker/setup-buildx-action#quick-start + TPLATFORMS: linux/amd64,linux/arm64,linux/arm,linux/386 + +jobs: + build-push: + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Docker Setup Buildx + id: buildx + uses: docker/setup-buildx-action@94ab11c41e45d028884a99163086648e898eed25 + + - name: Log in to the Container registry + uses: docker/login-action@f054a8b539a109f9f41c372932f1ae047eff08c9 + with: + registry: ${{ env.REGISTRY }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@98669ae865ea3cffbcbaa878cf57c20bbf1c6c38 + with: + images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} + + - name: Build and push Docker images + uses: docker/build-push-action@ac9327eae2b366085ac7f6a2d02df8aa8ead720a + with: + file: .github/workflows/Dockerfile + labels: ${{ steps.meta.outputs.labels }} + platforms: ${{ env.TPLATFORMS }} + push: true + tags: ${{ steps.meta.outputs.tags }} diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml new file mode 100644 index 0000000000..c1625428d3 --- /dev/null +++ b/.github/workflows/go.yml @@ -0,0 +1,87 @@ +name: Build and Test +on: [push, pull_request] + +env: + # go needs absolute directories, using the $HOME variable doesn't work here. + GOCACHE: /home/runner/work/go/pkg/build + GOPATH: /home/runner/work/go + GO_VERSION: 1.17.5 + +jobs: + build: + name: Build + runs-on: ubuntu-latest + steps: + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + + - name: Check out source + uses: actions/checkout@v2 + + - name: Build + run: make build + + test-cover: + name: Unit coverage + runs-on: ubuntu-latest + steps: + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + + - name: Check out source + uses: actions/checkout@v2 + + - name: Test + run: make unit-cover + + - name: Send top-level coverage + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: coverage.txt + flag-name: btcd + parallel: true + + - name: Send btcec + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: btcec/coverage.txt + flag-name: btcec + parallel: true + + - name: Send btcutil coverage + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: btcutil/coverage.txt + flag-name: btcutil + parallel: true + + - name: Send btcutil coverage for psbt package + uses: shogo82148/actions-goveralls@v1 + with: + path-to-profile: btcutil/psbt/coverage.txt + flag-name: btcutilpsbt + parallel: true + + - name: Notify coveralls all reports sent + uses: shogo82148/actions-goveralls@v1 + with: + parallel-finished: true + + test-race: + name: Unit race + runs-on: ubuntu-latest + steps: + - name: Set up Go + uses: actions/setup-go@v2 + with: + go-version: ${{ env.GO_VERSION }} + + - name: Check out source + uses: actions/checkout@v2 + + - name: Test + run: make unit-race diff --git a/.gitignore b/.gitignore index 72fb9416ea..a92c3ab39d 100644 --- a/.gitignore +++ b/.gitignore @@ -32,3 +32,11 @@ _cgo_export.* _testmain.go *.exe + +# Code coverage files +profile.tmp +profile.cov +coverage.txt +btcec/coverage.txt +btcutil/coverage.txt +btcutil/psbt/coverage.txt diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 5063496735..0000000000 --- a/.travis.yml +++ /dev/null @@ -1,19 +0,0 @@ -language: go -cache: - directories: - - $GOCACHE - - $GOPATH - - $GOPATH/pkg/mod - - $GOPATH/github.com/golang - - $GOPATH/gopkg.in/alecthomas -go: - - "1.13.x" -sudo: false -install: - - export PATH=$PATH:$PWD/linux-amd64/ - - GO111MODULE=on go install . ./cmd/... - - GO111MODULE=off go get -u gopkg.in/alecthomas/gometalinter.v2 - - GO111MODULE=off gometalinter.v2 --install -script: - - export PATH=$PATH:$HOME/gopath/bin - - ./goclean.sh diff --git a/CHANGES b/CHANGES index 6f7013e922..fd59a88672 100644 --- a/CHANGES +++ b/CHANGES @@ -3,6 +3,281 @@ User visible changes for btcd A full-node bitcoin implementation written in Go ============================================================================ +Changes in 0.22.0 (Tue Jun 01 2021) + - Protocol and network-related changes: + - Add support for witness tx and block in notfound msg (#1625) + - Add support for receiving sendaddrv2 messages from a peer (#1670) + - Fix bug in peer package causing last block height to go backwards + (#1606) + - Add chain parameters for connecting to the public Signet network + (#1692, #1718) + - Crypto changes: + - Fix bug causing panic due to bad R and S signature components in + btcec.RecoverCompact (#1691) + - Set the name (secp256k1) in the CurveParams of the S256 curve + (#1565) + - Notable developer-related package changes: + - Remove unknown block version warning in the blockchain package, + due to false positives triggered by AsicBoost (#1463) + - Add chaincfg.RegisterHDKeyID function to populate HD key ID pairs + (#1617) + - Add new method mining.AddWitnessCommitment to add the witness + commitment as an OP_RETURN output within the coinbase transaction. + (#1716) + - RPC changes: + - Support Batch JSON-RPC in rpcclient and server (#1583) + - Add rpcclient method to invoke getdescriptorinfo JSON-RPC command + (#1578) + - Update the rpcserver handler for validateaddress JSON-RPC command to + have parity with the bitcoind 0.20.0 interface (#1613) + - Add rpcclient method to invoke getblockfilter JSON-RPC command + (#1579) + - Add signmessagewithprivkey JSON-RPC command in rpcserver (#1585) + - Add rpcclient method to invoke importmulti JSON-RPC command (#1579) + - Add watchOnly argument in rpcclient method to invoke + listtransactions JSON-RPC command (#1628) + - Update btcjson.ListTransactionsResult for compatibility with Bitcoin + Core 0.20.0 (#1626) + - Support nullable optional JSON-RPC parameters (#1594) + - Add rpcclient and server method to invoke getnodeaddresses JSON-RPC + command (#1590) + - Add rpcclient methods to invoke PSBT JSON-RPC commands (#1596) + - Add rpcclient method to invoke listsinceblock with the + include_watchonly parameter enabled (#1451) + - Add rpcclient method to invoke deriveaddresses JSON-RPC command + (#1631) + - Add rpcclient method to invoke getblocktemplate JSON-RPC command + (#1629) + - Add rpcclient method to invoke getaddressinfo JSON-RPC command + (#1633) + - Add rpcclient method to invoke getwalletinfo JSON-RPC command + (#1638) + - Fix error message in rpcserver when an unknown RPC command is + encountered (#1695) + - Fix error message returned by estimatefee when the number of blocks + exceeds the max depth (#1678) + - Update btcjson.GetBlockChainInfoResult to include new fields in + Bitcoin Core (#1676) + - Add ExtraHeaders in rpcclient.ConnConfig struct (#1669) + - Fix bitcoind compatibility issue with the sendrawtransaction + JSON-RPC command (#1659) + - Add new JSON-RPC errors to btcjson package, and documented them + (#1648) + - Add rpcclient method to invoke createwallet JSON-RPC command + (#1650) + - Add rpcclient methods to invoke backupwallet, dumpwallet, loadwallet + and unloadwallet JSON-RPC commands (#1645) + - Fix unmarshalling error in getmininginfo JSON-RPC command, for valid + integers in scientific notation (#1644) + - Add rpcclient method to invoke gettxoutsetinfo JSON-RPC command + (#1641) + - Add rpcclient method to invoke signrawtransactionwithwallet JSON-RPC + command (#1642) + - Add txid to getblocktemplate response of rpcserver (#1639) + - Fix monetary unit used in createrawtransaction JSON-RPC command in + rpcserver (#1614) + - Add rawtx field to btcjson.GetBlockVerboseTxResult to provide + backwards compatibility with older versions of Bitcoin Core (#1677) + - Misc changes: + - Update btcutil dependency (#1704) + - Add Dockerfile to build and run btcd on Docker (#1465) + - Rework documentation and publish on https://btcd.readthedocs.io (#1468) + - Add support for Go 1.15 (#1619) + - Add Go 1.14 as the minimum supported version of Golang (#1621) + - Contributors (alphabetical order): + - 10gic + - Andrew Tugarinov + - Anirudha Bose + - Appelberg-s + - Armando Ochoa + - Aurèle Oulès + - Calvin Kim + - Christian Lehmann + - Conner Fromknecht + - Dan Cline + - David Mazary + - Elliott Minns + - Federico Bond + - Friedger Müffke + - Gustavo Chain + - Hanjun Kim + - Henry Fisher + - Iskander Sharipov + - Jake Sylvestre + - Johan T. Halseth + - John C. Vernaleo + - Liran Sharir + - Mikael Lindlof + - Olaoluwa Osuntokun + - Oliver Gugger + - Rjected + - Steven Kreuzer + - Torkel Rogstad + - Tristyn + - Victor Lavaud + - Vinayak Borkar + - Wilmer Paulino + - Yaacov Akiba Slama + - ebiiim + - ipriver + - wakiyamap + - yyforyongyu + +Changes in 0.21.0 (Thu Aug 27 2020) + - Network-related changes: + - Handle notfound messages from peers in netsync package (#1603) + - RPC changes: + - Add compatibility for getblock RPC changes in bitcoind 0.15.0 (#1529) + - Add new optional Params field to rpcclient.ConnConfig (#1467) + - Add new error code ErrRPCInWarmup in btcjson (#1541) + - Add compatibility for changes to getmempoolentry response in bitcoind + 0.19.0 (#1524) + - Add rpcclient methods for estimatesmartfee and generatetoaddress + commands (#1500) + - Add rpcclient method for getblockstats command (#1500) + - Parse serialized transaction from createrawtransaction command using + both segwit, and legacy format (#1502) + - Support cookie-based authentication in rpcclient (#1460) + - Add rpcclient method for getchaintxstats command (#1571) + - Add rpcclient method for fundrawtransaction command (#1553) + - Add rpcclient method for getbalances command (#1595) + - Add new method rpcclient.GetTransactionWatchOnly (#1592) + - Crypto changes: + - Fix panic in fieldVal.SetByteSlice when called with large values, and + improve the method to be 35% faster (#1602) + - btcctl changes: + - Add -regtest mode to btcctl (#1556) + - Misc changes: + - Fix a bug due to a deadlock in connmgr's dynamic ban scoring (#1509) + - Add blockchain.NewUtxoEntry() to directly create entries for + UtxoViewpoint (#1588) + - Replace LRU cache implementation in peer package with a generic one + from decred/dcrd (#1599) + - Contributors (alphabetical order): + - Anirudha Bose + - Antonin Hildebrand + - Dan Cline + - Daniel McNally + - David Hill + - Federico Bond + - George Tankersley + - Henry + - Henry Harder + - Iskander Sharipov + - Ivan Kuznetsov + - Jake Sylvestre + - Javed Khan + - JeremyRand + - Jin + - John C. Vernaleo + - Kulpreet Singh + - Mikael Lindlof + - Murray Nesbitt + - Nisen + - Olaoluwa Osuntokun + - Oliver Gugger + - Steven Roose + - Torkel Rogstad + - Tyler Chambers + - Wilmer Paulino + - Yash Bhutwala + - adiabat + - jalavosus + - mohanson + - qqjettkgjzhxmwj + - qshuai + - shuai.qi + - tpkeeper + +Changes in v0.20.1 (Wed Nov 13 2019) + - RPC changes: + - Add compatibility for bitcoind v0.19.0 in rpcclient and btcjson + packages (#1484) + - Contributors (alphabetical order): + - Eugene Zeigel + - Olaoluwa Osuntokun + - Wilmer Paulino + +Changes in v0.20.0 (Tue Oct 15 2019) + - Significant changes made since 0.12.0. See git log or refer to release + notes on GitHub for full details. + - Contributors (alphabetical order): + - Albert Puigsech Galicia + - Alex Akselrod + - Alex Bosworth + - Alex Manuskin + - Alok Menghrajani + - Anatoli Babenia + - Andy Weidenbaum + - Calvin McAnarney + - Chris Martin + - Chris Pacia + - Chris Shepherd + - Conner Fromknecht + - Craig Sturdy + - Cédric Félizard + - Daniel Krawisz + - Daniel Martí + - Daniel McNally + - Dario Nieuwenhuis + - Dave Collins + - David Hill + - David de Kloet + - GeertJohan + - Grace Noah + - Gregory Trubetskoy + - Hector Jusforgues + - Iskander (Alex) Sharipov + - Janus Troelsen + - Jasper + - Javed Khan + - Jeremiah Goyette + - Jim Posen + - Jimmy Song + - Johan T. Halseth + - John C. Vernaleo + - Jonathan Gillham + - Josh Rickmar + - Jon Underwood + - Jonathan Zeppettini + - Jouke Hofman + - Julian Meyer + - Kai + - Kamil Slowikowski + - Kefkius + - Leonardo Lazzaro + - Marco Peereboom + - Marko Bencun + - Mawueli Kofi Adzoe + - Michail Kargakis + - Mitchell Paull + - Nathan Bass + - Nicola 'tekNico' Larosa + - Olaoluwa Osuntokun + - Pedro Martelletto + - Ricardo Velhote + - Roei Erez + - Ruben de Vries + - Rune T. Aune + - Sad Pencil + - Shuai Qi + - Steven Roose + - Tadge Dryja + - Tibor Bősze + - Tomás Senart + - Tzu-Jung Lee + - Vadym Popov + - Waldir Pimenta + - Wilmer Paulino + - benma + - danda + - dskloet + - esemplastic + - jadeblaquiere + - nakagawa + - preminem + - qshuai + Changes in 0.12.0 (Fri Nov 20 2015) - Protocol and network related changes: - Add a new checkpoint at block height 382320 (#555) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000000..58e4b59aec --- /dev/null +++ b/Dockerfile @@ -0,0 +1,46 @@ +# This Dockerfile builds btcd from source and creates a small (55 MB) docker container based on alpine linux. +# +# Clone this repository and run the following command to build and tag a fresh btcd amd64 container: +# +# docker build . -t yourregistry/btcd +# +# You can use the following command to buid an arm64v8 container: +# +# docker build . -t yourregistry/btcd --build-arg ARCH=arm64v8 +# +# For more information how to use this docker image visit: +# https://github.com/btcsuite/btcd/tree/master/docs +# +# 8333 Mainnet Bitcoin peer-to-peer port +# 8334 Mainet RPC port + +ARG ARCH=amd64 +# using the SHA256 instead of tags +# https://github.com/opencontainers/image-spec/blob/main/descriptor.md#digests +# https://cloud.google.com/architecture/using-container-images +# https://github.com/google/go-containerregistry/blob/main/cmd/crane/README.md +# ➜ ~ crane digest golang:1.17.13-alpine3.16 +# sha256:c80567372be0d486766593cc722d3401038e2f150a0f6c5c719caa63afb4026a +FROM golang@sha256:c80567372be0d486766593cc722d3401038e2f150a0f6c5c719caa63afb4026a AS build-container + +ARG ARCH +ENV GO111MODULE=on + +ADD . /app +WORKDIR /app +RUN set -ex \ + && if [ "${ARCH}" = "amd64" ]; then export GOARCH=amd64; fi \ + && if [ "${ARCH}" = "arm32v7" ]; then export GOARCH=arm; fi \ + && if [ "${ARCH}" = "arm64v8" ]; then export GOARCH=arm64; fi \ + && echo "Compiling for $GOARCH" \ + && go install -v . ./cmd/... + +FROM $ARCH/alpine:3.12 + +COPY --from=build-container /go/bin /bin + +VOLUME ["/root/.btcd"] + +EXPOSE 8333 8334 + +ENTRYPOINT ["btcd"] diff --git a/LICENSE b/LICENSE index 53ba0c5608..23190babb7 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ ISC License -Copyright (c) 2013-2017 The btcsuite developers +Copyright (c) 2013-2022 The btcsuite developers Copyright (c) 2015-2016 The Decred developers Permission to use, copy, modify, and distribute this software for any diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000..2e967ba0f6 --- /dev/null +++ b/Makefile @@ -0,0 +1,133 @@ +PKG := github.com/btcsuite/btcd + +LINT_PKG := github.com/golangci/golangci-lint/cmd/golangci-lint +GOACC_PKG := github.com/ory/go-acc +GOIMPORTS_PKG := golang.org/x/tools/cmd/goimports + +GO_BIN := ${GOPATH}/bin +LINT_BIN := $(GO_BIN)/golangci-lint +GOACC_BIN := $(GO_BIN)/go-acc + +LINT_COMMIT := v1.18.0 +GOACC_COMMIT := 80342ae2e0fcf265e99e76bcc4efd022c7c3811b + +DEPGET := cd /tmp && GO111MODULE=on go get -v +GOBUILD := GO111MODULE=on go build -v +GOINSTALL := GO111MODULE=on go install -v +DEV_TAGS := rpctest +GOTEST_DEV = GO111MODULE=on go test -v -tags=$(DEV_TAGS) +GOTEST := GO111MODULE=on go test -v + +GOFILES_NOVENDOR = $(shell find . -type f -name '*.go' -not -path "./vendor/*") + +RM := rm -f +CP := cp +MAKE := make +XARGS := xargs -L 1 + +# Linting uses a lot of memory, so keep it under control by limiting the number +# of workers if requested. +ifneq ($(workers),) +LINT_WORKERS = --concurrency=$(workers) +endif + +LINT = $(LINT_BIN) run -v $(LINT_WORKERS) + +GREEN := "\\033[0;32m" +NC := "\\033[0m" +define print + echo $(GREEN)$1$(NC) +endef + +default: build + +all: build check + +# ============ +# DEPENDENCIES +# ============ + +$(LINT_BIN): + @$(call print, "Fetching linter") + $(DEPGET) $(LINT_PKG)@$(LINT_COMMIT) + +$(GOACC_BIN): + @$(call print, "Fetching go-acc") + $(DEPGET) $(GOACC_PKG)@$(GOACC_COMMIT) + +goimports: + @$(call print, "Installing goimports.") + $(DEPGET) $(GOIMPORTS_PKG) + +# ============ +# INSTALLATION +# ============ + +build: + @$(call print, "Building all binaries") + $(GOBUILD) $(PKG) + $(GOBUILD) $(PKG)/cmd/btcctl + $(GOBUILD) $(PKG)/cmd/gencerts + $(GOBUILD) $(PKG)/cmd/findcheckpoint + $(GOBUILD) $(PKG)/cmd/addblock + +# ======= +# TESTING +# ======= + +check: unit + +unit: + @$(call print, "Running unit tests.") + $(GOTEST_DEV) ./... -test.timeout=20m + cd btcec; $(GOTEST_DEV) ./... -test.timeout=20m + cd btcutil; $(GOTEST_DEV) ./... -test.timeout=20m + cd btcutil/psbt; $(GOTEST_DEV) ./... -test.timeout=20m + +unit-cover: $(GOACC_BIN) + @$(call print, "Running unit coverage tests.") + $(GOACC_BIN) ./... + + # We need to remove the /v2 pathing from the module to have it work + # nicely with the CI tool we use to render live code coverage. + cd btcec; $(GOACC_BIN) ./...; sed -i.bak 's/v2\///g' coverage.txt + + cd btcutil; $(GOACC_BIN) ./... + + cd btcutil/psbt; $(GOACC_BIN) ./... + +unit-race: + @$(call print, "Running unit race tests.") + env CGO_ENABLED=1 GORACE="history_size=7 halt_on_errors=1" $(GOTEST) -race -test.timeout=20m ./... + cd btcec; env CGO_ENABLED=1 GORACE="history_size=7 halt_on_errors=1" $(GOTEST) -race -test.timeout=20m ./... + cd btcutil; env CGO_ENABLED=1 GORACE="history_size=7 halt_on_errors=1" $(GOTEST) -race -test.timeout=20m ./... + cd btcutil/psbt; env CGO_ENABLED=1 GORACE="history_size=7 halt_on_errors=1" $(GOTEST) -race -test.timeout=20m ./... + +# ========= +# UTILITIES +# ========= + +fmt: goimports + @$(call print, "Fixing imports.") + goimports -w $(GOFILES_NOVENDOR) + @$(call print, "Formatting source.") + gofmt -l -w -s $(GOFILES_NOVENDOR) + +lint: $(LINT_BIN) + @$(call print, "Linting source.") + $(LINT) + +clean: + @$(call print, "Cleaning source.$(NC)") + $(RM) coverage.txt btcec/coverage.txt btcutil/coverage.txt btcutil/psbt/coverage.txt + +.PHONY: all \ + default \ + build \ + check \ + unit \ + unit-cover \ + unit-race \ + fmt \ + lint \ + clean diff --git a/README.md b/README.md index a270fd2e97..5ec1454fcc 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,10 @@ btcd ==== -[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd) -[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) +[![Coverage Status](https://coveralls.io/repos/github/btcsuite/btcd/badge.svg?branch=master)](https://coveralls.io/github/btcsuite/btcd?branch=master) +[![ISC License](https://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd) btcd is an alternative full node bitcoin implementation written in Go (golang). @@ -26,7 +27,7 @@ transactions based on miner requirements ("standard" transactions). One key difference between btcd and Bitcoin Core is that btcd does *NOT* include wallet functionality and this was a very intentional design decision. See the -blog entry [here](https://blog.conformal.com/btcd-not-your-moms-bitcoin-daemon) +blog entry [here](https://web.archive.org/web/20171125143919/https://blog.conformal.com/btcd-not-your-moms-bitcoin-daemon) for more details. This means you can't actually make or receive payments directly with btcd. That functionality is provided by the [btcwallet](https://github.com/btcsuite/btcwallet) and @@ -35,12 +36,10 @@ which are both under active development. ## Requirements -[Go](http://golang.org) 1.12 or newer. +[Go](http://golang.org) 1.16 or newer. ## Installation -#### Windows - MSI Available - https://github.com/btcsuite/btcd/releases #### Linux/BSD/MacOSX/POSIX - Build from Source @@ -73,10 +72,6 @@ $ GO111MODULE=on go install -v . ./cmd/... ## Updating -#### Windows - -Install a newer MSI - #### Linux/BSD/MacOSX/POSIX - Build from Source - Run the following commands to update btcd, all dependencies, and install it: @@ -93,10 +88,6 @@ btcd has several configuration options available to tweak how it runs, but all of the basic operations described in the intro section work with zero configuration. -#### Windows (Installed from MSI) - -Launch btcd from your Start menu. - #### Linux/BSD/POSIX/Source ```bash @@ -105,9 +96,9 @@ $ ./btcd ## IRC -- irc.freenode.net +- irc.libera.chat - channel #btcd -- [webchat](https://webchat.freenode.net/?channels=btcd) +- [webchat](https://web.libera.chat/gamja/?channels=btcd) ## Issue Tracker diff --git a/addrmgr/addrmanager.go b/addrmgr/addrmanager.go index a8a8fb3338..bdfe9094ce 100644 --- a/addrmgr/addrmanager.go +++ b/addrmgr/addrmanager.go @@ -30,7 +30,7 @@ import ( // AddrManager provides a concurrency safe address manager for caching potential // peers on the bitcoin network. type AddrManager struct { - mtx sync.Mutex + mtx sync.RWMutex peersFile string lookupFunc func(string) ([]net.IP, error) rand *rand.Rand @@ -70,7 +70,7 @@ type serializedAddrManager struct { } type localAddress struct { - na *wire.NetAddress + na *wire.NetAddressV2 score AddressPriority } @@ -163,7 +163,7 @@ const ( // updateAddress is a helper function to either update an address already known // to the address manager, or to add the address if not already known. -func (a *AddrManager) updateAddress(netAddr, srcAddr *wire.NetAddress) { +func (a *AddrManager) updateAddress(netAddr, srcAddr *wire.NetAddressV2) { // Filter out non-routable addresses. Note that non-routable // also includes invalid and local addresses. if !IsRoutable(netAddr) { @@ -176,7 +176,7 @@ func (a *AddrManager) updateAddress(netAddr, srcAddr *wire.NetAddress) { // TODO: only update addresses periodically. // Update the last seen time and services. // note that to prevent causing excess garbage on getaddr - // messages the netaddresses in addrmaanger are *immutable*, + // messages the netaddresses in addrmanager are *immutable*, // if we need to change them then we replace the pointer with a // new copy so that we don't have to copy every na for getaddr. if netAddr.Timestamp.After(ka.na.Timestamp) || @@ -186,7 +186,9 @@ func (a *AddrManager) updateAddress(netAddr, srcAddr *wire.NetAddress) { naCopy := *ka.na naCopy.Timestamp = netAddr.Timestamp naCopy.AddService(netAddr.Services) + ka.mtx.Lock() ka.na = &naCopy + ka.mtx.Unlock() } // If already in tried, we have nothing to do here. @@ -294,7 +296,7 @@ func (a *AddrManager) pickTried(bucket int) *list.Element { return oldestElem } -func (a *AddrManager) getNewBucket(netAddr, srcAddr *wire.NetAddress) int { +func (a *AddrManager) getNewBucket(netAddr, srcAddr *wire.NetAddressV2) int { // bitcoind: // doublesha256(key + sourcegroup + int64(doublesha256(key + group + sourcegroup))%bucket_per_source_group) % num_new_buckets @@ -316,7 +318,7 @@ func (a *AddrManager) getNewBucket(netAddr, srcAddr *wire.NetAddress) int { return int(binary.LittleEndian.Uint64(hash2) % newBucketCount) } -func (a *AddrManager) getTriedBucket(netAddr *wire.NetAddress) int { +func (a *AddrManager) getTriedBucket(netAddr *wire.NetAddressV2) int { // bitcoind hashes this as: // doublesha256(key + group + truncate_to_64bits(doublesha256(key)) % buckets_per_group) % num_buckets data1 := []byte{} @@ -548,7 +550,7 @@ func (a *AddrManager) deserializePeers(filePath string) error { // DeserializeNetAddress converts a given address string to a *wire.NetAddress. func (a *AddrManager) DeserializeNetAddress(addr string, - services wire.ServiceFlag) (*wire.NetAddress, error) { + services wire.ServiceFlag) (*wire.NetAddressV2, error) { host, portStr, err := net.SplitHostPort(addr) if err != nil { @@ -597,7 +599,7 @@ func (a *AddrManager) Stop() error { // AddAddresses adds new addresses to the address manager. It enforces a max // number of addresses and silently ignores duplicate addresses. It is // safe for concurrent access. -func (a *AddrManager) AddAddresses(addrs []*wire.NetAddress, srcAddr *wire.NetAddress) { +func (a *AddrManager) AddAddresses(addrs []*wire.NetAddressV2, srcAddr *wire.NetAddressV2) { a.mtx.Lock() defer a.mtx.Unlock() @@ -609,7 +611,7 @@ func (a *AddrManager) AddAddresses(addrs []*wire.NetAddress, srcAddr *wire.NetAd // AddAddress adds a new address to the address manager. It enforces a max // number of addresses and silently ignores duplicate addresses. It is // safe for concurrent access. -func (a *AddrManager) AddAddress(addr, srcAddr *wire.NetAddress) { +func (a *AddrManager) AddAddress(addr, srcAddr *wire.NetAddressV2) { a.mtx.Lock() defer a.mtx.Unlock() @@ -633,7 +635,7 @@ func (a *AddrManager) AddAddressByIP(addrIP string) error { if err != nil { return fmt.Errorf("invalid port %s: %v", portStr, err) } - na := wire.NewNetAddressIPPort(ip, uint16(port), 0) + na := wire.NetAddressV2FromBytes(time.Now(), 0, ip, uint16(port)) a.AddAddress(na, na) // XXX use correct src address return nil } @@ -645,8 +647,8 @@ func (a *AddrManager) numAddresses() int { // NumAddresses returns the number of addresses known to the address manager. func (a *AddrManager) NumAddresses() int { - a.mtx.Lock() - defer a.mtx.Unlock() + a.mtx.RLock() + defer a.mtx.RUnlock() return a.numAddresses() } @@ -654,15 +656,15 @@ func (a *AddrManager) NumAddresses() int { // NeedMoreAddresses returns whether or not the address manager needs more // addresses. func (a *AddrManager) NeedMoreAddresses() bool { - a.mtx.Lock() - defer a.mtx.Unlock() + a.mtx.RLock() + defer a.mtx.RUnlock() return a.numAddresses() < needAddressThreshold } // AddressCache returns the current address cache. It must be treated as // read-only (but since it is a copy now, this is not as dangerous). -func (a *AddrManager) AddressCache() []*wire.NetAddress { +func (a *AddrManager) AddressCache() []*wire.NetAddressV2 { allAddr := a.getAddresses() numAddresses := len(allAddr) * getAddrPercent / 100 @@ -684,16 +686,16 @@ func (a *AddrManager) AddressCache() []*wire.NetAddress { // getAddresses returns all of the addresses currently found within the // manager's address cache. -func (a *AddrManager) getAddresses() []*wire.NetAddress { - a.mtx.Lock() - defer a.mtx.Unlock() +func (a *AddrManager) getAddresses() []*wire.NetAddressV2 { + a.mtx.RLock() + defer a.mtx.RUnlock() addrIndexLen := len(a.addrIndex) if addrIndexLen == 0 { return nil } - addrs := make([]*wire.NetAddress, 0, addrIndexLen) + addrs := make([]*wire.NetAddressV2, 0, addrIndexLen) for _, v := range a.addrIndex { addrs = append(addrs, v.na) } @@ -720,20 +722,43 @@ func (a *AddrManager) reset() { // HostToNetAddress returns a netaddress given a host address. If the address // is a Tor .onion address this will be taken care of. Else if the host is // not an IP address it will be resolved (via Tor if required). -func (a *AddrManager) HostToNetAddress(host string, port uint16, services wire.ServiceFlag) (*wire.NetAddress, error) { - // Tor address is 16 char base32 + ".onion" - var ip net.IP - if len(host) == 22 && host[16:] == ".onion" { +func (a *AddrManager) HostToNetAddress(host string, port uint16, + services wire.ServiceFlag) (*wire.NetAddressV2, error) { + + var ( + na *wire.NetAddressV2 + ip net.IP + ) + + // Tor v2 address is 16 char base32 + ".onion" + if len(host) == wire.TorV2EncodedSize && host[wire.TorV2EncodedSize-6:] == ".onion" { // go base32 encoding uses capitals (as does the rfc // but Tor and bitcoind tend to user lowercase, so we switch // case here. data, err := base32.StdEncoding.DecodeString( - strings.ToUpper(host[:16])) + strings.ToUpper(host[:wire.TorV2EncodedSize-6])) + if err != nil { + return nil, err + } + + na = wire.NetAddressV2FromBytes( + time.Now(), services, data, port, + ) + } else if len(host) == wire.TorV3EncodedSize && host[wire.TorV3EncodedSize-6:] == ".onion" { + // Tor v3 addresses are 56 base32 characters with the 6 byte + // onion suffix. + data, err := base32.StdEncoding.DecodeString( + strings.ToUpper(host[:wire.TorV3EncodedSize-6]), + ) if err != nil { return nil, err } - prefix := []byte{0xfd, 0x87, 0xd8, 0x7e, 0xeb, 0x43} - ip = net.IP(append(prefix, data...)) + + // The first 32 bytes is the ed25519 public key and is enough + // to reconstruct the .onion address. + na = wire.NetAddressV2FromBytes( + time.Now(), services, data[:wire.TorV3Size], port, + ) } else if ip = net.ParseIP(host); ip == nil { ips, err := a.lookupFunc(host) if err != nil { @@ -743,30 +768,23 @@ func (a *AddrManager) HostToNetAddress(host string, port uint16, services wire.S return nil, fmt.Errorf("no addresses found for %s", host) } ip = ips[0] - } - - return wire.NewNetAddressIPPort(ip, port, services), nil -} -// ipString returns a string for the ip from the provided NetAddress. If the -// ip is in the range used for Tor addresses then it will be transformed into -// the relevant .onion address. -func ipString(na *wire.NetAddress) string { - if IsOnionCatTor(na) { - // We know now that na.IP is long enough. - base32 := base32.StdEncoding.EncodeToString(na.IP[6:]) - return strings.ToLower(base32) + ".onion" + na = wire.NetAddressV2FromBytes(time.Now(), services, ip, port) + } else { + // This is an non-nil IP address that was parsed in the else if + // above. + na = wire.NetAddressV2FromBytes(time.Now(), services, ip, port) } - return na.IP.String() + return na, nil } // NetAddressKey returns a string key in the form of ip:port for IPv4 addresses -// or [ip]:port for IPv6 addresses. -func NetAddressKey(na *wire.NetAddress) string { +// or [ip]:port for IPv6 addresses. It also handles onion v2 and v3 addresses. +func NetAddressKey(na *wire.NetAddressV2) string { port := strconv.FormatUint(uint64(na.Port), 10) - return net.JoinHostPort(ipString(na), port) + return net.JoinHostPort(na.Addr.String(), port) } // GetAddress returns a single address that should be routable. It picks a @@ -840,13 +858,13 @@ func (a *AddrManager) GetAddress() *KnownAddress { } } -func (a *AddrManager) find(addr *wire.NetAddress) *KnownAddress { +func (a *AddrManager) find(addr *wire.NetAddressV2) *KnownAddress { return a.addrIndex[NetAddressKey(addr)] } // Attempt increases the given address' attempt counter and updates // the last attempt time. -func (a *AddrManager) Attempt(addr *wire.NetAddress) { +func (a *AddrManager) Attempt(addr *wire.NetAddressV2) { a.mtx.Lock() defer a.mtx.Unlock() @@ -857,14 +875,17 @@ func (a *AddrManager) Attempt(addr *wire.NetAddress) { return } // set last tried time to now + now := time.Now() + ka.mtx.Lock() ka.attempts++ - ka.lastattempt = time.Now() + ka.lastattempt = now + ka.mtx.Unlock() } // Connected Marks the given address as currently connected and working at the // current time. The address must already be known to AddrManager else it will // be ignored. -func (a *AddrManager) Connected(addr *wire.NetAddress) { +func (a *AddrManager) Connected(addr *wire.NetAddressV2) { a.mtx.Lock() defer a.mtx.Unlock() @@ -880,14 +901,16 @@ func (a *AddrManager) Connected(addr *wire.NetAddress) { // ka.na is immutable, so replace it. naCopy := *ka.na naCopy.Timestamp = time.Now() + ka.mtx.Lock() ka.na = &naCopy + ka.mtx.Unlock() } } // Good marks the given address as good. To be called after a successful // connection and version exchange. If the address is unknown to the address // manager it will be ignored. -func (a *AddrManager) Good(addr *wire.NetAddress) { +func (a *AddrManager) Good(addr *wire.NetAddressV2) { a.mtx.Lock() defer a.mtx.Unlock() @@ -899,11 +922,13 @@ func (a *AddrManager) Good(addr *wire.NetAddress) { // ka.Timestamp is not updated here to avoid leaking information // about currently connected peers. now := time.Now() + ka.mtx.Lock() ka.lastsuccess = now ka.lastattempt = now ka.attempts = 0 + ka.mtx.Unlock() // tried and refs synchronized via a.mtx - // move to tried set, optionally evicting other addresses if neeed. + // move to tried set, optionally evicting other addresses if need. if ka.tried { return } @@ -974,7 +999,7 @@ func (a *AddrManager) Good(addr *wire.NetAddress) { } // SetServices sets the services for the giiven address to the provided value. -func (a *AddrManager) SetServices(addr *wire.NetAddress, services wire.ServiceFlag) { +func (a *AddrManager) SetServices(addr *wire.NetAddressV2, services wire.ServiceFlag) { a.mtx.Lock() defer a.mtx.Unlock() @@ -988,15 +1013,19 @@ func (a *AddrManager) SetServices(addr *wire.NetAddress, services wire.ServiceFl // ka.na is immutable, so replace it. naCopy := *ka.na naCopy.Services = services + ka.mtx.Lock() ka.na = &naCopy + ka.mtx.Unlock() } } // AddLocalAddress adds na to the list of known local addresses to advertise // with the given priority. -func (a *AddrManager) AddLocalAddress(na *wire.NetAddress, priority AddressPriority) error { +func (a *AddrManager) AddLocalAddress(na *wire.NetAddressV2, priority AddressPriority) error { if !IsRoutable(na) { - return fmt.Errorf("address %s is not routable", na.IP) + return fmt.Errorf( + "address %s is not routable", na.Addr.String(), + ) } a.lamtx.Lock() @@ -1019,7 +1048,7 @@ func (a *AddrManager) AddLocalAddress(na *wire.NetAddress, priority AddressPrior // getReachabilityFrom returns the relative reachability of the provided local // address to the provided remote address. -func getReachabilityFrom(localAddr, remoteAddr *wire.NetAddress) int { +func getReachabilityFrom(localAddr, remoteAddr *wire.NetAddressV2) int { const ( Unreachable = 0 Default = iota @@ -1034,36 +1063,66 @@ func getReachabilityFrom(localAddr, remoteAddr *wire.NetAddress) int { return Unreachable } - if IsOnionCatTor(remoteAddr) { - if IsOnionCatTor(localAddr) { + if remoteAddr.IsTorV3() { + if localAddr.IsTorV3() { return Private } - if IsRoutable(localAddr) && IsIPv4(localAddr) { + lna := localAddr.ToLegacy() + if IsOnionCatTor(lna) { + // Modern v3 clients should not be able to connect to + // deprecated v2 hidden services. + return Unreachable + } + + if IsRoutable(localAddr) && IsIPv4(lna) { return Ipv4 } return Default } - if IsRFC4380(remoteAddr) { + // We can't be sure if the remote party can actually connect to this + // address or not. + if localAddr.IsTorV3() { + return Default + } + + // Convert the V2 addresses into legacy to access the network + // functions. + remoteLna := remoteAddr.ToLegacy() + localLna := localAddr.ToLegacy() + + if IsOnionCatTor(remoteLna) { + if IsOnionCatTor(localLna) { + return Private + } + + if IsRoutable(localAddr) && IsIPv4(localLna) { + return Ipv4 + } + + return Default + } + + if IsRFC4380(remoteLna) { if !IsRoutable(localAddr) { return Default } - if IsRFC4380(localAddr) { + if IsRFC4380(localLna) { return Teredo } - if IsIPv4(localAddr) { + if IsIPv4(localLna) { return Ipv4 } return Ipv6Weak } - if IsIPv4(remoteAddr) { - if IsRoutable(localAddr) && IsIPv4(localAddr) { + if IsIPv4(remoteLna) { + if IsRoutable(localAddr) && IsIPv4(localLna) { return Ipv4 } return Unreachable @@ -1072,7 +1131,7 @@ func getReachabilityFrom(localAddr, remoteAddr *wire.NetAddress) int { /* ipv6 */ var tunnelled bool // Is our v6 is tunnelled? - if IsRFC3964(localAddr) || IsRFC6052(localAddr) || IsRFC6145(localAddr) { + if IsRFC3964(localLna) || IsRFC6052(localLna) || IsRFC6145(localLna) { tunnelled = true } @@ -1080,11 +1139,11 @@ func getReachabilityFrom(localAddr, remoteAddr *wire.NetAddress) int { return Default } - if IsRFC4380(localAddr) { + if IsRFC4380(localLna) { return Teredo } - if IsIPv4(localAddr) { + if IsIPv4(localLna) { return Ipv4 } @@ -1098,13 +1157,13 @@ func getReachabilityFrom(localAddr, remoteAddr *wire.NetAddress) int { // GetBestLocalAddress returns the most appropriate local address to use // for the given remote address. -func (a *AddrManager) GetBestLocalAddress(remoteAddr *wire.NetAddress) *wire.NetAddress { +func (a *AddrManager) GetBestLocalAddress(remoteAddr *wire.NetAddressV2) *wire.NetAddressV2 { a.lamtx.Lock() defer a.lamtx.Unlock() bestreach := 0 var bestscore AddressPriority - var bestAddress *wire.NetAddress + var bestAddress *wire.NetAddressV2 for _, la := range a.localAddresses { reach := getReachabilityFrom(la.na, remoteAddr) if reach > bestreach || @@ -1115,21 +1174,29 @@ func (a *AddrManager) GetBestLocalAddress(remoteAddr *wire.NetAddress) *wire.Net } } if bestAddress != nil { - log.Debugf("Suggesting address %s:%d for %s:%d", bestAddress.IP, - bestAddress.Port, remoteAddr.IP, remoteAddr.Port) + log.Debugf("Suggesting address %s:%d for %s:%d", + bestAddress.Addr.String(), bestAddress.Port, + remoteAddr.Addr.String(), remoteAddr.Port) } else { - log.Debugf("No worthy address for %s:%d", remoteAddr.IP, - remoteAddr.Port) + log.Debugf("No worthy address for %s:%d", + remoteAddr.Addr.String(), remoteAddr.Port) // Send something unroutable if nothing suitable. var ip net.IP - if !IsIPv4(remoteAddr) && !IsOnionCatTor(remoteAddr) { - ip = net.IPv6zero - } else { + if remoteAddr.IsTorV3() { ip = net.IPv4zero + } else { + remoteLna := remoteAddr.ToLegacy() + if !IsIPv4(remoteLna) && !IsOnionCatTor(remoteLna) { + ip = net.IPv6zero + } else { + ip = net.IPv4zero + } } services := wire.SFNodeNetwork | wire.SFNodeWitness | wire.SFNodeBloom - bestAddress = wire.NewNetAddressIPPort(ip, 0, services) + bestAddress = wire.NetAddressV2FromBytes( + time.Now(), services, ip, 0, + ) } return bestAddress diff --git a/addrmgr/addrmanager_internal_test.go b/addrmgr/addrmanager_internal_test.go index 1c19dceb18..1d13f78e6e 100644 --- a/addrmgr/addrmanager_internal_test.go +++ b/addrmgr/addrmanager_internal_test.go @@ -6,12 +6,14 @@ import ( "net" "os" "testing" + "time" "github.com/btcsuite/btcd/wire" ) -// randAddr generates a *wire.NetAddress backed by a random IPv4/IPv6 address. -func randAddr(t *testing.T) *wire.NetAddress { +// randAddr generates a *wire.NetAddressV2 backed by a random IPv4/IPv6 +// address. +func randAddr(t *testing.T) *wire.NetAddressV2 { t.Helper() ipv4 := rand.Intn(2) == 0 @@ -30,22 +32,26 @@ func randAddr(t *testing.T) *wire.NetAddress { ip = b[:] } - return &wire.NetAddress{ - Services: wire.ServiceFlag(rand.Uint64()), - IP: ip, - Port: uint16(rand.Uint32()), - } + services := wire.ServiceFlag(rand.Uint64()) + port := uint16(rand.Uint32()) + + return wire.NetAddressV2FromBytes( + time.Now(), services, ip, port, + ) } // assertAddr ensures that the two addresses match. The timestamp is not // checked as it does not affect uniquely identifying a specific address. -func assertAddr(t *testing.T, got, expected *wire.NetAddress) { +func assertAddr(t *testing.T, got, expected *wire.NetAddressV2) { if got.Services != expected.Services { t.Fatalf("expected address services %v, got %v", expected.Services, got.Services) } - if !got.IP.Equal(expected.IP) { - t.Fatalf("expected address IP %v, got %v", expected.IP, got.IP) + gotAddr := got.Addr.String() + expectedAddr := expected.Addr.String() + if gotAddr != expectedAddr { + t.Fatalf("expected address IP %v, got %v", expectedAddr, + gotAddr) } if got.Port != expected.Port { t.Fatalf("expected address port %d, got %d", expected.Port, @@ -56,7 +62,7 @@ func assertAddr(t *testing.T, got, expected *wire.NetAddress) { // assertAddrs ensures that the manager's address cache matches the given // expected addresses. func assertAddrs(t *testing.T, addrMgr *AddrManager, - expectedAddrs map[string]*wire.NetAddress) { + expectedAddrs map[string]*wire.NetAddressV2) { t.Helper() @@ -96,7 +102,7 @@ func TestAddrManagerSerialization(t *testing.T) { // We'll be adding 5 random addresses to the manager. const numAddrs = 5 - expectedAddrs := make(map[string]*wire.NetAddress, numAddrs) + expectedAddrs := make(map[string]*wire.NetAddressV2, numAddrs) for i := 0; i < numAddrs; i++ { addr := randAddr(t) expectedAddrs[NetAddressKey(addr)] = addr @@ -141,7 +147,7 @@ func TestAddrManagerV1ToV2(t *testing.T) { // each addresses' services will not be stored. const numAddrs = 5 - expectedAddrs := make(map[string]*wire.NetAddress, numAddrs) + expectedAddrs := make(map[string]*wire.NetAddressV2, numAddrs) for i := 0; i < numAddrs; i++ { addr := randAddr(t) expectedAddrs[NetAddressKey(addr)] = addr diff --git a/addrmgr/addrmanager_test.go b/addrmgr/addrmanager_test.go index 676913e21e..4afe5fd601 100644 --- a/addrmgr/addrmanager_test.go +++ b/addrmgr/addrmanager_test.go @@ -19,7 +19,7 @@ import ( // naTest is used to describe a test to be performed against the NetAddressKey // method. type naTest struct { - in wire.NetAddress + in wire.NetAddressV2 want string } @@ -93,8 +93,10 @@ func addNaTests() { func addNaTest(ip string, port uint16, want string) { nip := net.ParseIP(ip) - na := *wire.NewNetAddressIPPort(nip, port, wire.SFNodeNetwork) - test := naTest{na, want} + na := wire.NetAddressV2FromBytes( + time.Now(), wire.SFNodeNetwork, nip, port, + ) + test := naTest{*na, want} naTests = append(naTests, test) } @@ -157,37 +159,49 @@ func TestAddAddressByIP(t *testing.T) { func TestAddLocalAddress(t *testing.T) { var tests = []struct { - address wire.NetAddress + address wire.NetAddressV2 priority addrmgr.AddressPriority valid bool }{ { - wire.NetAddress{IP: net.ParseIP("192.168.0.100")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("192.168.0.100"), 0, + ), addrmgr.InterfacePrio, false, }, { - wire.NetAddress{IP: net.ParseIP("204.124.1.1")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("204.124.1.1"), 0, + ), addrmgr.InterfacePrio, true, }, { - wire.NetAddress{IP: net.ParseIP("204.124.1.1")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("204.124.1.1"), 0, + ), addrmgr.BoundPrio, true, }, { - wire.NetAddress{IP: net.ParseIP("::1")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("::1"), 0, + ), addrmgr.InterfacePrio, false, }, { - wire.NetAddress{IP: net.ParseIP("fe80::1")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("fe80::1"), 0, + ), addrmgr.InterfacePrio, false, }, { - wire.NetAddress{IP: net.ParseIP("2620:100::1")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("2620:100::1"), 0, + ), addrmgr.InterfacePrio, true, }, @@ -197,12 +211,12 @@ func TestAddLocalAddress(t *testing.T) { result := amgr.AddLocalAddress(&test.address, test.priority) if result == nil && !test.valid { t.Errorf("TestAddLocalAddress test #%d failed: %s should have "+ - "been accepted", x, test.address.IP) + "been accepted", x, test.address.Addr.String()) continue } if result != nil && test.valid { t.Errorf("TestAddLocalAddress test #%d failed: %s should not have "+ - "been accepted", x, test.address.IP) + "been accepted", x, test.address.Addr.String()) continue } } @@ -257,7 +271,7 @@ func TestNeedMoreAddresses(t *testing.T) { if !b { t.Errorf("Expected that we need more addresses") } - addrs := make([]*wire.NetAddress, addrsToAdd) + addrs := make([]*wire.NetAddressV2, addrsToAdd) var err error for i := 0; i < addrsToAdd; i++ { @@ -268,7 +282,9 @@ func TestNeedMoreAddresses(t *testing.T) { } } - srcAddr := wire.NewNetAddressIPPort(net.IPv4(173, 144, 173, 111), 8333, 0) + srcAddr := wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4(173, 144, 173, 111), 8333, + ) n.AddAddresses(addrs, srcAddr) numAddrs := n.NumAddresses() @@ -285,7 +301,7 @@ func TestNeedMoreAddresses(t *testing.T) { func TestGood(t *testing.T) { n := addrmgr.New("testgood", lookupFunc) addrsToAdd := 64 * 64 - addrs := make([]*wire.NetAddress, addrsToAdd) + addrs := make([]*wire.NetAddressV2, addrsToAdd) var err error for i := 0; i < addrsToAdd; i++ { @@ -296,7 +312,9 @@ func TestGood(t *testing.T) { } } - srcAddr := wire.NewNetAddressIPPort(net.IPv4(173, 144, 173, 111), 8333, 0) + srcAddr := wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4(173, 144, 173, 111), 8333, + ) n.AddAddresses(addrs, srcAddr) for _, addr := range addrs { @@ -331,8 +349,8 @@ func TestGetAddress(t *testing.T) { if ka == nil { t.Fatalf("Did not get an address where there is one in the pool") } - if ka.NetAddress().IP.String() != someIP { - t.Errorf("Wrong IP: got %v, want %v", ka.NetAddress().IP.String(), someIP) + if ka.NetAddress().Addr.String() != someIP { + t.Errorf("Wrong IP: got %v, want %v", ka.NetAddress().Addr.String(), someIP) } // Mark this as a good address and get it @@ -341,8 +359,8 @@ func TestGetAddress(t *testing.T) { if ka == nil { t.Fatalf("Did not get an address where there is one in the pool") } - if ka.NetAddress().IP.String() != someIP { - t.Errorf("Wrong IP: got %v, want %v", ka.NetAddress().IP.String(), someIP) + if ka.NetAddress().Addr.String() != someIP { + t.Errorf("Wrong IP: got %v, want %v", ka.NetAddress().Addr.String(), someIP) } numAddrs := n.NumAddresses() @@ -352,43 +370,83 @@ func TestGetAddress(t *testing.T) { } func TestGetBestLocalAddress(t *testing.T) { - localAddrs := []wire.NetAddress{ - {IP: net.ParseIP("192.168.0.100")}, - {IP: net.ParseIP("::1")}, - {IP: net.ParseIP("fe80::1")}, - {IP: net.ParseIP("2001:470::1")}, + localAddrs := []wire.NetAddressV2{ + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("192.168.0.100"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("::1"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("fe80::1"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("2001:470::1"), 0, + ), } var tests = []struct { - remoteAddr wire.NetAddress - want0 wire.NetAddress - want1 wire.NetAddress - want2 wire.NetAddress - want3 wire.NetAddress + remoteAddr wire.NetAddressV2 + want0 wire.NetAddressV2 + want1 wire.NetAddressV2 + want2 wire.NetAddressV2 + want3 wire.NetAddressV2 }{ { // Remote connection from public IPv4 - wire.NetAddress{IP: net.ParseIP("204.124.8.1")}, - wire.NetAddress{IP: net.IPv4zero}, - wire.NetAddress{IP: net.IPv4zero}, - wire.NetAddress{IP: net.ParseIP("204.124.8.100")}, - wire.NetAddress{IP: net.ParseIP("fd87:d87e:eb43:25::1")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("204.124.8.1"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4zero, 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4zero, 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("204.124.8.100"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, + net.ParseIP("fd87:d87e:eb43:25::1"), 0, + ), }, { // Remote connection from private IPv4 - wire.NetAddress{IP: net.ParseIP("172.16.0.254")}, - wire.NetAddress{IP: net.IPv4zero}, - wire.NetAddress{IP: net.IPv4zero}, - wire.NetAddress{IP: net.IPv4zero}, - wire.NetAddress{IP: net.IPv4zero}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("172.16.0.254"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4zero, 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4zero, 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4zero, 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv4zero, 0, + ), }, { // Remote connection from public IPv6 - wire.NetAddress{IP: net.ParseIP("2602:100:abcd::102")}, - wire.NetAddress{IP: net.IPv6zero}, - wire.NetAddress{IP: net.ParseIP("2001:470::1")}, - wire.NetAddress{IP: net.ParseIP("2001:470::1")}, - wire.NetAddress{IP: net.ParseIP("2001:470::1")}, + *wire.NetAddressV2FromBytes( + time.Now(), 0, + net.ParseIP("2602:100:abcd::102"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.IPv6zero, 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("2001:470::1"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("2001:470::1"), 0, + ), + *wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("2001:470::1"), 0, + ), }, /* XXX { @@ -406,9 +464,12 @@ func TestGetBestLocalAddress(t *testing.T) { // Test against default when there's no address for x, test := range tests { got := amgr.GetBestLocalAddress(&test.remoteAddr) - if !test.want0.IP.Equal(got.IP) { + wantAddr := test.want0.Addr.String() + gotAddr := got.Addr.String() + if wantAddr != gotAddr { + remoteAddr := test.remoteAddr.Addr.String() t.Errorf("TestGetBestLocalAddress test1 #%d failed for remote address %s: want %s got %s", - x, test.remoteAddr.IP, test.want1.IP, got.IP) + x, remoteAddr, wantAddr, gotAddr) continue } } @@ -420,23 +481,31 @@ func TestGetBestLocalAddress(t *testing.T) { // Test against want1 for x, test := range tests { got := amgr.GetBestLocalAddress(&test.remoteAddr) - if !test.want1.IP.Equal(got.IP) { + wantAddr := test.want1.Addr.String() + gotAddr := got.Addr.String() + if wantAddr != gotAddr { + remoteAddr := test.remoteAddr.Addr.String() t.Errorf("TestGetBestLocalAddress test1 #%d failed for remote address %s: want %s got %s", - x, test.remoteAddr.IP, test.want1.IP, got.IP) + x, remoteAddr, wantAddr, gotAddr) continue } } // Add a public IP to the list of local addresses. - localAddr := wire.NetAddress{IP: net.ParseIP("204.124.8.100")} - amgr.AddLocalAddress(&localAddr, addrmgr.InterfacePrio) + localAddr := wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP("204.124.8.100"), 0, + ) + amgr.AddLocalAddress(localAddr, addrmgr.InterfacePrio) // Test against want2 for x, test := range tests { got := amgr.GetBestLocalAddress(&test.remoteAddr) - if !test.want2.IP.Equal(got.IP) { + wantAddr := test.want2.Addr.String() + gotAddr := got.Addr.String() + if wantAddr != gotAddr { + remoteAddr := test.remoteAddr.Addr.String() t.Errorf("TestGetBestLocalAddress test2 #%d failed for remote address %s: want %s got %s", - x, test.remoteAddr.IP, test.want2.IP, got.IP) + x, remoteAddr, wantAddr, gotAddr) continue } } diff --git a/addrmgr/internal_test.go b/addrmgr/internal_test.go index e50e923cf7..ab7644b6ca 100644 --- a/addrmgr/internal_test.go +++ b/addrmgr/internal_test.go @@ -18,7 +18,7 @@ func TstKnownAddressChance(ka *KnownAddress) float64 { return ka.chance() } -func TstNewKnownAddress(na *wire.NetAddress, attempts int, +func TstNewKnownAddress(na *wire.NetAddressV2, attempts int, lastattempt, lastsuccess time.Time, tried bool, refs int) *KnownAddress { return &KnownAddress{na: na, attempts: attempts, lastattempt: lastattempt, lastsuccess: lastsuccess, tried: tried, refs: refs} diff --git a/addrmgr/knownaddress.go b/addrmgr/knownaddress.go index 15469f374e..b045365508 100644 --- a/addrmgr/knownaddress.go +++ b/addrmgr/knownaddress.go @@ -5,6 +5,7 @@ package addrmgr import ( + "sync" "time" "github.com/btcsuite/btcd/wire" @@ -13,8 +14,9 @@ import ( // KnownAddress tracks information about a known network address that is used // to determine how viable an address is. type KnownAddress struct { - na *wire.NetAddress - srcAddr *wire.NetAddress + mtx sync.RWMutex // na and lastattempt + na *wire.NetAddressV2 + srcAddr *wire.NetAddressV2 attempts int lastattempt time.Time lastsuccess time.Time @@ -22,22 +24,31 @@ type KnownAddress struct { refs int // reference count of new buckets } -// NetAddress returns the underlying wire.NetAddress associated with the +// NetAddress returns the underlying wire.NetAddressV2 associated with the // known address. -func (ka *KnownAddress) NetAddress() *wire.NetAddress { +func (ka *KnownAddress) NetAddress() *wire.NetAddressV2 { + ka.mtx.RLock() + defer ka.mtx.RUnlock() return ka.na } // LastAttempt returns the last time the known address was attempted. func (ka *KnownAddress) LastAttempt() time.Time { + ka.mtx.RLock() + defer ka.mtx.RUnlock() return ka.lastattempt } // Services returns the services supported by the peer with the known address. func (ka *KnownAddress) Services() wire.ServiceFlag { + ka.mtx.RLock() + defer ka.mtx.RUnlock() return ka.na.Services } +// The unexported methods, chance and isBad, are used from within AddrManager +// where KnownAddress field access is synchronized via it's own Mutex. + // chance returns the selection probability for a known address. The priority // depends upon how recently the address has been seen, how recently it was last // attempted and how often attempts to connect to it have failed. diff --git a/addrmgr/knownaddress_test.go b/addrmgr/knownaddress_test.go index a289d5a386..b4a2650140 100644 --- a/addrmgr/knownaddress_test.go +++ b/addrmgr/knownaddress_test.go @@ -21,27 +21,27 @@ func TestChance(t *testing.T) { }{ { //Test normal case - addrmgr.TstNewKnownAddress(&wire.NetAddress{Timestamp: now.Add(-35 * time.Second)}, + addrmgr.TstNewKnownAddress(&wire.NetAddressV2{Timestamp: now.Add(-35 * time.Second)}, 0, time.Now().Add(-30*time.Minute), time.Now(), false, 0), 1.0, }, { //Test case in which lastseen < 0 - addrmgr.TstNewKnownAddress(&wire.NetAddress{Timestamp: now.Add(20 * time.Second)}, + addrmgr.TstNewKnownAddress(&wire.NetAddressV2{Timestamp: now.Add(20 * time.Second)}, 0, time.Now().Add(-30*time.Minute), time.Now(), false, 0), 1.0, }, { //Test case in which lastattempt < 0 - addrmgr.TstNewKnownAddress(&wire.NetAddress{Timestamp: now.Add(-35 * time.Second)}, + addrmgr.TstNewKnownAddress(&wire.NetAddressV2{Timestamp: now.Add(-35 * time.Second)}, 0, time.Now().Add(30*time.Minute), time.Now(), false, 0), 1.0 * .01, }, { //Test case in which lastattempt < ten minutes - addrmgr.TstNewKnownAddress(&wire.NetAddress{Timestamp: now.Add(-35 * time.Second)}, + addrmgr.TstNewKnownAddress(&wire.NetAddressV2{Timestamp: now.Add(-35 * time.Second)}, 0, time.Now().Add(-5*time.Minute), time.Now(), false, 0), 1.0 * .01, }, { //Test case with several failed attempts. - addrmgr.TstNewKnownAddress(&wire.NetAddress{Timestamp: now.Add(-35 * time.Second)}, + addrmgr.TstNewKnownAddress(&wire.NetAddressV2{Timestamp: now.Add(-35 * time.Second)}, 2, time.Now().Add(-30*time.Minute), time.Now(), false, 0), 1 / 1.5 / 1.5, }, @@ -65,10 +65,10 @@ func TestIsBad(t *testing.T) { hoursOld := now.Add(-5 * time.Hour) zeroTime := time.Time{} - futureNa := &wire.NetAddress{Timestamp: future} - minutesOldNa := &wire.NetAddress{Timestamp: minutesOld} - monthOldNa := &wire.NetAddress{Timestamp: monthOld} - currentNa := &wire.NetAddress{Timestamp: secondsOld} + futureNa := &wire.NetAddressV2{Timestamp: future} + minutesOldNa := &wire.NetAddressV2{Timestamp: minutesOld} + monthOldNa := &wire.NetAddressV2{Timestamp: monthOld} + currentNa := &wire.NetAddressV2{Timestamp: secondsOld} //Test addresses that have been tried in the last minute. if addrmgr.TstKnownAddressIsBad(addrmgr.TstNewKnownAddress(futureNa, 3, secondsOld, zeroTime, false, 0)) { diff --git a/addrmgr/network.go b/addrmgr/network.go index 51bfa3ed75..7f30901b21 100644 --- a/addrmgr/network.go +++ b/addrmgr/network.go @@ -222,11 +222,20 @@ func IsValid(na *wire.NetAddress) bool { // IsRoutable returns whether or not the passed address is routable over // the public internet. This is true as long as the address is valid and is not // in any reserved ranges. -func IsRoutable(na *wire.NetAddress) bool { - return IsValid(na) && !(IsRFC1918(na) || IsRFC2544(na) || - IsRFC3927(na) || IsRFC4862(na) || IsRFC3849(na) || - IsRFC4843(na) || IsRFC5737(na) || IsRFC6598(na) || - IsLocal(na) || (IsRFC4193(na) && !IsOnionCatTor(na))) +func IsRoutable(na *wire.NetAddressV2) bool { + if na.IsTorV3() { + // na is a torv3 address, return true. + return true + } + + // Else na can be represented as a legacy NetAddress since i2p and + // cjdns are unsupported. + lna := na.ToLegacy() + return IsValid(lna) && !(IsRFC1918(lna) || IsRFC2544(lna) || + IsRFC3927(lna) || IsRFC4862(lna) || IsRFC3849(lna) || + IsRFC4843(lna) || IsRFC5737(lna) || IsRFC6598(lna) || + IsLocal(lna) || (IsRFC4193(lna) && + !IsOnionCatTor(lna))) } // GroupKey returns a string representing the network group an address is part @@ -234,48 +243,56 @@ func IsRoutable(na *wire.NetAddress) bool { // "local" for a local address, the string "tor:key" where key is the /4 of the // onion address for Tor address, and the string "unroutable" for an unroutable // address. -func GroupKey(na *wire.NetAddress) string { - if IsLocal(na) { +func GroupKey(na *wire.NetAddressV2) string { + if na.IsTorV3() { + // na is a torv3 address. Use the same network group keying as + // for torv2. + return fmt.Sprintf("tor:%d", na.TorV3Key()&((1<<4)-1)) + } + + lna := na.ToLegacy() + + if IsLocal(lna) { return "local" } if !IsRoutable(na) { return "unroutable" } - if IsIPv4(na) { - return na.IP.Mask(net.CIDRMask(16, 32)).String() + if IsIPv4(lna) { + return lna.IP.Mask(net.CIDRMask(16, 32)).String() } - if IsRFC6145(na) || IsRFC6052(na) { + if IsRFC6145(lna) || IsRFC6052(lna) { // last four bytes are the ip address - ip := na.IP[12:16] + ip := lna.IP[12:16] return ip.Mask(net.CIDRMask(16, 32)).String() } - if IsRFC3964(na) { - ip := na.IP[2:6] + if IsRFC3964(lna) { + ip := lna.IP[2:6] return ip.Mask(net.CIDRMask(16, 32)).String() } - if IsRFC4380(na) { + if IsRFC4380(lna) { // teredo tunnels have the last 4 bytes as the v4 address XOR // 0xff. ip := net.IP(make([]byte, 4)) - for i, byte := range na.IP[12:16] { + for i, byte := range lna.IP[12:16] { ip[i] = byte ^ 0xff } return ip.Mask(net.CIDRMask(16, 32)).String() } - if IsOnionCatTor(na) { + if IsOnionCatTor(lna) { // group is keyed off the first 4 bits of the actual onion key. - return fmt.Sprintf("tor:%d", na.IP[6]&((1<<4)-1)) + return fmt.Sprintf("tor:%d", lna.IP[6]&((1<<4)-1)) } // OK, so now we know ourselves to be a IPv6 address. // bitcoind uses /32 for everything, except for Hurricane Electric's // (he.net) IP range, which it uses /36 for. bits := 32 - if heNet.Contains(na.IP) { + if heNet.Contains(lna.IP) { bits = 36 } - return na.IP.Mask(net.CIDRMask(bits, 128)).String() + return lna.IP.Mask(net.CIDRMask(bits, 128)).String() } diff --git a/addrmgr/network_test.go b/addrmgr/network_test.go index 8af3369f56..f4bc5d88f7 100644 --- a/addrmgr/network_test.go +++ b/addrmgr/network_test.go @@ -7,6 +7,7 @@ package addrmgr_test import ( "net" "testing" + "time" "github.com/btcsuite/btcd/addrmgr" "github.com/btcsuite/btcd/wire" @@ -136,7 +137,10 @@ func TestIPTypes(t *testing.T) { t.Errorf("IsValid %s\n got: %v want: %v", test.in.IP, rv, test.valid) } - if rv := addrmgr.IsRoutable(&test.in); rv != test.routable { + currentNa := wire.NetAddressV2FromBytes( + time.Now(), test.in.Services, test.in.IP, test.in.Port, + ) + if rv := addrmgr.IsRoutable(currentNa); rv != test.routable { t.Errorf("IsRoutable %s\n got: %v want: %v", test.in.IP, rv, test.routable) } } @@ -192,8 +196,10 @@ func TestGroupKey(t *testing.T) { for i, test := range tests { nip := net.ParseIP(test.ip) - na := *wire.NewNetAddressIPPort(nip, 8333, wire.SFNodeNetwork) - if key := addrmgr.GroupKey(&na); key != test.expected { + na := wire.NetAddressV2FromBytes( + time.Now(), wire.SFNodeNetwork, nip, 8333, + ) + if key := addrmgr.GroupKey(na); key != test.expected { t.Errorf("TestGroupKey #%d (%s): unexpected group key "+ "- got '%s', want '%s'", i, test.name, key, test.expected) diff --git a/blockchain/README.md b/blockchain/README.md index de5611bcae..2237780c10 100644 --- a/blockchain/README.md +++ b/blockchain/README.md @@ -1,9 +1,9 @@ blockchain ========== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/blockchain) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/blockchain) Package blockchain implements bitcoin block handling and chain selection rules. The test coverage is currently only around 60%, but will be increasing over @@ -61,18 +61,18 @@ is by no means exhaustive: ## Examples -* [ProcessBlock Example](http://godoc.org/github.com/btcsuite/btcd/blockchain#example-BlockChain-ProcessBlock) +* [ProcessBlock Example](https://pkg.go.dev/github.com/btcsuite/btcd/blockchain#example-BlockChain-ProcessBlock) Demonstrates how to create a new chain instance and use ProcessBlock to attempt to add a block to the chain. This example intentionally attempts to insert a duplicate genesis block to illustrate how an invalid block is handled. -* [CompactToBig Example](http://godoc.org/github.com/btcsuite/btcd/blockchain#example-CompactToBig) +* [CompactToBig Example](https://pkg.go.dev/github.com/btcsuite/btcd/blockchain#example-CompactToBig) Demonstrates how to convert the compact "bits" in a block header which represent the target difficulty to a big integer and display it using the typical hex notation. -* [BigToCompact Example](http://godoc.org/github.com/btcsuite/btcd/blockchain#example-BigToCompact) +* [BigToCompact Example](https://pkg.go.dev/github.com/btcsuite/btcd/blockchain#example-BigToCompact) Demonstrates how to convert a target difficulty into the compact "bits" in a block header which represent that target difficulty. diff --git a/blockchain/accept.go b/blockchain/accept.go index f85d6558e8..44ccbf997a 100644 --- a/blockchain/accept.go +++ b/blockchain/accept.go @@ -8,7 +8,7 @@ import ( "fmt" "github.com/btcsuite/btcd/database" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // maybeAcceptBlock potentially accepts a block into the block chain and, if diff --git a/blockchain/bench_test.go b/blockchain/bench_test.go index 43d3152b37..eee4340bc8 100644 --- a/blockchain/bench_test.go +++ b/blockchain/bench_test.go @@ -7,7 +7,7 @@ package blockchain import ( "testing" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // BenchmarkIsCoinBase performs a simple benchmark against the IsCoinBase diff --git a/blockchain/chain.go b/blockchain/chain.go index 71c1b2ee77..4d1a839441 100644 --- a/blockchain/chain.go +++ b/blockchain/chain.go @@ -11,12 +11,12 @@ import ( "sync" "time" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -174,11 +174,7 @@ type BlockChain struct { // // unknownRulesWarned refers to warnings due to unknown rules being // activated. - // - // unknownVersionsWarned refers to warnings due to unknown versions - // being mined. - unknownRulesWarned bool - unknownVersionsWarned bool + unknownRulesWarned bool // The notifications field stores a slice of callbacks to be executed on // certain blockchain events. @@ -574,20 +570,13 @@ func (b *BlockChain) connectBlock(node *blockNode, block *btcutil.Block, "spent transaction out information") } - // No warnings about unknown rules or versions until the chain is - // current. + // No warnings about unknown rules until the chain is current. if b.isCurrent() { // Warn if any unknown new rules are either about to activate or // have already been activated. if err := b.warnUnknownRuleActivations(node); err != nil { return err } - - // Warn if a high enough percentage of the last blocks have - // unexpected versions. - if err := b.warnUnknownVersions(node); err != nil { - return err - } } // Write any block status changes to DB before updating best state. @@ -1768,6 +1757,20 @@ func New(config *Config) (*BlockChain, error) { deploymentCaches: newThresholdCaches(chaincfg.DefinedDeployments), } + // Ensure all the deployments are synchronized with our clock if + // needed. + for _, deployment := range b.chainParams.Deployments { + deploymentStarter := deployment.DeploymentStarter + if clockStarter, ok := deploymentStarter.(chaincfg.ClockConsensusDeploymentStarter); ok { + clockStarter.SynchronizeClock(&b) + } + + deploymentEnder := deployment.DeploymentEnder + if clockEnder, ok := deploymentEnder.(chaincfg.ClockConsensusDeploymentEnder); ok { + clockEnder.SynchronizeClock(&b) + } + } + // Initialize the chain state from the passed database. When the db // does not yet contain any chain state, both it and the chain state // will be initialized to contain only the genesis block. diff --git a/blockchain/chain_test.go b/blockchain/chain_test.go index 7de323bc8d..34356326b9 100644 --- a/blockchain/chain_test.go +++ b/blockchain/chain_test.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // TestHaveBlock tests the HaveBlock API to ensure proper functionality. diff --git a/blockchain/chainio.go b/blockchain/chainio.go index 8d76d3ca94..fa41254da6 100644 --- a/blockchain/chainio.go +++ b/blockchain/chainio.go @@ -15,7 +15,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( @@ -120,7 +120,7 @@ func dbFetchVersion(dbTx database.Tx, key []byte) uint32 { return 0 } - return byteOrder.Uint32(serialized[:]) + return byteOrder.Uint32(serialized) } // dbPutVersion uses an existing database transaction to update the provided @@ -943,7 +943,7 @@ func serializeBestChainState(state bestChainState) []byte { byteOrder.PutUint32(serializedData[offset:], workSumBytesLen) offset += 4 copy(serializedData[offset:], workSumBytes) - return serializedData[:] + return serializedData } // deserializeBestChainState deserializes the passed serialized best chain @@ -1149,18 +1149,9 @@ func (b *BlockChain) initChainState() error { blockIndexBucket := dbTx.Metadata().Bucket(blockIndexBucketName) - // Determine how many blocks will be loaded into the index so we can - // allocate the right amount. - var blockCount int32 - cursor := blockIndexBucket.Cursor() - for ok := cursor.First(); ok; ok = cursor.Next() { - blockCount++ - } - blockNodes := make([]blockNode, blockCount) - var i int32 var lastNode *blockNode - cursor = blockIndexBucket.Cursor() + cursor := blockIndexBucket.Cursor() for ok := cursor.First(); ok; ok = cursor.Next() { header, status, err := deserializeBlockRow(cursor.Value()) if err != nil { @@ -1193,7 +1184,7 @@ func (b *BlockChain) initChainState() error { // Initialize the block node for the block, connect it, // and add it to the block index. - node := &blockNodes[i] + node := new(blockNode) initBlockNode(node, header, parent) node.status = status b.index.addNode(node) diff --git a/blockchain/checkpoints.go b/blockchain/checkpoints.go index af3b6d924e..dbfa9d146d 100644 --- a/blockchain/checkpoints.go +++ b/blockchain/checkpoints.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // CheckpointConfirmations is the number of blocks before the end of the current diff --git a/blockchain/common_test.go b/blockchain/common_test.go index dd392a6669..1973689ea1 100644 --- a/blockchain/common_test.go +++ b/blockchain/common_test.go @@ -14,13 +14,13 @@ import ( "strings" "time" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -357,7 +357,7 @@ func newFakeChain(params *chaincfg.Params) *BlockChain { targetTimespan := int64(params.TargetTimespan / time.Second) targetTimePerBlock := int64(params.TargetTimePerBlock / time.Second) adjustmentFactor := params.RetargetAdjustmentFactor - return &BlockChain{ + b := &BlockChain{ chainParams: params, timeSource: NewMedianTime(), minRetargetTimespan: targetTimespan / adjustmentFactor, @@ -368,6 +368,20 @@ func newFakeChain(params *chaincfg.Params) *BlockChain { warningCaches: newThresholdCaches(vbNumBits), deploymentCaches: newThresholdCaches(chaincfg.DefinedDeployments), } + + for _, deployment := range params.Deployments { + deploymentStarter := deployment.DeploymentStarter + if clockStarter, ok := deploymentStarter.(chaincfg.ClockConsensusDeploymentStarter); ok { + clockStarter.SynchronizeClock(b) + } + + deploymentEnder := deployment.DeploymentEnder + if clockEnder, ok := deploymentEnder.(chaincfg.ClockConsensusDeploymentEnder); ok { + clockEnder.SynchronizeClock(b) + } + } + + return b } // newFakeNode creates a block node connected to the passed parent with the diff --git a/blockchain/compress.go b/blockchain/compress.go index 611b9f0992..4495918558 100644 --- a/blockchain/compress.go +++ b/blockchain/compress.go @@ -5,7 +5,7 @@ package blockchain import ( - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/txscript" ) @@ -218,7 +218,7 @@ func isPubKey(script []byte) (bool, []byte) { // Ensure the public key is valid. serializedPubKey := script[1:34] - _, err := btcec.ParsePubKey(serializedPubKey, btcec.S256()) + _, err := btcec.ParsePubKey(serializedPubKey) if err == nil { return true, serializedPubKey } @@ -230,7 +230,7 @@ func isPubKey(script []byte) (bool, []byte) { // Ensure the public key is valid. serializedPubKey := script[1:66] - _, err := btcec.ParsePubKey(serializedPubKey, btcec.S256()) + _, err := btcec.ParsePubKey(serializedPubKey) if err == nil { return true, serializedPubKey } @@ -399,7 +399,7 @@ func decompressScript(compressedPkScript []byte) []byte { compressedKey := make([]byte, 33) compressedKey[0] = byte(encodedScriptSize - 2) copy(compressedKey[1:], compressedPkScript[1:]) - key, err := btcec.ParsePubKey(compressedKey, btcec.S256()) + key, err := btcec.ParsePubKey(compressedKey) if err != nil { return nil } diff --git a/blockchain/difficulty_test.go b/blockchain/difficulty_test.go index b42b7c730d..6fed37f136 100644 --- a/blockchain/difficulty_test.go +++ b/blockchain/difficulty_test.go @@ -63,7 +63,7 @@ func TestCalcWork(t *testing.T) { } for x, test := range tests { - bits := uint32(test.in) + bits := test.in r := CalcWork(bits) if r.Int64() != test.out { diff --git a/blockchain/example_test.go b/blockchain/example_test.go index 691d0927f2..7f15e59bc6 100644 --- a/blockchain/example_test.go +++ b/blockchain/example_test.go @@ -14,7 +14,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/database" _ "github.com/btcsuite/btcd/database/ffldb" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // This example demonstrates how to create a new chain instance and use diff --git a/blockchain/fullblocks_test.go b/blockchain/fullblocks_test.go index 3ae0d0eb51..3cc7c87b70 100644 --- a/blockchain/fullblocks_test.go +++ b/blockchain/fullblocks_test.go @@ -20,7 +20,7 @@ import ( _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/blockchain/fullblocktests/README.md b/blockchain/fullblocktests/README.md index 41f4b934e9..943989be35 100644 --- a/blockchain/fullblocktests/README.md +++ b/blockchain/fullblocktests/README.md @@ -1,9 +1,9 @@ fullblocktests ============== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/blockchain/fullblocktests) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/blockchain/fullblocktests) Package fullblocktests provides a set of full block tests to be used for testing the consensus validation rules. The tests are intended to be flexible enough to diff --git a/blockchain/fullblocktests/generate.go b/blockchain/fullblocktests/generate.go index 82d3a036e9..964986dbcf 100644 --- a/blockchain/fullblocktests/generate.go +++ b/blockchain/fullblocktests/generate.go @@ -19,12 +19,12 @@ import ( "time" "github.com/btcsuite/btcd/blockchain" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( @@ -198,7 +198,7 @@ type testGenerator struct { // makeTestGenerator returns a test generator instance initialized with the // genesis block as the tip. func makeTestGenerator(params *chaincfg.Params) (testGenerator, error) { - privKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), []byte{0x01}) + privKey, _ := btcec.PrivKeyFromBytes([]byte{0x01}) genesis := params.GenesisBlock genesisHash := genesis.BlockHash() return testGenerator{ diff --git a/blockchain/indexers/README.md b/blockchain/indexers/README.md index 20a721f3f2..f48491520a 100644 --- a/blockchain/indexers/README.md +++ b/blockchain/indexers/README.md @@ -1,9 +1,9 @@ indexers ======== -[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/blockchain/indexers?status.png)](http://godoc.org/github.com/btcsuite/btcd/blockchain/indexers) +[![GoDoc](https://pkg.go.dev/github.com/btcsuite/btcd/blockchain/indexers?status.png)](https://pkg.go.dev/github.com/btcsuite/btcd/blockchain/indexers) Package indexers implements optional block chain indexes. diff --git a/blockchain/indexers/addrindex.go b/blockchain/indexers/addrindex.go index 29d9030a2c..7e9f36f104 100644 --- a/blockchain/indexers/addrindex.go +++ b/blockchain/indexers/addrindex.go @@ -10,12 +10,12 @@ import ( "sync" "github.com/btcsuite/btcd/blockchain" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -63,6 +63,11 @@ const ( // script template, as well as a 32-byte data push. addrKeyTypeWitnessScriptHash = 3 + // addrKeyTypeTaprootPubKey is the address type in an address key that + // represnts a pay-to-taproot adress. We use this to denote addresses + // related to the segwit v1 that are encoded in the bech32m format. + addrKeyTypeTaprootPubKey = 4 + // Size of a transaction entry. It consists of 4 bytes block id + 4 // bytes offset + 4 bytes length. txEntrySize = 4 + 4 + 4 @@ -155,7 +160,9 @@ func serializeAddrIndexEntry(blockID uint32, txLoc wire.TxLoc) []byte { // provided region struct according to the format described in detail above and // uses the passed block hash fetching function in order to conver the block ID // to the associated block hash. -func deserializeAddrIndexEntry(serialized []byte, region *database.BlockRegion, fetchBlockHash fetchBlockHashFunc) error { +func deserializeAddrIndexEntry(serialized []byte, region *database.BlockRegion, + fetchBlockHash fetchBlockHashFunc) error { + // Ensure there are enough bytes to decode. if len(serialized) < txEntrySize { return errDeserialize("unexpected end of data") @@ -182,7 +189,9 @@ func keyForLevel(addrKey [addrKeySize]byte, level uint8) [levelKeySize]byte { // dbPutAddrIndexEntry updates the address index to include the provided entry // according to the level-based scheme described in detail above. -func dbPutAddrIndexEntry(bucket internalBucket, addrKey [addrKeySize]byte, blockID uint32, txLoc wire.TxLoc) error { +func dbPutAddrIndexEntry(bucket internalBucket, addrKey [addrKeySize]byte, + blockID uint32, txLoc wire.TxLoc) error { + // Start with level 0 and its initial max number of entries. curLevel := uint8(0) maxLevelBytes := level0MaxEntries * txEntrySize @@ -253,7 +262,10 @@ func dbPutAddrIndexEntry(bucket internalBucket, addrKey [addrKeySize]byte, block // the given address key and the number of entries skipped since it could have // been less in the case where there are less total entries than the requested // number of entries to skip. -func dbFetchAddrIndexEntries(bucket internalBucket, addrKey [addrKeySize]byte, numToSkip, numRequested uint32, reverse bool, fetchBlockHash fetchBlockHashFunc) ([]database.BlockRegion, uint32, error) { +func dbFetchAddrIndexEntries(bucket internalBucket, addrKey [addrKeySize]byte, + numToSkip, numRequested uint32, reverse bool, + fetchBlockHash fetchBlockHashFunc) ([]database.BlockRegion, uint32, error) { + // When the reverse flag is not set, all levels need to be fetched // because numToSkip and numRequested are counted from the oldest // transactions (highest level) and thus the total count is needed. @@ -356,7 +368,9 @@ func maxEntriesForLevel(level uint8) int { // dbRemoveAddrIndexEntries removes the specified number of entries from from // the address index for the provided key. An assertion error will be returned // if the count exceeds the total number of entries in the index. -func dbRemoveAddrIndexEntries(bucket internalBucket, addrKey [addrKeySize]byte, count int) error { +func dbRemoveAddrIndexEntries(bucket internalBucket, addrKey [addrKeySize]byte, + count int) error { + // Nothing to do if no entries are being deleted. if count <= 0 { return nil @@ -564,6 +578,16 @@ func addrToKey(addr btcutil.Address) ([addrKeySize]byte, error) { result[0] = addrKeyTypeWitnessPubKeyHash copy(result[1:], addr.Hash160()[:]) return result, nil + + case *btcutil.AddressTaproot: + var result [addrKeySize]byte + result[0] = addrKeyTypeTaprootPubKey + + // Taproot outputs are actually just the 32-byte public key. + // Similar to the P2WSH outputs, we'll map these to 20-bytes + // via the hash160. + copy(result[1:], btcutil.Hash160(addr.ScriptAddress())) + return result, nil } return [addrKeySize]byte{}, errUnsupportedAddressType @@ -796,7 +820,9 @@ func (idx *AddrIndex) DisconnectBlock(dbTx database.Tx, block *btcutil.Block, // that involve a given address. // // This function is safe for concurrent access. -func (idx *AddrIndex) TxRegionsForAddress(dbTx database.Tx, addr btcutil.Address, numToSkip, numRequested uint32, reverse bool) ([]database.BlockRegion, uint32, error) { +func (idx *AddrIndex) TxRegionsForAddress(dbTx database.Tx, addr btcutil.Address, + numToSkip, numRequested uint32, reverse bool) ([]database.BlockRegion, uint32, error) { + addrKey, err := addrToKey(addr) if err != nil { return nil, 0, err diff --git a/blockchain/indexers/addrindex_test.go b/blockchain/indexers/addrindex_test.go index 135ef19196..e545887f8b 100644 --- a/blockchain/indexers/addrindex_test.go +++ b/blockchain/indexers/addrindex_test.go @@ -68,7 +68,7 @@ func (b *addrIndexBucket) printLevels(addrKey [addrKeySize]byte) string { if !bytes.Equal(k[:levelOffset], addrKey[:]) { continue } - level := uint8(k[levelOffset]) + level := k[levelOffset] if level > highestLevel { highestLevel = level } @@ -105,7 +105,7 @@ func (b *addrIndexBucket) sanityCheck(addrKey [addrKeySize]byte, expectedTotal i if !bytes.Equal(k[:levelOffset], addrKey[:]) { continue } - level := uint8(k[levelOffset]) + level := k[levelOffset] if level > highestLevel { highestLevel = level } diff --git a/blockchain/indexers/blocklogger.go b/blockchain/indexers/blocklogger.go index 88d6f26998..3671c0162a 100644 --- a/blockchain/indexers/blocklogger.go +++ b/blockchain/indexers/blocklogger.go @@ -9,7 +9,7 @@ import ( "time" "github.com/btcsuite/btclog" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // blockProgressLogger provides periodic logging for other services in order diff --git a/blockchain/indexers/cfindex.go b/blockchain/indexers/cfindex.go index 8ea147282b..fa0ee3c0a6 100644 --- a/blockchain/indexers/cfindex.go +++ b/blockchain/indexers/cfindex.go @@ -12,9 +12,9 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/btcutil/gcs" - "github.com/btcsuite/btcutil/gcs/builder" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/gcs" + "github.com/btcsuite/btcd/btcutil/gcs/builder" ) const ( diff --git a/blockchain/indexers/common.go b/blockchain/indexers/common.go index a912bb4c70..07b2feca5d 100644 --- a/blockchain/indexers/common.go +++ b/blockchain/indexers/common.go @@ -13,7 +13,7 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/database" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) var ( diff --git a/blockchain/indexers/manager.go b/blockchain/indexers/manager.go index bc0804f8bd..8c87ca0771 100644 --- a/blockchain/indexers/manager.go +++ b/blockchain/indexers/manager.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) var ( diff --git a/blockchain/indexers/txindex.go b/blockchain/indexers/txindex.go index 00cfd00621..f1d734e06b 100644 --- a/blockchain/indexers/txindex.go +++ b/blockchain/indexers/txindex.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/blockchain/merkle.go b/blockchain/merkle.go index 8f3f6b97ea..d7e567b283 100644 --- a/blockchain/merkle.go +++ b/blockchain/merkle.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/blockchain/merkle_test.go b/blockchain/merkle_test.go index 275ffef37d..1a224586fa 100644 --- a/blockchain/merkle_test.go +++ b/blockchain/merkle_test.go @@ -7,7 +7,7 @@ package blockchain import ( "testing" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // TestMerkle tests the BuildMerkleTreeStore API. diff --git a/blockchain/process.go b/blockchain/process.go index 6d2161bb95..c367b4ceff 100644 --- a/blockchain/process.go +++ b/blockchain/process.go @@ -10,7 +10,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // BehaviorFlags is a bitmask defining tweaks to the normal behavior when diff --git a/blockchain/scriptval.go b/blockchain/scriptval.go index 8ba59a4214..614e030c86 100644 --- a/blockchain/scriptval.go +++ b/blockchain/scriptval.go @@ -10,9 +10,9 @@ import ( "runtime" "time" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // txValidateItem holds a transaction along with which input to validate. @@ -74,9 +74,11 @@ out: witness := txIn.Witness pkScript := utxo.PkScript() inputAmount := utxo.Amount() - vm, err := txscript.NewEngine(pkScript, txVI.tx.MsgTx(), - txVI.txInIndex, v.flags, v.sigCache, txVI.sigHashes, - inputAmount) + vm, err := txscript.NewEngine( + pkScript, txVI.tx.MsgTx(), txVI.txInIndex, + v.flags, v.sigCache, txVI.sigHashes, + inputAmount, v.utxoView, + ) if err != nil { str := fmt.Sprintf("failed to parse input "+ "%s:%d which references output %v - "+ @@ -201,7 +203,7 @@ func ValidateTransactionScripts(tx *btcutil.Tx, utxoView *UtxoViewpoint, // amongst all worker validation goroutines. if segwitActive && tx.MsgTx().HasWitness() && !hashCache.ContainsHashes(tx.Hash()) { - hashCache.AddSigHashes(tx.MsgTx()) + hashCache.AddSigHashes(tx.MsgTx(), utxoView) } var cachedHashes *txscript.TxSigHashes @@ -266,7 +268,7 @@ func checkBlockScripts(block *btcutil.Block, utxoView *UtxoViewpoint, if segwitActive && tx.HasWitness() && hashCache != nil && !hashCache.ContainsHashes(hash) { - hashCache.AddSigHashes(tx.MsgTx()) + hashCache.AddSigHashes(tx.MsgTx(), utxoView) } var cachedHashes *txscript.TxSigHashes @@ -274,7 +276,9 @@ func checkBlockScripts(block *btcutil.Block, utxoView *UtxoViewpoint, if hashCache != nil { cachedHashes, _ = hashCache.GetSigHashes(hash) } else { - cachedHashes = txscript.NewTxSigHashes(tx.MsgTx()) + cachedHashes = txscript.NewTxSigHashes( + tx.MsgTx(), utxoView, + ) } } diff --git a/blockchain/scriptval_test.go b/blockchain/scriptval_test.go index 56450b7a03..031f04801f 100644 --- a/blockchain/scriptval_test.go +++ b/blockchain/scriptval_test.go @@ -6,7 +6,6 @@ package blockchain import ( "fmt" - "runtime" "testing" "github.com/btcsuite/btcd/txscript" @@ -15,8 +14,6 @@ import ( // TestCheckBlockScripts ensures that validating the all of the scripts in a // known-good block doesn't return an error. func TestCheckBlockScripts(t *testing.T) { - runtime.GOMAXPROCS(runtime.NumCPU()) - testBlockNum := 277647 blockDataFile := fmt.Sprintf("%d.dat.bz2", testBlockNum) blocks, err := loadBlocks(blockDataFile) diff --git a/blockchain/thresholdstate.go b/blockchain/thresholdstate.go index 35a762552a..35653bf8fc 100644 --- a/blockchain/thresholdstate.go +++ b/blockchain/thresholdstate.go @@ -6,8 +6,10 @@ package blockchain import ( "fmt" + "time" "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" ) // ThresholdState define the various threshold states used when voting on @@ -66,14 +68,13 @@ func (t ThresholdState) String() string { // thresholdConditionChecker provides a generic interface that is invoked to // determine when a consensus rule change threshold should be changed. type thresholdConditionChecker interface { - // BeginTime returns the unix timestamp for the median block time after - // which voting on a rule change starts (at the next window). - BeginTime() uint64 + // HasStarted returns true if based on the passed block blockNode the + // consensus is eligible for deployment. + HasStarted(*blockNode) bool - // EndTime returns the unix timestamp for the median block time after - // which an attempted rule change fails if it has not already been - // locked in or activated. - EndTime() uint64 + // HasEnded returns true if the target consensus rule change has + // expired or timed out. + HasEnded(*blockNode) bool // RuleChangeActivationThreshold is the number of blocks for which the // condition must be true in order to lock in a rule change. @@ -83,10 +84,23 @@ type thresholdConditionChecker interface { // state retarget window. MinerConfirmationWindow() uint32 - // Condition returns whether or not the rule change activation condition - // has been met. This typically involves checking whether or not the - // bit associated with the condition is set, but can be more complex as - // needed. + // EligibleToActivate returns true if a custom deployment can + // transition from the LockedIn to the Active state. For normal + // deployments, this always returns true. However, some deployments add + // extra rules like a minimum activation height, which can be + // abstracted into a generic arbitrary check at the final state via + // this method. + EligibleToActivate(*blockNode) bool + + // IsSpeedy returns true if this is to be a "speedy" deployment. A + // speedy deployment differs from a regular one in that only after a + // miner block confirmation window can the deployment expire. + IsSpeedy() bool + + // Condition returns whether or not the rule change activation + // condition has been met. This typically involves checking whether or + // not the bit associated with the condition is set, but can be more + // complex as needed. Condition(*blockNode) (bool, error) } @@ -121,6 +135,145 @@ func newThresholdCaches(numCaches uint32) []thresholdStateCache { return caches } +// PastMedianTime returns the past median time from the PoV of the passed block +// header. The past median time is the median time of the 11 blocks prior to +// the passed block header. +// +// NOTE: This is part of the chainfg.BlockClock interface +func (b *BlockChain) PastMedianTime(blockHeader *wire.BlockHeader) (time.Time, error) { + prevHash := blockHeader.PrevBlock + prevNode := b.index.LookupNode(&prevHash) + + // If we can't find the previous node, then we can't compute the block + // time since it requires us to walk backwards from this node. + if prevNode == nil { + return time.Time{}, fmt.Errorf("blockHeader(%v) has no "+ + "previous node", blockHeader.BlockHash()) + } + + blockNode := newBlockNode(blockHeader, prevNode) + + return blockNode.CalcPastMedianTime(), nil +} + +// thresholdStateTransition given a state, a previous node, and a toeholds +// checker, this function transitions to the next state as defined by BIP 009. +// This state transition function is also aware of the "speedy trial" +// modifications made to BIP 0009 as part of the taproot softfork activation. +func thresholdStateTransition(state ThresholdState, prevNode *blockNode, + checker thresholdConditionChecker, + confirmationWindow int32) (ThresholdState, error) { + + switch state { + case ThresholdDefined: + // The deployment of the rule change fails if it + // expires before it is accepted and locked in. However + // speed deployments can only transition to failed + // after a confirmation window. + if !checker.IsSpeedy() && checker.HasEnded(prevNode) { + log.Debugf("Moving from state=%v, to state=%v", state, + ThresholdFailed) + + state = ThresholdFailed + break + } + + // The state for the rule moves to the started state + // once its start time has been reached (and it hasn't + // already expired per the above). + if checker.HasStarted(prevNode) { + log.Debugf("Moving from state=%v, to state=%v", state, + ThresholdStarted) + + state = ThresholdStarted + } + + case ThresholdStarted: + // The deployment of the rule change fails if it + // expires before it is accepted and locked in, but + // only if this deployment isn't speedy. + if !checker.IsSpeedy() && checker.HasEnded(prevNode) { + log.Debugf("Moving from state=%v, to state=%v", state, + ThresholdFailed) + + state = ThresholdFailed + break + } + + // At this point, the rule change is still being voted + // on by the miners, so iterate backwards through the + // confirmation window to count all of the votes in it. + var count uint32 + countNode := prevNode + for i := int32(0); i < confirmationWindow; i++ { + condition, err := checker.Condition(countNode) + if err != nil { + return ThresholdFailed, err + } + if condition { + count++ + } + + // Get the previous block node. + countNode = countNode.parent + } + + switch { + // The state is locked in if the number of blocks in the + // period that voted for the rule change meets the + // activation threshold. + case count >= checker.RuleChangeActivationThreshold(): + log.Debugf("Moving from state=%v, to state=%v", state, + ThresholdLockedIn) + + state = ThresholdLockedIn + + // If this is a speedy deployment, we didn't meet the + // threshold above, and the deployment has expired, then + // we transition to failed. + case checker.IsSpeedy() && checker.HasEnded(prevNode): + log.Debugf("Moving from state=%v, to state=%v", state, + ThresholdFailed) + + state = ThresholdFailed + + default: + log.Tracef("Still at state=%v, threshold=%v", state, + float64(count)/float64(checker.RuleChangeActivationThreshold())) + } + + case ThresholdLockedIn: + // At this point, we'll consult the deployment see if a + // custom deployment has any other arbitrary conditions + // that need to pass before execution. This might be a + // minimum activation height or another policy. + // + // If we aren't eligible to active yet, then we'll just + // stay in the locked in position. + if !checker.EligibleToActivate(prevNode) { + log.Debugf("Moving from state=%v, to state=%v", state, + ThresholdLockedIn) + + state = ThresholdLockedIn + } else { + log.Debugf("Moving from state=%v, to state=%v", state, + ThresholdActive) + + // The new rule becomes active when its + // previous state was locked in assuming it's + // now eligible to activate. + state = ThresholdActive + } + + // Nothing to do if the previous state is active or failed since + // they are both terminal states. + case ThresholdActive: + case ThresholdFailed: + } + + return state, nil +} + // thresholdState returns the current rule change threshold state for the block // AFTER the given node and deployment ID. The cache is used to ensure the // threshold states for previous windows are only calculated once. @@ -150,13 +303,9 @@ func (b *BlockChain) thresholdState(prevNode *blockNode, checker thresholdCondit break } - // The start and expiration times are based on the median block - // time, so calculate it now. - medianTime := prevNode.CalcPastMedianTime() - // The state is simply defined if the start time hasn't been // been reached yet. - if uint64(medianTime.Unix()) < checker.BeginTime() { + if !checker.HasStarted(prevNode) { cache.Update(&prevNode.hash, ThresholdDefined) break } @@ -185,70 +334,17 @@ func (b *BlockChain) thresholdState(prevNode *blockNode, checker thresholdCondit // Since each threshold state depends on the state of the previous // window, iterate starting from the oldest unknown window. + var err error for neededNum := len(neededStates) - 1; neededNum >= 0; neededNum-- { prevNode := neededStates[neededNum] - switch state { - case ThresholdDefined: - // The deployment of the rule change fails if it expires - // before it is accepted and locked in. - medianTime := prevNode.CalcPastMedianTime() - medianTimeUnix := uint64(medianTime.Unix()) - if medianTimeUnix >= checker.EndTime() { - state = ThresholdFailed - break - } - - // The state for the rule moves to the started state - // once its start time has been reached (and it hasn't - // already expired per the above). - if medianTimeUnix >= checker.BeginTime() { - state = ThresholdStarted - } - - case ThresholdStarted: - // The deployment of the rule change fails if it expires - // before it is accepted and locked in. - medianTime := prevNode.CalcPastMedianTime() - if uint64(medianTime.Unix()) >= checker.EndTime() { - state = ThresholdFailed - break - } - - // At this point, the rule change is still being voted - // on by the miners, so iterate backwards through the - // confirmation window to count all of the votes in it. - var count uint32 - countNode := prevNode - for i := int32(0); i < confirmationWindow; i++ { - condition, err := checker.Condition(countNode) - if err != nil { - return ThresholdFailed, err - } - if condition { - count++ - } - - // Get the previous block node. - countNode = countNode.parent - } - - // The state is locked in if the number of blocks in the - // period that voted for the rule change meets the - // activation threshold. - if count >= checker.RuleChangeActivationThreshold() { - state = ThresholdLockedIn - } - - case ThresholdLockedIn: - // The new rule becomes active when its previous state - // was locked in. - state = ThresholdActive - - // Nothing to do if the previous state is active or failed since - // they are both terminal states. - case ThresholdActive: - case ThresholdFailed: + // Based on the current state, the previous node, and the + // condition checker, transition to the next threshold state. + state, err = thresholdStateTransition( + state, prevNode, checker, confirmationWindow, + ) + if err != nil { + return state, err } // Update the cache to avoid recalculating the state in the @@ -310,7 +406,7 @@ func (b *BlockChain) deploymentState(prevNode *blockNode, deploymentID uint32) ( // initThresholdCaches initializes the threshold state caches for each warning // bit and defined deployment and provides warnings if the chain is current per -// the warnUnknownVersions and warnUnknownRuleActivations functions. +// the warnUnknownRuleActivations function. func (b *BlockChain) initThresholdCaches() error { // Initialize the warning and deployment caches by calculating the // threshold state for each of them. This will ensure the caches are @@ -335,15 +431,9 @@ func (b *BlockChain) initThresholdCaches() error { } } - // No warnings about unknown rules or versions until the chain is - // current. + // No warnings about unknown rules until the chain is current. if b.isCurrent() { - // Warn if a high enough percentage of the last blocks have - // unexpected versions. bestNode := b.bestChain.Tip() - if err := b.warnUnknownVersions(bestNode); err != nil { - return err - } // Warn if any unknown new rules are either about to activate or // have already been activated. diff --git a/blockchain/thresholdstate_test.go b/blockchain/thresholdstate_test.go index c65f5a4465..8d527137e3 100644 --- a/blockchain/thresholdstate_test.go +++ b/blockchain/thresholdstate_test.go @@ -132,3 +132,187 @@ nextTest: } } } + +type customDeploymentChecker struct { + started bool + ended bool + + eligible bool + + isSpeedy bool + + conditionTrue bool + + activationThreshold uint32 + minerWindow uint32 +} + +func (c customDeploymentChecker) HasStarted(_ *blockNode) bool { + return c.started +} + +func (c customDeploymentChecker) HasEnded(_ *blockNode) bool { + return c.ended +} + +func (c customDeploymentChecker) RuleChangeActivationThreshold() uint32 { + return c.activationThreshold +} + +func (c customDeploymentChecker) MinerConfirmationWindow() uint32 { + return c.minerWindow +} + +func (c customDeploymentChecker) EligibleToActivate(_ *blockNode) bool { + return c.eligible +} + +func (c customDeploymentChecker) IsSpeedy() bool { + return c.isSpeedy +} + +func (c customDeploymentChecker) Condition(_ *blockNode) (bool, error) { + return c.conditionTrue, nil +} + +// TestThresholdStateTransition tests that the thresholdStateTransition +// properly implements the BIP 009 state machine, along with the speedy trial +// augments. +func TestThresholdStateTransition(t *testing.T) { + t.Parallel() + + // Prev node always points back to itself, effectively creating an + // infinite chain for the purposes of this test. + prevNode := &blockNode{} + prevNode.parent = prevNode + + window := int32(2016) + + testCases := []struct { + currentState ThresholdState + nextState ThresholdState + + checker thresholdConditionChecker + }{ + // From defined, we stay there if we haven't started the + // window, and the window hasn't ended. + { + currentState: ThresholdDefined, + nextState: ThresholdDefined, + + checker: &customDeploymentChecker{}, + }, + + // From defined, we go to failed if the window has ended, and + // this isn't a speedy trial. + { + currentState: ThresholdDefined, + nextState: ThresholdFailed, + + checker: &customDeploymentChecker{ + ended: true, + }, + }, + + // From defined, even if the window has ended, we go to started + // if this isn't a speedy trial. + { + currentState: ThresholdDefined, + nextState: ThresholdStarted, + + checker: &customDeploymentChecker{ + started: true, + }, + }, + + // From started, we go to failed if this isn't speed, and the + // deployment has ended. + { + currentState: ThresholdStarted, + nextState: ThresholdFailed, + + checker: &customDeploymentChecker{ + ended: true, + }, + }, + + // From started, we go to locked in if the window passed the + // condition. + { + currentState: ThresholdStarted, + nextState: ThresholdLockedIn, + + checker: &customDeploymentChecker{ + started: true, + conditionTrue: true, + }, + }, + + // From started, we go to failed if this is a speedy trial, and + // the condition wasn't met in the window. + { + currentState: ThresholdStarted, + nextState: ThresholdFailed, + + checker: &customDeploymentChecker{ + started: true, + ended: true, + isSpeedy: true, + conditionTrue: false, + activationThreshold: 1815, + }, + }, + + // From locked in, we go straight to active is this isn't a + // speedy trial. + { + currentState: ThresholdLockedIn, + nextState: ThresholdActive, + + checker: &customDeploymentChecker{ + eligible: true, + }, + }, + + // From locked in, we remain in locked in if we're not yet + // eligible to activate. + { + currentState: ThresholdLockedIn, + nextState: ThresholdLockedIn, + + checker: &customDeploymentChecker{}, + }, + + // From active, we always stay here. + { + currentState: ThresholdActive, + nextState: ThresholdActive, + + checker: &customDeploymentChecker{}, + }, + + // From failed, we always stay here. + { + currentState: ThresholdFailed, + nextState: ThresholdFailed, + + checker: &customDeploymentChecker{}, + }, + } + for i, testCase := range testCases { + nextState, err := thresholdStateTransition( + testCase.currentState, prevNode, testCase.checker, + window, + ) + if err != nil { + t.Fatalf("#%v: unable to transition to next "+ + "state: %v", i, err) + } + + if nextState != testCase.nextState { + t.Fatalf("#%v: incorrect state transition: "+ + "expected %v got %v", i, testCase.nextState, + nextState) + } + } +} diff --git a/blockchain/utxoviewpoint.go b/blockchain/utxoviewpoint.go index 08005d27a1..3d1d513a3f 100644 --- a/blockchain/utxoviewpoint.go +++ b/blockchain/utxoviewpoint.go @@ -7,11 +7,11 @@ package blockchain import ( "fmt" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // txoFlags is a bitmask defining additional information and state for a @@ -111,6 +111,22 @@ func (entry *UtxoEntry) Clone() *UtxoEntry { } } +// NewUtxoEntry returns a new UtxoEntry built from the arguments. +func NewUtxoEntry( + txOut *wire.TxOut, blockHeight int32, isCoinbase bool) *UtxoEntry { + var cbFlag txoFlags + if isCoinbase { + cbFlag |= tfCoinBase + } + + return &UtxoEntry{ + amount: txOut.Value, + pkScript: txOut.PkScript, + blockHeight: blockHeight, + packedFlags: cbFlag, + } +} + // UtxoViewpoint represents a view into the set of unspent transaction outputs // from a specific point of view in the chain. For example, it could be for // the end of the main chain, some point in the history of the main chain, or @@ -143,6 +159,23 @@ func (view *UtxoViewpoint) LookupEntry(outpoint wire.OutPoint) *UtxoEntry { return view.entries[outpoint] } +// FetchPrevOutput fetches the previous output referenced by the passed +// outpoint. This is identical to the LookupEntry method, but it returns a +// wire.TxOut instead. +// +// NOTE: This is an implementation of the txscript.PrevOutputFetcher interface. +func (view *UtxoViewpoint) FetchPrevOutput(op wire.OutPoint) *wire.TxOut { + prevOut := view.entries[op] + if prevOut == nil { + return nil + } + + return &wire.TxOut{ + Value: prevOut.amount, + PkScript: prevOut.PkScript(), + } +} + // addTxOut adds the specified output to the view if it is not provably // unspendable. When the view already has an entry for the output, it will be // marked unspent. All fields will be updated for existing entries since it's diff --git a/blockchain/validate.go b/blockchain/validate.go index b971337fb5..89971e7fd6 100644 --- a/blockchain/validate.go +++ b/blockchain/validate.go @@ -11,11 +11,11 @@ import ( "math/big" "time" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -877,7 +877,6 @@ func CheckTransactionInputs(tx *btcutil.Tx, txHeight int32, utxoView *UtxoViewpo return 0, nil } - txHash := tx.Hash() var totalSatoshiIn int64 for txInIndex, txIn := range tx.MsgTx().TxIn { // Ensure the referenced input transaction is available. @@ -954,7 +953,7 @@ func CheckTransactionInputs(tx *btcutil.Tx, txHeight int32, utxoView *UtxoViewpo if totalSatoshiIn < totalSatoshiOut { str := fmt.Sprintf("total value of all transaction inputs for "+ "transaction %v is %v which is less than the amount "+ - "spent of %v", txHash, totalSatoshiIn, totalSatoshiOut) + "spent of %v", tx.Hash(), totalSatoshiIn, totalSatoshiOut) return 0, ruleError(ErrSpendTooHigh, str) } @@ -1219,6 +1218,18 @@ func (b *BlockChain) checkConnectBlock(node *blockNode, block *btcutil.Block, vi scriptFlags |= txscript.ScriptStrictMultiSig } + // Before we execute the main scripts, we'll also check to see if + // taproot is active or not. + taprootState, err := b.deploymentState( + node.parent, chaincfg.DeploymentTaproot, + ) + if err != nil { + return err + } + if taprootState == ThresholdActive { + scriptFlags |= txscript.ScriptVerifyTaproot + } + // Now that the inexpensive checks are done and have passed, verify the // transactions are actually allowed to spend the coins by running the // expensive ECDSA signature check scripts. Doing this last helps diff --git a/blockchain/validate_test.go b/blockchain/validate_test.go index 9bf2ff42e8..d5d17781d3 100644 --- a/blockchain/validate_test.go +++ b/blockchain/validate_test.go @@ -13,7 +13,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // TestSequenceLocksActive tests the SequenceLockActive function to ensure it diff --git a/blockchain/versionbits.go b/blockchain/versionbits.go index ef2a080257..371d4f20e0 100644 --- a/blockchain/versionbits.go +++ b/blockchain/versionbits.go @@ -5,8 +5,6 @@ package blockchain import ( - "math" - "github.com/btcsuite/btcd/chaincfg" ) @@ -26,15 +24,6 @@ const ( // vbNumBits is the total number of bits available for use with the // version bits scheme. vbNumBits = 29 - - // unknownVerNumToCheck is the number of previous blocks to consider - // when checking for a threshold of unknown block versions for the - // purposes of warning the user. - unknownVerNumToCheck = 100 - - // unknownVerWarnNum is the threshold of previous blocks that have an - // unknown version to use for the purposes of warning the user. - unknownVerWarnNum = unknownVerNumToCheck / 2 ) // bitConditionChecker provides a thresholdConditionChecker which can be used to @@ -51,27 +40,26 @@ type bitConditionChecker struct { // interface. var _ thresholdConditionChecker = bitConditionChecker{} -// BeginTime returns the unix timestamp for the median block time after which -// voting on a rule change starts (at the next window). +// HasStarted returns true if based on the passed block blockNode the consensus +// is eligible for deployment. // -// Since this implementation checks for unknown rules, it returns 0 so the rule +// Since this implementation checks for unknown rules, it returns true so // is always treated as active. // // This is part of the thresholdConditionChecker interface implementation. -func (c bitConditionChecker) BeginTime() uint64 { - return 0 +func (c bitConditionChecker) HasStarted(_ *blockNode) bool { + return true } -// EndTime returns the unix timestamp for the median block time after which an -// attempted rule change fails if it has not already been locked in or -// activated. +// HasStarted returns true if based on the passed block blockNode the consensus +// is eligible for deployment. // -// Since this implementation checks for unknown rules, it returns the maximum -// possible timestamp so the rule is always treated as active. +// Since this implementation checks for unknown rules, it returns false so the +// rule is always treated as active. // // This is part of the thresholdConditionChecker interface implementation. -func (c bitConditionChecker) EndTime() uint64 { - return math.MaxUint64 +func (c bitConditionChecker) HasEnded(_ *blockNode) bool { + return false } // RuleChangeActivationThreshold is the number of blocks for which the condition @@ -120,6 +108,32 @@ func (c bitConditionChecker) Condition(node *blockNode) (bool, error) { return uint32(expectedVersion)&conditionMask == 0, nil } +// EligibleToActivate returns true if a custom deployment can transition from +// the LockedIn to the Active state. For normal deployments, this always +// returns true. However, some deployments add extra rules like a minimum +// activation height, which can be abstracted into a generic arbitrary check at +// the final state via this method. +// +// This implementation always returns true, as it's used to warn about other +// unknown deployments. +// +// This is part of the thresholdConditionChecker interface implementation. +func (c bitConditionChecker) EligibleToActivate(blkNode *blockNode) bool { + return true +} + +// IsSpeedy returns true if this is to be a "speedy" deployment. A speedy +// deployment differs from a regular one in that only after a miner block +// confirmation window can the deployment expire. +// +// This implementation returns false, as we want to always be warned if +// something is about to activate. +// +// This is part of the thresholdConditionChecker interface implementation. +func (c bitConditionChecker) IsSpeedy() bool { + return false +} + // deploymentChecker provides a thresholdConditionChecker which can be used to // test a specific deployment rule. This is required for properly detecting // and activating consensus rule changes. @@ -132,27 +146,36 @@ type deploymentChecker struct { // interface. var _ thresholdConditionChecker = deploymentChecker{} -// BeginTime returns the unix timestamp for the median block time after which -// voting on a rule change starts (at the next window). +// HasEnded returns true if the target consensus rule change has expired +// or timed out (at the next window). // // This implementation returns the value defined by the specific deployment the // checker is associated with. // // This is part of the thresholdConditionChecker interface implementation. -func (c deploymentChecker) BeginTime() uint64 { - return c.deployment.StartTime +func (c deploymentChecker) HasStarted(blkNode *blockNode) bool { + // Can't fail as we make sure to set the clock above when we + // instantiate *BlockChain. + header := blkNode.Header() + started, _ := c.deployment.DeploymentStarter.HasStarted(&header) + + return started } -// EndTime returns the unix timestamp for the median block time after which an -// attempted rule change fails if it has not already been locked in or -// activated. +// HasEnded returns true if the target consensus rule change has expired +// or timed out. // // This implementation returns the value defined by the specific deployment the // checker is associated with. // // This is part of the thresholdConditionChecker interface implementation. -func (c deploymentChecker) EndTime() uint64 { - return c.deployment.ExpireTime +func (c deploymentChecker) HasEnded(blkNode *blockNode) bool { + // Can't fail as we make sure to set the clock above when we + // instantiate *BlockChain. + header := blkNode.Header() + ended, _ := c.deployment.DeploymentEnder.HasEnded(&header) + + return ended } // RuleChangeActivationThreshold is the number of blocks for which the condition @@ -163,6 +186,12 @@ func (c deploymentChecker) EndTime() uint64 { // // This is part of the thresholdConditionChecker interface implementation. func (c deploymentChecker) RuleChangeActivationThreshold() uint32 { + // Some deployments like taproot used a custom activation threshold + // that overrides the network level threshold. + if c.deployment.CustomActivationThreshold != 0 { + return c.deployment.CustomActivationThreshold + } + return c.chain.chainParams.RuleChangeActivationThreshold } @@ -177,6 +206,38 @@ func (c deploymentChecker) MinerConfirmationWindow() uint32 { return c.chain.chainParams.MinerConfirmationWindow } +// EligibleToActivate returns true if a custom deployment can transition from +// the LockedIn to the Active state. For normal deployments, this always +// returns true. However, some deployments add extra rules like a minimum +// activation height, which can be abstracted into a generic arbitrary check at +// the final state via this method. +// +// This implementation always returns true, unless a minimum activation height +// is specified. +// +// This is part of the thresholdConditionChecker interface implementation. +func (c deploymentChecker) EligibleToActivate(blkNode *blockNode) bool { + // No activation height, so it's always ready to go. + if c.deployment.MinActivationHeight == 0 { + return true + } + + // If the _next_ block (as this is the prior block to the one being + // connected is the min height or beyond, then this can activate. + return uint32(blkNode.height)+1 >= c.deployment.MinActivationHeight +} + +// IsSpeedy returns true if this is to be a "speedy" deployment. A speedy +// deployment differs from a regular one in that only after a miner block +// confirmation window can the deployment expire. This implementation returns +// true if a min activation height is set. +// +// This is part of the thresholdConditionChecker interface implementation. +func (c deploymentChecker) IsSpeedy() bool { + return (c.deployment.MinActivationHeight != 0 || + c.deployment.CustomActivationThreshold != 0) +} + // Condition returns true when the specific bit defined by the deployment // associated with the checker is set. // @@ -264,38 +325,3 @@ func (b *BlockChain) warnUnknownRuleActivations(node *blockNode) error { return nil } - -// warnUnknownVersions logs a warning if a high enough percentage of the last -// blocks have unexpected versions. -// -// This function MUST be called with the chain state lock held (for writes) -func (b *BlockChain) warnUnknownVersions(node *blockNode) error { - // Nothing to do if already warned. - if b.unknownVersionsWarned { - return nil - } - - // Warn if enough previous blocks have unexpected versions. - numUpgraded := uint32(0) - for i := uint32(0); i < unknownVerNumToCheck && node != nil; i++ { - expectedVersion, err := b.calcNextBlockVersion(node.parent) - if err != nil { - return err - } - if expectedVersion > vbLegacyBlockVersion && - (node.version & ^expectedVersion) != 0 { - - numUpgraded++ - } - - node = node.parent - } - if numUpgraded > unknownVerWarnNum { - log.Warn("Unknown block versions are being mined, so new " + - "rules might be in effect. Are you running the " + - "latest version of the software?") - b.unknownVersionsWarned = true - } - - return nil -} diff --git a/blockchain/weight.go b/blockchain/weight.go index 6f6292a1b6..1b691f0086 100644 --- a/blockchain/weight.go +++ b/blockchain/weight.go @@ -7,9 +7,9 @@ package blockchain import ( "fmt" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( diff --git a/btcd.go b/btcd.go index c17d6ab48a..aec55e06eb 100644 --- a/btcd.go +++ b/btcd.go @@ -18,6 +18,7 @@ import ( "github.com/btcsuite/btcd/blockchain/indexers" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/limits" + "github.com/btcsuite/btcd/ossec" ) const ( @@ -144,6 +145,16 @@ func btcdMain(serverChan chan<- *server) error { return nil } + // The config file is already created if it did not exist and the log + // file has already been opened by now so we only need to allow + // creating rpc cert and key files if they don't exist. + unveilx(cfg.RPCKey, "rwc") + unveilx(cfg.RPCCert, "rwc") + unveilx(cfg.DataDir, "rwc") + + // drop unveil and tty + pledgex("stdio rpath wpath cpath flock dns inet") + // Create server and start it. server, err := newServer(cfg.Listeners, cfg.AgentBlacklist, cfg.AgentWhitelist, db, activeNetParams.Params, interrupt) @@ -296,15 +307,35 @@ func loadBlockDB() (database.DB, error) { return db, nil } +func unveilx(path string, perms string) { + err := ossec.Unveil(path, perms) + if err != nil { + fmt.Fprintf(os.Stderr, "unveil failed: %v\n", err) + os.Exit(1) + } +} + +func pledgex(promises string) { + err := ossec.PledgePromises(promises) + if err != nil { + fmt.Fprintf(os.Stderr, "pledge failed: %v\n", err) + os.Exit(1) + } +} + +func init() { + pledgex("unveil stdio id rpath wpath cpath flock dns inet tty") +} + func main() { - // Use all processor cores. - runtime.GOMAXPROCS(runtime.NumCPU()) - - // Block and transaction processing can cause bursty allocations. This - // limits the garbage collector from excessively overallocating during - // bursts. This value was arrived at with the help of profiling live - // usage. - debug.SetGCPercent(10) + // If GOGC is not explicitly set, override GC percent. + if os.Getenv("GOGC") == "" { + // Block and transaction processing can cause bursty allocations. This + // limits the garbage collector from excessively overallocating during + // bursts. This value was arrived at with the help of profiling live + // usage. + debug.SetGCPercent(10) + } // Up some limits. if err := limits.SetLimits(); err != nil { diff --git a/btcec/README.md b/btcec/README.md index 130bd200a0..cbf63dd045 100644 --- a/btcec/README.md +++ b/btcec/README.md @@ -1,9 +1,9 @@ btcec ===== -[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcec) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/btcec?status.png)](http://godoc.org/github.com/btcsuite/btcd/btcec) +[![GoDoc](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2?status.png)](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2) Package btcec implements elliptic curve cryptography needed for working with Bitcoin (secp256k1 only for now). It is designed so that it may be used with the @@ -20,47 +20,19 @@ use secp256k1 elliptic curve cryptography. ## Installation and Updating ```bash -$ go get -u github.com/btcsuite/btcd/btcec +$ go install -u -v github.com/btcsuite/btcd/btcec/v2 ``` ## Examples -* [Sign Message](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--SignMessage) +* [Sign Message](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2#example-package--SignMessage) Demonstrates signing a message with a secp256k1 private key that is first parsed form raw bytes and serializing the generated signature. -* [Verify Signature](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--VerifySignature) +* [Verify Signature](https://pkg.go.dev/github.com/btcsuite/btcd/btcec/v2#example-package--VerifySignature) Demonstrates verifying a secp256k1 signature against a public key that is first parsed from raw bytes. The signature is also parsed from raw bytes. -* [Encryption](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--EncryptMessage) - Demonstrates encrypting a message for a public key that is first parsed from - raw bytes, then decrypting it using the corresponding private key. - -* [Decryption](http://godoc.org/github.com/btcsuite/btcd/btcec#example-package--DecryptMessage) - Demonstrates decrypting a message using a private key that is first parsed - from raw bytes. - -## GPG Verification Key - -All official release tags are signed by Conformal so users can ensure the code -has not been tampered with and is coming from the btcsuite developers. To -verify the signature perform the following: - -- Download the public key from the Conformal website at - https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt - -- Import the public key into your GPG keyring: - ```bash - gpg --import GIT-GPG-KEY-conformal.txt - ``` - -- Verify the release tag with the following command where `TAG_NAME` is a - placeholder for the specific tag: - ```bash - git tag -v TAG_NAME - ``` - ## License Package btcec is licensed under the [copyfree](http://copyfree.org) ISC License diff --git a/btcec/bench_test.go b/btcec/bench_test.go index 7ccd78cfb9..89e2bc2cce 100644 --- a/btcec/bench_test.go +++ b/btcec/bench_test.go @@ -6,43 +6,114 @@ package btcec import ( "encoding/hex" + "math/big" "testing" + + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" ) -// BenchmarkAddJacobian benchmarks the secp256k1 curve addJacobian function with +// setHex decodes the passed big-endian hex string into the internal field value +// representation. Only the first 32-bytes are used. +// +// This is NOT constant time. +// +// The field value is returned to support chaining. This enables syntax like: +// f := new(FieldVal).SetHex("0abc").Add(1) so that f = 0x0abc + 1 +func setHex(hexString string) *FieldVal { + if len(hexString)%2 != 0 { + hexString = "0" + hexString + } + bytes, _ := hex.DecodeString(hexString) + + var f FieldVal + f.SetByteSlice(bytes) + + return &f +} + +// hexToFieldVal converts the passed hex string into a FieldVal and will panic +// if there is an error. This is only provided for the hard-coded constants so +// errors in the source code can be detected. It will only (and must only) be +// called with hard-coded values. +func hexToFieldVal(s string) *FieldVal { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + var f FieldVal + if overflow := f.SetByteSlice(b); overflow { + panic("hex in source file overflows mod P: " + s) + } + return &f +} + +// fromHex converts the passed hex string into a big integer pointer and will +// panic is there is an error. This is only provided for the hard-coded +// constants so errors in the source code can bet detected. It will only (and +// must only) be called for initialization purposes. +func fromHex(s string) *big.Int { + if s == "" { + return big.NewInt(0) + } + r, ok := new(big.Int).SetString(s, 16) + if !ok { + panic("invalid hex in source file: " + s) + } + return r +} + +// jacobianPointFromHex decodes the passed big-endian hex strings into a +// Jacobian point with its internal fields set to the resulting values. Only +// the first 32-bytes are used. +func jacobianPointFromHex(x, y, z string) JacobianPoint { + var p JacobianPoint + p.X = *setHex(x) + p.Y = *setHex(y) + p.Z = *setHex(z) + + return p +} + +// BenchmarkAddNonConst benchmarks the secp256k1 curve AddNonConst function with // Z values of 1 so that the associated optimizations are used. func BenchmarkAddJacobian(b *testing.B) { - b.StopTimer() - x1 := new(fieldVal).SetHex("34f9460f0e4f08393d192b3c5133a6ba099aa0ad9fd54ebccfacdfa239ff49c6") - y1 := new(fieldVal).SetHex("0b71ea9bd730fd8923f6d25a7a91e7dd7728a960686cb5a901bb419e0f2ca232") - z1 := new(fieldVal).SetHex("1") - x2 := new(fieldVal).SetHex("34f9460f0e4f08393d192b3c5133a6ba099aa0ad9fd54ebccfacdfa239ff49c6") - y2 := new(fieldVal).SetHex("0b71ea9bd730fd8923f6d25a7a91e7dd7728a960686cb5a901bb419e0f2ca232") - z2 := new(fieldVal).SetHex("1") - x3, y3, z3 := new(fieldVal), new(fieldVal), new(fieldVal) - curve := S256() - b.StartTimer() + p1 := jacobianPointFromHex( + "34f9460f0e4f08393d192b3c5133a6ba099aa0ad9fd54ebccfacdfa239ff49c6", + "0b71ea9bd730fd8923f6d25a7a91e7dd7728a960686cb5a901bb419e0f2ca232", + "1", + ) + p2 := jacobianPointFromHex( + "34f9460f0e4f08393d192b3c5133a6ba099aa0ad9fd54ebccfacdfa239ff49c6", + "0b71ea9bd730fd8923f6d25a7a91e7dd7728a960686cb5a901bb419e0f2ca232", + "1", + ) + + b.ReportAllocs() + b.ResetTimer() + var result JacobianPoint for i := 0; i < b.N; i++ { - curve.addJacobian(x1, y1, z1, x2, y2, z2, x3, y3, z3) + secp.AddNonConst(&p1, &p2, &result) } } -// BenchmarkAddJacobianNotZOne benchmarks the secp256k1 curve addJacobian +// BenchmarkAddNonConstNotZOne benchmarks the secp256k1 curve AddNonConst // function with Z values other than one so the optimizations associated with // Z=1 aren't used. func BenchmarkAddJacobianNotZOne(b *testing.B) { - b.StopTimer() - x1 := new(fieldVal).SetHex("d3e5183c393c20e4f464acf144ce9ae8266a82b67f553af33eb37e88e7fd2718") - y1 := new(fieldVal).SetHex("5b8f54deb987ec491fb692d3d48f3eebb9454b034365ad480dda0cf079651190") - z1 := new(fieldVal).SetHex("2") - x2 := new(fieldVal).SetHex("91abba6a34b7481d922a4bd6a04899d5a686f6cf6da4e66a0cb427fb25c04bd4") - y2 := new(fieldVal).SetHex("03fede65e30b4e7576a2abefc963ddbf9fdccbf791b77c29beadefe49951f7d1") - z2 := new(fieldVal).SetHex("3") - x3, y3, z3 := new(fieldVal), new(fieldVal), new(fieldVal) - curve := S256() - b.StartTimer() + x1 := setHex("d3e5183c393c20e4f464acf144ce9ae8266a82b67f553af33eb37e88e7fd2718") + y1 := setHex("5b8f54deb987ec491fb692d3d48f3eebb9454b034365ad480dda0cf079651190") + z1 := setHex("2") + x2 := setHex("91abba6a34b7481d922a4bd6a04899d5a686f6cf6da4e66a0cb427fb25c04bd4") + y2 := setHex("03fede65e30b4e7576a2abefc963ddbf9fdccbf791b77c29beadefe49951f7d1") + z2 := setHex("3") + p1 := MakeJacobianPoint(x1, y1, z1) + p2 := MakeJacobianPoint(x2, y2, z2) + + b.ReportAllocs() + b.ResetTimer() + var result JacobianPoint for i := 0; i < b.N; i++ { - curve.addJacobian(x1, y1, z1, x2, y2, z2, x3, y3, z3) + AddNonConst(&p1, &p2, &result) } } @@ -77,49 +148,27 @@ func BenchmarkScalarMult(b *testing.B) { } } -// BenchmarkNAF benchmarks the NAF function. -func BenchmarkNAF(b *testing.B) { - k := fromHex("d74bf844b0862475103d96a611cf2d898447e288d34b360bc885cb8ce7c00575") - for i := 0; i < b.N; i++ { - NAF(k.Bytes()) +// hexToModNScalar converts the passed hex string into a ModNScalar and will +// panic if there is an error. This is only provided for the hard-coded +// constants so errors in the source code can be detected. It will only (and +// must only) be called with hard-coded values. +func hexToModNScalar(s string) *ModNScalar { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) } -} - -// BenchmarkSigVerify benchmarks how long it takes the secp256k1 curve to -// verify signatures. -func BenchmarkSigVerify(b *testing.B) { - b.StopTimer() - // Randomly generated keypair. - // Private key: 9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d - pubKey := PublicKey{ - Curve: S256(), - X: fromHex("d2e670a19c6d753d1a6d8b20bd045df8a08fb162cf508956c31268c6d81ffdab"), - Y: fromHex("ab65528eefbb8057aa85d597258a3fbd481a24633bc9b47a9aa045c91371de52"), - } - - // Double sha256 of []byte{0x01, 0x02, 0x03, 0x04} - msgHash := fromHex("8de472e2399610baaa7f84840547cd409434e31f5d3bd71e4d947f283874f9c0") - sig := Signature{ - R: fromHex("fef45d2892953aa5bbcdb057b5e98b208f1617a7498af7eb765574e29b5d9c2c"), - S: fromHex("d47563f52aac6b04b55de236b7c515eb9311757db01e02cff079c3ca6efb063f"), - } - - if !sig.Verify(msgHash.Bytes(), &pubKey) { - b.Errorf("Signature failed to verify") - return - } - b.StartTimer() - - for i := 0; i < b.N; i++ { - sig.Verify(msgHash.Bytes(), &pubKey) + var scalar ModNScalar + if overflow := scalar.SetByteSlice(b); overflow { + panic("hex in source file overflows mod N scalar: " + s) } + return &scalar } // BenchmarkFieldNormalize benchmarks how long it takes the internal field // to perform normalization (which includes modular reduction). func BenchmarkFieldNormalize(b *testing.B) { // The normalize function is constant time so default value is fine. - f := new(fieldVal) + var f FieldVal for i := 0; i < b.N; i++ { f.Normalize() } @@ -138,7 +187,7 @@ func BenchmarkParseCompressedPubKey(b *testing.B) { b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - pk, err = ParsePubKey(rawPk, S256()) + pk, err = ParsePubKey(rawPk) } _ = pk _ = err diff --git a/btcec/btcec.go b/btcec/btcec.go index de93a255a4..f85baba8c7 100644 --- a/btcec/btcec.go +++ b/btcec/btcec.go @@ -20,957 +20,37 @@ package btcec // reverse the transform than to operate in affine coordinates. import ( - "crypto/elliptic" - "math/big" - "sync" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" ) -var ( - // fieldOne is simply the integer 1 in field representation. It is - // used to avoid needing to create it multiple times during the internal - // arithmetic. - fieldOne = new(fieldVal).SetInt(1) -) - -// KoblitzCurve supports a koblitz curve implementation that fits the ECC Curve -// interface from crypto/elliptic. -type KoblitzCurve struct { - *elliptic.CurveParams - - // q is the value (P+1)/4 used to compute the square root of field - // elements. - q *big.Int - - H int // cofactor of the curve. - halfOrder *big.Int // half the order N - - // fieldB is the constant B of the curve as a fieldVal. - fieldB *fieldVal - - // byteSize is simply the bit size / 8 and is provided for convenience - // since it is calculated repeatedly. - byteSize int - - // bytePoints - bytePoints *[32][256][3]fieldVal - - // The next 6 values are used specifically for endomorphism - // optimizations in ScalarMult. - - // lambda must fulfill lambda^3 = 1 mod N where N is the order of G. - lambda *big.Int - - // beta must fulfill beta^3 = 1 mod P where P is the prime field of the - // curve. - beta *fieldVal - - // See the EndomorphismVectors in gensecp256k1.go to see how these are - // derived. - a1 *big.Int - b1 *big.Int - a2 *big.Int - b2 *big.Int -} - -// Params returns the parameters for the curve. -func (curve *KoblitzCurve) Params() *elliptic.CurveParams { - return curve.CurveParams -} - -// bigAffineToField takes an affine point (x, y) as big integers and converts -// it to an affine point as field values. -func (curve *KoblitzCurve) bigAffineToField(x, y *big.Int) (*fieldVal, *fieldVal) { - x3, y3 := new(fieldVal), new(fieldVal) - x3.SetByteSlice(x.Bytes()) - y3.SetByteSlice(y.Bytes()) - - return x3, y3 -} - -// fieldJacobianToBigAffine takes a Jacobian point (x, y, z) as field values and -// converts it to an affine point as big integers. -func (curve *KoblitzCurve) fieldJacobianToBigAffine(x, y, z *fieldVal) (*big.Int, *big.Int) { - // Inversions are expensive and both point addition and point doubling - // are faster when working with points that have a z value of one. So, - // if the point needs to be converted to affine, go ahead and normalize - // the point itself at the same time as the calculation is the same. - var zInv, tempZ fieldVal - zInv.Set(z).Inverse() // zInv = Z^-1 - tempZ.SquareVal(&zInv) // tempZ = Z^-2 - x.Mul(&tempZ) // X = X/Z^2 (mag: 1) - y.Mul(tempZ.Mul(&zInv)) // Y = Y/Z^3 (mag: 1) - z.SetInt(1) // Z = 1 (mag: 1) - - // Normalize the x and y values. - x.Normalize() - y.Normalize() - - // Convert the field values for the now affine point to big.Ints. - x3, y3 := new(big.Int), new(big.Int) - x3.SetBytes(x.Bytes()[:]) - y3.SetBytes(y.Bytes()[:]) - return x3, y3 -} - -// IsOnCurve returns boolean if the point (x,y) is on the curve. -// Part of the elliptic.Curve interface. This function differs from the -// crypto/elliptic algorithm since a = 0 not -3. -func (curve *KoblitzCurve) IsOnCurve(x, y *big.Int) bool { - // Convert big ints to field values for faster arithmetic. - fx, fy := curve.bigAffineToField(x, y) - - // Elliptic curve equation for secp256k1 is: y^2 = x^3 + 7 - y2 := new(fieldVal).SquareVal(fy).Normalize() - result := new(fieldVal).SquareVal(fx).Mul(fx).AddInt(7).Normalize() - return y2.Equals(result) -} - -// addZ1AndZ2EqualsOne adds two Jacobian points that are already known to have -// z values of 1 and stores the result in (x3, y3, z3). That is to say -// (x1, y1, 1) + (x2, y2, 1) = (x3, y3, z3). It performs faster addition than -// the generic add routine since less arithmetic is needed due to the ability to -// avoid the z value multiplications. -func (curve *KoblitzCurve) addZ1AndZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) { - // To compute the point addition efficiently, this implementation splits - // the equation into intermediate elements which are used to minimize - // the number of field multiplications using the method shown at: - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl - // - // In particular it performs the calculations using the following: - // H = X2-X1, HH = H^2, I = 4*HH, J = H*I, r = 2*(Y2-Y1), V = X1*I - // X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = 2*H - // - // This results in a cost of 4 field multiplications, 2 field squarings, - // 6 field additions, and 5 integer multiplications. - - // When the x coordinates are the same for two points on the curve, the - // y coordinates either must be the same, in which case it is point - // doubling, or they are opposite and the result is the point at - // infinity per the group law for elliptic curve cryptography. - x1.Normalize() - y1.Normalize() - x2.Normalize() - y2.Normalize() - if x1.Equals(x2) { - if y1.Equals(y2) { - // Since x1 == x2 and y1 == y2, point doubling must be - // done, otherwise the addition would end up dividing - // by zero. - curve.doubleJacobian(x1, y1, z1, x3, y3, z3) - return - } - - // Since x1 == x2 and y1 == -y2, the sum is the point at - // infinity per the group law. - x3.SetInt(0) - y3.SetInt(0) - z3.SetInt(0) - return - } - - // Calculate X3, Y3, and Z3 according to the intermediate elements - // breakdown above. - var h, i, j, r, v fieldVal - var negJ, neg2V, negX3 fieldVal - h.Set(x1).Negate(1).Add(x2) // H = X2-X1 (mag: 3) - i.SquareVal(&h).MulInt(4) // I = 4*H^2 (mag: 4) - j.Mul2(&h, &i) // J = H*I (mag: 1) - r.Set(y1).Negate(1).Add(y2).MulInt(2) // r = 2*(Y2-Y1) (mag: 6) - v.Mul2(x1, &i) // V = X1*I (mag: 1) - negJ.Set(&j).Negate(1) // negJ = -J (mag: 2) - neg2V.Set(&v).MulInt(2).Negate(2) // neg2V = -(2*V) (mag: 3) - x3.Set(&r).Square().Add(&negJ).Add(&neg2V) // X3 = r^2-J-2*V (mag: 6) - negX3.Set(x3).Negate(6) // negX3 = -X3 (mag: 7) - j.Mul(y1).MulInt(2).Negate(2) // J = -(2*Y1*J) (mag: 3) - y3.Set(&v).Add(&negX3).Mul(&r).Add(&j) // Y3 = r*(V-X3)-2*Y1*J (mag: 4) - z3.Set(&h).MulInt(2) // Z3 = 2*H (mag: 6) - - // Normalize the resulting field values to a magnitude of 1 as needed. - x3.Normalize() - y3.Normalize() - z3.Normalize() -} - -// addZ1EqualsZ2 adds two Jacobian points that are already known to have the -// same z value and stores the result in (x3, y3, z3). That is to say -// (x1, y1, z1) + (x2, y2, z1) = (x3, y3, z3). It performs faster addition than -// the generic add routine since less arithmetic is needed due to the known -// equivalence. -func (curve *KoblitzCurve) addZ1EqualsZ2(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) { - // To compute the point addition efficiently, this implementation splits - // the equation into intermediate elements which are used to minimize - // the number of field multiplications using a slightly modified version - // of the method shown at: - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-mmadd-2007-bl - // - // In particular it performs the calculations using the following: - // A = X2-X1, B = A^2, C=Y2-Y1, D = C^2, E = X1*B, F = X2*B - // X3 = D-E-F, Y3 = C*(E-X3)-Y1*(F-E), Z3 = Z1*A - // - // This results in a cost of 5 field multiplications, 2 field squarings, - // 9 field additions, and 0 integer multiplications. - - // When the x coordinates are the same for two points on the curve, the - // y coordinates either must be the same, in which case it is point - // doubling, or they are opposite and the result is the point at - // infinity per the group law for elliptic curve cryptography. - x1.Normalize() - y1.Normalize() - x2.Normalize() - y2.Normalize() - if x1.Equals(x2) { - if y1.Equals(y2) { - // Since x1 == x2 and y1 == y2, point doubling must be - // done, otherwise the addition would end up dividing - // by zero. - curve.doubleJacobian(x1, y1, z1, x3, y3, z3) - return - } - - // Since x1 == x2 and y1 == -y2, the sum is the point at - // infinity per the group law. - x3.SetInt(0) - y3.SetInt(0) - z3.SetInt(0) - return - } - - // Calculate X3, Y3, and Z3 according to the intermediate elements - // breakdown above. - var a, b, c, d, e, f fieldVal - var negX1, negY1, negE, negX3 fieldVal - negX1.Set(x1).Negate(1) // negX1 = -X1 (mag: 2) - negY1.Set(y1).Negate(1) // negY1 = -Y1 (mag: 2) - a.Set(&negX1).Add(x2) // A = X2-X1 (mag: 3) - b.SquareVal(&a) // B = A^2 (mag: 1) - c.Set(&negY1).Add(y2) // C = Y2-Y1 (mag: 3) - d.SquareVal(&c) // D = C^2 (mag: 1) - e.Mul2(x1, &b) // E = X1*B (mag: 1) - negE.Set(&e).Negate(1) // negE = -E (mag: 2) - f.Mul2(x2, &b) // F = X2*B (mag: 1) - x3.Add2(&e, &f).Negate(3).Add(&d) // X3 = D-E-F (mag: 5) - negX3.Set(x3).Negate(5).Normalize() // negX3 = -X3 (mag: 1) - y3.Set(y1).Mul(f.Add(&negE)).Negate(3) // Y3 = -(Y1*(F-E)) (mag: 4) - y3.Add(e.Add(&negX3).Mul(&c)) // Y3 = C*(E-X3)+Y3 (mag: 5) - z3.Mul2(z1, &a) // Z3 = Z1*A (mag: 1) - - // Normalize the resulting field values to a magnitude of 1 as needed. - x3.Normalize() - y3.Normalize() -} - -// addZ2EqualsOne adds two Jacobian points when the second point is already -// known to have a z value of 1 (and the z value for the first point is not 1) -// and stores the result in (x3, y3, z3). That is to say (x1, y1, z1) + -// (x2, y2, 1) = (x3, y3, z3). It performs faster addition than the generic -// add routine since less arithmetic is needed due to the ability to avoid -// multiplications by the second point's z value. -func (curve *KoblitzCurve) addZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3 *fieldVal) { - // To compute the point addition efficiently, this implementation splits - // the equation into intermediate elements which are used to minimize - // the number of field multiplications using the method shown at: - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-madd-2007-bl - // - // In particular it performs the calculations using the following: - // Z1Z1 = Z1^2, U2 = X2*Z1Z1, S2 = Y2*Z1*Z1Z1, H = U2-X1, HH = H^2, - // I = 4*HH, J = H*I, r = 2*(S2-Y1), V = X1*I - // X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*Y1*J, Z3 = (Z1+H)^2-Z1Z1-HH - // - // This results in a cost of 7 field multiplications, 4 field squarings, - // 9 field additions, and 4 integer multiplications. - - // When the x coordinates are the same for two points on the curve, the - // y coordinates either must be the same, in which case it is point - // doubling, or they are opposite and the result is the point at - // infinity per the group law for elliptic curve cryptography. Since - // any number of Jacobian coordinates can represent the same affine - // point, the x and y values need to be converted to like terms. Due to - // the assumption made for this function that the second point has a z - // value of 1 (z2=1), the first point is already "converted". - var z1z1, u2, s2 fieldVal - x1.Normalize() - y1.Normalize() - z1z1.SquareVal(z1) // Z1Z1 = Z1^2 (mag: 1) - u2.Set(x2).Mul(&z1z1).Normalize() // U2 = X2*Z1Z1 (mag: 1) - s2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1) - if x1.Equals(&u2) { - if y1.Equals(&s2) { - // Since x1 == x2 and y1 == y2, point doubling must be - // done, otherwise the addition would end up dividing - // by zero. - curve.doubleJacobian(x1, y1, z1, x3, y3, z3) - return - } - - // Since x1 == x2 and y1 == -y2, the sum is the point at - // infinity per the group law. - x3.SetInt(0) - y3.SetInt(0) - z3.SetInt(0) - return - } - - // Calculate X3, Y3, and Z3 according to the intermediate elements - // breakdown above. - var h, hh, i, j, r, rr, v fieldVal - var negX1, negY1, negX3 fieldVal - negX1.Set(x1).Negate(1) // negX1 = -X1 (mag: 2) - h.Add2(&u2, &negX1) // H = U2-X1 (mag: 3) - hh.SquareVal(&h) // HH = H^2 (mag: 1) - i.Set(&hh).MulInt(4) // I = 4 * HH (mag: 4) - j.Mul2(&h, &i) // J = H*I (mag: 1) - negY1.Set(y1).Negate(1) // negY1 = -Y1 (mag: 2) - r.Set(&s2).Add(&negY1).MulInt(2) // r = 2*(S2-Y1) (mag: 6) - rr.SquareVal(&r) // rr = r^2 (mag: 1) - v.Mul2(x1, &i) // V = X1*I (mag: 1) - x3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4) - x3.Add(&rr) // X3 = r^2+X3 (mag: 5) - negX3.Set(x3).Negate(5) // negX3 = -X3 (mag: 6) - y3.Set(y1).Mul(&j).MulInt(2).Negate(2) // Y3 = -(2*Y1*J) (mag: 3) - y3.Add(v.Add(&negX3).Mul(&r)) // Y3 = r*(V-X3)+Y3 (mag: 4) - z3.Add2(z1, &h).Square() // Z3 = (Z1+H)^2 (mag: 1) - z3.Add(z1z1.Add(&hh).Negate(2)) // Z3 = Z3-(Z1Z1+HH) (mag: 4) - - // Normalize the resulting field values to a magnitude of 1 as needed. - x3.Normalize() - y3.Normalize() - z3.Normalize() -} - -// addGeneric adds two Jacobian points (x1, y1, z1) and (x2, y2, z2) without any -// assumptions about the z values of the two points and stores the result in -// (x3, y3, z3). That is to say (x1, y1, z1) + (x2, y2, z2) = (x3, y3, z3). It -// is the slowest of the add routines due to requiring the most arithmetic. -func (curve *KoblitzCurve) addGeneric(x1, y1, z1, x2, y2, z2, x3, y3, z3 *fieldVal) { - // To compute the point addition efficiently, this implementation splits - // the equation into intermediate elements which are used to minimize - // the number of field multiplications using the method shown at: - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#addition-add-2007-bl - // - // In particular it performs the calculations using the following: - // Z1Z1 = Z1^2, Z2Z2 = Z2^2, U1 = X1*Z2Z2, U2 = X2*Z1Z1, S1 = Y1*Z2*Z2Z2 - // S2 = Y2*Z1*Z1Z1, H = U2-U1, I = (2*H)^2, J = H*I, r = 2*(S2-S1) - // V = U1*I - // X3 = r^2-J-2*V, Y3 = r*(V-X3)-2*S1*J, Z3 = ((Z1+Z2)^2-Z1Z1-Z2Z2)*H - // - // This results in a cost of 11 field multiplications, 5 field squarings, - // 9 field additions, and 4 integer multiplications. - - // When the x coordinates are the same for two points on the curve, the - // y coordinates either must be the same, in which case it is point - // doubling, or they are opposite and the result is the point at - // infinity. Since any number of Jacobian coordinates can represent the - // same affine point, the x and y values need to be converted to like - // terms. - var z1z1, z2z2, u1, u2, s1, s2 fieldVal - z1z1.SquareVal(z1) // Z1Z1 = Z1^2 (mag: 1) - z2z2.SquareVal(z2) // Z2Z2 = Z2^2 (mag: 1) - u1.Set(x1).Mul(&z2z2).Normalize() // U1 = X1*Z2Z2 (mag: 1) - u2.Set(x2).Mul(&z1z1).Normalize() // U2 = X2*Z1Z1 (mag: 1) - s1.Set(y1).Mul(&z2z2).Mul(z2).Normalize() // S1 = Y1*Z2*Z2Z2 (mag: 1) - s2.Set(y2).Mul(&z1z1).Mul(z1).Normalize() // S2 = Y2*Z1*Z1Z1 (mag: 1) - if u1.Equals(&u2) { - if s1.Equals(&s2) { - // Since x1 == x2 and y1 == y2, point doubling must be - // done, otherwise the addition would end up dividing - // by zero. - curve.doubleJacobian(x1, y1, z1, x3, y3, z3) - return - } - - // Since x1 == x2 and y1 == -y2, the sum is the point at - // infinity per the group law. - x3.SetInt(0) - y3.SetInt(0) - z3.SetInt(0) - return - } - - // Calculate X3, Y3, and Z3 according to the intermediate elements - // breakdown above. - var h, i, j, r, rr, v fieldVal - var negU1, negS1, negX3 fieldVal - negU1.Set(&u1).Negate(1) // negU1 = -U1 (mag: 2) - h.Add2(&u2, &negU1) // H = U2-U1 (mag: 3) - i.Set(&h).MulInt(2).Square() // I = (2*H)^2 (mag: 2) - j.Mul2(&h, &i) // J = H*I (mag: 1) - negS1.Set(&s1).Negate(1) // negS1 = -S1 (mag: 2) - r.Set(&s2).Add(&negS1).MulInt(2) // r = 2*(S2-S1) (mag: 6) - rr.SquareVal(&r) // rr = r^2 (mag: 1) - v.Mul2(&u1, &i) // V = U1*I (mag: 1) - x3.Set(&v).MulInt(2).Add(&j).Negate(3) // X3 = -(J+2*V) (mag: 4) - x3.Add(&rr) // X3 = r^2+X3 (mag: 5) - negX3.Set(x3).Negate(5) // negX3 = -X3 (mag: 6) - y3.Mul2(&s1, &j).MulInt(2).Negate(2) // Y3 = -(2*S1*J) (mag: 3) - y3.Add(v.Add(&negX3).Mul(&r)) // Y3 = r*(V-X3)+Y3 (mag: 4) - z3.Add2(z1, z2).Square() // Z3 = (Z1+Z2)^2 (mag: 1) - z3.Add(z1z1.Add(&z2z2).Negate(2)) // Z3 = Z3-(Z1Z1+Z2Z2) (mag: 4) - z3.Mul(&h) // Z3 = Z3*H (mag: 1) - - // Normalize the resulting field values to a magnitude of 1 as needed. - x3.Normalize() - y3.Normalize() -} - -// addJacobian adds the passed Jacobian points (x1, y1, z1) and (x2, y2, z2) -// together and stores the result in (x3, y3, z3). -func (curve *KoblitzCurve) addJacobian(x1, y1, z1, x2, y2, z2, x3, y3, z3 *fieldVal) { - // A point at infinity is the identity according to the group law for - // elliptic curve cryptography. Thus, ∞ + P = P and P + ∞ = P. - if (x1.IsZero() && y1.IsZero()) || z1.IsZero() { - x3.Set(x2) - y3.Set(y2) - z3.Set(z2) - return - } - if (x2.IsZero() && y2.IsZero()) || z2.IsZero() { - x3.Set(x1) - y3.Set(y1) - z3.Set(z1) - return - } - - // Faster point addition can be achieved when certain assumptions are - // met. For example, when both points have the same z value, arithmetic - // on the z values can be avoided. This section thus checks for these - // conditions and calls an appropriate add function which is accelerated - // by using those assumptions. - z1.Normalize() - z2.Normalize() - isZ1One := z1.Equals(fieldOne) - isZ2One := z2.Equals(fieldOne) - switch { - case isZ1One && isZ2One: - curve.addZ1AndZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3) - return - case z1.Equals(z2): - curve.addZ1EqualsZ2(x1, y1, z1, x2, y2, x3, y3, z3) - return - case isZ2One: - curve.addZ2EqualsOne(x1, y1, z1, x2, y2, x3, y3, z3) - return - } - - // None of the above assumptions are true, so fall back to generic - // point addition. - curve.addGeneric(x1, y1, z1, x2, y2, z2, x3, y3, z3) -} - -// Add returns the sum of (x1,y1) and (x2,y2). Part of the elliptic.Curve -// interface. -func (curve *KoblitzCurve) Add(x1, y1, x2, y2 *big.Int) (*big.Int, *big.Int) { - // A point at infinity is the identity according to the group law for - // elliptic curve cryptography. Thus, ∞ + P = P and P + ∞ = P. - if x1.Sign() == 0 && y1.Sign() == 0 { - return x2, y2 - } - if x2.Sign() == 0 && y2.Sign() == 0 { - return x1, y1 - } - - // Convert the affine coordinates from big integers to field values - // and do the point addition in Jacobian projective space. - fx1, fy1 := curve.bigAffineToField(x1, y1) - fx2, fy2 := curve.bigAffineToField(x2, y2) - fx3, fy3, fz3 := new(fieldVal), new(fieldVal), new(fieldVal) - fOne := new(fieldVal).SetInt(1) - curve.addJacobian(fx1, fy1, fOne, fx2, fy2, fOne, fx3, fy3, fz3) - - // Convert the Jacobian coordinate field values back to affine big - // integers. - return curve.fieldJacobianToBigAffine(fx3, fy3, fz3) -} +// KoblitzCurve provides an implementation for secp256k1 that fits the ECC +// Curve interface from crypto/elliptic. +type KoblitzCurve = secp.KoblitzCurve -// doubleZ1EqualsOne performs point doubling on the passed Jacobian point -// when the point is already known to have a z value of 1 and stores -// the result in (x3, y3, z3). That is to say (x3, y3, z3) = 2*(x1, y1, 1). It -// performs faster point doubling than the generic routine since less arithmetic -// is needed due to the ability to avoid multiplication by the z value. -func (curve *KoblitzCurve) doubleZ1EqualsOne(x1, y1, x3, y3, z3 *fieldVal) { - // This function uses the assumptions that z1 is 1, thus the point - // doubling formulas reduce to: - // - // X3 = (3*X1^2)^2 - 8*X1*Y1^2 - // Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4 - // Z3 = 2*Y1 - // - // To compute the above efficiently, this implementation splits the - // equation into intermediate elements which are used to minimize the - // number of field multiplications in favor of field squarings which - // are roughly 35% faster than field multiplications with the current - // implementation at the time this was written. - // - // This uses a slightly modified version of the method shown at: - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-mdbl-2007-bl - // - // In particular it performs the calculations using the following: - // A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C) - // E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C - // Z3 = 2*Y1 - // - // This results in a cost of 1 field multiplication, 5 field squarings, - // 6 field additions, and 5 integer multiplications. - var a, b, c, d, e, f fieldVal - z3.Set(y1).MulInt(2) // Z3 = 2*Y1 (mag: 2) - a.SquareVal(x1) // A = X1^2 (mag: 1) - b.SquareVal(y1) // B = Y1^2 (mag: 1) - c.SquareVal(&b) // C = B^2 (mag: 1) - b.Add(x1).Square() // B = (X1+B)^2 (mag: 1) - d.Set(&a).Add(&c).Negate(2) // D = -(A+C) (mag: 3) - d.Add(&b).MulInt(2) // D = 2*(B+D)(mag: 8) - e.Set(&a).MulInt(3) // E = 3*A (mag: 3) - f.SquareVal(&e) // F = E^2 (mag: 1) - x3.Set(&d).MulInt(2).Negate(16) // X3 = -(2*D) (mag: 17) - x3.Add(&f) // X3 = F+X3 (mag: 18) - f.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1) - y3.Set(&c).MulInt(8).Negate(8) // Y3 = -(8*C) (mag: 9) - y3.Add(f.Mul(&e)) // Y3 = E*F+Y3 (mag: 10) - - // Normalize the field values back to a magnitude of 1. - x3.Normalize() - y3.Normalize() - z3.Normalize() -} - -// doubleGeneric performs point doubling on the passed Jacobian point without -// any assumptions about the z value and stores the result in (x3, y3, z3). -// That is to say (x3, y3, z3) = 2*(x1, y1, z1). It is the slowest of the point -// doubling routines due to requiring the most arithmetic. -func (curve *KoblitzCurve) doubleGeneric(x1, y1, z1, x3, y3, z3 *fieldVal) { - // Point doubling formula for Jacobian coordinates for the secp256k1 - // curve: - // X3 = (3*X1^2)^2 - 8*X1*Y1^2 - // Y3 = (3*X1^2)*(4*X1*Y1^2 - X3) - 8*Y1^4 - // Z3 = 2*Y1*Z1 - // - // To compute the above efficiently, this implementation splits the - // equation into intermediate elements which are used to minimize the - // number of field multiplications in favor of field squarings which - // are roughly 35% faster than field multiplications with the current - // implementation at the time this was written. - // - // This uses a slightly modified version of the method shown at: - // http://hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l - // - // In particular it performs the calculations using the following: - // A = X1^2, B = Y1^2, C = B^2, D = 2*((X1+B)^2-A-C) - // E = 3*A, F = E^2, X3 = F-2*D, Y3 = E*(D-X3)-8*C - // Z3 = 2*Y1*Z1 - // - // This results in a cost of 1 field multiplication, 5 field squarings, - // 6 field additions, and 5 integer multiplications. - var a, b, c, d, e, f fieldVal - z3.Mul2(y1, z1).MulInt(2) // Z3 = 2*Y1*Z1 (mag: 2) - a.SquareVal(x1) // A = X1^2 (mag: 1) - b.SquareVal(y1) // B = Y1^2 (mag: 1) - c.SquareVal(&b) // C = B^2 (mag: 1) - b.Add(x1).Square() // B = (X1+B)^2 (mag: 1) - d.Set(&a).Add(&c).Negate(2) // D = -(A+C) (mag: 3) - d.Add(&b).MulInt(2) // D = 2*(B+D)(mag: 8) - e.Set(&a).MulInt(3) // E = 3*A (mag: 3) - f.SquareVal(&e) // F = E^2 (mag: 1) - x3.Set(&d).MulInt(2).Negate(16) // X3 = -(2*D) (mag: 17) - x3.Add(&f) // X3 = F+X3 (mag: 18) - f.Set(x3).Negate(18).Add(&d).Normalize() // F = D-X3 (mag: 1) - y3.Set(&c).MulInt(8).Negate(8) // Y3 = -(8*C) (mag: 9) - y3.Add(f.Mul(&e)) // Y3 = E*F+Y3 (mag: 10) - - // Normalize the field values back to a magnitude of 1. - x3.Normalize() - y3.Normalize() - z3.Normalize() -} - -// doubleJacobian doubles the passed Jacobian point (x1, y1, z1) and stores the -// result in (x3, y3, z3). -func (curve *KoblitzCurve) doubleJacobian(x1, y1, z1, x3, y3, z3 *fieldVal) { - // Doubling a point at infinity is still infinity. - if y1.IsZero() || z1.IsZero() { - x3.SetInt(0) - y3.SetInt(0) - z3.SetInt(0) - return - } - - // Slightly faster point doubling can be achieved when the z value is 1 - // by avoiding the multiplication on the z value. This section calls - // a point doubling function which is accelerated by using that - // assumption when possible. - if z1.Normalize().Equals(fieldOne) { - curve.doubleZ1EqualsOne(x1, y1, x3, y3, z3) - return - } - - // Fall back to generic point doubling which works with arbitrary z - // values. - curve.doubleGeneric(x1, y1, z1, x3, y3, z3) -} - -// Double returns 2*(x1,y1). Part of the elliptic.Curve interface. -func (curve *KoblitzCurve) Double(x1, y1 *big.Int) (*big.Int, *big.Int) { - if y1.Sign() == 0 { - return new(big.Int), new(big.Int) - } - - // Convert the affine coordinates from big integers to field values - // and do the point doubling in Jacobian projective space. - fx1, fy1 := curve.bigAffineToField(x1, y1) - fx3, fy3, fz3 := new(fieldVal), new(fieldVal), new(fieldVal) - fOne := new(fieldVal).SetInt(1) - curve.doubleJacobian(fx1, fy1, fOne, fx3, fy3, fz3) - - // Convert the Jacobian coordinate field values back to affine big - // integers. - return curve.fieldJacobianToBigAffine(fx3, fy3, fz3) -} - -// splitK returns a balanced length-two representation of k and their signs. -// This is algorithm 3.74 from [GECC]. -// -// One thing of note about this algorithm is that no matter what c1 and c2 are, -// the final equation of k = k1 + k2 * lambda (mod n) will hold. This is -// provable mathematically due to how a1/b1/a2/b2 are computed. -// -// c1 and c2 are chosen to minimize the max(k1,k2). -func (curve *KoblitzCurve) splitK(k []byte) ([]byte, []byte, int, int) { - // All math here is done with big.Int, which is slow. - // At some point, it might be useful to write something similar to - // fieldVal but for N instead of P as the prime field if this ends up - // being a bottleneck. - bigIntK := new(big.Int) - c1, c2 := new(big.Int), new(big.Int) - tmp1, tmp2 := new(big.Int), new(big.Int) - k1, k2 := new(big.Int), new(big.Int) - - bigIntK.SetBytes(k) - // c1 = round(b2 * k / n) from step 4. - // Rounding isn't really necessary and costs too much, hence skipped - c1.Mul(curve.b2, bigIntK) - c1.Div(c1, curve.N) - // c2 = round(b1 * k / n) from step 4 (sign reversed to optimize one step) - // Rounding isn't really necessary and costs too much, hence skipped - c2.Mul(curve.b1, bigIntK) - c2.Div(c2, curve.N) - // k1 = k - c1 * a1 - c2 * a2 from step 5 (note c2's sign is reversed) - tmp1.Mul(c1, curve.a1) - tmp2.Mul(c2, curve.a2) - k1.Sub(bigIntK, tmp1) - k1.Add(k1, tmp2) - // k2 = - c1 * b1 - c2 * b2 from step 5 (note c2's sign is reversed) - tmp1.Mul(c1, curve.b1) - tmp2.Mul(c2, curve.b2) - k2.Sub(tmp2, tmp1) - - // Note Bytes() throws out the sign of k1 and k2. This matters - // since k1 and/or k2 can be negative. Hence, we pass that - // back separately. - return k1.Bytes(), k2.Bytes(), k1.Sign(), k2.Sign() -} - -// moduloReduce reduces k from more than 32 bytes to 32 bytes and under. This -// is done by doing a simple modulo curve.N. We can do this since G^N = 1 and -// thus any other valid point on the elliptic curve has the same order. -func (curve *KoblitzCurve) moduloReduce(k []byte) []byte { - // Since the order of G is curve.N, we can use a much smaller number - // by doing modulo curve.N - if len(k) > curve.byteSize { - // Reduce k by performing modulo curve.N. - tmpK := new(big.Int).SetBytes(k) - tmpK.Mod(tmpK, curve.N) - return tmpK.Bytes() - } - - return k -} - -// NAF takes a positive integer k and returns the Non-Adjacent Form (NAF) as two -// byte slices. The first is where 1s will be. The second is where -1s will -// be. NAF is convenient in that on average, only 1/3rd of its values are -// non-zero. This is algorithm 3.30 from [GECC]. -// -// Essentially, this makes it possible to minimize the number of operations -// since the resulting ints returned will be at least 50% 0s. -func NAF(k []byte) ([]byte, []byte) { - // The essence of this algorithm is that whenever we have consecutive 1s - // in the binary, we want to put a -1 in the lowest bit and get a bunch - // of 0s up to the highest bit of consecutive 1s. This is due to this - // identity: - // 2^n + 2^(n-1) + 2^(n-2) + ... + 2^(n-k) = 2^(n+1) - 2^(n-k) - // - // The algorithm thus may need to go 1 more bit than the length of the - // bits we actually have, hence bits being 1 bit longer than was - // necessary. Since we need to know whether adding will cause a carry, - // we go from right-to-left in this addition. - var carry, curIsOne, nextIsOne bool - // these default to zero - retPos := make([]byte, len(k)+1) - retNeg := make([]byte, len(k)+1) - for i := len(k) - 1; i >= 0; i-- { - curByte := k[i] - for j := uint(0); j < 8; j++ { - curIsOne = curByte&1 == 1 - if j == 7 { - if i == 0 { - nextIsOne = false - } else { - nextIsOne = k[i-1]&1 == 1 - } - } else { - nextIsOne = curByte&2 == 2 - } - if carry { - if curIsOne { - // This bit is 1, so continue to carry - // and don't need to do anything. - } else { - // We've hit a 0 after some number of - // 1s. - if nextIsOne { - // Start carrying again since - // a new sequence of 1s is - // starting. - retNeg[i+1] += 1 << j - } else { - // Stop carrying since 1s have - // stopped. - carry = false - retPos[i+1] += 1 << j - } - } - } else if curIsOne { - if nextIsOne { - // If this is the start of at least 2 - // consecutive 1s, set the current one - // to -1 and start carrying. - retNeg[i+1] += 1 << j - carry = true - } else { - // This is a singleton, not consecutive - // 1s. - retPos[i+1] += 1 << j - } - } - curByte >>= 1 - } - } - if carry { - retPos[0] = 1 - return retPos, retNeg - } - return retPos[1:], retNeg[1:] -} - -// ScalarMult returns k*(Bx, By) where k is a big endian integer. -// Part of the elliptic.Curve interface. -func (curve *KoblitzCurve) ScalarMult(Bx, By *big.Int, k []byte) (*big.Int, *big.Int) { - // Point Q = ∞ (point at infinity). - qx, qy, qz := new(fieldVal), new(fieldVal), new(fieldVal) - - // Decompose K into k1 and k2 in order to halve the number of EC ops. - // See Algorithm 3.74 in [GECC]. - k1, k2, signK1, signK2 := curve.splitK(curve.moduloReduce(k)) - - // The main equation here to remember is: - // k * P = k1 * P + k2 * ϕ(P) - // - // P1 below is P in the equation, P2 below is ϕ(P) in the equation - p1x, p1y := curve.bigAffineToField(Bx, By) - p1yNeg := new(fieldVal).NegateVal(p1y, 1) - p1z := new(fieldVal).SetInt(1) - - // NOTE: ϕ(x,y) = (βx,y). The Jacobian z coordinate is 1, so this math - // goes through. - p2x := new(fieldVal).Mul2(p1x, curve.beta) - p2y := new(fieldVal).Set(p1y) - p2yNeg := new(fieldVal).NegateVal(p2y, 1) - p2z := new(fieldVal).SetInt(1) - - // Flip the positive and negative values of the points as needed - // depending on the signs of k1 and k2. As mentioned in the equation - // above, each of k1 and k2 are multiplied by the respective point. - // Since -k * P is the same thing as k * -P, and the group law for - // elliptic curves states that P(x, y) = -P(x, -y), it's faster and - // simplifies the code to just make the point negative. - if signK1 == -1 { - p1y, p1yNeg = p1yNeg, p1y - } - if signK2 == -1 { - p2y, p2yNeg = p2yNeg, p2y - } - - // NAF versions of k1 and k2 should have a lot more zeros. - // - // The Pos version of the bytes contain the +1s and the Neg versions - // contain the -1s. - k1PosNAF, k1NegNAF := NAF(k1) - k2PosNAF, k2NegNAF := NAF(k2) - k1Len := len(k1PosNAF) - k2Len := len(k2PosNAF) - - m := k1Len - if m < k2Len { - m = k2Len - } - - // Add left-to-right using the NAF optimization. See algorithm 3.77 - // from [GECC]. This should be faster overall since there will be a lot - // more instances of 0, hence reducing the number of Jacobian additions - // at the cost of 1 possible extra doubling. - var k1BytePos, k1ByteNeg, k2BytePos, k2ByteNeg byte - for i := 0; i < m; i++ { - // Since we're going left-to-right, pad the front with 0s. - if i < m-k1Len { - k1BytePos = 0 - k1ByteNeg = 0 - } else { - k1BytePos = k1PosNAF[i-(m-k1Len)] - k1ByteNeg = k1NegNAF[i-(m-k1Len)] - } - if i < m-k2Len { - k2BytePos = 0 - k2ByteNeg = 0 - } else { - k2BytePos = k2PosNAF[i-(m-k2Len)] - k2ByteNeg = k2NegNAF[i-(m-k2Len)] - } - - for j := 7; j >= 0; j-- { - // Q = 2 * Q - curve.doubleJacobian(qx, qy, qz, qx, qy, qz) - - if k1BytePos&0x80 == 0x80 { - curve.addJacobian(qx, qy, qz, p1x, p1y, p1z, - qx, qy, qz) - } else if k1ByteNeg&0x80 == 0x80 { - curve.addJacobian(qx, qy, qz, p1x, p1yNeg, p1z, - qx, qy, qz) - } - - if k2BytePos&0x80 == 0x80 { - curve.addJacobian(qx, qy, qz, p2x, p2y, p2z, - qx, qy, qz) - } else if k2ByteNeg&0x80 == 0x80 { - curve.addJacobian(qx, qy, qz, p2x, p2yNeg, p2z, - qx, qy, qz) - } - k1BytePos <<= 1 - k1ByteNeg <<= 1 - k2BytePos <<= 1 - k2ByteNeg <<= 1 - } - } - - // Convert the Jacobian coordinate field values back to affine big.Ints. - return curve.fieldJacobianToBigAffine(qx, qy, qz) -} - -// ScalarBaseMult returns k*G where G is the base point of the group and k is a -// big endian integer. -// Part of the elliptic.Curve interface. -func (curve *KoblitzCurve) ScalarBaseMult(k []byte) (*big.Int, *big.Int) { - newK := curve.moduloReduce(k) - diff := len(curve.bytePoints) - len(newK) - - // Point Q = ∞ (point at infinity). - qx, qy, qz := new(fieldVal), new(fieldVal), new(fieldVal) - - // curve.bytePoints has all 256 byte points for each 8-bit window. The - // strategy is to add up the byte points. This is best understood by - // expressing k in base-256 which it already sort of is. - // Each "digit" in the 8-bit window can be looked up using bytePoints - // and added together. - for i, byteVal := range newK { - p := curve.bytePoints[diff+i][byteVal] - curve.addJacobian(qx, qy, qz, &p[0], &p[1], &p[2], qx, qy, qz) - } - return curve.fieldJacobianToBigAffine(qx, qy, qz) -} - -// QPlus1Div4 returns the (P+1)/4 constant for the curve for use in calculating -// square roots via exponentiation. -// -// DEPRECATED: The actual value returned is (P+1)/4, where as the original -// method name implies that this value is (((P+1)/4)+1)/4. This method is kept -// to maintain backwards compatibility of the API. Use Q() instead. -func (curve *KoblitzCurve) QPlus1Div4() *big.Int { - return curve.q -} - -// Q returns the (P+1)/4 constant for the curve for use in calculating square -// roots via exponentiation. -func (curve *KoblitzCurve) Q() *big.Int { - return curve.q +// S256 returns a Curve which implements secp256k1. +func S256() *KoblitzCurve { + return secp.S256() } -var initonce sync.Once -var secp256k1 KoblitzCurve +// CurveParams contains the parameters for the secp256k1 curve. +type CurveParams = secp.CurveParams -func initAll() { - initS256() +// Params returns the secp256k1 curve parameters for convenience. +func Params() *CurveParams { + return secp.Params() } -// fromHex converts the passed hex string into a big integer pointer and will -// panic is there is an error. This is only provided for the hard-coded -// constants so errors in the source code can bet detected. It will only (and -// must only) be called for initialization purposes. -func fromHex(s string) *big.Int { - r, ok := new(big.Int).SetString(s, 16) - if !ok { - panic("invalid hex in source file: " + s) - } - return r -} +// Generator returns the public key at the Generator Point. +func Generator() *PublicKey { + var ( + result JacobianPoint + k secp.ModNScalar + ) -func initS256() { - // Curve parameters taken from [SECG] section 2.4.1. - secp256k1.CurveParams = new(elliptic.CurveParams) - secp256k1.P = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F") - secp256k1.N = fromHex("FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141") - secp256k1.B = fromHex("0000000000000000000000000000000000000000000000000000000000000007") - secp256k1.Gx = fromHex("79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798") - secp256k1.Gy = fromHex("483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8") - secp256k1.BitSize = 256 - secp256k1.q = new(big.Int).Div(new(big.Int).Add(secp256k1.P, - big.NewInt(1)), big.NewInt(4)) - secp256k1.H = 1 - secp256k1.halfOrder = new(big.Int).Rsh(secp256k1.N, 1) - secp256k1.fieldB = new(fieldVal).SetByteSlice(secp256k1.B.Bytes()) + k.SetInt(1) + ScalarBaseMultNonConst(&k, &result) - // Provided for convenience since this gets computed repeatedly. - secp256k1.byteSize = secp256k1.BitSize / 8 + result.ToAffine() - // Deserialize and set the pre-computed table used to accelerate scalar - // base multiplication. This is hard-coded data, so any errors are - // panics because it means something is wrong in the source code. - if err := loadS256BytePoints(); err != nil { - panic(err) - } - - // Next 6 constants are from Hal Finney's bitcointalk.org post: - // https://bitcointalk.org/index.php?topic=3238.msg45565#msg45565 - // May he rest in peace. - // - // They have also been independently derived from the code in the - // EndomorphismVectors function in gensecp256k1.go. - secp256k1.lambda = fromHex("5363AD4CC05C30E0A5261C028812645A122E22EA20816678DF02967C1B23BD72") - secp256k1.beta = new(fieldVal).SetHex("7AE96A2B657C07106E64479EAC3434E99CF0497512F58995C1396C28719501EE") - secp256k1.a1 = fromHex("3086D221A7D46BCDE86C90E49284EB15") - secp256k1.b1 = fromHex("-E4437ED6010E88286F547FA90ABFE4C3") - secp256k1.a2 = fromHex("114CA50F7A8E2F3F657C1108D9D44CFD8") - secp256k1.b2 = fromHex("3086D221A7D46BCDE86C90E49284EB15") - - // Alternatively, we can use the parameters below, however, they seem - // to be about 8% slower. - // secp256k1.lambda = fromHex("AC9C52B33FA3CF1F5AD9E3FD77ED9BA4A880B9FC8EC739C2E0CFC810B51283CE") - // secp256k1.beta = new(fieldVal).SetHex("851695D49A83F8EF919BB86153CBCB16630FB68AED0A766A3EC693D68E6AFA40") - // secp256k1.a1 = fromHex("E4437ED6010E88286F547FA90ABFE4C3") - // secp256k1.b1 = fromHex("-3086D221A7D46BCDE86C90E49284EB15") - // secp256k1.a2 = fromHex("3086D221A7D46BCDE86C90E49284EB15") - // secp256k1.b2 = fromHex("114CA50F7A8E2F3F657C1108D9D44CFD8") -} - -// S256 returns a Curve which implements secp256k1. -func S256() *KoblitzCurve { - initonce.Do(initAll) - return &secp256k1 + return NewPublicKey(&result.X, &result.Y) } diff --git a/btcec/btcec_test.go b/btcec/btcec_test.go index 42a69037bc..3113a1b553 100644 --- a/btcec/btcec_test.go +++ b/btcec/btcec_test.go @@ -15,17 +15,17 @@ import ( // isJacobianOnS256Curve returns boolean if the point (x,y,z) is on the // secp256k1 curve. -func isJacobianOnS256Curve(x, y, z *fieldVal) bool { +func isJacobianOnS256Curve(point *JacobianPoint) bool { // Elliptic curve equation for secp256k1 is: y^2 = x^3 + 7 // In Jacobian coordinates, Y = y/z^3 and X = x/z^2 // Thus: // (y/z^3)^2 = (x/z^2)^3 + 7 // y^2/z^6 = x^3/z^6 + 7 // y^2 = x^3 + 7*z^6 - var y2, z2, x3, result fieldVal - y2.SquareVal(y).Normalize() - z2.SquareVal(z) - x3.SquareVal(x).Mul(x) + var y2, z2, x3, result FieldVal + y2.SquareVal(&point.Y).Normalize() + z2.SquareVal(&point.Z) + x3.SquareVal(&point.X).Mul(&point.X) result.SquareVal(&z2).Mul(&z2).MulInt(7).Add(&x3).Normalize() return y2.Equals(&result) } @@ -222,43 +222,37 @@ func TestAddJacobian(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - // Convert hex to field values. - x1 := new(fieldVal).SetHex(test.x1) - y1 := new(fieldVal).SetHex(test.y1) - z1 := new(fieldVal).SetHex(test.z1) - x2 := new(fieldVal).SetHex(test.x2) - y2 := new(fieldVal).SetHex(test.y2) - z2 := new(fieldVal).SetHex(test.z2) - x3 := new(fieldVal).SetHex(test.x3) - y3 := new(fieldVal).SetHex(test.y3) - z3 := new(fieldVal).SetHex(test.z3) + // Convert hex to Jacobian points. + p1 := jacobianPointFromHex(test.x1, test.y1, test.z1) + p2 := jacobianPointFromHex(test.x2, test.y2, test.z2) + want := jacobianPointFromHex(test.x3, test.y3, test.z3) // Ensure the test data is using points that are actually on // the curve (or the point at infinity). - if !z1.IsZero() && !isJacobianOnS256Curve(x1, y1, z1) { + if !p1.Z.IsZero() && !isJacobianOnS256Curve(&p1) { t.Errorf("#%d first point is not on the curve -- "+ "invalid test data", i) continue } - if !z2.IsZero() && !isJacobianOnS256Curve(x2, y2, z2) { + if !p2.Z.IsZero() && !isJacobianOnS256Curve(&p2) { t.Errorf("#%d second point is not on the curve -- "+ "invalid test data", i) continue } - if !z3.IsZero() && !isJacobianOnS256Curve(x3, y3, z3) { + if !want.Z.IsZero() && !isJacobianOnS256Curve(&want) { t.Errorf("#%d expected point is not on the curve -- "+ "invalid test data", i) continue } // Add the two points. - rx, ry, rz := new(fieldVal), new(fieldVal), new(fieldVal) - S256().addJacobian(x1, y1, z1, x2, y2, z2, rx, ry, rz) + var r JacobianPoint + AddNonConst(&p1, &p2, &r) // Ensure result matches expected. - if !rx.Equals(x3) || !ry.Equals(y3) || !rz.Equals(z3) { + if !r.X.Equals(&want.X) || !r.Y.Equals(&want.Y) || !r.Z.Equals(&want.Z) { t.Errorf("#%d wrong result\ngot: (%v, %v, %v)\n"+ - "want: (%v, %v, %v)", i, rx, ry, rz, x3, y3, z3) + "want: (%v, %v, %v)", i, r.X, r.Y, r.Z, want.X, want.Y, want.Z) continue } } @@ -360,6 +354,15 @@ func TestAddAffine(t *testing.T) { } } +// isStrictlyEqual returns whether or not the two Jacobian points are strictly +// equal for use in the tests. Recall that several Jacobian points can be +// equal in affine coordinates, while not having the same coordinates in +// projective space, so the two points not being equal doesn't necessarily mean +// they aren't actually the same affine point. +func isStrictlyEqual(p, other *JacobianPoint) bool { + return p.X.Equals(&other.X) && p.Y.Equals(&other.Y) && p.Z.Equals(&other.Z) +} + // TestDoubleJacobian tests doubling of points projected in Jacobian // coordinates. func TestDoubleJacobian(t *testing.T) { @@ -408,34 +411,31 @@ func TestDoubleJacobian(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { // Convert hex to field values. - x1 := new(fieldVal).SetHex(test.x1) - y1 := new(fieldVal).SetHex(test.y1) - z1 := new(fieldVal).SetHex(test.z1) - x3 := new(fieldVal).SetHex(test.x3) - y3 := new(fieldVal).SetHex(test.y3) - z3 := new(fieldVal).SetHex(test.z3) + p1 := jacobianPointFromHex(test.x1, test.y1, test.z1) + want := jacobianPointFromHex(test.x3, test.y3, test.z3) // Ensure the test data is using points that are actually on // the curve (or the point at infinity). - if !z1.IsZero() && !isJacobianOnS256Curve(x1, y1, z1) { + if !p1.Z.IsZero() && !isJacobianOnS256Curve(&p1) { t.Errorf("#%d first point is not on the curve -- "+ "invalid test data", i) continue } - if !z3.IsZero() && !isJacobianOnS256Curve(x3, y3, z3) { + if !want.Z.IsZero() && !isJacobianOnS256Curve(&want) { t.Errorf("#%d expected point is not on the curve -- "+ "invalid test data", i) continue } // Double the point. - rx, ry, rz := new(fieldVal), new(fieldVal), new(fieldVal) - S256().doubleJacobian(x1, y1, z1, rx, ry, rz) + var result JacobianPoint + DoubleNonConst(&p1, &result) // Ensure result matches expected. - if !rx.Equals(x3) || !ry.Equals(y3) || !rz.Equals(z3) { + if !isStrictlyEqual(&result, &want) { t.Errorf("#%d wrong result\ngot: (%v, %v, %v)\n"+ - "want: (%v, %v, %v)", i, rx, ry, rz, x3, y3, z3) + "want: (%v, %v, %v)", i, result.X, result.Y, result.Z, + want.X, want.Y, want.Z) continue } } @@ -663,6 +663,64 @@ func TestScalarMultRand(t *testing.T) { } } +var ( + // Next 6 constants are from Hal Finney's bitcointalk.org post: + // https://bitcointalk.org/index.php?topic=3238.msg45565#msg45565 + // May he rest in peace. + // + // They have also been independently derived from the code in the + // EndomorphismVectors function in genstatics.go. + endomorphismLambda = fromHex("5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72") + endomorphismBeta = hexToFieldVal("7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee") + endomorphismA1 = fromHex("3086d221a7d46bcde86c90e49284eb15") + endomorphismB1 = fromHex("-e4437ed6010e88286f547fa90abfe4c3") + endomorphismA2 = fromHex("114ca50f7a8e2f3f657c1108d9d44cfd8") + endomorphismB2 = fromHex("3086d221a7d46bcde86c90e49284eb15") +) + +// splitK returns a balanced length-two representation of k and their signs. +// This is algorithm 3.74 from [GECC]. +// +// One thing of note about this algorithm is that no matter what c1 and c2 are, +// the final equation of k = k1 + k2 * lambda (mod n) will hold. This is +// provable mathematically due to how a1/b1/a2/b2 are computed. +// +// c1 and c2 are chosen to minimize the max(k1,k2). +func splitK(k []byte) ([]byte, []byte, int, int) { + // All math here is done with big.Int, which is slow. + // At some point, it might be useful to write something similar to + // FieldVal but for N instead of P as the prime field if this ends up + // being a bottleneck. + bigIntK := new(big.Int) + c1, c2 := new(big.Int), new(big.Int) + tmp1, tmp2 := new(big.Int), new(big.Int) + k1, k2 := new(big.Int), new(big.Int) + + bigIntK.SetBytes(k) + // c1 = round(b2 * k / n) from step 4. + // Rounding isn't really necessary and costs too much, hence skipped + c1.Mul(endomorphismB2, bigIntK) + c1.Div(c1, Params().N) + // c2 = round(b1 * k / n) from step 4 (sign reversed to optimize one step) + // Rounding isn't really necessary and costs too much, hence skipped + c2.Mul(endomorphismB1, bigIntK) + c2.Div(c2, Params().N) + // k1 = k - c1 * a1 - c2 * a2 from step 5 (note c2's sign is reversed) + tmp1.Mul(c1, endomorphismA1) + tmp2.Mul(c2, endomorphismA2) + k1.Sub(bigIntK, tmp1) + k1.Add(k1, tmp2) + // k2 = - c1 * b1 - c2 * b2 from step 5 (note c2's sign is reversed) + tmp1.Mul(c1, endomorphismB1) + tmp2.Mul(c2, endomorphismB2) + k2.Sub(tmp2, tmp1) + + // Note Bytes() throws out the sign of k1 and k2. This matters + // since k1 and/or k2 can be negative. Hence, we pass that + // back separately. + return k1.Bytes(), k2.Bytes(), k1.Sign(), k2.Sign() +} + func TestSplitK(t *testing.T) { tests := []struct { k string @@ -719,7 +777,7 @@ func TestSplitK(t *testing.T) { if !ok { t.Errorf("%d: bad value for k: %s", i, test.k) } - k1, k2, k1Sign, k2Sign := s256.splitK(k.Bytes()) + k1, k2, k1Sign, k2Sign := splitK(k.Bytes()) k1str := fmt.Sprintf("%064x", k1) if test.k1 != k1str { t.Errorf("%d: bad k1: got %v, want %v", i, k1str, test.k1) @@ -740,7 +798,7 @@ func TestSplitK(t *testing.T) { k2Int := new(big.Int).SetBytes(k2) k2SignInt := new(big.Int).SetInt64(int64(k2Sign)) k2Int.Mul(k2Int, k2SignInt) - gotK := new(big.Int).Mul(k2Int, s256.lambda) + gotK := new(big.Int).Mul(k2Int, endomorphismLambda) gotK.Add(k1Int, gotK) gotK.Mod(gotK, s256.N) if k.Cmp(gotK) != 0 { @@ -759,14 +817,14 @@ func TestSplitKRand(t *testing.T) { break } k := new(big.Int).SetBytes(bytesK) - k1, k2, k1Sign, k2Sign := s256.splitK(bytesK) + k1, k2, k1Sign, k2Sign := splitK(bytesK) k1Int := new(big.Int).SetBytes(k1) k1SignInt := new(big.Int).SetInt64(int64(k1Sign)) k1Int.Mul(k1Int, k1SignInt) k2Int := new(big.Int).SetBytes(k2) k2SignInt := new(big.Int).SetInt64(int64(k2Sign)) k2Int.Mul(k2Int, k2SignInt) - gotK := new(big.Int).Mul(k2Int, s256.lambda) + gotK := new(big.Int).Mul(k2Int, endomorphismLambda) gotK.Add(k1Int, gotK) gotK.Mod(gotK, s256.N) if k.Cmp(gotK) != 0 { @@ -778,12 +836,13 @@ func TestSplitKRand(t *testing.T) { // Test this curve's usage with the ecdsa package. func testKeyGeneration(t *testing.T, c *KoblitzCurve, tag string) { - priv, err := NewPrivateKey(c) + priv, err := NewPrivateKey() if err != nil { t.Errorf("%s: error: %s", tag, err) return } - if !c.IsOnCurve(priv.PublicKey.X, priv.PublicKey.Y) { + pub := priv.PubKey() + if !c.IsOnCurve(pub.X(), pub.Y()) { t.Errorf("%s: public key invalid: %s", tag, err) } } @@ -792,98 +851,41 @@ func TestKeyGeneration(t *testing.T) { testKeyGeneration(t, S256(), "S256") } -func testSignAndVerify(t *testing.T, c *KoblitzCurve, tag string) { - priv, _ := NewPrivateKey(c) - pub := priv.PubKey() - - hashed := []byte("testing") - sig, err := priv.Sign(hashed) - if err != nil { - t.Errorf("%s: error signing: %s", tag, err) - return +// checkNAFEncoding returns an error if the provided positive and negative +// portions of an overall NAF encoding do not adhere to the requirements or they +// do not sum back to the provided original value. +func checkNAFEncoding(pos, neg []byte, origValue *big.Int) error { + // NAF must not have a leading zero byte and the number of negative + // bytes must not exceed the positive portion. + if len(pos) > 0 && pos[0] == 0 { + return fmt.Errorf("positive has leading zero -- got %x", pos) } - - if !sig.Verify(hashed, pub) { - t.Errorf("%s: Verify failed", tag) + if len(neg) > len(pos) { + return fmt.Errorf("negative has len %d > pos len %d", len(neg), + len(pos)) } - hashed[0] ^= 0xff - if sig.Verify(hashed, pub) { - t.Errorf("%s: Verify always works!", tag) + // Ensure the result doesn't have any adjacent non-zero digits. + gotPos := new(big.Int).SetBytes(pos) + gotNeg := new(big.Int).SetBytes(neg) + posOrNeg := new(big.Int).Or(gotPos, gotNeg) + prevBit := posOrNeg.Bit(0) + for bit := 1; bit < posOrNeg.BitLen(); bit++ { + thisBit := posOrNeg.Bit(bit) + if prevBit == 1 && thisBit == 1 { + return fmt.Errorf("adjacent non-zero digits found at bit pos %d", + bit-1) + } + prevBit = thisBit } -} - -func TestSignAndVerify(t *testing.T) { - testSignAndVerify(t, S256(), "S256") -} -func TestNAF(t *testing.T) { - tests := []string{ - "6df2b5d30854069ccdec40ae022f5c948936324a4e9ebed8eb82cfd5a6b6d766", - "b776e53fb55f6b006a270d42d64ec2b1", - "d6cc32c857f1174b604eefc544f0c7f7", - "45c53aa1bb56fcd68c011e2dad6758e4", - "a2e79d200f27f2360fba57619936159b", + // Ensure the resulting positive and negative portions of the overall + // NAF representation sum back to the original value. + gotValue := new(big.Int).Sub(gotPos, gotNeg) + if origValue.Cmp(gotValue) != 0 { + return fmt.Errorf("pos-neg is not original value: got %x, want %x", + gotValue, origValue) } - negOne := big.NewInt(-1) - one := big.NewInt(1) - two := big.NewInt(2) - for i, test := range tests { - want, _ := new(big.Int).SetString(test, 16) - nafPos, nafNeg := NAF(want.Bytes()) - got := big.NewInt(0) - // Check that the NAF representation comes up with the right number - for i := 0; i < len(nafPos); i++ { - bytePos := nafPos[i] - byteNeg := nafNeg[i] - for j := 7; j >= 0; j-- { - got.Mul(got, two) - if bytePos&0x80 == 0x80 { - got.Add(got, one) - } else if byteNeg&0x80 == 0x80 { - got.Add(got, negOne) - } - bytePos <<= 1 - byteNeg <<= 1 - } - } - if got.Cmp(want) != 0 { - t.Errorf("%d: Failed NAF got %X want %X", i, got, want) - } - } -} -func TestNAFRand(t *testing.T) { - negOne := big.NewInt(-1) - one := big.NewInt(1) - two := big.NewInt(2) - for i := 0; i < 1024; i++ { - data := make([]byte, 32) - _, err := rand.Read(data) - if err != nil { - t.Fatalf("failed to read random data at %d", i) - break - } - nafPos, nafNeg := NAF(data) - want := new(big.Int).SetBytes(data) - got := big.NewInt(0) - // Check that the NAF representation comes up with the right number - for i := 0; i < len(nafPos); i++ { - bytePos := nafPos[i] - byteNeg := nafNeg[i] - for j := 7; j >= 0; j-- { - got.Mul(got, two) - if bytePos&0x80 == 0x80 { - got.Add(got, one) - } else if byteNeg&0x80 == 0x80 { - got.Add(got, negOne) - } - bytePos <<= 1 - byteNeg <<= 1 - } - } - if got.Cmp(want) != 0 { - t.Errorf("%d: Failed NAF got %X want %X", i, got, want) - } - } + return nil } diff --git a/btcec/ciphering.go b/btcec/ciphering.go index b18c9b7a30..88d93e2766 100644 --- a/btcec/ciphering.go +++ b/btcec/ciphering.go @@ -5,212 +5,12 @@ package btcec import ( - "bytes" - "crypto/aes" - "crypto/cipher" - "crypto/hmac" - "crypto/rand" - "crypto/sha256" - "crypto/sha512" - "errors" - "io" -) - -var ( - // ErrInvalidMAC occurs when Message Authentication Check (MAC) fails - // during decryption. This happens because of either invalid private key or - // corrupt ciphertext. - ErrInvalidMAC = errors.New("invalid mac hash") - - // errInputTooShort occurs when the input ciphertext to the Decrypt - // function is less than 134 bytes long. - errInputTooShort = errors.New("ciphertext too short") - - // errUnsupportedCurve occurs when the first two bytes of the encrypted - // text aren't 0x02CA (= 712 = secp256k1, from OpenSSL). - errUnsupportedCurve = errors.New("unsupported curve") - - errInvalidXLength = errors.New("invalid X length, must be 32") - errInvalidYLength = errors.New("invalid Y length, must be 32") - errInvalidPadding = errors.New("invalid PKCS#7 padding") - - // 0x02CA = 714 - ciphCurveBytes = [2]byte{0x02, 0xCA} - // 0x20 = 32 - ciphCoordLength = [2]byte{0x00, 0x20} + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" ) // GenerateSharedSecret generates a shared secret based on a private key and a // public key using Diffie-Hellman key exchange (ECDH) (RFC 4753). // RFC5903 Section 9 states we should only return x. func GenerateSharedSecret(privkey *PrivateKey, pubkey *PublicKey) []byte { - x, _ := pubkey.Curve.ScalarMult(pubkey.X, pubkey.Y, privkey.D.Bytes()) - return x.Bytes() -} - -// Encrypt encrypts data for the target public key using AES-256-CBC. It also -// generates a private key (the pubkey of which is also in the output). The only -// supported curve is secp256k1. The `structure' that it encodes everything into -// is: -// -// struct { -// // Initialization Vector used for AES-256-CBC -// IV [16]byte -// // Public Key: curve(2) + len_of_pubkeyX(2) + pubkeyX + -// // len_of_pubkeyY(2) + pubkeyY (curve = 714) -// PublicKey [70]byte -// // Cipher text -// Data []byte -// // HMAC-SHA-256 Message Authentication Code -// HMAC [32]byte -// } -// -// The primary aim is to ensure byte compatibility with Pyelliptic. Also, refer -// to section 5.8.1 of ANSI X9.63 for rationale on this format. -func Encrypt(pubkey *PublicKey, in []byte) ([]byte, error) { - ephemeral, err := NewPrivateKey(S256()) - if err != nil { - return nil, err - } - ecdhKey := GenerateSharedSecret(ephemeral, pubkey) - derivedKey := sha512.Sum512(ecdhKey) - keyE := derivedKey[:32] - keyM := derivedKey[32:] - - paddedIn := addPKCSPadding(in) - // IV + Curve params/X/Y + padded plaintext/ciphertext + HMAC-256 - out := make([]byte, aes.BlockSize+70+len(paddedIn)+sha256.Size) - iv := out[:aes.BlockSize] - if _, err = io.ReadFull(rand.Reader, iv); err != nil { - return nil, err - } - // start writing public key - pb := ephemeral.PubKey().SerializeUncompressed() - offset := aes.BlockSize - - // curve and X length - copy(out[offset:offset+4], append(ciphCurveBytes[:], ciphCoordLength[:]...)) - offset += 4 - // X - copy(out[offset:offset+32], pb[1:33]) - offset += 32 - // Y length - copy(out[offset:offset+2], ciphCoordLength[:]) - offset += 2 - // Y - copy(out[offset:offset+32], pb[33:]) - offset += 32 - - // start encryption - block, err := aes.NewCipher(keyE) - if err != nil { - return nil, err - } - mode := cipher.NewCBCEncrypter(block, iv) - mode.CryptBlocks(out[offset:len(out)-sha256.Size], paddedIn) - - // start HMAC-SHA-256 - hm := hmac.New(sha256.New, keyM) - hm.Write(out[:len(out)-sha256.Size]) // everything is hashed - copy(out[len(out)-sha256.Size:], hm.Sum(nil)) // write checksum - - return out, nil -} - -// Decrypt decrypts data that was encrypted using the Encrypt function. -func Decrypt(priv *PrivateKey, in []byte) ([]byte, error) { - // IV + Curve params/X/Y + 1 block + HMAC-256 - if len(in) < aes.BlockSize+70+aes.BlockSize+sha256.Size { - return nil, errInputTooShort - } - - // read iv - iv := in[:aes.BlockSize] - offset := aes.BlockSize - - // start reading pubkey - if !bytes.Equal(in[offset:offset+2], ciphCurveBytes[:]) { - return nil, errUnsupportedCurve - } - offset += 2 - - if !bytes.Equal(in[offset:offset+2], ciphCoordLength[:]) { - return nil, errInvalidXLength - } - offset += 2 - - xBytes := in[offset : offset+32] - offset += 32 - - if !bytes.Equal(in[offset:offset+2], ciphCoordLength[:]) { - return nil, errInvalidYLength - } - offset += 2 - - yBytes := in[offset : offset+32] - offset += 32 - - pb := make([]byte, 65) - pb[0] = byte(0x04) // uncompressed - copy(pb[1:33], xBytes) - copy(pb[33:], yBytes) - // check if (X, Y) lies on the curve and create a Pubkey if it does - pubkey, err := ParsePubKey(pb, S256()) - if err != nil { - return nil, err - } - - // check for cipher text length - if (len(in)-aes.BlockSize-offset-sha256.Size)%aes.BlockSize != 0 { - return nil, errInvalidPadding // not padded to 16 bytes - } - - // read hmac - messageMAC := in[len(in)-sha256.Size:] - - // generate shared secret - ecdhKey := GenerateSharedSecret(priv, pubkey) - derivedKey := sha512.Sum512(ecdhKey) - keyE := derivedKey[:32] - keyM := derivedKey[32:] - - // verify mac - hm := hmac.New(sha256.New, keyM) - hm.Write(in[:len(in)-sha256.Size]) // everything is hashed - expectedMAC := hm.Sum(nil) - if !hmac.Equal(messageMAC, expectedMAC) { - return nil, ErrInvalidMAC - } - - // start decryption - block, err := aes.NewCipher(keyE) - if err != nil { - return nil, err - } - mode := cipher.NewCBCDecrypter(block, iv) - // same length as ciphertext - plaintext := make([]byte, len(in)-offset-sha256.Size) - mode.CryptBlocks(plaintext, in[offset:len(in)-sha256.Size]) - - return removePKCSPadding(plaintext) -} - -// Implement PKCS#7 padding with block size of 16 (AES block size). - -// addPKCSPadding adds padding to a block of data -func addPKCSPadding(src []byte) []byte { - padding := aes.BlockSize - len(src)%aes.BlockSize - padtext := bytes.Repeat([]byte{byte(padding)}, padding) - return append(src, padtext...) -} - -// removePKCSPadding removes padding from data that was added with addPKCSPadding -func removePKCSPadding(src []byte) ([]byte, error) { - length := len(src) - padLength := int(src[length-1]) - if padLength > aes.BlockSize || length < aes.BlockSize { - return nil, errInvalidPadding - } - - return src[:length-padLength], nil + return secp.GenerateSharedSecret(privkey, pubkey) } diff --git a/btcec/ciphering_test.go b/btcec/ciphering_test.go index 819f18846c..c6bea3da73 100644 --- a/btcec/ciphering_test.go +++ b/btcec/ciphering_test.go @@ -6,17 +6,16 @@ package btcec import ( "bytes" - "encoding/hex" "testing" ) func TestGenerateSharedSecret(t *testing.T) { - privKey1, err := NewPrivateKey(S256()) + privKey1, err := NewPrivateKey() if err != nil { t.Errorf("private key generation error: %s", err) return } - privKey2, err := NewPrivateKey(S256()) + privKey2, err := NewPrivateKey() if err != nil { t.Errorf("private key generation error: %s", err) return @@ -30,145 +29,3 @@ func TestGenerateSharedSecret(t *testing.T) { secret1, secret2) } } - -// Test 1: Encryption and decryption -func TestCipheringBasic(t *testing.T) { - privkey, err := NewPrivateKey(S256()) - if err != nil { - t.Fatal("failed to generate private key") - } - - in := []byte("Hey there dude. How are you doing? This is a test.") - - out, err := Encrypt(privkey.PubKey(), in) - if err != nil { - t.Fatal("failed to encrypt:", err) - } - - dec, err := Decrypt(privkey, out) - if err != nil { - t.Fatal("failed to decrypt:", err) - } - - if !bytes.Equal(in, dec) { - t.Error("decrypted data doesn't match original") - } -} - -// Test 2: Byte compatibility with Pyelliptic -func TestCiphering(t *testing.T) { - pb, _ := hex.DecodeString("fe38240982f313ae5afb3e904fb8215fb11af1200592b" + - "fca26c96c4738e4bf8f") - privkey, _ := PrivKeyFromBytes(S256(), pb) - - in := []byte("This is just a test.") - out, _ := hex.DecodeString("b0d66e5adaa5ed4e2f0ca68e17b8f2fc02ca002009e3" + - "3487e7fa4ab505cf34d98f131be7bd258391588ca7804acb30251e71a04e0020ecf" + - "df0f84608f8add82d7353af780fbb28868c713b7813eb4d4e61f7b75d7534dd9856" + - "9b0ba77cf14348fcff80fee10e11981f1b4be372d93923e9178972f69937ec850ed" + - "6c3f11ff572ddd5b2bedf9f9c0b327c54da02a28fcdce1f8369ffec") - - dec, err := Decrypt(privkey, out) - if err != nil { - t.Fatal("failed to decrypt:", err) - } - - if !bytes.Equal(in, dec) { - t.Error("decrypted data doesn't match original") - } -} - -func TestCipheringErrors(t *testing.T) { - privkey, err := NewPrivateKey(S256()) - if err != nil { - t.Fatal("failed to generate private key") - } - - tests1 := []struct { - ciphertext []byte // input ciphertext - }{ - {bytes.Repeat([]byte{0x00}, 133)}, // errInputTooShort - {bytes.Repeat([]byte{0x00}, 134)}, // errUnsupportedCurve - {bytes.Repeat([]byte{0x02, 0xCA}, 134)}, // errInvalidXLength - {bytes.Repeat([]byte{0x02, 0xCA, 0x00, 0x20}, 134)}, // errInvalidYLength - {[]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // IV - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0xCA, 0x00, 0x20, // curve and X length - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // X - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x20, // Y length - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // Y - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ciphertext - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // MAC - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }}, // invalid pubkey - {[]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // IV - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0xCA, 0x00, 0x20, // curve and X length - 0x11, 0x5C, 0x42, 0xE7, 0x57, 0xB2, 0xEF, 0xB7, // X - 0x67, 0x1C, 0x57, 0x85, 0x30, 0xEC, 0x19, 0x1A, - 0x13, 0x59, 0x38, 0x1E, 0x6A, 0x71, 0x12, 0x7A, - 0x9D, 0x37, 0xC4, 0x86, 0xFD, 0x30, 0xDA, 0xE5, - 0x00, 0x20, // Y length - 0x7E, 0x76, 0xDC, 0x58, 0xF6, 0x93, 0xBD, 0x7E, // Y - 0x70, 0x10, 0x35, 0x8C, 0xE6, 0xB1, 0x65, 0xE4, - 0x83, 0xA2, 0x92, 0x10, 0x10, 0xDB, 0x67, 0xAC, - 0x11, 0xB1, 0xB5, 0x1B, 0x65, 0x19, 0x53, 0xD2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ciphertext - // padding not aligned to 16 bytes - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // MAC - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }}, // errInvalidPadding - {[]byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // IV - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x02, 0xCA, 0x00, 0x20, // curve and X length - 0x11, 0x5C, 0x42, 0xE7, 0x57, 0xB2, 0xEF, 0xB7, // X - 0x67, 0x1C, 0x57, 0x85, 0x30, 0xEC, 0x19, 0x1A, - 0x13, 0x59, 0x38, 0x1E, 0x6A, 0x71, 0x12, 0x7A, - 0x9D, 0x37, 0xC4, 0x86, 0xFD, 0x30, 0xDA, 0xE5, - 0x00, 0x20, // Y length - 0x7E, 0x76, 0xDC, 0x58, 0xF6, 0x93, 0xBD, 0x7E, // Y - 0x70, 0x10, 0x35, 0x8C, 0xE6, 0xB1, 0x65, 0xE4, - 0x83, 0xA2, 0x92, 0x10, 0x10, 0xDB, 0x67, 0xAC, - 0x11, 0xB1, 0xB5, 0x1B, 0x65, 0x19, 0x53, 0xD2, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // ciphertext - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, // MAC - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - }}, // ErrInvalidMAC - } - - for i, test := range tests1 { - _, err = Decrypt(privkey, test.ciphertext) - if err == nil { - t.Errorf("Decrypt #%d did not get error", i) - } - } - - // test error from removePKCSPadding - tests2 := []struct { - in []byte // input data - }{ - {bytes.Repeat([]byte{0x11}, 17)}, - {bytes.Repeat([]byte{0x07}, 15)}, - } - for i, test := range tests2 { - _, err = removePKCSPadding(test.in) - if err == nil { - t.Errorf("removePKCSPadding #%d did not get error", i) - } - } -} diff --git a/btcec/curve.go b/btcec/curve.go new file mode 100644 index 0000000000..70a9229f9a --- /dev/null +++ b/btcec/curve.go @@ -0,0 +1,115 @@ +// Copyright (c) 2015-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package btcec + +import ( + "fmt" + + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// JacobianPoint is an element of the group formed by the secp256k1 curve in +// Jacobian projective coordinates and thus represents a point on the curve. +type JacobianPoint = secp.JacobianPoint + +// infinityPoint is the jacobian representation of the point at infinity. +var infinityPoint JacobianPoint + +// MakeJacobianPoint returns a Jacobian point with the provided X, Y, and Z +// coordinates. +func MakeJacobianPoint(x, y, z *FieldVal) JacobianPoint { + return secp.MakeJacobianPoint(x, y, z) +} + +// AddNonConst adds the passed Jacobian points together and stores the result +// in the provided result param in *non-constant* time. +func AddNonConst(p1, p2, result *JacobianPoint) { + secp.AddNonConst(p1, p2, result) +} + +// DecompressY attempts to calculate the Y coordinate for the given X +// coordinate such that the result pair is a point on the secp256k1 curve. It +// adjusts Y based on the desired oddness and returns whether or not it was +// successful since not all X coordinates are valid. +// +// The magnitude of the provided X coordinate field val must be a max of 8 for +// a correct result. The resulting Y field val will have a max magnitude of 2. +func DecompressY(x *FieldVal, odd bool, resultY *FieldVal) bool { + return secp.DecompressY(x, odd, resultY) +} + +// DoubleNonConst doubles the passed Jacobian point and stores the result in +// the provided result parameter in *non-constant* time. +// +// NOTE: The point must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func DoubleNonConst(p, result *JacobianPoint) { + secp.DoubleNonConst(p, result) +} + +// ScalarBaseMultNonConst multiplies k*G where G is the base point of the group +// and k is a big endian integer. The result is stored in Jacobian coordinates +// (x1, y1, z1). +// +// NOTE: The resulting point will be normalized. +func ScalarBaseMultNonConst(k *ModNScalar, result *JacobianPoint) { + secp.ScalarBaseMultNonConst(k, result) +} + +// ScalarMultNonConst multiplies k*P where k is a big endian integer modulo the +// curve order and P is a point in Jacobian projective coordinates and stores +// the result in the provided Jacobian point. +// +// NOTE: The point must be normalized for this function to return the correct +// result. The resulting point will be normalized. +func ScalarMultNonConst(k *ModNScalar, point, result *JacobianPoint) { + secp.ScalarMultNonConst(k, point, result) +} + +// ParseJacobian parses a byte slice point as a secp.Publickey and returns the +// pubkey as a JacobianPoint. If the nonce is a zero slice, the infinityPoint +// is returned. +func ParseJacobian(point []byte) (JacobianPoint, error) { + var result JacobianPoint + + if len(point) != 33 { + str := fmt.Sprintf("invalid nonce: invalid length: %v", + len(point)) + return JacobianPoint{}, makeError(secp.ErrPubKeyInvalidLen, str) + } + + if point[0] == 0x00 { + return infinityPoint, nil + } + + noncePk, err := secp.ParsePubKey(point) + if err != nil { + return JacobianPoint{}, err + } + noncePk.AsJacobian(&result) + + return result, nil +} + +// JacobianToByteSlice converts the passed JacobianPoint to a Pubkey +// and serializes that to a byte slice. If the JacobianPoint is the infinity +// point, a zero slice is returned. +func JacobianToByteSlice(point JacobianPoint) []byte { + if point.X == infinityPoint.X && point.Y == infinityPoint.Y { + return make([]byte, 33) + } + + point.ToAffine() + + return NewPublicKey( + &point.X, &point.Y, + ).SerializeCompressed() +} + +// GeneratorJacobian sets the passed JacobianPoint to the Generator Point. +func GeneratorJacobian(jacobian *JacobianPoint) { + var k ModNScalar + k.SetInt(1) + ScalarBaseMultNonConst(&k, jacobian) +} diff --git a/btcec/ecdsa/bench_test.go b/btcec/ecdsa/bench_test.go new file mode 100644 index 0000000000..3e27994cd4 --- /dev/null +++ b/btcec/ecdsa/bench_test.go @@ -0,0 +1,210 @@ +// Copyright 2013-2016 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package ecdsa + +import ( + "encoding/hex" + "math/big" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// hexToBytes converts the passed hex string into bytes and will panic if there +// is an error. This is only provided for the hard-coded constants so errors in +// the source code can be detected. It will only (and must only) be called with +// hard-coded values. +func hexToBytes(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + return b +} + +// hexToModNScalar converts the passed hex string into a ModNScalar and will +// panic if there is an error. This is only provided for the hard-coded +// constants so errors in the source code can be detected. It will only (and +// must only) be called with hard-coded values. +func hexToModNScalar(s string) *btcec.ModNScalar { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + var scalar btcec.ModNScalar + if overflow := scalar.SetByteSlice(b); overflow { + panic("hex in source file overflows mod N scalar: " + s) + } + return &scalar +} + +// hexToFieldVal converts the passed hex string into a FieldVal and will panic +// if there is an error. This is only provided for the hard-coded constants so +// errors in the source code can be detected. It will only (and must only) be +// called with hard-coded values. +func hexToFieldVal(s string) *btcec.FieldVal { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + var f btcec.FieldVal + if overflow := f.SetByteSlice(b); overflow { + panic("hex in source file overflows mod P: " + s) + } + return &f +} + +// fromHex converts the passed hex string into a big integer pointer and will +// panic is there is an error. This is only provided for the hard-coded +// constants so errors in the source code can bet detected. It will only (and +// must only) be called for initialization purposes. +func fromHex(s string) *big.Int { + if s == "" { + return big.NewInt(0) + } + r, ok := new(big.Int).SetString(s, 16) + if !ok { + panic("invalid hex in source file: " + s) + } + return r +} + +// BenchmarkSigVerify benchmarks how long it takes the secp256k1 curve to +// verify signatures. +func BenchmarkSigVerify(b *testing.B) { + b.StopTimer() + // Randomly generated keypair. + // Private key: 9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d + pubKey := btcec.NewPublicKey( + hexToFieldVal("d2e670a19c6d753d1a6d8b20bd045df8a08fb162cf508956c31268c6d81ffdab"), + hexToFieldVal("ab65528eefbb8057aa85d597258a3fbd481a24633bc9b47a9aa045c91371de52"), + ) + + // Double sha256 of []byte{0x01, 0x02, 0x03, 0x04} + msgHash := fromHex("8de472e2399610baaa7f84840547cd409434e31f5d3bd71e4d947f283874f9c0") + sig := NewSignature( + hexToModNScalar("fef45d2892953aa5bbcdb057b5e98b208f1617a7498af7eb765574e29b5d9c2c"), + hexToModNScalar("d47563f52aac6b04b55de236b7c515eb9311757db01e02cff079c3ca6efb063f"), + ) + + if !sig.Verify(msgHash.Bytes(), pubKey) { + b.Errorf("Signature failed to verify") + return + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + sig.Verify(msgHash.Bytes(), pubKey) + } +} + +// BenchmarkSign benchmarks how long it takes to sign a message. +func BenchmarkSign(b *testing.B) { + // Randomly generated keypair. + d := hexToModNScalar("9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d") + privKey := secp256k1.NewPrivateKey(d) + + // blake256 of []byte{0x01, 0x02, 0x03, 0x04}. + msgHash := hexToBytes("c301ba9de5d6053caad9f5eb46523f007702add2c62fa39de03146a36b8026b7") + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + Sign(privKey, msgHash) + } +} + +// BenchmarkSigSerialize benchmarks how long it takes to serialize a typical +// signature with the strict DER encoding. +func BenchmarkSigSerialize(b *testing.B) { + // Randomly generated keypair. + // Private key: 9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d + // Signature for double sha256 of []byte{0x01, 0x02, 0x03, 0x04}. + sig := NewSignature( + hexToModNScalar("fef45d2892953aa5bbcdb057b5e98b208f1617a7498af7eb765574e29b5d9c2c"), + hexToModNScalar("d47563f52aac6b04b55de236b7c515eb9311757db01e02cff079c3ca6efb063f"), + ) + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + sig.Serialize() + } +} + +// BenchmarkNonceRFC6979 benchmarks how long it takes to generate a +// deterministic nonce according to RFC6979. +func BenchmarkNonceRFC6979(b *testing.B) { + // Randomly generated keypair. + // Private key: 9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d + // X: d2e670a19c6d753d1a6d8b20bd045df8a08fb162cf508956c31268c6d81ffdab + // Y: ab65528eefbb8057aa85d597258a3fbd481a24633bc9b47a9aa045c91371de52 + privKeyStr := "9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d" + privKey := hexToBytes(privKeyStr) + + // BLAKE-256 of []byte{0x01, 0x02, 0x03, 0x04}. + msgHash := hexToBytes("c301ba9de5d6053caad9f5eb46523f007702add2c62fa39de03146a36b8026b7") + + b.ReportAllocs() + b.ResetTimer() + var noElideNonce *secp256k1.ModNScalar + for i := 0; i < b.N; i++ { + noElideNonce = secp256k1.NonceRFC6979(privKey, msgHash, nil, nil, 0) + } + _ = noElideNonce +} + +// BenchmarkSignCompact benchmarks how long it takes to produce a compact +// signature for a message. +func BenchmarkSignCompact(b *testing.B) { + d := hexToModNScalar("9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d") + privKey := secp256k1.NewPrivateKey(d) + + // blake256 of []byte{0x01, 0x02, 0x03, 0x04}. + msgHash := hexToBytes("c301ba9de5d6053caad9f5eb46523f007702add2c62fa39de03146a36b8026b7") + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, _ = SignCompact(privKey, msgHash, true) + } +} + +// BenchmarkSignCompact benchmarks how long it takes to recover a public key +// given a compact signature and message. +func BenchmarkRecoverCompact(b *testing.B) { + // Private key: 9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d + wantPubKey := secp256k1.NewPublicKey( + hexToFieldVal("d2e670a19c6d753d1a6d8b20bd045df8a08fb162cf508956c31268c6d81ffdab"), + hexToFieldVal("ab65528eefbb8057aa85d597258a3fbd481a24633bc9b47a9aa045c91371de52"), + ) + + compactSig := hexToBytes("205978b7896bc71676ba2e459882a8f52e1299449596c4f" + + "93c59bf1fbfa2f9d3b76ecd0c99406f61a6de2bb5a8937c061c176ecf381d0231e0d" + + "af73b922c8952c7") + + // blake256 of []byte{0x01, 0x02, 0x03, 0x04}. + msgHash := hexToBytes("c301ba9de5d6053caad9f5eb46523f007702add2c62fa39de03146a36b8026b7") + + // Ensure a valid compact signature is being benchmarked. + pubKey, wasCompressed, err := RecoverCompact(compactSig, msgHash) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + if !wasCompressed { + b.Fatal("recover claims uncompressed pubkey") + } + if !pubKey.IsEqual(wantPubKey) { + b.Fatal("recover returned unexpected pubkey") + } + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, _, _ = RecoverCompact(compactSig, msgHash) + } +} diff --git a/btcec/ecdsa/error.go b/btcec/ecdsa/error.go new file mode 100644 index 0000000000..a30d63b636 --- /dev/null +++ b/btcec/ecdsa/error.go @@ -0,0 +1,18 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package ecdsa + +import ( + secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa" +) + +// ErrorKind identifies a kind of error. It has full support for +// errors.Is and errors.As, so the caller can directly check against +// an error kind when determining the reason for an error. +type ErrorKind = secp_ecdsa.ErrorKind + +// Error identifies an error related to an ECDSA signature. It has full +// support for errors.Is and errors.As, so the caller can ascertain the +// specific reason for the error by checking the underlying error. +type Error = secp_ecdsa.ErrorKind diff --git a/btcec/ecdsa/example_test.go b/btcec/ecdsa/example_test.go new file mode 100644 index 0000000000..409a95bd23 --- /dev/null +++ b/btcec/ecdsa/example_test.go @@ -0,0 +1,85 @@ +// Copyright (c) 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package ecdsa_test + +import ( + "encoding/hex" + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// This example demonstrates signing a message with a secp256k1 private key that +// is first parsed form raw bytes and serializing the generated signature. +func Example_signMessage() { + // Decode a hex-encoded private key. + pkBytes, err := hex.DecodeString("22a47fa09a223f2aa079edf85a7c2d4f87" + + "20ee63e502ee2869afab7de234b80c") + if err != nil { + fmt.Println(err) + return + } + privKey, pubKey := btcec.PrivKeyFromBytes(pkBytes) + + // Sign a message using the private key. + message := "test message" + messageHash := chainhash.DoubleHashB([]byte(message)) + signature := ecdsa.Sign(privKey, messageHash) + + // Serialize and display the signature. + fmt.Printf("Serialized Signature: %x\n", signature.Serialize()) + + // Verify the signature for the message using the public key. + verified := signature.Verify(messageHash, pubKey) + fmt.Printf("Signature Verified? %v\n", verified) + + // Output: + // Serialized Signature: 304402201008e236fa8cd0f25df4482dddbb622e8a8b26ef0ba731719458de3ccd93805b022032f8ebe514ba5f672466eba334639282616bb3c2f0ab09998037513d1f9e3d6d + // Signature Verified? true +} + +// This example demonstrates verifying a secp256k1 signature against a public +// key that is first parsed from raw bytes. The signature is also parsed from +// raw bytes. +func Example_verifySignature() { + // Decode hex-encoded serialized public key. + pubKeyBytes, err := hex.DecodeString("02a673638cb9587cb68ea08dbef685c" + + "6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5") + if err != nil { + fmt.Println(err) + return + } + pubKey, err := btcec.ParsePubKey(pubKeyBytes) + if err != nil { + fmt.Println(err) + return + } + + // Decode hex-encoded serialized signature. + sigBytes, err := hex.DecodeString("30450220090ebfb3690a0ff115bb1b38b" + + "8b323a667b7653454f1bccb06d4bbdca42c2079022100ec95778b51e707" + + "1cb1205f8bde9af6592fc978b0452dafe599481c46d6b2e479") + + if err != nil { + fmt.Println(err) + return + } + signature, err := ecdsa.ParseSignature(sigBytes) + if err != nil { + fmt.Println(err) + return + } + + // Verify the signature for the message using the public key. + message := "test message" + messageHash := chainhash.DoubleHashB([]byte(message)) + verified := signature.Verify(messageHash, pubKey) + fmt.Println("Signature Verified?", verified) + + // Output: + // Signature Verified? true +} diff --git a/btcec/ecdsa/signature.go b/btcec/ecdsa/signature.go new file mode 100644 index 0000000000..092e4ceb1c --- /dev/null +++ b/btcec/ecdsa/signature.go @@ -0,0 +1,240 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package ecdsa + +import ( + "errors" + "fmt" + "math/big" + + "github.com/btcsuite/btcd/btcec/v2" + secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4/ecdsa" +) + +// Errors returned by canonicalPadding. +var ( + errNegativeValue = errors.New("value may be interpreted as negative") + errExcessivelyPaddedValue = errors.New("value is excessively padded") +) + +// Signature is a type representing an ecdsa signature. +type Signature = secp_ecdsa.Signature + +// NewSignature instantiates a new signature given some r and s values. +func NewSignature(r, s *btcec.ModNScalar) *Signature { + return secp_ecdsa.NewSignature(r, s) +} + +var ( + // Used in RFC6979 implementation when testing the nonce for correctness + one = big.NewInt(1) + + // oneInitializer is used to fill a byte slice with byte 0x01. It is provided + // here to avoid the need to create it multiple times. + oneInitializer = []byte{0x01} +) + +// MinSigLen is the minimum length of a DER encoded signature and is when both R +// and S are 1 byte each. +// 0x30 + <1-byte> + 0x02 + 0x01 + + 0x2 + 0x01 + +const MinSigLen = 8 + +// canonicalPadding checks whether a big-endian encoded integer could +// possibly be misinterpreted as a negative number (even though OpenSSL +// treats all numbers as unsigned), or if there is any unnecessary +// leading zero padding. +func canonicalPadding(b []byte) error { + switch { + case b[0]&0x80 == 0x80: + return errNegativeValue + case len(b) > 1 && b[0] == 0x00 && b[1]&0x80 != 0x80: + return errExcessivelyPaddedValue + default: + return nil + } +} + +func parseSig(sigStr []byte, der bool) (*Signature, error) { + // Originally this code used encoding/asn1 in order to parse the + // signature, but a number of problems were found with this approach. + // Despite the fact that signatures are stored as DER, the difference + // between go's idea of a bignum (and that they have sign) doesn't agree + // with the openssl one (where they do not). The above is true as of + // Go 1.1. In the end it was simpler to rewrite the code to explicitly + // understand the format which is this: + // 0x30 <0x02> 0x2 + // . + + if len(sigStr) < MinSigLen { + return nil, errors.New("malformed signature: too short") + } + // 0x30 + index := 0 + if sigStr[index] != 0x30 { + return nil, errors.New("malformed signature: no header magic") + } + index++ + // length of remaining message + siglen := sigStr[index] + index++ + + // siglen should be less than the entire message and greater than + // the minimal message size. + if int(siglen+2) > len(sigStr) || int(siglen+2) < MinSigLen { + return nil, errors.New("malformed signature: bad length") + } + // trim the slice we're working on so we only look at what matters. + sigStr = sigStr[:siglen+2] + + // 0x02 + if sigStr[index] != 0x02 { + return nil, + errors.New("malformed signature: no 1st int marker") + } + index++ + + // Length of signature R. + rLen := int(sigStr[index]) + // must be positive, must be able to fit in another 0x2, + // hence the -3. We assume that the length must be at least one byte. + index++ + if rLen <= 0 || rLen > len(sigStr)-index-3 { + return nil, errors.New("malformed signature: bogus R length") + } + + // Then R itself. + rBytes := sigStr[index : index+rLen] + if der { + switch err := canonicalPadding(rBytes); err { + case errNegativeValue: + return nil, errors.New("signature R is negative") + case errExcessivelyPaddedValue: + return nil, errors.New("signature R is excessively padded") + } + } + + // Strip leading zeroes from R. + for len(rBytes) > 0 && rBytes[0] == 0x00 { + rBytes = rBytes[1:] + } + + // R must be in the range [1, N-1]. Notice the check for the maximum number + // of bytes is required because SetByteSlice truncates as noted in its + // comment so it could otherwise fail to detect the overflow. + var r btcec.ModNScalar + if len(rBytes) > 32 { + str := "invalid signature: R is larger than 256 bits" + return nil, errors.New(str) + } + if overflow := r.SetByteSlice(rBytes); overflow { + str := "invalid signature: R >= group order" + return nil, errors.New(str) + } + if r.IsZero() { + str := "invalid signature: R is 0" + return nil, errors.New(str) + } + index += rLen + // 0x02. length already checked in previous if. + if sigStr[index] != 0x02 { + return nil, errors.New("malformed signature: no 2nd int marker") + } + index++ + + // Length of signature S. + sLen := int(sigStr[index]) + index++ + // S should be the rest of the string. + if sLen <= 0 || sLen > len(sigStr)-index { + return nil, errors.New("malformed signature: bogus S length") + } + + // Then S itself. + sBytes := sigStr[index : index+sLen] + if der { + switch err := canonicalPadding(sBytes); err { + case errNegativeValue: + return nil, errors.New("signature S is negative") + case errExcessivelyPaddedValue: + return nil, errors.New("signature S is excessively padded") + } + } + + // Strip leading zeroes from S. + for len(sBytes) > 0 && sBytes[0] == 0x00 { + sBytes = sBytes[1:] + } + + // S must be in the range [1, N-1]. Notice the check for the maximum number + // of bytes is required because SetByteSlice truncates as noted in its + // comment so it could otherwise fail to detect the overflow. + var s btcec.ModNScalar + if len(sBytes) > 32 { + str := "invalid signature: S is larger than 256 bits" + return nil, errors.New(str) + } + if overflow := s.SetByteSlice(sBytes); overflow { + str := "invalid signature: S >= group order" + return nil, errors.New(str) + } + if s.IsZero() { + str := "invalid signature: S is 0" + return nil, errors.New(str) + } + index += sLen + + // sanity check length parsing + if index != len(sigStr) { + return nil, fmt.Errorf("malformed signature: bad final length %v != %v", + index, len(sigStr)) + } + + return NewSignature(&r, &s), nil +} + +// ParseSignature parses a signature in BER format for the curve type `curve' +// into a Signature type, perfoming some basic sanity checks. If parsing +// according to the more strict DER format is needed, use ParseDERSignature. +func ParseSignature(sigStr []byte) (*Signature, error) { + return parseSig(sigStr, false) +} + +// ParseDERSignature parses a signature in DER format for the curve type +// `curve` into a Signature type. If parsing according to the less strict +// BER format is needed, use ParseSignature. +func ParseDERSignature(sigStr []byte) (*Signature, error) { + return parseSig(sigStr, true) +} + +// SignCompact produces a compact signature of the data in hash with the given +// private key on the given koblitz curve. The isCompressed parameter should +// be used to detail if the given signature should reference a compressed +// public key or not. If successful the bytes of the compact signature will be +// returned in the format: +// <(byte of 27+public key solution)+4 if compressed >< padded bytes for signature R> +// where the R and S parameters are padde up to the bitlengh of the curve. +func SignCompact(key *btcec.PrivateKey, hash []byte, + isCompressedKey bool) ([]byte, error) { + + return secp_ecdsa.SignCompact(key, hash, isCompressedKey), nil +} + +// RecoverCompact verifies the compact signature "signature" of "hash" for the +// Koblitz curve in "curve". If the signature matches then the recovered public +// key will be returned as well as a boolean if the original key was compressed +// or not, else an error will be returned. +func RecoverCompact(signature, hash []byte) (*btcec.PublicKey, bool, error) { + return secp_ecdsa.RecoverCompact(signature, hash) +} + +// Sign generates an ECDSA signature over the secp256k1 curve for the provided +// hash (which should be the result of hashing a larger message) using the +// given private key. The produced signature is deterministic (same message and +// same key yield the same signature) and canonical in accordance with RFC6979 +// and BIP0062. +func Sign(key *btcec.PrivateKey, hash []byte) *Signature { + return secp_ecdsa.Sign(key, hash) +} diff --git a/btcec/signature_test.go b/btcec/ecdsa/signature_test.go similarity index 76% rename from btcec/signature_test.go rename to btcec/ecdsa/signature_test.go index 19ab772ef9..d2eebdc788 100644 --- a/btcec/signature_test.go +++ b/btcec/ecdsa/signature_test.go @@ -1,8 +1,9 @@ // Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. -package btcec +package ecdsa import ( "bytes" @@ -10,9 +11,10 @@ import ( "crypto/sha256" "encoding/hex" "fmt" - "math/big" "reflect" "testing" + + "github.com/btcsuite/btcd/btcec/v2" ) type signatureTest struct { @@ -337,17 +339,15 @@ func TestSignatures(t *testing.T) { for _, test := range signatureTests { var err error if test.der { - _, err = ParseDERSignature(test.sig, S256()) + _, err = ParseDERSignature(test.sig) } else { - _, err = ParseSignature(test.sig, S256()) + _, err = ParseSignature(test.sig) } if err != nil { if test.isValid { t.Errorf("%s signature failed when shouldn't %v", test.name, err) - } /* else { - t.Errorf("%s got error %v", test.name, err) - } */ + } continue } if !test.isValid { @@ -368,10 +368,10 @@ func TestSignatureSerialize(t *testing.T) { // 0437cd7f8525ceed2324359c2d0ba26006d92d85 { "valid 1 - r and s most significant bits are zero", - &Signature{ - R: fromHex("4e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd41"), - S: fromHex("181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09"), - }, + NewSignature( + hexToModNScalar("4e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd41"), + hexToModNScalar("181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09"), + ), []byte{ 0x30, 0x44, 0x02, 0x20, 0x4e, 0x45, 0xe1, 0x69, 0x32, 0xb8, 0xaf, 0x51, 0x49, 0x61, 0xa1, 0xd3, @@ -388,51 +388,51 @@ func TestSignatureSerialize(t *testing.T) { // cb00f8a0573b18faa8c4f467b049f5d202bf1101d9ef2633bc611be70376a4b4 { "valid 2 - r most significant bit is one", - &Signature{ - R: fromHex("0082235e21a2300022738dabb8e1bbd9d19cfb1e7ab8c30a23b0afbb8d178abcf3"), - S: fromHex("24bf68e256c534ddfaf966bf908deb944305596f7bdcc38d69acad7f9c868724"), - }, + NewSignature( + hexToModNScalar("0082235e21a2300022738dabb8e1bbd9d19cfb1e7ab8c30a23b0afbb8d178abcf3"), + hexToModNScalar("24bf68e256c534ddfaf966bf908deb944305596f7bdcc38d69acad7f9c868724"), + ), []byte{ - 0x30, 0x45, 0x02, 0x21, 0x00, 0x82, 0x23, 0x5e, + 0x30, 0x44, 0x02, 0x20, 0x00, 0x82, 0x23, 0x5e, 0x21, 0xa2, 0x30, 0x00, 0x22, 0x73, 0x8d, 0xab, 0xb8, 0xe1, 0xbb, 0xd9, 0xd1, 0x9c, 0xfb, 0x1e, 0x7a, 0xb8, 0xc3, 0x0a, 0x23, 0xb0, 0xaf, 0xbb, - 0x8d, 0x17, 0x8a, 0xbc, 0xf3, 0x02, 0x20, 0x24, - 0xbf, 0x68, 0xe2, 0x56, 0xc5, 0x34, 0xdd, 0xfa, - 0xf9, 0x66, 0xbf, 0x90, 0x8d, 0xeb, 0x94, 0x43, - 0x05, 0x59, 0x6f, 0x7b, 0xdc, 0xc3, 0x8d, 0x69, - 0xac, 0xad, 0x7f, 0x9c, 0x86, 0x87, 0x24, + 0x8d, 0x17, 0x8a, 0xbc, 0x02, 0x20, 0x24, 0xbf, + 0x68, 0xe2, 0x56, 0xc5, 0x34, 0xdd, 0xfa, 0xf9, + 0x66, 0xbf, 0x90, 0x8d, 0xeb, 0x94, 0x43, 0x05, + 0x59, 0x6f, 0x7b, 0xdc, 0xc3, 0x8d, 0x69, 0xac, + 0xad, 0x7f, 0x9c, 0x86, 0x87, 0x24, }, }, // signature from bitcoin blockchain tx // fda204502a3345e08afd6af27377c052e77f1fefeaeb31bdd45f1e1237ca5470 { "valid 3 - s most significant bit is one", - &Signature{ - R: fromHex("1cadddc2838598fee7dc35a12b340c6bde8b389f7bfd19a1252a17c4b5ed2d71"), - S: new(big.Int).Add(fromHex("00c1a251bbecb14b058a8bd77f65de87e51c47e95904f4c0e9d52eddc21c1415ac"), S256().N), - }, + NewSignature( + hexToModNScalar("1cadddc2838598fee7dc35a12b340c6bde8b389f7bfd19a1252a17c4b5ed2d71"), + hexToModNScalar("c1a251bbecb14b058a8bd77f65de87e51c47e95904f4c0e9d52eddc21c1415ac"), + ), []byte{ - 0x30, 0x45, 0x02, 0x20, 0x1c, 0xad, 0xdd, 0xc2, + 0x30, 0x44, 0x2, 0x20, 0x1c, 0xad, 0xdd, 0xc2, 0x83, 0x85, 0x98, 0xfe, 0xe7, 0xdc, 0x35, 0xa1, - 0x2b, 0x34, 0x0c, 0x6b, 0xde, 0x8b, 0x38, 0x9f, + 0x2b, 0x34, 0xc, 0x6b, 0xde, 0x8b, 0x38, 0x9f, 0x7b, 0xfd, 0x19, 0xa1, 0x25, 0x2a, 0x17, 0xc4, - 0xb5, 0xed, 0x2d, 0x71, 0x02, 0x21, 0x00, 0xc1, - 0xa2, 0x51, 0xbb, 0xec, 0xb1, 0x4b, 0x05, 0x8a, - 0x8b, 0xd7, 0x7f, 0x65, 0xde, 0x87, 0xe5, 0x1c, - 0x47, 0xe9, 0x59, 0x04, 0xf4, 0xc0, 0xe9, 0xd5, - 0x2e, 0xdd, 0xc2, 0x1c, 0x14, 0x15, 0xac, + 0xb5, 0xed, 0x2d, 0x71, 0x2, 0x20, 0x3e, 0x5d, + 0xae, 0x44, 0x13, 0x4e, 0xb4, 0xfa, 0x75, 0x74, + 0x28, 0x80, 0x9a, 0x21, 0x78, 0x19, 0x9e, 0x66, + 0xf3, 0x8d, 0xaa, 0x53, 0xdf, 0x51, 0xea, 0xa3, + 0x80, 0xca, 0xb4, 0x22, 0x2b, 0x95, }, }, { "valid 4 - s is bigger than half order", - &Signature{ - R: fromHex("a196ed0e7ebcbe7b63fe1d8eecbdbde03a67ceba4fc8f6482bdcb9606a911404"), - S: fromHex("971729c7fa944b465b35250c6570a2f31acbb14b13d1565fab7330dcb2b3dfb1"), - }, + NewSignature( + hexToModNScalar("a196ed0e7ebcbe7b63fe1d8eecbdbde03a67ceba4fc8f6482bdcb9606a911404"), + hexToModNScalar("971729c7fa944b465b35250c6570a2f31acbb14b13d1565fab7330dcb2b3dfb1"), + ), []byte{ 0x30, 0x45, 0x02, 0x21, 0x00, 0xa1, 0x96, 0xed, - 0x0e, 0x7e, 0xbc, 0xbe, 0x7b, 0x63, 0xfe, 0x1d, + 0xe, 0x7e, 0xbc, 0xbe, 0x7b, 0x63, 0xfe, 0x1d, 0x8e, 0xec, 0xbd, 0xbd, 0xe0, 0x3a, 0x67, 0xce, 0xba, 0x4f, 0xc8, 0xf6, 0x48, 0x2b, 0xdc, 0xb9, 0x60, 0x6a, 0x91, 0x14, 0x04, 0x02, 0x20, 0x68, @@ -444,10 +444,7 @@ func TestSignatureSerialize(t *testing.T) { }, { "zero signature", - &Signature{ - R: big.NewInt(0), - S: big.NewInt(0), - }, + NewSignature(&btcec.ModNScalar{}, &btcec.ModNScalar{}), []byte{0x30, 0x06, 0x02, 0x01, 0x00, 0x02, 0x01, 0x00}, }, } @@ -462,26 +459,26 @@ func TestSignatureSerialize(t *testing.T) { } } -func testSignCompact(t *testing.T, tag string, curve *KoblitzCurve, +func testSignCompact(t *testing.T, tag string, curve *btcec.KoblitzCurve, data []byte, isCompressed bool) { - tmp, _ := NewPrivateKey(curve) - priv := (*PrivateKey)(tmp) + priv, _ := btcec.NewPrivateKey() hashed := []byte("testing") - sig, err := SignCompact(curve, priv, hashed, isCompressed) + sig, err := SignCompact(priv, hashed, isCompressed) if err != nil { t.Errorf("%s: error signing: %s", tag, err) return } - pk, wasCompressed, err := RecoverCompact(curve, sig, hashed) + pk, wasCompressed, err := RecoverCompact(sig, hashed) if err != nil { t.Errorf("%s: error recovering: %s", tag, err) return } - if pk.X.Cmp(priv.X) != 0 || pk.Y.Cmp(priv.Y) != 0 { + if pk.X().Cmp(priv.PubKey().X()) != 0 || pk.Y().Cmp(priv.PubKey().Y()) != 0 { t.Errorf("%s: recovered pubkey doesn't match original "+ - "(%v,%v) vs (%v,%v) ", tag, pk.X, pk.Y, priv.X, priv.Y) + "(%v,%v) vs (%v,%v) ", tag, pk.X(), pk.Y(), + priv.PubKey().X(), priv.PubKey().Y()) return } if wasCompressed != isCompressed { @@ -498,14 +495,15 @@ func testSignCompact(t *testing.T, tag string, curve *KoblitzCurve, sig[0] += 4 } - pk, wasCompressed, err = RecoverCompact(curve, sig, hashed) + pk, wasCompressed, err = RecoverCompact(sig, hashed) if err != nil { t.Errorf("%s: error recovering (2): %s", tag, err) return } - if pk.X.Cmp(priv.X) != 0 || pk.Y.Cmp(priv.Y) != 0 { + if pk.X().Cmp(priv.PubKey().X()) != 0 || pk.Y().Cmp(priv.PubKey().Y()) != 0 { t.Errorf("%s: recovered pubkey (2) doesn't match original "+ - "(%v,%v) vs (%v,%v) ", tag, pk.X, pk.Y, priv.X, priv.Y) + "(%v,%v) vs (%v,%v) ", tag, pk.X(), pk.Y(), + priv.PubKey().X(), priv.PubKey().Y()) return } if wasCompressed == isCompressed { @@ -526,7 +524,7 @@ func TestSignCompact(t *testing.T) { continue } compressed := i%2 != 0 - testSignCompact(t, name, S256(), data, compressed) + testSignCompact(t, name, btcec.S256(), data, compressed) } } @@ -548,7 +546,13 @@ var recoveryTests = []struct { // Invalid curve point recovered. msg: "00c547e4f7b0f325ad1e56f57e26c745b09a3e503d86e00e5255ff7f715d3d1c", sig: "0100b1693892219d736caba55bdb67216e485557ea6b6af75f37096c9aa6a5a75f00b940b1d03b21e36b0e47e79769f095fe2ab855bd91e3a38756b7d75a9c4549", - err: fmt.Errorf("invalid square root"), + err: fmt.Errorf("signature is not for a valid curve point"), + }, + { + // Point at infinity recovered + msg: "6b8d2c81b11b2d699528dde488dbdf2f94293d0d33c32e347f255fa4a6c1f0a9", + sig: "0079be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f817986b8d2c81b11b2d699528dde488dbdf2f94293d0d33c32e347f255fa4a6c1f0a9", + err: fmt.Errorf("recovered pubkey is the point at infinity"), }, { // Low R and S values. @@ -556,6 +560,40 @@ var recoveryTests = []struct { sig: "00000000000000000000000000000000000000000000000000000000000000002c0000000000000000000000000000000000000000000000000000000000000004", pub: "04A7640409AA2083FDAD38B2D8DE1263B2251799591D840653FB02DBBA503D7745FCB83D80E08A1E02896BE691EA6AFFB8A35939A646F1FC79052A744B1C82EDC3", }, + { + // Zero R value + // + // Test case contributed by Ethereum Swarm: GH-1651 + msg: "3060d2c77c1e192d62ad712fb400e04e6f779914a6876328ff3b213fa85d2012", + sig: "65000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000037a3", + err: fmt.Errorf("invalid compact signature recovery code"), + }, + { + // Zero R value + // + // Test case contributed by Ethereum Swarm: GH-1651 + msg: "2bcebac60d8a78e520ae81c2ad586792df495ed429bd730dcd897b301932d054", + sig: "060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007c", + err: fmt.Errorf("signature R is 0"), + }, + { + // R = N (curve order of secp256k1) + msg: "2bcebac60d8a78e520ae81c2ad586792df495ed429bd730dcd897b301932d054", + sig: "65fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd036414100000000000000000000000000000000000000000000000000000000000037a3", + err: fmt.Errorf("invalid compact signature recovery code"), + }, + { + // Zero S value + msg: "ce0677bb30baa8cf067c88db9811f4333d131bf8bcf12fe7065d211dce971008", + sig: "0190f27b8b488db00b00606796d2987f6a5f59ae62ea05effe84fef5b8b0e549980000000000000000000000000000000000000000000000000000000000000000", + err: fmt.Errorf("signature S is 0"), + }, + { + // S = N (curve order of secp256k1) + msg: "ce0677bb30baa8cf067c88db9811f4333d131bf8bcf12fe7065d211dce971008", + sig: "0190f27b8b488db00b00606796d2987f6a5f59ae62ea05effe84fef5b8b0e54998fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", + err: fmt.Errorf("signature S is >= curve order"), + }, } func TestRecoverCompact(t *testing.T) { @@ -566,7 +604,7 @@ func TestRecoverCompact(t *testing.T) { // Magic DER constant. sig[0] += 27 - pub, _, err := RecoverCompact(S256(), sig, msg) + pub, _, err := RecoverCompact(sig, msg) // Verify that returned error matches as expected. if !reflect.DeepEqual(test.err, err) { @@ -583,7 +621,7 @@ func TestRecoverCompact(t *testing.T) { } // Otherwise, ensure the correct public key was recovered. - exPub, _ := ParsePubKey(decodeHex(test.pub), S256()) + exPub, _ := btcec.ParsePubKey(decodeHex(test.pub)) if !exPub.IsEqual(pub) { t.Errorf("unexpected recovered public key #%d: "+ "want %v, got %v", i, exPub, pub) @@ -642,13 +680,13 @@ func TestRFC6979(t *testing.T) { } for i, test := range tests { - privKey, _ := PrivKeyFromBytes(S256(), decodeHex(test.key)) + privKey, _ := btcec.PrivKeyFromBytes(decodeHex(test.key)) hash := sha256.Sum256([]byte(test.msg)) // Ensure deterministically generated nonce is the expected value. - gotNonce := nonceRFC6979(privKey.D, hash[:]).Bytes() + gotNonce := btcec.NonceRFC6979(privKey.Serialize(), hash[:], nil, nil, 0).Bytes() wantNonce := decodeHex(test.nonce) - if !bytes.Equal(gotNonce, wantNonce) { + if !bytes.Equal(gotNonce[:], wantNonce) { t.Errorf("NonceRFC6979 #%d (%s): Nonce is incorrect: "+ "%x (expected %x)", i, test.msg, gotNonce, wantNonce) @@ -656,12 +694,8 @@ func TestRFC6979(t *testing.T) { } // Ensure deterministically generated signature is the expected value. - gotSig, err := privKey.Sign(hash[:]) - if err != nil { - t.Errorf("Sign #%d (%s): unexpected error: %v", i, - test.msg, err) - continue - } + gotSig := Sign(privKey, hash[:]) + gotSigBytes := gotSig.Serialize() wantSigBytes := decodeHex(test.signature) if !bytes.Equal(gotSigBytes, wantSigBytes) { @@ -674,14 +708,14 @@ func TestRFC6979(t *testing.T) { } func TestSignatureIsEqual(t *testing.T) { - sig1 := &Signature{ - R: fromHex("0082235e21a2300022738dabb8e1bbd9d19cfb1e7ab8c30a23b0afbb8d178abcf3"), - S: fromHex("24bf68e256c534ddfaf966bf908deb944305596f7bdcc38d69acad7f9c868724"), - } - sig2 := &Signature{ - R: fromHex("4e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd41"), - S: fromHex("181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09"), - } + sig1 := NewSignature( + hexToModNScalar("0082235e21a2300022738dabb8e1bbd9d19cfb1e7ab8c30a23b0afbb8d178abcf3"), + hexToModNScalar("24bf68e256c534ddfaf966bf908deb944305596f7bdcc38d69acad7f9c868724"), + ) + sig2 := NewSignature( + hexToModNScalar("4e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd41"), + hexToModNScalar("181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d09"), + ) if !sig1.IsEqual(sig1) { t.Fatalf("value of IsEqual is incorrect, %v is "+ @@ -693,3 +727,65 @@ func TestSignatureIsEqual(t *testing.T) { "equal to %v", sig1, sig2) } } + +func testSignAndVerify(t *testing.T, c *btcec.KoblitzCurve, tag string) { + priv, _ := btcec.NewPrivateKey() + pub := priv.PubKey() + + hashed := []byte("testing") + sig := Sign(priv, hashed) + + if !sig.Verify(hashed, pub) { + t.Errorf("%s: Verify failed", tag) + } + + hashed[0] ^= 0xff + if sig.Verify(hashed, pub) { + t.Errorf("%s: Verify always works!", tag) + } +} + +func TestSignAndVerify(t *testing.T) { + testSignAndVerify(t, btcec.S256(), "S256") +} + +func TestPrivKeys(t *testing.T) { + tests := []struct { + name string + key []byte + }{ + { + name: "check curve", + key: []byte{ + 0xea, 0xf0, 0x2c, 0xa3, 0x48, 0xc5, 0x24, 0xe6, + 0x39, 0x26, 0x55, 0xba, 0x4d, 0x29, 0x60, 0x3c, + 0xd1, 0xa7, 0x34, 0x7d, 0x9d, 0x65, 0xcf, 0xe9, + 0x3c, 0xe1, 0xeb, 0xff, 0xdc, 0xa2, 0x26, 0x94, + }, + }, + } + + for _, test := range tests { + priv, pub := btcec.PrivKeyFromBytes(test.key) + + _, err := btcec.ParsePubKey(pub.SerializeUncompressed()) + if err != nil { + t.Errorf("%s privkey: %v", test.name, err) + continue + } + + hash := []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9} + sig := Sign(priv, hash) + + if !sig.Verify(hash, pub) { + t.Errorf("%s could not verify: %v", test.name, err) + continue + } + + serializedKey := priv.Serialize() + if !bytes.Equal(serializedKey, test.key) { + t.Errorf("%s unexpected serialized bytes - got: %x, "+ + "want: %x", test.name, serializedKey, test.key) + } + } +} diff --git a/btcec/error.go b/btcec/error.go new file mode 100644 index 0000000000..df6ec678a8 --- /dev/null +++ b/btcec/error.go @@ -0,0 +1,24 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// Error identifies an error related to public key cryptography using a +// sec256k1 curve. It has full support for errors.Is and errors.As, so the +// caller can ascertain the specific reason for the error by checking the +// underlying error. +type Error = secp.Error + +// ErrorKind identifies a kind of error. It has full support for errors.Is and +// errors.As, so the caller can directly check against an error kind when +// determining the reason for an error. +type ErrorKind = secp.ErrorKind + +// makeError creates an secp.Error given a set of arguments. +func makeError(kind ErrorKind, desc string) Error { + return Error{Err: kind, Description: desc} +} diff --git a/btcec/example_test.go b/btcec/example_test.go deleted file mode 100644 index ca51ee87cc..0000000000 --- a/btcec/example_test.go +++ /dev/null @@ -1,168 +0,0 @@ -// Copyright (c) 2014 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package btcec_test - -import ( - "encoding/hex" - "fmt" - - "github.com/btcsuite/btcd/btcec" - "github.com/btcsuite/btcd/chaincfg/chainhash" -) - -// This example demonstrates signing a message with a secp256k1 private key that -// is first parsed form raw bytes and serializing the generated signature. -func Example_signMessage() { - // Decode a hex-encoded private key. - pkBytes, err := hex.DecodeString("22a47fa09a223f2aa079edf85a7c2d4f87" + - "20ee63e502ee2869afab7de234b80c") - if err != nil { - fmt.Println(err) - return - } - privKey, pubKey := btcec.PrivKeyFromBytes(btcec.S256(), pkBytes) - - // Sign a message using the private key. - message := "test message" - messageHash := chainhash.DoubleHashB([]byte(message)) - signature, err := privKey.Sign(messageHash) - if err != nil { - fmt.Println(err) - return - } - - // Serialize and display the signature. - fmt.Printf("Serialized Signature: %x\n", signature.Serialize()) - - // Verify the signature for the message using the public key. - verified := signature.Verify(messageHash, pubKey) - fmt.Printf("Signature Verified? %v\n", verified) - - // Output: - // Serialized Signature: 304402201008e236fa8cd0f25df4482dddbb622e8a8b26ef0ba731719458de3ccd93805b022032f8ebe514ba5f672466eba334639282616bb3c2f0ab09998037513d1f9e3d6d - // Signature Verified? true -} - -// This example demonstrates verifying a secp256k1 signature against a public -// key that is first parsed from raw bytes. The signature is also parsed from -// raw bytes. -func Example_verifySignature() { - // Decode hex-encoded serialized public key. - pubKeyBytes, err := hex.DecodeString("02a673638cb9587cb68ea08dbef685c" + - "6f2d2a751a8b3c6f2a7e9a4999e6e4bfaf5") - if err != nil { - fmt.Println(err) - return - } - pubKey, err := btcec.ParsePubKey(pubKeyBytes, btcec.S256()) - if err != nil { - fmt.Println(err) - return - } - - // Decode hex-encoded serialized signature. - sigBytes, err := hex.DecodeString("30450220090ebfb3690a0ff115bb1b38b" + - "8b323a667b7653454f1bccb06d4bbdca42c2079022100ec95778b51e707" + - "1cb1205f8bde9af6592fc978b0452dafe599481c46d6b2e479") - - if err != nil { - fmt.Println(err) - return - } - signature, err := btcec.ParseSignature(sigBytes, btcec.S256()) - if err != nil { - fmt.Println(err) - return - } - - // Verify the signature for the message using the public key. - message := "test message" - messageHash := chainhash.DoubleHashB([]byte(message)) - verified := signature.Verify(messageHash, pubKey) - fmt.Println("Signature Verified?", verified) - - // Output: - // Signature Verified? true -} - -// This example demonstrates encrypting a message for a public key that is first -// parsed from raw bytes, then decrypting it using the corresponding private key. -func Example_encryptMessage() { - // Decode the hex-encoded pubkey of the recipient. - pubKeyBytes, err := hex.DecodeString("04115c42e757b2efb7671c578530ec191a1" + - "359381e6a71127a9d37c486fd30dae57e76dc58f693bd7e7010358ce6b165e483a29" + - "21010db67ac11b1b51b651953d2") // uncompressed pubkey - if err != nil { - fmt.Println(err) - return - } - pubKey, err := btcec.ParsePubKey(pubKeyBytes, btcec.S256()) - if err != nil { - fmt.Println(err) - return - } - - // Encrypt a message decryptable by the private key corresponding to pubKey - message := "test message" - ciphertext, err := btcec.Encrypt(pubKey, []byte(message)) - if err != nil { - fmt.Println(err) - return - } - - // Decode the hex-encoded private key. - pkBytes, err := hex.DecodeString("a11b0a4e1a132305652ee7a8eb7848f6ad" + - "5ea381e3ce20a2c086a2e388230811") - if err != nil { - fmt.Println(err) - return - } - // note that we already have corresponding pubKey - privKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), pkBytes) - - // Try decrypting and verify if it's the same message. - plaintext, err := btcec.Decrypt(privKey, ciphertext) - if err != nil { - fmt.Println(err) - return - } - - fmt.Println(string(plaintext)) - - // Output: - // test message -} - -// This example demonstrates decrypting a message using a private key that is -// first parsed from raw bytes. -func Example_decryptMessage() { - // Decode the hex-encoded private key. - pkBytes, err := hex.DecodeString("a11b0a4e1a132305652ee7a8eb7848f6ad" + - "5ea381e3ce20a2c086a2e388230811") - if err != nil { - fmt.Println(err) - return - } - - privKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), pkBytes) - - ciphertext, err := hex.DecodeString("35f644fbfb208bc71e57684c3c8b437402ca" + - "002047a2f1b38aa1a8f1d5121778378414f708fe13ebf7b4a7bb74407288c1958969" + - "00207cf4ac6057406e40f79961c973309a892732ae7a74ee96cd89823913b8b8d650" + - "a44166dc61ea1c419d47077b748a9c06b8d57af72deb2819d98a9d503efc59fc8307" + - "d14174f8b83354fac3ff56075162") - - // Try decrypting the message. - plaintext, err := btcec.Decrypt(privKey, ciphertext) - if err != nil { - fmt.Println(err) - return - } - - fmt.Println(string(plaintext)) - - // Output: - // test message -} diff --git a/btcec/field.go b/btcec/field.go index c2bb84b3fe..fef6f345da 100644 --- a/btcec/field.go +++ b/btcec/field.go @@ -1,1352 +1,43 @@ -// Copyright (c) 2013-2016 The btcsuite developers -// Copyright (c) 2013-2016 Dave Collins -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - package btcec -// References: -// [HAC]: Handbook of Applied Cryptography Menezes, van Oorschot, Vanstone. -// http://cacr.uwaterloo.ca/hac/ - -// All elliptic curve operations for secp256k1 are done in a finite field -// characterized by a 256-bit prime. Given this precision is larger than the -// biggest available native type, obviously some form of bignum math is needed. -// This package implements specialized fixed-precision field arithmetic rather -// than relying on an arbitrary-precision arithmetic package such as math/big -// for dealing with the field math since the size is known. As a result, rather -// large performance gains are achieved by taking advantage of many -// optimizations not available to arbitrary-precision arithmetic and generic -// modular arithmetic algorithms. -// -// There are various ways to internally represent each finite field element. -// For example, the most obvious representation would be to use an array of 4 -// uint64s (64 bits * 4 = 256 bits). However, that representation suffers from -// a couple of issues. First, there is no native Go type large enough to handle -// the intermediate results while adding or multiplying two 64-bit numbers, and -// second there is no space left for overflows when performing the intermediate -// arithmetic between each array element which would lead to expensive carry -// propagation. -// -// Given the above, this implementation represents the the field elements as -// 10 uint32s with each word (array entry) treated as base 2^26. This was -// chosen for the following reasons: -// 1) Most systems at the current time are 64-bit (or at least have 64-bit -// registers available for specialized purposes such as MMX) so the -// intermediate results can typically be done using a native register (and -// using uint64s to avoid the need for additional half-word arithmetic) -// 2) In order to allow addition of the internal words without having to -// propagate the the carry, the max normalized value for each register must -// be less than the number of bits available in the register -// 3) Since we're dealing with 32-bit values, 64-bits of overflow is a -// reasonable choice for #2 -// 4) Given the need for 256-bits of precision and the properties stated in #1, -// #2, and #3, the representation which best accommodates this is 10 uint32s -// with base 2^26 (26 bits * 10 = 260 bits, so the final word only needs 22 -// bits) which leaves the desired 64 bits (32 * 10 = 320, 320 - 256 = 64) for -// overflow -// -// Since it is so important that the field arithmetic is extremely fast for -// high performance crypto, this package does not perform any validation where -// it ordinarily would. For example, some functions only give the correct -// result is the field is normalized and there is no checking to ensure it is. -// While I typically prefer to ensure all state and input is valid for most -// packages, this code is really only used internally and every extra check -// counts. - -import ( - "encoding/hex" -) - -// Constants used to make the code more readable. -const ( - twoBitsMask = 0x3 - fourBitsMask = 0xf - sixBitsMask = 0x3f - eightBitsMask = 0xff -) - -// Constants related to the field representation. -const ( - // fieldWords is the number of words used to internally represent the - // 256-bit value. - fieldWords = 10 - - // fieldBase is the exponent used to form the numeric base of each word. - // 2^(fieldBase*i) where i is the word position. - fieldBase = 26 - - // fieldOverflowBits is the minimum number of "overflow" bits for each - // word in the field value. - fieldOverflowBits = 32 - fieldBase - - // fieldBaseMask is the mask for the bits in each word needed to - // represent the numeric base of each word (except the most significant - // word). - fieldBaseMask = (1 << fieldBase) - 1 - - // fieldMSBBits is the number of bits in the most significant word used - // to represent the value. - fieldMSBBits = 256 - (fieldBase * (fieldWords - 1)) - - // fieldMSBMask is the mask for the bits in the most significant word - // needed to represent the value. - fieldMSBMask = (1 << fieldMSBBits) - 1 - - // fieldPrimeWordZero is word zero of the secp256k1 prime in the - // internal field representation. It is used during negation. - fieldPrimeWordZero = 0x3fffc2f - - // fieldPrimeWordOne is word one of the secp256k1 prime in the - // internal field representation. It is used during negation. - fieldPrimeWordOne = 0x3ffffbf -) - -var ( - // fieldQBytes is the value Q = (P+1)/4 for the secp256k1 prime P. This - // value is used to efficiently compute the square root of values in the - // field via exponentiation. The value of Q in hex is: - // - // Q = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff0c - fieldQBytes = []byte{ - 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, - 0xff, 0xff, 0xff, 0xff, 0xbf, 0xff, 0xff, 0x0c, - } -) - -// fieldVal implements optimized fixed-precision arithmetic over the -// secp256k1 finite field. This means all arithmetic is performed modulo -// 0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f. It -// represents each 256-bit value as 10 32-bit integers in base 2^26. This -// provides 6 bits of overflow in each word (10 bits in the most significant -// word) for a total of 64 bits of overflow (9*6 + 10 = 64). It only implements -// the arithmetic needed for elliptic curve operations. -// -// The following depicts the internal representation: -// ----------------------------------------------------------------- -// | n[9] | n[8] | ... | n[0] | -// | 32 bits available | 32 bits available | ... | 32 bits available | -// | 22 bits for value | 26 bits for value | ... | 26 bits for value | -// | 10 bits overflow | 6 bits overflow | ... | 6 bits overflow | -// | Mult: 2^(26*9) | Mult: 2^(26*8) | ... | Mult: 2^(26*0) | -// ----------------------------------------------------------------- -// -// For example, consider the number 2^49 + 1. It would be represented as: -// n[0] = 1 -// n[1] = 2^23 -// n[2..9] = 0 -// -// The full 256-bit value is then calculated by looping i from 9..0 and -// doing sum(n[i] * 2^(26i)) like so: -// n[9] * 2^(26*9) = 0 * 2^234 = 0 -// n[8] * 2^(26*8) = 0 * 2^208 = 0 -// ... -// n[1] * 2^(26*1) = 2^23 * 2^26 = 2^49 -// n[0] * 2^(26*0) = 1 * 2^0 = 1 -// Sum: 0 + 0 + ... + 2^49 + 1 = 2^49 + 1 -type fieldVal struct { - n [10]uint32 -} - -// String returns the field value as a human-readable hex string. -func (f fieldVal) String() string { - t := new(fieldVal).Set(&f).Normalize() - return hex.EncodeToString(t.Bytes()[:]) -} - -// Zero sets the field value to zero. A newly created field value is already -// set to zero. This function can be useful to clear an existing field value -// for reuse. -func (f *fieldVal) Zero() { - f.n[0] = 0 - f.n[1] = 0 - f.n[2] = 0 - f.n[3] = 0 - f.n[4] = 0 - f.n[5] = 0 - f.n[6] = 0 - f.n[7] = 0 - f.n[8] = 0 - f.n[9] = 0 -} - -// Set sets the field value equal to the passed value. -// -// The field value is returned to support chaining. This enables syntax like: -// f := new(fieldVal).Set(f2).Add(1) so that f = f2 + 1 where f2 is not -// modified. -func (f *fieldVal) Set(val *fieldVal) *fieldVal { - *f = *val - return f -} - -// SetInt sets the field value to the passed integer. This is a convenience -// function since it is fairly common to perform some arithemetic with small -// native integers. -// -// The field value is returned to support chaining. This enables syntax such -// as f := new(fieldVal).SetInt(2).Mul(f2) so that f = 2 * f2. -func (f *fieldVal) SetInt(ui uint) *fieldVal { - f.Zero() - f.n[0] = uint32(ui) - return f -} - -// SetBytes packs the passed 32-byte big-endian value into the internal field -// value representation. -// -// The field value is returned to support chaining. This enables syntax like: -// f := new(fieldVal).SetBytes(byteArray).Mul(f2) so that f = ba * f2. -func (f *fieldVal) SetBytes(b *[32]byte) *fieldVal { - // Pack the 256 total bits across the 10 uint32 words with a max of - // 26-bits per word. This could be done with a couple of for loops, - // but this unrolled version is significantly faster. Benchmarks show - // this is about 34 times faster than the variant which uses loops. - f.n[0] = uint32(b[31]) | uint32(b[30])<<8 | uint32(b[29])<<16 | - (uint32(b[28])&twoBitsMask)<<24 - f.n[1] = uint32(b[28])>>2 | uint32(b[27])<<6 | uint32(b[26])<<14 | - (uint32(b[25])&fourBitsMask)<<22 - f.n[2] = uint32(b[25])>>4 | uint32(b[24])<<4 | uint32(b[23])<<12 | - (uint32(b[22])&sixBitsMask)<<20 - f.n[3] = uint32(b[22])>>6 | uint32(b[21])<<2 | uint32(b[20])<<10 | - uint32(b[19])<<18 - f.n[4] = uint32(b[18]) | uint32(b[17])<<8 | uint32(b[16])<<16 | - (uint32(b[15])&twoBitsMask)<<24 - f.n[5] = uint32(b[15])>>2 | uint32(b[14])<<6 | uint32(b[13])<<14 | - (uint32(b[12])&fourBitsMask)<<22 - f.n[6] = uint32(b[12])>>4 | uint32(b[11])<<4 | uint32(b[10])<<12 | - (uint32(b[9])&sixBitsMask)<<20 - f.n[7] = uint32(b[9])>>6 | uint32(b[8])<<2 | uint32(b[7])<<10 | - uint32(b[6])<<18 - f.n[8] = uint32(b[5]) | uint32(b[4])<<8 | uint32(b[3])<<16 | - (uint32(b[2])&twoBitsMask)<<24 - f.n[9] = uint32(b[2])>>2 | uint32(b[1])<<6 | uint32(b[0])<<14 - return f -} - -// SetByteSlice packs the passed big-endian value into the internal field value -// representation. Only the first 32-bytes are used. As a result, it is up to -// the caller to ensure numbers of the appropriate size are used or the value -// will be truncated. -// -// The field value is returned to support chaining. This enables syntax like: -// f := new(fieldVal).SetByteSlice(byteSlice) -func (f *fieldVal) SetByteSlice(b []byte) *fieldVal { - var b32 [32]byte - for i := 0; i < len(b); i++ { - if i < 32 { - b32[i+(32-len(b))] = b[i] - } - } - return f.SetBytes(&b32) -} - -// SetHex decodes the passed big-endian hex string into the internal field value -// representation. Only the first 32-bytes are used. -// -// The field value is returned to support chaining. This enables syntax like: -// f := new(fieldVal).SetHex("0abc").Add(1) so that f = 0x0abc + 1 -func (f *fieldVal) SetHex(hexString string) *fieldVal { - if len(hexString)%2 != 0 { - hexString = "0" + hexString - } - bytes, _ := hex.DecodeString(hexString) - return f.SetByteSlice(bytes) -} - -// Normalize normalizes the internal field words into the desired range and -// performs fast modular reduction over the secp256k1 prime by making use of the -// special form of the prime. -func (f *fieldVal) Normalize() *fieldVal { - // The field representation leaves 6 bits of overflow in each word so - // intermediate calculations can be performed without needing to - // propagate the carry to each higher word during the calculations. In - // order to normalize, we need to "compact" the full 256-bit value to - // the right while propagating any carries through to the high order - // word. - // - // Since this field is doing arithmetic modulo the secp256k1 prime, we - // also need to perform modular reduction over the prime. - // - // Per [HAC] section 14.3.4: Reduction method of moduli of special form, - // when the modulus is of the special form m = b^t - c, highly efficient - // reduction can be achieved. - // - // The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits - // this criteria. - // - // 4294968273 in field representation (base 2^26) is: - // n[0] = 977 - // n[1] = 64 - // That is to say (2^26 * 64) + 977 = 4294968273 - // - // The algorithm presented in the referenced section typically repeats - // until the quotient is zero. However, due to our field representation - // we already know to within one reduction how many times we would need - // to repeat as it's the uppermost bits of the high order word. Thus we - // can simply multiply the magnitude by the field representation of the - // prime and do a single iteration. After this step there might be an - // additional carry to bit 256 (bit 22 of the high order word). - t9 := f.n[9] - m := t9 >> fieldMSBBits - t9 = t9 & fieldMSBMask - t0 := f.n[0] + m*977 - t1 := (t0 >> fieldBase) + f.n[1] + (m << 6) - t0 = t0 & fieldBaseMask - t2 := (t1 >> fieldBase) + f.n[2] - t1 = t1 & fieldBaseMask - t3 := (t2 >> fieldBase) + f.n[3] - t2 = t2 & fieldBaseMask - t4 := (t3 >> fieldBase) + f.n[4] - t3 = t3 & fieldBaseMask - t5 := (t4 >> fieldBase) + f.n[5] - t4 = t4 & fieldBaseMask - t6 := (t5 >> fieldBase) + f.n[6] - t5 = t5 & fieldBaseMask - t7 := (t6 >> fieldBase) + f.n[7] - t6 = t6 & fieldBaseMask - t8 := (t7 >> fieldBase) + f.n[8] - t7 = t7 & fieldBaseMask - t9 = (t8 >> fieldBase) + t9 - t8 = t8 & fieldBaseMask - - // At this point, the magnitude is guaranteed to be one, however, the - // value could still be greater than the prime if there was either a - // carry through to bit 256 (bit 22 of the higher order word) or the - // value is greater than or equal to the field characteristic. The - // following determines if either or these conditions are true and does - // the final reduction in constant time. - // - // Note that the if/else statements here intentionally do the bitwise - // operators even when it won't change the value to ensure constant time - // between the branches. Also note that 'm' will be zero when neither - // of the aforementioned conditions are true and the value will not be - // changed when 'm' is zero. - m = 1 - if t9 == fieldMSBMask { - m &= 1 - } else { - m &= 0 - } - if t2&t3&t4&t5&t6&t7&t8 == fieldBaseMask { - m &= 1 - } else { - m &= 0 - } - if ((t0+977)>>fieldBase + t1 + 64) > fieldBaseMask { - m &= 1 - } else { - m &= 0 - } - if t9>>fieldMSBBits != 0 { - m |= 1 - } else { - m |= 0 - } - t0 = t0 + m*977 - t1 = (t0 >> fieldBase) + t1 + (m << 6) - t0 = t0 & fieldBaseMask - t2 = (t1 >> fieldBase) + t2 - t1 = t1 & fieldBaseMask - t3 = (t2 >> fieldBase) + t3 - t2 = t2 & fieldBaseMask - t4 = (t3 >> fieldBase) + t4 - t3 = t3 & fieldBaseMask - t5 = (t4 >> fieldBase) + t5 - t4 = t4 & fieldBaseMask - t6 = (t5 >> fieldBase) + t6 - t5 = t5 & fieldBaseMask - t7 = (t6 >> fieldBase) + t7 - t6 = t6 & fieldBaseMask - t8 = (t7 >> fieldBase) + t8 - t7 = t7 & fieldBaseMask - t9 = (t8 >> fieldBase) + t9 - t8 = t8 & fieldBaseMask - t9 = t9 & fieldMSBMask // Remove potential multiple of 2^256. - - // Finally, set the normalized and reduced words. - f.n[0] = t0 - f.n[1] = t1 - f.n[2] = t2 - f.n[3] = t3 - f.n[4] = t4 - f.n[5] = t5 - f.n[6] = t6 - f.n[7] = t7 - f.n[8] = t8 - f.n[9] = t9 - return f -} - -// PutBytes unpacks the field value to a 32-byte big-endian value using the -// passed byte array. There is a similar function, Bytes, which unpacks the -// field value into a new array and returns that. This version is provided -// since it can be useful to cut down on the number of allocations by allowing -// the caller to reuse a buffer. -// -// The field value must be normalized for this function to return the correct -// result. -func (f *fieldVal) PutBytes(b *[32]byte) { - // Unpack the 256 total bits from the 10 uint32 words with a max of - // 26-bits per word. This could be done with a couple of for loops, - // but this unrolled version is a bit faster. Benchmarks show this is - // about 10 times faster than the variant which uses loops. - b[31] = byte(f.n[0] & eightBitsMask) - b[30] = byte((f.n[0] >> 8) & eightBitsMask) - b[29] = byte((f.n[0] >> 16) & eightBitsMask) - b[28] = byte((f.n[0]>>24)&twoBitsMask | (f.n[1]&sixBitsMask)<<2) - b[27] = byte((f.n[1] >> 6) & eightBitsMask) - b[26] = byte((f.n[1] >> 14) & eightBitsMask) - b[25] = byte((f.n[1]>>22)&fourBitsMask | (f.n[2]&fourBitsMask)<<4) - b[24] = byte((f.n[2] >> 4) & eightBitsMask) - b[23] = byte((f.n[2] >> 12) & eightBitsMask) - b[22] = byte((f.n[2]>>20)&sixBitsMask | (f.n[3]&twoBitsMask)<<6) - b[21] = byte((f.n[3] >> 2) & eightBitsMask) - b[20] = byte((f.n[3] >> 10) & eightBitsMask) - b[19] = byte((f.n[3] >> 18) & eightBitsMask) - b[18] = byte(f.n[4] & eightBitsMask) - b[17] = byte((f.n[4] >> 8) & eightBitsMask) - b[16] = byte((f.n[4] >> 16) & eightBitsMask) - b[15] = byte((f.n[4]>>24)&twoBitsMask | (f.n[5]&sixBitsMask)<<2) - b[14] = byte((f.n[5] >> 6) & eightBitsMask) - b[13] = byte((f.n[5] >> 14) & eightBitsMask) - b[12] = byte((f.n[5]>>22)&fourBitsMask | (f.n[6]&fourBitsMask)<<4) - b[11] = byte((f.n[6] >> 4) & eightBitsMask) - b[10] = byte((f.n[6] >> 12) & eightBitsMask) - b[9] = byte((f.n[6]>>20)&sixBitsMask | (f.n[7]&twoBitsMask)<<6) - b[8] = byte((f.n[7] >> 2) & eightBitsMask) - b[7] = byte((f.n[7] >> 10) & eightBitsMask) - b[6] = byte((f.n[7] >> 18) & eightBitsMask) - b[5] = byte(f.n[8] & eightBitsMask) - b[4] = byte((f.n[8] >> 8) & eightBitsMask) - b[3] = byte((f.n[8] >> 16) & eightBitsMask) - b[2] = byte((f.n[8]>>24)&twoBitsMask | (f.n[9]&sixBitsMask)<<2) - b[1] = byte((f.n[9] >> 6) & eightBitsMask) - b[0] = byte((f.n[9] >> 14) & eightBitsMask) -} - -// Bytes unpacks the field value to a 32-byte big-endian value. See PutBytes -// for a variant that allows the a buffer to be passed which can be useful to -// to cut down on the number of allocations by allowing the caller to reuse a -// buffer. -// -// The field value must be normalized for this function to return correct -// result. -func (f *fieldVal) Bytes() *[32]byte { - b := new([32]byte) - f.PutBytes(b) - return b -} - -// IsZero returns whether or not the field value is equal to zero. -func (f *fieldVal) IsZero() bool { - // The value can only be zero if no bits are set in any of the words. - // This is a constant time implementation. - bits := f.n[0] | f.n[1] | f.n[2] | f.n[3] | f.n[4] | - f.n[5] | f.n[6] | f.n[7] | f.n[8] | f.n[9] - - return bits == 0 -} - -// IsOdd returns whether or not the field value is an odd number. -// -// The field value must be normalized for this function to return correct -// result. -func (f *fieldVal) IsOdd() bool { - // Only odd numbers have the bottom bit set. - return f.n[0]&1 == 1 -} - -// Equals returns whether or not the two field values are the same. Both -// field values being compared must be normalized for this function to return -// the correct result. -func (f *fieldVal) Equals(val *fieldVal) bool { - // Xor only sets bits when they are different, so the two field values - // can only be the same if no bits are set after xoring each word. - // This is a constant time implementation. - bits := (f.n[0] ^ val.n[0]) | (f.n[1] ^ val.n[1]) | (f.n[2] ^ val.n[2]) | - (f.n[3] ^ val.n[3]) | (f.n[4] ^ val.n[4]) | (f.n[5] ^ val.n[5]) | - (f.n[6] ^ val.n[6]) | (f.n[7] ^ val.n[7]) | (f.n[8] ^ val.n[8]) | - (f.n[9] ^ val.n[9]) - - return bits == 0 -} - -// NegateVal negates the passed value and stores the result in f. The caller -// must provide the magnitude of the passed value for a correct result. -// -// The field value is returned to support chaining. This enables syntax like: -// f.NegateVal(f2).AddInt(1) so that f = -f2 + 1. -func (f *fieldVal) NegateVal(val *fieldVal, magnitude uint32) *fieldVal { - // Negation in the field is just the prime minus the value. However, - // in order to allow negation against a field value without having to - // normalize/reduce it first, multiply by the magnitude (that is how - // "far" away it is from the normalized value) to adjust. Also, since - // negating a value pushes it one more order of magnitude away from the - // normalized range, add 1 to compensate. - // - // For some intuition here, imagine you're performing mod 12 arithmetic - // (picture a clock) and you are negating the number 7. So you start at - // 12 (which is of course 0 under mod 12) and count backwards (left on - // the clock) 7 times to arrive at 5. Notice this is just 12-7 = 5. - // Now, assume you're starting with 19, which is a number that is - // already larger than the modulus and congruent to 7 (mod 12). When a - // value is already in the desired range, its magnitude is 1. Since 19 - // is an additional "step", its magnitude (mod 12) is 2. Since any - // multiple of the modulus is conguent to zero (mod m), the answer can - // be shortcut by simply mulplying the magnitude by the modulus and - // subtracting. Keeping with the example, this would be (2*12)-19 = 5. - f.n[0] = (magnitude+1)*fieldPrimeWordZero - val.n[0] - f.n[1] = (magnitude+1)*fieldPrimeWordOne - val.n[1] - f.n[2] = (magnitude+1)*fieldBaseMask - val.n[2] - f.n[3] = (magnitude+1)*fieldBaseMask - val.n[3] - f.n[4] = (magnitude+1)*fieldBaseMask - val.n[4] - f.n[5] = (magnitude+1)*fieldBaseMask - val.n[5] - f.n[6] = (magnitude+1)*fieldBaseMask - val.n[6] - f.n[7] = (magnitude+1)*fieldBaseMask - val.n[7] - f.n[8] = (magnitude+1)*fieldBaseMask - val.n[8] - f.n[9] = (magnitude+1)*fieldMSBMask - val.n[9] - - return f -} - -// Negate negates the field value. The existing field value is modified. The -// caller must provide the magnitude of the field value for a correct result. -// -// The field value is returned to support chaining. This enables syntax like: -// f.Negate().AddInt(1) so that f = -f + 1. -func (f *fieldVal) Negate(magnitude uint32) *fieldVal { - return f.NegateVal(f, magnitude) -} - -// AddInt adds the passed integer to the existing field value and stores the -// result in f. This is a convenience function since it is fairly common to -// perform some arithemetic with small native integers. -// -// The field value is returned to support chaining. This enables syntax like: -// f.AddInt(1).Add(f2) so that f = f + 1 + f2. -func (f *fieldVal) AddInt(ui uint) *fieldVal { - // Since the field representation intentionally provides overflow bits, - // it's ok to use carryless addition as the carry bit is safely part of - // the word and will be normalized out. - f.n[0] += uint32(ui) - - return f -} - -// Add adds the passed value to the existing field value and stores the result -// in f. -// -// The field value is returned to support chaining. This enables syntax like: -// f.Add(f2).AddInt(1) so that f = f + f2 + 1. -func (f *fieldVal) Add(val *fieldVal) *fieldVal { - // Since the field representation intentionally provides overflow bits, - // it's ok to use carryless addition as the carry bit is safely part of - // each word and will be normalized out. This could obviously be done - // in a loop, but the unrolled version is faster. - f.n[0] += val.n[0] - f.n[1] += val.n[1] - f.n[2] += val.n[2] - f.n[3] += val.n[3] - f.n[4] += val.n[4] - f.n[5] += val.n[5] - f.n[6] += val.n[6] - f.n[7] += val.n[7] - f.n[8] += val.n[8] - f.n[9] += val.n[9] - - return f -} - -// Add2 adds the passed two field values together and stores the result in f. -// -// The field value is returned to support chaining. This enables syntax like: -// f3.Add2(f, f2).AddInt(1) so that f3 = f + f2 + 1. -func (f *fieldVal) Add2(val *fieldVal, val2 *fieldVal) *fieldVal { - // Since the field representation intentionally provides overflow bits, - // it's ok to use carryless addition as the carry bit is safely part of - // each word and will be normalized out. This could obviously be done - // in a loop, but the unrolled version is faster. - f.n[0] = val.n[0] + val2.n[0] - f.n[1] = val.n[1] + val2.n[1] - f.n[2] = val.n[2] + val2.n[2] - f.n[3] = val.n[3] + val2.n[3] - f.n[4] = val.n[4] + val2.n[4] - f.n[5] = val.n[5] + val2.n[5] - f.n[6] = val.n[6] + val2.n[6] - f.n[7] = val.n[7] + val2.n[7] - f.n[8] = val.n[8] + val2.n[8] - f.n[9] = val.n[9] + val2.n[9] - - return f -} - -// MulInt multiplies the field value by the passed int and stores the result in -// f. Note that this function can overflow if multiplying the value by any of -// the individual words exceeds a max uint32. Therefore it is important that -// the caller ensures no overflows will occur before using this function. -// -// The field value is returned to support chaining. This enables syntax like: -// f.MulInt(2).Add(f2) so that f = 2 * f + f2. -func (f *fieldVal) MulInt(val uint) *fieldVal { - // Since each word of the field representation can hold up to - // fieldOverflowBits extra bits which will be normalized out, it's safe - // to multiply each word without using a larger type or carry - // propagation so long as the values won't overflow a uint32. This - // could obviously be done in a loop, but the unrolled version is - // faster. - ui := uint32(val) - f.n[0] *= ui - f.n[1] *= ui - f.n[2] *= ui - f.n[3] *= ui - f.n[4] *= ui - f.n[5] *= ui - f.n[6] *= ui - f.n[7] *= ui - f.n[8] *= ui - f.n[9] *= ui - - return f -} - -// Mul multiplies the passed value to the existing field value and stores the -// result in f. Note that this function can overflow if multiplying any -// of the individual words exceeds a max uint32. In practice, this means the -// magnitude of either value involved in the multiplication must be a max of -// 8. -// -// The field value is returned to support chaining. This enables syntax like: -// f.Mul(f2).AddInt(1) so that f = (f * f2) + 1. -func (f *fieldVal) Mul(val *fieldVal) *fieldVal { - return f.Mul2(f, val) -} - -// Mul2 multiplies the passed two field values together and stores the result -// result in f. Note that this function can overflow if multiplying any of -// the individual words exceeds a max uint32. In practice, this means the -// magnitude of either value involved in the multiplication must be a max of -// 8. -// -// The field value is returned to support chaining. This enables syntax like: -// f3.Mul2(f, f2).AddInt(1) so that f3 = (f * f2) + 1. -func (f *fieldVal) Mul2(val *fieldVal, val2 *fieldVal) *fieldVal { - // This could be done with a couple of for loops and an array to store - // the intermediate terms, but this unrolled version is significantly - // faster. - - // Terms for 2^(fieldBase*0). - m := uint64(val.n[0]) * uint64(val2.n[0]) - t0 := m & fieldBaseMask - - // Terms for 2^(fieldBase*1). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[1]) + - uint64(val.n[1])*uint64(val2.n[0]) - t1 := m & fieldBaseMask - - // Terms for 2^(fieldBase*2). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[2]) + - uint64(val.n[1])*uint64(val2.n[1]) + - uint64(val.n[2])*uint64(val2.n[0]) - t2 := m & fieldBaseMask - - // Terms for 2^(fieldBase*3). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[3]) + - uint64(val.n[1])*uint64(val2.n[2]) + - uint64(val.n[2])*uint64(val2.n[1]) + - uint64(val.n[3])*uint64(val2.n[0]) - t3 := m & fieldBaseMask - - // Terms for 2^(fieldBase*4). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[4]) + - uint64(val.n[1])*uint64(val2.n[3]) + - uint64(val.n[2])*uint64(val2.n[2]) + - uint64(val.n[3])*uint64(val2.n[1]) + - uint64(val.n[4])*uint64(val2.n[0]) - t4 := m & fieldBaseMask - - // Terms for 2^(fieldBase*5). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[5]) + - uint64(val.n[1])*uint64(val2.n[4]) + - uint64(val.n[2])*uint64(val2.n[3]) + - uint64(val.n[3])*uint64(val2.n[2]) + - uint64(val.n[4])*uint64(val2.n[1]) + - uint64(val.n[5])*uint64(val2.n[0]) - t5 := m & fieldBaseMask - - // Terms for 2^(fieldBase*6). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[6]) + - uint64(val.n[1])*uint64(val2.n[5]) + - uint64(val.n[2])*uint64(val2.n[4]) + - uint64(val.n[3])*uint64(val2.n[3]) + - uint64(val.n[4])*uint64(val2.n[2]) + - uint64(val.n[5])*uint64(val2.n[1]) + - uint64(val.n[6])*uint64(val2.n[0]) - t6 := m & fieldBaseMask - - // Terms for 2^(fieldBase*7). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[7]) + - uint64(val.n[1])*uint64(val2.n[6]) + - uint64(val.n[2])*uint64(val2.n[5]) + - uint64(val.n[3])*uint64(val2.n[4]) + - uint64(val.n[4])*uint64(val2.n[3]) + - uint64(val.n[5])*uint64(val2.n[2]) + - uint64(val.n[6])*uint64(val2.n[1]) + - uint64(val.n[7])*uint64(val2.n[0]) - t7 := m & fieldBaseMask - - // Terms for 2^(fieldBase*8). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[8]) + - uint64(val.n[1])*uint64(val2.n[7]) + - uint64(val.n[2])*uint64(val2.n[6]) + - uint64(val.n[3])*uint64(val2.n[5]) + - uint64(val.n[4])*uint64(val2.n[4]) + - uint64(val.n[5])*uint64(val2.n[3]) + - uint64(val.n[6])*uint64(val2.n[2]) + - uint64(val.n[7])*uint64(val2.n[1]) + - uint64(val.n[8])*uint64(val2.n[0]) - t8 := m & fieldBaseMask - - // Terms for 2^(fieldBase*9). - m = (m >> fieldBase) + - uint64(val.n[0])*uint64(val2.n[9]) + - uint64(val.n[1])*uint64(val2.n[8]) + - uint64(val.n[2])*uint64(val2.n[7]) + - uint64(val.n[3])*uint64(val2.n[6]) + - uint64(val.n[4])*uint64(val2.n[5]) + - uint64(val.n[5])*uint64(val2.n[4]) + - uint64(val.n[6])*uint64(val2.n[3]) + - uint64(val.n[7])*uint64(val2.n[2]) + - uint64(val.n[8])*uint64(val2.n[1]) + - uint64(val.n[9])*uint64(val2.n[0]) - t9 := m & fieldBaseMask - - // Terms for 2^(fieldBase*10). - m = (m >> fieldBase) + - uint64(val.n[1])*uint64(val2.n[9]) + - uint64(val.n[2])*uint64(val2.n[8]) + - uint64(val.n[3])*uint64(val2.n[7]) + - uint64(val.n[4])*uint64(val2.n[6]) + - uint64(val.n[5])*uint64(val2.n[5]) + - uint64(val.n[6])*uint64(val2.n[4]) + - uint64(val.n[7])*uint64(val2.n[3]) + - uint64(val.n[8])*uint64(val2.n[2]) + - uint64(val.n[9])*uint64(val2.n[1]) - t10 := m & fieldBaseMask - - // Terms for 2^(fieldBase*11). - m = (m >> fieldBase) + - uint64(val.n[2])*uint64(val2.n[9]) + - uint64(val.n[3])*uint64(val2.n[8]) + - uint64(val.n[4])*uint64(val2.n[7]) + - uint64(val.n[5])*uint64(val2.n[6]) + - uint64(val.n[6])*uint64(val2.n[5]) + - uint64(val.n[7])*uint64(val2.n[4]) + - uint64(val.n[8])*uint64(val2.n[3]) + - uint64(val.n[9])*uint64(val2.n[2]) - t11 := m & fieldBaseMask - - // Terms for 2^(fieldBase*12). - m = (m >> fieldBase) + - uint64(val.n[3])*uint64(val2.n[9]) + - uint64(val.n[4])*uint64(val2.n[8]) + - uint64(val.n[5])*uint64(val2.n[7]) + - uint64(val.n[6])*uint64(val2.n[6]) + - uint64(val.n[7])*uint64(val2.n[5]) + - uint64(val.n[8])*uint64(val2.n[4]) + - uint64(val.n[9])*uint64(val2.n[3]) - t12 := m & fieldBaseMask - - // Terms for 2^(fieldBase*13). - m = (m >> fieldBase) + - uint64(val.n[4])*uint64(val2.n[9]) + - uint64(val.n[5])*uint64(val2.n[8]) + - uint64(val.n[6])*uint64(val2.n[7]) + - uint64(val.n[7])*uint64(val2.n[6]) + - uint64(val.n[8])*uint64(val2.n[5]) + - uint64(val.n[9])*uint64(val2.n[4]) - t13 := m & fieldBaseMask - - // Terms for 2^(fieldBase*14). - m = (m >> fieldBase) + - uint64(val.n[5])*uint64(val2.n[9]) + - uint64(val.n[6])*uint64(val2.n[8]) + - uint64(val.n[7])*uint64(val2.n[7]) + - uint64(val.n[8])*uint64(val2.n[6]) + - uint64(val.n[9])*uint64(val2.n[5]) - t14 := m & fieldBaseMask - - // Terms for 2^(fieldBase*15). - m = (m >> fieldBase) + - uint64(val.n[6])*uint64(val2.n[9]) + - uint64(val.n[7])*uint64(val2.n[8]) + - uint64(val.n[8])*uint64(val2.n[7]) + - uint64(val.n[9])*uint64(val2.n[6]) - t15 := m & fieldBaseMask - - // Terms for 2^(fieldBase*16). - m = (m >> fieldBase) + - uint64(val.n[7])*uint64(val2.n[9]) + - uint64(val.n[8])*uint64(val2.n[8]) + - uint64(val.n[9])*uint64(val2.n[7]) - t16 := m & fieldBaseMask - - // Terms for 2^(fieldBase*17). - m = (m >> fieldBase) + - uint64(val.n[8])*uint64(val2.n[9]) + - uint64(val.n[9])*uint64(val2.n[8]) - t17 := m & fieldBaseMask - - // Terms for 2^(fieldBase*18). - m = (m >> fieldBase) + uint64(val.n[9])*uint64(val2.n[9]) - t18 := m & fieldBaseMask - - // What's left is for 2^(fieldBase*19). - t19 := m >> fieldBase - - // At this point, all of the terms are grouped into their respective - // base. - // - // Per [HAC] section 14.3.4: Reduction method of moduli of special form, - // when the modulus is of the special form m = b^t - c, highly efficient - // reduction can be achieved per the provided algorithm. - // - // The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits - // this criteria. - // - // 4294968273 in field representation (base 2^26) is: - // n[0] = 977 - // n[1] = 64 - // That is to say (2^26 * 64) + 977 = 4294968273 - // - // Since each word is in base 26, the upper terms (t10 and up) start - // at 260 bits (versus the final desired range of 256 bits), so the - // field representation of 'c' from above needs to be adjusted for the - // extra 4 bits by multiplying it by 2^4 = 16. 4294968273 * 16 = - // 68719492368. Thus, the adjusted field representation of 'c' is: - // n[0] = 977 * 16 = 15632 - // n[1] = 64 * 16 = 1024 - // That is to say (2^26 * 1024) + 15632 = 68719492368 - // - // To reduce the final term, t19, the entire 'c' value is needed instead - // of only n[0] because there are no more terms left to handle n[1]. - // This means there might be some magnitude left in the upper bits that - // is handled below. - m = t0 + t10*15632 - t0 = m & fieldBaseMask - m = (m >> fieldBase) + t1 + t10*1024 + t11*15632 - t1 = m & fieldBaseMask - m = (m >> fieldBase) + t2 + t11*1024 + t12*15632 - t2 = m & fieldBaseMask - m = (m >> fieldBase) + t3 + t12*1024 + t13*15632 - t3 = m & fieldBaseMask - m = (m >> fieldBase) + t4 + t13*1024 + t14*15632 - t4 = m & fieldBaseMask - m = (m >> fieldBase) + t5 + t14*1024 + t15*15632 - t5 = m & fieldBaseMask - m = (m >> fieldBase) + t6 + t15*1024 + t16*15632 - t6 = m & fieldBaseMask - m = (m >> fieldBase) + t7 + t16*1024 + t17*15632 - t7 = m & fieldBaseMask - m = (m >> fieldBase) + t8 + t17*1024 + t18*15632 - t8 = m & fieldBaseMask - m = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368 - t9 = m & fieldMSBMask - m = m >> fieldMSBBits - - // At this point, if the magnitude is greater than 0, the overall value - // is greater than the max possible 256-bit value. In particular, it is - // "how many times larger" than the max value it is. - // - // The algorithm presented in [HAC] section 14.3.4 repeats until the - // quotient is zero. However, due to the above, we already know at - // least how many times we would need to repeat as it's the value - // currently in m. Thus we can simply multiply the magnitude by the - // field representation of the prime and do a single iteration. Notice - // that nothing will be changed when the magnitude is zero, so we could - // skip this in that case, however always running regardless allows it - // to run in constant time. The final result will be in the range - // 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a - // magnitude of 1, but it is denormalized. - d := t0 + m*977 - f.n[0] = uint32(d & fieldBaseMask) - d = (d >> fieldBase) + t1 + m*64 - f.n[1] = uint32(d & fieldBaseMask) - f.n[2] = uint32((d >> fieldBase) + t2) - f.n[3] = uint32(t3) - f.n[4] = uint32(t4) - f.n[5] = uint32(t5) - f.n[6] = uint32(t6) - f.n[7] = uint32(t7) - f.n[8] = uint32(t8) - f.n[9] = uint32(t9) - - return f -} - -// Square squares the field value. The existing field value is modified. Note -// that this function can overflow if multiplying any of the individual words -// exceeds a max uint32. In practice, this means the magnitude of the field -// must be a max of 8 to prevent overflow. -// -// The field value is returned to support chaining. This enables syntax like: -// f.Square().Mul(f2) so that f = f^2 * f2. -func (f *fieldVal) Square() *fieldVal { - return f.SquareVal(f) -} - -// SquareVal squares the passed value and stores the result in f. Note that -// this function can overflow if multiplying any of the individual words -// exceeds a max uint32. In practice, this means the magnitude of the field -// being squred must be a max of 8 to prevent overflow. -// -// The field value is returned to support chaining. This enables syntax like: -// f3.SquareVal(f).Mul(f) so that f3 = f^2 * f = f^3. -func (f *fieldVal) SquareVal(val *fieldVal) *fieldVal { - // This could be done with a couple of for loops and an array to store - // the intermediate terms, but this unrolled version is significantly - // faster. - - // Terms for 2^(fieldBase*0). - m := uint64(val.n[0]) * uint64(val.n[0]) - t0 := m & fieldBaseMask - - // Terms for 2^(fieldBase*1). - m = (m >> fieldBase) + 2*uint64(val.n[0])*uint64(val.n[1]) - t1 := m & fieldBaseMask - - // Terms for 2^(fieldBase*2). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[2]) + - uint64(val.n[1])*uint64(val.n[1]) - t2 := m & fieldBaseMask - - // Terms for 2^(fieldBase*3). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[3]) + - 2*uint64(val.n[1])*uint64(val.n[2]) - t3 := m & fieldBaseMask - - // Terms for 2^(fieldBase*4). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[4]) + - 2*uint64(val.n[1])*uint64(val.n[3]) + - uint64(val.n[2])*uint64(val.n[2]) - t4 := m & fieldBaseMask - - // Terms for 2^(fieldBase*5). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[5]) + - 2*uint64(val.n[1])*uint64(val.n[4]) + - 2*uint64(val.n[2])*uint64(val.n[3]) - t5 := m & fieldBaseMask - - // Terms for 2^(fieldBase*6). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[6]) + - 2*uint64(val.n[1])*uint64(val.n[5]) + - 2*uint64(val.n[2])*uint64(val.n[4]) + - uint64(val.n[3])*uint64(val.n[3]) - t6 := m & fieldBaseMask - - // Terms for 2^(fieldBase*7). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[7]) + - 2*uint64(val.n[1])*uint64(val.n[6]) + - 2*uint64(val.n[2])*uint64(val.n[5]) + - 2*uint64(val.n[3])*uint64(val.n[4]) - t7 := m & fieldBaseMask - - // Terms for 2^(fieldBase*8). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[8]) + - 2*uint64(val.n[1])*uint64(val.n[7]) + - 2*uint64(val.n[2])*uint64(val.n[6]) + - 2*uint64(val.n[3])*uint64(val.n[5]) + - uint64(val.n[4])*uint64(val.n[4]) - t8 := m & fieldBaseMask - - // Terms for 2^(fieldBase*9). - m = (m >> fieldBase) + - 2*uint64(val.n[0])*uint64(val.n[9]) + - 2*uint64(val.n[1])*uint64(val.n[8]) + - 2*uint64(val.n[2])*uint64(val.n[7]) + - 2*uint64(val.n[3])*uint64(val.n[6]) + - 2*uint64(val.n[4])*uint64(val.n[5]) - t9 := m & fieldBaseMask - - // Terms for 2^(fieldBase*10). - m = (m >> fieldBase) + - 2*uint64(val.n[1])*uint64(val.n[9]) + - 2*uint64(val.n[2])*uint64(val.n[8]) + - 2*uint64(val.n[3])*uint64(val.n[7]) + - 2*uint64(val.n[4])*uint64(val.n[6]) + - uint64(val.n[5])*uint64(val.n[5]) - t10 := m & fieldBaseMask - - // Terms for 2^(fieldBase*11). - m = (m >> fieldBase) + - 2*uint64(val.n[2])*uint64(val.n[9]) + - 2*uint64(val.n[3])*uint64(val.n[8]) + - 2*uint64(val.n[4])*uint64(val.n[7]) + - 2*uint64(val.n[5])*uint64(val.n[6]) - t11 := m & fieldBaseMask - - // Terms for 2^(fieldBase*12). - m = (m >> fieldBase) + - 2*uint64(val.n[3])*uint64(val.n[9]) + - 2*uint64(val.n[4])*uint64(val.n[8]) + - 2*uint64(val.n[5])*uint64(val.n[7]) + - uint64(val.n[6])*uint64(val.n[6]) - t12 := m & fieldBaseMask - - // Terms for 2^(fieldBase*13). - m = (m >> fieldBase) + - 2*uint64(val.n[4])*uint64(val.n[9]) + - 2*uint64(val.n[5])*uint64(val.n[8]) + - 2*uint64(val.n[6])*uint64(val.n[7]) - t13 := m & fieldBaseMask - - // Terms for 2^(fieldBase*14). - m = (m >> fieldBase) + - 2*uint64(val.n[5])*uint64(val.n[9]) + - 2*uint64(val.n[6])*uint64(val.n[8]) + - uint64(val.n[7])*uint64(val.n[7]) - t14 := m & fieldBaseMask - - // Terms for 2^(fieldBase*15). - m = (m >> fieldBase) + - 2*uint64(val.n[6])*uint64(val.n[9]) + - 2*uint64(val.n[7])*uint64(val.n[8]) - t15 := m & fieldBaseMask - - // Terms for 2^(fieldBase*16). - m = (m >> fieldBase) + - 2*uint64(val.n[7])*uint64(val.n[9]) + - uint64(val.n[8])*uint64(val.n[8]) - t16 := m & fieldBaseMask - - // Terms for 2^(fieldBase*17). - m = (m >> fieldBase) + 2*uint64(val.n[8])*uint64(val.n[9]) - t17 := m & fieldBaseMask - - // Terms for 2^(fieldBase*18). - m = (m >> fieldBase) + uint64(val.n[9])*uint64(val.n[9]) - t18 := m & fieldBaseMask - - // What's left is for 2^(fieldBase*19). - t19 := m >> fieldBase - - // At this point, all of the terms are grouped into their respective - // base. - // - // Per [HAC] section 14.3.4: Reduction method of moduli of special form, - // when the modulus is of the special form m = b^t - c, highly efficient - // reduction can be achieved per the provided algorithm. - // - // The secp256k1 prime is equivalent to 2^256 - 4294968273, so it fits - // this criteria. - // - // 4294968273 in field representation (base 2^26) is: - // n[0] = 977 - // n[1] = 64 - // That is to say (2^26 * 64) + 977 = 4294968273 - // - // Since each word is in base 26, the upper terms (t10 and up) start - // at 260 bits (versus the final desired range of 256 bits), so the - // field representation of 'c' from above needs to be adjusted for the - // extra 4 bits by multiplying it by 2^4 = 16. 4294968273 * 16 = - // 68719492368. Thus, the adjusted field representation of 'c' is: - // n[0] = 977 * 16 = 15632 - // n[1] = 64 * 16 = 1024 - // That is to say (2^26 * 1024) + 15632 = 68719492368 - // - // To reduce the final term, t19, the entire 'c' value is needed instead - // of only n[0] because there are no more terms left to handle n[1]. - // This means there might be some magnitude left in the upper bits that - // is handled below. - m = t0 + t10*15632 - t0 = m & fieldBaseMask - m = (m >> fieldBase) + t1 + t10*1024 + t11*15632 - t1 = m & fieldBaseMask - m = (m >> fieldBase) + t2 + t11*1024 + t12*15632 - t2 = m & fieldBaseMask - m = (m >> fieldBase) + t3 + t12*1024 + t13*15632 - t3 = m & fieldBaseMask - m = (m >> fieldBase) + t4 + t13*1024 + t14*15632 - t4 = m & fieldBaseMask - m = (m >> fieldBase) + t5 + t14*1024 + t15*15632 - t5 = m & fieldBaseMask - m = (m >> fieldBase) + t6 + t15*1024 + t16*15632 - t6 = m & fieldBaseMask - m = (m >> fieldBase) + t7 + t16*1024 + t17*15632 - t7 = m & fieldBaseMask - m = (m >> fieldBase) + t8 + t17*1024 + t18*15632 - t8 = m & fieldBaseMask - m = (m >> fieldBase) + t9 + t18*1024 + t19*68719492368 - t9 = m & fieldMSBMask - m = m >> fieldMSBBits - - // At this point, if the magnitude is greater than 0, the overall value - // is greater than the max possible 256-bit value. In particular, it is - // "how many times larger" than the max value it is. - // - // The algorithm presented in [HAC] section 14.3.4 repeats until the - // quotient is zero. However, due to the above, we already know at - // least how many times we would need to repeat as it's the value - // currently in m. Thus we can simply multiply the magnitude by the - // field representation of the prime and do a single iteration. Notice - // that nothing will be changed when the magnitude is zero, so we could - // skip this in that case, however always running regardless allows it - // to run in constant time. The final result will be in the range - // 0 <= result <= prime + (2^64 - c), so it is guaranteed to have a - // magnitude of 1, but it is denormalized. - n := t0 + m*977 - f.n[0] = uint32(n & fieldBaseMask) - n = (n >> fieldBase) + t1 + m*64 - f.n[1] = uint32(n & fieldBaseMask) - f.n[2] = uint32((n >> fieldBase) + t2) - f.n[3] = uint32(t3) - f.n[4] = uint32(t4) - f.n[5] = uint32(t5) - f.n[6] = uint32(t6) - f.n[7] = uint32(t7) - f.n[8] = uint32(t8) - f.n[9] = uint32(t9) - - return f -} - -// Inverse finds the modular multiplicative inverse of the field value. The -// existing field value is modified. -// -// The field value is returned to support chaining. This enables syntax like: -// f.Inverse().Mul(f2) so that f = f^-1 * f2. -func (f *fieldVal) Inverse() *fieldVal { - // Fermat's little theorem states that for a nonzero number a and prime - // prime p, a^(p-1) = 1 (mod p). Since the multipliciative inverse is - // a*b = 1 (mod p), it follows that b = a*a^(p-2) = a^(p-1) = 1 (mod p). - // Thus, a^(p-2) is the multiplicative inverse. - // - // In order to efficiently compute a^(p-2), p-2 needs to be split into - // a sequence of squares and multipications that minimizes the number of - // multiplications needed (since they are more costly than squarings). - // Intermediate results are saved and reused as well. - // - // The secp256k1 prime - 2 is 2^256 - 4294968275. - // - // This has a cost of 258 field squarings and 33 field multiplications. - var a2, a3, a4, a10, a11, a21, a42, a45, a63, a1019, a1023 fieldVal - a2.SquareVal(f) - a3.Mul2(&a2, f) - a4.SquareVal(&a2) - a10.SquareVal(&a4).Mul(&a2) - a11.Mul2(&a10, f) - a21.Mul2(&a10, &a11) - a42.SquareVal(&a21) - a45.Mul2(&a42, &a3) - a63.Mul2(&a42, &a21) - a1019.SquareVal(&a63).Square().Square().Square().Mul(&a11) - a1023.Mul2(&a1019, &a4) - f.Set(&a63) // f = a^(2^6 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^11 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^16 - 1024) - f.Mul(&a1023) // f = a^(2^16 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^21 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^26 - 1024) - f.Mul(&a1023) // f = a^(2^26 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^31 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^36 - 1024) - f.Mul(&a1023) // f = a^(2^36 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^41 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^46 - 1024) - f.Mul(&a1023) // f = a^(2^46 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^51 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^56 - 1024) - f.Mul(&a1023) // f = a^(2^56 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^61 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^66 - 1024) - f.Mul(&a1023) // f = a^(2^66 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^71 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^76 - 1024) - f.Mul(&a1023) // f = a^(2^76 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^81 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^86 - 1024) - f.Mul(&a1023) // f = a^(2^86 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^91 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^96 - 1024) - f.Mul(&a1023) // f = a^(2^96 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^101 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^106 - 1024) - f.Mul(&a1023) // f = a^(2^106 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^111 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^116 - 1024) - f.Mul(&a1023) // f = a^(2^116 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^121 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^126 - 1024) - f.Mul(&a1023) // f = a^(2^126 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^131 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^136 - 1024) - f.Mul(&a1023) // f = a^(2^136 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^141 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^146 - 1024) - f.Mul(&a1023) // f = a^(2^146 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^151 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^156 - 1024) - f.Mul(&a1023) // f = a^(2^156 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^161 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^166 - 1024) - f.Mul(&a1023) // f = a^(2^166 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^171 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^176 - 1024) - f.Mul(&a1023) // f = a^(2^176 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^181 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^186 - 1024) - f.Mul(&a1023) // f = a^(2^186 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^191 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^196 - 1024) - f.Mul(&a1023) // f = a^(2^196 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^201 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^206 - 1024) - f.Mul(&a1023) // f = a^(2^206 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^211 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^216 - 1024) - f.Mul(&a1023) // f = a^(2^216 - 1) - f.Square().Square().Square().Square().Square() // f = a^(2^221 - 32) - f.Square().Square().Square().Square().Square() // f = a^(2^226 - 1024) - f.Mul(&a1019) // f = a^(2^226 - 5) - f.Square().Square().Square().Square().Square() // f = a^(2^231 - 160) - f.Square().Square().Square().Square().Square() // f = a^(2^236 - 5120) - f.Mul(&a1023) // f = a^(2^236 - 4097) - f.Square().Square().Square().Square().Square() // f = a^(2^241 - 131104) - f.Square().Square().Square().Square().Square() // f = a^(2^246 - 4195328) - f.Mul(&a1023) // f = a^(2^246 - 4194305) - f.Square().Square().Square().Square().Square() // f = a^(2^251 - 134217760) - f.Square().Square().Square().Square().Square() // f = a^(2^256 - 4294968320) - return f.Mul(&a45) // f = a^(2^256 - 4294968275) = a^(p-2) -} - -// SqrtVal computes the square root of x modulo the curve's prime, and stores -// the result in f. The square root is computed via exponentiation of x by the -// value Q = (P+1)/4 using the curve's precomputed big-endian representation of -// the Q. This method uses a modified version of square-and-multiply -// exponentiation over secp256k1 fieldVals to operate on bytes instead of bits, -// which offers better performance over both big.Int exponentiation and bit-wise -// square-and-multiply. -// -// NOTE: This method only works when P is intended to be the secp256k1 prime and -// is not constant time. The returned value is of magnitude 1, but is -// denormalized. -func (f *fieldVal) SqrtVal(x *fieldVal) *fieldVal { - // The following computation iteratively computes x^((P+1)/4) = x^Q - // using the recursive, piece-wise definition: - // - // x^n = (x^2)^(n/2) mod P if n is even - // x^n = x(x^2)^(n-1/2) mod P if n is odd - // - // Given n in its big-endian representation b_k, ..., b_0, x^n can be - // computed by defining the sequence r_k+1, ..., r_0, where: - // - // r_k+1 = 1 - // r_i = (r_i+1)^2 * x^b_i for i = k, ..., 0 - // - // The final value r_0 = x^n. - // - // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more - // details. - // - // This can be further optimized, by observing that the value of Q in - // secp256k1 has the value: - // - // Q = 3fffffffffffffffffffffffffffffffffffffffffffffffffffffffbfffff0c - // - // We can unroll the typical bit-wise interpretation of the - // exponentiation algorithm above to instead operate on bytes. - // This reduces the number of comparisons by an order of magnitude, - // reducing the overhead of failed branch predictions and additional - // comparisons in this method. - // - // Since there there are only 4 unique bytes of Q, this keeps the jump - // table small without the need to handle all possible 8-bit values. - // Further, we observe that 29 of the 32 bytes are 0xff; making the - // first case handle 0xff therefore optimizes the hot path. - f.SetInt(1) - for _, b := range fieldQBytes { - switch b { - - // Most common case, where all 8 bits are set. - case 0xff: - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - - // First byte of Q (0x3f), where all but the top two bits are - // set. Note that this case only applies six operations, since - // the highest bit of Q resides in bit six of the first byte. We - // ignore the first two bits, since squaring for these bits will - // result in an invalid result. We forgo squaring f before the - // first multiply, since 1^2 = 1. - case 0x3f: - f.Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - - // Byte 28 of Q (0xbf), where only bit 7 is unset. - case 0xbf: - f.Square().Mul(x) - f.Square() - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - f.Square().Mul(x) - - // Byte 31 of Q (0x0c), where only bits 3 and 4 are set. - default: - f.Square() - f.Square() - f.Square() - f.Square() - f.Square().Mul(x) - f.Square().Mul(x) - f.Square() - f.Square() - } - } - - return f -} - -// Sqrt computes the square root of f modulo the curve's prime, and stores the -// result in f. The square root is computed via exponentiation of x by the value -// Q = (P+1)/4 using the curve's precomputed big-endian representation of the Q. -// This method uses a modified version of square-and-multiply exponentiation -// over secp256k1 fieldVals to operate on bytes instead of bits, which offers -// better performance over both big.Int exponentiation and bit-wise -// square-and-multiply. -// -// NOTE: This method only works when P is intended to be the secp256k1 prime and -// is not constant time. The returned value is of magnitude 1, but is -// denormalized. -func (f *fieldVal) Sqrt() *fieldVal { - return f.SqrtVal(f) -} +import secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + +// FieldVal implements optimized fixed-precision arithmetic over the secp256k1 +// finite field. This means all arithmetic is performed modulo +// '0xfffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f'. +// +// WARNING: Since it is so important for the field arithmetic to be extremely +// fast for high performance crypto, this type does not perform any validation +// of documented preconditions where it ordinarily would. As a result, it is +// IMPERATIVE for callers to understand some key concepts that are described +// below and ensure the methods are called with the necessary preconditions +// that each method is documented with. For example, some methods only give the +// correct result if the field value is normalized and others require the field +// values involved to have a maximum magnitude and THERE ARE NO EXPLICIT CHECKS +// TO ENSURE THOSE PRECONDITIONS ARE SATISFIED. This does, unfortunately, make +// the type more difficult to use correctly and while I typically prefer to +// ensure all state and input is valid for most code, this is a bit of an +// exception because those extra checks really add up in what ends up being +// critical hot paths. +// +// The first key concept when working with this type is normalization. In order +// to avoid the need to propagate a ton of carries, the internal representation +// provides additional overflow bits for each word of the overall 256-bit +// value. This means that there are multiple internal representations for the +// same value and, as a result, any methods that rely on comparison of the +// value, such as equality and oddness determination, require the caller to +// provide a normalized value. +// +// The second key concept when working with this type is magnitude. As +// previously mentioned, the internal representation provides additional +// overflow bits which means that the more math operations that are performed +// on the field value between normalizations, the more those overflow bits +// accumulate. The magnitude is effectively that maximum possible number of +// those overflow bits that could possibly be required as a result of a given +// operation. Since there are only a limited number of overflow bits available, +// this implies that the max possible magnitude MUST be tracked by the caller +// and the caller MUST normalize the field value if a given operation would +// cause the magnitude of the result to exceed the max allowed value. +// +// IMPORTANT: The max allowed magnitude of a field value is 64. +type FieldVal = secp.FieldVal diff --git a/btcec/field_test.go b/btcec/field_test.go index 27b9730f65..6ade97a1eb 100644 --- a/btcec/field_test.go +++ b/btcec/field_test.go @@ -6,69 +6,30 @@ package btcec import ( - "crypto/rand" - "fmt" - "reflect" + "math/rand" + + "encoding/hex" "testing" ) -// TestSetInt ensures that setting a field value to various native integers -// works as expected. -func TestSetInt(t *testing.T) { - tests := []struct { - in uint - raw [10]uint32 - }{ - {5, [10]uint32{5, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, - // 2^26 - {67108864, [10]uint32{67108864, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, - // 2^26 + 1 - {67108865, [10]uint32{67108865, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, - // 2^32 - 1 - {4294967295, [10]uint32{4294967295, 0, 0, 0, 0, 0, 0, 0, 0, 0}}, - } - - t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal).SetInt(test.in) - if !reflect.DeepEqual(f.n, test.raw) { - t.Errorf("fieldVal.Set #%d wrong result\ngot: %v\n"+ - "want: %v", i, f.n, test.raw) - continue - } - } -} - -// TestZero ensures that zeroing a field value zero works as expected. -func TestZero(t *testing.T) { - f := new(fieldVal).SetInt(2) - f.Zero() - for idx, rawInt := range f.n { - if rawInt != 0 { - t.Errorf("internal field integer at index #%d is not "+ - "zero - got %d", idx, rawInt) - } - } -} - // TestIsZero ensures that checking if a field IsZero works as expected. func TestIsZero(t *testing.T) { - f := new(fieldVal) + f := new(FieldVal) if !f.IsZero() { t.Errorf("new field value is not zero - got %v (rawints %x)", f, - f.n) + f.String()) } f.SetInt(1) if f.IsZero() { t.Errorf("field claims it's zero when it's not - got %v "+ - "(raw rawints %x)", f, f.n) + "(raw rawints %x)", f, f.String()) } f.Zero() if !f.IsZero() { t.Errorf("field claims it's not zero when it is - got %v "+ - "(raw rawints %x)", f, f.n) + "(raw rawints %x)", f, f.String()) } } @@ -146,10 +107,10 @@ func TestStringer(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - f := new(fieldVal).SetHex(test.in) + f := setHex(test.in) result := f.String() if result != test.expected { - t.Errorf("fieldVal.String #%d wrong result\ngot: %v\n"+ + t.Errorf("FieldVal.String #%d wrong result\ngot: %v\n"+ "want: %v", i, result, test.expected) continue } @@ -312,15 +273,16 @@ func TestNormalize(t *testing.T) { } t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal) + for range tests { + // TODO(roasbeef): can't access internal state + /*f := new(FieldVal) f.n = test.raw f.Normalize() if !reflect.DeepEqual(f.n, test.normalized) { - t.Errorf("fieldVal.Normalize #%d wrong result\n"+ + t.Errorf("FieldVal.Normalize #%d wrong result\n"+ "got: %x\nwant: %x", i, f.n, test.normalized) continue - } + }*/ } } @@ -343,10 +305,10 @@ func TestIsOdd(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - f := new(fieldVal).SetHex(test.in) + f := setHex(test.in) result := f.IsOdd() if result != test.expected { - t.Errorf("fieldVal.IsOdd #%d wrong result\n"+ + t.Errorf("FieldVal.IsOdd #%d wrong result\n"+ "got: %v\nwant: %v", i, result, test.expected) continue } @@ -376,11 +338,11 @@ func TestEquals(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - f := new(fieldVal).SetHex(test.in1).Normalize() - f2 := new(fieldVal).SetHex(test.in2).Normalize() + f := setHex(test.in1).Normalize() + f2 := setHex(test.in2).Normalize() result := f.Equals(f2) if result != test.expected { - t.Errorf("fieldVal.Equals #%d wrong result\n"+ + t.Errorf("FieldVal.Equals #%d wrong result\n"+ "got: %v\nwant: %v", i, result, test.expected) continue } @@ -424,347 +386,419 @@ func TestNegate(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - f := new(fieldVal).SetHex(test.in).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() + f := setHex(test.in).Normalize() + expected := setHex(test.expected).Normalize() result := f.Negate(1).Normalize() if !result.Equals(expected) { - t.Errorf("fieldVal.Negate #%d wrong result\n"+ + t.Errorf("FieldVal.Negate #%d wrong result\n"+ "got: %v\nwant: %v", i, result, expected) continue } } } -// TestAddInt ensures that adding an integer to field values via AddInt works as -// expected. -func TestAddInt(t *testing.T) { +// TestFieldAddInt ensures that adding an integer to field values via AddInt +// works as expected. +func TestFieldAddInt(t *testing.T) { tests := []struct { + name string // test description in1 string // hex encoded value - in2 uint // unsigned integer to add to the value above + in2 uint16 // unsigned integer to add to the value above expected string // expected hex encoded value - }{ - {"0", 1, "1"}, - {"1", 0, "1"}, - {"1", 1, "2"}, - // secp256k1 prime-1 + 1 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", 1, "0"}, - // secp256k1 prime + 1 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", 1, "1"}, - // Random samples. - { - "ff95ad9315aff04ab4af0ce673620c7145dc85d03bab5ba4b09ca2c4dec2d6c1", - 0x10f, - "ff95ad9315aff04ab4af0ce673620c7145dc85d03bab5ba4b09ca2c4dec2d7d0", - }, - { - "44bdae6b772e7987941f1ba314e6a5b7804a4c12c00961b57d20f41deea9cecf", - 0x2cf11d41, - "44bdae6b772e7987941f1ba314e6a5b7804a4c12c00961b57d20f41e1b9aec10", - }, - { - "88c3ecae67b591935fb1f6a9499c35315ffad766adca665c50b55f7105122c9c", - 0x4829aa2d, - "88c3ecae67b591935fb1f6a9499c35315ffad766adca665c50b55f714d3bd6c9", - }, - { - "8523e9edf360ca32a95aae4e57fcde5a542b471d08a974d94ea0ee09a015e2a6", - 0xa21265a5, - "8523e9edf360ca32a95aae4e57fcde5a542b471d08a974d94ea0ee0a4228484b", - }, - } + }{{ + name: "zero + one", + in1: "0", + in2: 1, + expected: "1", + }, { + name: "one + zero", + in1: "1", + in2: 0, + expected: "1", + }, { + name: "one + one", + in1: "1", + in2: 1, + expected: "2", + }, { + name: "secp256k1 prime-1 + 1", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + in2: 1, + expected: "0", + }, { + name: "secp256k1 prime + 1", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + in2: 1, + expected: "1", + }, { + name: "random sampling #1", + in1: "ff95ad9315aff04ab4af0ce673620c7145dc85d03bab5ba4b09ca2c4dec2d6c1", + in2: 0x10f, + expected: "ff95ad9315aff04ab4af0ce673620c7145dc85d03bab5ba4b09ca2c4dec2d7d0", + }, { + name: "random sampling #2", + in1: "44bdae6b772e7987941f1ba314e6a5b7804a4c12c00961b57d20f41deea9cecf", + in2: 0x3196, + expected: "44bdae6b772e7987941f1ba314e6a5b7804a4c12c00961b57d20f41deeaa0065", + }, { + name: "random sampling #3", + in1: "88c3ecae67b591935fb1f6a9499c35315ffad766adca665c50b55f7105122c9c", + in2: 0x966f, + expected: "88c3ecae67b591935fb1f6a9499c35315ffad766adca665c50b55f710512c30b", + }, { + name: "random sampling #4", + in1: "8523e9edf360ca32a95aae4e57fcde5a542b471d08a974d94ea0ee09a015e2a6", + in2: 0xc54, + expected: "8523e9edf360ca32a95aae4e57fcde5a542b471d08a974d94ea0ee09a015eefa", + }} - t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal).SetHex(test.in1).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() + for _, test := range tests { + f := setHex(test.in1).Normalize() + expected := setHex(test.expected).Normalize() result := f.AddInt(test.in2).Normalize() if !result.Equals(expected) { - t.Errorf("fieldVal.AddInt #%d wrong result\n"+ - "got: %v\nwant: %v", i, result, expected) + t.Errorf("%s: wrong result -- got: %v -- want: %v", test.name, + result, expected) continue } } } -// TestAdd ensures that adding two field values together via Add works as -// expected. -func TestAdd(t *testing.T) { +// TestFieldAdd ensures that adding two field values together via Add and Add2 +// works as expected. +func TestFieldAdd(t *testing.T) { tests := []struct { + name string // test description in1 string // first hex encoded value in2 string // second hex encoded value to add expected string // expected hex encoded value - }{ - {"0", "1", "1"}, - {"1", "0", "1"}, - {"1", "1", "2"}, - // secp256k1 prime-1 + 1 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", "1", "0"}, - // secp256k1 prime + 1 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "1", "1"}, - // Random samples. - { - "2b2012f975404e5065b4292fb8bed0a5d315eacf24c74d8b27e73bcc5430edcc", - "2c3cefa4e4753e8aeec6ac4c12d99da4d78accefda3b7885d4c6bab46c86db92", - "575d029e59b58cdb547ad57bcb986e4aaaa0b7beff02c610fcadf680c0b7c95e", - }, - { - "8131e8722fe59bb189692b96c9f38de92885730f1dd39ab025daffb94c97f79c", - "ff5454b765f0aab5f0977dcc629becc84cabeb9def48e79c6aadb2622c490fa9", - "80863d2995d646677a00a9632c8f7ab175315ead0d1c824c9088b21c78e10b16", - }, - { - "c7c95e93d0892b2b2cdd77e80eb646ea61be7a30ac7e097e9f843af73fad5c22", - "3afe6f91a74dfc1c7f15c34907ee981656c37236d946767dd53ccad9190e437c", - "02c7ce2577d72747abf33b3116a4df00b881ec6785c47ffc74c105d158bba36f", - }, - { - "fd1c26f6a23381e5d785ba889494ec059369b888ad8431cd67d8c934b580dbe1", - "a475aa5a31dcca90ef5b53c097d9133d6b7117474b41e7877bb199590fc0489c", - "a191d150d4104c76c6e10e492c6dff42fedacfcff8c61954e38a628ec541284e", - }, - } + }{{ + name: "zero + one", + in1: "0", + in2: "1", + expected: "1", + }, { + name: "one + zero", + in1: "1", + in2: "0", + expected: "1", + }, { + name: "secp256k1 prime-1 + 1", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + in2: "1", + expected: "0", + }, { + name: "secp256k1 prime + 1", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + in2: "1", + expected: "1", + }, { + name: "random sampling #1", + in1: "2b2012f975404e5065b4292fb8bed0a5d315eacf24c74d8b27e73bcc5430edcc", + in2: "2c3cefa4e4753e8aeec6ac4c12d99da4d78accefda3b7885d4c6bab46c86db92", + expected: "575d029e59b58cdb547ad57bcb986e4aaaa0b7beff02c610fcadf680c0b7c95e", + }, { + name: "random sampling #2", + in1: "8131e8722fe59bb189692b96c9f38de92885730f1dd39ab025daffb94c97f79c", + in2: "ff5454b765f0aab5f0977dcc629becc84cabeb9def48e79c6aadb2622c490fa9", + expected: "80863d2995d646677a00a9632c8f7ab175315ead0d1c824c9088b21c78e10b16", + }, { + name: "random sampling #3", + in1: "c7c95e93d0892b2b2cdd77e80eb646ea61be7a30ac7e097e9f843af73fad5c22", + in2: "3afe6f91a74dfc1c7f15c34907ee981656c37236d946767dd53ccad9190e437c", + expected: "2c7ce2577d72747abf33b3116a4df00b881ec6785c47ffc74c105d158bba36f", + }, { + name: "random sampling #4", + in1: "fd1c26f6a23381e5d785ba889494ec059369b888ad8431cd67d8c934b580dbe1", + in2: "a475aa5a31dcca90ef5b53c097d9133d6b7117474b41e7877bb199590fc0489c", + expected: "a191d150d4104c76c6e10e492c6dff42fedacfcff8c61954e38a628ec541284e", + }, { + name: "random sampling #5", + in1: "ad82b8d1cc136e23e9fd77fe2c7db1fe5a2ecbfcbde59ab3529758334f862d28", + in2: "4d6a4e95d6d61f4f46b528bebe152d408fd741157a28f415639347a84f6f574b", + expected: "faed0767a2e98d7330b2a0bcea92df3eea060d12380e8ec8b62a9fdb9ef58473", + }, { + name: "random sampling #6", + in1: "f3f43a2540054a86e1df98547ec1c0e157b193e5350fb4a3c3ea214b228ac5e7", + in2: "25706572592690ea3ddc951a1b48b504a4c83dc253756e1b96d56fdfb3199522", + expected: "19649f97992bdb711fbc2d6e9a0a75e5fc79d1a7888522bf5abf912bd5a45eda", + }, { + name: "random sampling #7", + in1: "6915bb94eef13ff1bb9b2633d997e13b9b1157c713363cc0e891416d6734f5b8", + in2: "11f90d6ac6fe1c4e8900b1c85fb575c251ec31b9bc34b35ada0aea1c21eded22", + expected: "7b0ec8ffb5ef5c40449bd7fc394d56fdecfd8980cf6af01bc29c2b898922e2da", + }, { + name: "random sampling #8", + in1: "48b0c9eae622eed9335b747968544eb3e75cb2dc8128388f948aa30f88cabde4", + in2: "0989882b52f85f9d524a3a3061a0e01f46d597839d2ba637320f4b9510c8d2d5", + expected: "523a5216391b4e7685a5aea9c9f52ed32e324a601e53dec6c699eea4999390b9", + }} - t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal).SetHex(test.in1).Normalize() - f2 := new(fieldVal).SetHex(test.in2).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() - result := f.Add(f2).Normalize() + for _, test := range tests { + // Parse test hex. + f1 := setHex(test.in1).Normalize() + f2 := setHex(test.in2).Normalize() + expected := setHex(test.expected).Normalize() + + // Ensure adding the two values with the result going to another + // variable produces the expected result. + result := new(FieldVal).Add2(f1, f2).Normalize() if !result.Equals(expected) { - t.Errorf("fieldVal.Add #%d wrong result\n"+ - "got: %v\nwant: %v", i, result, expected) + t.Errorf("%s: unexpected result\ngot: %v\nwant: %v", test.name, + result, expected) continue } - } -} -// TestAdd2 ensures that adding two field values together via Add2 works as -// expected. -func TestAdd2(t *testing.T) { - tests := []struct { - in1 string // first hex encoded value - in2 string // second hex encoded value to add - expected string // expected hex encoded value - }{ - {"0", "1", "1"}, - {"1", "0", "1"}, - {"1", "1", "2"}, - // secp256k1 prime-1 + 1 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", "1", "0"}, - // secp256k1 prime + 1 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "1", "1"}, - // close but over the secp256k1 prime - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000", "f1ffff000", "1ffff3d1"}, - // Random samples. - { - "ad82b8d1cc136e23e9fd77fe2c7db1fe5a2ecbfcbde59ab3529758334f862d28", - "4d6a4e95d6d61f4f46b528bebe152d408fd741157a28f415639347a84f6f574b", - "faed0767a2e98d7330b2a0bcea92df3eea060d12380e8ec8b62a9fdb9ef58473", - }, - { - "f3f43a2540054a86e1df98547ec1c0e157b193e5350fb4a3c3ea214b228ac5e7", - "25706572592690ea3ddc951a1b48b504a4c83dc253756e1b96d56fdfb3199522", - "19649f97992bdb711fbc2d6e9a0a75e5fc79d1a7888522bf5abf912bd5a45eda", - }, - { - "6915bb94eef13ff1bb9b2633d997e13b9b1157c713363cc0e891416d6734f5b8", - "11f90d6ac6fe1c4e8900b1c85fb575c251ec31b9bc34b35ada0aea1c21eded22", - "7b0ec8ffb5ef5c40449bd7fc394d56fdecfd8980cf6af01bc29c2b898922e2da", - }, - { - "48b0c9eae622eed9335b747968544eb3e75cb2dc8128388f948aa30f88cabde4", - "0989882b52f85f9d524a3a3061a0e01f46d597839d2ba637320f4b9510c8d2d5", - "523a5216391b4e7685a5aea9c9f52ed32e324a601e53dec6c699eea4999390b9", - }, - } - - t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal).SetHex(test.in1).Normalize() - f2 := new(fieldVal).SetHex(test.in2).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() - result := f.Add2(f, f2).Normalize() - if !result.Equals(expected) { - t.Errorf("fieldVal.Add2 #%d wrong result\n"+ - "got: %v\nwant: %v", i, result, expected) + // Ensure adding the value to an existing field value produces the + // expected result. + f1.Add(f2).Normalize() + if !f1.Equals(expected) { + t.Errorf("%s: unexpected result\ngot: %v\nwant: %v", test.name, + f1, expected) continue } } } -// TestMulInt ensures that adding an integer to field values via MulInt works as -// expected. -func TestMulInt(t *testing.T) { +// TestFieldMulInt ensures that multiplying an integer to field values via +// MulInt works as expected. +func TestFieldMulInt(t *testing.T) { tests := []struct { + name string // test description in1 string // hex encoded value - in2 uint // unsigned integer to multiply with value above + in2 uint8 // unsigned integer to multiply with value above expected string // expected hex encoded value - }{ - {"0", 0, "0"}, - {"1", 0, "0"}, - {"0", 1, "0"}, - {"1", 1, "1"}, - // secp256k1 prime-1 * 2 - { - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", - 2, - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", - }, - // secp256k1 prime * 3 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", 3, "0"}, - // secp256k1 prime-1 * 8 - { - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", - 8, - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc27", - }, + }{{ + name: "zero * zero", + in1: "0", + in2: 0, + expected: "0", + }, { + name: "one * zero", + in1: "1", + in2: 0, + expected: "0", + }, { + name: "zero * one", + in1: "0", + in2: 1, + expected: "0", + }, { + name: "one * one", + in1: "1", + in2: 1, + expected: "1", + }, { + name: "secp256k1 prime-1 * 2", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + in2: 2, + expected: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", + }, { + name: "secp256k1 prime * 3", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + in2: 3, + expected: "0", + }, { + name: "secp256k1 prime-1 * 8", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + in2: 8, + expected: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc27", + }, { // Random samples for first value. The second value is limited // to 8 since that is the maximum int used in the elliptic curve // calculations. - { - "b75674dc9180d306c692163ac5e089f7cef166af99645c0c23568ab6d967288a", - 6, - "4c06bd2b6904f228a76c8560a3433bced9a8681d985a2848d407404d186b0280", - }, - { - "54873298ac2b5ba8591c125ae54931f5ea72040aee07b208d6135476fb5b9c0e", - 3, - "fd9597ca048212f90b543710afdb95e1bf560c20ca17161a8239fd64f212d42a", - }, - { - "7c30fbd363a74c17e1198f56b090b59bbb6c8755a74927a6cba7a54843506401", - 5, - "6cf4eb20f2447c77657fccb172d38c0aa91ea4ac446dc641fa463a6b5091fba7", - }, - { - "fb4529be3e027a3d1587d8a500b72f2d312e3577340ef5175f96d113be4c2ceb", - 8, - "da294df1f013d1e8ac3ec52805b979698971abb9a077a8bafcb688a4f261820f", - }, - } + name: "random sampling #1", + in1: "b75674dc9180d306c692163ac5e089f7cef166af99645c0c23568ab6d967288a", + in2: 6, + expected: "4c06bd2b6904f228a76c8560a3433bced9a8681d985a2848d407404d186b0280", + }, { + name: "random sampling #2", + in1: "54873298ac2b5ba8591c125ae54931f5ea72040aee07b208d6135476fb5b9c0e", + in2: 3, + expected: "fd9597ca048212f90b543710afdb95e1bf560c20ca17161a8239fd64f212d42a", + }, { + name: "random sampling #3", + in1: "7c30fbd363a74c17e1198f56b090b59bbb6c8755a74927a6cba7a54843506401", + in2: 5, + expected: "6cf4eb20f2447c77657fccb172d38c0aa91ea4ac446dc641fa463a6b5091fba7", + }, { + name: "random sampling #3", + in1: "fb4529be3e027a3d1587d8a500b72f2d312e3577340ef5175f96d113be4c2ceb", + in2: 8, + expected: "da294df1f013d1e8ac3ec52805b979698971abb9a077a8bafcb688a4f261820f", + }} - t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal).SetHex(test.in1).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() + for _, test := range tests { + f := setHex(test.in1).Normalize() + expected := setHex(test.expected).Normalize() result := f.MulInt(test.in2).Normalize() if !result.Equals(expected) { - t.Errorf("fieldVal.MulInt #%d wrong result\n"+ - "got: %v\nwant: %v", i, result, expected) + t.Errorf("%s: wrong result -- got: %v -- want: %v", test.name, + result, expected) continue } } } -// TestMul ensures that multiplying two field valuess via Mul works as expected. -func TestMul(t *testing.T) { +// TestFieldMul ensures that multiplying two field values via Mul and Mul2 works +// as expected. +func TestFieldMul(t *testing.T) { tests := []struct { + name string // test description in1 string // first hex encoded value in2 string // second hex encoded value to multiply with expected string // expected hex encoded value - }{ - {"0", "0", "0"}, - {"1", "0", "0"}, - {"0", "1", "0"}, - {"1", "1", "1"}, - // slightly over prime - { - "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffff", - "1000", - "1ffff3d1", - }, - // secp256k1 prime-1 * 2 - { - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", - "2", - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", - }, - // secp256k1 prime * 3 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "3", "0"}, - // secp256k1 prime-1 * 8 - { - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", - "8", - "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc27", - }, - // Random samples. - { - "cfb81753d5ef499a98ecc04c62cb7768c2e4f1740032946db1c12e405248137e", - "58f355ad27b4d75fb7db0442452e732c436c1f7c5a7c4e214fa9cc031426a7d3", - "1018cd2d7c2535235b71e18db9cd98027386328d2fa6a14b36ec663c4c87282b", - }, - { - "26e9d61d1cdf3920e9928e85fa3df3e7556ef9ab1d14ec56d8b4fc8ed37235bf", - "2dfc4bbe537afee979c644f8c97b31e58be5296d6dbc460091eae630c98511cf", - "da85f48da2dc371e223a1ae63bd30b7e7ee45ae9b189ac43ff357e9ef8cf107a", - }, - { - "5db64ed5afb71646c8b231585d5b2bf7e628590154e0854c4c29920b999ff351", - "279cfae5eea5d09ade8e6a7409182f9de40981bc31c84c3d3dfe1d933f152e9a", - "2c78fbae91792dd0b157abe3054920049b1879a7cc9d98cfda927d83be411b37", - }, - { - "b66dfc1f96820b07d2bdbd559c19319a3a73c97ceb7b3d662f4fe75ecb6819e6", - "bf774aba43e3e49eb63a6e18037d1118152568f1a3ac4ec8b89aeb6ff8008ae1", - "c4f016558ca8e950c21c3f7fc15f640293a979c7b01754ee7f8b3340d4902ebb", - }, - } + }{{ + name: "zero * zero", + in1: "0", + in2: "0", + expected: "0", + }, { + name: "one * zero", + in1: "1", + in2: "0", + expected: "0", + }, { + name: "zero * one", + in1: "0", + in2: "1", + expected: "0", + }, { + name: "one * one", + in1: "1", + in2: "1", + expected: "1", + }, { + name: "slightly over prime", + in1: "ffffffffffffffffffffffffffffffffffffffffffffffffffffffff1ffff", + in2: "1000", + expected: "1ffff3d1", + }, { + name: "secp256k1 prime-1 * 2", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + in2: "2", + expected: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", + }, { + name: "secp256k1 prime * 3", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + in2: "3", + expected: "0", + }, { + name: "secp256k1 prime * 3", + in1: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + in2: "8", + expected: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc27", + }, { + name: "random sampling #1", + in1: "cfb81753d5ef499a98ecc04c62cb7768c2e4f1740032946db1c12e405248137e", + in2: "58f355ad27b4d75fb7db0442452e732c436c1f7c5a7c4e214fa9cc031426a7d3", + expected: "1018cd2d7c2535235b71e18db9cd98027386328d2fa6a14b36ec663c4c87282b", + }, { + name: "random sampling #2", + in1: "26e9d61d1cdf3920e9928e85fa3df3e7556ef9ab1d14ec56d8b4fc8ed37235bf", + in2: "2dfc4bbe537afee979c644f8c97b31e58be5296d6dbc460091eae630c98511cf", + expected: "da85f48da2dc371e223a1ae63bd30b7e7ee45ae9b189ac43ff357e9ef8cf107a", + }, { + name: "random sampling #3", + in1: "5db64ed5afb71646c8b231585d5b2bf7e628590154e0854c4c29920b999ff351", + in2: "279cfae5eea5d09ade8e6a7409182f9de40981bc31c84c3d3dfe1d933f152e9a", + expected: "2c78fbae91792dd0b157abe3054920049b1879a7cc9d98cfda927d83be411b37", + }, { + name: "random sampling #4", + in1: "b66dfc1f96820b07d2bdbd559c19319a3a73c97ceb7b3d662f4fe75ecb6819e6", + in2: "bf774aba43e3e49eb63a6e18037d1118152568f1a3ac4ec8b89aeb6ff8008ae1", + expected: "c4f016558ca8e950c21c3f7fc15f640293a979c7b01754ee7f8b3340d4902ebb", + }} - t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal).SetHex(test.in1).Normalize() - f2 := new(fieldVal).SetHex(test.in2).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() - result := f.Mul(f2).Normalize() + for _, test := range tests { + f1 := setHex(test.in1).Normalize() + f2 := setHex(test.in2).Normalize() + expected := setHex(test.expected).Normalize() + + // Ensure multiplying the two values with the result going to another + // variable produces the expected result. + result := new(FieldVal).Mul2(f1, f2).Normalize() if !result.Equals(expected) { - t.Errorf("fieldVal.Mul #%d wrong result\n"+ - "got: %v\nwant: %v", i, result, expected) + t.Errorf("%s: unexpected result\ngot: %v\nwant: %v", test.name, + result, expected) + continue + } + + // Ensure multiplying the value to an existing field value produces the + // expected result. + f1.Mul(f2).Normalize() + if !f1.Equals(expected) { + t.Errorf("%s: unexpected result\ngot: %v\nwant: %v", test.name, + f1, expected) continue } } } -// TestSquare ensures that squaring field values via Square works as expected. -func TestSquare(t *testing.T) { +// TestFieldSquare ensures that squaring field values via Square and SqualVal +// works as expected. +func TestFieldSquare(t *testing.T) { tests := []struct { + name string // test description in string // hex encoded value expected string // expected hex encoded value - }{ - // secp256k1 prime (aka 0) - {"0", "0"}, - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", "0"}, - {"0", "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f"}, - // secp256k1 prime-1 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", "1"}, - // secp256k1 prime-2 - {"fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", "4"}, - // Random sampling - { - "b0ba920360ea8436a216128047aab9766d8faf468895eb5090fc8241ec758896", - "133896b0b69fda8ce9f648b9a3af38f345290c9eea3cbd35bafcadf7c34653d3", - }, - { - "c55d0d730b1d0285a1599995938b042a756e6e8857d390165ffab480af61cbd5", - "cd81758b3f5877cbe7e5b0a10cebfa73bcbf0957ca6453e63ee8954ab7780bee", - }, - { - "e89c1f9a70d93651a1ba4bca5b78658f00de65a66014a25544d3365b0ab82324", - "39ffc7a43e5dbef78fd5d0354fb82c6d34f5a08735e34df29da14665b43aa1f", - }, - { - "7dc26186079d22bcbe1614aa20ae627e62d72f9be7ad1e99cac0feb438956f05", - "bf86bcfc4edb3d81f916853adfda80c07c57745b008b60f560b1912f95bce8ae", - }, - } + }{{ + name: "zero", + in: "0", + expected: "0", + }, { + name: "secp256k1 prime (direct val in with 0 out)", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + expected: "0", + }, { + name: "secp256k1 prime (0 in with direct val out)", + in: "0", + expected: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + }, { + name: "secp256k1 prime - 1", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + expected: "1", + }, { + name: "secp256k1 prime - 2", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", + expected: "4", + }, { + name: "random sampling #1", + in: "b0ba920360ea8436a216128047aab9766d8faf468895eb5090fc8241ec758896", + expected: "133896b0b69fda8ce9f648b9a3af38f345290c9eea3cbd35bafcadf7c34653d3", + }, { + name: "random sampling #2", + in: "c55d0d730b1d0285a1599995938b042a756e6e8857d390165ffab480af61cbd5", + expected: "cd81758b3f5877cbe7e5b0a10cebfa73bcbf0957ca6453e63ee8954ab7780bee", + }, { + name: "random sampling #3", + in: "e89c1f9a70d93651a1ba4bca5b78658f00de65a66014a25544d3365b0ab82324", + expected: "39ffc7a43e5dbef78fd5d0354fb82c6d34f5a08735e34df29da14665b43aa1f", + }, { + name: "random sampling #4", + in: "7dc26186079d22bcbe1614aa20ae627e62d72f9be7ad1e99cac0feb438956f05", + expected: "bf86bcfc4edb3d81f916853adfda80c07c57745b008b60f560b1912f95bce8ae", + }} - t.Logf("Running %d tests", len(tests)) - for i, test := range tests { - f := new(fieldVal).SetHex(test.in).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() - result := f.Square().Normalize() + for _, test := range tests { + f := setHex(test.in).Normalize() + expected := setHex(test.expected).Normalize() + + // Ensure squaring the value with the result going to another variable + // produces the expected result. + result := new(FieldVal).SquareVal(f).Normalize() if !result.Equals(expected) { - t.Errorf("fieldVal.Square #%d wrong result\n"+ - "got: %v\nwant: %v", i, result, expected) + t.Errorf("%s: unexpected result\ngot: %v\nwant: %v", test.name, + result, expected) + continue + } + + // Ensure self squaring an existing field value produces the expected + // result. + f.Square().Normalize() + if !f.Equals(expected) { + t.Errorf("%s: unexpected result\ngot: %v\nwant: %v", test.name, + f, expected) continue } } @@ -812,156 +846,140 @@ func TestInverse(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - f := new(fieldVal).SetHex(test.in).Normalize() - expected := new(fieldVal).SetHex(test.expected).Normalize() + f := setHex(test.in).Normalize() + expected := setHex(test.expected).Normalize() result := f.Inverse().Normalize() if !result.Equals(expected) { - t.Errorf("fieldVal.Inverse #%d wrong result\n"+ + t.Errorf("FieldVal.Inverse #%d wrong result\n"+ "got: %v\nwant: %v", i, result, expected) continue } } } -// randFieldVal returns a random, normalized element in the field. -func randFieldVal(t *testing.T) fieldVal { - var b [32]byte - if _, err := rand.Read(b[:]); err != nil { - t.Fatalf("unable to create random element: %v", err) - } - - var x fieldVal - return *x.SetBytes(&b).Normalize() -} +// randFieldVal returns a field value created from a random value generated by +// the passed rng. +func randFieldVal(t *testing.T, rng *rand.Rand) *FieldVal { + t.Helper() -type sqrtTest struct { - name string - in string - expected string -} - -// TestSqrt asserts that a fieldVal properly computes the square root modulo the -// sep256k1 prime. -func TestSqrt(t *testing.T) { - var tests []sqrtTest - - // No valid root exists for the negative of a square. - for i := uint(9); i > 0; i-- { - var ( - x fieldVal - s fieldVal // x^2 mod p - n fieldVal // -x^2 mod p - ) - - x.SetInt(i) - s.SquareVal(&x).Normalize() - n.NegateVal(&s, 1).Normalize() - - tests = append(tests, sqrtTest{ - name: fmt.Sprintf("-%d", i), - in: fmt.Sprintf("%x", *n.Bytes()), - }) - } - - // A root should exist for true squares. - for i := uint(0); i < 10; i++ { - var ( - x fieldVal - s fieldVal // x^2 mod p - ) - - x.SetInt(i) - s.SquareVal(&x).Normalize() - - tests = append(tests, sqrtTest{ - name: fmt.Sprintf("%d", i), - in: fmt.Sprintf("%x", *s.Bytes()), - expected: fmt.Sprintf("%x", *x.Bytes()), - }) + var buf [32]byte + if _, err := rng.Read(buf[:]); err != nil { + t.Fatalf("failed to read random: %v", err) } - // Compute a non-square element, by negating if it has a root. - ns := randFieldVal(t) - if new(fieldVal).SqrtVal(&ns).Square().Equals(&ns) { - ns.Negate(1).Normalize() - } + // Create and return both a big integer and a field value. + var fv FieldVal + fv.SetBytes(&buf) + return &fv +} - // For large random field values, test that: - // 1) its square has a valid root. - // 2) the negative of its square has no root. - // 3) the product of its square with a non-square has no root. - for i := 0; i < 10; i++ { - var ( - x fieldVal - s fieldVal // x^2 mod p - n fieldVal // -x^2 mod p - m fieldVal // ns*x^2 mod p - ) - - x = randFieldVal(t) - s.SquareVal(&x).Normalize() - n.NegateVal(&s, 1).Normalize() - m.Mul2(&s, &ns).Normalize() - - // A root should exist for true squares. - tests = append(tests, sqrtTest{ - name: fmt.Sprintf("%x", *s.Bytes()), - in: fmt.Sprintf("%x", *s.Bytes()), - expected: fmt.Sprintf("%x", *x.Bytes()), - }) - - // No valid root exists for the negative of a square. - tests = append(tests, sqrtTest{ - name: fmt.Sprintf("-%x", *s.Bytes()), - in: fmt.Sprintf("%x", *n.Bytes()), - }) - - // No root should be computed for product of a square and - // non-square. - tests = append(tests, sqrtTest{ - name: fmt.Sprintf("ns*%x", *s.Bytes()), - in: fmt.Sprintf("%x", *m.Bytes()), - }) - } +// TestFieldSquareRoot ensures that calculating the square root of field values +// via SquareRootVal works as expected for edge cases. +func TestFieldSquareRoot(t *testing.T) { + tests := []struct { + name string // test description + in string // hex encoded value + valid bool // whether or not the value has a square root + want string // expected hex encoded value + }{{ + name: "secp256k1 prime (as 0 in and out)", + in: "0", + valid: true, + want: "0", + }, { + name: "secp256k1 prime (direct val with 0 out)", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + valid: true, + want: "0", + }, { + name: "secp256k1 prime (as 0 in direct val out)", + in: "0", + valid: true, + want: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2f", + }, { + name: "secp256k1 prime-1", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2e", + valid: false, + want: "0000000000000000000000000000000000000000000000000000000000000001", + }, { + name: "secp256k1 prime-2", + in: "fffffffffffffffffffffffffffffffffffffffffffffffffffffffefffffc2d", + valid: false, + want: "210c790573632359b1edb4302c117d8a132654692c3feeb7de3a86ac3f3b53f7", + }, { + name: "(secp256k1 prime-2)^2", + in: "0000000000000000000000000000000000000000000000000000000000000004", + valid: true, + want: "0000000000000000000000000000000000000000000000000000000000000002", + }, { + name: "value 1", + in: "0000000000000000000000000000000000000000000000000000000000000001", + valid: true, + want: "0000000000000000000000000000000000000000000000000000000000000001", + }, { + name: "value 2", + in: "0000000000000000000000000000000000000000000000000000000000000002", + valid: true, + want: "210c790573632359b1edb4302c117d8a132654692c3feeb7de3a86ac3f3b53f7", + }, { + name: "random sampling 1", + in: "16fb970147a9acc73654d4be233cc48b875ce20a2122d24f073d29bd28805aca", + valid: false, + want: "6a27dcfca440cf7930a967be533b9620e397f122787c53958aaa7da7ad3d89a4", + }, { + name: "square of random sampling 1", + in: "f4a8c3738ace0a1c3abf77737ae737f07687b5e24c07a643398298bd96893a18", + valid: true, + want: "e90468feb8565338c9ab2b41dcc33b7478a31df5dedd2db0f8c2d641d77fa165", + }, { + name: "random sampling 2", + in: "69d1323ce9f1f7b3bd3c7320b0d6311408e30281e273e39a0d8c7ee1c8257919", + valid: true, + want: "61f4a7348274a52d75dfe176b8e3aaff61c1c833b6678260ba73def0fb2ad148", + }, { + name: "random sampling 3", + in: "e0debf988ae098ecda07d0b57713e97c6d213db19753e8c95aa12a2fc1cc5272", + valid: false, + want: "6e1cc9c311d33d901670135244f994b1ea39501f38002269b34ce231750cfbac", + }, { + name: "random sampling 4", + in: "dcd394f91f74c2ba16aad74a22bb0ed47fe857774b8f2d6c09e28bfb14642878", + valid: true, + want: "72b22fe6f173f8bcb21898806142ed4c05428601256eafce5d36c1b08fb82bab", + }} for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - testSqrt(t, test) - }) - } -} - -func testSqrt(t *testing.T, test sqrtTest) { - var ( - f fieldVal - root fieldVal - rootNeg fieldVal - ) - - f.SetHex(test.in).Normalize() - - // Compute sqrt(f) and its negative. - root.SqrtVal(&f).Normalize() - rootNeg.NegateVal(&root, 1).Normalize() - - switch { - - // If we expect a square root, verify that either the computed square - // root is +/- the expected value. - case len(test.expected) > 0: - var expected fieldVal - expected.SetHex(test.expected).Normalize() - if !root.Equals(&expected) && !rootNeg.Equals(&expected) { - t.Fatalf("fieldVal.Sqrt incorrect root\n"+ - "got: %v\ngot_neg: %v\nwant: %v", - root, rootNeg, expected) + input := setHex(test.in).Normalize() + want := setHex(test.want).Normalize() + + // Calculate the square root and enusre the validity flag matches the + // expected value. + var result FieldVal + isValid := result.SquareRootVal(input) + if isValid != test.valid { + t.Errorf("%s: mismatched validity -- got %v, want %v", test.name, + isValid, test.valid) + continue } - // Otherwise, we expect this input not to have a square root. - default: - if root.Square().Equals(&f) || rootNeg.Square().Equals(&f) { - t.Fatalf("fieldVal.Sqrt root should not exist\n"+ - "got: %v\ngot_neg: %v", root, rootNeg) + // Ensure the calculated result matches the expected value. + result.Normalize() + if !result.Equals(want) { + t.Errorf("%s: d wrong result\ngot: %v\nwant: %v", test.name, result, + want) + continue } } } + +// hexToBytes converts the passed hex string into bytes and will panic if there +// is an error. This is only provided for the hard-coded constants so errors in +// the source code can be detected. It will only (and must only) be called with +// hard-coded values. +func hexToBytes(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + return b +} diff --git a/btcec/fuzz_test.go b/btcec/fuzz_test.go new file mode 100644 index 0000000000..ebbbb4261e --- /dev/null +++ b/btcec/fuzz_test.go @@ -0,0 +1,46 @@ +//go:build gofuzz || go1.18 + +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2022 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcec + +import ( + "encoding/hex" + "testing" +) + +func FuzzParsePubKey(f *testing.F) { + // 1. Seeds from pubkey tests. + for _, test := range pubKeyTests { + if test.isValid { + f.Add(test.key) + } + } + + // 2. Seeds from recovery tests. + var recoveryTestPubKeys = []string{ + "04E32DF42865E97135ACFB65F3BAE71BDC86F4D49150AD6A440B6F15878109880A0A2B2667F7E725CEEA70C673093BF67663E0312623C8E091B13CF2C0F11EF652", + "04A7640409AA2083FDAD38B2D8DE1263B2251799591D840653FB02DBBA503D7745FCB83D80E08A1E02896BE691EA6AFFB8A35939A646F1FC79052A744B1C82EDC3", + } + for _, pubKey := range recoveryTestPubKeys { + seed, err := hex.DecodeString(pubKey) + if err != nil { + f.Fatal(err) + } + f.Add(seed) + } + + // Now run the fuzzer. + f.Fuzz(func(t *testing.T, input []byte) { + key, err := ParsePubKey(input) + if key == nil && err == nil { + panic("key==nil && err==nil") + } + if key != nil && err != nil { + panic("key!=nil yet err!=nil") + } + }) +} diff --git a/btcec/genprecomps.go b/btcec/genprecomps.go deleted file mode 100644 index d4a9c1b830..0000000000 --- a/btcec/genprecomps.go +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright 2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -// This file is ignored during the regular build due to the following build tag. -// It is called by go generate and used to automatically generate pre-computed -// tables used to accelerate operations. -// +build ignore - -package main - -import ( - "bytes" - "compress/zlib" - "encoding/base64" - "fmt" - "log" - "os" - - "github.com/btcsuite/btcd/btcec" -) - -func main() { - fi, err := os.Create("secp256k1.go") - if err != nil { - log.Fatal(err) - } - defer fi.Close() - - // Compress the serialized byte points. - serialized := btcec.S256().SerializedBytePoints() - var compressed bytes.Buffer - w := zlib.NewWriter(&compressed) - if _, err := w.Write(serialized); err != nil { - fmt.Println(err) - os.Exit(1) - } - w.Close() - - // Encode the compressed byte points with base64. - encoded := make([]byte, base64.StdEncoding.EncodedLen(compressed.Len())) - base64.StdEncoding.Encode(encoded, compressed.Bytes()) - - fmt.Fprintln(fi, "// Copyright (c) 2015 The btcsuite developers") - fmt.Fprintln(fi, "// Use of this source code is governed by an ISC") - fmt.Fprintln(fi, "// license that can be found in the LICENSE file.") - fmt.Fprintln(fi) - fmt.Fprintln(fi, "package btcec") - fmt.Fprintln(fi) - fmt.Fprintln(fi, "// Auto-generated file (see genprecomps.go)") - fmt.Fprintln(fi, "// DO NOT EDIT") - fmt.Fprintln(fi) - fmt.Fprintf(fi, "var secp256k1BytePoints = %q\n", string(encoded)) - - a1, b1, a2, b2 := btcec.S256().EndomorphismVectors() - fmt.Println("The following values are the computed linearly " + - "independent vectors needed to make use of the secp256k1 " + - "endomorphism:") - fmt.Printf("a1: %x\n", a1) - fmt.Printf("b1: %x\n", b1) - fmt.Printf("a2: %x\n", a2) - fmt.Printf("b2: %x\n", b2) -} diff --git a/btcec/gensecp256k1.go b/btcec/gensecp256k1.go deleted file mode 100644 index 1928702da8..0000000000 --- a/btcec/gensecp256k1.go +++ /dev/null @@ -1,203 +0,0 @@ -// Copyright (c) 2014-2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -// This file is ignored during the regular build due to the following build tag. -// This build tag is set during go generate. -// +build gensecp256k1 - -package btcec - -// References: -// [GECC]: Guide to Elliptic Curve Cryptography (Hankerson, Menezes, Vanstone) - -import ( - "encoding/binary" - "math/big" -) - -// secp256k1BytePoints are dummy points used so the code which generates the -// real values can compile. -var secp256k1BytePoints = "" - -// getDoublingPoints returns all the possible G^(2^i) for i in -// 0..n-1 where n is the curve's bit size (256 in the case of secp256k1) -// the coordinates are recorded as Jacobian coordinates. -func (curve *KoblitzCurve) getDoublingPoints() [][3]fieldVal { - doublingPoints := make([][3]fieldVal, curve.BitSize) - - // initialize px, py, pz to the Jacobian coordinates for the base point - px, py := curve.bigAffineToField(curve.Gx, curve.Gy) - pz := new(fieldVal).SetInt(1) - for i := 0; i < curve.BitSize; i++ { - doublingPoints[i] = [3]fieldVal{*px, *py, *pz} - // P = 2*P - curve.doubleJacobian(px, py, pz, px, py, pz) - } - return doublingPoints -} - -// SerializedBytePoints returns a serialized byte slice which contains all of -// the possible points per 8-bit window. This is used to when generating -// secp256k1.go. -func (curve *KoblitzCurve) SerializedBytePoints() []byte { - doublingPoints := curve.getDoublingPoints() - - // Segregate the bits into byte-sized windows - serialized := make([]byte, curve.byteSize*256*3*10*4) - offset := 0 - for byteNum := 0; byteNum < curve.byteSize; byteNum++ { - // Grab the 8 bits that make up this byte from doublingPoints. - startingBit := 8 * (curve.byteSize - byteNum - 1) - computingPoints := doublingPoints[startingBit : startingBit+8] - - // Compute all points in this window and serialize them. - for i := 0; i < 256; i++ { - px, py, pz := new(fieldVal), new(fieldVal), new(fieldVal) - for j := 0; j < 8; j++ { - if i>>uint(j)&1 == 1 { - curve.addJacobian(px, py, pz, &computingPoints[j][0], - &computingPoints[j][1], &computingPoints[j][2], px, py, pz) - } - } - for i := 0; i < 10; i++ { - binary.LittleEndian.PutUint32(serialized[offset:], px.n[i]) - offset += 4 - } - for i := 0; i < 10; i++ { - binary.LittleEndian.PutUint32(serialized[offset:], py.n[i]) - offset += 4 - } - for i := 0; i < 10; i++ { - binary.LittleEndian.PutUint32(serialized[offset:], pz.n[i]) - offset += 4 - } - } - } - - return serialized -} - -// sqrt returns the square root of the provided big integer using Newton's -// method. It's only compiled and used during generation of pre-computed -// values, so speed is not a huge concern. -func sqrt(n *big.Int) *big.Int { - // Initial guess = 2^(log_2(n)/2) - guess := big.NewInt(2) - guess.Exp(guess, big.NewInt(int64(n.BitLen()/2)), nil) - - // Now refine using Newton's method. - big2 := big.NewInt(2) - prevGuess := big.NewInt(0) - for { - prevGuess.Set(guess) - guess.Add(guess, new(big.Int).Div(n, guess)) - guess.Div(guess, big2) - if guess.Cmp(prevGuess) == 0 { - break - } - } - return guess -} - -// EndomorphismVectors runs the first 3 steps of algorithm 3.74 from [GECC] to -// generate the linearly independent vectors needed to generate a balanced -// length-two representation of a multiplier such that k = k1 + k2λ (mod N) and -// returns them. Since the values will always be the same given the fact that N -// and λ are fixed, the final results can be accelerated by storing the -// precomputed values with the curve. -func (curve *KoblitzCurve) EndomorphismVectors() (a1, b1, a2, b2 *big.Int) { - bigMinus1 := big.NewInt(-1) - - // This section uses an extended Euclidean algorithm to generate a - // sequence of equations: - // s[i] * N + t[i] * λ = r[i] - - nSqrt := sqrt(curve.N) - u, v := new(big.Int).Set(curve.N), new(big.Int).Set(curve.lambda) - x1, y1 := big.NewInt(1), big.NewInt(0) - x2, y2 := big.NewInt(0), big.NewInt(1) - q, r := new(big.Int), new(big.Int) - qu, qx1, qy1 := new(big.Int), new(big.Int), new(big.Int) - s, t := new(big.Int), new(big.Int) - ri, ti := new(big.Int), new(big.Int) - a1, b1, a2, b2 = new(big.Int), new(big.Int), new(big.Int), new(big.Int) - found, oneMore := false, false - for u.Sign() != 0 { - // q = v/u - q.Div(v, u) - - // r = v - q*u - qu.Mul(q, u) - r.Sub(v, qu) - - // s = x2 - q*x1 - qx1.Mul(q, x1) - s.Sub(x2, qx1) - - // t = y2 - q*y1 - qy1.Mul(q, y1) - t.Sub(y2, qy1) - - // v = u, u = r, x2 = x1, x1 = s, y2 = y1, y1 = t - v.Set(u) - u.Set(r) - x2.Set(x1) - x1.Set(s) - y2.Set(y1) - y1.Set(t) - - // As soon as the remainder is less than the sqrt of n, the - // values of a1 and b1 are known. - if !found && r.Cmp(nSqrt) < 0 { - // When this condition executes ri and ti represent the - // r[i] and t[i] values such that i is the greatest - // index for which r >= sqrt(n). Meanwhile, the current - // r and t values are r[i+1] and t[i+1], respectively. - - // a1 = r[i+1], b1 = -t[i+1] - a1.Set(r) - b1.Mul(t, bigMinus1) - found = true - oneMore = true - - // Skip to the next iteration so ri and ti are not - // modified. - continue - - } else if oneMore { - // When this condition executes ri and ti still - // represent the r[i] and t[i] values while the current - // r and t are r[i+2] and t[i+2], respectively. - - // sum1 = r[i]^2 + t[i]^2 - rSquared := new(big.Int).Mul(ri, ri) - tSquared := new(big.Int).Mul(ti, ti) - sum1 := new(big.Int).Add(rSquared, tSquared) - - // sum2 = r[i+2]^2 + t[i+2]^2 - r2Squared := new(big.Int).Mul(r, r) - t2Squared := new(big.Int).Mul(t, t) - sum2 := new(big.Int).Add(r2Squared, t2Squared) - - // if (r[i]^2 + t[i]^2) <= (r[i+2]^2 + t[i+2]^2) - if sum1.Cmp(sum2) <= 0 { - // a2 = r[i], b2 = -t[i] - a2.Set(ri) - b2.Mul(ti, bigMinus1) - } else { - // a2 = r[i+2], b2 = -t[i+2] - a2.Set(r) - b2.Mul(t, bigMinus1) - } - - // All done. - break - } - - ri.Set(r) - ti.Set(t) - } - - return a1, b1, a2, b2 -} diff --git a/btcec/go.mod b/btcec/go.mod new file mode 100644 index 0000000000..452399cfc6 --- /dev/null +++ b/btcec/go.mod @@ -0,0 +1,16 @@ +module github.com/btcsuite/btcd/btcec/v2 + +go 1.17 + +require ( + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 + github.com/davecgh/go-spew v1.1.1 + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 + github.com/stretchr/testify v1.8.0 +) + +require ( + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) diff --git a/btcec/go.sum b/btcec/go.sum new file mode 100644 index 0000000000..73b8f2b5ac --- /dev/null +++ b/btcec/go.sum @@ -0,0 +1,21 @@ +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.0 h1:pSgiaMZlXftHpm5L7V1+rVB+AZJydKsMxsQBIJw4PKk= +github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/btcec/modnscalar.go b/btcec/modnscalar.go new file mode 100644 index 0000000000..b18b2c1d43 --- /dev/null +++ b/btcec/modnscalar.go @@ -0,0 +1,45 @@ +// Copyright (c) 2013-2021 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers + +package btcec + +import ( + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// ModNScalar implements optimized 256-bit constant-time fixed-precision +// arithmetic over the secp256k1 group order. This means all arithmetic is +// performed modulo: +// +// 0xfffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141 +// +// It only implements the arithmetic needed for elliptic curve operations, +// however, the operations that are not implemented can typically be worked +// around if absolutely needed. For example, subtraction can be performed by +// adding the negation. +// +// Should it be absolutely necessary, conversion to the standard library +// math/big.Int can be accomplished by using the Bytes method, slicing the +// resulting fixed-size array, and feeding it to big.Int.SetBytes. However, +// that should typically be avoided when possible as conversion to big.Ints +// requires allocations, is not constant time, and is slower when working modulo +// the group order. +type ModNScalar = secp.ModNScalar + +// NonceRFC6979 generates a nonce deterministically according to RFC 6979 using +// HMAC-SHA256 for the hashing function. It takes a 32-byte hash as an input +// and returns a 32-byte nonce to be used for deterministic signing. The extra +// and version arguments are optional, but allow additional data to be added to +// the input of the HMAC. When provided, the extra data must be 32-bytes and +// version must be 16 bytes or they will be ignored. +// +// Finally, the extraIterations parameter provides a method to produce a stream +// of deterministic nonces to ensure the signing code is able to produce a nonce +// that results in a valid signature in the extremely unlikely event the +// original nonce produced results in an invalid signature (e.g. R == 0). +// Signing code should start with 0 and increment it if necessary. +func NonceRFC6979(privKey []byte, hash []byte, extra []byte, version []byte, + extraIterations uint32) *ModNScalar { + + return secp.NonceRFC6979(privKey, hash, extra, version, extraIterations) +} diff --git a/btcec/precompute.go b/btcec/precompute.go deleted file mode 100644 index 034cd55332..0000000000 --- a/btcec/precompute.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package btcec - -import ( - "compress/zlib" - "encoding/base64" - "encoding/binary" - "io/ioutil" - "strings" -) - -//go:generate go run -tags gensecp256k1 genprecomps.go - -// loadS256BytePoints decompresses and deserializes the pre-computed byte points -// used to accelerate scalar base multiplication for the secp256k1 curve. This -// approach is used since it allows the compile to use significantly less ram -// and be performed much faster than it is with hard-coding the final in-memory -// data structure. At the same time, it is quite fast to generate the in-memory -// data structure at init time with this approach versus computing the table. -func loadS256BytePoints() error { - // There will be no byte points to load when generating them. - bp := secp256k1BytePoints - if len(bp) == 0 { - return nil - } - - // Decompress the pre-computed table used to accelerate scalar base - // multiplication. - decoder := base64.NewDecoder(base64.StdEncoding, strings.NewReader(bp)) - r, err := zlib.NewReader(decoder) - if err != nil { - return err - } - serialized, err := ioutil.ReadAll(r) - if err != nil { - return err - } - - // Deserialize the precomputed byte points and set the curve to them. - offset := 0 - var bytePoints [32][256][3]fieldVal - for byteNum := 0; byteNum < 32; byteNum++ { - // All points in this window. - for i := 0; i < 256; i++ { - px := &bytePoints[byteNum][i][0] - py := &bytePoints[byteNum][i][1] - pz := &bytePoints[byteNum][i][2] - for i := 0; i < 10; i++ { - px.n[i] = binary.LittleEndian.Uint32(serialized[offset:]) - offset += 4 - } - for i := 0; i < 10; i++ { - py.n[i] = binary.LittleEndian.Uint32(serialized[offset:]) - offset += 4 - } - for i := 0; i < 10; i++ { - pz.n[i] = binary.LittleEndian.Uint32(serialized[offset:]) - offset += 4 - } - } - } - secp256k1.bytePoints = &bytePoints - return nil -} diff --git a/btcec/privkey.go b/btcec/privkey.go index 676a8c3fb0..4efa806c5f 100644 --- a/btcec/privkey.go +++ b/btcec/privkey.go @@ -5,69 +5,33 @@ package btcec import ( - "crypto/ecdsa" - "crypto/elliptic" - "crypto/rand" - "math/big" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" ) // PrivateKey wraps an ecdsa.PrivateKey as a convenience mainly for signing // things with the the private key without having to directly import the ecdsa // package. -type PrivateKey ecdsa.PrivateKey +type PrivateKey = secp.PrivateKey // PrivKeyFromBytes returns a private and public key for `curve' based on the // private key passed as an argument as a byte slice. -func PrivKeyFromBytes(curve elliptic.Curve, pk []byte) (*PrivateKey, - *PublicKey) { - x, y := curve.ScalarBaseMult(pk) +func PrivKeyFromBytes(pk []byte) (*PrivateKey, *PublicKey) { + privKey := secp.PrivKeyFromBytes(pk) - priv := &ecdsa.PrivateKey{ - PublicKey: ecdsa.PublicKey{ - Curve: curve, - X: x, - Y: y, - }, - D: new(big.Int).SetBytes(pk), - } - - return (*PrivateKey)(priv), (*PublicKey)(&priv.PublicKey) + return privKey, privKey.PubKey() } // NewPrivateKey is a wrapper for ecdsa.GenerateKey that returns a PrivateKey // instead of the normal ecdsa.PrivateKey. -func NewPrivateKey(curve elliptic.Curve) (*PrivateKey, error) { - key, err := ecdsa.GenerateKey(curve, rand.Reader) - if err != nil { - return nil, err - } - return (*PrivateKey)(key), nil -} - -// PubKey returns the PublicKey corresponding to this private key. -func (p *PrivateKey) PubKey() *PublicKey { - return (*PublicKey)(&p.PublicKey) +func NewPrivateKey() (*PrivateKey, error) { + return secp.GeneratePrivateKey() } -// ToECDSA returns the private key as a *ecdsa.PrivateKey. -func (p *PrivateKey) ToECDSA() *ecdsa.PrivateKey { - return (*ecdsa.PrivateKey)(p) -} - -// Sign generates an ECDSA signature for the provided hash (which should be the result -// of hashing a larger message) using the private key. Produced signature -// is deterministic (same message and same key yield the same signature) and canonical -// in accordance with RFC6979 and BIP0062. -func (p *PrivateKey) Sign(hash []byte) (*Signature, error) { - return signRFC6979(p, hash) +// PrivKeyFromScalar instantiates a new private key from a scalar encoded as a +// big integer. +func PrivKeyFromScalar(key *ModNScalar) *PrivateKey { + return &PrivateKey{Key: *key} } // PrivKeyBytesLen defines the length in bytes of a serialized private key. const PrivKeyBytesLen = 32 - -// Serialize returns the private key number d as a big-endian binary-encoded -// number, padded to a length of 32 bytes. -func (p *PrivateKey) Serialize() []byte { - b := make([]byte, 0, PrivKeyBytesLen) - return paddedAppend(PrivKeyBytesLen, b, p.ToECDSA().D.Bytes()) -} diff --git a/btcec/privkey_test.go b/btcec/privkey_test.go deleted file mode 100644 index a2918dc191..0000000000 --- a/btcec/privkey_test.go +++ /dev/null @@ -1,55 +0,0 @@ -// Copyright (c) 2013-2016 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package btcec - -import ( - "bytes" - "testing" -) - -func TestPrivKeys(t *testing.T) { - tests := []struct { - name string - key []byte - }{ - { - name: "check curve", - key: []byte{ - 0xea, 0xf0, 0x2c, 0xa3, 0x48, 0xc5, 0x24, 0xe6, - 0x39, 0x26, 0x55, 0xba, 0x4d, 0x29, 0x60, 0x3c, - 0xd1, 0xa7, 0x34, 0x7d, 0x9d, 0x65, 0xcf, 0xe9, - 0x3c, 0xe1, 0xeb, 0xff, 0xdc, 0xa2, 0x26, 0x94, - }, - }, - } - - for _, test := range tests { - priv, pub := PrivKeyFromBytes(S256(), test.key) - - _, err := ParsePubKey(pub.SerializeUncompressed(), S256()) - if err != nil { - t.Errorf("%s privkey: %v", test.name, err) - continue - } - - hash := []byte{0x0, 0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8, 0x9} - sig, err := priv.Sign(hash) - if err != nil { - t.Errorf("%s could not sign: %v", test.name, err) - continue - } - - if !sig.Verify(hash, pub) { - t.Errorf("%s could not verify: %v", test.name, err) - continue - } - - serializedKey := priv.Serialize() - if !bytes.Equal(serializedKey, test.key) { - t.Errorf("%s unexpected serialized bytes - got: %x, "+ - "want: %x", test.name, serializedKey, test.key) - } - } -} diff --git a/btcec/pubkey.go b/btcec/pubkey.go index 3c9d5d02d2..7968ed042a 100644 --- a/btcec/pubkey.go +++ b/btcec/pubkey.go @@ -5,59 +5,14 @@ package btcec import ( - "crypto/ecdsa" - "errors" - "fmt" - "math/big" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" ) // These constants define the lengths of serialized public keys. const ( - PubKeyBytesLenCompressed = 33 - PubKeyBytesLenUncompressed = 65 - PubKeyBytesLenHybrid = 65 + PubKeyBytesLenCompressed = 33 ) -func isOdd(a *big.Int) bool { - return a.Bit(0) == 1 -} - -// decompressPoint decompresses a point on the secp256k1 curve given the X point and -// the solution to use. -func decompressPoint(curve *KoblitzCurve, bigX *big.Int, ybit bool) (*big.Int, error) { - var x fieldVal - x.SetByteSlice(bigX.Bytes()) - - // Compute x^3 + B mod p. - var x3 fieldVal - x3.SquareVal(&x).Mul(&x) - x3.Add(curve.fieldB).Normalize() - - // Now calculate sqrt mod p of x^3 + B - // This code used to do a full sqrt based on tonelli/shanks, - // but this was replaced by the algorithms referenced in - // https://bitcointalk.org/index.php?topic=162805.msg1712294#msg1712294 - var y fieldVal - y.SqrtVal(&x3).Normalize() - if ybit != y.IsOdd() { - y.Negate(1).Normalize() - } - - // Check that y is a square root of x^3 + B. - var y2 fieldVal - y2.SquareVal(&y).Normalize() - if !y2.Equals(&x3) { - return nil, fmt.Errorf("invalid square root") - } - - // Verify that y-coord has expected parity. - if ybit != y.IsOdd() { - return nil, fmt.Errorf("ybit doesn't match oddness") - } - - return new(big.Int).SetBytes(y.Bytes()[:]), nil -} - const ( pubkeyCompressed byte = 0x2 // y_bit + x coord pubkeyUncompressed byte = 0x4 // x coord + y coord @@ -76,119 +31,21 @@ func IsCompressedPubKey(pubKey []byte) bool { // ParsePubKey parses a public key for a koblitz curve from a bytestring into a // ecdsa.Publickey, verifying that it is valid. It supports compressed, // uncompressed and hybrid signature formats. -func ParsePubKey(pubKeyStr []byte, curve *KoblitzCurve) (key *PublicKey, err error) { - pubkey := PublicKey{} - pubkey.Curve = curve - - if len(pubKeyStr) == 0 { - return nil, errors.New("pubkey string is empty") - } - - format := pubKeyStr[0] - ybit := (format & 0x1) == 0x1 - format &= ^byte(0x1) - - switch len(pubKeyStr) { - case PubKeyBytesLenUncompressed: - if format != pubkeyUncompressed && format != pubkeyHybrid { - return nil, fmt.Errorf("invalid magic in pubkey str: "+ - "%d", pubKeyStr[0]) - } - - pubkey.X = new(big.Int).SetBytes(pubKeyStr[1:33]) - pubkey.Y = new(big.Int).SetBytes(pubKeyStr[33:]) - // hybrid keys have extra information, make use of it. - if format == pubkeyHybrid && ybit != isOdd(pubkey.Y) { - return nil, fmt.Errorf("ybit doesn't match oddness") - } - - if pubkey.X.Cmp(pubkey.Curve.Params().P) >= 0 { - return nil, fmt.Errorf("pubkey X parameter is >= to P") - } - if pubkey.Y.Cmp(pubkey.Curve.Params().P) >= 0 { - return nil, fmt.Errorf("pubkey Y parameter is >= to P") - } - if !pubkey.Curve.IsOnCurve(pubkey.X, pubkey.Y) { - return nil, fmt.Errorf("pubkey isn't on secp256k1 curve") - } - - case PubKeyBytesLenCompressed: - // format is 0x2 | solution, - // solution determines which solution of the curve we use. - /// y^2 = x^3 + Curve.B - if format != pubkeyCompressed { - return nil, fmt.Errorf("invalid magic in compressed "+ - "pubkey string: %d", pubKeyStr[0]) - } - pubkey.X = new(big.Int).SetBytes(pubKeyStr[1:33]) - pubkey.Y, err = decompressPoint(curve, pubkey.X, ybit) - if err != nil { - return nil, err - } - - default: // wrong! - return nil, fmt.Errorf("invalid pub key length %d", - len(pubKeyStr)) - } - - return &pubkey, nil +func ParsePubKey(pubKeyStr []byte) (*PublicKey, error) { + return secp.ParsePubKey(pubKeyStr) } // PublicKey is an ecdsa.PublicKey with additional functions to // serialize in uncompressed, compressed, and hybrid formats. -type PublicKey ecdsa.PublicKey - -// ToECDSA returns the public key as a *ecdsa.PublicKey. -func (p *PublicKey) ToECDSA() *ecdsa.PublicKey { - return (*ecdsa.PublicKey)(p) -} - -// SerializeUncompressed serializes a public key in a 65-byte uncompressed -// format. -func (p *PublicKey) SerializeUncompressed() []byte { - b := make([]byte, 0, PubKeyBytesLenUncompressed) - b = append(b, pubkeyUncompressed) - b = paddedAppend(32, b, p.X.Bytes()) - return paddedAppend(32, b, p.Y.Bytes()) -} - -// SerializeCompressed serializes a public key in a 33-byte compressed format. -func (p *PublicKey) SerializeCompressed() []byte { - b := make([]byte, 0, PubKeyBytesLenCompressed) - format := pubkeyCompressed - if isOdd(p.Y) { - format |= 0x1 - } - b = append(b, format) - return paddedAppend(32, b, p.X.Bytes()) -} - -// SerializeHybrid serializes a public key in a 65-byte hybrid format. -func (p *PublicKey) SerializeHybrid() []byte { - b := make([]byte, 0, PubKeyBytesLenHybrid) - format := pubkeyHybrid - if isOdd(p.Y) { - format |= 0x1 - } - b = append(b, format) - b = paddedAppend(32, b, p.X.Bytes()) - return paddedAppend(32, b, p.Y.Bytes()) -} - -// IsEqual compares this PublicKey instance to the one passed, returning true if -// both PublicKeys are equivalent. A PublicKey is equivalent to another, if they -// both have the same X and Y coordinate. -func (p *PublicKey) IsEqual(otherPubKey *PublicKey) bool { - return p.X.Cmp(otherPubKey.X) == 0 && - p.Y.Cmp(otherPubKey.Y) == 0 -} - -// paddedAppend appends the src byte slice to dst, returning the new slice. -// If the length of the source is smaller than the passed size, leading zero -// bytes are appended to the dst slice before appending src. -func paddedAppend(size uint, dst, src []byte) []byte { - for i := 0; i < int(size)-len(src); i++ { - dst = append(dst, 0) - } - return append(dst, src...) +type PublicKey = secp.PublicKey + +// NewPublicKey instantiates a new public key with the given x and y +// coordinates. +// +// It should be noted that, unlike ParsePubKey, since this accepts arbitrary x +// and y coordinates, it allows creation of public keys that are not valid +// points on the secp256k1 curve. The IsOnCurve method of the returned instance +// can be used to determine validity. +func NewPublicKey(x, y *FieldVal) *PublicKey { + return secp.NewPublicKey(x, y) } diff --git a/btcec/pubkey_test.go b/btcec/pubkey_test.go index 0a45f1c01d..7ee7cd8044 100644 --- a/btcec/pubkey_test.go +++ b/btcec/pubkey_test.go @@ -216,7 +216,7 @@ var pubKeyTests = []pubKeyTest{ func TestPubKeys(t *testing.T) { for _, test := range pubKeyTests { - pk, err := ParsePubKey(test.key, S256()) + pk, err := ParsePubKey(test.key) if err != nil { if test.isValid { t.Errorf("%s pubkey failed when shouldn't %v", @@ -232,11 +232,11 @@ func TestPubKeys(t *testing.T) { var pkStr []byte switch test.format { case pubkeyUncompressed: - pkStr = (*PublicKey)(pk).SerializeUncompressed() + pkStr = pk.SerializeUncompressed() case pubkeyCompressed: - pkStr = (*PublicKey)(pk).SerializeCompressed() + pkStr = pk.SerializeCompressed() case pubkeyHybrid: - pkStr = (*PublicKey)(pk).SerializeHybrid() + pkStr = test.key } if !bytes.Equal(test.key, pkStr) { t.Errorf("%s pubkey: serialized keys do not match.", @@ -254,7 +254,6 @@ func TestPublicKeyIsEqual(t *testing.T) { 0x25, 0x21, 0x88, 0x7e, 0x97, 0x66, 0x90, 0xb6, 0xb4, 0x7f, 0x5b, 0x2a, 0x4b, 0x7d, 0x44, 0x8e, }, - S256(), ) if err != nil { t.Fatalf("failed to parse raw bytes for pubKey1: %v", err) @@ -266,7 +265,6 @@ func TestPublicKeyIsEqual(t *testing.T) { 0x2e, 0x9c, 0x51, 0x0f, 0x8e, 0xf5, 0x2b, 0xd0, 0x21, 0xa9, 0xa1, 0xf4, 0x80, 0x9d, 0x3b, 0x4d, }, - S256(), ) if err != nil { t.Fatalf("failed to parse raw bytes for pubKey2: %v", err) diff --git a/btcec/schnorr/bench_test.go b/btcec/schnorr/bench_test.go new file mode 100644 index 0000000000..4dadbb1fd6 --- /dev/null +++ b/btcec/schnorr/bench_test.go @@ -0,0 +1,169 @@ +// Copyright 2013-2016 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package schnorr + +import ( + "crypto/sha256" + "encoding/hex" + "math/big" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// hexToBytes converts the passed hex string into bytes and will panic if there +// is an error. This is only provided for the hard-coded constants so errors in +// the source code can be detected. It will only (and must only) be called with +// hard-coded values. +func hexToBytes(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + return b +} + +// hexToModNScalar converts the passed hex string into a ModNScalar and will +// panic if there is an error. This is only provided for the hard-coded +// constants so errors in the source code can be detected. It will only (and +// must only) be called with hard-coded values. +func hexToModNScalar(s string) *btcec.ModNScalar { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + var scalar btcec.ModNScalar + if overflow := scalar.SetByteSlice(b); overflow { + panic("hex in source file overflows mod N scalar: " + s) + } + return &scalar +} + +// hexToFieldVal converts the passed hex string into a FieldVal and will panic +// if there is an error. This is only provided for the hard-coded constants so +// errors in the source code can be detected. It will only (and must only) be +// called with hard-coded values. +func hexToFieldVal(s string) *btcec.FieldVal { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + var f btcec.FieldVal + if overflow := f.SetByteSlice(b); overflow { + panic("hex in source file overflows mod P: " + s) + } + return &f +} + +// fromHex converts the passed hex string into a big integer pointer and will +// panic is there is an error. This is only provided for the hard-coded +// constants so errors in the source code can bet detected. It will only (and +// must only) be called for initialization purposes. +func fromHex(s string) *big.Int { + if s == "" { + return big.NewInt(0) + } + r, ok := new(big.Int).SetString(s, 16) + if !ok { + panic("invalid hex in source file: " + s) + } + return r +} + +var testOk bool + +// BenchmarkSigVerify benchmarks how long it takes the secp256k1 curve to +// verify signatures. +func BenchmarkSigVerify(b *testing.B) { + // Randomly generated keypair. + d := hexToModNScalar("9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d") + + privKey := secp256k1.NewPrivateKey(d) + pubKey := privKey.PubKey() + + // Double sha256 of []byte{0x01, 0x02, 0x03, 0x04} + msgHash := sha256.Sum256([]byte("benchmark")) + sig, err := Sign(privKey, msgHash[:]) + if err != nil { + b.Fatalf("unable to sign: %v", err) + } + + if !sig.Verify(msgHash[:], pubKey) { + b.Errorf("Signature failed to verify") + return + } + + var ok bool + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + ok = sig.Verify(msgHash[:], pubKey) + } + + testOk = ok +} + +// Used to ensure the compiler doesn't optimize away the benchmark. +var ( + testSig *Signature + testErr error +) + +// BenchmarkSign benchmarks how long it takes to sign a message. +func BenchmarkSign(b *testing.B) { + // Randomly generated keypair. + d := hexToModNScalar("9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d") + privKey := secp256k1.NewPrivateKey(d) + + // blake256 of []byte{0x01, 0x02, 0x03, 0x04}. + msgHash := hexToBytes("c301ba9de5d6053caad9f5eb46523f007702add2c62fa39de03146a36b8026b7") + + var auxBytes [32]byte + copy(auxBytes[:], msgHash) + auxBytes[0] ^= 1 + + var ( + sig *Signature + err error + ) + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + sig, err = Sign( + privKey, msgHash, CustomNonce(auxBytes), FastSign(), + ) + } + + testSig = sig + testErr = err +} + +// BenchmarkSignRfc6979 benchmarks how long it takes to sign a message. +func BenchmarkSignRfc6979(b *testing.B) { + // Randomly generated keypair. + d := hexToModNScalar("9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d") + privKey := secp256k1.NewPrivateKey(d) + + // blake256 of []byte{0x01, 0x02, 0x03, 0x04}. + msgHash := hexToBytes("c301ba9de5d6053caad9f5eb46523f007702add2c62fa39de03146a36b8026b7") + + var ( + sig *Signature + err error + ) + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + sig, err = Sign(privKey, msgHash, FastSign()) + } + + testSig = sig + testErr = err +} diff --git a/btcec/schnorr/error.go b/btcec/schnorr/error.go new file mode 100644 index 0000000000..4014339647 --- /dev/null +++ b/btcec/schnorr/error.go @@ -0,0 +1,25 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package schnorr + +import ( + ecdsa_schnorr "github.com/decred/dcrd/dcrec/secp256k1/v4/schnorr" +) + +// ErrorKind identifies a kind of error. It has full support for errors.Is +// and errors.As, so the caller can directly check against an error kind +// when determining the reason for an error. +type ErrorKind = ecdsa_schnorr.ErrorKind + +// Error identifies an error related to a schnorr signature. It has full +// support for errors.Is and errors.As, so the caller can ascertain the +// specific reason for the error by checking the underlying error. +type Error = ecdsa_schnorr.Error + +// signatureError creates an Error given a set of arguments. +func signatureError(kind ErrorKind, desc string) Error { + return Error{Err: kind, Description: desc} +} diff --git a/btcec/schnorr/musig2/bench_test.go b/btcec/schnorr/musig2/bench_test.go new file mode 100644 index 0000000000..70d7e931ce --- /dev/null +++ b/btcec/schnorr/musig2/bench_test.go @@ -0,0 +1,313 @@ +// Copyright 2013-2022 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package musig2 + +import ( + "encoding/hex" + "fmt" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" +) + +var ( + testPrivBytes = hexToModNScalar("9e0699c91ca1e3b7e3c9ba71eb71c89890872be97576010fe593fbf3fd57e66d") + + testMsg = hexToBytes("c301ba9de5d6053caad9f5eb46523f007702add2c62fa39de03146a36b8026b7") +) + +func hexToBytes(s string) []byte { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + return b +} + +func hexToModNScalar(s string) *btcec.ModNScalar { + b, err := hex.DecodeString(s) + if err != nil { + panic("invalid hex in source file: " + s) + } + var scalar btcec.ModNScalar + if overflow := scalar.SetByteSlice(b); overflow { + panic("hex in source file overflows mod N scalar: " + s) + } + return &scalar +} + +func genSigner(t *testing.B) signer { + privKey, err := btcec.NewPrivateKey() + if err != nil { + t.Fatalf("unable to gen priv key: %v", err) + } + + pubKey, err := schnorr.ParsePubKey( + schnorr.SerializePubKey(privKey.PubKey()), + ) + if err != nil { + t.Fatalf("unable to gen key: %v", err) + } + + nonces, err := GenNonces() + if err != nil { + t.Fatalf("unable to gen nonces: %v", err) + } + + return signer{ + privKey: privKey, + pubKey: pubKey, + nonces: nonces, + } +} + +var ( + testSig *PartialSignature + testErr error +) + +// BenchmarkPartialSign benchmarks how long it takes to generate a partial +// signature factoring in if the keys are sorted and also if we're in fast sign +// mode. +func BenchmarkPartialSign(b *testing.B) { + for _, numSigners := range []int{10, 100} { + for _, fastSign := range []bool{true, false} { + for _, sortKeys := range []bool{true, false} { + name := fmt.Sprintf("num_signers=%v/fast_sign=%v/sort=%v", + numSigners, fastSign, sortKeys) + + signers := make(signerSet, numSigners) + for i := 0; i < numSigners; i++ { + signers[i] = genSigner(b) + } + + combinedNonce, err := AggregateNonces(signers.pubNonces()) + if err != nil { + b.Fatalf("unable to generate combined nonce: %v", err) + } + + var sig *PartialSignature + + var msg [32]byte + copy(msg[:], testMsg[:]) + + keys := signers.keys() + + b.Run(name, func(b *testing.B) { + var signOpts []SignOption + if fastSign { + signOpts = append(signOpts, WithFastSign()) + } + if sortKeys { + signOpts = append(signOpts, WithSortedKeys()) + } + + b.ResetTimer() + b.ReportAllocs() + + for i := 0; i < b.N; i++ { + sig, err = Sign( + signers[0].nonces.SecNonce, signers[0].privKey, + combinedNonce, keys, msg, signOpts..., + ) + if err != nil { + b.Fatalf("unable to generate sig: %v", err) + } + } + + testSig = sig + testErr = err + }) + } + } + } +} + +// TODO(roasbeef): add impact of sorting ^ + +var sigOk bool + +// BenchmarkPartialVerify benchmarks how long it takes to verify a partial +// signature. +func BenchmarkPartialVerify(b *testing.B) { + for _, numSigners := range []int{10, 100} { + for _, sortKeys := range []bool{true, false} { + name := fmt.Sprintf("sort_keys=%v/num_signers=%v", + sortKeys, numSigners) + + signers := make(signerSet, numSigners) + for i := 0; i < numSigners; i++ { + signers[i] = genSigner(b) + } + + combinedNonce, err := AggregateNonces( + signers.pubNonces(), + ) + if err != nil { + b.Fatalf("unable to generate combined "+ + "nonce: %v", err) + } + + var sig *PartialSignature + + var msg [32]byte + copy(msg[:], testMsg[:]) + + b.ReportAllocs() + b.ResetTimer() + + sig, err = Sign( + signers[0].nonces.SecNonce, signers[0].privKey, + combinedNonce, signers.keys(), msg, + ) + if err != nil { + b.Fatalf("unable to generate sig: %v", err) + } + + keys := signers.keys() + pubKey := signers[0].pubKey + + b.Run(name, func(b *testing.B) { + var signOpts []SignOption + if sortKeys { + signOpts = append( + signOpts, WithSortedKeys(), + ) + } + + b.ResetTimer() + b.ReportAllocs() + + var ok bool + for i := 0; i < b.N; i++ { + ok = sig.Verify( + signers[0].nonces.PubNonce, combinedNonce, + keys, pubKey, msg, + ) + if !ok { + b.Fatalf("generated invalid sig!") + } + } + sigOk = ok + }) + + } + } +} + +var finalSchnorrSig *schnorr.Signature + +// BenchmarkCombineSigs benchmarks how long it takes to combine a set amount of +// signatures. +func BenchmarkCombineSigs(b *testing.B) { + + for _, numSigners := range []int{10, 100} { + signers := make(signerSet, numSigners) + for i := 0; i < numSigners; i++ { + signers[i] = genSigner(b) + } + + combinedNonce, err := AggregateNonces(signers.pubNonces()) + if err != nil { + b.Fatalf("unable to generate combined nonce: %v", err) + } + + var msg [32]byte + copy(msg[:], testMsg[:]) + + var finalNonce *btcec.PublicKey + for i := range signers { + signer := signers[i] + partialSig, err := Sign( + signer.nonces.SecNonce, signer.privKey, + combinedNonce, signers.keys(), msg, + ) + if err != nil { + b.Fatalf("unable to generate partial sig: %v", + err) + } + + signers[i].partialSig = partialSig + + if finalNonce == nil { + finalNonce = partialSig.R + } + } + + sigs := signers.partialSigs() + + name := fmt.Sprintf("num_signers=%v", numSigners) + b.Run(name, func(b *testing.B) { + b.ResetTimer() + b.ReportAllocs() + + finalSig := CombineSigs(finalNonce, sigs) + + finalSchnorrSig = finalSig + }) + } +} + +var testNonce [PubNonceSize]byte + +// BenchmarkAggregateNonces benchmarks how long it takes to combine nonces. +func BenchmarkAggregateNonces(b *testing.B) { + for _, numSigners := range []int{10, 100} { + signers := make(signerSet, numSigners) + for i := 0; i < numSigners; i++ { + signers[i] = genSigner(b) + } + + nonces := signers.pubNonces() + + name := fmt.Sprintf("num_signers=%v", numSigners) + b.Run(name, func(b *testing.B) { + b.ResetTimer() + b.ReportAllocs() + + pubNonce, err := AggregateNonces(nonces) + if err != nil { + b.Fatalf("unable to generate nonces: %v", err) + } + + testNonce = pubNonce + }) + } +} + +var testKey *btcec.PublicKey + +// BenchmarkAggregateKeys benchmarks how long it takes to aggregate public +// keys. +func BenchmarkAggregateKeys(b *testing.B) { + for _, numSigners := range []int{10, 100} { + for _, sortKeys := range []bool{true, false} { + signers := make(signerSet, numSigners) + for i := 0; i < numSigners; i++ { + signers[i] = genSigner(b) + } + + signerKeys := signers.keys() + + name := fmt.Sprintf("num_signers=%v/sort_keys=%v", + numSigners, sortKeys) + + uniqueKeyIndex := secondUniqueKeyIndex(signerKeys, false) + + b.Run(name, func(b *testing.B) { + b.ResetTimer() + b.ReportAllocs() + + aggKey, _, _, _ := AggregateKeys( + signerKeys, sortKeys, + WithUniqueKeyIndex(uniqueKeyIndex), + ) + + testKey = aggKey.FinalKey + }) + } + } +} diff --git a/btcec/schnorr/musig2/context.go b/btcec/schnorr/musig2/context.go new file mode 100644 index 0000000000..0dfc6f38af --- /dev/null +++ b/btcec/schnorr/musig2/context.go @@ -0,0 +1,668 @@ +// Copyright (c) 2013-2022 The btcsuite developers + +package musig2 + +import ( + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" +) + +var ( + // ErrSignersNotSpecified is returned when a caller attempts to create + // a context without specifying either the total number of signers, or + // the complete set of singers. + ErrSignersNotSpecified = fmt.Errorf("total number of signers or all " + + "signers must be known") + + // ErrSignerNotInKeySet is returned when a the private key for a signer + // isn't included in the set of signing public keys. + ErrSignerNotInKeySet = fmt.Errorf("signing key is not found in key" + + " set") + + // ErrAlredyHaveAllNonces is called when RegisterPubNonce is called too + // many times for a given signing session. + ErrAlredyHaveAllNonces = fmt.Errorf("already have all nonces") + + // ErrNotEnoughSigners is returned when a caller attempts to create a + // session from a context, but before all the required signers are + // known. + ErrNotEnoughSigners = fmt.Errorf("not enough signers") + + // ErrAlredyHaveAllNonces is returned when a caller attempts to + // register a signer, once we already have the total set of known + // signers. + ErrAlreadyHaveAllSigners = fmt.Errorf("all signers registered") + + // ErrAlredyHaveAllSigs is called when CombineSig is called too many + // times for a given signing session. + ErrAlredyHaveAllSigs = fmt.Errorf("already have all sigs") + + // ErrSigningContextReuse is returned if a user attempts to sign using + // the same signing context more than once. + ErrSigningContextReuse = fmt.Errorf("nonce already used") + + // ErrFinalSigInvalid is returned when the combined signature turns out + // to be invalid. + ErrFinalSigInvalid = fmt.Errorf("final signature is invalid") + + // ErrCombinedNonceUnavailable is returned when a caller attempts to + // sign a partial signature, without first having collected all the + // required combined nonces. + ErrCombinedNonceUnavailable = fmt.Errorf("missing combined nonce") + + // ErrTaprootInternalKeyUnavailable is returned when a user attempts to + // obtain the + ErrTaprootInternalKeyUnavailable = fmt.Errorf("taproot tweak not used") + + // ErrNotEnoughSigners is returned if a caller attempts to obtain an + // early nonce when it wasn't specified + ErrNoEarlyNonce = fmt.Errorf("no early nonce available") +) + +// Context is a managed signing context for musig2. It takes care of things +// like securely generating secret nonces, aggregating keys and nonces, etc. +type Context struct { + // signingKey is the key we'll use for signing. + signingKey *btcec.PrivateKey + + // pubKey is our even-y coordinate public key. + pubKey *btcec.PublicKey + + // combinedKey is the aggregated public key. + combinedKey *AggregateKey + + // uniqueKeyIndex is the index of the second unique key in the keySet. + // This is used to speed up signing and verification computations. + uniqueKeyIndex int + + // keysHash is the hash of all the keys as defined in musig2. + keysHash []byte + + // opts is the set of options for the context. + opts *contextOptions + + // shouldSort keeps track of if the public keys should be sorted before + // any operations. + shouldSort bool + + // sessionNonce will be populated if the earlyNonce option is true. + // After the first session is created, this nonce will be blanked out. + sessionNonce *Nonces +} + +// ContextOption is a functional option argument that allows callers to modify +// the musig2 signing is done within a context. +type ContextOption func(*contextOptions) + +// contextOptions houses the set of functional options that can be used to +// musig2 signing protocol. +type contextOptions struct { + // tweaks is the set of optinoal tweaks to apply to the combined public + // key. + tweaks []KeyTweakDesc + + // taprootTweak specifies the taproot tweak. If specified, then we'll + // use this as the script root for the BIP 341 taproot (x-only) tweak. + // Normally we'd just apply the raw 32 byte tweak, but for taproot, we + // first need to compute the aggregated key before tweaking, and then + // use it as the internal key. This is required as the taproot tweak + // also commits to the public key, which in this case is the aggregated + // key before the tweak. + taprootTweak []byte + + // bip86Tweak if true, then the weak will just be + // h_tapTweak(internalKey) as there is no true script root. + bip86Tweak bool + + // keySet is the complete set of signers for this context. + keySet []*btcec.PublicKey + + // numSigners is the total number of signers that will eventually be a + // part of the context. + numSigners int + + // earlyNonce determines if a nonce should be generated during context + // creation, to be automatically passed to the created session. + earlyNonce bool +} + +// defaultContextOptions returns the default context options. +func defaultContextOptions() *contextOptions { + return &contextOptions{} +} + +// WithTweakedContext specifies that within the context, the aggregated public +// key should be tweaked with the specified tweaks. +func WithTweakedContext(tweaks ...KeyTweakDesc) ContextOption { + return func(o *contextOptions) { + o.tweaks = tweaks + } +} + +// WithTaprootTweakCtx specifies that within this context, the final key should +// use the taproot tweak as defined in BIP 341: outputKey = internalKey + +// h_tapTweak(internalKey || scriptRoot). In this case, the aggreaged key +// before the tweak will be used as the internal key. +func WithTaprootTweakCtx(scriptRoot []byte) ContextOption { + return func(o *contextOptions) { + o.taprootTweak = scriptRoot + } +} + +// WithBip86TweakCtx specifies that within this context, the final key should +// use the taproot tweak as defined in BIP 341, with the BIP 86 modification: +// outputKey = internalKey + h_tapTweak(internalKey)*G. In this case, the +// aggreaged key before the tweak will be used as the internal key. +func WithBip86TweakCtx() ContextOption { + return func(o *contextOptions) { + o.bip86Tweak = true + } +} + +// WithKnownSigners is an optional parameter that should be used if a session +// can be created as soon as all the singers are known. +func WithKnownSigners(signers []*btcec.PublicKey) ContextOption { + return func(o *contextOptions) { + o.keySet = signers + o.numSigners = len(signers) + } +} + +// WithNumSigners is a functional option used to specify that a context should +// be created without knowing all the signers. Instead the total number of +// signers is specified to ensure that a session can only be created once all +// the signers are known. +// +// NOTE: Either WithKnownSigners or WithNumSigners MUST be specified. +func WithNumSigners(n int) ContextOption { + return func(o *contextOptions) { + o.numSigners = n + } +} + +// WithEarlyNonceGen allow a caller to specify that a nonce should be generated +// early, before the session is created. This should be used in protocols that +// require some partial nonce exchange before all the signers are known. +// +// NOTE: This option must only be specified with the WithNumSigners option. +func WithEarlyNonceGen() ContextOption { + return func(o *contextOptions) { + o.earlyNonce = true + } +} + +// NewContext creates a new signing context with the passed singing key and set +// of public keys for each of the other signers. +// +// NOTE: This struct should be used over the raw Sign API whenever possible. +func NewContext(signingKey *btcec.PrivateKey, shouldSort bool, + ctxOpts ...ContextOption) (*Context, error) { + + // First, parse the set of optional context options. + opts := defaultContextOptions() + for _, option := range ctxOpts { + option(opts) + } + + pubKey := signingKey.PubKey() + + ctx := &Context{ + signingKey: signingKey, + pubKey: pubKey, + opts: opts, + shouldSort: shouldSort, + } + + switch { + + // We know all the signers, so we can compute the aggregated key, along + // with all the other intermediate state we need to do signing and + // verification. + case opts.keySet != nil: + if err := ctx.combineSignerKeys(); err != nil { + return nil, err + } + + // The total signers are known, so we add ourselves, and skip key + // aggregation. + case opts.numSigners != 0: + // Otherwise, we'll add ourselves as the only known signer, and + // await further calls to RegisterSigner before a session can + // be created. + opts.keySet = make([]*btcec.PublicKey, 0, opts.numSigners) + opts.keySet = append(opts.keySet, pubKey) + + // If early nonce generation is specified, then we'll generate + // the nonce now to pass in to the session once all the callers + // are known. + if opts.earlyNonce { + var err error + ctx.sessionNonce, err = GenNonces( + WithNonceSecretKeyAux(signingKey), + ) + if err != nil { + return nil, err + } + } + + default: + return nil, ErrSignersNotSpecified + } + + return ctx, nil +} + +// combineSignerKeys is used to compute the aggregated signer key once all the +// signers are known. +func (c *Context) combineSignerKeys() error { + // As a sanity check, make sure the signing key is actually + // amongst the sit of signers. + var keyFound bool + for _, key := range c.opts.keySet { + if key.IsEqual(c.pubKey) { + keyFound = true + break + } + } + if !keyFound { + return ErrSignerNotInKeySet + } + + // Now that we know that we're actually a signer, we'll + // generate the key hash finger print and second unique key + // index so we can speed up signing later. + c.keysHash = keyHashFingerprint(c.opts.keySet, c.shouldSort) + c.uniqueKeyIndex = secondUniqueKeyIndex( + c.opts.keySet, c.shouldSort, + ) + + keyAggOpts := []KeyAggOption{ + WithKeysHash(c.keysHash), + WithUniqueKeyIndex(c.uniqueKeyIndex), + } + switch { + case c.opts.bip86Tweak: + keyAggOpts = append( + keyAggOpts, WithBIP86KeyTweak(), + ) + case c.opts.taprootTweak != nil: + keyAggOpts = append( + keyAggOpts, WithTaprootKeyTweak(c.opts.taprootTweak), + ) + case len(c.opts.tweaks) != 0: + keyAggOpts = append(keyAggOpts, WithKeyTweaks(c.opts.tweaks...)) + } + + // Next, we'll use this information to compute the aggregated + // public key that'll be used for signing in practice. + var err error + c.combinedKey, _, _, err = AggregateKeys( + c.opts.keySet, c.shouldSort, keyAggOpts..., + ) + if err != nil { + return err + } + + return nil +} + +// EarlySessionNonce returns the early session nonce, if available. +func (c *Context) EarlySessionNonce() (*Nonces, error) { + if c.sessionNonce == nil { + return nil, ErrNoEarlyNonce + } + + return c.sessionNonce, nil +} + +// RegisterSigner allows a caller to register a signer after the context has +// been created. This will be used in scenarios where the total number of +// signers is known, but nonce exchange needs to happen before all the signers +// are known. +// +// A bool is returned which indicates if all the signers have been registered. +// +// NOTE: If the set of keys are not to be sorted during signing, then the +// ordering each key is registered with MUST match the desired ordering. +func (c *Context) RegisterSigner(pub *btcec.PublicKey) (bool, error) { + haveAllSigners := len(c.opts.keySet) == c.opts.numSigners + if haveAllSigners { + return false, ErrAlreadyHaveAllSigners + } + + c.opts.keySet = append(c.opts.keySet, pub) + + // If we have the expected number of signers at this point, then we can + // generate the aggregated key and other necessary information. + haveAllSigners = len(c.opts.keySet) == c.opts.numSigners + if haveAllSigners { + if err := c.combineSignerKeys(); err != nil { + return false, err + } + } + + return haveAllSigners, nil +} + +// NumRegisteredSigners returns the total number of registered signers. +func (c *Context) NumRegisteredSigners() int { + return len(c.opts.keySet) +} + +// CombinedKey returns the combined public key that will be used to generate +// multi-signatures against. +func (c *Context) CombinedKey() (*btcec.PublicKey, error) { + // If the caller hasn't registered all the signers at this point, then + // the combined key won't be available. + if c.combinedKey == nil { + return nil, ErrNotEnoughSigners + } + + return c.combinedKey.FinalKey, nil +} + +// PubKey returns the public key of the signer of this session. +func (c *Context) PubKey() btcec.PublicKey { + return *c.pubKey +} + +// SigningKeys returns the set of keys used for signing. +func (c *Context) SigningKeys() []*btcec.PublicKey { + keys := make([]*btcec.PublicKey, len(c.opts.keySet)) + copy(keys, c.opts.keySet) + + return keys +} + +// TaprootInternalKey returns the internal taproot key, which is the aggregated +// key _before_ the tweak is applied. If a taproot tweak was specified, then +// CombinedKey() will return the fully tweaked output key, with this method +// returning the internal key. If a taproot tweak wasn't specified, then this +// method will return an error. +func (c *Context) TaprootInternalKey() (*btcec.PublicKey, error) { + // If the caller hasn't registered all the signers at this point, then + // the combined key won't be available. + if c.combinedKey == nil { + return nil, ErrNotEnoughSigners + } + + if c.opts.taprootTweak == nil && !c.opts.bip86Tweak { + return nil, ErrTaprootInternalKeyUnavailable + } + + return c.combinedKey.PreTweakedKey, nil +} + +// SessionOption is a functional option argument that allows callers to modify +// the musig2 signing is done within a session. +type SessionOption func(*sessionOptions) + +// sessionOptions houses the set of functional options that can be used to +// modify the musig2 signing protocol. +type sessionOptions struct { + externalNonce *Nonces +} + +// defaultSessionOptions returns the default session options. +func defaultSessionOptions() *sessionOptions { + return &sessionOptions{} +} + +// WithPreGeneratedNonce allows a caller to start a session using a nonce +// they've generated themselves. This may be useful in protocols where all the +// signer keys may not be known before nonce exchange needs to occur. +func WithPreGeneratedNonce(nonce *Nonces) SessionOption { + return func(o *sessionOptions) { + o.externalNonce = nonce + } +} + +// Session represents a musig2 signing session. A new instance should be +// created each time a multi-signature is needed. The session struct handles +// nonces management, incremental partial sig vitrifaction, as well as final +// signature combination. Errors are returned when unsafe behavior such as +// nonce re-use is attempted. +// +// NOTE: This struct should be used over the raw Sign API whenever possible. +type Session struct { + opts *sessionOptions + + ctx *Context + + localNonces *Nonces + + pubNonces [][PubNonceSize]byte + + combinedNonce *[PubNonceSize]byte + + msg [32]byte + + ourSig *PartialSignature + sigs []*PartialSignature + + finalSig *schnorr.Signature +} + +// NewSession creates a new musig2 signing session. +func (c *Context) NewSession(options ...SessionOption) (*Session, error) { + opts := defaultSessionOptions() + for _, opt := range options { + opt(opts) + } + + // At this point we verify that we know of all the signers, as + // otherwise we can't proceed with the session. This check is intended + // to catch misuse of the API wherein a caller forgets to register the + // remaining signers if they're doing nonce generation ahead of time. + if len(c.opts.keySet) != c.opts.numSigners { + return nil, ErrNotEnoughSigners + } + + // If an early nonce was specified, then we'll automatically add the + // corresponding session option for the caller. + var localNonces *Nonces + if c.sessionNonce != nil { + // Apply the early nonce to the session, and also blank out the + // session nonce on the context to ensure it isn't ever re-used + // for another session. + localNonces = c.sessionNonce + c.sessionNonce = nil + } else if opts.externalNonce != nil { + // Otherwise if there's a custom nonce passed in via the + // session options, then use that instead. + localNonces = opts.externalNonce + } + + // Now that we know we have enough signers, we'll either use the caller + // specified nonce, or generate a fresh set. + var err error + if localNonces == nil { + // At this point we need to generate a fresh nonce. We'll pass + // in some auxiliary information to strengthen the nonce + // generated. + localNonces, err = GenNonces( + WithNonceSecretKeyAux(c.signingKey), + WithNonceCombinedKeyAux(c.combinedKey.FinalKey), + ) + if err != nil { + return nil, err + } + } + + s := &Session{ + opts: opts, + ctx: c, + localNonces: localNonces, + pubNonces: make([][PubNonceSize]byte, 0, c.opts.numSigners), + sigs: make([]*PartialSignature, 0, c.opts.numSigners), + } + + s.pubNonces = append(s.pubNonces, localNonces.PubNonce) + + return s, nil +} + +// PublicNonce returns the public nonce for a signer. This should be sent to +// other parties before signing begins, so they can compute the aggregated +// public nonce. +func (s *Session) PublicNonce() [PubNonceSize]byte { + return s.localNonces.PubNonce +} + +// NumRegisteredNonces returns the total number of nonces that have been +// regsitered so far. +func (s *Session) NumRegisteredNonces() int { + return len(s.pubNonces) +} + +// RegisterPubNonce should be called for each public nonce from the set of +// signers. This method returns true once all the public nonces have been +// accounted for. +func (s *Session) RegisterPubNonce(nonce [PubNonceSize]byte) (bool, error) { + // If we already have all the nonces, then this method was called too + // many times. + haveAllNonces := len(s.pubNonces) == s.ctx.opts.numSigners + if haveAllNonces { + return false, ErrAlredyHaveAllNonces + } + + // Add this nonce and check again if we already have tall the nonces we + // need. + s.pubNonces = append(s.pubNonces, nonce) + haveAllNonces = len(s.pubNonces) == s.ctx.opts.numSigners + + // If we have all the nonces, then we can go ahead and combine them + // now. + if haveAllNonces { + combinedNonce, err := AggregateNonces(s.pubNonces) + if err != nil { + return false, err + } + + s.combinedNonce = &combinedNonce + } + + return haveAllNonces, nil +} + +// Sign generates a partial signature for the target message, using the target +// context. If this method is called more than once per context, then an error +// is returned, as that means a nonce was re-used. +func (s *Session) Sign(msg [32]byte, + signOpts ...SignOption) (*PartialSignature, error) { + + switch { + // If no local nonce is present, then this means we already signed, so + // we'll return an error to prevent nonce re-use. + case s.localNonces == nil: + return nil, ErrSigningContextReuse + + // We also need to make sure we have the combined nonce, otherwise this + // funciton was called too early. + case s.combinedNonce == nil: + return nil, ErrCombinedNonceUnavailable + } + + switch { + case s.ctx.opts.bip86Tweak: + signOpts = append( + signOpts, WithBip86SignTweak(), + ) + case s.ctx.opts.taprootTweak != nil: + signOpts = append( + signOpts, WithTaprootSignTweak(s.ctx.opts.taprootTweak), + ) + case len(s.ctx.opts.tweaks) != 0: + signOpts = append(signOpts, WithTweaks(s.ctx.opts.tweaks...)) + } + + partialSig, err := Sign( + s.localNonces.SecNonce, s.ctx.signingKey, *s.combinedNonce, + s.ctx.opts.keySet, msg, signOpts..., + ) + + // Now that we've generated our signature, we'll make sure to blank out + // our signing nonce. + s.localNonces = nil + + if err != nil { + return nil, err + } + + s.msg = msg + + s.ourSig = partialSig + s.sigs = append(s.sigs, partialSig) + + return partialSig, nil +} + +// CombineSig buffers a partial signature received from a signing party. The +// method returns true once all the signatures are available, and can be +// combined into the final signature. +func (s *Session) CombineSig(sig *PartialSignature) (bool, error) { + // First check if we already have all the signatures we need. We + // already accumulated our own signature when we generated the sig. + haveAllSigs := len(s.sigs) == len(s.ctx.opts.keySet) + if haveAllSigs { + return false, ErrAlredyHaveAllSigs + } + + // TODO(roasbeef): incremental check for invalid sig, or just detect at + // the very end? + + // Accumulate this sig, and check again if we have all the sigs we + // need. + s.sigs = append(s.sigs, sig) + haveAllSigs = len(s.sigs) == len(s.ctx.opts.keySet) + + // If we have all the signatures, then we can combine them all into the + // final signature. + if haveAllSigs { + var combineOpts []CombineOption + switch { + case s.ctx.opts.bip86Tweak: + combineOpts = append( + combineOpts, WithBip86TweakedCombine( + s.msg, s.ctx.opts.keySet, + s.ctx.shouldSort, + ), + ) + case s.ctx.opts.taprootTweak != nil: + combineOpts = append( + combineOpts, WithTaprootTweakedCombine( + s.msg, s.ctx.opts.keySet, + s.ctx.opts.taprootTweak, s.ctx.shouldSort, + ), + ) + case len(s.ctx.opts.tweaks) != 0: + combineOpts = append( + combineOpts, WithTweakedCombine( + s.msg, s.ctx.opts.keySet, + s.ctx.opts.tweaks, s.ctx.shouldSort, + ), + ) + } + + finalSig := CombineSigs(s.ourSig.R, s.sigs, combineOpts...) + + // We'll also verify the signature at this point to ensure it's + // valid. + // + // TODO(roasbef): allow skipping? + if !finalSig.Verify(s.msg[:], s.ctx.combinedKey.FinalKey) { + return false, ErrFinalSigInvalid + } + + s.finalSig = finalSig + } + + return haveAllSigs, nil +} + +// FinalSig returns the final combined multi-signature, if present. +func (s *Session) FinalSig() *schnorr.Signature { + return s.finalSig +} diff --git a/btcec/schnorr/musig2/data/key_agg_vectors.json b/btcec/schnorr/musig2/data/key_agg_vectors.json new file mode 100644 index 0000000000..b2e623de60 --- /dev/null +++ b/btcec/schnorr/musig2/data/key_agg_vectors.json @@ -0,0 +1,88 @@ +{ + "pubkeys": [ + "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + "03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + "023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66", + "020000000000000000000000000000000000000000000000000000000000000005", + "02FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30", + "04F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + "03935F972DA013F80AE011890FA89B67A27B7BE6CCB24D3274D18B2D4067F261A9" + ], + "tweaks": [ + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", + "252E4BD67410A76CDF933D30EAA1608214037F1B105A013ECCD3C5C184A6110B" + ], + "valid_test_cases": [ + { + "key_indices": [0, 1, 2], + "expected": "90539EEDE565F5D054F32CC0C220126889ED1E5D193BAF15AEF344FE59D4610C" + }, + { + "key_indices": [2, 1, 0], + "expected": "6204DE8B083426DC6EAF9502D27024D53FC826BF7D2012148A0575435DF54B2B" + }, + { + "key_indices": [0, 0, 0], + "expected": "B436E3BAD62B8CD409969A224731C193D051162D8C5AE8B109306127DA3AA935" + }, + { + "key_indices": [0, 0, 1, 1], + "expected": "69BC22BFA5D106306E48A20679DE1D7389386124D07571D0D872686028C26A3E" + } + ], + "error_test_cases": [ + { + "key_indices": [0, 3], + "tweak_indices": [], + "is_xonly": [], + "error": { + "type": "invalid_contribution", + "signer": 1, + "contrib": "pubkey" + }, + "comment": "Invalid public key" + }, + { + "key_indices": [0, 4], + "tweak_indices": [], + "is_xonly": [], + "error": { + "type": "invalid_contribution", + "signer": 1, + "contrib": "pubkey" + }, + "comment": "Public key exceeds field size" + }, + { + "key_indices": [5, 0], + "tweak_indices": [], + "is_xonly": [], + "error": { + "type": "invalid_contribution", + "signer": 0, + "contrib": "pubkey" + }, + "comment": "First byte of public key is not 2 or 3" + }, + { + "key_indices": [0, 1], + "tweak_indices": [0], + "is_xonly": [true], + "error": { + "type": "value", + "message": "The tweak must be less than n." + }, + "comment": "Tweak is out of range" + }, + { + "key_indices": [6], + "tweak_indices": [1], + "is_xonly": [false], + "error": { + "type": "value", + "message": "The result of tweaking cannot be infinity." + }, + "comment": "Intermediate tweaking result is point at infinity" + } + ] +} diff --git a/btcec/schnorr/musig2/data/key_sort_vectors.json b/btcec/schnorr/musig2/data/key_sort_vectors.json new file mode 100644 index 0000000000..022f3417fa --- /dev/null +++ b/btcec/schnorr/musig2/data/key_sort_vectors.json @@ -0,0 +1,16 @@ +{ + "pubkeys": [ + "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8", + "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + "03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + "023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66", + "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8" + ], + "sorted_pubkeys": [ + "023590A94E768F8E1815C2F24B4D80A8E3149316C3518CE7B7AD338368D038CA66", + "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8", + "02DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8", + "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + "03DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659" + ] +} diff --git a/btcec/schnorr/musig2/data/nonce_agg_vectors.json b/btcec/schnorr/musig2/data/nonce_agg_vectors.json new file mode 100644 index 0000000000..597246dd72 --- /dev/null +++ b/btcec/schnorr/musig2/data/nonce_agg_vectors.json @@ -0,0 +1,54 @@ +{ + "pnonces": [ + "020151C80F435648DF67A22B749CD798CE54E0321D034B92B709B567D60A42E66603BA47FBC1834437B3212E89A84D8425E7BF12E0245D98262268EBDCB385D50641", + "03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833", + "020151C80F435648DF67A22B749CD798CE54E0321D034B92B709B567D60A42E6660279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", + "03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60379BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", + "04FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B833", + "03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A60248C264CDD57D3C24D79990B0F865674EB62A0F9018277A95011B41BFC193B831", + "03FF406FFD8ADB9CD29877E4985014F66A59F6CD01C0E88CAA8E5F3166B1F676A602FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30" + ], + "valid_test_cases": [ + { + "pnonce_indices": [0, 1], + "expected": "035FE1873B4F2967F52FEA4A06AD5A8ECCBE9D0FD73068012C894E2E87CCB5804B024725377345BDE0E9C33AF3C43C0A29A9249F2F2956FA8CFEB55C8573D0262DC8" + }, + { + "pnonce_indices": [2, 3], + "expected": "035FE1873B4F2967F52FEA4A06AD5A8ECCBE9D0FD73068012C894E2E87CCB5804B000000000000000000000000000000000000000000000000000000000000000000", + "comment": "Sum of second points encoded in the nonces is point at infinity which is serialized as 33 zero bytes" + } + ], + "error_test_cases": [ + { + "pnonce_indices": [0, 4], + "error": { + "type": "invalid_contribution", + "signer": 1, + "contrib": "pubnonce" + }, + "comment": "Public nonce from signer 1 is invalid due wrong tag, 0x04, in the first half", + "btcec_err": "invalid public key: unsupported format: 4" + }, + { + "pnonce_indices": [5, 1], + "error": { + "type": "invalid_contribution", + "signer": 0, + "contrib": "pubnonce" + }, + "comment": "Public nonce from signer 0 is invalid because the second half does not correspond to an X coordinate", + "btcec_err": "invalid public key: x coordinate 48c264cdd57d3c24d79990b0f865674eb62a0f9018277a95011b41bfc193b831 is not on the secp256k1 curve" + }, + { + "pnonce_indices": [6, 1], + "error": { + "type": "invalid_contribution", + "signer": 0, + "contrib": "pubnonce" + }, + "comment": "Public nonce from signer 0 is invalid because second half exceeds field size", + "btcec_err": "invalid public key: x >= field prime" + } + ] +} diff --git a/btcec/schnorr/musig2/data/nonce_gen_vectors.json b/btcec/schnorr/musig2/data/nonce_gen_vectors.json new file mode 100644 index 0000000000..9727cfe93b --- /dev/null +++ b/btcec/schnorr/musig2/data/nonce_gen_vectors.json @@ -0,0 +1,36 @@ +{ + "test_cases": [ + { + "rand_": "0000000000000000000000000000000000000000000000000000000000000000", + "sk": "0202020202020202020202020202020202020202020202020202020202020202", + "aggpk": "0707070707070707070707070707070707070707070707070707070707070707", + "msg": "0101010101010101010101010101010101010101010101010101010101010101", + "extra_in": "0808080808080808080808080808080808080808080808080808080808080808", + "expected": "BC6C683EBBCC39DCB3C29B3D010D2AAA7C86CFB562FC41ED9A460EE061013E75FB4AD2F0B816713269800D018803906D5481E00A940EAB4F4AC49B4A372EB0F4" + }, + { + "rand_": "0000000000000000000000000000000000000000000000000000000000000000", + "sk": "0202020202020202020202020202020202020202020202020202020202020202", + "aggpk": "0707070707070707070707070707070707070707070707070707070707070707", + "msg": "", + "extra_in": "0808080808080808080808080808080808080808080808080808080808080808", + "expected": "AAC4BFD707F4953B4063851D7E4AAD5C59D5D0BFB0E71012788A85698B5ACF8F11834D5051928424BA501C8CD064F3F942F8D4A07D8A2ED79F153E4ABD9EBBE9" + }, + { + "rand_": "0000000000000000000000000000000000000000000000000000000000000000", + "sk": "0202020202020202020202020202020202020202020202020202020202020202", + "aggpk": "0707070707070707070707070707070707070707070707070707070707070707", + "msg": "2626262626262626262626262626262626262626262626262626262626262626262626262626", + "extra_in": "0808080808080808080808080808080808080808080808080808080808080808", + "expected": "DF54500DD2B503DBA3753C48A9D6B67E6C11EC4325EDD1DC256C7F75D6A85DBECA6D9857A6F3F292FB3B50DBCBF69FADB67B1CDDB0EA6EB693F6455C4C9088E1" + }, + { + "rand_": "0000000000000000000000000000000000000000000000000000000000000000", + "sk": null, + "aggpk": null, + "msg": null, + "extra_in": null, + "expected": "7B3B5A002356471AF0E961DE2549C121BD0D48ABCEEDC6E034BDDF86AD3E0A187ECEE674CEF7364B0BC4BEEFB8B66CAD89F98DE2F8C5A5EAD5D1D1E4BD7D04CD" + } + ] +} diff --git a/btcec/schnorr/musig2/data/sig_agg_vectors.json b/btcec/schnorr/musig2/data/sig_agg_vectors.json new file mode 100644 index 0000000000..7ae9444fd5 --- /dev/null +++ b/btcec/schnorr/musig2/data/sig_agg_vectors.json @@ -0,0 +1,86 @@ +{ + "pubkeys": [ + "03935F972DA013F80AE011890FA89B67A27B7BE6CCB24D3274D18B2D4067F261A9", + "02D2DC6F5DF7C56ACF38C7FA0AE7A759AE30E19B37359DFDE015872324C7EF6E05", + "03C7FB101D97FF930ACD0C6760852EF64E69083DE0B06AC6335724754BB4B0522C", + "02352433B21E7E05D3B452B81CAE566E06D2E003ECE16D1074AABA4289E0E3D581" + ], + "pnonces": [ + "0300A32F8548F59C533F55DB9754E3C0BA3C2544F085649FDCE42B8BD3F244C2CA0384449BED61004E8863452A38534E91875516C3CC543122CE2BE1F31845025588", + "03F66B072A869BC2A57D776D487151D707E82B4F1B885066A589858C1BF3871DB603ED391C9658AB6031A96ACBD5E2D9FEC465EFDC8C0D0B765C9B9F3579D520FB6F", + "03A5791CA078E278126EF457C25B5C835F7282C0A47BDBF464BA35C3769427D5CD034D40350F8A5590985E38AAEFC3C695DF671C2E5498E2B60C082C546E06ECAF78", + "020DE6382B8C0550E8174D5263B981224EBCFEF7706588B6936177FEB68E639B8C02BA5F18DDB3487AD087F63CEF7D7818AC8ECA3D6B736113FF36FB25D113F514F6", + "031883080513BB69B31367F9A7B5F4E81246C627060A7414B7F137FA8459F261990345445505F158EDCFDF0D4BF26E04E018C143BF76B5D457AE57DF06CA41371DF0", + "0300028E83123E7FAB1E1F230547CE8B96CC23F13197312972DE72AACBA98EF9870274C2D8566E9E021AA7E2DDDA01B52AE670E0742418F147610528B65ACDB4D0B3" + ], + "tweaks": [ + "B511DA492182A91B0FFB9A98020D55F260AE86D7ECBD0399C7383D59A5F2AF7C", + "A815FE049EE3C5AAB66310477FBC8BCCCAC2F3395F59F921C364ACD78A2F48DC", + "75448A87274B056468B977BE06EB1E9F657577B7320B0A3376EA51FD420D18A8" + ], + "psigs": [ + "7918521F42E5727FE2E82D802876E0C8844336FDA1B58C82696A55B0188C8B3D", + "599044037AE15C4A99FB94F022B48E7AB215BF703954EC0B83D0E06230476001", + "F05BE3CA783AD1FAF68C5059B43F859BFD4EBB0242459DF2C6BF013F4217F7E7", + "BF85B2A751066466C24A5E7FA6C90DBAADAC2DF1F0BB48546AE239E340437CEB", + "142076B034A7401123EFB07E2317DF819B86B3FFA17180DDD093997D018270D0", + "B7A0C7F5B325B7993925E56B60F53EF8198169F31E1AF7E62BBEF1C5DCD1BA22", + "C717ECA32C148CE8EB8882CD9656DF9C64929DCAE9AF798E381B1E888DDF0F8F", + "5988823E78488D8005311E16E5EA67AF70514CB44F5A5CD51FFA262BEEAA21CE", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141" + ], + "msg": "599C67EA410D005B9DA90817CF03ED3B1C868E4DA4EDF00A5880B0082C237869", + "valid_test_cases": [ + { + "aggnonce": "02BC34CDF6FA1298D7B6A126812FAD0739005BC44E45C21276EEFE41AAF841C86F03F3562AED52243BB99F43D1677DB59F0FEFB961633997F7AC924B78FBD0B0334F", + "nonce_indices": [0, 1], + "key_indices": [0, 1], + "tweak_indices": [], + "is_xonly": [], + "psig_indices": [0, 1], + "expected": "CA3C28729659E50F829F55DC5DB1DE88A05D1702B4165B85F95B627FC57733F8D2A89622BDC6CECA7CE3C2704B2B6F433658F66DDB0A788DED3B361248D3EB3E" + }, + { + "aggnonce": "035538518B8043CF4EACD0E701A80657B741C0E6445EC1D6C6177964D22C642971030CFE657EC882F4E08E751B883A78AC1491B30FC86CB57AF2DFF012C2BE6DF1F2", + "nonce_indices": [0, 2], + "key_indices": [0, 2], + "tweak_indices": [], + "is_xonly": [], + "psig_indices": [2, 3], + "expected": "3997A11DFF76349532CF25E761365EA1D4F24B62EB23A12A9DAABD5976C3DB9FAFE19671C9413661B8D6AED95B089357F04C0C0D83B8460B71CEDC95B2253391" + }, + { + "aggnonce": "024366775E6FFBEBBB954225936BAED71A3884C7933B18225088D19E7AF12D8D5D028D79A520B347B793FFE897A7EB79A4366A3FDCDC652C243FAC3976B3D6DF8AB2", + "nonce_indices": [0, 3], + "key_indices": [0, 2], + "tweak_indices": [0], + "is_xonly": [false], + "psig_indices": [4, 5], + "expected": "5AF759C2839B7FEE59D31DAB800F82FC21258457773A3B1F69F5228C80CAD4317EA39AD756601030E4D4051B7C9A25AB4DE7CB39BED26E0A03A1B2ED5B747F7F" + }, + { + "aggnonce": "03B25098C6D0B72DC5717314AF26C126609B4776AA468553DD4354EE20B216B227027D242E9203499173A74E286C1F796F2711E171EE937706BBEA2F4DB10C4E6809", + "nonce_indices": [0, 4], + "key_indices": [0, 3], + "tweak_indices": [0, 1, 2], + "is_xonly": [true, false, true], + "psig_indices": [6, 7], + "expected": "B495A478F91D6E10BF08A156E46D9E62B4C5399C1AEDDA1A9D306F06AFB8A52F2C078FD6B50DDBC33BFFE583C3C1E3D0D5E52891E190101C70D2278BCA943457" + } + ], + "error_test_cases": [ + { + "aggnonce": "03B25098C6D0B72DC5717314AF26C126609B4776AA468553DD4354EE20B216B227027D242E9203499173A74E286C1F796F2711E171EE937706BBEA2F4DB10C4E6809", + "nonce_indices": [0, 4], + "key_indices": [0, 3], + "tweak_indices": [0, 1, 2], + "is_xonly": [true, false, true], + "psig_indices": [7, 8], + "error": { + "type": "invalid_contribution", + "signer": 1 + }, + "comment": "Partial signature is invalid because it exceeds group size" + } + ] +} diff --git a/btcec/schnorr/musig2/data/sign_verify_vectors.json b/btcec/schnorr/musig2/data/sign_verify_vectors.json new file mode 100644 index 0000000000..e2499c7fb6 --- /dev/null +++ b/btcec/schnorr/musig2/data/sign_verify_vectors.json @@ -0,0 +1,183 @@ +{ + "sk": "7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DFE8D76D7F2D1007671", + "pubkeys": [ + "03935F972DA013F80AE011890FA89B67A27B7BE6CCB24D3274D18B2D4067F261A9", + "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + "02DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA661", + "020000000000000000000000000000000000000000000000000000000000000007" + ], + "secnonces": [ + "508B81A611F100A6B2B6B29656590898AF488BCF2E1F55CF22E5CFB84421FE61FA27FD49B1D50085B481285E1CA205D55C82CC1B31FF5CD54A489829355901F7", + "00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000" + ], + "pnonces": [ + "0337C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", + "0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", + "032DE2662628C90B03F5E720284EB52FF7D71F4284F627B68A853D78C78E1FFE9303E4C5524E83FFE1493B9077CF1CA6BEB2090C93D930321071AD40B2F44E599046", + "0237C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0387BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", + "020000000000000000000000000000000000000000000000000000000000000009" + ], + "aggnonces": [ + "028465FCF0BBDBCF443AABCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61037496A3CC86926D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9", + "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "048465FCF0BBDBCF443AABCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61037496A3CC86926D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9", + "028465FCF0BBDBCF443AABCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61020000000000000000000000000000000000000000000000000000000000000009", + "028465FCF0BBDBCF443AABCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD6102FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30" + ], + "msgs": [ + "F95466D086770E689964664219266FE5ED215C92AE20BAB5C9D79ADDDDF3C0CF", + "", + "2626262626262626262626262626262626262626262626262626262626262626262626262626" + ], + "valid_test_cases": [ + { + "key_indices": [0, 1, 2], + "nonce_indices": [0, 1, 2], + "aggnonce_index": 0, + "msg_index": 0, + "signer_index": 0, + "expected": "012ABBCB52B3016AC03AD82395A1A415C48B93DEF78718E62A7A90052FE224FB" + }, + { + "key_indices": [1, 0, 2], + "nonce_indices": [1, 0, 2], + "aggnonce_index": 0, + "msg_index": 0, + "signer_index": 1, + "expected": "9FF2F7AAA856150CC8819254218D3ADEEB0535269051897724F9DB3789513A52" + }, + { + "key_indices": [1, 2, 0], + "nonce_indices": [1, 2, 0], + "aggnonce_index": 0, + "msg_index": 0, + "signer_index": 2, + "expected": "FA23C359F6FAC4E7796BB93BC9F0532A95468C539BA20FF86D7C76ED92227900" + }, + { + "key_indices": [0, 1], + "nonce_indices": [0, 3], + "aggnonce_index": 1, + "msg_index": 0, + "signer_index": 0, + "expected": "AE386064B26105404798F75DE2EB9AF5EDA5387B064B83D049CB7C5E08879531", + "comment": "Both halves of aggregate nonce correspond to point at infinity" + } + ], + "sign_error_test_cases": [ + { + "key_indices": [1, 0, 3], + "aggnonce_index": 0, + "msg_index": 0, + "secnonce_index": 0, + "error": { + "type": "invalid_contribution", + "signer": 2, + "contrib": "pubkey" + }, + "comment": "Signer 2 provided an invalid public key" + }, + { + "key_indices": [1, 2, 0], + "aggnonce_index": 2, + "msg_index": 0, + "secnonce_index": 0, + "error": { + "type": "invalid_contribution", + "signer": null, + "contrib": "aggnonce" + }, + "comment": "Aggregate nonce is invalid due wrong tag, 0x04, in the first half" + }, + { + "key_indices": [1, 2, 0], + "aggnonce_index": 3, + "msg_index": 0, + "secnonce_index": 0, + "error": { + "type": "invalid_contribution", + "signer": null, + "contrib": "aggnonce" + }, + "comment": "Aggregate nonce is invalid because the second half does not correspond to an X coordinate" + }, + { + "key_indices": [1, 2, 0], + "aggnonce_index": 4, + "msg_index": 0, + "secnonce_index": 0, + "error": { + "type": "invalid_contribution", + "signer": null, + "contrib": "aggnonce" + }, + "comment": "Aggregate nonce is invalid because second half exceeds field size" + }, + { + "key_indices": [0, 1, 2], + "aggnonce_index": 0, + "msg_index": 0, + "signer_index": 0, + "secnonce_index": 1, + "error": { + "type": "value", + "message": "first secnonce value is out of range." + }, + "comment": "Secnonce is invalid which may indicate nonce reuse" + } + ], + "verify_fail_test_cases": [ + { + "sig": "97AC833ADCB1AFA42EBF9E0725616F3C9A0D5B614F6FE283CEAAA37A8FFAF406", + "key_indices": [0, 1, 2], + "nonce_indices": [0, 1, 2], + "msg_index": 0, + "signer_index": 0, + "comment": "Wrong signature (which is equal to the negation of valid signature)" + }, + { + "sig": "68537CC5234E505BD14061F8DA9E90C220A181855FD8BDB7F127BB12403B4D3B", + "key_indices": [0, 1, 2], + "nonce_indices": [0, 1, 2], + "msg_index": 0, + "signer_index": 1, + "comment": "Wrong signer" + }, + { + "sig": "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", + "key_indices": [0, 1, 2], + "nonce_indices": [0, 1, 2], + "msg_index": 0, + "signer_index": 0, + "comment": "Signature exceeds group size" + } + ], + "verify_error_test_cases": [ + { + "sig": "68537CC5234E505BD14061F8DA9E90C220A181855FD8BDB7F127BB12403B4D3B", + "key_indices": [0, 1, 2], + "nonce_indices": [4, 1, 2], + "msg_index": 0, + "signer_index": 0, + "error": { + "type": "invalid_contribution", + "signer": 0, + "contrib": "pubnonce" + }, + "comment": "Invalid pubnonce" + }, + { + "sig": "68537CC5234E505BD14061F8DA9E90C220A181855FD8BDB7F127BB12403B4D3B", + "key_indices": [3, 1, 2], + "nonce_indices": [0, 1, 2], + "msg_index": 0, + "signer_index": 0, + "error": { + "type": "invalid_contribution", + "signer": 0, + "contrib": "pubkey" + }, + "comment": "Invalid pubkey" + } + ] +} diff --git a/btcec/schnorr/musig2/data/tweak_vectors.json b/btcec/schnorr/musig2/data/tweak_vectors.json new file mode 100644 index 0000000000..01ccb8b1b3 --- /dev/null +++ b/btcec/schnorr/musig2/data/tweak_vectors.json @@ -0,0 +1,84 @@ +{ + "sk": "7FB9E0E687ADA1EEBF7ECFE2F21E73EBDB51A7D450948DFE8D76D7F2D1007671", + "pubkeys": [ + "03935F972DA013F80AE011890FA89B67A27B7BE6CCB24D3274D18B2D4067F261A9", + "02F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + "02DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659" + ], + "secnonce": "508B81A611F100A6B2B6B29656590898AF488BCF2E1F55CF22E5CFB84421FE61FA27FD49B1D50085B481285E1CA205D55C82CC1B31FF5CD54A489829355901F7", + "pnonces": [ + "0337C87821AFD50A8644D820A8F3E02E499C931865C2360FB43D0A0D20DAFE07EA0287BF891D2A6DEAEBADC909352AA9405D1428C15F4B75F04DAE642A95C2548480", + "0279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F817980279BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", + "032DE2662628C90B03F5E720284EB52FF7D71F4284F627B68A853D78C78E1FFE9303E4C5524E83FFE1493B9077CF1CA6BEB2090C93D930321071AD40B2F44E599046" + ], + "aggnonce": "028465FCF0BBDBCF443AABCCE533D42B4B5A10966AC09A49655E8C42DAAB8FCD61037496A3CC86926D452CAFCFD55D25972CA1675D549310DE296BFF42F72EEEA8C9", + "tweaks": [ + "E8F791FF9225A2AF0102AFFF4A9A723D9612A682A25EBE79802B263CDFCD83BB", + "AE2EA797CC0FE72AC5B97B97F3C6957D7E4199A167A58EB08BCAFFDA70AC0455", + "F52ECBC565B3D8BEA2DFD5B75A4F457E54369809322E4120831626F290FA87E0", + "1969AD73CC177FA0B4FCED6DF1F7BF9907E665FDE9BA196A74FED0A3CF5AEF9D", + "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141" + ], + "msg": "F95466D086770E689964664219266FE5ED215C92AE20BAB5C9D79ADDDDF3C0CF", + "valid_test_cases": [ + { + "key_indices": [1, 2, 0], + "nonce_indices": [1, 2, 0], + "tweak_indices": [0], + "is_xonly": [true], + "signer_index": 2, + "expected": "E28A5C66E61E178C2BA19DB77B6CF9F7E2F0F56C17918CD13135E60CC848FE91", + "comment": "A single x-only tweak" + }, + { + "key_indices": [1, 2, 0], + "nonce_indices": [1, 2, 0], + "tweak_indices": [0], + "is_xonly": [false], + "signer_index": 2, + "expected": "38B0767798252F21BF5702C48028B095428320F73A4B14DB1E25DE58543D2D2D", + "comment": "A single plain tweak" + }, + { + "key_indices": [1, 2, 0], + "nonce_indices": [1, 2, 0], + "tweak_indices": [0, 1], + "is_xonly": [false, true], + "signer_index": 2, + "expected": "408A0A21C4A0F5DACAF9646AD6EB6FECD7F7A11F03ED1F48DFFF2185BC2C2408", + "comment": "A plain tweak followed by an x-only tweak" + }, + { + "key_indices": [1, 2, 0], + "nonce_indices": [1, 2, 0], + "tweak_indices": [0, 1, 2, 3], + "is_xonly": [false, false, true, true], + "signer_index": 2, + "expected": "45ABD206E61E3DF2EC9E264A6FEC8292141A633C28586388235541F9ADE75435", + "comment": "Four tweaks: plain, plain, x-only, x-only." + }, + { + "key_indices": [1, 2, 0], + "nonce_indices": [1, 2, 0], + "tweak_indices": [0, 1, 2, 3], + "is_xonly": [true, false, true, false], + "signer_index": 2, + "expected": "B255FDCAC27B40C7CE7848E2D3B7BF5EA0ED756DA81565AC804CCCA3E1D5D239", + "comment": "Four tweaks: x-only, plain, x-only, plain. If an implementation prohibits applying plain tweaks after x-only tweaks, it can skip this test vector or return an error." + } + ], + "error_test_cases": [ + { + "key_indices": [1, 2, 0], + "nonce_indices": [1, 2, 0], + "tweak_indices": [4], + "is_xonly": [false], + "signer_index": 2, + "error": { + "type": "value", + "message": "The tweak must be less than n." + }, + "comment": "Tweak is invalid because it exceeds group size" + } + ] +} diff --git a/btcec/schnorr/musig2/keys.go b/btcec/schnorr/musig2/keys.go new file mode 100644 index 0000000000..4ee63be2eb --- /dev/null +++ b/btcec/schnorr/musig2/keys.go @@ -0,0 +1,457 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "bytes" + "fmt" + "sort" + + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +var ( + // KeyAggTagList is the tagged hash tag used to compute the hash of the + // list of sorted public keys. + KeyAggTagList = []byte("KeyAgg list") + + // KeyAggTagCoeff is the tagged hash tag used to compute the key + // aggregation coefficient for each key. + KeyAggTagCoeff = []byte("KeyAgg coefficient") + + // ErrTweakedKeyIsInfinity is returned if while tweaking a key, we end + // up with the point at infinity. + ErrTweakedKeyIsInfinity = fmt.Errorf("tweaked key is infinity point") + + // ErrTweakedKeyOverflows is returned if a tweaking key is larger than + // 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141. + ErrTweakedKeyOverflows = fmt.Errorf("tweaked key is too large") +) + +// sortableKeys defines a type of slice of public keys that implements the sort +// interface for BIP 340 keys. +type sortableKeys []*btcec.PublicKey + +// Less reports whether the element with index i must sort before the element +// with index j. +func (s sortableKeys) Less(i, j int) bool { + // TODO(roasbeef): more efficient way to compare... + keyIBytes := s[i].SerializeCompressed() + keyJBytes := s[j].SerializeCompressed() + + return bytes.Compare(keyIBytes, keyJBytes) == -1 +} + +// Swap swaps the elements with indexes i and j. +func (s sortableKeys) Swap(i, j int) { + s[i], s[j] = s[j], s[i] +} + +// Len is the number of elements in the collection. +func (s sortableKeys) Len() int { + return len(s) +} + +// sortKeys takes a set of public keys and returns a new slice that is a copy +// of the keys sorted in lexicographical order bytes on the x-only pubkey +// serialization. +func sortKeys(keys []*btcec.PublicKey) []*btcec.PublicKey { + keySet := sortableKeys(keys) + if sort.IsSorted(keySet) { + return keys + } + + sort.Sort(keySet) + return keySet +} + +// keyHashFingerprint computes the tagged hash of the series of (sorted) public +// keys passed as input. This is used to compute the aggregation coefficient +// for each key. The final computation is: +// - H(tag=KeyAgg list, pk1 || pk2..) +func keyHashFingerprint(keys []*btcec.PublicKey, sort bool) []byte { + if sort { + keys = sortKeys(keys) + } + + // We'll create a single buffer and slice into that so the bytes buffer + // doesn't continually need to grow the underlying buffer. + keyAggBuf := make([]byte, 33*len(keys)) + keyBytes := bytes.NewBuffer(keyAggBuf[0:0]) + for _, key := range keys { + keyBytes.Write(key.SerializeCompressed()) + } + + h := chainhash.TaggedHash(KeyAggTagList, keyBytes.Bytes()) + return h[:] +} + +// keyBytesEqual returns true if two keys are the same based on the compressed +// serialization of each key. +func keyBytesEqual(a, b *btcec.PublicKey) bool { + return bytes.Equal(a.SerializeCompressed(), b.SerializeCompressed()) +} + +// aggregationCoefficient computes the key aggregation coefficient for the +// specified target key. The coefficient is computed as: +// - H(tag=KeyAgg coefficient, keyHashFingerprint(pks) || pk) +func aggregationCoefficient(keySet []*btcec.PublicKey, + targetKey *btcec.PublicKey, keysHash []byte, + secondKeyIdx int) *btcec.ModNScalar { + + var mu btcec.ModNScalar + + // If this is the second key, then this coefficient is just one. + if secondKeyIdx != -1 && keyBytesEqual(keySet[secondKeyIdx], targetKey) { + return mu.SetInt(1) + } + + // Otherwise, we'll compute the full finger print hash for this given + // key and then use that to compute the coefficient tagged hash: + // * H(tag=KeyAgg coefficient, keyHashFingerprint(pks, pk) || pk) + var coefficientBytes [65]byte + copy(coefficientBytes[:], keysHash[:]) + copy(coefficientBytes[32:], targetKey.SerializeCompressed()) + + muHash := chainhash.TaggedHash(KeyAggTagCoeff, coefficientBytes[:]) + + mu.SetByteSlice(muHash[:]) + + return &mu +} + +// secondUniqueKeyIndex returns the index of the second unique key. If all keys +// are the same, then a value of -1 is returned. +func secondUniqueKeyIndex(keySet []*btcec.PublicKey, sort bool) int { + if sort { + keySet = sortKeys(keySet) + } + + // Find the first key that isn't the same as the very first key (second + // unique key). + for i := range keySet { + if !keyBytesEqual(keySet[i], keySet[0]) { + return i + } + } + + // A value of negative one is used to indicate that all the keys in the + // sign set are actually equal, which in practice actually makes musig2 + // useless, but we need a value to distinguish this case. + return -1 +} + +// KeyTweakDesc describes a tweak to be applied to the aggregated public key +// generation and signing process. The IsXOnly specifies if the target key +// should be converted to an x-only public key before tweaking. +type KeyTweakDesc struct { + // Tweak is the 32-byte value that will modify the public key. + Tweak [32]byte + + // IsXOnly if true, then the public key will be mapped to an x-only key + // before the tweaking operation is applied. + IsXOnly bool +} + +// KeyAggOption is a functional option argument that allows callers to specify +// more or less information that has been pre-computed to the main routine. +type KeyAggOption func(*keyAggOption) + +// keyAggOption houses the set of functional options that modify key +// aggregation. +type keyAggOption struct { + // keyHash is the output of keyHashFingerprint for a given set of keys. + keyHash []byte + + // uniqueKeyIndex is the pre-computed index of the second unique key. + uniqueKeyIndex *int + + // tweaks specifies a series of tweaks to be applied to the aggregated + // public key. + tweaks []KeyTweakDesc + + // taprootTweak controls if the tweaks above should be applied in a BIP + // 340 style. + taprootTweak bool + + // bip86Tweak specifies that the taproot tweak should be done in a BIP + // 86 style, where we don't expect an actual tweak and instead just + // commit to the public key itself. + bip86Tweak bool +} + +// WithKeysHash allows key aggregation to be optimize, by allowing the caller +// to specify the hash of all the keys. +func WithKeysHash(keyHash []byte) KeyAggOption { + return func(o *keyAggOption) { + o.keyHash = keyHash + } +} + +// WithUniqueKeyIndex allows the caller to specify the index of the second +// unique key. +func WithUniqueKeyIndex(idx int) KeyAggOption { + return func(o *keyAggOption) { + i := idx + o.uniqueKeyIndex = &i + } +} + +// WithKeyTweaks allows a caller to specify a series of 32-byte tweaks that +// should be applied to the final aggregated public key. +func WithKeyTweaks(tweaks ...KeyTweakDesc) KeyAggOption { + return func(o *keyAggOption) { + o.tweaks = tweaks + } +} + +// WithTaprootKeyTweak specifies that within this context, the final key should +// use the taproot tweak as defined in BIP 341: outputKey = internalKey + +// h_tapTweak(internalKey || scriptRoot). In this case, the aggregated key +// before the tweak will be used as the internal key. +// +// This option should be used instead of WithKeyTweaks when the aggregated key +// is intended to be used as a taproot output key that commits to a script +// root. +func WithTaprootKeyTweak(scriptRoot []byte) KeyAggOption { + return func(o *keyAggOption) { + var tweak [32]byte + copy(tweak[:], scriptRoot[:]) + + o.tweaks = []KeyTweakDesc{ + { + Tweak: tweak, + IsXOnly: true, + }, + } + o.taprootTweak = true + } +} + +// WithBIP86KeyTweak specifies that then during key aggregation, the BIP 86 +// tweak which just commits to the hash of the serialized public key should be +// used. This option should be used when signing with a key that was derived +// using BIP 86. +func WithBIP86KeyTweak() KeyAggOption { + return func(o *keyAggOption) { + o.tweaks = []KeyTweakDesc{ + { + IsXOnly: true, + }, + } + o.taprootTweak = true + o.bip86Tweak = true + } +} + +// defaultKeyAggOptions returns the set of default arguments for key +// aggregation. +func defaultKeyAggOptions() *keyAggOption { + return &keyAggOption{} +} + +// hasEvenY returns true if the affine representation of the passed jacobian +// point has an even y coordinate. +// +// TODO(roasbeef): double check, can just check the y coord even not jacobian? +func hasEvenY(pJ btcec.JacobianPoint) bool { + pJ.ToAffine() + p := btcec.NewPublicKey(&pJ.X, &pJ.Y) + keyBytes := p.SerializeCompressed() + return keyBytes[0] == secp.PubKeyFormatCompressedEven +} + +// tweakKey applies a tweaks to the passed public key using the specified +// tweak. The parityAcc and tweakAcc are returned (in that order) which +// includes the accumulate ration of the parity factor and the tweak multiplied +// by the parity factor. The xOnly bool specifies if this is to be an x-only +// tweak or not. +func tweakKey(keyJ btcec.JacobianPoint, parityAcc btcec.ModNScalar, tweak [32]byte, + tweakAcc btcec.ModNScalar, + xOnly bool) (btcec.JacobianPoint, btcec.ModNScalar, btcec.ModNScalar, error) { + + // First we'll compute the new parity factor for this key. If the key has + // an odd y coordinate (not even), then we'll need to negate it (multiply + // by -1 mod n, in this case). + var parityFactor btcec.ModNScalar + if xOnly && !hasEvenY(keyJ) { + parityFactor.SetInt(1).Negate() + } else { + parityFactor.SetInt(1) + } + + // Next, map the tweak into a mod n integer so we can use it for + // manipulations below. + tweakInt := new(btcec.ModNScalar) + overflows := tweakInt.SetBytes(&tweak) + if overflows == 1 { + return keyJ, parityAcc, tweakAcc, ErrTweakedKeyOverflows + } + + // Next, we'll compute: Q_i = g*Q + t*G, where g is our parityFactor and t + // is the tweakInt above. We'll space things out a bit to make it easier to + // follow. + // + // First compute t*G: + var tweakedGenerator btcec.JacobianPoint + btcec.ScalarBaseMultNonConst(tweakInt, &tweakedGenerator) + + // Next compute g*Q: + btcec.ScalarMultNonConst(&parityFactor, &keyJ, &keyJ) + + // Finally add both of them together to get our final + // tweaked point. + btcec.AddNonConst(&tweakedGenerator, &keyJ, &keyJ) + + // As a sanity check, make sure that we didn't just end up with the + // point at infinity. + if keyJ == infinityPoint { + return keyJ, parityAcc, tweakAcc, ErrTweakedKeyIsInfinity + } + + // As a final wrap up step, we'll accumulate the parity + // factor and also this tweak into the final set of accumulators. + parityAcc.Mul(&parityFactor) + tweakAcc.Mul(&parityFactor).Add(tweakInt) + + return keyJ, parityAcc, tweakAcc, nil +} + +// AggregateKey is a final aggregated key along with a possible version of the +// key without any tweaks applied. +type AggregateKey struct { + // FinalKey is the final aggregated key which may include one or more + // tweaks applied to it. + FinalKey *btcec.PublicKey + + // PreTweakedKey is the aggregated *before* any tweaks have been + // applied. This should be used as the internal key in taproot + // contexts. + PreTweakedKey *btcec.PublicKey +} + +// AggregateKeys takes a list of possibly unsorted keys and returns a single +// aggregated key as specified by the musig2 key aggregation algorithm. A nil +// value can be passed for keyHash, which causes this function to re-derive it. +// In addition to the combined public key, the parity accumulator and the tweak +// accumulator are returned as well. +func AggregateKeys(keys []*btcec.PublicKey, sort bool, + keyOpts ...KeyAggOption) ( + *AggregateKey, *btcec.ModNScalar, *btcec.ModNScalar, error) { + + // First, parse the set of optional signing options. + opts := defaultKeyAggOptions() + for _, option := range keyOpts { + option(opts) + } + + // Sort the set of public key so we know we're working with them in + // sorted order for all the routines below. + if sort { + keys = sortKeys(keys) + } + + // The caller may provide the hash of all the keys as an optimization + // during signing, as it already needs to be computed. + if opts.keyHash == nil { + opts.keyHash = keyHashFingerprint(keys, sort) + } + + // A caller may also specify the unique key index themselves so we + // don't need to re-compute it. + if opts.uniqueKeyIndex == nil { + idx := secondUniqueKeyIndex(keys, sort) + opts.uniqueKeyIndex = &idx + } + + // For each key, we'll compute the intermediate blinded key: a_i*P_i, + // where a_i is the aggregation coefficient for that key, and P_i is + // the key itself, then accumulate that (addition) into the main final + // key: P = P_1 + P_2 ... P_N. + var finalKeyJ btcec.JacobianPoint + for _, key := range keys { + // Port the key over to Jacobian coordinates as we need it in + // this format for the routines below. + var keyJ btcec.JacobianPoint + key.AsJacobian(&keyJ) + + // Compute the aggregation coefficient for the key, then + // multiply it by the key itself: P_i' = a_i*P_i. + var tweakedKeyJ btcec.JacobianPoint + a := aggregationCoefficient( + keys, key, opts.keyHash, *opts.uniqueKeyIndex, + ) + btcec.ScalarMultNonConst(a, &keyJ, &tweakedKeyJ) + + // Finally accumulate this into the final key in an incremental + // fashion. + btcec.AddNonConst(&finalKeyJ, &tweakedKeyJ, &finalKeyJ) + } + + // We'll copy over the key at this point, since this represents the + // aggregated key before any tweaks have been applied. This'll be used + // as the internal key for script path proofs. + finalKeyJ.ToAffine() + combinedKey := btcec.NewPublicKey(&finalKeyJ.X, &finalKeyJ.Y) + + // At this point, if this is a taproot tweak, then we'll modify the + // base tweak value to use the BIP 341 tweak value. + if opts.taprootTweak { + // Emulate the same behavior as txscript.ComputeTaprootOutputKey + // which only operates on the x-only public key. + key, _ := schnorr.ParsePubKey(schnorr.SerializePubKey( + combinedKey, + )) + + // We only use the actual tweak bytes if we're not committing + // to a BIP-0086 key only spend output. Otherwise, we just + // commit to the internal key and an empty byte slice as the + // root hash. + tweakBytes := []byte{} + if !opts.bip86Tweak { + tweakBytes = opts.tweaks[0].Tweak[:] + } + + // Compute the taproot key tagged hash of: + // h_tapTweak(internalKey || scriptRoot). We only do this for + // the first one, as you can only specify a single tweak when + // using the taproot mode with this API. + tapTweakHash := chainhash.TaggedHash( + chainhash.TagTapTweak, schnorr.SerializePubKey(key), + tweakBytes, + ) + opts.tweaks[0].Tweak = *tapTweakHash + } + + var ( + err error + tweakAcc btcec.ModNScalar + parityAcc btcec.ModNScalar + ) + parityAcc.SetInt(1) + + // In this case we have a set of tweaks, so we'll incrementally apply + // each one, until we have our final tweaked key, and the related + // accumulators. + for i := 1; i <= len(opts.tweaks); i++ { + finalKeyJ, parityAcc, tweakAcc, err = tweakKey( + finalKeyJ, parityAcc, opts.tweaks[i-1].Tweak, tweakAcc, + opts.tweaks[i-1].IsXOnly, + ) + if err != nil { + return nil, nil, nil, err + } + } + + finalKeyJ.ToAffine() + finalKey := btcec.NewPublicKey(&finalKeyJ.X, &finalKeyJ.Y) + + return &AggregateKey{ + PreTweakedKey: combinedKey, + FinalKey: finalKey, + }, &parityAcc, &tweakAcc, nil +} diff --git a/btcec/schnorr/musig2/keys_test.go b/btcec/schnorr/musig2/keys_test.go new file mode 100644 index 0000000000..9eb16b537f --- /dev/null +++ b/btcec/schnorr/musig2/keys_test.go @@ -0,0 +1,394 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "encoding/hex" + "encoding/json" + "fmt" + "os" + "path" + "strings" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + "github.com/stretchr/testify/require" +) + +const ( + keySortTestVectorFileName = "key_sort_vectors.json" + + keyAggTestVectorFileName = "key_agg_vectors.json" + + keyTweakTestVectorFileName = "tweak_vectors.json" +) + +type keySortTestVector struct { + PubKeys []string `json:"pubkeys"` + + SortedKeys []string `json:"sorted_pubkeys"` +} + +// TestMusig2KeySort tests that keys are properly sorted according to the +// musig2 test vectors. +func TestMusig2KeySort(t *testing.T) { + t.Parallel() + + testVectorPath := path.Join( + testVectorBaseDir, keySortTestVectorFileName, + ) + testVectorBytes, err := os.ReadFile(testVectorPath) + require.NoError(t, err) + + var testCase keySortTestVector + require.NoError(t, json.Unmarshal(testVectorBytes, &testCase)) + + keys := make([]*btcec.PublicKey, len(testCase.PubKeys)) + for i, keyStr := range testCase.PubKeys { + pubKey, err := btcec.ParsePubKey(mustParseHex(keyStr)) + require.NoError(t, err) + + keys[i] = pubKey + } + + sortedKeys := sortKeys(keys) + + expectedKeys := make([]*btcec.PublicKey, len(testCase.PubKeys)) + for i, keyStr := range testCase.SortedKeys { + pubKey, err := btcec.ParsePubKey(mustParseHex(keyStr)) + require.NoError(t, err) + + expectedKeys[i] = pubKey + } + + require.Equal(t, sortedKeys, expectedKeys) +} + +type keyAggValidTest struct { + Indices []int `json:"key_indices"` + Expected string `json:"expected"` +} + +type keyAggError struct { + Type string `json:"type"` + Signer int `json:"signer"` + Contring string `json:"contrib"` +} + +type keyAggInvalidTest struct { + Indices []int `json:"key_indices"` + + TweakIndices []int `json:"tweak_indices"` + + IsXOnly []bool `json:"is_xonly"` + + Comment string `json:"comment"` +} + +type keyAggTestVectors struct { + PubKeys []string `json:"pubkeys"` + + Tweaks []string `json:"tweaks"` + + ValidCases []keyAggValidTest `json:"valid_test_cases"` + + InvalidCases []keyAggInvalidTest `json:"error_test_cases"` +} + +func keysFromIndices(t *testing.T, indices []int, + pubKeys []string) ([]*btcec.PublicKey, error) { + + t.Helper() + + inputKeys := make([]*btcec.PublicKey, len(indices)) + for i, keyIdx := range indices { + var err error + inputKeys[i], err = btcec.ParsePubKey( + mustParseHex(pubKeys[keyIdx]), + ) + if err != nil { + return nil, err + } + } + + return inputKeys, nil +} + +func tweaksFromIndices(t *testing.T, indices []int, + tweaks []string, isXonly []bool) []KeyTweakDesc { + + t.Helper() + + testTweaks := make([]KeyTweakDesc, len(indices)) + for i, idx := range indices { + var rawTweak [32]byte + copy(rawTweak[:], mustParseHex(tweaks[idx])) + + testTweaks[i] = KeyTweakDesc{ + Tweak: rawTweak, + IsXOnly: isXonly[i], + } + } + + return testTweaks +} + +// TestMuSig2KeyAggTestVectors tests that this implementation of musig2 key +// aggregation lines up with the secp256k1-zkp test vectors. +func TestMuSig2KeyAggTestVectors(t *testing.T) { + t.Parallel() + + testVectorPath := path.Join( + testVectorBaseDir, keyAggTestVectorFileName, + ) + testVectorBytes, err := os.ReadFile(testVectorPath) + require.NoError(t, err) + + var testCases keyAggTestVectors + require.NoError(t, json.Unmarshal(testVectorBytes, &testCases)) + + tweaks := make([][]byte, len(testCases.Tweaks)) + for i := range testCases.Tweaks { + tweaks[i] = mustParseHex(testCases.Tweaks[i]) + } + + for i, testCase := range testCases.ValidCases { + testCase := testCase + + // Assemble the set of keys we'll pass in based on their key + // index. We don't use sorting to ensure we send the keys in + // the exact same order as the test vectors do. + inputKeys, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + require.NoError(t, err) + + t.Run(fmt.Sprintf("test_case=%v", i), func(t *testing.T) { + uniqueKeyIndex := secondUniqueKeyIndex(inputKeys, false) + opts := []KeyAggOption{WithUniqueKeyIndex(uniqueKeyIndex)} + + combinedKey, _, _, err := AggregateKeys( + inputKeys, false, opts..., + ) + require.NoError(t, err) + + require.Equal( + t, schnorr.SerializePubKey(combinedKey.FinalKey), + mustParseHex(testCase.Expected), + ) + }) + } + + for _, testCase := range testCases.InvalidCases { + testCase := testCase + + testName := fmt.Sprintf("invalid_%v", + strings.ToLower(testCase.Comment)) + t.Run(testName, func(t *testing.T) { + // For each test, we'll extract the set of input keys + // as well as the tweaks since this set of cases also + // exercises error cases related to the set of tweaks. + inputKeys, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + + // In this set of test cases, we should only get this + // for the very first vector. + if err != nil { + switch testCase.Comment { + case "Invalid public key": + require.ErrorIs( + t, err, + secp.ErrPubKeyNotOnCurve, + ) + + case "Public key exceeds field size": + require.ErrorIs( + t, err, secp.ErrPubKeyXTooBig, + ) + + case "First byte of public key is not 2 or 3": + require.ErrorIs( + t, err, + secp.ErrPubKeyInvalidFormat, + ) + + default: + t.Fatalf("uncaught err: %v", err) + } + + return + } + + var tweaks []KeyTweakDesc + if len(testCase.TweakIndices) != 0 { + tweaks = tweaksFromIndices( + t, testCase.TweakIndices, testCases.Tweaks, + testCase.IsXOnly, + ) + } + + uniqueKeyIndex := secondUniqueKeyIndex(inputKeys, false) + opts := []KeyAggOption{ + WithUniqueKeyIndex(uniqueKeyIndex), + } + + if len(tweaks) != 0 { + opts = append(opts, WithKeyTweaks(tweaks...)) + } + + _, _, _, err = AggregateKeys( + inputKeys, false, opts..., + ) + require.Error(t, err) + + switch testCase.Comment { + case "Tweak is out of range": + require.ErrorIs(t, err, ErrTweakedKeyOverflows) + + case "Intermediate tweaking result is point at infinity": + + require.ErrorIs(t, err, ErrTweakedKeyIsInfinity) + + default: + t.Fatalf("uncaught err: %v", err) + } + }) + } +} + +type keyTweakInvalidTest struct { + Indices []int `json:"key_indices"` + + NonceIndices []int `json:"nonce_indices"` + + TweakIndices []int `json:"tweak_indices"` + + IsXOnly []bool `json:"is_only"` + + SignerIndex int `json:"signer_index"` + + Comment string `json:"comment"` +} + +type keyTweakValidTest struct { + Indices []int `json:"key_indices"` + + NonceIndices []int `json:"nonce_indices"` + + TweakIndices []int `json:"tweak_indices"` + + IsXOnly []bool `json:"is_xonly"` + + SignerIndex int `json:"signer_index"` + + Expected string `json:"expected"` + + Comment string `json:"comment"` +} + +type keyTweakVector struct { + PrivKey string `json:"sk"` + + PubKeys []string `json:"pubkeys"` + + PrivNonce string `json:"secnonce"` + + PubNonces []string `json:"pnonces"` + + AggNnoce string `json:"aggnonce"` + + Tweaks []string `json:"tweaks"` + + Msg string `json:"msg"` + + ValidCases []keyTweakValidTest `json:"valid_test_cases"` + + InvalidCases []keyTweakInvalidTest `json:"error_test_cases"` +} + +func pubNoncesFromIndices(t *testing.T, nonceIndices []int, pubNonces []string) [][PubNonceSize]byte { + + nonces := make([][PubNonceSize]byte, len(nonceIndices)) + + for i, idx := range nonceIndices { + var pubNonce [PubNonceSize]byte + copy(pubNonce[:], mustParseHex(pubNonces[idx])) + + nonces[i] = pubNonce + } + + return nonces +} + +// TestMuSig2TweakTestVectors tests that we properly handle the various edge +// cases related to tweaking public keys. +func TestMuSig2TweakTestVectors(t *testing.T) { + t.Parallel() + + testVectorPath := path.Join( + testVectorBaseDir, keyTweakTestVectorFileName, + ) + testVectorBytes, err := os.ReadFile(testVectorPath) + require.NoError(t, err) + + var testCases keyTweakVector + require.NoError(t, json.Unmarshal(testVectorBytes, &testCases)) + + privKey, _ := btcec.PrivKeyFromBytes(mustParseHex(testCases.PrivKey)) + + var msg [32]byte + copy(msg[:], mustParseHex(testCases.Msg)) + + var secNonce [SecNonceSize]byte + copy(secNonce[:], mustParseHex(testCases.PrivNonce)) + + for _, testCase := range testCases.ValidCases { + testCase := testCase + + testName := fmt.Sprintf("valid_%v", + strings.ToLower(testCase.Comment)) + t.Run(testName, func(t *testing.T) { + pubKeys, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + require.NoError(t, err) + + var tweaks []KeyTweakDesc + if len(testCase.TweakIndices) != 0 { + tweaks = tweaksFromIndices( + t, testCase.TweakIndices, + testCases.Tweaks, testCase.IsXOnly, + ) + } + + pubNonces := pubNoncesFromIndices( + t, testCase.NonceIndices, testCases.PubNonces, + ) + + combinedNonce, err := AggregateNonces(pubNonces) + require.NoError(t, err) + + var opts []SignOption + if len(tweaks) != 0 { + opts = append(opts, WithTweaks(tweaks...)) + } + + partialSig, err := Sign( + secNonce, privKey, combinedNonce, pubKeys, + msg, opts..., + ) + + var partialSigBytes [32]byte + partialSig.S.PutBytesUnchecked(partialSigBytes[:]) + + require.Equal( + t, hex.EncodeToString(partialSigBytes[:]), + hex.EncodeToString(mustParseHex(testCase.Expected)), + ) + + }) + } +} diff --git a/btcec/schnorr/musig2/musig2_test.go b/btcec/schnorr/musig2/musig2_test.go new file mode 100644 index 0000000000..6842e911d9 --- /dev/null +++ b/btcec/schnorr/musig2/musig2_test.go @@ -0,0 +1,446 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "crypto/sha256" + "encoding/hex" + "errors" + "fmt" + "sync" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" +) + +const ( + testVectorBaseDir = "data" +) + +func mustParseHex(str string) []byte { + b, err := hex.DecodeString(str) + if err != nil { + panic(fmt.Errorf("unable to parse hex: %v", err)) + } + + return b +} + +type signer struct { + privKey *btcec.PrivateKey + pubKey *btcec.PublicKey + + nonces *Nonces + + partialSig *PartialSignature +} + +type signerSet []signer + +func (s signerSet) keys() []*btcec.PublicKey { + keys := make([]*btcec.PublicKey, len(s)) + for i := 0; i < len(s); i++ { + keys[i] = s[i].pubKey + } + + return keys +} + +func (s signerSet) partialSigs() []*PartialSignature { + sigs := make([]*PartialSignature, len(s)) + for i := 0; i < len(s); i++ { + sigs[i] = s[i].partialSig + } + + return sigs +} + +func (s signerSet) pubNonces() [][PubNonceSize]byte { + nonces := make([][PubNonceSize]byte, len(s)) + for i := 0; i < len(s); i++ { + nonces[i] = s[i].nonces.PubNonce + } + + return nonces +} + +func (s signerSet) combinedKey() *btcec.PublicKey { + uniqueKeyIndex := secondUniqueKeyIndex(s.keys(), false) + key, _, _, _ := AggregateKeys( + s.keys(), false, WithUniqueKeyIndex(uniqueKeyIndex), + ) + return key.FinalKey +} + +// testMultiPartySign executes a multi-party signing context w/ 100 signers. +func testMultiPartySign(t *testing.T, taprootTweak []byte, + tweaks ...KeyTweakDesc) { + + const numSigners = 100 + + // First generate the set of signers along with their public keys. + signerKeys := make([]*btcec.PrivateKey, numSigners) + signSet := make([]*btcec.PublicKey, numSigners) + for i := 0; i < numSigners; i++ { + privKey, err := btcec.NewPrivateKey() + if err != nil { + t.Fatalf("unable to gen priv key: %v", err) + } + + pubKey := privKey.PubKey() + + signerKeys[i] = privKey + signSet[i] = pubKey + } + + var combinedKey *btcec.PublicKey + + var ctxOpts []ContextOption + switch { + case len(taprootTweak) == 0: + ctxOpts = append(ctxOpts, WithBip86TweakCtx()) + case taprootTweak != nil: + ctxOpts = append(ctxOpts, WithTaprootTweakCtx(taprootTweak)) + case len(tweaks) != 0: + ctxOpts = append(ctxOpts, WithTweakedContext(tweaks...)) + } + + ctxOpts = append(ctxOpts, WithKnownSigners(signSet)) + + // Now that we have all the signers, we'll make a new context, then + // generate a new session for each of them(which handles nonce + // generation). + signers := make([]*Session, numSigners) + for i, signerKey := range signerKeys { + signCtx, err := NewContext( + signerKey, false, ctxOpts..., + ) + if err != nil { + t.Fatalf("unable to generate context: %v", err) + } + + if combinedKey == nil { + combinedKey, err = signCtx.CombinedKey() + if err != nil { + t.Fatalf("combined key not available: %v", err) + } + } + + session, err := signCtx.NewSession() + if err != nil { + t.Fatalf("unable to generate new session: %v", err) + } + signers[i] = session + } + + // Next, in the pre-signing phase, we'll send all the nonces to each + // signer. + var wg sync.WaitGroup + for i, signCtx := range signers { + signCtx := signCtx + + wg.Add(1) + go func(idx int, signer *Session) { + defer wg.Done() + + for j, otherCtx := range signers { + if idx == j { + continue + } + + nonce := otherCtx.PublicNonce() + haveAll, err := signer.RegisterPubNonce(nonce) + if err != nil { + t.Fatalf("unable to add public nonce") + } + + if j == len(signers)-1 && !haveAll { + t.Fatalf("all public nonces should have been detected") + } + } + }(i, signCtx) + } + + wg.Wait() + + msg := sha256.Sum256([]byte("let's get taprooty")) + + // In the final step, we'll use the first signer as our combiner, and + // generate a signature for each signer, and then accumulate that with + // the combiner. + combiner := signers[0] + for i := range signers { + signer := signers[i] + partialSig, err := signer.Sign(msg) + if err != nil { + t.Fatalf("unable to generate partial sig: %v", err) + } + + // We don't need to combine the signature for the very first + // signer, as it already has that partial signature. + if i != 0 { + haveAll, err := combiner.CombineSig(partialSig) + if err != nil { + t.Fatalf("unable to combine sigs: %v", err) + } + + if i == len(signers)-1 && !haveAll { + t.Fatalf("final sig wasn't reconstructed") + } + } + } + + // Finally we'll combined all the nonces, and ensure that it validates + // as a single schnorr signature. + finalSig := combiner.FinalSig() + if !finalSig.Verify(msg[:], combinedKey) { + t.Fatalf("final sig is invalid!") + } + + // Verify that if we try to sign again with any of the existing + // signers, then we'll get an error as the nonces have already been + // used. + for _, signer := range signers { + _, err := signer.Sign(msg) + if err != ErrSigningContextReuse { + t.Fatalf("expected to get signing context reuse") + } + } +} + +// TestMuSigMultiParty tests that for a given set of 100 signers, we're able to +// properly generate valid sub signatures, which ultimately can be combined +// into a single valid signature. +func TestMuSigMultiParty(t *testing.T) { + t.Parallel() + + testTweak := [32]byte{ + 0xE8, 0xF7, 0x91, 0xFF, 0x92, 0x25, 0xA2, 0xAF, + 0x01, 0x02, 0xAF, 0xFF, 0x4A, 0x9A, 0x72, 0x3D, + 0x96, 0x12, 0xA6, 0x82, 0xA2, 0x5E, 0xBE, 0x79, + 0x80, 0x2B, 0x26, 0x3C, 0xDF, 0xCD, 0x83, 0xBB, + } + + t.Run("no_tweak", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, nil) + }) + + t.Run("tweaked", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, nil, KeyTweakDesc{ + Tweak: testTweak, + }) + }) + + t.Run("tweaked_x_only", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, nil, KeyTweakDesc{ + Tweak: testTweak, + IsXOnly: true, + }) + }) + + t.Run("taproot_tweaked_x_only", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, testTweak[:]) + }) + + t.Run("taproot_bip_86", func(t *testing.T) { + t.Parallel() + + testMultiPartySign(t, []byte{}) + }) +} + +// TestMuSigEarlyNonce tests that for protocols where nonces need to be +// exchagned before all signers are known, the context API works as expected. +func TestMuSigEarlyNonce(t *testing.T) { + t.Parallel() + + privKey1, err := btcec.NewPrivateKey() + if err != nil { + t.Fatalf("unable to gen priv key: %v", err) + } + privKey2, err := btcec.NewPrivateKey() + if err != nil { + t.Fatalf("unable to gen priv key: %v", err) + } + + // If we try to make a context, with just the private key and sorting + // value, we should get an error. + _, err = NewContext(privKey1, true) + if !errors.Is(err, ErrSignersNotSpecified) { + t.Fatalf("unexpected ctx error: %v", err) + } + + numSigners := 2 + + ctx1, err := NewContext( + privKey1, true, WithNumSigners(numSigners), WithEarlyNonceGen(), + ) + if err != nil { + t.Fatalf("unable to make ctx: %v", err) + } + pubKey1 := ctx1.PubKey() + + ctx2, err := NewContext( + privKey2, true, WithNumSigners(numSigners), WithEarlyNonceGen(), + ) + if err != nil { + t.Fatalf("unable to make ctx: %v", err) + } + pubKey2 := ctx2.PubKey() + + // At this point, the combined key shouldn't be available for both + // signers, since we only know of the sole signers. + if _, err := ctx1.CombinedKey(); !errors.Is(err, ErrNotEnoughSigners) { + t.Fatalf("unepxected error: %v", err) + } + if _, err := ctx2.CombinedKey(); !errors.Is(err, ErrNotEnoughSigners) { + t.Fatalf("unepxected error: %v", err) + } + + // The early nonces _should_ be available at this point. + nonce1, err := ctx1.EarlySessionNonce() + if err != nil { + t.Fatalf("session nonce not available: %v", err) + } + nonce2, err := ctx2.EarlySessionNonce() + if err != nil { + t.Fatalf("session nonce not available: %v", err) + } + + // The number of registered signers should still be 1 for both parties. + if ctx1.NumRegisteredSigners() != 1 { + t.Fatalf("expected 1 signer, instead have: %v", + ctx1.NumRegisteredSigners()) + } + if ctx2.NumRegisteredSigners() != 1 { + t.Fatalf("expected 1 signer, instead have: %v", + ctx2.NumRegisteredSigners()) + } + + // If we try to make a session, we should get an error since we dn't + // have all the signers yet. + if _, err := ctx1.NewSession(); !errors.Is(err, ErrNotEnoughSigners) { + t.Fatalf("unexpected session key error: %v", err) + } + + // The combined key should also be unavailable as well. + if _, err := ctx1.CombinedKey(); !errors.Is(err, ErrNotEnoughSigners) { + t.Fatalf("unexpected combined key error: %v", err) + } + + // We'll now register the other signer for both parties. + done, err := ctx1.RegisterSigner(&pubKey2) + if err != nil { + t.Fatalf("unable to register signer: %v", err) + } + if !done { + t.Fatalf("signer 1 doesn't have all keys") + } + done, err = ctx2.RegisterSigner(&pubKey1) + if err != nil { + t.Fatalf("unable to register signer: %v", err) + } + if !done { + t.Fatalf("signer 2 doesn't have all keys") + } + + // If we try to register the signer again, we should get an error. + _, err = ctx2.RegisterSigner(&pubKey1) + if !errors.Is(err, ErrAlreadyHaveAllSigners) { + t.Fatalf("should not be able to register too many signers") + } + + // We should be able to create the session at this point. + session1, err := ctx1.NewSession() + if err != nil { + t.Fatalf("unable to create new session: %v", err) + } + session2, err := ctx2.NewSession() + if err != nil { + t.Fatalf("unable to create new session: %v", err) + } + + msg := sha256.Sum256([]byte("let's get taprooty, LN style")) + + // If we try to sign before we have the combined nonce, we shoudl get + // an error. + _, err = session1.Sign(msg) + if !errors.Is(err, ErrCombinedNonceUnavailable) { + t.Fatalf("unable to gen sig: %v", err) + } + + // Now we can exchange nonces to continue with the rest of the signing + // process as normal. + done, err = session1.RegisterPubNonce(nonce2.PubNonce) + if err != nil { + t.Fatalf("unable to register nonce: %v", err) + } + if !done { + t.Fatalf("signer 1 doesn't have all nonces") + } + done, err = session2.RegisterPubNonce(nonce1.PubNonce) + if err != nil { + t.Fatalf("unable to register nonce: %v", err) + } + if !done { + t.Fatalf("signer 2 doesn't have all nonces") + } + + // Registering the nonce again should error out. + _, err = session2.RegisterPubNonce(nonce1.PubNonce) + if !errors.Is(err, ErrAlredyHaveAllNonces) { + t.Fatalf("shouldn't be able to register nonces twice") + } + + // Sign the message and combine the two partial sigs into one. + _, err = session1.Sign(msg) + if err != nil { + t.Fatalf("unable to gen sig: %v", err) + } + sig2, err := session2.Sign(msg) + if err != nil { + t.Fatalf("unable to gen sig: %v", err) + } + done, err = session1.CombineSig(sig2) + if err != nil { + t.Fatalf("unable to combine sig: %v", err) + } + if !done { + t.Fatalf("all sigs should be known now: %v", err) + } + + // If we try to combine another sig, then we should get an error. + _, err = session1.CombineSig(sig2) + if !errors.Is(err, ErrAlredyHaveAllSigs) { + t.Fatalf("shouldn't be able to combine again") + } + + // Finally, verify that the final signature is valid. + combinedKey, err := ctx1.CombinedKey() + if err != nil { + t.Fatalf("unexpected combined key error: %v", err) + } + finalSig := session1.FinalSig() + if !finalSig.Verify(msg[:], combinedKey) { + t.Fatalf("final sig is invalid!") + } +} + +type memsetRandReader struct { + i int +} + +func (mr *memsetRandReader) Read(buf []byte) (n int, err error) { + for i := range buf { + buf[i] = byte(mr.i) + } + return len(buf), nil +} diff --git a/btcec/schnorr/musig2/nonces.go b/btcec/schnorr/musig2/nonces.go new file mode 100644 index 0000000000..4b2509a754 --- /dev/null +++ b/btcec/schnorr/musig2/nonces.go @@ -0,0 +1,417 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "bytes" + "crypto/rand" + "encoding/binary" + "io" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +const ( + // PubNonceSize is the size of the public nonces. Each public nonce is + // serialized the full compressed encoding, which uses 32 bytes for each + // nonce. + PubNonceSize = 66 + + // SecNonceSize is the size of the secret nonces for musig2. The secret + // nonces are the corresponding private keys to the public nonce points. + SecNonceSize = 64 +) + +var ( + // NonceAuxTag is the tag used to optionally mix in the secret key with + // the set of aux randomness. + NonceAuxTag = []byte("MuSig/aux") + + // NonceGenTag is used to generate the value (from a set of required an + // optional field) that will be used as the part of the secret nonce. + NonceGenTag = []byte("MuSig/nonce") + + byteOrder = binary.BigEndian +) + +// zeroSecNonce is a secret nonce that's all zeroes. This is used to check that +// we're not attempting to re-use a nonce, and also protect callers from it. +var zeroSecNonce [SecNonceSize]byte + +// Nonces holds the public and secret nonces required for musig2. +// +// TODO(roasbeef): methods on this to help w/ parsing, etc? +type Nonces struct { + // PubNonce holds the two 33-byte compressed encoded points that serve + // as the public set of nonces. + PubNonce [PubNonceSize]byte + + // SecNonce holds the two 32-byte scalar values that are the private + // keys to the two public nonces. + SecNonce [SecNonceSize]byte +} + +// secNonceToPubNonce takes our two secrete nonces, and produces their two +// corresponding EC points, serialized in compressed format. +func secNonceToPubNonce(secNonce [SecNonceSize]byte) [PubNonceSize]byte { + var k1Mod, k2Mod btcec.ModNScalar + k1Mod.SetByteSlice(secNonce[:btcec.PrivKeyBytesLen]) + k2Mod.SetByteSlice(secNonce[btcec.PrivKeyBytesLen:]) + + var r1, r2 btcec.JacobianPoint + btcec.ScalarBaseMultNonConst(&k1Mod, &r1) + btcec.ScalarBaseMultNonConst(&k2Mod, &r2) + + // Next, we'll convert the key in jacobian format to a normal public + // key expressed in affine coordinates. + r1.ToAffine() + r2.ToAffine() + r1Pub := btcec.NewPublicKey(&r1.X, &r1.Y) + r2Pub := btcec.NewPublicKey(&r2.X, &r2.Y) + + var pubNonce [PubNonceSize]byte + + // The public nonces are serialized as: R1 || R2, where both keys are + // serialized in compressed format. + copy(pubNonce[:], r1Pub.SerializeCompressed()) + copy( + pubNonce[btcec.PubKeyBytesLenCompressed:], + r2Pub.SerializeCompressed(), + ) + + return pubNonce +} + +// NonceGenOption is a function option that allows callers to modify how nonce +// generation happens. +type NonceGenOption func(*nonceGenOpts) + +// nonceGenOpts is the set of options that control how nonce generation +// happens. +type nonceGenOpts struct { + // randReader is what we'll use to generate a set of random bytes. If + // unspecified, then the normal crypto/rand rand.Read method will be + // used in place. + randReader io.Reader + + // secretKey is an optional argument that's used to further augment the + // generated nonce by xor'ing it with this secret key. + secretKey []byte + + // combinedKey is an optional argument that if specified, will be + // combined along with the nonce generation. + combinedKey []byte + + // msg is an optional argument that will be mixed into the nonce + // derivation algorithm. + msg []byte + + // auxInput is an optional argument that will be mixed into the nonce + // derivation algorithm. + auxInput []byte +} + +// cryptoRandAdapter is an adapter struct that allows us to pass in the package +// level Read function from crypto/rand into a context that accepts an +// io.Reader. +type cryptoRandAdapter struct { +} + +// Read implements the io.Reader interface for the crypto/rand package. By +// default, we always use the crypto/rand reader, but the caller is able to +// specify their own generation, which can be useful for deterministic tests. +func (c *cryptoRandAdapter) Read(p []byte) (n int, err error) { + return rand.Read(p) +} + +// defaultNonceGenOpts returns the default set of nonce generation options. +func defaultNonceGenOpts() *nonceGenOpts { + return &nonceGenOpts{ + randReader: &cryptoRandAdapter{}, + } +} + +// WithCustomRand allows a caller to use a custom random number generator in +// place for crypto/rand. This should only really be used to generate +// determinstic tests. +func WithCustomRand(r io.Reader) NonceGenOption { + return func(o *nonceGenOpts) { + o.randReader = r + } +} + +// WithNonceSecretKeyAux allows a caller to optionally specify a secret key +// that should be used to augment the randomness used to generate the nonces. +func WithNonceSecretKeyAux(secKey *btcec.PrivateKey) NonceGenOption { + return func(o *nonceGenOpts) { + o.secretKey = secKey.Serialize() + } +} + +// WithNonceCombinedKeyAux allows a caller to optionally specify the combined +// key used in this signing session to further augment the randomness used to +// generate nonces. +func WithNonceCombinedKeyAux(combinedKey *btcec.PublicKey) NonceGenOption { + return func(o *nonceGenOpts) { + o.combinedKey = schnorr.SerializePubKey(combinedKey) + } +} + +// WithNonceMessageAux allows a caller to optionally specify a message to be +// mixed into the randomness generated to create the nonce. +func WithNonceMessageAux(msg [32]byte) NonceGenOption { + return func(o *nonceGenOpts) { + o.msg = msg[:] + } +} + +// WithNonceAuxInput is a set of auxiliary randomness, similar to BIP 340 that +// can be used to further augment the nonce generation process. +func WithNonceAuxInput(aux []byte) NonceGenOption { + return func(o *nonceGenOpts) { + o.auxInput = aux + } +} + +// withCustomOptions allows a caller to pass a complete set of custom +// nonceGenOpts, without needing to create custom and checked structs such as +// *btcec.PrivateKey. This is mainly used to match the testcases provided by +// the MuSig2 BIP. +func withCustomOptions(customOpts nonceGenOpts) NonceGenOption { + return func(o *nonceGenOpts) { + o.randReader = customOpts.randReader + o.secretKey = customOpts.secretKey + o.combinedKey = customOpts.combinedKey + o.auxInput = customOpts.auxInput + o.msg = customOpts.msg + } +} + +// lengthWriter is a function closure that allows a caller to control how the +// length prefix of a byte slice is written. +// +// TODO(roasbeef): use type params once we bump repo version +type lengthWriter func(w io.Writer, b []byte) error + +// uint8Writer is an implementation of lengthWriter that writes the length of +// the byte slice using 1 byte. +func uint8Writer(w io.Writer, b []byte) error { + return binary.Write(w, byteOrder, uint8(len(b))) +} + +// uint32Writer is an implementation of lengthWriter that writes the length of +// the byte slice using 4 bytes. +func uint32Writer(w io.Writer, b []byte) error { + return binary.Write(w, byteOrder, uint32(len(b))) +} + +// uint32Writer is an implementation of lengthWriter that writes the length of +// the byte slice using 8 bytes. +func uint64Writer(w io.Writer, b []byte) error { + return binary.Write(w, byteOrder, uint64(len(b))) +} + +// writeBytesPrefix is used to write out: len(b) || b, to the passed io.Writer. +// The lengthWriter function closure is used to allow the caller to specify the +// precise byte packing of the length. +func writeBytesPrefix(w io.Writer, b []byte, lenWriter lengthWriter) error { + // Write out the length of the byte first, followed by the set of bytes + // itself. + if err := lenWriter(w, b); err != nil { + return err + } + + if _, err := w.Write(b); err != nil { + return err + } + + return nil +} + +// genNonceAuxBytes writes out the full byte string used to derive a secret +// nonce based on some initial randomness as well as the series of optional +// fields. The byte string used for derivation is: +// - tagged_hash("MuSig/nonce", rand || len(aggpk) || aggpk || m_prefixed +// || len(in) || in || i). +// +// where i is the ith secret nonce being generated and m_prefixed is: +// - bytes(1, 0) if the message is blank +// - bytes(1, 1) || bytes(8, len(m)) || m if the message is present. +func genNonceAuxBytes(rand []byte, i int, + opts *nonceGenOpts) (*chainhash.Hash, error) { + + var w bytes.Buffer + + // First, write out the randomness generated in the prior step. + if _, err := w.Write(rand); err != nil { + return nil, err + } + + // Next, we'll write out: len(aggpk) || aggpk. + err := writeBytesPrefix(&w, opts.combinedKey, uint8Writer) + if err != nil { + return nil, err + } + + switch { + // If the message isn't present, then we'll just write out a single + // uint8 of a zero byte: m_prefixed = bytes(1, 0). + case opts.msg == nil: + if _, err := w.Write([]byte{0x00}); err != nil { + return nil, err + } + + // Otherwise, we'll write a single byte of 0x01 with a 1 byte length + // prefix, followed by the message itself with an 8 byte length prefix: + // m_prefixed = bytes(1, 1) || bytes(8, len(m)) || m. + case len(opts.msg) == 0: + fallthrough + default: + if _, err := w.Write([]byte{0x01}); err != nil { + return nil, err + } + + err = writeBytesPrefix(&w, opts.msg, uint64Writer) + if err != nil { + return nil, err + } + } + + // Finally we'll write out the auxiliary input. + err = writeBytesPrefix(&w, opts.auxInput, uint32Writer) + if err != nil { + return nil, err + } + + // Next we'll write out the interaction/index number which will + // uniquely generate two nonces given the rest of the possibly static + // parameters. + if err := binary.Write(&w, byteOrder, uint8(i)); err != nil { + return nil, err + } + + // With the message buffer complete, we'll now derive the tagged hash + // using our set of params. + return chainhash.TaggedHash(NonceGenTag, w.Bytes()), nil +} + +// GenNonces generates the secret nonces, as well as the public nonces which +// correspond to an EC point generated using the secret nonce as a private key. +func GenNonces(options ...NonceGenOption) (*Nonces, error) { + opts := defaultNonceGenOpts() + for _, opt := range options { + opt(opts) + } + + // First, we'll start out by generating 32 random bytes drawn from our + // CSPRNG. + var randBytes [32]byte + if _, err := opts.randReader.Read(randBytes[:]); err != nil { + return nil, err + } + + // If the options contain a secret key, we XOR it with with the tagged + // random bytes. + if len(opts.secretKey) == 32 { + taggedHash := chainhash.TaggedHash(NonceAuxTag, randBytes[:]) + + for i := 0; i < chainhash.HashSize; i++ { + randBytes[i] = opts.secretKey[i] ^ taggedHash[i] + } + } + + // Using our randomness and the set of optional params, generate our + // two secret nonces: k1 and k2. + k1, err := genNonceAuxBytes(randBytes[:], 0, opts) + if err != nil { + return nil, err + } + k2, err := genNonceAuxBytes(randBytes[:], 1, opts) + if err != nil { + return nil, err + } + + var k1Mod, k2Mod btcec.ModNScalar + k1Mod.SetBytes((*[32]byte)(k1)) + k2Mod.SetBytes((*[32]byte)(k2)) + + // The secret nonces are serialized as the concatenation of the two 32 + // byte secret nonce values. + var nonces Nonces + k1Mod.PutBytesUnchecked(nonces.SecNonce[:]) + k2Mod.PutBytesUnchecked(nonces.SecNonce[btcec.PrivKeyBytesLen:]) + + // Next, we'll generate R_1 = k_1*G and R_2 = k_2*G. Along the way we + // need to map our nonce values into mod n scalars so we can work with + // the btcec API. + nonces.PubNonce = secNonceToPubNonce(nonces.SecNonce) + + return &nonces, nil +} + +// AggregateNonces aggregates the set of a pair of public nonces for each party +// into a single aggregated nonces to be used for multi-signing. +func AggregateNonces(pubNonces [][PubNonceSize]byte) ([PubNonceSize]byte, error) { + // combineNonces is a helper function that aggregates (adds) up a + // series of nonces encoded in compressed format. It uses a slicing + // function to extra 33 bytes at a time from the packed 2x public + // nonces. + type nonceSlicer func([PubNonceSize]byte) []byte + combineNonces := func(slicer nonceSlicer) (btcec.JacobianPoint, error) { + // Convert the set of nonces into jacobian coordinates we can + // use to accumulate them all into each other. + pubNonceJs := make([]*btcec.JacobianPoint, len(pubNonces)) + for i, pubNonceBytes := range pubNonces { + // Using the slicer, extract just the bytes we need to + // decode. + var nonceJ btcec.JacobianPoint + + nonceJ, err := btcec.ParseJacobian(slicer(pubNonceBytes)) + if err != nil { + return btcec.JacobianPoint{}, err + } + + pubNonceJs[i] = &nonceJ + } + + // Now that we have the set of complete nonces, we'll aggregate + // them: R = R_i + R_i+1 + ... + R_i+n. + var aggregateNonce btcec.JacobianPoint + for _, pubNonceJ := range pubNonceJs { + btcec.AddNonConst( + &aggregateNonce, pubNonceJ, &aggregateNonce, + ) + } + + aggregateNonce.ToAffine() + return aggregateNonce, nil + } + + // The final nonce public nonce is actually two nonces, one that + // aggregate the first nonce of all the parties, and the other that + // aggregates the second nonce of all the parties. + var finalNonce [PubNonceSize]byte + combinedNonce1, err := combineNonces(func(n [PubNonceSize]byte) []byte { + return n[:btcec.PubKeyBytesLenCompressed] + }) + if err != nil { + return finalNonce, err + } + + combinedNonce2, err := combineNonces(func(n [PubNonceSize]byte) []byte { + return n[btcec.PubKeyBytesLenCompressed:] + }) + if err != nil { + return finalNonce, err + } + + copy(finalNonce[:], btcec.JacobianToByteSlice(combinedNonce1)) + copy( + finalNonce[btcec.PubKeyBytesLenCompressed:], + btcec.JacobianToByteSlice(combinedNonce2), + ) + + return finalNonce, nil +} diff --git a/btcec/schnorr/musig2/nonces_test.go b/btcec/schnorr/musig2/nonces_test.go new file mode 100644 index 0000000000..bdb76dbd35 --- /dev/null +++ b/btcec/schnorr/musig2/nonces_test.go @@ -0,0 +1,164 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "fmt" + "os" + "path" + "testing" + + "github.com/stretchr/testify/require" +) + +type nonceGenTestCase struct { + Rand string `json:"rand_"` + Sk string `json:"sk"` + AggPk string `json:"aggpk"` + Msg *string `json:"msg"` + ExtraIn string `json:"extra_in"` + + Expected string `json:"expected"` +} + +type nonceGenTestCases struct { + TestCases []nonceGenTestCase `json:"test_cases"` +} + +const ( + nonceGenTestVectorsFileName = "nonce_gen_vectors.json" + nonceAggTestVectorsFileName = "nonce_agg_vectors.json" +) + +// TestMusig2NonceGenTestVectors tests the nonce generation function with the +// testvectors defined in the Musig2 BIP. +func TestMusig2NonceGenTestVectors(t *testing.T) { + t.Parallel() + + testVectorPath := path.Join( + testVectorBaseDir, nonceGenTestVectorsFileName, + ) + testVectorBytes, err := os.ReadFile(testVectorPath) + require.NoError(t, err) + + var testCases nonceGenTestCases + require.NoError(t, json.Unmarshal(testVectorBytes, &testCases)) + + for i, testCase := range testCases.TestCases { + testCase := testCase + + customOpts := nonceGenOpts{ + randReader: &memsetRandReader{i: 0}, + secretKey: mustParseHex(testCase.Sk), + combinedKey: mustParseHex(testCase.AggPk), + auxInput: mustParseHex(testCase.ExtraIn), + } + if testCase.Msg != nil { + customOpts.msg = mustParseHex(*testCase.Msg) + } + + t.Run(fmt.Sprintf("test_case=%v", i), func(t *testing.T) { + nonce, err := GenNonces(withCustomOptions(customOpts)) + if err != nil { + t.Fatalf("err gen nonce aux bytes %v", err) + } + + expectedBytes, _ := hex.DecodeString(testCase.Expected) + if !bytes.Equal(nonce.SecNonce[:], expectedBytes) { + + t.Fatalf("nonces don't match: expected %x, got %x", + expectedBytes, nonce.SecNonce[:]) + } + }) + } +} + +type nonceAggError struct { + Type string `json:"type"` + Signer int `json:"signer"` + Contrib string `json:"contrib"` +} + +type nonceAggValidCase struct { + Indices []int `json:"pnonce_indices"` + + Expected string `json:"expected"` + + Comment string `json:"comment"` +} + +type nonceAggInvalidCase struct { + Indices []int `json:"pnonce_indices"` + + Error nonceAggError `json:"error"` + + Comment string `json:"comment"` + + ExpectedErr string `json:"btcec_err"` +} + +type nonceAggTestCases struct { + Nonces []string `json:"pnonces"` + + ValidCases []nonceAggValidCase `json:"valid_test_cases"` + + InvalidCases []nonceAggInvalidCase `json:"error_test_cases"` +} + +// TestMusig2AggregateNoncesTestVectors tests that the musig2 implementation +// passes the nonce aggregration test vectors for musig2 1.0. +func TestMusig2AggregateNoncesTestVectors(t *testing.T) { + t.Parallel() + + testVectorPath := path.Join( + testVectorBaseDir, nonceAggTestVectorsFileName, + ) + testVectorBytes, err := os.ReadFile(testVectorPath) + require.NoError(t, err) + + var testCases nonceAggTestCases + require.NoError(t, json.Unmarshal(testVectorBytes, &testCases)) + + nonces := make([][PubNonceSize]byte, len(testCases.Nonces)) + for i := range testCases.Nonces { + var nonce [PubNonceSize]byte + copy(nonce[:], mustParseHex(testCases.Nonces[i])) + + nonces[i] = nonce + } + + for i, testCase := range testCases.ValidCases { + testCase := testCase + + var testNonces [][PubNonceSize]byte + for _, idx := range testCase.Indices { + testNonces = append(testNonces, nonces[idx]) + } + + t.Run(fmt.Sprintf("valid_case=%v", i), func(t *testing.T) { + aggregatedNonce, err := AggregateNonces(testNonces) + require.NoError(t, err) + + var expectedNonce [PubNonceSize]byte + copy(expectedNonce[:], mustParseHex(testCase.Expected)) + + require.Equal(t, aggregatedNonce[:], expectedNonce[:]) + }) + } + + for i, testCase := range testCases.InvalidCases { + var testNonces [][PubNonceSize]byte + for _, idx := range testCase.Indices { + testNonces = append(testNonces, nonces[idx]) + } + + t.Run(fmt.Sprintf("invalid_case=%v", i), func(t *testing.T) { + _, err := AggregateNonces(testNonces) + require.True(t, err != nil) + require.Equal(t, testCase.ExpectedErr, err.Error()) + }) + } +} diff --git a/btcec/schnorr/musig2/sign.go b/btcec/schnorr/musig2/sign.go new file mode 100644 index 0000000000..2028571137 --- /dev/null +++ b/btcec/schnorr/musig2/sign.go @@ -0,0 +1,710 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "bytes" + "fmt" + "io" + + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +var ( + // NonceBlindTag is that tag used to construct the value b, which + // blinds the second public nonce of each party. + NonceBlindTag = []byte("MuSig/noncecoef") + + // ChallengeHashTag is the tag used to construct the challenge hash + ChallengeHashTag = []byte("BIP0340/challenge") + + // ErrNoncePointAtInfinity is returned if during signing, the fully + // combined public nonce is the point at infinity. + ErrNoncePointAtInfinity = fmt.Errorf("signing nonce is the infinity " + + "point") + + // ErrPrivKeyZero is returned when the private key for signing is + // actually zero. + ErrPrivKeyZero = fmt.Errorf("priv key is zero") + + // ErrPartialSigInvalid is returned when a partial is found to be + // invalid. + ErrPartialSigInvalid = fmt.Errorf("partial signature is invalid") + + // ErrSecretNonceZero is returned when a secret nonce is passed in a + // zero. + ErrSecretNonceZero = fmt.Errorf("secret nonce is blank") +) + +// infinityPoint is the jacobian representation of the point at infinity. +var infinityPoint btcec.JacobianPoint + +// PartialSignature reprints a partial (s-only) musig2 multi-signature. This +// isn't a valid schnorr signature by itself, as it needs to be aggregated +// along with the other partial signatures to be completed. +type PartialSignature struct { + S *btcec.ModNScalar + + R *btcec.PublicKey +} + +// NewPartialSignature returns a new instances of the partial sig struct. +func NewPartialSignature(s *btcec.ModNScalar, + r *btcec.PublicKey) PartialSignature { + + return PartialSignature{ + S: s, + R: r, + } +} + +// Encode writes a serialized version of the partial signature to the passed +// io.Writer +func (p *PartialSignature) Encode(w io.Writer) error { + var sBytes [32]byte + p.S.PutBytes(&sBytes) + + if _, err := w.Write(sBytes[:]); err != nil { + return err + } + + return nil +} + +// Decode attempts to parse a serialized PartialSignature stored in the passed +// io reader. +func (p *PartialSignature) Decode(r io.Reader) error { + p.S = new(btcec.ModNScalar) + + var sBytes [32]byte + if _, err := io.ReadFull(r, sBytes[:]); err != nil { + return nil + } + + overflows := p.S.SetBytes(&sBytes) + if overflows == 1 { + return ErrPartialSigInvalid + } + + return nil +} + +// SignOption is a functional option argument that allows callers to modify the +// way we generate musig2 schnorr signatures. +type SignOption func(*signOptions) + +// signOptions houses the set of functional options that can be used to modify +// the method used to generate the musig2 partial signature. +type signOptions struct { + // fastSign determines if we'll skip the check at the end of the + // routine where we attempt to verify the produced signature. + fastSign bool + + // sortKeys determines if the set of keys should be sorted before doing + // key aggregation. + sortKeys bool + + // tweaks specifies a series of tweaks to be applied to the aggregated + // public key, which also partially carries over into the signing + // process. + tweaks []KeyTweakDesc + + // taprootTweak specifies a taproot specific tweak. of the tweaks + // specified above. Normally we'd just apply the raw 32 byte tweak, but + // for taproot, we first need to compute the aggregated key before + // tweaking, and then use it as the internal key. This is required as + // the taproot tweak also commits to the public key, which in this case + // is the aggregated key before the tweak. + taprootTweak []byte + + // bip86Tweak specifies that the taproot tweak should be done in a BIP + // 86 style, where we don't expect an actual tweak and instead just + // commit to the public key itself. + bip86Tweak bool +} + +// defaultSignOptions returns the default set of signing operations. +func defaultSignOptions() *signOptions { + return &signOptions{} +} + +// WithFastSign forces signing to skip the extra verification step at the end. +// Performance sensitive applications may opt to use this option to speed up +// the signing operation. +func WithFastSign() SignOption { + return func(o *signOptions) { + o.fastSign = true + } +} + +// WithSortedKeys determines if the set of signing public keys are to be sorted +// or not before doing key aggregation. +func WithSortedKeys() SignOption { + return func(o *signOptions) { + o.sortKeys = true + } +} + +// WithTweaks determines if the aggregated public key used should apply a +// series of tweaks before key aggregation. +func WithTweaks(tweaks ...KeyTweakDesc) SignOption { + return func(o *signOptions) { + o.tweaks = tweaks + } +} + +// WithTaprootSignTweak allows a caller to specify a tweak that should be used +// in a bip 340 manner when signing. This differs from WithTweaks as the tweak +// will be assumed to always be x-only and the intermediate aggregate key +// before tweaking will be used to generate part of the tweak (as the taproot +// tweak also commits to the internal key). +// +// This option should be used in the taproot context to create a valid +// signature for the keypath spend for taproot, when the output key is actually +// committing to a script path, or some other data. +func WithTaprootSignTweak(scriptRoot []byte) SignOption { + return func(o *signOptions) { + o.taprootTweak = scriptRoot + } +} + +// WithBip86SignTweak allows a caller to specify a tweak that should be used in +// a bip 340 manner when signing, factoring in BIP 86 as well. This differs +// from WithTaprootSignTweak as no true script root will be committed to, +// instead we just commit to the internal key. +// +// This option should be used in the taproot context to create a valid +// signature for the keypath spend for taproot, when the output key was +// generated using BIP 86. +func WithBip86SignTweak() SignOption { + return func(o *signOptions) { + o.bip86Tweak = true + } +} + +// computeSigningNonce calculates the final nonce used for signing. This will +// be the R value used in the final signature. +func computeSigningNonce(combinedNonce [PubNonceSize]byte, + combinedKey *btcec.PublicKey, msg [32]byte) ( + *btcec.JacobianPoint, *btcec.ModNScalar, error) { + + // Next we'll compute the value b, that blinds our second public + // nonce: + // * b = h(tag=NonceBlindTag, combinedNonce || combinedKey || m). + var ( + nonceMsgBuf bytes.Buffer + nonceBlinder btcec.ModNScalar + ) + nonceMsgBuf.Write(combinedNonce[:]) + nonceMsgBuf.Write(schnorr.SerializePubKey(combinedKey)) + nonceMsgBuf.Write(msg[:]) + nonceBlindHash := chainhash.TaggedHash( + NonceBlindTag, nonceMsgBuf.Bytes(), + ) + nonceBlinder.SetByteSlice(nonceBlindHash[:]) + + // Next, we'll parse the public nonces into R1 and R2. + r1J, err := btcec.ParseJacobian( + combinedNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return nil, nil, err + } + r2J, err := btcec.ParseJacobian( + combinedNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return nil, nil, err + } + + // With our nonce blinding value, we'll now combine both the public + // nonces, using the blinding factor to tweak the second nonce: + // * R = R_1 + b*R_2 + var nonce btcec.JacobianPoint + btcec.ScalarMultNonConst(&nonceBlinder, &r2J, &r2J) + btcec.AddNonConst(&r1J, &r2J, &nonce) + + // If the combined nonce is the point at infinity, we'll use the + // generator point instead. + if nonce == infinityPoint { + G := btcec.Generator() + G.AsJacobian(&nonce) + } + + return &nonce, &nonceBlinder, nil +} + +// Sign generates a musig2 partial signature given the passed key set, secret +// nonce, public nonce, and private keys. This method returns an error if the +// generated nonces are either too large, or end up mapping to the point at +// infinity. +func Sign(secNonce [SecNonceSize]byte, privKey *btcec.PrivateKey, + combinedNonce [PubNonceSize]byte, pubKeys []*btcec.PublicKey, + msg [32]byte, signOpts ...SignOption) (*PartialSignature, error) { + + // First, parse the set of optional signing options. + opts := defaultSignOptions() + for _, option := range signOpts { + option(opts) + } + + // Compute the hash of all the keys here as we'll need it do aggregate + // the keys and also at the final step of signing. + keysHash := keyHashFingerprint(pubKeys, opts.sortKeys) + uniqueKeyIndex := secondUniqueKeyIndex(pubKeys, opts.sortKeys) + + keyAggOpts := []KeyAggOption{ + WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + } + switch { + case opts.bip86Tweak: + keyAggOpts = append( + keyAggOpts, WithBIP86KeyTweak(), + ) + case opts.taprootTweak != nil: + keyAggOpts = append( + keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), + ) + case len(opts.tweaks) != 0: + keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) + } + + // Next we'll construct the aggregated public key based on the set of + // signers. + combinedKey, parityAcc, _, err := AggregateKeys( + pubKeys, opts.sortKeys, keyAggOpts..., + ) + if err != nil { + return nil, err + } + + // We'll now combine both the public nonces, using the blinding factor + // to tweak the second nonce: + // * R = R_1 + b*R_2 + nonce, nonceBlinder, err := computeSigningNonce( + combinedNonce, combinedKey.FinalKey, msg, + ) + if err != nil { + return nil, err + } + + // Next we'll parse out our two secret nonces, which we'll be using in + // the core signing process below. + var k1, k2 btcec.ModNScalar + k1.SetByteSlice(secNonce[:btcec.PrivKeyBytesLen]) + k2.SetByteSlice(secNonce[btcec.PrivKeyBytesLen:]) + + if k1.IsZero() || k2.IsZero() { + return nil, ErrSecretNonceZero + } + + nonce.ToAffine() + + nonceKey := btcec.NewPublicKey(&nonce.X, &nonce.Y) + + // If the nonce R has an odd y coordinate, then we'll negate both our + // secret nonces. + if nonce.Y.IsOdd() { + k1.Negate() + k2.Negate() + } + + privKeyScalar := privKey.Key + if privKeyScalar.IsZero() { + return nil, ErrPrivKeyZero + } + + pubKey := privKey.PubKey() + combinedKeyYIsOdd := func() bool { + combinedKeyBytes := combinedKey.FinalKey.SerializeCompressed() + return combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd + }() + + // Next we'll compute the two parity factors for Q, the combined key. + // If the key is odd, then we'll negate it. + parityCombinedKey := new(btcec.ModNScalar).SetInt(1) + if combinedKeyYIsOdd { + parityCombinedKey.Negate() + } + + // Before we sign below, we'll multiply by our various parity factors + // to ensure that the signing key is properly negated (if necessary): + // * d = g⋅gacc⋅d' + privKeyScalar.Mul(parityCombinedKey).Mul(parityAcc) + + // Next we'll create the challenge hash that commits to the combined + // nonce, combined public key and also the message: + // * e = H(tag=ChallengeHashTag, R || Q || m) mod n + var challengeMsg bytes.Buffer + challengeMsg.Write(schnorr.SerializePubKey(nonceKey)) + challengeMsg.Write(schnorr.SerializePubKey(combinedKey.FinalKey)) + challengeMsg.Write(msg[:]) + challengeBytes := chainhash.TaggedHash( + ChallengeHashTag, challengeMsg.Bytes(), + ) + var e btcec.ModNScalar + e.SetByteSlice(challengeBytes[:]) + + // Next, we'll compute a, our aggregation coefficient for the key that + // we're signing with. + a := aggregationCoefficient(pubKeys, pubKey, keysHash, uniqueKeyIndex) + + // With mu constructed, we can finally generate our partial signature + // as: s = (k1_1 + b*k_2 + e*a*d) mod n. + s := new(btcec.ModNScalar) + s.Add(&k1).Add(k2.Mul(nonceBlinder)).Add(e.Mul(a).Mul(&privKeyScalar)) + + sig := NewPartialSignature(s, nonceKey) + + // If we're not in fast sign mode, then we'll also validate our partial + // signature. + if !opts.fastSign { + pubNonce := secNonceToPubNonce(secNonce) + sigValid := sig.Verify( + pubNonce, combinedNonce, pubKeys, pubKey, msg, + signOpts..., + ) + if !sigValid { + return nil, fmt.Errorf("sig is invalid!") + } + } + + return &sig, nil +} + +// Verify implements partial signature verification given the public nonce for +// the signer, aggregate nonce, signer set and finally the message being +// signed. +func (p *PartialSignature) Verify(pubNonce [PubNonceSize]byte, + combinedNonce [PubNonceSize]byte, keySet []*btcec.PublicKey, + signingKey *btcec.PublicKey, msg [32]byte, signOpts ...SignOption) bool { + + pubKey := signingKey.SerializeCompressed() + + return verifyPartialSig( + p, pubNonce, combinedNonce, keySet, pubKey, msg, signOpts..., + ) == nil +} + +// verifyPartialSig attempts to verify a partial schnorr signature given the +// necessary parameters. This is the internal version of Verify that returns +// detailed errors. signed. +func verifyPartialSig(partialSig *PartialSignature, pubNonce [PubNonceSize]byte, + combinedNonce [PubNonceSize]byte, keySet []*btcec.PublicKey, + pubKey []byte, msg [32]byte, signOpts ...SignOption) error { + + opts := defaultSignOptions() + for _, option := range signOpts { + option(opts) + } + + // First we'll map the internal partial signature back into something + // we can manipulate. + s := partialSig.S + + // Next we'll parse out the two public nonces into something we can + // use. + // + // Compute the hash of all the keys here as we'll need it do aggregate + // the keys and also at the final step of verification. + keysHash := keyHashFingerprint(keySet, opts.sortKeys) + uniqueKeyIndex := secondUniqueKeyIndex(keySet, opts.sortKeys) + + keyAggOpts := []KeyAggOption{ + WithKeysHash(keysHash), WithUniqueKeyIndex(uniqueKeyIndex), + } + switch { + case opts.bip86Tweak: + keyAggOpts = append( + keyAggOpts, WithBIP86KeyTweak(), + ) + case opts.taprootTweak != nil: + keyAggOpts = append( + keyAggOpts, WithTaprootKeyTweak(opts.taprootTweak), + ) + case len(opts.tweaks) != 0: + keyAggOpts = append(keyAggOpts, WithKeyTweaks(opts.tweaks...)) + } + + // Next we'll construct the aggregated public key based on the set of + // signers. + combinedKey, parityAcc, _, err := AggregateKeys( + keySet, opts.sortKeys, keyAggOpts..., + ) + if err != nil { + return err + } + + // Next we'll compute the value b, that blinds our second public + // nonce: + // * b = h(tag=NonceBlindTag, combinedNonce || combinedKey || m). + var ( + nonceMsgBuf bytes.Buffer + nonceBlinder btcec.ModNScalar + ) + nonceMsgBuf.Write(combinedNonce[:]) + nonceMsgBuf.Write(schnorr.SerializePubKey(combinedKey.FinalKey)) + nonceMsgBuf.Write(msg[:]) + nonceBlindHash := chainhash.TaggedHash(NonceBlindTag, nonceMsgBuf.Bytes()) + nonceBlinder.SetByteSlice(nonceBlindHash[:]) + + r1J, err := btcec.ParseJacobian( + combinedNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return err + } + r2J, err := btcec.ParseJacobian( + combinedNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return err + } + + // With our nonce blinding value, we'll now combine both the public + // nonces, using the blinding factor to tweak the second nonce: + // * R = R_1 + b*R_2 + var nonce btcec.JacobianPoint + btcec.ScalarMultNonConst(&nonceBlinder, &r2J, &r2J) + btcec.AddNonConst(&r1J, &r2J, &nonce) + + // Next, we'll parse out the set of public nonces this signer used to + // generate the signature. + pubNonce1J, err := btcec.ParseJacobian( + pubNonce[:btcec.PubKeyBytesLenCompressed], + ) + if err != nil { + return err + } + pubNonce2J, err := btcec.ParseJacobian( + pubNonce[btcec.PubKeyBytesLenCompressed:], + ) + if err != nil { + return err + } + + // If the nonce is the infinity point we set it to the Generator. + if nonce == infinityPoint { + btcec.GeneratorJacobian(&nonce) + } else { + nonce.ToAffine() + } + + // We'll perform a similar aggregation and blinding operator as we did + // above for the combined nonces: R' = R_1' + b*R_2'. + var pubNonceJ btcec.JacobianPoint + + btcec.ScalarMultNonConst(&nonceBlinder, &pubNonce2J, &pubNonce2J) + btcec.AddNonConst(&pubNonce1J, &pubNonce2J, &pubNonceJ) + + pubNonceJ.ToAffine() + + // If the combined nonce used in the challenge hash has an odd y + // coordinate, then we'll negate our final public nonce. + if nonce.Y.IsOdd() { + pubNonceJ.Y.Negate(1) + pubNonceJ.Y.Normalize() + } + + // Next we'll create the challenge hash that commits to the combined + // nonce, combined public key and also the message: + // * e = H(tag=ChallengeHashTag, R || Q || m) mod n + var challengeMsg bytes.Buffer + challengeMsg.Write(schnorr.SerializePubKey(btcec.NewPublicKey( + &nonce.X, &nonce.Y, + ))) + challengeMsg.Write(schnorr.SerializePubKey(combinedKey.FinalKey)) + challengeMsg.Write(msg[:]) + challengeBytes := chainhash.TaggedHash( + ChallengeHashTag, challengeMsg.Bytes(), + ) + var e btcec.ModNScalar + e.SetByteSlice(challengeBytes[:]) + + signingKey, err := btcec.ParsePubKey(pubKey) + if err != nil { + return err + } + + // Next, we'll compute a, our aggregation coefficient for the key that + // we're signing with. + a := aggregationCoefficient(keySet, signingKey, keysHash, uniqueKeyIndex) + + // If the combined key has an odd y coordinate, then we'll negate + // parity factor for the signing key. + parityCombinedKey := new(btcec.ModNScalar).SetInt(1) + combinedKeyBytes := combinedKey.FinalKey.SerializeCompressed() + if combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd { + parityCombinedKey.Negate() + } + + // Next, we'll construct the final parity factor by multiplying the + // sign key parity factor with the accumulated parity factor for all + // the keys. + finalParityFactor := parityCombinedKey.Mul(parityAcc) + + var signKeyJ btcec.JacobianPoint + signingKey.AsJacobian(&signKeyJ) + + // In the final set, we'll check that: s*G == R' + e*a*g*P. + var sG, rP btcec.JacobianPoint + btcec.ScalarBaseMultNonConst(s, &sG) + btcec.ScalarMultNonConst(e.Mul(a).Mul(finalParityFactor), &signKeyJ, &rP) + btcec.AddNonConst(&rP, &pubNonceJ, &rP) + + sG.ToAffine() + rP.ToAffine() + + if sG != rP { + return ErrPartialSigInvalid + } + + return nil +} + +// CombineOption is a functional option argument that allows callers to modify the +// way we combine musig2 schnorr signatures. +type CombineOption func(*combineOptions) + +// combineOptions houses the set of functional options that can be used to +// modify the method used to combine the musig2 partial signatures. +type combineOptions struct { + msg [32]byte + + combinedKey *btcec.PublicKey + + tweakAcc *btcec.ModNScalar +} + +// defaultCombineOptions returns the default set of signing operations. +func defaultCombineOptions() *combineOptions { + return &combineOptions{} +} + +// WithTweakedCombine is a functional option that allows callers to specify +// that the signature was produced using a tweaked aggregated public key. In +// order to properly aggregate the partial signatures, the caller must specify +// enough information to reconstruct the challenge, and also the final +// accumulated tweak value. +func WithTweakedCombine(msg [32]byte, keys []*btcec.PublicKey, + tweaks []KeyTweakDesc, sort bool) CombineOption { + + return func(o *combineOptions) { + combinedKey, _, tweakAcc, _ := AggregateKeys( + keys, sort, WithKeyTweaks(tweaks...), + ) + + o.msg = msg + o.combinedKey = combinedKey.FinalKey + o.tweakAcc = tweakAcc + } +} + +// WithTaprootTweakedCombine is similar to the WithTweakedCombine option, but +// assumes a BIP 341 context where the final tweaked key is to be used as the +// output key, where the internal key is the aggregated key pre-tweak. +// +// This option should be used over WithTweakedCombine when attempting to +// aggregate signatures for a top-level taproot keyspend, where the output key +// commits to a script root. +func WithTaprootTweakedCombine(msg [32]byte, keys []*btcec.PublicKey, + scriptRoot []byte, sort bool) CombineOption { + + return func(o *combineOptions) { + combinedKey, _, tweakAcc, _ := AggregateKeys( + keys, sort, WithTaprootKeyTweak(scriptRoot), + ) + + o.msg = msg + o.combinedKey = combinedKey.FinalKey + o.tweakAcc = tweakAcc + } +} + +// WithBip86TweakedCombine is similar to the WithTaprootTweakedCombine option, +// but assumes a BIP 341 + BIP 86 context where the final tweaked key is to be +// used as the output key, where the internal key is the aggregated key +// pre-tweak. +// +// This option should be used over WithTaprootTweakedCombine when attempting to +// aggregate signatures for a top-level taproot keyspend, where the output key +// was generated using BIP 86. +func WithBip86TweakedCombine(msg [32]byte, keys []*btcec.PublicKey, + sort bool) CombineOption { + + return func(o *combineOptions) { + combinedKey, _, tweakAcc, _ := AggregateKeys( + keys, sort, WithBIP86KeyTweak(), + ) + + o.msg = msg + o.combinedKey = combinedKey.FinalKey + o.tweakAcc = tweakAcc + } +} + +// CombineSigs combines the set of public keys given the final aggregated +// nonce, and the series of partial signatures for each nonce. +func CombineSigs(combinedNonce *btcec.PublicKey, + partialSigs []*PartialSignature, + combineOpts ...CombineOption) *schnorr.Signature { + + // First, parse the set of optional combine options. + opts := defaultCombineOptions() + for _, option := range combineOpts { + option(opts) + } + + // If signer keys and tweaks are specified, then we need to carry out + // some intermediate steps before we can combine the signature. + var tweakProduct *btcec.ModNScalar + if opts.combinedKey != nil && opts.tweakAcc != nil { + // Next, we'll construct the parity factor of the combined key, + // negating it if the combined key has an even y coordinate. + parityFactor := new(btcec.ModNScalar).SetInt(1) + combinedKeyBytes := opts.combinedKey.SerializeCompressed() + if combinedKeyBytes[0] == secp.PubKeyFormatCompressedOdd { + parityFactor.Negate() + } + + // Next we'll reconstruct e the challenge has based on the + // nonce and combined public key. + // * e = H(tag=ChallengeHashTag, R || Q || m) mod n + var challengeMsg bytes.Buffer + challengeMsg.Write(schnorr.SerializePubKey(combinedNonce)) + challengeMsg.Write(schnorr.SerializePubKey(opts.combinedKey)) + challengeMsg.Write(opts.msg[:]) + challengeBytes := chainhash.TaggedHash( + ChallengeHashTag, challengeMsg.Bytes(), + ) + var e btcec.ModNScalar + e.SetByteSlice(challengeBytes[:]) + + tweakProduct = new(btcec.ModNScalar).Set(&e) + tweakProduct.Mul(opts.tweakAcc).Mul(parityFactor) + } + + // Finally, the tweak factor also needs to be re-computed as well. + var combinedSig btcec.ModNScalar + for _, partialSig := range partialSigs { + combinedSig.Add(partialSig.S) + } + + // If the tweak product was set above, then we'll need to add the value + // at the very end in order to produce a valid signature under the + // final tweaked key. + if tweakProduct != nil { + combinedSig.Add(tweakProduct) + } + + // TODO(roasbeef): less verbose way to get the x coord... + var nonceJ btcec.JacobianPoint + combinedNonce.AsJacobian(&nonceJ) + nonceJ.ToAffine() + + return schnorr.NewSignature(&nonceJ.X, &combinedSig) +} diff --git a/btcec/schnorr/musig2/sign_test.go b/btcec/schnorr/musig2/sign_test.go new file mode 100644 index 0000000000..a7f5d79d5d --- /dev/null +++ b/btcec/schnorr/musig2/sign_test.go @@ -0,0 +1,391 @@ +// Copyright 2013-2022 The btcsuite developers + +package musig2 + +import ( + "bytes" + "encoding/hex" + "encoding/json" + "fmt" + "os" + "path" + "strings" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + "github.com/stretchr/testify/require" +) + +const ( + signVerifyTestVectorFileName = "sign_verify_vectors.json" + + sigCombineTestVectorFileName = "sig_agg_vectors.json" +) + +type signVerifyValidCase struct { + Indices []int `json:"key_indices"` + + NonceIndices []int `json:"nonce_indices"` + + AggNonceIndex int `json:"aggnonce_index"` + + MsgIndex int `json:"msg_index"` + + SignerIndex int `json:"signer_index"` + + Expected string `json:"expected"` +} + +type signErrorCase struct { + Indices []int `json:"key_indices"` + + AggNonceIndex int `json:"aggnonce_index"` + + MsgIndex int `json:"msg_index"` + + SecNonceIndex int `json:"secnonce_index"` + + Comment string `json:"comment"` +} + +type verifyFailCase struct { + Sig string `json:"sig"` + + Indices []int `json:"key_indices"` + + NonceIndices []int `json:"nonce_indices"` + + MsgIndex int `json:"msg_index"` + + SignerIndex int `json:"signer_index"` + + Comment string `json:"comment"` +} + +type verifyErrorCase struct { + Sig string `json:"sig"` + + Indices []int `json:"key_indices"` + + NonceIndices []int `json:"nonce_indices"` + + MsgIndex int `json:"msg_index"` + + SignerIndex int `json:"signer_index"` + + Comment string `json:"comment"` +} + +type signVerifyTestVectors struct { + PrivKey string `json:"sk"` + + PubKeys []string `json:"pubkeys"` + + PrivNonces []string `json:"secnonces"` + + PubNonces []string `json:"pnonces"` + + AggNonces []string `json:"aggnonces"` + + Msgs []string `json:"msgs"` + + ValidCases []signVerifyValidCase `json:"valid_test_cases"` + + SignErrorCases []signErrorCase `json:"sign_error_test_cases"` + + VerifyFailCases []verifyFailCase `json:"verify_fail_test_cases"` + + VerifyErrorCases []verifyErrorCase `json:"verify_error_test_cases"` +} + +// TestMusig2SignVerify tests that we pass the musig2 verification tests. +func TestMusig2SignVerify(t *testing.T) { + t.Parallel() + + testVectorPath := path.Join( + testVectorBaseDir, signVerifyTestVectorFileName, + ) + testVectorBytes, err := os.ReadFile(testVectorPath) + require.NoError(t, err) + + var testCases signVerifyTestVectors + require.NoError(t, json.Unmarshal(testVectorBytes, &testCases)) + + privKey, _ := btcec.PrivKeyFromBytes(mustParseHex(testCases.PrivKey)) + + for i, testCase := range testCases.ValidCases { + testCase := testCase + + testName := fmt.Sprintf("valid_case_%v", i) + t.Run(testName, func(t *testing.T) { + pubKeys, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + require.NoError(t, err) + + pubNonces := pubNoncesFromIndices( + t, testCase.NonceIndices, testCases.PubNonces, + ) + + combinedNonce, err := AggregateNonces(pubNonces) + require.NoError(t, err) + + var msg [32]byte + copy(msg[:], mustParseHex(testCases.Msgs[testCase.MsgIndex])) + + var secNonce [SecNonceSize]byte + copy(secNonce[:], mustParseHex(testCases.PrivNonces[0])) + + partialSig, err := Sign( + secNonce, privKey, combinedNonce, pubKeys, + msg, + ) + + var partialSigBytes [32]byte + partialSig.S.PutBytesUnchecked(partialSigBytes[:]) + + require.Equal( + t, hex.EncodeToString(partialSigBytes[:]), + hex.EncodeToString(mustParseHex(testCase.Expected)), + ) + }) + } + + for _, testCase := range testCases.SignErrorCases { + testCase := testCase + + testName := fmt.Sprintf("invalid_case_%v", + strings.ToLower(testCase.Comment)) + + t.Run(testName, func(t *testing.T) { + pubKeys, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + if err != nil { + require.ErrorIs(t, err, secp.ErrPubKeyNotOnCurve) + return + } + + var aggNonce [PubNonceSize]byte + copy( + aggNonce[:], + mustParseHex( + testCases.AggNonces[testCase.AggNonceIndex], + ), + ) + + var msg [32]byte + copy(msg[:], mustParseHex(testCases.Msgs[testCase.MsgIndex])) + + var secNonce [SecNonceSize]byte + copy( + secNonce[:], + mustParseHex( + testCases.PrivNonces[testCase.SecNonceIndex], + ), + ) + + _, err = Sign( + secNonce, privKey, aggNonce, pubKeys, + msg, + ) + require.Error(t, err) + }) + } + + for _, testCase := range testCases.VerifyFailCases { + testCase := testCase + + testName := fmt.Sprintf("verify_fail_%v", + strings.ToLower(testCase.Comment)) + t.Run(testName, func(t *testing.T) { + pubKeys, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + require.NoError(t, err) + + pubNonces := pubNoncesFromIndices( + t, testCase.NonceIndices, testCases.PubNonces, + ) + + combinedNonce, err := AggregateNonces(pubNonces) + require.NoError(t, err) + + var msg [32]byte + copy( + msg[:], + mustParseHex(testCases.Msgs[testCase.MsgIndex]), + ) + + var secNonce [SecNonceSize]byte + copy(secNonce[:], mustParseHex(testCases.PrivNonces[0])) + + signerNonce := secNonceToPubNonce(secNonce) + + var partialSig PartialSignature + err = partialSig.Decode( + bytes.NewReader(mustParseHex(testCase.Sig)), + ) + if err != nil && strings.Contains(testCase.Comment, "group size") { + require.ErrorIs(t, err, ErrPartialSigInvalid) + } + + err = verifyPartialSig( + &partialSig, signerNonce, combinedNonce, + pubKeys, privKey.PubKey().SerializeCompressed(), + msg, + ) + require.Error(t, err) + }) + } + + for _, testCase := range testCases.VerifyErrorCases { + testCase := testCase + + testName := fmt.Sprintf("verify_error_%v", + strings.ToLower(testCase.Comment)) + t.Run(testName, func(t *testing.T) { + switch testCase.Comment { + case "Invalid pubnonce": + pubNonces := pubNoncesFromIndices( + t, testCase.NonceIndices, testCases.PubNonces, + ) + _, err := AggregateNonces(pubNonces) + require.ErrorIs(t, err, secp.ErrPubKeyNotOnCurve) + + case "Invalid pubkey": + _, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + require.ErrorIs(t, err, secp.ErrPubKeyNotOnCurve) + + default: + t.Fatalf("unhandled case: %v", testCase.Comment) + } + }) + } + +} + +type sigCombineValidCase struct { + AggNonce string `json:"aggnonce"` + + NonceIndices []int `json:"nonce_indices"` + + Indices []int `json:"key_indices"` + + TweakIndices []int `json:"tweak_indices"` + + IsXOnly []bool `json:"is_xonly"` + + PSigIndices []int `json:"psig_indices"` + + Expected string `json:"expected"` +} + +type sigCombineTestVectors struct { + PubKeys []string `json:"pubkeys"` + + PubNonces []string `json:"pnonces"` + + Tweaks []string `json:"tweaks"` + + Psigs []string `json:"psigs"` + + Msg string `json:"msg"` + + ValidCases []sigCombineValidCase `json:"valid_test_cases"` +} + +func pSigsFromIndicies(t *testing.T, sigs []string, indices []int) []*PartialSignature { + pSigs := make([]*PartialSignature, len(indices)) + for i, idx := range indices { + var pSig PartialSignature + err := pSig.Decode(bytes.NewReader(mustParseHex(sigs[idx]))) + require.NoError(t, err) + + pSigs[i] = &pSig + } + + return pSigs +} + +// TestMusig2SignCombine tests that we pass the musig2 sig combination tests. +func TestMusig2SignCombine(t *testing.T) { + t.Parallel() + + testVectorPath := path.Join( + testVectorBaseDir, sigCombineTestVectorFileName, + ) + testVectorBytes, err := os.ReadFile(testVectorPath) + require.NoError(t, err) + + var testCases sigCombineTestVectors + require.NoError(t, json.Unmarshal(testVectorBytes, &testCases)) + + var msg [32]byte + copy(msg[:], mustParseHex(testCases.Msg)) + + for i, testCase := range testCases.ValidCases { + testCase := testCase + + testName := fmt.Sprintf("valid_case_%v", i) + t.Run(testName, func(t *testing.T) { + pubKeys, err := keysFromIndices( + t, testCase.Indices, testCases.PubKeys, + ) + require.NoError(t, err) + + pubNonces := pubNoncesFromIndices( + t, testCase.NonceIndices, testCases.PubNonces, + ) + + partialSigs := pSigsFromIndicies( + t, testCases.Psigs, testCase.PSigIndices, + ) + + var ( + combineOpts []CombineOption + keyOpts []KeyAggOption + ) + if len(testCase.TweakIndices) > 0 { + tweaks := tweaksFromIndices( + t, testCase.TweakIndices, + testCases.Tweaks, testCase.IsXOnly, + ) + + combineOpts = append(combineOpts, WithTweakedCombine( + msg, pubKeys, tweaks, false, + )) + + keyOpts = append(keyOpts, WithKeyTweaks(tweaks...)) + } + + combinedKey, _, _, err := AggregateKeys( + pubKeys, false, keyOpts..., + ) + require.NoError(t, err) + + combinedNonce, err := AggregateNonces(pubNonces) + require.NoError(t, err) + + finalNonceJ, _, err := computeSigningNonce( + combinedNonce, combinedKey.FinalKey, msg, + ) + + finalNonceJ.ToAffine() + finalNonce := btcec.NewPublicKey( + &finalNonceJ.X, &finalNonceJ.Y, + ) + + combinedSig := CombineSigs( + finalNonce, partialSigs, combineOpts..., + ) + require.Equal(t, + strings.ToLower(testCase.Expected), + hex.EncodeToString(combinedSig.Serialize()), + ) + }) + } +} diff --git a/btcec/schnorr/pubkey.go b/btcec/schnorr/pubkey.go new file mode 100644 index 0000000000..f5d2ca4bd5 --- /dev/null +++ b/btcec/schnorr/pubkey.go @@ -0,0 +1,49 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package schnorr + +import ( + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// These constants define the lengths of serialized public keys. +const ( + PubKeyBytesLen = 32 +) + +// ParsePubKey parses a public key for a koblitz curve from a bytestring into a +// btcec.Publickey, verifying that it is valid. It only supports public keys in +// the BIP-340 32-byte format. +func ParsePubKey(pubKeyStr []byte) (*btcec.PublicKey, error) { + if pubKeyStr == nil { + err := fmt.Errorf("nil pubkey byte string") + return nil, err + } + if len(pubKeyStr) != PubKeyBytesLen { + err := fmt.Errorf("bad pubkey byte string size (want %v, have %v)", + PubKeyBytesLen, len(pubKeyStr)) + return nil, err + } + + // We'll manually prepend the compressed byte so we can re-use the + // existing pubkey parsing routine of the main btcec package. + var keyCompressed [btcec.PubKeyBytesLenCompressed]byte + keyCompressed[0] = secp.PubKeyFormatCompressedEven + copy(keyCompressed[1:], pubKeyStr) + + return btcec.ParsePubKey(keyCompressed[:]) +} + +// SerializePubKey serializes a public key as specified by BIP 340. Public keys +// in this format are 32 bytes in length, and are assumed to have an even y +// coordinate. +func SerializePubKey(pub *btcec.PublicKey) []byte { + pBytes := pub.SerializeCompressed() + return pBytes[1:] +} diff --git a/btcec/schnorr/signature.go b/btcec/schnorr/signature.go new file mode 100644 index 0000000000..f4532c7d09 --- /dev/null +++ b/btcec/schnorr/signature.go @@ -0,0 +1,547 @@ +// Copyright (c) 2013-2022 The btcsuite developers + +package schnorr + +import ( + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/chaincfg/chainhash" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + ecdsa_schnorr "github.com/decred/dcrd/dcrec/secp256k1/v4/schnorr" +) + +const ( + // SignatureSize is the size of an encoded Schnorr signature. + SignatureSize = 64 + + // scalarSize is the size of an encoded big endian scalar. + scalarSize = 32 +) + +var ( + // rfc6979ExtraDataV0 is the extra data to feed to RFC6979 when + // generating the deterministic nonce for the BIP-340 scheme. This + // ensures the same nonce is not generated for the same message and key + // as for other signing algorithms such as ECDSA. + // + // It is equal to SHA-256([]byte("BIP-340")). + rfc6979ExtraDataV0 = [32]uint8{ + 0xa3, 0xeb, 0x4c, 0x18, 0x2f, 0xae, 0x7e, 0xf4, + 0xe8, 0x10, 0xc6, 0xee, 0x13, 0xb0, 0xe9, 0x26, + 0x68, 0x6d, 0x71, 0xe8, 0x7f, 0x39, 0x4f, 0x79, + 0x9c, 0x00, 0xa5, 0x21, 0x03, 0xcb, 0x4e, 0x17, + } +) + +// Signature is a type representing a Schnorr signature. +type Signature struct { + r btcec.FieldVal + s btcec.ModNScalar +} + +// NewSignature instantiates a new signature given some r and s values. +func NewSignature(r *btcec.FieldVal, s *btcec.ModNScalar) *Signature { + var sig Signature + sig.r.Set(r).Normalize() + sig.s.Set(s) + return &sig +} + +// Serialize returns the Schnorr signature in the more strict format. +// +// The signatures are encoded as +// sig[0:32] x coordinate of the point R, encoded as a big-endian uint256 +// sig[32:64] s, encoded also as big-endian uint256 +func (sig Signature) Serialize() []byte { + // Total length of returned signature is the length of r and s. + var b [SignatureSize]byte + sig.r.PutBytesUnchecked(b[0:32]) + sig.s.PutBytesUnchecked(b[32:64]) + return b[:] +} + +// ParseSignature parses a signature according to the BIP-340 specification and +// enforces the following additional restrictions specific to secp256k1: +// +// - The r component must be in the valid range for secp256k1 field elements +// - The s component must be in the valid range for secp256k1 scalars +func ParseSignature(sig []byte) (*Signature, error) { + // The signature must be the correct length. + sigLen := len(sig) + if sigLen < SignatureSize { + str := fmt.Sprintf("malformed signature: too short: %d < %d", sigLen, + SignatureSize) + return nil, signatureError(ecdsa_schnorr.ErrSigTooShort, str) + } + if sigLen > SignatureSize { + str := fmt.Sprintf("malformed signature: too long: %d > %d", sigLen, + SignatureSize) + return nil, signatureError(ecdsa_schnorr.ErrSigTooLong, str) + } + + // The signature is validly encoded at this point, however, enforce + // additional restrictions to ensure r is in the range [0, p-1], and s is in + // the range [0, n-1] since valid Schnorr signatures are required to be in + // that range per spec. + var r btcec.FieldVal + if overflow := r.SetByteSlice(sig[0:32]); overflow { + str := "invalid signature: r >= field prime" + return nil, signatureError(ecdsa_schnorr.ErrSigRTooBig, str) + } + var s btcec.ModNScalar + if overflow := s.SetByteSlice(sig[32:64]); overflow { + str := "invalid signature: s >= group order" + return nil, signatureError(ecdsa_schnorr.ErrSigSTooBig, str) + } + + // Return the signature. + return NewSignature(&r, &s), nil +} + +// IsEqual compares this Signature instance to the one passed, returning true +// if both Signatures are equivalent. A signature is equivalent to another, if +// they both have the same scalar value for R and S. +func (sig Signature) IsEqual(otherSig *Signature) bool { + return sig.r.Equals(&otherSig.r) && sig.s.Equals(&otherSig.s) +} + +// schnorrVerify attempt to verify the signature for the provided hash and +// secp256k1 public key and either returns nil if successful or a specific error +// indicating why it failed if not successful. +// +// This differs from the exported Verify method in that it returns a specific +// error to support better testing while the exported method simply returns a +// bool indicating success or failure. +func schnorrVerify(sig *Signature, hash []byte, pubKeyBytes []byte) error { + // The algorithm for producing a BIP-340 signature is described in + // README.md and is reproduced here for reference: + // + // 1. Fail if m is not 32 bytes + // 2. P = lift_x(int(pk)). + // 3. r = int(sig[0:32]); fail is r >= p. + // 4. s = int(sig[32:64]); fail if s >= n. + // 5. e = int(tagged_hash("BIP0340/challenge", bytes(r) || bytes(P) || M)) mod n. + // 6. R = s*G - e*P + // 7. Fail if is_infinite(R) + // 8. Fail if not hash_even_y(R) + // 9. Fail is x(R) != r. + // 10. Return success iff not failure occured before reachign this + // point. + + // Step 1. + // + // Fail if m is not 32 bytes + if len(hash) != scalarSize { + str := fmt.Sprintf("wrong size for message (got %v, want %v)", + len(hash), scalarSize) + return signatureError(ecdsa_schnorr.ErrInvalidHashLen, str) + } + + // Step 2. + // + // P = lift_x(int(pk)) + // + // Fail if P is not a point on the curve + pubKey, err := ParsePubKey(pubKeyBytes) + if err != nil { + return err + } + if !pubKey.IsOnCurve() { + str := "pubkey point is not on curve" + return signatureError(ecdsa_schnorr.ErrPubKeyNotOnCurve, str) + } + + // Step 3. + // + // Fail if r >= p + // + // Note this is already handled by the fact r is a field element. + + // Step 4. + // + // Fail if s >= n + // + // Note this is already handled by the fact s is a mod n scalar. + + // Step 5. + // + // e = int(tagged_hash("BIP0340/challenge", bytes(r) || bytes(P) || M)) mod n. + var rBytes [32]byte + sig.r.PutBytesUnchecked(rBytes[:]) + pBytes := SerializePubKey(pubKey) + + commitment := chainhash.TaggedHash( + chainhash.TagBIP0340Challenge, rBytes[:], pBytes, hash, + ) + + var e btcec.ModNScalar + if overflow := e.SetBytes((*[32]byte)(commitment)); overflow != 0 { + str := "hash of (r || P || m) too big" + return signatureError(ecdsa_schnorr.ErrSchnorrHashValue, str) + } + + // Negate e here so we can use AddNonConst below to subtract the s*G + // point from e*P. + e.Negate() + + // Step 6. + // + // R = s*G - e*P + var P, R, sG, eP btcec.JacobianPoint + pubKey.AsJacobian(&P) + btcec.ScalarBaseMultNonConst(&sig.s, &sG) + btcec.ScalarMultNonConst(&e, &P, &eP) + btcec.AddNonConst(&sG, &eP, &R) + + // Step 7. + // + // Fail if R is the point at infinity + if (R.X.IsZero() && R.Y.IsZero()) || R.Z.IsZero() { + str := "calculated R point is the point at infinity" + return signatureError(ecdsa_schnorr.ErrSigRNotOnCurve, str) + } + + // Step 8. + // + // Fail if R.y is odd + // + // Note that R must be in affine coordinates for this check. + R.ToAffine() + if R.Y.IsOdd() { + str := "calculated R y-value is odd" + return signatureError(ecdsa_schnorr.ErrSigRYIsOdd, str) + } + + // Step 9. + // + // Verified if R.x == r + // + // Note that R must be in affine coordinates for this check. + if !sig.r.Equals(&R.X) { + str := "calculated R point was not given R" + return signatureError(ecdsa_schnorr.ErrUnequalRValues, str) + } + + // Step 10. + // + // Return success iff not failure occured before reachign this + return nil +} + +// Verify returns whether or not the signature is valid for the provided hash +// and secp256k1 public key. +func (sig *Signature) Verify(hash []byte, pubKey *btcec.PublicKey) bool { + pubkeyBytes := SerializePubKey(pubKey) + return schnorrVerify(sig, hash, pubkeyBytes) == nil +} + +// zeroArray zeroes the memory of a scalar array. +func zeroArray(a *[scalarSize]byte) { + for i := 0; i < scalarSize; i++ { + a[i] = 0x00 + } +} + +// schnorrSign generates an BIP-340 signature over the secp256k1 curve for the +// provided hash (which should be the result of hashing a larger message) using +// the given nonce and private key. The produced signature is deterministic +// (same message, nonce, and key yield the same signature) and canonical. +// +// WARNING: The hash MUST be 32 bytes and both the nonce and private keys must +// NOT be 0. Since this is an internal use function, these preconditions MUST +// be satisified by the caller. +func schnorrSign(privKey, nonce *btcec.ModNScalar, pubKey *btcec.PublicKey, hash []byte, + opts *signOptions) (*Signature, error) { + + // The algorithm for producing a BIP-340 signature is described in + // README.md and is reproduced here for reference: + // + // G = curve generator + // n = curve order + // d = private key + // m = message + // a = input randmoness + // r, s = signature + // + // 1. d' = int(d) + // 2. Fail if m is not 32 bytes + // 3. Fail if d = 0 or d >= n + // 4. P = d'*G + // 5. Negate d if P.y is odd + // 6. t = bytes(d) xor tagged_hash("BIP0340/aux", t || bytes(P) || m) + // 7. rand = tagged_hash("BIP0340/nonce", a) + // 8. k' = int(rand) mod n + // 9. Fail if k' = 0 + // 10. R = 'k*G + // 11. Negate k if R.y id odd + // 12. e = tagged_hash("BIP0340/challenge", bytes(R) || bytes(P) || m) mod n + // 13. sig = bytes(R) || bytes((k + e*d)) mod n + // 14. If Verify(bytes(P), m, sig) fails, abort. + // 15. return sig. + // + // Note that the set of functional options passed in may modify the + // above algorithm. Namely if CustomNonce is used, then steps 6-8 are + // replaced with a process that generates the nonce using rfc6679. If + // FastSign is passed, then we skip set 14. + + // NOTE: Steps 1-9 are performed by the caller. + + // + // Step 10. + // + // R = kG + var R btcec.JacobianPoint + k := *nonce + btcec.ScalarBaseMultNonConst(&k, &R) + + // Step 11. + // + // Negate nonce k if R.y is odd (R.y is the y coordinate of the point R) + // + // Note that R must be in affine coordinates for this check. + R.ToAffine() + if R.Y.IsOdd() { + k.Negate() + } + + // Step 12. + // + // e = tagged_hash("BIP0340/challenge", bytes(R) || bytes(P) || m) mod n + var rBytes [32]byte + r := &R.X + r.PutBytesUnchecked(rBytes[:]) + pBytes := SerializePubKey(pubKey) + + commitment := chainhash.TaggedHash( + chainhash.TagBIP0340Challenge, rBytes[:], pBytes, hash, + ) + + var e btcec.ModNScalar + if overflow := e.SetBytes((*[32]byte)(commitment)); overflow != 0 { + k.Zero() + str := "hash of (r || P || m) too big" + return nil, signatureError(ecdsa_schnorr.ErrSchnorrHashValue, str) + } + + // Step 13. + // + // s = k + e*d mod n + s := new(btcec.ModNScalar).Mul2(&e, privKey).Add(&k) + k.Zero() + + sig := NewSignature(r, s) + + // Step 14. + // + // If Verify(bytes(P), m, sig) fails, abort. + if !opts.fastSign { + if err := schnorrVerify(sig, hash, pBytes); err != nil { + return nil, err + } + } + + // Step 15. + // + // Return (r, s) + return sig, nil +} + +// SignOption is a functional option arguemnt that allows callers to modify the +// way we generate BIP-340 schnorr signatues. +type SignOption func(*signOptions) + +// signOptions houses the set of functional options that can be used to modify +// the method used to generate the BIP-340 signature. +type signOptions struct { + // fastSign determines if we'll skip the check at the end of the routine + // where we attempt to verify the produced signature. + fastSign bool + + // authNonce allows the user to pass in their own nonce information, which + // is useful for schemes like mu-sig. + authNonce *[32]byte +} + +// defaultSignOptions returns the default set of signing operations. +func defaultSignOptions() *signOptions { + return &signOptions{} +} + +// FastSign forces signing to skip the extra verification step at the end. +// Peformance sensitive applications may opt to use this option to speed up the +// signing operation. +func FastSign() SignOption { + return func(o *signOptions) { + o.fastSign = true + } +} + +// CustomNonce allows users to pass in a custom set of auxData that's used as +// input randomness to generate the nonce used during signing. Users may want +// to specify this custom value when using multi-signatures schemes such as +// Mu-Sig2. If this option isn't set, then rfc6979 will be used to generate the +// nonce material. +func CustomNonce(auxData [32]byte) SignOption { + return func(o *signOptions) { + o.authNonce = &auxData + } +} + +// Sign generates an BIP-340 signature over the secp256k1 curve for the +// provided hash (which should be the result of hashing a larger message) using +// the given private key. The produced signature is deterministic (same +// message and same key yield the same signature) and canonical. +// +// Note that the current signing implementation has a few remaining variable +// time aspects which make use of the private key and the generated nonce, +// which can expose the signer to constant time attacks. As a result, this +// function should not be used in situations where there is the possibility of +// someone having EM field/cache/etc access. +func Sign(privKey *btcec.PrivateKey, hash []byte, + signOpts ...SignOption) (*Signature, error) { + + // First, parse the set of optional signing options. + opts := defaultSignOptions() + for _, option := range signOpts { + option(opts) + } + + // The algorithm for producing a BIP-340 signature is described in + // README.md and is reproduced here for reference: + // + // G = curve generator + // n = curve order + // d = private key + // m = message + // a = input randmoness + // r, s = signature + // + // 1. d' = int(d) + // 2. Fail if m is not 32 bytes + // 3. Fail if d = 0 or d >= n + // 4. P = d'*G + // 5. Negate d if P.y is odd + // 6. t = bytes(d) xor tagged_hash("BIP0340/aux", t || bytes(P) || m) + // 7. rand = tagged_hash("BIP0340/nonce", a) + // 8. k' = int(rand) mod n + // 9. Fail if k' = 0 + // 10. R = 'k*G + // 11. Negate k if R.y id odd + // 12. e = tagged_hash("BIP0340/challenge", bytes(R) || bytes(P) || mod) mod n + // 13. sig = bytes(R) || bytes((k + e*d)) mod n + // 14. If Verify(bytes(P), m, sig) fails, abort. + // 15. return sig. + // + // Note that the set of functional options passed in may modify the + // above algorithm. Namely if CustomNonce is used, then steps 6-8 are + // replaced with a process that generates the nonce using rfc6679. If + // FastSign is passed, then we skip set 14. + + // Step 1. + // + // d' = int(d) + privKeyScalar := &privKey.Key + + // Step 2. + // + // Fail if m is not 32 bytes + if len(hash) != scalarSize { + str := fmt.Sprintf("wrong size for message hash (got %v, want %v)", + len(hash), scalarSize) + return nil, signatureError(ecdsa_schnorr.ErrInvalidHashLen, str) + } + + // Step 3. + // + // Fail if d = 0 or d >= n + if privKeyScalar.IsZero() { + str := "private key is zero" + return nil, signatureError(ecdsa_schnorr.ErrPrivateKeyIsZero, str) + } + + // Step 4. + // + // P = 'd*G + pub := privKey.PubKey() + + // Step 5. + // + // Negate d if P.y is odd. + pubKeyBytes := pub.SerializeCompressed() + if pubKeyBytes[0] == secp.PubKeyFormatCompressedOdd { + privKeyScalar.Negate() + } + + // At this point, we check to see if a CustomNonce has been passed in, + // and if so, then we'll deviate from the main routine here by + // generating the nonce value as specifid by BIP-0340. + if opts.authNonce != nil { + // Step 6. + // + // t = bytes(d) xor tagged_hash("BIP0340/aux", a) + privBytes := privKeyScalar.Bytes() + t := chainhash.TaggedHash( + chainhash.TagBIP0340Aux, (*opts.authNonce)[:], + ) + for i := 0; i < len(t); i++ { + t[i] ^= privBytes[i] + } + + // Step 7. + // + // rand = tagged_hash("BIP0340/nonce", t || bytes(P) || m) + // + // We snip off the first byte of the serialized pubkey, as we + // only need the x coordinate and not the market byte. + rand := chainhash.TaggedHash( + chainhash.TagBIP0340Nonce, t[:], pubKeyBytes[1:], hash, + ) + + // Step 8. + // + // k'= int(rand) mod n + var kPrime btcec.ModNScalar + kPrime.SetBytes((*[32]byte)(rand)) + + // Step 9. + // + // Fail if k' = 0 + if kPrime.IsZero() { + str := fmt.Sprintf("generated nonce is zero") + return nil, signatureError(ecdsa_schnorr.ErrSchnorrHashValue, str) + } + + sig, err := schnorrSign(privKeyScalar, &kPrime, pub, hash, opts) + kPrime.Zero() + if err != nil { + return nil, err + } + + return sig, nil + } + + var privKeyBytes [scalarSize]byte + privKeyScalar.PutBytes(&privKeyBytes) + defer zeroArray(&privKeyBytes) + for iteration := uint32(0); ; iteration++ { + // Step 6-9. + // + // Use RFC6979 to generate a deterministic nonce k in [1, n-1] + // parameterized by the private key, message being signed, extra data + // that identifies the scheme, and an iteration count + k := btcec.NonceRFC6979( + privKeyBytes[:], hash, rfc6979ExtraDataV0[:], nil, iteration, + ) + + // Steps 10-15. + sig, err := schnorrSign(privKeyScalar, k, pub, hash, opts) + k.Zero() + if err != nil { + // Try again with a new nonce. + continue + } + + return sig, nil + } +} diff --git a/btcec/schnorr/signature_test.go b/btcec/schnorr/signature_test.go new file mode 100644 index 0000000000..b99614ff6c --- /dev/null +++ b/btcec/schnorr/signature_test.go @@ -0,0 +1,256 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2021 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package schnorr + +import ( + "encoding/hex" + "errors" + "strings" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4" + ecdsa_schnorr "github.com/decred/dcrd/dcrec/secp256k1/v4/schnorr" +) + +type bip340Test struct { + secretKey string + publicKey string + auxRand string + message string + signature string + verifyResult bool + validPubKey bool + expectErr error + rfc6979 bool +} + +var bip340TestVectors = []bip340Test{ + { + secretKey: "0000000000000000000000000000000000000000000000000000000000000003", + publicKey: "F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + auxRand: "0000000000000000000000000000000000000000000000000000000000000000", + message: "0000000000000000000000000000000000000000000000000000000000000000", + signature: "04E7F9037658A92AFEB4F25BAE5339E3DDCA81A353493827D26F16D92308E49E2A25E92208678A2DF86970DA91B03A8AF8815A8A60498B358DAF560B347AA557", + verifyResult: true, + validPubKey: true, + rfc6979: true, + }, + { + secretKey: "0000000000000000000000000000000000000000000000000000000000000003", + publicKey: "F9308A019258C31049344F85F89D5229B531C845836F99B08601F113BCE036F9", + auxRand: "0000000000000000000000000000000000000000000000000000000000000000", + message: "0000000000000000000000000000000000000000000000000000000000000000", + signature: "E907831F80848D1069A5371B402410364BDF1C5F8307B0084C55F1CE2DCA821525F66A4A85EA8B71E482A74F382D2CE5EBEEE8FDB2172F477DF4900D310536C0", + verifyResult: true, + validPubKey: true, + }, + { + secretKey: "B7E151628AED2A6ABF7158809CF4F3C762E7160F38B4DA56A784D9045190CFEF", + publicKey: "DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + auxRand: "0000000000000000000000000000000000000000000000000000000000000001", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "6896BD60EEAE296DB48A229FF71DFE071BDE413E6D43F917DC8DCF8C78DE33418906D11AC976ABCCB20B091292BFF4EA897EFCB639EA871CFA95F6DE339E4B0A", + verifyResult: true, + validPubKey: true, + }, + { + secretKey: "C90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B14E5C9", + publicKey: "DD308AFEC5777E13121FA72B9CC1B7CC0139715309B086C960E18FD969774EB8", + auxRand: "C87AA53824B4D7AE2EB035A2B5BBBCCC080E76CDC6D1692C4B0B62D798E6D906", + message: "7E2D58D8B3BCDF1ABADEC7829054F90DDA9805AAB56C77333024B9D0A508B75C", + signature: "5831AAEED7B44BB74E5EAB94BA9D4294C49BCF2A60728D8B4C200F50DD313C1BAB745879A5AD954A72C45A91C3A51D3C7ADEA98D82F8481E0E1E03674A6F3FB7", + verifyResult: true, + validPubKey: true, + }, + { + secretKey: "0B432B2677937381AEF05BB02A66ECD012773062CF3FA2549E44F58ED2401710", + publicKey: "25D1DFF95105F5253C4022F628A996AD3A0D95FBF21D468A1B33F8C160D8F517", + auxRand: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + message: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", + signature: "7EB0509757E246F19449885651611CB965ECC1A187DD51B64FDA1EDC9637D5EC97582B9CB13DB3933705B32BA982AF5AF25FD78881EBB32771FC5922EFC66EA3", + verifyResult: true, + validPubKey: true, + }, + { + publicKey: "D69C3509BB99E412E68B0FE8544E72837DFA30746D8BE2AA65975F29D22DC7B9", + message: "4DF3C3F68FCC83B27E9D42C90431A72499F17875C81A599B566C9889B9696703", + signature: "00000000000000000000003B78CE563F89A0ED9414F5AA28AD0D96D6795F9C6376AFB1548AF603B3EB45C9F8207DEE1060CB71C04E80F593060B07D28308D7F4", + verifyResult: true, + validPubKey: true, + }, + { + publicKey: "EEFDEA4CDB677750A420FEE807EACF21EB9898AE79B9768766E4FAA04A2D4A34", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E17776969E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B", + verifyResult: false, + validPubKey: false, + expectErr: secp_ecdsa.ErrPubKeyNotOnCurve, + }, + { + publicKey: "DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "FFF97BD5755EEEA420453A14355235D382F6472F8568A18B2F057A14602975563CC27944640AC607CD107AE10923D9EF7A73C643E166BE5EBEAFA34B1AC553E2", + verifyResult: false, + validPubKey: true, + expectErr: ecdsa_schnorr.ErrSigRYIsOdd, + }, + { + publicKey: "DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "1FA62E331EDBC21C394792D2AB1100A7B432B013DF3F6FF4F99FCB33E0E1515F28890B3EDB6E7189B630448B515CE4F8622A954CFE545735AAEA5134FCCDB2BD", + verifyResult: false, + validPubKey: true, + expectErr: ecdsa_schnorr.ErrSigRYIsOdd, + }, + { + publicKey: "DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E177769961764B3AA9B2FFCB6EF947B6887A226E8D7C93E00C5ED0C1834FF0D0C2E6DA6", + verifyResult: false, + validPubKey: true, + expectErr: ecdsa_schnorr.ErrUnequalRValues, + }, + { + publicKey: "DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "0000000000000000000000000000000000000000000000000000000000000000123DDA8328AF9C23A94C1FEECFD123BA4FB73476F0D594DCB65C6425BD186051", + verifyResult: false, + validPubKey: true, + expectErr: ecdsa_schnorr.ErrSigRNotOnCurve, + }, + { + publicKey: "DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "00000000000000000000000000000000000000000000000000000000000000017615FBAF5AE28864013C099742DEADB4DBA87F11AC6754F93780D5A1837CF197", + verifyResult: false, + validPubKey: true, + expectErr: ecdsa_schnorr.ErrSigRNotOnCurve, + }, + { + publicKey: "DFF1D77F2A671C5F36183726DB2341BE58FEAE1DA2DECED843240F7B502BA659", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "4A298DACAE57395A15D0795DDBFD1DCB564DA82B0F269BC70A74F8220429BA1D69E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B", + verifyResult: false, + validPubKey: true, + expectErr: ecdsa_schnorr.ErrUnequalRValues, + }, + { + publicKey: "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC30", + message: "243F6A8885A308D313198A2E03707344A4093822299F31D0082EFA98EC4E6C89", + signature: "6CFF5C3BA86C69EA4B7376F31A9BCB4F74C1976089B2D9963DA2E5543E17776969E89B4C5564D00349106B8497785DD7D1D713A8AE82B32FA79D5F7FC407D39B", + verifyResult: false, + validPubKey: false, + expectErr: secp_ecdsa.ErrPubKeyXTooBig, + }, +} + +// decodeHex decodes the passed hex string and returns the resulting bytes. It +// panics if an error occurs. This is only used in the tests as a helper since +// the only way it can fail is if there is an error in the test source code. +func decodeHex(hexStr string) []byte { + b, err := hex.DecodeString(hexStr) + if err != nil { + panic("invalid hex string in test source: err " + err.Error() + + ", hex: " + hexStr) + } + + return b +} + +func TestSchnorrSign(t *testing.T) { + t.Parallel() + + for i, test := range bip340TestVectors { + if len(test.secretKey) == 0 { + continue + } + + d := decodeHex(test.secretKey) + privKey, _ := btcec.PrivKeyFromBytes(d) + + var auxBytes [32]byte + aux := decodeHex(test.auxRand) + copy(auxBytes[:], aux) + + msg := decodeHex(test.message) + + var signOpts []SignOption + if !test.rfc6979 { + signOpts = []SignOption{CustomNonce(auxBytes)} + } + + sig, err := Sign(privKey, msg, signOpts...) + if err != nil { + t.Fatalf("test #%v: sig generation failed: %v", i, err) + } + + if strings.ToUpper(hex.EncodeToString(sig.Serialize())) != test.signature { + t.Fatalf("test #%v: got signature %x : "+ + "want %s", i, sig.Serialize(), test.signature) + } + + pubKeyBytes := decodeHex(test.publicKey) + err = schnorrVerify(sig, msg, pubKeyBytes) + if err != nil { + t.Fail() + } + + verify := err == nil + if test.verifyResult != verify { + t.Fatalf("test #%v: verification mismatch: "+ + "expected %v, got %v", i, test.verifyResult, verify) + } + } +} + +func TestSchnorrVerify(t *testing.T) { + t.Parallel() + + for i, test := range bip340TestVectors { + + pubKeyBytes := decodeHex(test.publicKey) + + _, err := ParsePubKey(pubKeyBytes) + switch { + case !test.validPubKey && err != nil: + if !errors.Is(err, test.expectErr) { + t.Fatalf("test #%v: pubkey validation should "+ + "have failed, expected %v, got %v", i, + test.expectErr, err) + } + + continue + + case err != nil: + t.Fatalf("test #%v: unable to parse pubkey: %v", i, err) + } + + msg := decodeHex(test.message) + + sig, err := ParseSignature(decodeHex(test.signature)) + if err != nil { + t.Fatalf("unable to parse sig: %v", err) + } + + err = schnorrVerify(sig, msg, pubKeyBytes) + if err != nil && test.verifyResult { + t.Fatalf("test #%v: verification shouldn't have failed: %v", i, err) + } + + verify := err == nil + if test.verifyResult != verify { + t.Fatalf("test #%v: verificaiton mismatch: expected "+ + "%v, got %v", i, test.verifyResult, verify) + } + + if !test.verifyResult && test.expectErr != nil { + if !errors.Is(err, test.expectErr) { + t.Fatalf("test #%v: expect error %v : got %v", i, test.expectErr, err) + } + } + } +} diff --git a/btcec/secp256k1.go b/btcec/secp256k1.go deleted file mode 100644 index 1b1b8179e1..0000000000 --- a/btcec/secp256k1.go +++ /dev/null @@ -1,10 +0,0 @@ -// Copyright (c) 2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package btcec - -// Auto-generated file (see genprecomps.go) -// DO NOT EDIT - -var secp256k1BytePoints = "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" diff --git a/btcec/signature.go b/btcec/signature.go deleted file mode 100644 index deedd172d8..0000000000 --- a/btcec/signature.go +++ /dev/null @@ -1,540 +0,0 @@ -// Copyright (c) 2013-2017 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package btcec - -import ( - "bytes" - "crypto/ecdsa" - "crypto/elliptic" - "crypto/hmac" - "crypto/sha256" - "errors" - "fmt" - "hash" - "math/big" -) - -// Errors returned by canonicalPadding. -var ( - errNegativeValue = errors.New("value may be interpreted as negative") - errExcessivelyPaddedValue = errors.New("value is excessively padded") -) - -// Signature is a type representing an ecdsa signature. -type Signature struct { - R *big.Int - S *big.Int -} - -var ( - // Used in RFC6979 implementation when testing the nonce for correctness - one = big.NewInt(1) - - // oneInitializer is used to fill a byte slice with byte 0x01. It is provided - // here to avoid the need to create it multiple times. - oneInitializer = []byte{0x01} -) - -// Serialize returns the ECDSA signature in the more strict DER format. Note -// that the serialized bytes returned do not include the appended hash type -// used in Bitcoin signature scripts. -// -// encoding/asn1 is broken so we hand roll this output: -// -// 0x30 0x02 r 0x02 s -func (sig *Signature) Serialize() []byte { - // low 'S' malleability breaker - sigS := sig.S - if sigS.Cmp(S256().halfOrder) == 1 { - sigS = new(big.Int).Sub(S256().N, sigS) - } - // Ensure the encoded bytes for the r and s values are canonical and - // thus suitable for DER encoding. - rb := canonicalizeInt(sig.R) - sb := canonicalizeInt(sigS) - - // total length of returned signature is 1 byte for each magic and - // length (6 total), plus lengths of r and s - length := 6 + len(rb) + len(sb) - b := make([]byte, length) - - b[0] = 0x30 - b[1] = byte(length - 2) - b[2] = 0x02 - b[3] = byte(len(rb)) - offset := copy(b[4:], rb) + 4 - b[offset] = 0x02 - b[offset+1] = byte(len(sb)) - copy(b[offset+2:], sb) - return b -} - -// Verify calls ecdsa.Verify to verify the signature of hash using the public -// key. It returns true if the signature is valid, false otherwise. -func (sig *Signature) Verify(hash []byte, pubKey *PublicKey) bool { - return ecdsa.Verify(pubKey.ToECDSA(), hash, sig.R, sig.S) -} - -// IsEqual compares this Signature instance to the one passed, returning true -// if both Signatures are equivalent. A signature is equivalent to another, if -// they both have the same scalar value for R and S. -func (sig *Signature) IsEqual(otherSig *Signature) bool { - return sig.R.Cmp(otherSig.R) == 0 && - sig.S.Cmp(otherSig.S) == 0 -} - -// MinSigLen is the minimum length of a DER encoded signature and is when both R -// and S are 1 byte each. -// 0x30 + <1-byte> + 0x02 + 0x01 + + 0x2 + 0x01 + -const MinSigLen = 8 - -func parseSig(sigStr []byte, curve elliptic.Curve, der bool) (*Signature, error) { - // Originally this code used encoding/asn1 in order to parse the - // signature, but a number of problems were found with this approach. - // Despite the fact that signatures are stored as DER, the difference - // between go's idea of a bignum (and that they have sign) doesn't agree - // with the openssl one (where they do not). The above is true as of - // Go 1.1. In the end it was simpler to rewrite the code to explicitly - // understand the format which is this: - // 0x30 <0x02> 0x2 - // . - - signature := &Signature{} - - if len(sigStr) < MinSigLen { - return nil, errors.New("malformed signature: too short") - } - // 0x30 - index := 0 - if sigStr[index] != 0x30 { - return nil, errors.New("malformed signature: no header magic") - } - index++ - // length of remaining message - siglen := sigStr[index] - index++ - - // siglen should be less than the entire message and greater than - // the minimal message size. - if int(siglen+2) > len(sigStr) || int(siglen+2) < MinSigLen { - return nil, errors.New("malformed signature: bad length") - } - // trim the slice we're working on so we only look at what matters. - sigStr = sigStr[:siglen+2] - - // 0x02 - if sigStr[index] != 0x02 { - return nil, - errors.New("malformed signature: no 1st int marker") - } - index++ - - // Length of signature R. - rLen := int(sigStr[index]) - // must be positive, must be able to fit in another 0x2, - // hence the -3. We assume that the length must be at least one byte. - index++ - if rLen <= 0 || rLen > len(sigStr)-index-3 { - return nil, errors.New("malformed signature: bogus R length") - } - - // Then R itself. - rBytes := sigStr[index : index+rLen] - if der { - switch err := canonicalPadding(rBytes); err { - case errNegativeValue: - return nil, errors.New("signature R is negative") - case errExcessivelyPaddedValue: - return nil, errors.New("signature R is excessively padded") - } - } - signature.R = new(big.Int).SetBytes(rBytes) - index += rLen - // 0x02. length already checked in previous if. - if sigStr[index] != 0x02 { - return nil, errors.New("malformed signature: no 2nd int marker") - } - index++ - - // Length of signature S. - sLen := int(sigStr[index]) - index++ - // S should be the rest of the string. - if sLen <= 0 || sLen > len(sigStr)-index { - return nil, errors.New("malformed signature: bogus S length") - } - - // Then S itself. - sBytes := sigStr[index : index+sLen] - if der { - switch err := canonicalPadding(sBytes); err { - case errNegativeValue: - return nil, errors.New("signature S is negative") - case errExcessivelyPaddedValue: - return nil, errors.New("signature S is excessively padded") - } - } - signature.S = new(big.Int).SetBytes(sBytes) - index += sLen - - // sanity check length parsing - if index != len(sigStr) { - return nil, fmt.Errorf("malformed signature: bad final length %v != %v", - index, len(sigStr)) - } - - // Verify also checks this, but we can be more sure that we parsed - // correctly if we verify here too. - // FWIW the ecdsa spec states that R and S must be | 1, N - 1 | - // but crypto/ecdsa only checks for Sign != 0. Mirror that. - if signature.R.Sign() != 1 { - return nil, errors.New("signature R isn't 1 or more") - } - if signature.S.Sign() != 1 { - return nil, errors.New("signature S isn't 1 or more") - } - if signature.R.Cmp(curve.Params().N) >= 0 { - return nil, errors.New("signature R is >= curve.N") - } - if signature.S.Cmp(curve.Params().N) >= 0 { - return nil, errors.New("signature S is >= curve.N") - } - - return signature, nil -} - -// ParseSignature parses a signature in BER format for the curve type `curve' -// into a Signature type, perfoming some basic sanity checks. If parsing -// according to the more strict DER format is needed, use ParseDERSignature. -func ParseSignature(sigStr []byte, curve elliptic.Curve) (*Signature, error) { - return parseSig(sigStr, curve, false) -} - -// ParseDERSignature parses a signature in DER format for the curve type -// `curve` into a Signature type. If parsing according to the less strict -// BER format is needed, use ParseSignature. -func ParseDERSignature(sigStr []byte, curve elliptic.Curve) (*Signature, error) { - return parseSig(sigStr, curve, true) -} - -// canonicalizeInt returns the bytes for the passed big integer adjusted as -// necessary to ensure that a big-endian encoded integer can't possibly be -// misinterpreted as a negative number. This can happen when the most -// significant bit is set, so it is padded by a leading zero byte in this case. -// Also, the returned bytes will have at least a single byte when the passed -// value is 0. This is required for DER encoding. -func canonicalizeInt(val *big.Int) []byte { - b := val.Bytes() - if len(b) == 0 { - b = []byte{0x00} - } - if b[0]&0x80 != 0 { - paddedBytes := make([]byte, len(b)+1) - copy(paddedBytes[1:], b) - b = paddedBytes - } - return b -} - -// canonicalPadding checks whether a big-endian encoded integer could -// possibly be misinterpreted as a negative number (even though OpenSSL -// treats all numbers as unsigned), or if there is any unnecessary -// leading zero padding. -func canonicalPadding(b []byte) error { - switch { - case b[0]&0x80 == 0x80: - return errNegativeValue - case len(b) > 1 && b[0] == 0x00 && b[1]&0x80 != 0x80: - return errExcessivelyPaddedValue - default: - return nil - } -} - -// hashToInt converts a hash value to an integer. There is some disagreement -// about how this is done. [NSA] suggests that this is done in the obvious -// manner, but [SECG] truncates the hash to the bit-length of the curve order -// first. We follow [SECG] because that's what OpenSSL does. Additionally, -// OpenSSL right shifts excess bits from the number if the hash is too large -// and we mirror that too. -// This is borrowed from crypto/ecdsa. -func hashToInt(hash []byte, c elliptic.Curve) *big.Int { - orderBits := c.Params().N.BitLen() - orderBytes := (orderBits + 7) / 8 - if len(hash) > orderBytes { - hash = hash[:orderBytes] - } - - ret := new(big.Int).SetBytes(hash) - excess := len(hash)*8 - orderBits - if excess > 0 { - ret.Rsh(ret, uint(excess)) - } - return ret -} - -// recoverKeyFromSignature recovers a public key from the signature "sig" on the -// given message hash "msg". Based on the algorithm found in section 4.1.6 of -// SEC 1 Ver 2.0, page 47-48 (53 and 54 in the pdf). This performs the details -// in the inner loop in Step 1. The counter provided is actually the j parameter -// of the loop * 2 - on the first iteration of j we do the R case, else the -R -// case in step 1.6. This counter is used in the bitcoin compressed signature -// format and thus we match bitcoind's behaviour here. -func recoverKeyFromSignature(curve *KoblitzCurve, sig *Signature, msg []byte, - iter int, doChecks bool) (*PublicKey, error) { - // 1.1 x = (n * i) + r - Rx := new(big.Int).Mul(curve.Params().N, - new(big.Int).SetInt64(int64(iter/2))) - Rx.Add(Rx, sig.R) - if Rx.Cmp(curve.Params().P) != -1 { - return nil, errors.New("calculated Rx is larger than curve P") - } - - // convert 02 to point R. (step 1.2 and 1.3). If we are on an odd - // iteration then 1.6 will be done with -R, so we calculate the other - // term when uncompressing the point. - Ry, err := decompressPoint(curve, Rx, iter%2 == 1) - if err != nil { - return nil, err - } - - // 1.4 Check n*R is point at infinity - if doChecks { - nRx, nRy := curve.ScalarMult(Rx, Ry, curve.Params().N.Bytes()) - if nRx.Sign() != 0 || nRy.Sign() != 0 { - return nil, errors.New("n*R does not equal the point at infinity") - } - } - - // 1.5 calculate e from message using the same algorithm as ecdsa - // signature calculation. - e := hashToInt(msg, curve) - - // Step 1.6.1: - // We calculate the two terms sR and eG separately multiplied by the - // inverse of r (from the signature). We then add them to calculate - // Q = r^-1(sR-eG) - invr := new(big.Int).ModInverse(sig.R, curve.Params().N) - - // first term. - invrS := new(big.Int).Mul(invr, sig.S) - invrS.Mod(invrS, curve.Params().N) - sRx, sRy := curve.ScalarMult(Rx, Ry, invrS.Bytes()) - - // second term. - e.Neg(e) - e.Mod(e, curve.Params().N) - e.Mul(e, invr) - e.Mod(e, curve.Params().N) - minuseGx, minuseGy := curve.ScalarBaseMult(e.Bytes()) - - // TODO: this would be faster if we did a mult and add in one - // step to prevent the jacobian conversion back and forth. - Qx, Qy := curve.Add(sRx, sRy, minuseGx, minuseGy) - - return &PublicKey{ - Curve: curve, - X: Qx, - Y: Qy, - }, nil -} - -// SignCompact produces a compact signature of the data in hash with the given -// private key on the given koblitz curve. The isCompressed parameter should -// be used to detail if the given signature should reference a compressed -// public key or not. If successful the bytes of the compact signature will be -// returned in the format: -// <(byte of 27+public key solution)+4 if compressed >< padded bytes for signature R> -// where the R and S parameters are padde up to the bitlengh of the curve. -func SignCompact(curve *KoblitzCurve, key *PrivateKey, - hash []byte, isCompressedKey bool) ([]byte, error) { - sig, err := key.Sign(hash) - if err != nil { - return nil, err - } - - // bitcoind checks the bit length of R and S here. The ecdsa signature - // algorithm returns R and S mod N therefore they will be the bitsize of - // the curve, and thus correctly sized. - for i := 0; i < (curve.H+1)*2; i++ { - pk, err := recoverKeyFromSignature(curve, sig, hash, i, true) - if err == nil && pk.X.Cmp(key.X) == 0 && pk.Y.Cmp(key.Y) == 0 { - result := make([]byte, 1, 2*curve.byteSize+1) - result[0] = 27 + byte(i) - if isCompressedKey { - result[0] += 4 - } - // Not sure this needs rounding but safer to do so. - curvelen := (curve.BitSize + 7) / 8 - - // Pad R and S to curvelen if needed. - bytelen := (sig.R.BitLen() + 7) / 8 - if bytelen < curvelen { - result = append(result, - make([]byte, curvelen-bytelen)...) - } - result = append(result, sig.R.Bytes()...) - - bytelen = (sig.S.BitLen() + 7) / 8 - if bytelen < curvelen { - result = append(result, - make([]byte, curvelen-bytelen)...) - } - result = append(result, sig.S.Bytes()...) - - return result, nil - } - } - - return nil, errors.New("no valid solution for pubkey found") -} - -// RecoverCompact verifies the compact signature "signature" of "hash" for the -// Koblitz curve in "curve". If the signature matches then the recovered public -// key will be returned as well as a boolen if the original key was compressed -// or not, else an error will be returned. -func RecoverCompact(curve *KoblitzCurve, signature, - hash []byte) (*PublicKey, bool, error) { - bitlen := (curve.BitSize + 7) / 8 - if len(signature) != 1+bitlen*2 { - return nil, false, errors.New("invalid compact signature size") - } - - iteration := int((signature[0] - 27) & ^byte(4)) - - // format is
- sig := &Signature{ - R: new(big.Int).SetBytes(signature[1 : bitlen+1]), - S: new(big.Int).SetBytes(signature[bitlen+1:]), - } - // The iteration used here was encoded - key, err := recoverKeyFromSignature(curve, sig, hash, iteration, false) - if err != nil { - return nil, false, err - } - - return key, ((signature[0] - 27) & 4) == 4, nil -} - -// signRFC6979 generates a deterministic ECDSA signature according to RFC 6979 and BIP 62. -func signRFC6979(privateKey *PrivateKey, hash []byte) (*Signature, error) { - - privkey := privateKey.ToECDSA() - N := S256().N - halfOrder := S256().halfOrder - k := nonceRFC6979(privkey.D, hash) - inv := new(big.Int).ModInverse(k, N) - r, _ := privkey.Curve.ScalarBaseMult(k.Bytes()) - r.Mod(r, N) - - if r.Sign() == 0 { - return nil, errors.New("calculated R is zero") - } - - e := hashToInt(hash, privkey.Curve) - s := new(big.Int).Mul(privkey.D, r) - s.Add(s, e) - s.Mul(s, inv) - s.Mod(s, N) - - if s.Cmp(halfOrder) == 1 { - s.Sub(N, s) - } - if s.Sign() == 0 { - return nil, errors.New("calculated S is zero") - } - return &Signature{R: r, S: s}, nil -} - -// nonceRFC6979 generates an ECDSA nonce (`k`) deterministically according to RFC 6979. -// It takes a 32-byte hash as an input and returns 32-byte nonce to be used in ECDSA algorithm. -func nonceRFC6979(privkey *big.Int, hash []byte) *big.Int { - - curve := S256() - q := curve.Params().N - x := privkey - alg := sha256.New - - qlen := q.BitLen() - holen := alg().Size() - rolen := (qlen + 7) >> 3 - bx := append(int2octets(x, rolen), bits2octets(hash, curve, rolen)...) - - // Step B - v := bytes.Repeat(oneInitializer, holen) - - // Step C (Go zeroes the all allocated memory) - k := make([]byte, holen) - - // Step D - k = mac(alg, k, append(append(v, 0x00), bx...)) - - // Step E - v = mac(alg, k, v) - - // Step F - k = mac(alg, k, append(append(v, 0x01), bx...)) - - // Step G - v = mac(alg, k, v) - - // Step H - for { - // Step H1 - var t []byte - - // Step H2 - for len(t)*8 < qlen { - v = mac(alg, k, v) - t = append(t, v...) - } - - // Step H3 - secret := hashToInt(t, curve) - if secret.Cmp(one) >= 0 && secret.Cmp(q) < 0 { - return secret - } - k = mac(alg, k, append(v, 0x00)) - v = mac(alg, k, v) - } -} - -// mac returns an HMAC of the given key and message. -func mac(alg func() hash.Hash, k, m []byte) []byte { - h := hmac.New(alg, k) - h.Write(m) - return h.Sum(nil) -} - -// https://tools.ietf.org/html/rfc6979#section-2.3.3 -func int2octets(v *big.Int, rolen int) []byte { - out := v.Bytes() - - // left pad with zeros if it's too short - if len(out) < rolen { - out2 := make([]byte, rolen) - copy(out2[rolen-len(out):], out) - return out2 - } - - // drop most significant bytes if it's too long - if len(out) > rolen { - out2 := make([]byte, rolen) - copy(out2, out[len(out)-rolen:]) - return out2 - } - - return out -} - -// https://tools.ietf.org/html/rfc6979#section-2.3.4 -func bits2octets(in []byte, curve elliptic.Curve, rolen int) []byte { - z1 := hashToInt(in, curve) - z2 := new(big.Int).Sub(z1, curve.Params().N) - if z2.Sign() < 0 { - return int2octets(z1, rolen) - } - return int2octets(z2, rolen) -} diff --git a/btcjson/README.md b/btcjson/README.md index b643579543..48f322635e 100644 --- a/btcjson/README.md +++ b/btcjson/README.md @@ -1,9 +1,9 @@ btcjson ======= -[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/btcjson) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/btcjson) Package btcjson implements concrete types for marshalling to and from the bitcoin JSON-RPC API. A comprehensive suite of tests is provided to ensure @@ -30,17 +30,17 @@ $ go get -u github.com/btcsuite/btcd/btcjson ## Examples -* [Marshal Command](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-MarshalCmd) +* [Marshal Command](https://pkg.go.dev/github.com/btcsuite/btcd/btcjson#example-MarshalCmd) Demonstrates how to create and marshal a command into a JSON-RPC request. -* [Unmarshal Command](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-UnmarshalCmd) +* [Unmarshal Command](https://pkg.go.dev/github.com/btcsuite/btcd/btcjson#example-UnmarshalCmd) Demonstrates how to unmarshal a JSON-RPC request and then unmarshal the concrete request into a concrete command. -* [Marshal Response](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-MarshalResponse) +* [Marshal Response](https://pkg.go.dev/github.com/btcsuite/btcd/btcjson#example-MarshalResponse) Demonstrates how to marshal a JSON-RPC response. -* [Unmarshal Response](http://godoc.org/github.com/btcsuite/btcd/btcjson#example-package--UnmarshalResponse) +* [Unmarshal Response](https://pkg.go.dev/github.com/btcsuite/btcd/btcjson#example-package--UnmarshalResponse) Demonstrates how to unmarshal a JSON-RPC response and then unmarshal the result field in the response to a concrete type. diff --git a/btcjson/btcdextcmds.go b/btcjson/btcdextcmds.go index 963ccb3a3b..a3ca46ba71 100644 --- a/btcjson/btcdextcmds.go +++ b/btcjson/btcdextcmds.go @@ -59,6 +59,23 @@ func NewDebugLevelCmd(levelSpec string) *DebugLevelCmd { } } +// GenerateToAddressCmd defines the generatetoaddress JSON-RPC command. +type GenerateToAddressCmd struct { + NumBlocks int64 + Address string + MaxTries *int64 `jsonrpcdefault:"1000000"` +} + +// NewGenerateToAddressCmd returns a new instance which can be used to issue a +// generatetoaddress JSON-RPC command. +func NewGenerateToAddressCmd(numBlocks int64, address string, maxTries *int64) *GenerateToAddressCmd { + return &GenerateToAddressCmd{ + NumBlocks: numBlocks, + Address: address, + MaxTries: maxTries, + } +} + // GenerateCmd defines the generate JSON-RPC command. type GenerateCmd struct { NumBlocks uint32 @@ -131,6 +148,7 @@ func init() { MustRegisterCmd("debuglevel", (*DebugLevelCmd)(nil), flags) MustRegisterCmd("node", (*NodeCmd)(nil), flags) MustRegisterCmd("generate", (*GenerateCmd)(nil), flags) + MustRegisterCmd("generatetoaddress", (*GenerateToAddressCmd)(nil), flags) MustRegisterCmd("getbestblock", (*GetBestBlockCmd)(nil), flags) MustRegisterCmd("getcurrentnet", (*GetCurrentNetCmd)(nil), flags) MustRegisterCmd("getheaders", (*GetHeadersCmd)(nil), flags) diff --git a/btcjson/btcdextcmds_test.go b/btcjson/btcdextcmds_test.go index 10e6da3896..aaa44144e4 100644 --- a/btcjson/btcdextcmds_test.go +++ b/btcjson/btcdextcmds_test.go @@ -114,6 +114,24 @@ func TestBtcdExtCmds(t *testing.T) { NumBlocks: 1, }, }, + { + name: "generatetoaddress", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("generatetoaddress", 1, "1Address") + }, + staticCmd: func() interface{} { + return btcjson.NewGenerateToAddressCmd(1, "1Address", nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"generatetoaddress","params":[1,"1Address"],"id":1}`, + unmarshalled: &btcjson.GenerateToAddressCmd{ + NumBlocks: 1, + Address: "1Address", + MaxTries: func() *int64 { + var i int64 = 1000000 + return &i + }(), + }, + }, { name: "getbestblock", newCmd: func() (interface{}, error) { @@ -193,7 +211,7 @@ func TestBtcdExtCmds(t *testing.T) { for i, test := range tests { // Marshal the command as created by the new static command // creation function. - marshalled, err := btcjson.MarshalCmd(testID, test.staticCmd()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, testID, test.staticCmd()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -217,7 +235,7 @@ func TestBtcdExtCmds(t *testing.T) { // Marshal the command as created by the generic new command // creation function. - marshalled, err = btcjson.MarshalCmd(testID, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, testID, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/btcwalletextcmds_test.go b/btcjson/btcwalletextcmds_test.go index 58de1c81d0..dea1c61465 100644 --- a/btcjson/btcwalletextcmds_test.go +++ b/btcjson/btcwalletextcmds_test.go @@ -145,7 +145,7 @@ func TestBtcWalletExtCmds(t *testing.T) { for i, test := range tests { // Marshal the command as created by the new static command // creation function. - marshalled, err := btcjson.MarshalCmd(testID, test.staticCmd()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, testID, test.staticCmd()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -169,7 +169,7 @@ func TestBtcWalletExtCmds(t *testing.T) { // Marshal the command as created by the generic new command // creation function. - marshalled, err = btcjson.MarshalCmd(testID, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, testID, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/chainsvrcmds.go b/btcjson/chainsvrcmds.go index 406357bd06..aa1d4415da 100644 --- a/btcjson/chainsvrcmds.go +++ b/btcjson/chainsvrcmds.go @@ -8,8 +8,10 @@ package btcjson import ( + "encoding/hex" "encoding/json" "fmt" + "reflect" "github.com/btcsuite/btcd/wire" ) @@ -63,10 +65,15 @@ type CreateRawTransactionCmd struct { // NewCreateRawTransactionCmd returns a new instance which can be used to issue // a createrawtransaction JSON-RPC command. // -// Amounts are in BTC. +// Amounts are in BTC. Passing in nil and the empty slice as inputs is equivalent, +// both gets interpreted as the empty slice. func NewCreateRawTransactionCmd(inputs []TransactionInput, amounts map[string]float64, lockTime *int64) *CreateRawTransactionCmd { - + // to make sure we're serializing this to the empty list and not null, we + // explicitly initialize the list + if inputs == nil { + inputs = []TransactionInput{} + } return &CreateRawTransactionCmd{ Inputs: inputs, Amounts: amounts, @@ -100,6 +107,65 @@ func NewDecodeScriptCmd(hexScript string) *DecodeScriptCmd { } } +// DeriveAddressesCmd defines the deriveaddresses JSON-RPC command. +type DeriveAddressesCmd struct { + Descriptor string + Range *DescriptorRange +} + +// NewDeriveAddressesCmd returns a new instance which can be used to issue a +// deriveaddresses JSON-RPC command. +func NewDeriveAddressesCmd(descriptor string, descriptorRange *DescriptorRange) *DeriveAddressesCmd { + return &DeriveAddressesCmd{ + Descriptor: descriptor, + Range: descriptorRange, + } +} + +// ChangeType defines the different output types to use for the change address +// of a transaction built by the node. +type ChangeType string + +var ( + // ChangeTypeLegacy indicates a P2PKH change address type. + ChangeTypeLegacy ChangeType = "legacy" + // ChangeTypeP2SHSegWit indicates a P2WPKH-in-P2SH change address type. + ChangeTypeP2SHSegWit ChangeType = "p2sh-segwit" + // ChangeTypeBech32 indicates a P2WPKH change address type. + ChangeTypeBech32 ChangeType = "bech32" +) + +// FundRawTransactionOpts are the different options that can be passed to rawtransaction +type FundRawTransactionOpts struct { + ChangeAddress *string `json:"changeAddress,omitempty"` + ChangePosition *int `json:"changePosition,omitempty"` + ChangeType *ChangeType `json:"change_type,omitempty"` + IncludeWatching *bool `json:"includeWatching,omitempty"` + LockUnspents *bool `json:"lockUnspents,omitempty"` + FeeRate *float64 `json:"feeRate,omitempty"` // BTC/kB + SubtractFeeFromOutputs []int `json:"subtractFeeFromOutputs,omitempty"` + Replaceable *bool `json:"replaceable,omitempty"` + ConfTarget *int `json:"conf_target,omitempty"` + EstimateMode *EstimateSmartFeeMode `json:"estimate_mode,omitempty"` +} + +// FundRawTransactionCmd defines the fundrawtransaction JSON-RPC command +type FundRawTransactionCmd struct { + HexTx string + Options FundRawTransactionOpts + IsWitness *bool +} + +// NewFundRawTransactionCmd returns a new instance which can be used to issue +// a fundrawtransaction JSON-RPC command +func NewFundRawTransactionCmd(serializedTx []byte, opts FundRawTransactionOpts, isWitness *bool) *FundRawTransactionCmd { + return &FundRawTransactionCmd{ + HexTx: hex.EncodeToString(serializedTx), + Options: opts, + IsWitness: isWitness, + } +} + // GetAddedNodeInfoCmd defines the getaddednodeinfo JSON-RPC command. type GetAddedNodeInfoCmd struct { DNS bool @@ -130,8 +196,7 @@ func NewGetBestBlockHashCmd() *GetBestBlockHashCmd { // GetBlockCmd defines the getblock JSON-RPC command. type GetBlockCmd struct { Hash string - Verbose *bool `jsonrpcdefault:"true"` - VerboseTx *bool `jsonrpcdefault:"false"` + Verbosity *int `jsonrpcdefault:"1"` } // NewGetBlockCmd returns a new instance which can be used to issue a getblock @@ -139,11 +204,10 @@ type GetBlockCmd struct { // // The parameters which are pointers indicate they are optional. Passing nil // for optional parameters will use the default value. -func NewGetBlockCmd(hash string, verbose, verboseTx *bool) *GetBlockCmd { +func NewGetBlockCmd(hash string, verbosity *int) *GetBlockCmd { return &GetBlockCmd{ Hash: hash, - Verbose: verbose, - VerboseTx: verboseTx, + Verbosity: verbosity, } } @@ -165,6 +229,33 @@ func NewGetBlockCountCmd() *GetBlockCountCmd { return &GetBlockCountCmd{} } +// FilterTypeName defines the type used in the getblockfilter JSON-RPC command for the +// filter type field. +type FilterTypeName string + +const ( + // FilterTypeBasic is the basic filter type defined in BIP0158. + FilterTypeBasic FilterTypeName = "basic" +) + +// GetBlockFilterCmd defines the getblockfilter JSON-RPC command. +type GetBlockFilterCmd struct { + BlockHash string // The hash of the block + FilterType *FilterTypeName // The type name of the filter, default=basic +} + +// NewGetBlockFilterCmd returns a new instance which can be used to issue a +// getblockfilter JSON-RPC command. +// +// The parameters which are pointers indicate they are optional. Passing nil +// for optional parameters will use the default value. +func NewGetBlockFilterCmd(blockHash string, filterType *FilterTypeName) *GetBlockFilterCmd { + return &GetBlockFilterCmd{ + BlockHash: blockHash, + FilterType: filterType, + } +} + // GetBlockHashCmd defines the getblockhash JSON-RPC command. type GetBlockHashCmd struct { Index int64 @@ -193,6 +284,50 @@ func NewGetBlockHeaderCmd(hash string, verbose *bool) *GetBlockHeaderCmd { } } +// HashOrHeight defines a type that can be used as hash_or_height value in JSON-RPC commands. +type HashOrHeight struct { + Value interface{} +} + +// MarshalJSON implements the json.Marshaler interface +func (h HashOrHeight) MarshalJSON() ([]byte, error) { + return json.Marshal(h.Value) +} + +// UnmarshalJSON implements the json.Unmarshaler interface +func (h *HashOrHeight) UnmarshalJSON(data []byte) error { + var unmarshalled interface{} + if err := json.Unmarshal(data, &unmarshalled); err != nil { + return err + } + + switch v := unmarshalled.(type) { + case float64: + h.Value = int(v) + case string: + h.Value = v + default: + return fmt.Errorf("invalid hash_or_height value: %v", unmarshalled) + } + + return nil +} + +// GetBlockStatsCmd defines the getblockstats JSON-RPC command. +type GetBlockStatsCmd struct { + HashOrHeight HashOrHeight + Stats *[]string +} + +// NewGetBlockStatsCmd returns a new instance which can be used to issue a +// getblockstats JSON-RPC command. Either height or hash must be specified. +func NewGetBlockStatsCmd(hashOrHeight HashOrHeight, stats *[]string) *GetBlockStatsCmd { + return &GetBlockStatsCmd{ + HashOrHeight: hashOrHeight, + Stats: stats, + } +} + // TemplateRequest is a request object as defined in BIP22 // (https://en.bitcoin.it/wiki/BIP_0022), it is optionally provided as an // pointer argument to GetBlockTemplateCmd. @@ -216,6 +351,10 @@ type TemplateRequest struct { // "proposal". Data string `json:"data,omitempty"` WorkID string `json:"workid,omitempty"` + + // list of supported softfork deployments, by name + // Ref: https://en.bitcoin.it/wiki/BIP_0009#getblocktemplate_changes. + Rules []string `json:"rules,omitempty"` } // convertTemplateRequestField potentially converts the provided value as @@ -321,6 +460,24 @@ func NewGetChainTipsCmd() *GetChainTipsCmd { return &GetChainTipsCmd{} } +// GetChainTxStatsCmd defines the getchaintxstats JSON-RPC command. +type GetChainTxStatsCmd struct { + NBlocks *int32 + BlockHash *string +} + +// NewGetChainTxStatsCmd returns a new instance which can be used to issue a +// getchaintxstats JSON-RPC command. +// +// The parameters which are pointers indicate they are optional. Passing nil +// for optional parameters will use the default value. +func NewGetChainTxStatsCmd(nBlocks *int32, blockHash *string) *GetChainTxStatsCmd { + return &GetChainTxStatsCmd{ + NBlocks: nBlocks, + BlockHash: blockHash, + } +} + // GetConnectionCountCmd defines the getconnectioncount JSON-RPC command. type GetConnectionCountCmd struct{} @@ -330,6 +487,19 @@ func NewGetConnectionCountCmd() *GetConnectionCountCmd { return &GetConnectionCountCmd{} } +// GetDescriptorInfoCmd defines the getdescriptorinfo JSON-RPC command. +type GetDescriptorInfoCmd struct { + Descriptor string +} + +// NewGetDescriptorInfoCmd returns a new instance which can be used to issue a +// getdescriptorinfo JSON-RPC command. +func NewGetDescriptorInfoCmd(descriptor string) *GetDescriptorInfoCmd { + return &GetDescriptorInfoCmd{ + Descriptor: descriptor, + } +} + // GetDifficultyCmd defines the getdifficulty JSON-RPC command. type GetDifficultyCmd struct{} @@ -433,6 +603,22 @@ func NewGetNetworkHashPSCmd(numBlocks, height *int) *GetNetworkHashPSCmd { } } +// GetNodeAddressesCmd defines the getnodeaddresses JSON-RPC command. +type GetNodeAddressesCmd struct { + Count *int32 `jsonrpcdefault:"1"` +} + +// NewGetNodeAddressesCmd returns a new instance which can be used to issue a +// getnodeaddresses JSON-RPC command. +// +// The parameters which are pointers indicate they are optional. Passing nil +// for optional parameters will use the default value. +func NewGetNodeAddressesCmd(count *int32) *GetNodeAddressesCmd { + return &GetNodeAddressesCmd{ + Count: count, + } +} + // GetPeerInfoCmd defines the getpeerinfo JSON-RPC command. type GetPeerInfoCmd struct{} @@ -634,11 +820,60 @@ func NewSearchRawTransactionsCmd(address string, verbose, skip, count *int, vinE } } +// AllowHighFeesOrMaxFeeRate defines a type that can either be the legacy +// allowhighfees boolean field or the new maxfeerate int field. +type AllowHighFeesOrMaxFeeRate struct { + Value interface{} +} + +// String returns the string representation of this struct, used for printing +// the marshaled default value in the help text. +func (a AllowHighFeesOrMaxFeeRate) String() string { + b, _ := a.MarshalJSON() + return string(b) +} + +// MarshalJSON implements the json.Marshaler interface +func (a AllowHighFeesOrMaxFeeRate) MarshalJSON() ([]byte, error) { + // The default value is false which only works with the legacy versions. + if a.Value == nil || + (reflect.ValueOf(a.Value).Kind() == reflect.Ptr && + reflect.ValueOf(a.Value).IsNil()) { + + return json.Marshal(false) + } + + return json.Marshal(a.Value) +} + +// UnmarshalJSON implements the json.Unmarshaler interface +func (a *AllowHighFeesOrMaxFeeRate) UnmarshalJSON(data []byte) error { + if len(data) == 0 { + return nil + } + + var unmarshalled interface{} + if err := json.Unmarshal(data, &unmarshalled); err != nil { + return err + } + + switch v := unmarshalled.(type) { + case bool: + a.Value = Bool(v) + case float64: + a.Value = Int32(int32(v)) + default: + return fmt.Errorf("invalid allowhighfees or maxfeerate value: "+ + "%v", unmarshalled) + } + + return nil +} + // SendRawTransactionCmd defines the sendrawtransaction JSON-RPC command. type SendRawTransactionCmd struct { - HexTx string - AllowHighFees *bool `jsonrpcdefault:"false"` - MaxFeeRate *int32 + HexTx string + FeeSetting *AllowHighFeesOrMaxFeeRate `jsonrpcdefault:"false"` } // NewSendRawTransactionCmd returns a new instance which can be used to issue a @@ -648,8 +883,10 @@ type SendRawTransactionCmd struct { // for optional parameters will use the default value. func NewSendRawTransactionCmd(hexTx string, allowHighFees *bool) *SendRawTransactionCmd { return &SendRawTransactionCmd{ - HexTx: hexTx, - AllowHighFees: allowHighFees, + HexTx: hexTx, + FeeSetting: &AllowHighFeesOrMaxFeeRate{ + Value: allowHighFees, + }, } } @@ -659,8 +896,10 @@ func NewSendRawTransactionCmd(hexTx string, allowHighFees *bool) *SendRawTransac // A 0 maxFeeRate indicates that a maximum fee rate won't be enforced. func NewBitcoindSendRawTransactionCmd(hexTx string, maxFeeRate int32) *SendRawTransactionCmd { return &SendRawTransactionCmd{ - HexTx: hexTx, - MaxFeeRate: &maxFeeRate, + HexTx: hexTx, + FeeSetting: &AllowHighFeesOrMaxFeeRate{ + Value: &maxFeeRate, + }, } } @@ -682,6 +921,24 @@ func NewSetGenerateCmd(generate bool, genProcLimit *int) *SetGenerateCmd { } } +// SignMessageWithPrivKeyCmd defines the signmessagewithprivkey JSON-RPC command. +type SignMessageWithPrivKeyCmd struct { + PrivKey string // base 58 Wallet Import format private key + Message string // Message to sign +} + +// NewSignMessageWithPrivKey returns a new instance which can be used to issue a +// signmessagewithprivkey JSON-RPC command. +// +// The first parameter is a private key in base 58 Wallet Import format. +// The second parameter is the message to sign. +func NewSignMessageWithPrivKey(privKey, message string) *SignMessageWithPrivKeyCmd { + return &SignMessageWithPrivKeyCmd{ + PrivKey: privKey, + Message: message, + } +} + // StopCmd defines the stop JSON-RPC command. type StopCmd struct{} @@ -793,18 +1050,24 @@ func init() { MustRegisterCmd("createrawtransaction", (*CreateRawTransactionCmd)(nil), flags) MustRegisterCmd("decoderawtransaction", (*DecodeRawTransactionCmd)(nil), flags) MustRegisterCmd("decodescript", (*DecodeScriptCmd)(nil), flags) + MustRegisterCmd("deriveaddresses", (*DeriveAddressesCmd)(nil), flags) + MustRegisterCmd("fundrawtransaction", (*FundRawTransactionCmd)(nil), flags) MustRegisterCmd("getaddednodeinfo", (*GetAddedNodeInfoCmd)(nil), flags) MustRegisterCmd("getbestblockhash", (*GetBestBlockHashCmd)(nil), flags) MustRegisterCmd("getblock", (*GetBlockCmd)(nil), flags) MustRegisterCmd("getblockchaininfo", (*GetBlockChainInfoCmd)(nil), flags) MustRegisterCmd("getblockcount", (*GetBlockCountCmd)(nil), flags) + MustRegisterCmd("getblockfilter", (*GetBlockFilterCmd)(nil), flags) MustRegisterCmd("getblockhash", (*GetBlockHashCmd)(nil), flags) MustRegisterCmd("getblockheader", (*GetBlockHeaderCmd)(nil), flags) + MustRegisterCmd("getblockstats", (*GetBlockStatsCmd)(nil), flags) MustRegisterCmd("getblocktemplate", (*GetBlockTemplateCmd)(nil), flags) MustRegisterCmd("getcfilter", (*GetCFilterCmd)(nil), flags) MustRegisterCmd("getcfilterheader", (*GetCFilterHeaderCmd)(nil), flags) MustRegisterCmd("getchaintips", (*GetChainTipsCmd)(nil), flags) + MustRegisterCmd("getchaintxstats", (*GetChainTxStatsCmd)(nil), flags) MustRegisterCmd("getconnectioncount", (*GetConnectionCountCmd)(nil), flags) + MustRegisterCmd("getdescriptorinfo", (*GetDescriptorInfoCmd)(nil), flags) MustRegisterCmd("getdifficulty", (*GetDifficultyCmd)(nil), flags) MustRegisterCmd("getgenerate", (*GetGenerateCmd)(nil), flags) MustRegisterCmd("gethashespersec", (*GetHashesPerSecCmd)(nil), flags) @@ -815,6 +1078,7 @@ func init() { MustRegisterCmd("getnetworkinfo", (*GetNetworkInfoCmd)(nil), flags) MustRegisterCmd("getnettotals", (*GetNetTotalsCmd)(nil), flags) MustRegisterCmd("getnetworkhashps", (*GetNetworkHashPSCmd)(nil), flags) + MustRegisterCmd("getnodeaddresses", (*GetNodeAddressesCmd)(nil), flags) MustRegisterCmd("getpeerinfo", (*GetPeerInfoCmd)(nil), flags) MustRegisterCmd("getrawmempool", (*GetRawMempoolCmd)(nil), flags) MustRegisterCmd("getrawtransaction", (*GetRawTransactionCmd)(nil), flags) @@ -830,6 +1094,7 @@ func init() { MustRegisterCmd("searchrawtransactions", (*SearchRawTransactionsCmd)(nil), flags) MustRegisterCmd("sendrawtransaction", (*SendRawTransactionCmd)(nil), flags) MustRegisterCmd("setgenerate", (*SetGenerateCmd)(nil), flags) + MustRegisterCmd("signmessagewithprivkey", (*SignMessageWithPrivKeyCmd)(nil), flags) MustRegisterCmd("stop", (*StopCmd)(nil), flags) MustRegisterCmd("submitblock", (*SubmitBlockCmd)(nil), flags) MustRegisterCmd("uptime", (*UptimeCmd)(nil), flags) diff --git a/btcjson/chainsvrcmds_test.go b/btcjson/chainsvrcmds_test.go index 8cb4ee765a..99983288b1 100644 --- a/btcjson/chainsvrcmds_test.go +++ b/btcjson/chainsvrcmds_test.go @@ -6,6 +6,7 @@ package btcjson_test import ( "bytes" + "encoding/hex" "encoding/json" "fmt" "reflect" @@ -60,6 +61,21 @@ func TestChainSvrCmds(t *testing.T) { Amounts: map[string]float64{"456": .0123}, }, }, + { + name: "createrawtransaction - no inputs", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("createrawtransaction", `[]`, `{"456":0.0123}`) + }, + staticCmd: func() interface{} { + amounts := map[string]float64{"456": .0123} + return btcjson.NewCreateRawTransactionCmd(nil, amounts, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"createrawtransaction","params":[[],{"456":0.0123}],"id":1}`, + unmarshalled: &btcjson.CreateRawTransactionCmd{ + Inputs: []btcjson.TransactionInput{}, + Amounts: map[string]float64{"456": .0123}, + }, + }, { name: "createrawtransaction optional", newCmd: func() (interface{}, error) { @@ -80,7 +96,108 @@ func TestChainSvrCmds(t *testing.T) { LockTime: btcjson.Int64(12312333333), }, }, + { + name: "fundrawtransaction - empty opts", + newCmd: func() (i interface{}, e error) { + return btcjson.NewCmd("fundrawtransaction", "deadbeef", "{}") + }, + staticCmd: func() interface{} { + deadbeef, err := hex.DecodeString("deadbeef") + if err != nil { + panic(err) + } + return btcjson.NewFundRawTransactionCmd(deadbeef, btcjson.FundRawTransactionOpts{}, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"fundrawtransaction","params":["deadbeef",{}],"id":1}`, + unmarshalled: &btcjson.FundRawTransactionCmd{ + HexTx: "deadbeef", + Options: btcjson.FundRawTransactionOpts{}, + IsWitness: nil, + }, + }, + { + name: "fundrawtransaction - full opts", + newCmd: func() (i interface{}, e error) { + return btcjson.NewCmd("fundrawtransaction", "deadbeef", `{"changeAddress":"bcrt1qeeuctq9wutlcl5zatge7rjgx0k45228cxez655","changePosition":1,"change_type":"legacy","includeWatching":true,"lockUnspents":true,"feeRate":0.7,"subtractFeeFromOutputs":[0],"replaceable":true,"conf_target":8,"estimate_mode":"ECONOMICAL"}`) + }, + staticCmd: func() interface{} { + deadbeef, err := hex.DecodeString("deadbeef") + if err != nil { + panic(err) + } + changeAddress := "bcrt1qeeuctq9wutlcl5zatge7rjgx0k45228cxez655" + change := 1 + changeType := btcjson.ChangeTypeLegacy + watching := true + lockUnspents := true + feeRate := 0.7 + replaceable := true + confTarget := 8 + return btcjson.NewFundRawTransactionCmd(deadbeef, btcjson.FundRawTransactionOpts{ + ChangeAddress: &changeAddress, + ChangePosition: &change, + ChangeType: &changeType, + IncludeWatching: &watching, + LockUnspents: &lockUnspents, + FeeRate: &feeRate, + SubtractFeeFromOutputs: []int{0}, + Replaceable: &replaceable, + ConfTarget: &confTarget, + EstimateMode: &btcjson.EstimateModeEconomical, + }, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"fundrawtransaction","params":["deadbeef",{"changeAddress":"bcrt1qeeuctq9wutlcl5zatge7rjgx0k45228cxez655","changePosition":1,"change_type":"legacy","includeWatching":true,"lockUnspents":true,"feeRate":0.7,"subtractFeeFromOutputs":[0],"replaceable":true,"conf_target":8,"estimate_mode":"ECONOMICAL"}],"id":1}`, + unmarshalled: func() interface{} { + changeAddress := "bcrt1qeeuctq9wutlcl5zatge7rjgx0k45228cxez655" + change := 1 + changeType := btcjson.ChangeTypeLegacy + watching := true + lockUnspents := true + feeRate := 0.7 + replaceable := true + confTarget := 8 + return &btcjson.FundRawTransactionCmd{ + HexTx: "deadbeef", + Options: btcjson.FundRawTransactionOpts{ + ChangeAddress: &changeAddress, + ChangePosition: &change, + ChangeType: &changeType, + IncludeWatching: &watching, + LockUnspents: &lockUnspents, + FeeRate: &feeRate, + SubtractFeeFromOutputs: []int{0}, + Replaceable: &replaceable, + ConfTarget: &confTarget, + EstimateMode: &btcjson.EstimateModeEconomical, + }, + IsWitness: nil, + } + }(), + }, + { + name: "fundrawtransaction - iswitness", + newCmd: func() (i interface{}, e error) { + return btcjson.NewCmd("fundrawtransaction", "deadbeef", "{}", true) + }, + staticCmd: func() interface{} { + deadbeef, err := hex.DecodeString("deadbeef") + if err != nil { + panic(err) + } + t := true + return btcjson.NewFundRawTransactionCmd(deadbeef, btcjson.FundRawTransactionOpts{}, &t) + }, + marshalled: `{"jsonrpc":"1.0","method":"fundrawtransaction","params":["deadbeef",{},true],"id":1}`, + unmarshalled: &btcjson.FundRawTransactionCmd{ + HexTx: "deadbeef", + Options: btcjson.FundRawTransactionOpts{}, + IsWitness: func() *bool { + t := true + return &t + }(), + }, + }, { name: "decoderawtransaction", newCmd: func() (interface{}, error) { @@ -103,6 +220,51 @@ func TestChainSvrCmds(t *testing.T) { marshalled: `{"jsonrpc":"1.0","method":"decodescript","params":["00"],"id":1}`, unmarshalled: &btcjson.DecodeScriptCmd{HexScript: "00"}, }, + { + name: "deriveaddresses no range", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("deriveaddresses", "00") + }, + staticCmd: func() interface{} { + return btcjson.NewDeriveAddressesCmd("00", nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"deriveaddresses","params":["00"],"id":1}`, + unmarshalled: &btcjson.DeriveAddressesCmd{Descriptor: "00"}, + }, + { + name: "deriveaddresses int range", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "deriveaddresses", "00", btcjson.DescriptorRange{Value: 2}) + }, + staticCmd: func() interface{} { + return btcjson.NewDeriveAddressesCmd( + "00", &btcjson.DescriptorRange{Value: 2}) + }, + marshalled: `{"jsonrpc":"1.0","method":"deriveaddresses","params":["00",2],"id":1}`, + unmarshalled: &btcjson.DeriveAddressesCmd{ + Descriptor: "00", + Range: &btcjson.DescriptorRange{Value: 2}, + }, + }, + { + name: "deriveaddresses slice range", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "deriveaddresses", "00", + btcjson.DescriptorRange{Value: []int{0, 2}}, + ) + }, + staticCmd: func() interface{} { + return btcjson.NewDeriveAddressesCmd( + "00", &btcjson.DescriptorRange{Value: []int{0, 2}}) + }, + marshalled: `{"jsonrpc":"1.0","method":"deriveaddresses","params":["00",[0,2]],"id":1}`, + unmarshalled: &btcjson.DeriveAddressesCmd{ + Descriptor: "00", + Range: &btcjson.DescriptorRange{Value: []int{0, 2}}, + }, + }, { name: "getaddednodeinfo", newCmd: func() (interface{}, error) { @@ -141,51 +303,58 @@ func TestChainSvrCmds(t *testing.T) { }, { name: "getblock", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getblock", "123", btcjson.Int(0)) + }, + staticCmd: func() interface{} { + return btcjson.NewGetBlockCmd("123", btcjson.Int(0)) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123",0],"id":1}`, + unmarshalled: &btcjson.GetBlockCmd{ + Hash: "123", + Verbosity: btcjson.Int(0), + }, + }, + { + name: "getblock default verbosity", newCmd: func() (interface{}, error) { return btcjson.NewCmd("getblock", "123") }, staticCmd: func() interface{} { - return btcjson.NewGetBlockCmd("123", nil, nil) + return btcjson.NewGetBlockCmd("123", nil) }, marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123"],"id":1}`, unmarshalled: &btcjson.GetBlockCmd{ Hash: "123", - Verbose: btcjson.Bool(true), - VerboseTx: btcjson.Bool(false), + Verbosity: btcjson.Int(1), }, }, { name: "getblock required optional1", newCmd: func() (interface{}, error) { - // Intentionally use a source param that is - // more pointers than the destination to - // exercise that path. - verbosePtr := btcjson.Bool(true) - return btcjson.NewCmd("getblock", "123", &verbosePtr) + return btcjson.NewCmd("getblock", "123", btcjson.Int(1)) }, staticCmd: func() interface{} { - return btcjson.NewGetBlockCmd("123", btcjson.Bool(true), nil) + return btcjson.NewGetBlockCmd("123", btcjson.Int(1)) }, - marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123",true],"id":1}`, + marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123",1],"id":1}`, unmarshalled: &btcjson.GetBlockCmd{ Hash: "123", - Verbose: btcjson.Bool(true), - VerboseTx: btcjson.Bool(false), + Verbosity: btcjson.Int(1), }, }, { name: "getblock required optional2", newCmd: func() (interface{}, error) { - return btcjson.NewCmd("getblock", "123", true, true) + return btcjson.NewCmd("getblock", "123", btcjson.Int(2)) }, staticCmd: func() interface{} { - return btcjson.NewGetBlockCmd("123", btcjson.Bool(true), btcjson.Bool(true)) + return btcjson.NewGetBlockCmd("123", btcjson.Int(2)) }, - marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123",true,true],"id":1}`, + marshalled: `{"jsonrpc":"1.0","method":"getblock","params":["123",2],"id":1}`, unmarshalled: &btcjson.GetBlockCmd{ Hash: "123", - Verbose: btcjson.Bool(true), - VerboseTx: btcjson.Bool(true), + Verbosity: btcjson.Int(2), }, }, { @@ -210,6 +379,28 @@ func TestChainSvrCmds(t *testing.T) { marshalled: `{"jsonrpc":"1.0","method":"getblockcount","params":[],"id":1}`, unmarshalled: &btcjson.GetBlockCountCmd{}, }, + { + name: "getblockfilter", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getblockfilter", "0000afaf") + }, + staticCmd: func() interface{} { + return btcjson.NewGetBlockFilterCmd("0000afaf", nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblockfilter","params":["0000afaf"],"id":1}`, + unmarshalled: &btcjson.GetBlockFilterCmd{"0000afaf", nil}, + }, + { + name: "getblockfilter optional filtertype", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getblockfilter", "0000afaf", "basic") + }, + staticCmd: func() interface{} { + return btcjson.NewGetBlockFilterCmd("0000afaf", btcjson.NewFilterTypeName(btcjson.FilterTypeBasic)) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblockfilter","params":["0000afaf","basic"],"id":1}`, + unmarshalled: &btcjson.GetBlockFilterCmd{"0000afaf", btcjson.NewFilterTypeName(btcjson.FilterTypeBasic)}, + }, { name: "getblockhash", newCmd: func() (interface{}, error) { @@ -235,6 +426,60 @@ func TestChainSvrCmds(t *testing.T) { Verbose: btcjson.Bool(true), }, }, + { + name: "getblockstats height", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getblockstats", btcjson.HashOrHeight{Value: 123}) + }, + staticCmd: func() interface{} { + return btcjson.NewGetBlockStatsCmd(btcjson.HashOrHeight{Value: 123}, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblockstats","params":[123],"id":1}`, + unmarshalled: &btcjson.GetBlockStatsCmd{ + HashOrHeight: btcjson.HashOrHeight{Value: 123}, + }, + }, + { + name: "getblockstats hash", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getblockstats", btcjson.HashOrHeight{Value: "deadbeef"}) + }, + staticCmd: func() interface{} { + return btcjson.NewGetBlockStatsCmd(btcjson.HashOrHeight{Value: "deadbeef"}, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblockstats","params":["deadbeef"],"id":1}`, + unmarshalled: &btcjson.GetBlockStatsCmd{ + HashOrHeight: btcjson.HashOrHeight{Value: "deadbeef"}, + }, + }, + { + name: "getblockstats height optional stats", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getblockstats", btcjson.HashOrHeight{Value: 123}, []string{"avgfee", "maxfee"}) + }, + staticCmd: func() interface{} { + return btcjson.NewGetBlockStatsCmd(btcjson.HashOrHeight{Value: 123}, &[]string{"avgfee", "maxfee"}) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblockstats","params":[123,["avgfee","maxfee"]],"id":1}`, + unmarshalled: &btcjson.GetBlockStatsCmd{ + HashOrHeight: btcjson.HashOrHeight{Value: 123}, + Stats: &[]string{"avgfee", "maxfee"}, + }, + }, + { + name: "getblockstats hash optional stats", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getblockstats", btcjson.HashOrHeight{Value: "deadbeef"}, []string{"avgfee", "maxfee"}) + }, + staticCmd: func() interface{} { + return btcjson.NewGetBlockStatsCmd(btcjson.HashOrHeight{Value: "deadbeef"}, &[]string{"avgfee", "maxfee"}) + }, + marshalled: `{"jsonrpc":"1.0","method":"getblockstats","params":["deadbeef",["avgfee","maxfee"]],"id":1}`, + unmarshalled: &btcjson.GetBlockStatsCmd{ + HashOrHeight: btcjson.HashOrHeight{Value: "deadbeef"}, + Stats: &[]string{"avgfee", "maxfee"}, + }, + }, { name: "getblocktemplate", newCmd: func() (interface{}, error) { @@ -361,6 +606,44 @@ func TestChainSvrCmds(t *testing.T) { marshalled: `{"jsonrpc":"1.0","method":"getchaintips","params":[],"id":1}`, unmarshalled: &btcjson.GetChainTipsCmd{}, }, + { + name: "getchaintxstats", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getchaintxstats") + }, + staticCmd: func() interface{} { + return btcjson.NewGetChainTxStatsCmd(nil, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getchaintxstats","params":[],"id":1}`, + unmarshalled: &btcjson.GetChainTxStatsCmd{}, + }, + { + name: "getchaintxstats optional nblocks", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getchaintxstats", btcjson.Int32(1000)) + }, + staticCmd: func() interface{} { + return btcjson.NewGetChainTxStatsCmd(btcjson.Int32(1000), nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getchaintxstats","params":[1000],"id":1}`, + unmarshalled: &btcjson.GetChainTxStatsCmd{ + NBlocks: btcjson.Int32(1000), + }, + }, + { + name: "getchaintxstats optional nblocks and blockhash", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getchaintxstats", btcjson.Int32(1000), btcjson.String("0000afaf")) + }, + staticCmd: func() interface{} { + return btcjson.NewGetChainTxStatsCmd(btcjson.Int32(1000), btcjson.String("0000afaf")) + }, + marshalled: `{"jsonrpc":"1.0","method":"getchaintxstats","params":[1000,"0000afaf"],"id":1}`, + unmarshalled: &btcjson.GetChainTxStatsCmd{ + NBlocks: btcjson.Int32(1000), + BlockHash: btcjson.String("0000afaf"), + }, + }, { name: "getconnectioncount", newCmd: func() (interface{}, error) { @@ -515,6 +798,32 @@ func TestChainSvrCmds(t *testing.T) { Height: btcjson.Int(123), }, }, + { + name: "getnodeaddresses", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getnodeaddresses") + }, + staticCmd: func() interface{} { + return btcjson.NewGetNodeAddressesCmd(nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"getnodeaddresses","params":[],"id":1}`, + unmarshalled: &btcjson.GetNodeAddressesCmd{ + Count: btcjson.Int32(1), + }, + }, + { + name: "getnodeaddresses optional", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getnodeaddresses", 10) + }, + staticCmd: func() interface{} { + return btcjson.NewGetNodeAddressesCmd(btcjson.Int32(10)) + }, + marshalled: `{"jsonrpc":"1.0","method":"getnodeaddresses","params":[10],"id":1}`, + unmarshalled: &btcjson.GetNodeAddressesCmd{ + Count: btcjson.Int32(10), + }, + }, { name: "getpeerinfo", newCmd: func() (interface{}, error) { @@ -892,32 +1201,72 @@ func TestChainSvrCmds(t *testing.T) { FilterAddrs: &[]string{"1Address"}, }, }, + { + name: "searchrawtransactions", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("searchrawtransactions", "1Address", 0, 5, 10, "null", true, []string{"1Address"}) + }, + staticCmd: func() interface{} { + return btcjson.NewSearchRawTransactionsCmd("1Address", + btcjson.Int(0), btcjson.Int(5), btcjson.Int(10), nil, btcjson.Bool(true), &[]string{"1Address"}) + }, + marshalled: `{"jsonrpc":"1.0","method":"searchrawtransactions","params":["1Address",0,5,10,null,true,["1Address"]],"id":1}`, + unmarshalled: &btcjson.SearchRawTransactionsCmd{ + Address: "1Address", + Verbose: btcjson.Int(0), + Skip: btcjson.Int(5), + Count: btcjson.Int(10), + VinExtra: nil, + Reverse: btcjson.Bool(true), + FilterAddrs: &[]string{"1Address"}, + }, + }, { name: "sendrawtransaction", newCmd: func() (interface{}, error) { - return btcjson.NewCmd("sendrawtransaction", "1122") + return btcjson.NewCmd("sendrawtransaction", "1122", &btcjson.AllowHighFeesOrMaxFeeRate{}) }, staticCmd: func() interface{} { return btcjson.NewSendRawTransactionCmd("1122", nil) }, - marshalled: `{"jsonrpc":"1.0","method":"sendrawtransaction","params":["1122"],"id":1}`, + marshalled: `{"jsonrpc":"1.0","method":"sendrawtransaction","params":["1122",false],"id":1}`, unmarshalled: &btcjson.SendRawTransactionCmd{ - HexTx: "1122", - AllowHighFees: btcjson.Bool(false), + HexTx: "1122", + FeeSetting: &btcjson.AllowHighFeesOrMaxFeeRate{ + Value: btcjson.Bool(false), + }, }, }, { name: "sendrawtransaction optional", newCmd: func() (interface{}, error) { - return btcjson.NewCmd("sendrawtransaction", "1122", false) + return btcjson.NewCmd("sendrawtransaction", "1122", &btcjson.AllowHighFeesOrMaxFeeRate{Value: btcjson.Bool(false)}) }, staticCmd: func() interface{} { return btcjson.NewSendRawTransactionCmd("1122", btcjson.Bool(false)) }, marshalled: `{"jsonrpc":"1.0","method":"sendrawtransaction","params":["1122",false],"id":1}`, unmarshalled: &btcjson.SendRawTransactionCmd{ - HexTx: "1122", - AllowHighFees: btcjson.Bool(false), + HexTx: "1122", + FeeSetting: &btcjson.AllowHighFeesOrMaxFeeRate{ + Value: btcjson.Bool(false), + }, + }, + }, + { + name: "sendrawtransaction optional, bitcoind >= 0.19.0", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("sendrawtransaction", "1122", &btcjson.AllowHighFeesOrMaxFeeRate{Value: btcjson.Int32(1234)}) + }, + staticCmd: func() interface{} { + return btcjson.NewBitcoindSendRawTransactionCmd("1122", 1234) + }, + marshalled: `{"jsonrpc":"1.0","method":"sendrawtransaction","params":["1122",1234],"id":1}`, + unmarshalled: &btcjson.SendRawTransactionCmd{ + HexTx: "1122", + FeeSetting: &btcjson.AllowHighFeesOrMaxFeeRate{ + Value: btcjson.Int32(1234), + }, }, }, { @@ -948,6 +1297,20 @@ func TestChainSvrCmds(t *testing.T) { GenProcLimit: btcjson.Int(6), }, }, + { + name: "signmessagewithprivkey", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("signmessagewithprivkey", "5Hue", "Hey") + }, + staticCmd: func() interface{} { + return btcjson.NewSignMessageWithPrivKey("5Hue", "Hey") + }, + marshalled: `{"jsonrpc":"1.0","method":"signmessagewithprivkey","params":["5Hue","Hey"],"id":1}`, + unmarshalled: &btcjson.SignMessageWithPrivKeyCmd{ + PrivKey: "5Hue", + Message: "Hey", + }, + }, { name: "stop", newCmd: func() (interface{}, error) { @@ -1086,13 +1449,36 @@ func TestChainSvrCmds(t *testing.T) { Proof: "test", }, }, + { + name: "getdescriptorinfo", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getdescriptorinfo", "123") + }, + staticCmd: func() interface{} { + return btcjson.NewGetDescriptorInfoCmd("123") + }, + marshalled: `{"jsonrpc":"1.0","method":"getdescriptorinfo","params":["123"],"id":1}`, + unmarshalled: &btcjson.GetDescriptorInfoCmd{Descriptor: "123"}, + }, + { + name: "getzmqnotifications", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getzmqnotifications") + }, + staticCmd: func() interface{} { + return btcjson.NewGetZmqNotificationsCmd() + }, + + marshalled: `{"jsonrpc":"1.0","method":"getzmqnotifications","params":[],"id":1}`, + unmarshalled: &btcjson.GetZmqNotificationsCmd{}, + }, } t.Logf("Running %d tests", len(tests)) for i, test := range tests { // Marshal the command as created by the new static command // creation function. - marshalled, err := btcjson.MarshalCmd(testID, test.staticCmd()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, testID, test.staticCmd()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -1117,7 +1503,7 @@ func TestChainSvrCmds(t *testing.T) { // Marshal the command as created by the generic new command // creation function. - marshalled, err = btcjson.MarshalCmd(testID, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, testID, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/chainsvrresults.go b/btcjson/chainsvrresults.go index 7e6c710766..4feaeda338 100644 --- a/btcjson/chainsvrresults.go +++ b/btcjson/chainsvrresults.go @@ -4,7 +4,16 @@ package btcjson -import "encoding/json" +import ( + "bytes" + "encoding/hex" + "encoding/json" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/wire" +) // GetBlockHeaderVerboseResult models the data from the getblockheader command when // the verbose flag is set. When the verbose flag is not set, getblockheader @@ -24,9 +33,44 @@ type GetBlockHeaderVerboseResult struct { NextHash string `json:"nextblockhash,omitempty"` } +// GetBlockStatsResult models the data from the getblockstats command. +type GetBlockStatsResult struct { + AverageFee int64 `json:"avgfee"` + AverageFeeRate int64 `json:"avgfeerate"` + AverageTxSize int64 `json:"avgtxsize"` + FeeratePercentiles []int64 `json:"feerate_percentiles"` + Hash string `json:"blockhash"` + Height int64 `json:"height"` + Ins int64 `json:"ins"` + MaxFee int64 `json:"maxfee"` + MaxFeeRate int64 `json:"maxfeerate"` + MaxTxSize int64 `json:"maxtxsize"` + MedianFee int64 `json:"medianfee"` + MedianTime int64 `json:"mediantime"` + MedianTxSize int64 `json:"mediantxsize"` + MinFee int64 `json:"minfee"` + MinFeeRate int64 `json:"minfeerate"` + MinTxSize int64 `json:"mintxsize"` + Outs int64 `json:"outs"` + SegWitTotalSize int64 `json:"swtotal_size"` + SegWitTotalWeight int64 `json:"swtotal_weight"` + SegWitTxs int64 `json:"swtxs"` + Subsidy int64 `json:"subsidy"` + Time int64 `json:"time"` + TotalOut int64 `json:"total_out"` + TotalSize int64 `json:"total_size"` + TotalWeight int64 `json:"total_weight"` + Txs int64 `json:"txs"` + UTXOIncrease int64 `json:"utxo_increase"` + UTXOSizeIncrease int64 `json:"utxo_size_inc"` +} + // GetBlockVerboseResult models the data from the getblock command when the -// verbose flag is set. When the verbose flag is not set, getblock returns a -// hex-encoded string. +// verbose flag is set to 1. When the verbose flag is set to 0, getblock returns a +// hex-encoded string. When the verbose flag is set to 1, getblock returns an object +// whose tx field is an array of transaction hashes. When the verbose flag is set to 2, +// getblock returns an object whose tx field is an array of raw transactions. +// Use GetBlockVerboseTxResult to unmarshal data received from passing verbose=2 to getblock. type GetBlockVerboseResult struct { Hash string `json:"hash"` Confirmations int64 `json:"confirmations"` @@ -38,7 +82,33 @@ type GetBlockVerboseResult struct { VersionHex string `json:"versionHex"` MerkleRoot string `json:"merkleroot"` Tx []string `json:"tx,omitempty"` - RawTx []TxRawResult `json:"rawtx,omitempty"` + RawTx []TxRawResult `json:"rawtx,omitempty"` // Note: this field is always empty when verbose != 2. + Time int64 `json:"time"` + Nonce uint32 `json:"nonce"` + Bits string `json:"bits"` + Difficulty float64 `json:"difficulty"` + PreviousHash string `json:"previousblockhash"` + NextHash string `json:"nextblockhash,omitempty"` +} + +// GetBlockVerboseTxResult models the data from the getblock command when the +// verbose flag is set to 2. When the verbose flag is set to 0, getblock returns a +// hex-encoded string. When the verbose flag is set to 1, getblock returns an object +// whose tx field is an array of transaction hashes. When the verbose flag is set to 2, +// getblock returns an object whose tx field is an array of raw transactions. +// Use GetBlockVerboseResult to unmarshal data received from passing verbose=1 to getblock. +type GetBlockVerboseTxResult struct { + Hash string `json:"hash"` + Confirmations int64 `json:"confirmations"` + StrippedSize int32 `json:"strippedsize"` + Size int32 `json:"size"` + Weight int32 `json:"weight"` + Height int64 `json:"height"` + Version int32 `json:"version"` + VersionHex string `json:"versionHex"` + MerkleRoot string `json:"merkleroot"` + Tx []TxRawResult `json:"tx,omitempty"` + RawTx []TxRawResult `json:"rawtx,omitempty"` // Deprecated: removed in Bitcoin Core Time int64 `json:"time"` Nonce uint32 `json:"nonce"` Bits string `json:"bits"` @@ -47,6 +117,18 @@ type GetBlockVerboseResult struct { NextHash string `json:"nextblockhash,omitempty"` } +// GetChainTxStatsResult models the data from the getchaintxstats command. +type GetChainTxStatsResult struct { + Time int64 `json:"time"` + TxCount int64 `json:"txcount"` + WindowFinalBlockHash string `json:"window_final_block_hash"` + WindowFinalBlockHeight int32 `json:"window_final_block_height"` + WindowBlockCount int32 `json:"window_block_count"` + WindowTxCount int32 `json:"window_tx_count"` + WindowInterval int32 `json:"window_interval"` + TxRate float64 `json:"txrate"` +} + // CreateMultiSigResult models the data returned from the createmultisig // command. type CreateMultiSigResult struct { @@ -90,12 +172,13 @@ type SoftForkDescription struct { // Bip9SoftForkDescription describes the current state of a defined BIP0009 // version bits soft-fork. type Bip9SoftForkDescription struct { - Status string `json:"status"` - Bit uint8 `json:"bit"` - StartTime1 int64 `json:"startTime"` - StartTime2 int64 `json:"start_time"` - Timeout int64 `json:"timeout"` - Since int32 `json:"since"` + Status string `json:"status"` + Bit uint8 `json:"bit"` + StartTime1 int64 `json:"startTime"` + StartTime2 int64 `json:"start_time"` + Timeout int64 `json:"timeout"` + Since int32 `json:"since"` + MinActivationHeight int32 `json:"min_activation_height"` } // StartTime returns the starting time of the softfork as a Unix epoch. @@ -140,18 +223,28 @@ type GetBlockChainInfoResult struct { Difficulty float64 `json:"difficulty"` MedianTime int64 `json:"mediantime"` VerificationProgress float64 `json:"verificationprogress,omitempty"` + InitialBlockDownload bool `json:"initialblockdownload,omitempty"` Pruned bool `json:"pruned"` PruneHeight int32 `json:"pruneheight,omitempty"` ChainWork string `json:"chainwork,omitempty"` + SizeOnDisk int64 `json:"size_on_disk,omitempty"` *SoftForks *UnifiedSoftForks } +// GetBlockFilterResult models the data returned from the getblockfilter +// command. +type GetBlockFilterResult struct { + Filter string `json:"filter"` // the hex-encoded filter data + Header string `json:"header"` // the hex-encoded filter header +} + // GetBlockTemplateResultTx models the transactions field of the // getblocktemplate command. type GetBlockTemplateResultTx struct { Data string `json:"data"` Hash string `json:"hash"` + TxID string `json:"txid"` Depends []int64 `json:"depends"` Fee int64 `json:"fee"` SigOps int64 `json:"sigops"` @@ -206,23 +299,35 @@ type GetBlockTemplateResult struct { RejectReasion string `json:"reject-reason,omitempty"` } +// GetMempoolEntryResult models the data returned from the getmempoolentry's +// fee field + +type MempoolFees struct { + Base float64 `json:"base"` + Modified float64 `json:"modified"` + Ancestor float64 `json:"ancestor"` + Descendant float64 `json:"descendant"` +} + // GetMempoolEntryResult models the data returned from the getmempoolentry // command. type GetMempoolEntryResult struct { - Size int32 `json:"size"` - Fee float64 `json:"fee"` - ModifiedFee float64 `json:"modifiedfee"` - Time int64 `json:"time"` - Height int64 `json:"height"` - StartingPriority float64 `json:"startingpriority"` - CurrentPriority float64 `json:"currentpriority"` - DescendantCount int64 `json:"descendantcount"` - DescendantSize int64 `json:"descendantsize"` - DescendantFees float64 `json:"descendantfees"` - AncestorCount int64 `json:"ancestorcount"` - AncestorSize int64 `json:"ancestorsize"` - AncestorFees float64 `json:"ancestorfees"` - Depends []string `json:"depends"` + VSize int32 `json:"vsize"` + Size int32 `json:"size"` + Weight int64 `json:"weight"` + Fee float64 `json:"fee"` + ModifiedFee float64 `json:"modifiedfee"` + Time int64 `json:"time"` + Height int64 `json:"height"` + DescendantCount int64 `json:"descendantcount"` + DescendantSize int64 `json:"descendantsize"` + DescendantFees float64 `json:"descendantfees"` + AncestorCount int64 `json:"ancestorcount"` + AncestorSize int64 `json:"ancestorsize"` + AncestorFees float64 `json:"ancestorfees"` + WTxId string `json:"wtxid"` + Fees MempoolFees `json:"fees"` + Depends []string `json:"depends"` } // GetMempoolInfoResult models the data returned from the getmempoolinfo @@ -259,6 +364,8 @@ type GetNetworkInfoResult struct { LocalRelay bool `json:"localrelay"` TimeOffset int64 `json:"timeoffset"` Connections int32 `json:"connections"` + ConnectionsIn int32 `json:"connections_in"` + ConnectionsOut int32 `json:"connections_out"` NetworkActive bool `json:"networkactive"` Networks []NetworksResult `json:"networks"` RelayFee float64 `json:"relayfee"` @@ -267,6 +374,16 @@ type GetNetworkInfoResult struct { Warnings string `json:"warnings"` } +// GetNodeAddressesResult models the data returned from the getnodeaddresses +// command. +type GetNodeAddressesResult struct { + // Timestamp in seconds since epoch (Jan 1 1970 GMT) keeping track of when the node was last seen + Time int64 `json:"time"` + Services uint64 `json:"services"` // The services offered + Address string `json:"address"` // The address of the node + Port uint16 `json:"port"` // The port of the node +} + // GetPeerInfoResult models the data returned from the getpeerinfo command. type GetPeerInfoResult struct { ID int32 `json:"id"` @@ -326,6 +443,64 @@ type GetTxOutResult struct { Coinbase bool `json:"coinbase"` } +// GetTxOutSetInfoResult models the data from the gettxoutsetinfo command. +type GetTxOutSetInfoResult struct { + Height int64 `json:"height"` + BestBlock chainhash.Hash `json:"bestblock"` + Transactions int64 `json:"transactions"` + TxOuts int64 `json:"txouts"` + BogoSize int64 `json:"bogosize"` + HashSerialized chainhash.Hash `json:"hash_serialized_2"` + DiskSize int64 `json:"disk_size"` + TotalAmount btcutil.Amount `json:"total_amount"` +} + +// UnmarshalJSON unmarshals the result of the gettxoutsetinfo JSON-RPC call +func (g *GetTxOutSetInfoResult) UnmarshalJSON(data []byte) error { + // Step 1: Create type aliases of the original struct. + type Alias GetTxOutSetInfoResult + + // Step 2: Create an anonymous struct with raw replacements for the special + // fields. + aux := &struct { + BestBlock string `json:"bestblock"` + HashSerialized string `json:"hash_serialized_2"` + TotalAmount float64 `json:"total_amount"` + *Alias + }{ + Alias: (*Alias)(g), + } + + // Step 3: Unmarshal the data into the anonymous struct. + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + + // Step 4: Convert the raw fields to the desired types + blockHash, err := chainhash.NewHashFromStr(aux.BestBlock) + if err != nil { + return err + } + + g.BestBlock = *blockHash + + serializedHash, err := chainhash.NewHashFromStr(aux.HashSerialized) + if err != nil { + return err + } + + g.HashSerialized = *serializedHash + + amount, err := btcutil.NewAmount(aux.TotalAmount) + if err != nil { + return err + } + + g.TotalAmount = amount + + return nil +} + // GetNetTotalsResult models the data returned from the getnettotals command. type GetNetTotalsResult struct { TotalBytesRecv uint64 `json:"totalbytesrecv"` @@ -504,8 +679,8 @@ type GetMiningInfoResult struct { Errors string `json:"errors"` Generate bool `json:"generate"` GenProcLimit int32 `json:"genproclimit"` - HashesPerSec int64 `json:"hashespersec"` - NetworkHashPS int64 `json:"networkhashps"` + HashesPerSec float64 `json:"hashespersec"` + NetworkHashPS float64 `json:"networkhashps"` PooledTx uint64 `json:"pooledtx"` TestNet bool `json:"testnet"` } @@ -540,7 +715,7 @@ type TxRawResult struct { Size int32 `json:"size,omitempty"` Vsize int32 `json:"vsize,omitempty"` Weight int32 `json:"weight,omitempty"` - Version int32 `json:"version"` + Version uint32 `json:"version"` LockTime uint32 `json:"locktime"` Vin []Vin `json:"vin"` Vout []Vout `json:"vout"` @@ -580,7 +755,93 @@ type TxRawDecodeResult struct { // ValidateAddressChainResult models the data returned by the chain server // validateaddress command. +// +// Compared to the Bitcoin Core version, this struct lacks the scriptPubKey +// field since it requires wallet access, which is outside the scope of btcd. +// Ref: https://bitcoincore.org/en/doc/0.20.0/rpc/util/validateaddress/ type ValidateAddressChainResult struct { - IsValid bool `json:"isvalid"` - Address string `json:"address,omitempty"` + IsValid bool `json:"isvalid"` + Address string `json:"address,omitempty"` + IsScript *bool `json:"isscript,omitempty"` + IsWitness *bool `json:"iswitness,omitempty"` + WitnessVersion *int32 `json:"witness_version,omitempty"` + WitnessProgram *string `json:"witness_program,omitempty"` +} + +// EstimateSmartFeeResult models the data returned buy the chain server +// estimatesmartfee command +type EstimateSmartFeeResult struct { + FeeRate *float64 `json:"feerate,omitempty"` + Errors []string `json:"errors,omitempty"` + Blocks int64 `json:"blocks"` +} + +var _ json.Unmarshaler = &FundRawTransactionResult{} + +type rawFundRawTransactionResult struct { + Transaction string `json:"hex"` + Fee float64 `json:"fee"` + ChangePosition int `json:"changepos"` +} + +// FundRawTransactionResult is the result of the fundrawtransaction JSON-RPC call +type FundRawTransactionResult struct { + Transaction *wire.MsgTx + Fee btcutil.Amount + ChangePosition int // the position of the added change output, or -1 +} + +// UnmarshalJSON unmarshals the result of the fundrawtransaction JSON-RPC call +func (f *FundRawTransactionResult) UnmarshalJSON(data []byte) error { + var rawRes rawFundRawTransactionResult + if err := json.Unmarshal(data, &rawRes); err != nil { + return err + } + + txBytes, err := hex.DecodeString(rawRes.Transaction) + if err != nil { + return err + } + + var msgTx wire.MsgTx + witnessErr := msgTx.Deserialize(bytes.NewReader(txBytes)) + if witnessErr != nil { + legacyErr := msgTx.DeserializeNoWitness(bytes.NewReader(txBytes)) + if legacyErr != nil { + return legacyErr + } + } + + fee, err := btcutil.NewAmount(rawRes.Fee) + if err != nil { + return err + } + + f.Transaction = &msgTx + f.Fee = fee + f.ChangePosition = rawRes.ChangePosition + return nil +} + +// GetDescriptorInfoResult models the data from the getdescriptorinfo command. +type GetDescriptorInfoResult struct { + Descriptor string `json:"descriptor"` // descriptor in canonical form, without private keys + Checksum string `json:"checksum"` // checksum for the input descriptor + IsRange bool `json:"isrange"` // whether the descriptor is ranged + IsSolvable bool `json:"issolvable"` // whether the descriptor is solvable + HasPrivateKeys bool `json:"hasprivatekeys"` // whether the descriptor has at least one private key +} + +// DeriveAddressesResult models the data from the deriveaddresses command. +type DeriveAddressesResult []string + +// LoadWalletResult models the data from the loadwallet command +type LoadWalletResult struct { + Name string `json:"name"` + Warning string `json:"warning"` +} + +// DumpWalletResult models the data from the dumpwallet command +type DumpWalletResult struct { + Filename string `json:"filename"` } diff --git a/btcjson/chainsvrresults_test.go b/btcjson/chainsvrresults_test.go index 1d568e2658..8a11197af2 100644 --- a/btcjson/chainsvrresults_test.go +++ b/btcjson/chainsvrresults_test.go @@ -6,9 +6,14 @@ package btcjson_test import ( "encoding/json" + "net/url" + "reflect" "testing" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/davecgh/go-spew/spew" ) // TestChainSvrCustomResults ensures any results that have custom marshalling @@ -68,6 +73,21 @@ func TestChainSvrCustomResults(t *testing.T) { }, expected: `{"txid":"123","vout":1,"scriptSig":{"asm":"0","hex":"00"},"prevOut":{"addresses":["addr1"],"value":0},"sequence":4294967295}`, }, + { + name: "zmq notification", + result: &btcjson.GetZmqNotificationResult{{ + Type: "pubrawblock", + Address: func() *url.URL { + u, err := url.Parse("tcp://127.0.0.1:1238") + if err != nil { + panic(err) + } + return u + }(), + HighWaterMark: 1337, + }}, + expected: `[{"address":"tcp://127.0.0.1:1238","hwm":1337,"type":"pubrawblock"}]`, + }, } t.Logf("Running %d tests", len(tests)) @@ -86,3 +106,112 @@ func TestChainSvrCustomResults(t *testing.T) { } } } + +// TestGetTxOutSetInfoResult ensures that custom unmarshalling of +// GetTxOutSetInfoResult works as intended. +func TestGetTxOutSetInfoResult(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + result string + want btcjson.GetTxOutSetInfoResult + }{ + { + name: "GetTxOutSetInfoResult - not scanning", + result: `{"height":123,"bestblock":"000000000000005f94116250e2407310463c0a7cf950f1af9ebe935b1c0687ab","transactions":1,"txouts":1,"bogosize":1,"hash_serialized_2":"9a0a561203ff052182993bc5d0cb2c620880bfafdbd80331f65fd9546c3e5c3e","disk_size":1,"total_amount":0.2}`, + want: btcjson.GetTxOutSetInfoResult{ + Height: 123, + BestBlock: func() chainhash.Hash { + h, err := chainhash.NewHashFromStr("000000000000005f94116250e2407310463c0a7cf950f1af9ebe935b1c0687ab") + if err != nil { + panic(err) + } + + return *h + }(), + Transactions: 1, + TxOuts: 1, + BogoSize: 1, + HashSerialized: func() chainhash.Hash { + h, err := chainhash.NewHashFromStr("9a0a561203ff052182993bc5d0cb2c620880bfafdbd80331f65fd9546c3e5c3e") + if err != nil { + panic(err) + } + + return *h + }(), + DiskSize: 1, + TotalAmount: func() btcutil.Amount { + a, err := btcutil.NewAmount(0.2) + if err != nil { + panic(err) + } + + return a + }(), + }, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + var out btcjson.GetTxOutSetInfoResult + err := json.Unmarshal([]byte(test.result), &out) + if err != nil { + t.Errorf("Test #%d (%s) unexpected error: %v", i, + test.name, err) + continue + } + + if !reflect.DeepEqual(out, test.want) { + t.Errorf("Test #%d (%s) unexpected unmarshalled data - "+ + "got %v, want %v", i, test.name, spew.Sdump(out), + spew.Sdump(test.want)) + continue + } + } +} + +// TestChainSvrMiningInfoResults ensures GetMiningInfoResults are unmarshalled correctly +func TestChainSvrMiningInfoResults(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + result string + expected btcjson.GetMiningInfoResult + }{ + { + name: "mining info with integer networkhashps", + result: `{"networkhashps": 89790618491361}`, + expected: btcjson.GetMiningInfoResult{ + NetworkHashPS: 89790618491361, + }, + }, + { + name: "mining info with scientific notation networkhashps", + result: `{"networkhashps": 8.9790618491361e+13}`, + expected: btcjson.GetMiningInfoResult{ + NetworkHashPS: 89790618491361, + }, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + var miningInfoResult btcjson.GetMiningInfoResult + err := json.Unmarshal([]byte(test.result), &miningInfoResult) + if err != nil { + t.Errorf("Test #%d (%s) unexpected error: %v", i, + test.name, err) + continue + } + if miningInfoResult != test.expected { + t.Errorf("Test #%d (%s) unexpected marhsalled data - "+ + "got %+v, want %+v", i, test.name, miningInfoResult, + test.expected) + continue + } + } +} diff --git a/btcjson/chainsvrwscmds.go b/btcjson/chainsvrwscmds.go index bf973e2559..dfe499ec5d 100644 --- a/btcjson/chainsvrwscmds.go +++ b/btcjson/chainsvrwscmds.go @@ -80,7 +80,7 @@ func NewStopNotifyNewTransactionsCmd() *StopNotifyNewTransactionsCmd { // NotifyReceivedCmd defines the notifyreceived JSON-RPC command. // -// NOTE: Deprecated. Use LoadTxFilterCmd instead. +// Deprecated: Use LoadTxFilterCmd instead. type NotifyReceivedCmd struct { Addresses []string } @@ -88,7 +88,7 @@ type NotifyReceivedCmd struct { // NewNotifyReceivedCmd returns a new instance which can be used to issue a // notifyreceived JSON-RPC command. // -// NOTE: Deprecated. Use NewLoadTxFilterCmd instead. +// Deprecated: Use NewLoadTxFilterCmd instead. func NewNotifyReceivedCmd(addresses []string) *NotifyReceivedCmd { return &NotifyReceivedCmd{ Addresses: addresses, @@ -128,7 +128,7 @@ func NewLoadTxFilterCmd(reload bool, addresses []string, outPoints []OutPoint) * // NotifySpentCmd defines the notifyspent JSON-RPC command. // -// NOTE: Deprecated. Use LoadTxFilterCmd instead. +// Deprecated: Use LoadTxFilterCmd instead. type NotifySpentCmd struct { OutPoints []OutPoint } @@ -136,7 +136,7 @@ type NotifySpentCmd struct { // NewNotifySpentCmd returns a new instance which can be used to issue a // notifyspent JSON-RPC command. // -// NOTE: Deprecated. Use NewLoadTxFilterCmd instead. +// Deprecated: Use NewLoadTxFilterCmd instead. func NewNotifySpentCmd(outPoints []OutPoint) *NotifySpentCmd { return &NotifySpentCmd{ OutPoints: outPoints, @@ -145,7 +145,7 @@ func NewNotifySpentCmd(outPoints []OutPoint) *NotifySpentCmd { // StopNotifyReceivedCmd defines the stopnotifyreceived JSON-RPC command. // -// NOTE: Deprecated. Use LoadTxFilterCmd instead. +// Deprecated: Use LoadTxFilterCmd instead. type StopNotifyReceivedCmd struct { Addresses []string } @@ -153,7 +153,7 @@ type StopNotifyReceivedCmd struct { // NewStopNotifyReceivedCmd returns a new instance which can be used to issue a // stopnotifyreceived JSON-RPC command. // -// NOTE: Deprecated. Use NewLoadTxFilterCmd instead. +// Deprecated: Use NewLoadTxFilterCmd instead. func NewStopNotifyReceivedCmd(addresses []string) *StopNotifyReceivedCmd { return &StopNotifyReceivedCmd{ Addresses: addresses, @@ -162,7 +162,7 @@ func NewStopNotifyReceivedCmd(addresses []string) *StopNotifyReceivedCmd { // StopNotifySpentCmd defines the stopnotifyspent JSON-RPC command. // -// NOTE: Deprecated. Use LoadTxFilterCmd instead. +// Deprecated: Use LoadTxFilterCmd instead. type StopNotifySpentCmd struct { OutPoints []OutPoint } @@ -170,7 +170,7 @@ type StopNotifySpentCmd struct { // NewStopNotifySpentCmd returns a new instance which can be used to issue a // stopnotifyspent JSON-RPC command. // -// NOTE: Deprecated. Use NewLoadTxFilterCmd instead. +// Deprecated: Use NewLoadTxFilterCmd instead. func NewStopNotifySpentCmd(outPoints []OutPoint) *StopNotifySpentCmd { return &StopNotifySpentCmd{ OutPoints: outPoints, @@ -179,7 +179,7 @@ func NewStopNotifySpentCmd(outPoints []OutPoint) *StopNotifySpentCmd { // RescanCmd defines the rescan JSON-RPC command. // -// NOTE: Deprecated. Use RescanBlocksCmd instead. +// Deprecated: Use RescanBlocksCmd instead. type RescanCmd struct { BeginBlock string Addresses []string @@ -193,7 +193,7 @@ type RescanCmd struct { // The parameters which are pointers indicate they are optional. Passing nil // for optional parameters will use the default value. // -// NOTE: Deprecated. Use NewRescanBlocksCmd instead. +// Deprecated: Use NewRescanBlocksCmd instead. func NewRescanCmd(beginBlock string, addresses []string, outPoints []OutPoint, endBlock *string) *RescanCmd { return &RescanCmd{ BeginBlock: beginBlock, diff --git a/btcjson/chainsvrwscmds_test.go b/btcjson/chainsvrwscmds_test.go index b0cd63cc61..03fb22c8e0 100644 --- a/btcjson/chainsvrwscmds_test.go +++ b/btcjson/chainsvrwscmds_test.go @@ -233,7 +233,7 @@ func TestChainSvrWsCmds(t *testing.T) { for i, test := range tests { // Marshal the command as created by the new static command // creation function. - marshalled, err := btcjson.MarshalCmd(testID, test.staticCmd()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, testID, test.staticCmd()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -257,7 +257,7 @@ func TestChainSvrWsCmds(t *testing.T) { // Marshal the command as created by the generic new command // creation function. - marshalled, err = btcjson.MarshalCmd(testID, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, testID, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/chainsvrwsntfns.go b/btcjson/chainsvrwsntfns.go index 1f1562343c..58b7a54491 100644 --- a/btcjson/chainsvrwsntfns.go +++ b/btcjson/chainsvrwsntfns.go @@ -12,14 +12,14 @@ const ( // BlockConnectedNtfnMethod is the legacy, deprecated method used for // notifications from the chain server that a block has been connected. // - // NOTE: Deprecated. Use FilteredBlockConnectedNtfnMethod instead. + // Deprecated: Use FilteredBlockConnectedNtfnMethod instead. BlockConnectedNtfnMethod = "blockconnected" // BlockDisconnectedNtfnMethod is the legacy, deprecated method used for // notifications from the chain server that a block has been // disconnected. // - // NOTE: Deprecated. Use FilteredBlockDisconnectedNtfnMethod instead. + // Deprecated: Use FilteredBlockDisconnectedNtfnMethod instead. BlockDisconnectedNtfnMethod = "blockdisconnected" // FilteredBlockConnectedNtfnMethod is the new method used for @@ -35,7 +35,7 @@ const ( // notifications from the chain server that a transaction which pays to // a registered address has been processed. // - // NOTE: Deprecated. Use RelevantTxAcceptedNtfnMethod and + // Deprecated: Use RelevantTxAcceptedNtfnMethod and // FilteredBlockConnectedNtfnMethod instead. RecvTxNtfnMethod = "recvtx" @@ -43,7 +43,7 @@ const ( // notifications from the chain server that a transaction which spends a // registered outpoint has been processed. // - // NOTE: Deprecated. Use RelevantTxAcceptedNtfnMethod and + // Deprecated: Use RelevantTxAcceptedNtfnMethod and // FilteredBlockConnectedNtfnMethod instead. RedeemingTxNtfnMethod = "redeemingtx" @@ -51,14 +51,14 @@ const ( // notifications from the chain server that a legacy, deprecated rescan // operation has finished. // - // NOTE: Deprecated. Not used with rescanblocks command. + // Deprecated: Not used with rescanblocks command. RescanFinishedNtfnMethod = "rescanfinished" // RescanProgressNtfnMethod is the legacy, deprecated method used for // notifications from the chain server that a legacy, deprecated rescan // operation this is underway has made progress. // - // NOTE: Deprecated. Not used with rescanblocks command. + // Deprecated: Not used with rescanblocks command. RescanProgressNtfnMethod = "rescanprogress" // TxAcceptedNtfnMethod is the method used for notifications from the @@ -79,7 +79,7 @@ const ( // BlockConnectedNtfn defines the blockconnected JSON-RPC notification. // -// NOTE: Deprecated. Use FilteredBlockConnectedNtfn instead. +// Deprecated: Use FilteredBlockConnectedNtfn instead. type BlockConnectedNtfn struct { Hash string Height int32 @@ -89,7 +89,7 @@ type BlockConnectedNtfn struct { // NewBlockConnectedNtfn returns a new instance which can be used to issue a // blockconnected JSON-RPC notification. // -// NOTE: Deprecated. Use NewFilteredBlockConnectedNtfn instead. +// Deprecated: Use NewFilteredBlockConnectedNtfn instead. func NewBlockConnectedNtfn(hash string, height int32, time int64) *BlockConnectedNtfn { return &BlockConnectedNtfn{ Hash: hash, @@ -100,7 +100,7 @@ func NewBlockConnectedNtfn(hash string, height int32, time int64) *BlockConnecte // BlockDisconnectedNtfn defines the blockdisconnected JSON-RPC notification. // -// NOTE: Deprecated. Use FilteredBlockDisconnectedNtfn instead. +// Deprecated: Use FilteredBlockDisconnectedNtfn instead. type BlockDisconnectedNtfn struct { Hash string Height int32 @@ -110,7 +110,7 @@ type BlockDisconnectedNtfn struct { // NewBlockDisconnectedNtfn returns a new instance which can be used to issue a // blockdisconnected JSON-RPC notification. // -// NOTE: Deprecated. Use NewFilteredBlockDisconnectedNtfn instead. +// Deprecated: Use NewFilteredBlockDisconnectedNtfn instead. func NewBlockDisconnectedNtfn(hash string, height int32, time int64) *BlockDisconnectedNtfn { return &BlockDisconnectedNtfn{ Hash: hash, @@ -163,7 +163,7 @@ type BlockDetails struct { // RecvTxNtfn defines the recvtx JSON-RPC notification. // -// NOTE: Deprecated. Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn +// Deprecated: Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn // instead. type RecvTxNtfn struct { HexTx string @@ -173,7 +173,7 @@ type RecvTxNtfn struct { // NewRecvTxNtfn returns a new instance which can be used to issue a recvtx // JSON-RPC notification. // -// NOTE: Deprecated. Use NewRelevantTxAcceptedNtfn and +// Deprecated: Use NewRelevantTxAcceptedNtfn and // NewFilteredBlockConnectedNtfn instead. func NewRecvTxNtfn(hexTx string, block *BlockDetails) *RecvTxNtfn { return &RecvTxNtfn{ @@ -184,7 +184,7 @@ func NewRecvTxNtfn(hexTx string, block *BlockDetails) *RecvTxNtfn { // RedeemingTxNtfn defines the redeemingtx JSON-RPC notification. // -// NOTE: Deprecated. Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn +// Deprecated: Use RelevantTxAcceptedNtfn and FilteredBlockConnectedNtfn // instead. type RedeemingTxNtfn struct { HexTx string @@ -194,7 +194,7 @@ type RedeemingTxNtfn struct { // NewRedeemingTxNtfn returns a new instance which can be used to issue a // redeemingtx JSON-RPC notification. // -// NOTE: Deprecated. Use NewRelevantTxAcceptedNtfn and +// Deprecated: Use NewRelevantTxAcceptedNtfn and // NewFilteredBlockConnectedNtfn instead. func NewRedeemingTxNtfn(hexTx string, block *BlockDetails) *RedeemingTxNtfn { return &RedeemingTxNtfn{ @@ -205,7 +205,7 @@ func NewRedeemingTxNtfn(hexTx string, block *BlockDetails) *RedeemingTxNtfn { // RescanFinishedNtfn defines the rescanfinished JSON-RPC notification. // -// NOTE: Deprecated. Not used with rescanblocks command. +// Deprecated: Not used with rescanblocks command. type RescanFinishedNtfn struct { Hash string Height int32 @@ -215,7 +215,7 @@ type RescanFinishedNtfn struct { // NewRescanFinishedNtfn returns a new instance which can be used to issue a // rescanfinished JSON-RPC notification. // -// NOTE: Deprecated. Not used with rescanblocks command. +// Deprecated: Not used with rescanblocks command. func NewRescanFinishedNtfn(hash string, height int32, time int64) *RescanFinishedNtfn { return &RescanFinishedNtfn{ Hash: hash, @@ -226,7 +226,7 @@ func NewRescanFinishedNtfn(hash string, height int32, time int64) *RescanFinishe // RescanProgressNtfn defines the rescanprogress JSON-RPC notification. // -// NOTE: Deprecated. Not used with rescanblocks command. +// Deprecated: Not used with rescanblocks command. type RescanProgressNtfn struct { Hash string Height int32 @@ -236,7 +236,7 @@ type RescanProgressNtfn struct { // NewRescanProgressNtfn returns a new instance which can be used to issue a // rescanprogress JSON-RPC notification. // -// NOTE: Deprecated. Not used with rescanblocks command. +// Deprecated: Not used with rescanblocks command. func NewRescanProgressNtfn(hash string, height int32, time int64) *RescanProgressNtfn { return &RescanProgressNtfn{ Hash: hash, diff --git a/btcjson/chainsvrwsntfns_test.go b/btcjson/chainsvrwsntfns_test.go index 2da1e7ad2f..e2b234c2a0 100644 --- a/btcjson/chainsvrwsntfns_test.go +++ b/btcjson/chainsvrwsntfns_test.go @@ -231,7 +231,7 @@ func TestChainSvrWsNtfns(t *testing.T) { for i, test := range tests { // Marshal the notification as created by the new static // creation function. The ID is nil for notifications. - marshalled, err := btcjson.MarshalCmd(nil, test.staticNtfn()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, test.staticNtfn()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -256,7 +256,7 @@ func TestChainSvrWsNtfns(t *testing.T) { // Marshal the notification as created by the generic new // notification creation function. The ID is nil for // notifications. - marshalled, err = btcjson.MarshalCmd(nil, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, nil, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/cmdinfo_test.go b/btcjson/cmdinfo_test.go index 044040279a..61a693e404 100644 --- a/btcjson/cmdinfo_test.go +++ b/btcjson/cmdinfo_test.go @@ -151,7 +151,7 @@ func TestMethodUsageText(t *testing.T) { { name: "getblock", method: "getblock", - expected: `getblock "hash" (verbose=true verbosetx=false)`, + expected: `getblock "hash" (verbosity=1)`, }, } diff --git a/btcjson/cmdparse.go b/btcjson/cmdparse.go index 48c6278a61..4fb8dd6260 100644 --- a/btcjson/cmdparse.go +++ b/btcjson/cmdparse.go @@ -16,26 +16,27 @@ import ( func makeParams(rt reflect.Type, rv reflect.Value) []interface{} { numFields := rt.NumField() params := make([]interface{}, 0, numFields) + lastParam := -1 for i := 0; i < numFields; i++ { rtf := rt.Field(i) rvf := rv.Field(i) + params = append(params, rvf.Interface()) if rtf.Type.Kind() == reflect.Ptr { if rvf.IsNil() { - break + // Omit optional null params unless a non-null param follows + continue } - rvf.Elem() } - params = append(params, rvf.Interface()) + lastParam = i } - - return params + return params[:lastParam+1] } // MarshalCmd marshals the passed command to a JSON-RPC request byte slice that // is suitable for transmission to an RPC server. The provided command type // must be a registered type. All commands provided by this package are // registered by default. -func MarshalCmd(id interface{}, cmd interface{}) ([]byte, error) { +func MarshalCmd(rpcVersion RPCVersion, id interface{}, cmd interface{}) ([]byte, error) { // Look up the cmd type and error out if not registered. rt := reflect.TypeOf(cmd) registerLock.RLock() @@ -59,7 +60,7 @@ func MarshalCmd(id interface{}, cmd interface{}) ([]byte, error) { params := makeParams(rt.Elem(), rv.Elem()) // Generate and marshal the final JSON-RPC request. - rawCmd, err := NewRequest(id, method, params) + rawCmd, err := NewRequest(rpcVersion, id, method, params) if err != nil { return nil, err } @@ -255,6 +256,11 @@ func assignField(paramNum int, fieldName string, dest reflect.Value, src reflect return nil } + // Optional variables can be set null using "null" string + if destIndirects > 0 && src.String() == "null" { + return nil + } + // When the destination has more indirects than the source, the extra // pointers have to be created. Only create enough pointers to reach // the same level of indirection as the source so the dest can simply be diff --git a/btcjson/cmdparse_test.go b/btcjson/cmdparse_test.go index 7c13a0bb44..f2585edf5c 100644 --- a/btcjson/cmdparse_test.go +++ b/btcjson/cmdparse_test.go @@ -162,6 +162,18 @@ func TestAssignField(t *testing.T) { src: `{"1Address":1.5}`, expected: map[string]float64{"1Address": 1.5}, }, + { + name: `null optional field - "null" -> *int32`, + dest: btcjson.Int32(0), + src: "null", + expected: nil, + }, + { + name: `null optional field - "null" -> *string`, + dest: btcjson.String(""), + src: "null", + expected: nil, + }, } t.Logf("Running %d tests", len(tests)) @@ -175,6 +187,15 @@ func TestAssignField(t *testing.T) { continue } + // Check case where null string is used on optional field + if dst.Kind() == reflect.Ptr && test.src == "null" { + if !dst.IsNil() { + t.Errorf("Test #%d (%s) unexpected value - got %v, "+ + "want nil", i, test.name, dst.Interface()) + } + continue + } + // Inidirect through to the base types to ensure their values // are the same. for dst.Kind() == reflect.Ptr { @@ -201,7 +222,7 @@ func TestAssignFieldErrors(t *testing.T) { }{ { name: "general incompatible int -> string", - dest: string(0), + dest: "\x00", src: int(0), err: btcjson.Error{ErrorCode: btcjson.ErrInvalidType}, }, @@ -401,6 +422,59 @@ func TestNewCmdErrors(t *testing.T) { } } +// TestMarshalCmd tests the MarshalCmd function. +func TestMarshalCmd(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + id interface{} + cmd interface{} + expected string + }{ + { + name: "include all parameters", + id: 1, + cmd: btcjson.NewGetNetworkHashPSCmd(btcjson.Int(100), btcjson.Int(2000)), + expected: `{"jsonrpc":"1.0","method":"getnetworkhashps","params":[100,2000],"id":1}`, + }, + { + name: "include padding null parameter", + id: 1, + cmd: btcjson.NewGetNetworkHashPSCmd(nil, btcjson.Int(2000)), + expected: `{"jsonrpc":"1.0","method":"getnetworkhashps","params":[null,2000],"id":1}`, + }, + { + name: "omit single unnecessary null parameter", + id: 1, + cmd: btcjson.NewGetNetworkHashPSCmd(btcjson.Int(100), nil), + expected: `{"jsonrpc":"1.0","method":"getnetworkhashps","params":[100],"id":1}`, + }, + { + name: "omit unnecessary null parameters", + id: 1, + cmd: btcjson.NewGetNetworkHashPSCmd(nil, nil), + expected: `{"jsonrpc":"1.0","method":"getnetworkhashps","params":[],"id":1}`, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + bytes, err := btcjson.MarshalCmd(btcjson.RpcVersion1, test.id, test.cmd) + if err != nil { + t.Errorf("Test #%d (%s) wrong error - got %T (%v)", + i, test.name, err, err) + continue + } + marshalled := string(bytes) + if marshalled != test.expected { + t.Errorf("Test #%d (%s) mismatched marshall result - got "+ + "%v, want %v", i, test.name, marshalled, test.expected) + continue + } + } +} + // TestMarshalCmdErrors tests the error paths of the MarshalCmd function. func TestMarshalCmdErrors(t *testing.T) { t.Parallel() @@ -433,7 +507,7 @@ func TestMarshalCmdErrors(t *testing.T) { t.Logf("Running %d tests", len(tests)) for i, test := range tests { - _, err := btcjson.MarshalCmd(test.id, test.cmd) + _, err := btcjson.MarshalCmd(btcjson.RpcVersion1, test.id, test.cmd) if reflect.TypeOf(err) != reflect.TypeOf(test.err) { t.Errorf("Test #%d (%s) wrong error - got %T (%v), "+ "want %T", i, test.name, err, err, test.err) @@ -461,7 +535,7 @@ func TestUnmarshalCmdErrors(t *testing.T) { { name: "unregistered type", request: btcjson.Request{ - Jsonrpc: "1.0", + Jsonrpc: btcjson.RpcVersion1, Method: "bogusmethod", Params: nil, ID: nil, @@ -471,7 +545,7 @@ func TestUnmarshalCmdErrors(t *testing.T) { { name: "incorrect number of params", request: btcjson.Request{ - Jsonrpc: "1.0", + Jsonrpc: btcjson.RpcVersion1, Method: "getblockcount", Params: []json.RawMessage{[]byte(`"bogusparam"`)}, ID: nil, @@ -481,7 +555,7 @@ func TestUnmarshalCmdErrors(t *testing.T) { { name: "invalid type for a parameter", request: btcjson.Request{ - Jsonrpc: "1.0", + Jsonrpc: btcjson.RpcVersion1, Method: "getblock", Params: []json.RawMessage{[]byte("1")}, ID: nil, @@ -491,7 +565,7 @@ func TestUnmarshalCmdErrors(t *testing.T) { { name: "invalid JSON for a parameter", request: btcjson.Request{ - Jsonrpc: "1.0", + Jsonrpc: btcjson.RpcVersion1, Method: "getblock", Params: []json.RawMessage{[]byte(`"1`)}, ID: nil, diff --git a/btcjson/example_test.go b/btcjson/example_test.go index 527252c7fb..74478e7482 100644 --- a/btcjson/example_test.go +++ b/btcjson/example_test.go @@ -21,13 +21,13 @@ func ExampleMarshalCmd() { // convenience function for creating a pointer out of a primitive for // optional parameters. blockHash := "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f" - gbCmd := btcjson.NewGetBlockCmd(blockHash, btcjson.Bool(false), nil) + gbCmd := btcjson.NewGetBlockCmd(blockHash, btcjson.Int(0)) // Marshal the command to the format suitable for sending to the RPC // server. Typically the client would increment the id here which is // request so the response can be identified. id := 1 - marshalledBytes, err := btcjson.MarshalCmd(id, gbCmd) + marshalledBytes, err := btcjson.MarshalCmd(btcjson.RpcVersion1, id, gbCmd) if err != nil { fmt.Println(err) return @@ -38,7 +38,7 @@ func ExampleMarshalCmd() { fmt.Printf("%s\n", marshalledBytes) // Output: - // {"jsonrpc":"1.0","method":"getblock","params":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",false],"id":1} + // {"jsonrpc":"1.0","method":"getblock","params":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",0],"id":1} } // This example demonstrates how to unmarshal a JSON-RPC request and then @@ -46,7 +46,7 @@ func ExampleMarshalCmd() { func ExampleUnmarshalCmd() { // Ordinarily this would be read from the wire, but for this example, // it is hard coded here for clarity. - data := []byte(`{"jsonrpc":"1.0","method":"getblock","params":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",false],"id":1}`) + data := []byte(`{"jsonrpc":"1.0","method":"getblock","params":["000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",0],"id":1}`) // Unmarshal the raw bytes from the wire into a JSON-RPC request. var request btcjson.Request @@ -84,20 +84,18 @@ func ExampleUnmarshalCmd() { // Display the fields in the concrete command. fmt.Println("Hash:", gbCmd.Hash) - fmt.Println("Verbose:", *gbCmd.Verbose) - fmt.Println("VerboseTx:", *gbCmd.VerboseTx) + fmt.Println("Verbosity:", *gbCmd.Verbosity) // Output: // Hash: 000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f - // Verbose: false - // VerboseTx: false + // Verbosity: 0 } // This example demonstrates how to marshal a JSON-RPC response. func ExampleMarshalResponse() { // Marshal a new JSON-RPC response. For example, this is a response // to a getblockheight request. - marshalledBytes, err := btcjson.MarshalResponse(1, 350001, nil) + marshalledBytes, err := btcjson.MarshalResponse(btcjson.RpcVersion1, 1, 350001, nil) if err != nil { fmt.Println(err) return @@ -109,7 +107,7 @@ func ExampleMarshalResponse() { fmt.Printf("%s\n", marshalledBytes) // Output: - // {"result":350001,"error":null,"id":1} + // {"jsonrpc":"1.0","result":350001,"error":null,"id":1} } // This example demonstrates how to unmarshal a JSON-RPC response and then @@ -118,7 +116,7 @@ func Example_unmarshalResponse() { // Ordinarily this would be read from the wire, but for this example, // it is hard coded here for clarity. This is an example response to a // getblockheight request. - data := []byte(`{"result":350001,"error":null,"id":1}`) + data := []byte(`{"jsonrpc":"1.0","result":350001,"error":null,"id":1}`) // Unmarshal the raw bytes from the wire into a JSON-RPC response. var response btcjson.Response diff --git a/btcjson/helpers.go b/btcjson/helpers.go index d9b452e7c3..eda26cb885 100644 --- a/btcjson/helpers.go +++ b/btcjson/helpers.go @@ -75,3 +75,11 @@ func String(v string) *string { *p = v return p } + +// NewFilterTypeName is a helper routine that allocates a new FilterTypeName value to store v and +// returns a pointer to it. This is useful when assigning optional parameters. +func NewFilterTypeName(v FilterTypeName) *FilterTypeName { + p := new(FilterTypeName) + *p = v + return p +} diff --git a/btcjson/jsonrpc.go b/btcjson/jsonrpc.go index e99d9f4265..ea4a213bca 100644 --- a/btcjson/jsonrpc.go +++ b/btcjson/jsonrpc.go @@ -9,6 +9,33 @@ import ( "fmt" ) +// RPCVersion is a type to indicate RPC versions. +type RPCVersion string + +const ( + // version 1 of rpc + RpcVersion1 RPCVersion = RPCVersion("1.0") + // version 2 of rpc + RpcVersion2 RPCVersion = RPCVersion("2.0") +) + +var validRpcVersions = []RPCVersion{RpcVersion1, RpcVersion2} + +// check if the rpc version is a valid version +func (r RPCVersion) IsValid() bool { + for _, version := range validRpcVersions { + if version == r { + return true + } + } + return false +} + +// cast rpc version to a string +func (r RPCVersion) String() string { + return string(r) +} + // RPCErrorCode represents an error code to be used as a part of an RPCError // which is in turn used in a JSON-RPC Response object. // @@ -22,10 +49,10 @@ type RPCError struct { Message string `json:"message,omitempty"` } -// Guarantee RPCError satisifies the builtin error interface. +// Guarantee RPCError satisfies the builtin error interface. var _, _ error = RPCError{}, (*RPCError)(nil) -// Error returns a string describing the RPC error. This satisifies the +// Error returns a string describing the RPC error. This satisfies the // builtin error interface. func (e RPCError) Error() string { return fmt.Sprintf("%d: %s", e.Code, e.Message) @@ -67,21 +94,77 @@ func IsValidIDType(id interface{}) bool { // requests, however this struct it being exported in case the caller wants to // construct raw requests for some reason. type Request struct { - Jsonrpc string `json:"jsonrpc"` + Jsonrpc RPCVersion `json:"jsonrpc"` Method string `json:"method"` Params []json.RawMessage `json:"params"` ID interface{} `json:"id"` } -// NewRequest returns a new JSON-RPC 1.0 request object given the provided id, -// method, and parameters. The parameters are marshalled into a json.RawMessage -// for the Params field of the returned request object. This function is only -// provided in case the caller wants to construct raw requests for some reason. -// -// Typically callers will instead want to create a registered concrete command -// type with the NewCmd or NewCmd functions and call the MarshalCmd -// function with that command to generate the marshalled JSON-RPC request. -func NewRequest(id interface{}, method string, params []interface{}) (*Request, error) { +// UnmarshalJSON is a custom unmarshal func for the Request struct. The param +// field defaults to an empty json.RawMessage array it is omitted by the request +// or nil if the supplied value is invalid. +func (request *Request) UnmarshalJSON(b []byte) error { + // Step 1: Create a type alias of the original struct. + type Alias Request + + // Step 2: Create an anonymous struct with raw replacements for the special + // fields. + aux := &struct { + Jsonrpc string `json:"jsonrpc"` + Params []interface{} `json:"params"` + *Alias + }{ + Alias: (*Alias)(request), + } + + // Step 3: Unmarshal the data into the anonymous struct. + err := json.Unmarshal(b, &aux) + if err != nil { + return err + } + + // Step 4: Convert the raw fields to the desired types + + version := RPCVersion(aux.Jsonrpc) + if version.IsValid() { + request.Jsonrpc = version + } + + rawParams := make([]json.RawMessage, 0) + + for _, param := range aux.Params { + marshalledParam, err := json.Marshal(param) + if err != nil { + return err + } + + rawMessage := json.RawMessage(marshalledParam) + rawParams = append(rawParams, rawMessage) + } + + request.Params = rawParams + + return nil +} + +// NewRequest returns a new JSON-RPC request object given the provided rpc +// version, id, method, and parameters. The parameters are marshalled into a +// json.RawMessage for the Params field of the returned request object. This +// function is only provided in case the caller wants to construct raw requests +// for some reason. Typically callers will instead want to create a registered +// concrete command type with the NewCmd or NewCmd functions and call the +// MarshalCmd function with that command to generate the marshalled JSON-RPC +// request. +func NewRequest(rpcVersion RPCVersion, id interface{}, method string, params []interface{}) (*Request, error) { + // default to JSON-RPC 1.0 if RPC type is not specified + if rpcVersion == "" { + rpcVersion = RpcVersion1 + } + if !rpcVersion.IsValid() { + str := fmt.Sprintf("rpcversion '%s' is invalid", rpcVersion) + return nil, makeError(ErrInvalidType, str) + } + if !IsValidIDType(id) { str := fmt.Sprintf("the id of type '%T' is invalid", id) return nil, makeError(ErrInvalidType, str) @@ -98,30 +181,35 @@ func NewRequest(id interface{}, method string, params []interface{}) (*Request, } return &Request{ - Jsonrpc: "1.0", + Jsonrpc: rpcVersion, ID: id, Method: method, Params: rawParams, }, nil } -// Response is the general form of a JSON-RPC response. The type of the Result -// field varies from one command to the next, so it is implemented as an -// interface. The ID field has to be a pointer for Go to put a null in it when +// Response is the general form of a JSON-RPC response. The type of the +// Result field varies from one command to the next, so it is implemented as an +// interface. The ID field has to be a pointer to allow for a nil value when // empty. type Response struct { - Result json.RawMessage `json:"result"` - Error *RPCError `json:"error"` - ID *interface{} `json:"id"` + Jsonrpc RPCVersion `json:"jsonrpc"` + Result json.RawMessage `json:"result"` + Error *RPCError `json:"error"` + ID *interface{} `json:"id"` } -// NewResponse returns a new JSON-RPC response object given the provided id, -// marshalled result, and RPC error. This function is only provided in case the -// caller wants to construct raw responses for some reason. -// +// NewResponse returns a new JSON-RPC response object given the provided rpc +// version, id, marshalled result, and RPC error. This function is only +// provided in case the caller wants to construct raw responses for some reason. // Typically callers will instead want to create the fully marshalled JSON-RPC // response to send over the wire with the MarshalResponse function. -func NewResponse(id interface{}, marshalledResult []byte, rpcErr *RPCError) (*Response, error) { +func NewResponse(rpcVersion RPCVersion, id interface{}, marshalledResult []byte, rpcErr *RPCError) (*Response, error) { + if !rpcVersion.IsValid() { + str := fmt.Sprintf("rpcversion '%s' is invalid", rpcVersion) + return nil, makeError(ErrInvalidType, str) + } + if !IsValidIDType(id) { str := fmt.Sprintf("the id of type '%T' is invalid", id) return nil, makeError(ErrInvalidType, str) @@ -129,20 +217,27 @@ func NewResponse(id interface{}, marshalledResult []byte, rpcErr *RPCError) (*Re pid := &id return &Response{ - Result: marshalledResult, - Error: rpcErr, - ID: pid, + Jsonrpc: rpcVersion, + Result: marshalledResult, + Error: rpcErr, + ID: pid, }, nil } -// MarshalResponse marshals the passed id, result, and RPCError to a JSON-RPC -// response byte slice that is suitable for transmission to a JSON-RPC client. -func MarshalResponse(id interface{}, result interface{}, rpcErr *RPCError) ([]byte, error) { +// MarshalResponse marshals the passed rpc version, id, result, and RPCError to +// a JSON-RPC response byte slice that is suitable for transmission to a +// JSON-RPC client. +func MarshalResponse(rpcVersion RPCVersion, id interface{}, result interface{}, rpcErr *RPCError) ([]byte, error) { + if !rpcVersion.IsValid() { + str := fmt.Sprintf("rpcversion '%s' is invalid", rpcVersion) + return nil, makeError(ErrInvalidType, str) + } + marshalledResult, err := json.Marshal(result) if err != nil { return nil, err } - response, err := NewResponse(id, marshalledResult, rpcErr) + response, err := NewResponse(rpcVersion, id, marshalledResult, rpcErr) if err != nil { return nil, err } diff --git a/btcjson/jsonrpc_test.go b/btcjson/jsonrpc_test.go index 7a5d75618c..13d98e89f5 100644 --- a/btcjson/jsonrpc_test.go +++ b/btcjson/jsonrpc_test.go @@ -68,7 +68,7 @@ func TestMarshalResponse(t *testing.T) { name: "ordinary bool result with no error", result: true, jsonErr: nil, - expected: []byte(`{"result":true,"error":null,"id":1}`), + expected: []byte(`{"jsonrpc":"1.0","result":true,"error":null,"id":1}`), }, { name: "result with error", @@ -76,14 +76,14 @@ func TestMarshalResponse(t *testing.T) { jsonErr: func() *btcjson.RPCError { return btcjson.NewRPCError(btcjson.ErrRPCBlockNotFound, "123 not found") }(), - expected: []byte(`{"result":null,"error":{"code":-5,"message":"123 not found"},"id":1}`), + expected: []byte(`{"jsonrpc":"1.0","result":null,"error":{"code":-5,"message":"123 not found"},"id":1}`), }, } t.Logf("Running %d tests", len(tests)) for i, test := range tests { _, _ = i, test - marshalled, err := btcjson.MarshalResponse(testID, test.result, test.jsonErr) + marshalled, err := btcjson.MarshalResponse(btcjson.RpcVersion1, testID, test.result, test.jsonErr) if err != nil { t.Errorf("Test #%d (%s) unexpected error: %v", i, test.name, err) @@ -104,7 +104,7 @@ func TestMiscErrors(t *testing.T) { // Force an error in NewRequest by giving it a parameter type that is // not supported. - _, err := btcjson.NewRequest(nil, "test", []interface{}{make(chan int)}) + _, err := btcjson.NewRequest(btcjson.RpcVersion1, nil, "test", []interface{}{make(chan int)}) if err == nil { t.Error("NewRequest: did not receive error") return @@ -113,7 +113,7 @@ func TestMiscErrors(t *testing.T) { // Force an error in MarshalResponse by giving it an id type that is not // supported. wantErr := btcjson.Error{ErrorCode: btcjson.ErrInvalidType} - _, err = btcjson.MarshalResponse(make(chan int), nil, nil) + _, err = btcjson.MarshalResponse(btcjson.RpcVersion1, make(chan int), nil, nil) if jerr, ok := err.(btcjson.Error); !ok || jerr.ErrorCode != wantErr.ErrorCode { t.Errorf("MarshalResult: did not receive expected error - got "+ "%v (%[1]T), want %v (%[2]T)", err, wantErr) @@ -122,7 +122,7 @@ func TestMiscErrors(t *testing.T) { // Force an error in MarshalResponse by giving it a result type that // can't be marshalled. - _, err = btcjson.MarshalResponse(1, make(chan int), nil) + _, err = btcjson.MarshalResponse(btcjson.RpcVersion1, 1, make(chan int), nil) if _, ok := err.(*json.UnsupportedTypeError); !ok { wantErr := &json.UnsupportedTypeError{} t.Errorf("MarshalResult: did not receive expected error - got "+ diff --git a/btcjson/jsonrpcerr.go b/btcjson/jsonrpcerr.go index 8996c47461..e5872bc51b 100644 --- a/btcjson/jsonrpcerr.go +++ b/btcjson/jsonrpcerr.go @@ -30,35 +30,136 @@ var ( // General application defined JSON errors. const ( - ErrRPCMisc RPCErrorCode = -1 + // ErrRPCMisc indicates an exception thrown during command handling. + ErrRPCMisc RPCErrorCode = -1 + + // ErrRPCForbiddenBySafeMode indicates that server is in safe mode, and + // command is not allowed in safe mode. ErrRPCForbiddenBySafeMode RPCErrorCode = -2 - ErrRPCType RPCErrorCode = -3 + + // ErrRPCType indicates that an unexpected type was passed as parameter. + ErrRPCType RPCErrorCode = -3 + + // ErrRPCInvalidAddressOrKey indicates an invalid address or key. ErrRPCInvalidAddressOrKey RPCErrorCode = -5 - ErrRPCOutOfMemory RPCErrorCode = -7 - ErrRPCInvalidParameter RPCErrorCode = -8 - ErrRPCDatabase RPCErrorCode = -20 - ErrRPCDeserialization RPCErrorCode = -22 - ErrRPCVerify RPCErrorCode = -25 + + // ErrRPCOutOfMemory indicates that the server ran out of memory during + // operation. + ErrRPCOutOfMemory RPCErrorCode = -7 + + // ErrRPCInvalidParameter indicates an invalid, missing, or duplicate + // parameter. + ErrRPCInvalidParameter RPCErrorCode = -8 + + // ErrRPCDatabase indicates a database error. + ErrRPCDatabase RPCErrorCode = -20 + + // ErrRPCDeserialization indicates an error parsing or validating structure + // in raw format. + ErrRPCDeserialization RPCErrorCode = -22 + + // ErrRPCVerify indicates a general error during transaction or block + // submission. + ErrRPCVerify RPCErrorCode = -25 + + // ErrRPCVerifyRejected indicates that transaction or block was rejected by + // network rules. + ErrRPCVerifyRejected RPCErrorCode = -26 + + // ErrRPCVerifyAlreadyInChain indicates that submitted transaction is + // already in chain. + ErrRPCVerifyAlreadyInChain RPCErrorCode = -27 + + // ErrRPCInWarmup indicates that client is still warming up. + ErrRPCInWarmup RPCErrorCode = -28 + + // ErrRPCInWarmup indicates that the RPC error is deprecated. + ErrRPCMethodDeprecated RPCErrorCode = -32 ) // Peer-to-peer client errors. const ( - ErrRPCClientNotConnected RPCErrorCode = -9 + // ErrRPCClientNotConnected indicates that Bitcoin is not connected. + ErrRPCClientNotConnected RPCErrorCode = -9 + + // ErrRPCClientInInitialDownload indicates that client is still downloading + // initial blocks. ErrRPCClientInInitialDownload RPCErrorCode = -10 - ErrRPCClientNodeNotAdded RPCErrorCode = -24 + + // ErrRPCClientNodeAlreadyAdded indicates that node is already added. + ErrRPCClientNodeAlreadyAdded RPCErrorCode = -23 + + // ErrRPCClientNodeNotAdded indicates that node has not been added before. + ErrRPCClientNodeNotAdded RPCErrorCode = -24 + + // ErrRPCClientNodeNotConnected indicates that node to disconnect was not + // found in connected nodes. + ErrRPCClientNodeNotConnected RPCErrorCode = -29 + + // ErrRPCClientInvalidIPOrSubnet indicates an invalid IP/Subnet. + ErrRPCClientInvalidIPOrSubnet RPCErrorCode = -30 + + // ErrRPCClientP2PDisabled indicates that no valid connection manager + // instance was found. + ErrRPCClientP2PDisabled RPCErrorCode = -31 +) + +// Chain errors +const ( + // ErrRPCClientMempoolDisabled indicates that no mempool instance was + // found. + ErrRPCClientMempoolDisabled RPCErrorCode = -33 ) // Wallet JSON errors const ( - ErrRPCWallet RPCErrorCode = -4 - ErrRPCWalletInsufficientFunds RPCErrorCode = -6 - ErrRPCWalletInvalidAccountName RPCErrorCode = -11 - ErrRPCWalletKeypoolRanOut RPCErrorCode = -12 - ErrRPCWalletUnlockNeeded RPCErrorCode = -13 + // ErrRPCWallet indicates an unspecified problem with wallet, for + // example, key not found, etc. + ErrRPCWallet RPCErrorCode = -4 + + // ErrRPCWalletInvalidAddressType indicates an invalid address type. + ErrRPCWalletInvalidAddressType RPCErrorCode = -5 + + // ErrRPCWalletInsufficientFunds indicates that there are not enough + // funds in wallet or account. + ErrRPCWalletInsufficientFunds RPCErrorCode = -6 + + // ErrRPCWalletInvalidAccountName indicates an invalid label name. + ErrRPCWalletInvalidAccountName RPCErrorCode = -11 + + // ErrRPCWalletKeypoolRanOut indicates that the keypool ran out, and that + // keypoolrefill must be called first. + ErrRPCWalletKeypoolRanOut RPCErrorCode = -12 + + // ErrRPCWalletUnlockNeeded indicates that the wallet passphrase must be + // entered first with the walletpassphrase RPC. + ErrRPCWalletUnlockNeeded RPCErrorCode = -13 + + // ErrRPCWalletPassphraseIncorrect indicates that the wallet passphrase + // that was entered was incorrect. ErrRPCWalletPassphraseIncorrect RPCErrorCode = -14 - ErrRPCWalletWrongEncState RPCErrorCode = -15 - ErrRPCWalletEncryptionFailed RPCErrorCode = -16 - ErrRPCWalletAlreadyUnlocked RPCErrorCode = -17 + + // ErrRPCWalletWrongEncState indicates that a command was given in wrong + // wallet encryption state, for example, encrypting an encrypted wallet. + ErrRPCWalletWrongEncState RPCErrorCode = -15 + + // ErrRPCWalletEncryptionFailed indicates a failure to encrypt the wallet. + ErrRPCWalletEncryptionFailed RPCErrorCode = -16 + + // ErrRPCWalletAlreadyUnlocked indicates an attempt to unlock a wallet + // that was already unlocked. + ErrRPCWalletAlreadyUnlocked RPCErrorCode = -17 + + // ErrRPCWalletNotFound indicates that an invalid wallet was specified, + // which does not exist. It can also indicate an attempt to unload a + // wallet that was not previously loaded. + // + // Not to be confused with ErrRPCNoWallet, which is specific to btcd. + ErrRPCWalletNotFound RPCErrorCode = -18 + + // ErrRPCWalletNotSpecified indicates that no wallet was specified, for + // example, when there are multiple wallets loaded. + ErrRPCWalletNotSpecified RPCErrorCode = -19 ) // Specific Errors related to commands. These are the ones a user of the RPC diff --git a/btcjson/register.go b/btcjson/register.go index 5de001c91e..10cd0f9a86 100644 --- a/btcjson/register.go +++ b/btcjson/register.go @@ -287,6 +287,6 @@ func RegisteredCmdMethods() []string { methods = append(methods, k) } - sort.Sort(sort.StringSlice(methods)) + sort.Strings(methods) return methods } diff --git a/btcjson/register_test.go b/btcjson/register_test.go index 3832678aaf..2d3ab10f3e 100644 --- a/btcjson/register_test.go +++ b/btcjson/register_test.go @@ -256,7 +256,7 @@ func TestRegisteredCmdMethods(t *testing.T) { // Ensure the returned methods are sorted. sortedMethods := make([]string, len(methods)) copy(sortedMethods, methods) - sort.Sort(sort.StringSlice(sortedMethods)) + sort.Strings(sortedMethods) if !reflect.DeepEqual(sortedMethods, methods) { t.Fatal("RegisteredCmdMethods: methods are not sorted") } diff --git a/btcjson/walletsvrcmds.go b/btcjson/walletsvrcmds.go index 6697555172..5983d3f783 100644 --- a/btcjson/walletsvrcmds.go +++ b/btcjson/walletsvrcmds.go @@ -1,4 +1,4 @@ -// Copyright (c) 2014 The btcsuite developers +// Copyright (c) 2014-2020 The btcsuite developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -7,6 +7,14 @@ package btcjson +import ( + "encoding/hex" + "encoding/json" + "fmt" + + "github.com/btcsuite/btcd/btcutil" +) + // AddMultisigAddressCmd defines the addmutisigaddress JSON-RPC command. type AddMultisigAddressCmd struct { NRequired int @@ -55,6 +63,28 @@ func NewCreateMultisigCmd(nRequired int, keys []string) *CreateMultisigCmd { } } +// CreateWalletCmd defines the createwallet JSON-RPC command. +type CreateWalletCmd struct { + WalletName string + DisablePrivateKeys *bool `jsonrpcdefault:"false"` + Blank *bool `jsonrpcdefault:"false"` + Passphrase *string `jsonrpcdefault:"\"\""` + AvoidReuse *bool `jsonrpcdefault:"false"` +} + +// NewCreateWalletCmd returns a new instance which can be used to issue a +// createwallet JSON-RPC command. +func NewCreateWalletCmd(walletName string, disablePrivateKeys *bool, + blank *bool, passphrase *string, avoidReuse *bool) *CreateWalletCmd { + return &CreateWalletCmd{ + WalletName: walletName, + DisablePrivateKeys: disablePrivateKeys, + Blank: blank, + Passphrase: passphrase, + AvoidReuse: avoidReuse, + } +} + // DumpPrivKeyCmd defines the dumpprivkey JSON-RPC command. type DumpPrivKeyCmd struct { Address string @@ -81,6 +111,30 @@ func NewEncryptWalletCmd(passphrase string) *EncryptWalletCmd { } } +// EstimateSmartFeeMode defines the different fee estimation modes available +// for the estimatesmartfee JSON-RPC command. +type EstimateSmartFeeMode string + +var ( + EstimateModeUnset EstimateSmartFeeMode = "UNSET" + EstimateModeEconomical EstimateSmartFeeMode = "ECONOMICAL" + EstimateModeConservative EstimateSmartFeeMode = "CONSERVATIVE" +) + +// EstimateSmartFeeCmd defines the estimatesmartfee JSON-RPC command. +type EstimateSmartFeeCmd struct { + ConfTarget int64 + EstimateMode *EstimateSmartFeeMode `jsonrpcdefault:"\"CONSERVATIVE\""` +} + +// NewEstimateSmartFeeCmd returns a new instance which can be used to issue a +// estimatesmartfee JSON-RPC command. +func NewEstimateSmartFeeCmd(confTarget int64, mode *EstimateSmartFeeMode) *EstimateSmartFeeCmd { + return &EstimateSmartFeeCmd{ + ConfTarget: confTarget, EstimateMode: mode, + } +} + // EstimateFeeCmd defines the estimatefee JSON-RPC command. type EstimateFeeCmd struct { NumBlocks int64 @@ -146,6 +200,19 @@ func NewGetAddressesByAccountCmd(account string) *GetAddressesByAccountCmd { } } +// GetAddressInfoCmd defines the getaddressinfo JSON-RPC command. +type GetAddressInfoCmd struct { + Address string +} + +// NewGetAddressInfoCmd returns a new instance which can be used to issue a +// getaddressinfo JSON-RPC command. +func NewGetAddressInfoCmd(address string) *GetAddressInfoCmd { + return &GetAddressInfoCmd{ + Address: address, + } +} + // GetBalanceCmd defines the getbalance JSON-RPC command. type GetBalanceCmd struct { Account *string @@ -164,9 +231,19 @@ func NewGetBalanceCmd(account *string, minConf *int) *GetBalanceCmd { } } +// GetBalancesCmd defines the getbalances JSON-RPC command. +type GetBalancesCmd struct{} + +// NewGetBalancesCmd returns a new instance which can be used to issue a +// getbalances JSON-RPC command. +func NewGetBalancesCmd() *GetBalancesCmd { + return &GetBalancesCmd{} +} + // GetNewAddressCmd defines the getnewaddress JSON-RPC command. type GetNewAddressCmd struct { - Account *string + Account *string + AddressType *string } // NewGetNewAddressCmd returns a new instance which can be used to issue a @@ -174,15 +251,17 @@ type GetNewAddressCmd struct { // // The parameters which are pointers indicate they are optional. Passing nil // for optional parameters will use the default value. -func NewGetNewAddressCmd(account *string) *GetNewAddressCmd { +func NewGetNewAddressCmd(account, addrType *string) *GetNewAddressCmd { return &GetNewAddressCmd{ - Account: account, + Account: account, + AddressType: addrType, } } // GetRawChangeAddressCmd defines the getrawchangeaddress JSON-RPC command. type GetRawChangeAddressCmd struct { - Account *string + Account *string + AddressType *string } // NewGetRawChangeAddressCmd returns a new instance which can be used to issue a @@ -190,9 +269,10 @@ type GetRawChangeAddressCmd struct { // // The parameters which are pointers indicate they are optional. Passing nil // for optional parameters will use the default value. -func NewGetRawChangeAddressCmd(account *string) *GetRawChangeAddressCmd { +func NewGetRawChangeAddressCmd(account, addrType *string) *GetRawChangeAddressCmd { return &GetRawChangeAddressCmd{ - Account: account, + Account: account, + AddressType: addrType, } } @@ -259,6 +339,39 @@ func NewGetWalletInfoCmd() *GetWalletInfoCmd { return &GetWalletInfoCmd{} } +// BackupWalletCmd defines the backupwallet JSON-RPC command +type BackupWalletCmd struct { + Destination string +} + +// NewBackupWalletCmd returns a new instance which can be used to issue a +// backupwallet JSON-RPC command +func NewBackupWalletCmd(destination string) *BackupWalletCmd { + return &BackupWalletCmd{Destination: destination} +} + +// UnloadWalletCmd defines the unloadwallet JSON-RPC command +type UnloadWalletCmd struct { + WalletName *string +} + +// NewUnloadWalletCmd returns a new instance which can be used to issue a +// unloadwallet JSON-RPC command. +func NewUnloadWalletCmd(walletName *string) *UnloadWalletCmd { + return &UnloadWalletCmd{WalletName: walletName} +} + +// LoadWalletCmd defines the loadwallet JSON-RPC command +type LoadWalletCmd struct { + WalletName string +} + +// NewLoadWalletCmd returns a new instance which can be used to issue a +// loadwallet JSON-RPC command +func NewLoadWalletCmd(walletName string) *LoadWalletCmd { + return &LoadWalletCmd{WalletName: walletName} +} + // ImportPrivKeyCmd defines the importprivkey JSON-RPC command. type ImportPrivKeyCmd struct { PrivKey string @@ -614,6 +727,39 @@ func NewSignRawTransactionCmd(hexEncodedTx string, inputs *[]RawTxInput, privKey } } +// RawTxWitnessInput models the data needed for raw transaction input that is used in +// the SignRawTransactionWithWalletCmd struct. The RedeemScript is required for P2SH inputs, +// the WitnessScript is required for P2WSH or P2SH-P2WSH witness scripts, and the Amount is +// required for Segwit inputs. Otherwise, those fields can be left blank. +type RawTxWitnessInput struct { + Txid string `json:"txid"` + Vout uint32 `json:"vout"` + ScriptPubKey string `json:"scriptPubKey"` + RedeemScript *string `json:"redeemScript,omitempty"` + WitnessScript *string `json:"witnessScript,omitempty"` + Amount *float64 `json:"amount,omitempty"` // In BTC +} + +// SignRawTransactionWithWalletCmd defines the signrawtransactionwithwallet JSON-RPC command. +type SignRawTransactionWithWalletCmd struct { + RawTx string + Inputs *[]RawTxWitnessInput + SigHashType *string `jsonrpcdefault:"\"ALL\""` +} + +// NewSignRawTransactionWithWalletCmd returns a new instance which can be used to issue a +// signrawtransactionwithwallet JSON-RPC command. +// +// The parameters which are pointers indicate they are optional. Passing nil +// for optional parameters will use the default value. +func NewSignRawTransactionWithWalletCmd(hexEncodedTx string, inputs *[]RawTxWitnessInput, sigHashType *string) *SignRawTransactionWithWalletCmd { + return &SignRawTransactionWithWalletCmd{ + RawTx: hexEncodedTx, + Inputs: inputs, + SigHashType: sigHashType, + } +} + // WalletLockCmd defines the walletlock JSON-RPC command. type WalletLockCmd struct{} @@ -653,27 +799,317 @@ func NewWalletPassphraseChangeCmd(oldPassphrase, newPassphrase string) *WalletPa } } +// TimestampOrNow defines a type to represent a timestamp value in seconds, +// since epoch. +// +// The value can either be a integer, or the string "now". +// +// NOTE: Interpretation of the timestamp value depends upon the specific +// JSON-RPC command, where it is used. +type TimestampOrNow struct { + Value interface{} +} + +// MarshalJSON implements the json.Marshaler interface for TimestampOrNow +func (t TimestampOrNow) MarshalJSON() ([]byte, error) { + return json.Marshal(t.Value) +} + +// UnmarshalJSON implements the json.Unmarshaler interface for TimestampOrNow +func (t *TimestampOrNow) UnmarshalJSON(data []byte) error { + var unmarshalled interface{} + if err := json.Unmarshal(data, &unmarshalled); err != nil { + return err + } + + switch v := unmarshalled.(type) { + case float64: + t.Value = int(v) + case string: + if v != "now" { + return fmt.Errorf("invalid timestamp value: %v", unmarshalled) + } + t.Value = v + default: + return fmt.Errorf("invalid timestamp value: %v", unmarshalled) + } + return nil +} + +// ScriptPubKeyAddress represents an address, to be used in conjunction with +// ScriptPubKey. +type ScriptPubKeyAddress struct { + Address string `json:"address"` +} + +// ScriptPubKey represents a script (as a string) or an address +// (as a ScriptPubKeyAddress). +type ScriptPubKey struct { + Value interface{} +} + +// MarshalJSON implements the json.Marshaler interface for ScriptPubKey +func (s ScriptPubKey) MarshalJSON() ([]byte, error) { + return json.Marshal(s.Value) +} + +// UnmarshalJSON implements the json.Unmarshaler interface for ScriptPubKey +func (s *ScriptPubKey) UnmarshalJSON(data []byte) error { + var unmarshalled interface{} + if err := json.Unmarshal(data, &unmarshalled); err != nil { + return err + } + + switch v := unmarshalled.(type) { + case string: + s.Value = v + case map[string]interface{}: + s.Value = ScriptPubKeyAddress{Address: v["address"].(string)} + default: + return fmt.Errorf("invalid scriptPubKey value: %v", unmarshalled) + } + return nil +} + +// DescriptorRange specifies the limits of a ranged Descriptor. +// +// Descriptors are typically ranged when specified in the form of generic HD +// chain paths. +// Example of a ranged descriptor: pkh(tpub.../*) +// +// The value can be an int to specify the end of the range, or the range +// itself, as []int{begin, end}. +type DescriptorRange struct { + Value interface{} +} + +// MarshalJSON implements the json.Marshaler interface for DescriptorRange +func (r DescriptorRange) MarshalJSON() ([]byte, error) { + return json.Marshal(r.Value) +} + +// UnmarshalJSON implements the json.Unmarshaler interface for DescriptorRange +func (r *DescriptorRange) UnmarshalJSON(data []byte) error { + var unmarshalled interface{} + if err := json.Unmarshal(data, &unmarshalled); err != nil { + return err + } + + switch v := unmarshalled.(type) { + case float64: + r.Value = int(v) + case []interface{}: + if len(v) != 2 { + return fmt.Errorf("expected [begin,end] integer range, got: %v", unmarshalled) + } + r.Value = []int{ + int(v[0].(float64)), + int(v[1].(float64)), + } + default: + return fmt.Errorf("invalid descriptor range value: %v", unmarshalled) + } + return nil +} + +// ImportMultiRequest defines the request struct to be passed to the +// ImportMultiCmd, as an array. +type ImportMultiRequest struct { + // Descriptor to import, in canonical form. If using Descriptor, do not + // also provide ScriptPubKey, RedeemScript, WitnessScript, PubKeys, or Keys. + Descriptor *string `json:"desc,omitempty"` + + // Script/address to import. Should not be provided if using Descriptor. + ScriptPubKey *ScriptPubKey `json:"scriptPubKey,omitempty"` + + // Creation time of the key in seconds since epoch (Jan 1 1970 GMT), or + // the string "now" to substitute the current synced blockchain time. + // + // The timestamp of the oldest key will determine how far back blockchain + // rescans need to begin for missing wallet transactions. + // + // Specifying "now" bypasses scanning. Useful for keys that are known to + // never have been used. + // + // Specifying 0 scans the entire blockchain. + Timestamp TimestampOrNow `json:"timestamp"` + + // Allowed only if the ScriptPubKey is a P2SH or P2SH-P2WSH + // address/scriptPubKey. + RedeemScript *string `json:"redeemscript,omitempty"` + + // Allowed only if the ScriptPubKey is a P2SH-P2WSH or P2WSH + // address/scriptPubKey. + WitnessScript *string `json:"witnessscript,omitempty"` + + // Array of strings giving pubkeys to import. They must occur in P2PKH or + // P2WPKH scripts. They are not required when the private key is also + // provided (see Keys). + PubKeys *[]string `json:"pubkeys,omitempty"` + + // Array of strings giving private keys to import. The corresponding + // public keys must occur in the output or RedeemScript. + Keys *[]string `json:"keys,omitempty"` + + // If the provided Descriptor is ranged, this specifies the end + // (as an int) or the range (as []int{begin, end}) to import. + Range *DescriptorRange `json:"range,omitempty"` + + // States whether matching outputs should be treated as not incoming + // payments (also known as change). + Internal *bool `json:"internal,omitempty"` + + // States whether matching outputs should be considered watchonly. + // + // If an address/script is imported without all of the private keys + // required to spend from that address, set this field to true. + // + // If all the private keys are provided and the address/script is + // spendable, set this field to false. + WatchOnly *bool `json:"watchonly,omitempty"` + + // Label to assign to the address. Only allowed when Internal is false. + Label *string `json:"label,omitempty"` + + // States whether imported public keys should be added to the keypool for + // when users request new addresses. Only allowed when wallet private keys + // are disabled. + KeyPool *bool `json:"keypool,omitempty"` +} + +// ImportMultiRequest defines the options struct, provided to the +// ImportMultiCmd as a pointer argument. +type ImportMultiOptions struct { + Rescan bool `json:"rescan"` // Rescan the blockchain after all imports +} + +// ImportMultiCmd defines the importmulti JSON-RPC command. +type ImportMultiCmd struct { + Requests []ImportMultiRequest + Options *ImportMultiOptions +} + +// NewImportMultiCmd returns a new instance which can be used to issue +// an importmulti JSON-RPC command. +// +// The parameters which are pointers indicate they are optional. Passing nil +// for optional parameters will use the default value. +func NewImportMultiCmd(requests []ImportMultiRequest, options *ImportMultiOptions) *ImportMultiCmd { + return &ImportMultiCmd{ + Requests: requests, + Options: options, + } +} + +// PsbtInput represents an input to include in the PSBT created by the +// WalletCreateFundedPsbtCmd command. +type PsbtInput struct { + Txid string `json:"txid"` + Vout uint32 `json:"vout"` + Sequence uint32 `json:"sequence"` +} + +// PsbtOutput represents an output to include in the PSBT created by the +// WalletCreateFundedPsbtCmd command. +type PsbtOutput map[string]interface{} + +// NewPsbtOutput returns a new instance of a PSBT output to use with the +// WalletCreateFundedPsbtCmd command. +func NewPsbtOutput(address string, amount btcutil.Amount) PsbtOutput { + return PsbtOutput{address: amount.ToBTC()} +} + +// NewPsbtDataOutput returns a new instance of a PSBT data output to use with +// the WalletCreateFundedPsbtCmd command. +func NewPsbtDataOutput(data []byte) PsbtOutput { + return PsbtOutput{"data": hex.EncodeToString(data)} +} + +// WalletCreateFundedPsbtOpts represents the optional options struct provided +// with a WalletCreateFundedPsbtCmd command. +type WalletCreateFundedPsbtOpts struct { + ChangeAddress *string `json:"changeAddress,omitempty"` + ChangePosition *int64 `json:"changePosition,omitempty"` + ChangeType *ChangeType `json:"change_type,omitempty"` + IncludeWatching *bool `json:"includeWatching,omitempty"` + LockUnspents *bool `json:"lockUnspents,omitempty"` + FeeRate *float64 `json:"feeRate,omitempty"` + SubtractFeeFromOutputs *[]int64 `json:"subtractFeeFromOutputs,omitempty"` + Replaceable *bool `json:"replaceable,omitempty"` + ConfTarget *int64 `json:"conf_target,omitempty"` + EstimateMode *string `json:"estimate_mode,omitempty"` +} + +// WalletCreateFundedPsbtCmd defines the walletcreatefundedpsbt JSON-RPC command. +type WalletCreateFundedPsbtCmd struct { + Inputs []PsbtInput + Outputs []PsbtOutput + Locktime *uint32 + Options *WalletCreateFundedPsbtOpts + Bip32Derivs *bool +} + +// NewWalletCreateFundedPsbtCmd returns a new instance which can be used to issue a +// walletcreatefundedpsbt JSON-RPC command. +func NewWalletCreateFundedPsbtCmd( + inputs []PsbtInput, outputs []PsbtOutput, locktime *uint32, + options *WalletCreateFundedPsbtOpts, bip32Derivs *bool, +) *WalletCreateFundedPsbtCmd { + return &WalletCreateFundedPsbtCmd{ + Inputs: inputs, + Outputs: outputs, + Locktime: locktime, + Options: options, + Bip32Derivs: bip32Derivs, + } +} + +// WalletProcessPsbtCmd defines the walletprocesspsbt JSON-RPC command. +type WalletProcessPsbtCmd struct { + Psbt string + Sign *bool `jsonrpcdefault:"true"` + SighashType *string `jsonrpcdefault:"\"ALL\""` + Bip32Derivs *bool +} + +// NewWalletProcessPsbtCmd returns a new instance which can be used to issue a +// walletprocesspsbt JSON-RPC command. +func NewWalletProcessPsbtCmd(psbt string, sign *bool, sighashType *string, bip32Derivs *bool) *WalletProcessPsbtCmd { + return &WalletProcessPsbtCmd{ + Psbt: psbt, + Sign: sign, + SighashType: sighashType, + Bip32Derivs: bip32Derivs, + } +} + func init() { // The commands in this file are only usable with a wallet server. flags := UFWalletOnly MustRegisterCmd("addmultisigaddress", (*AddMultisigAddressCmd)(nil), flags) MustRegisterCmd("addwitnessaddress", (*AddWitnessAddressCmd)(nil), flags) + MustRegisterCmd("backupwallet", (*BackupWalletCmd)(nil), flags) MustRegisterCmd("createmultisig", (*CreateMultisigCmd)(nil), flags) + MustRegisterCmd("createwallet", (*CreateWalletCmd)(nil), flags) MustRegisterCmd("dumpprivkey", (*DumpPrivKeyCmd)(nil), flags) MustRegisterCmd("encryptwallet", (*EncryptWalletCmd)(nil), flags) + MustRegisterCmd("estimatesmartfee", (*EstimateSmartFeeCmd)(nil), flags) MustRegisterCmd("estimatefee", (*EstimateFeeCmd)(nil), flags) MustRegisterCmd("estimatepriority", (*EstimatePriorityCmd)(nil), flags) MustRegisterCmd("getaccount", (*GetAccountCmd)(nil), flags) MustRegisterCmd("getaccountaddress", (*GetAccountAddressCmd)(nil), flags) MustRegisterCmd("getaddressesbyaccount", (*GetAddressesByAccountCmd)(nil), flags) + MustRegisterCmd("getaddressinfo", (*GetAddressInfoCmd)(nil), flags) MustRegisterCmd("getbalance", (*GetBalanceCmd)(nil), flags) + MustRegisterCmd("getbalances", (*GetBalancesCmd)(nil), flags) MustRegisterCmd("getnewaddress", (*GetNewAddressCmd)(nil), flags) MustRegisterCmd("getrawchangeaddress", (*GetRawChangeAddressCmd)(nil), flags) MustRegisterCmd("getreceivedbyaccount", (*GetReceivedByAccountCmd)(nil), flags) MustRegisterCmd("getreceivedbyaddress", (*GetReceivedByAddressCmd)(nil), flags) MustRegisterCmd("gettransaction", (*GetTransactionCmd)(nil), flags) MustRegisterCmd("getwalletinfo", (*GetWalletInfoCmd)(nil), flags) + MustRegisterCmd("importmulti", (*ImportMultiCmd)(nil), flags) MustRegisterCmd("importprivkey", (*ImportPrivKeyCmd)(nil), flags) MustRegisterCmd("keypoolrefill", (*KeyPoolRefillCmd)(nil), flags) MustRegisterCmd("listaccounts", (*ListAccountsCmd)(nil), flags) @@ -684,6 +1120,7 @@ func init() { MustRegisterCmd("listsinceblock", (*ListSinceBlockCmd)(nil), flags) MustRegisterCmd("listtransactions", (*ListTransactionsCmd)(nil), flags) MustRegisterCmd("listunspent", (*ListUnspentCmd)(nil), flags) + MustRegisterCmd("loadwallet", (*LoadWalletCmd)(nil), flags) MustRegisterCmd("lockunspent", (*LockUnspentCmd)(nil), flags) MustRegisterCmd("move", (*MoveCmd)(nil), flags) MustRegisterCmd("sendfrom", (*SendFromCmd)(nil), flags) @@ -693,7 +1130,11 @@ func init() { MustRegisterCmd("settxfee", (*SetTxFeeCmd)(nil), flags) MustRegisterCmd("signmessage", (*SignMessageCmd)(nil), flags) MustRegisterCmd("signrawtransaction", (*SignRawTransactionCmd)(nil), flags) + MustRegisterCmd("signrawtransactionwithwallet", (*SignRawTransactionWithWalletCmd)(nil), flags) + MustRegisterCmd("unloadwallet", (*UnloadWalletCmd)(nil), flags) MustRegisterCmd("walletlock", (*WalletLockCmd)(nil), flags) MustRegisterCmd("walletpassphrase", (*WalletPassphraseCmd)(nil), flags) MustRegisterCmd("walletpassphrasechange", (*WalletPassphraseChangeCmd)(nil), flags) + MustRegisterCmd("walletcreatefundedpsbt", (*WalletCreateFundedPsbtCmd)(nil), flags) + MustRegisterCmd("walletprocesspsbt", (*WalletProcessPsbtCmd)(nil), flags) } diff --git a/btcjson/walletsvrcmds_test.go b/btcjson/walletsvrcmds_test.go index efc08cc945..0b5355e511 100644 --- a/btcjson/walletsvrcmds_test.go +++ b/btcjson/walletsvrcmds_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2014 The btcsuite developers +// Copyright (c) 2014-2020 The btcsuite developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -12,6 +12,7 @@ import ( "testing" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/btcutil" ) // TestWalletSvrCmds tests all of the wallet server commands marshal and @@ -61,6 +62,61 @@ func TestWalletSvrCmds(t *testing.T) { Account: btcjson.String("test"), }, }, + { + name: "createwallet", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("createwallet", "mywallet", true, true, "secret", true) + }, + staticCmd: func() interface{} { + return btcjson.NewCreateWalletCmd("mywallet", + btcjson.Bool(true), btcjson.Bool(true), + btcjson.String("secret"), btcjson.Bool(true)) + }, + marshalled: `{"jsonrpc":"1.0","method":"createwallet","params":["mywallet",true,true,"secret",true],"id":1}`, + unmarshalled: &btcjson.CreateWalletCmd{ + WalletName: "mywallet", + DisablePrivateKeys: btcjson.Bool(true), + Blank: btcjson.Bool(true), + Passphrase: btcjson.String("secret"), + AvoidReuse: btcjson.Bool(true), + }, + }, + { + name: "createwallet - optional1", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("createwallet", "mywallet") + }, + staticCmd: func() interface{} { + return btcjson.NewCreateWalletCmd("mywallet", + nil, nil, nil, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"createwallet","params":["mywallet"],"id":1}`, + unmarshalled: &btcjson.CreateWalletCmd{ + WalletName: "mywallet", + DisablePrivateKeys: btcjson.Bool(false), + Blank: btcjson.Bool(false), + Passphrase: btcjson.String(""), + AvoidReuse: btcjson.Bool(false), + }, + }, + { + name: "createwallet - optional2", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("createwallet", "mywallet", "null", "null", "secret") + }, + staticCmd: func() interface{} { + return btcjson.NewCreateWalletCmd("mywallet", + nil, nil, btcjson.String("secret"), nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"createwallet","params":["mywallet",null,null,"secret"],"id":1}`, + unmarshalled: &btcjson.CreateWalletCmd{ + WalletName: "mywallet", + DisablePrivateKeys: nil, + Blank: nil, + Passphrase: btcjson.String("secret"), + AvoidReuse: btcjson.Bool(false), + }, + }, { name: "addwitnessaddress", newCmd: func() (interface{}, error) { @@ -74,6 +130,49 @@ func TestWalletSvrCmds(t *testing.T) { Address: "1address", }, }, + { + name: "backupwallet", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("backupwallet", "backup.dat") + }, + staticCmd: func() interface{} { + return btcjson.NewBackupWalletCmd("backup.dat") + }, + marshalled: `{"jsonrpc":"1.0","method":"backupwallet","params":["backup.dat"],"id":1}`, + unmarshalled: &btcjson.BackupWalletCmd{Destination: "backup.dat"}, + }, + { + name: "loadwallet", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("loadwallet", "wallet.dat") + }, + staticCmd: func() interface{} { + return btcjson.NewLoadWalletCmd("wallet.dat") + }, + marshalled: `{"jsonrpc":"1.0","method":"loadwallet","params":["wallet.dat"],"id":1}`, + unmarshalled: &btcjson.LoadWalletCmd{WalletName: "wallet.dat"}, + }, + { + name: "unloadwallet", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("unloadwallet", "default") + }, + staticCmd: func() interface{} { + return btcjson.NewUnloadWalletCmd(btcjson.String("default")) + }, + marshalled: `{"jsonrpc":"1.0","method":"unloadwallet","params":["default"],"id":1}`, + unmarshalled: &btcjson.UnloadWalletCmd{WalletName: btcjson.String("default")}, + }, + {name: "unloadwallet - nil arg", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("unloadwallet") + }, + staticCmd: func() interface{} { + return btcjson.NewUnloadWalletCmd(nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"unloadwallet","params":[],"id":1}`, + unmarshalled: &btcjson.UnloadWalletCmd{WalletName: nil}, + }, { name: "createmultisig", newCmd: func() (interface{}, error) { @@ -128,6 +227,34 @@ func TestWalletSvrCmds(t *testing.T) { NumBlocks: 6, }, }, + { + name: "estimatesmartfee - no mode", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("estimatesmartfee", 6) + }, + staticCmd: func() interface{} { + return btcjson.NewEstimateSmartFeeCmd(6, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"estimatesmartfee","params":[6],"id":1}`, + unmarshalled: &btcjson.EstimateSmartFeeCmd{ + ConfTarget: 6, + EstimateMode: &btcjson.EstimateModeConservative, + }, + }, + { + name: "estimatesmartfee - economical mode", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("estimatesmartfee", 6, btcjson.EstimateModeEconomical) + }, + staticCmd: func() interface{} { + return btcjson.NewEstimateSmartFeeCmd(6, &btcjson.EstimateModeEconomical) + }, + marshalled: `{"jsonrpc":"1.0","method":"estimatesmartfee","params":[6,"ECONOMICAL"],"id":1}`, + unmarshalled: &btcjson.EstimateSmartFeeCmd{ + ConfTarget: 6, + EstimateMode: &btcjson.EstimateModeEconomical, + }, + }, { name: "estimatepriority", newCmd: func() (interface{}, error) { @@ -180,6 +307,19 @@ func TestWalletSvrCmds(t *testing.T) { Account: "acct", }, }, + { + name: "getaddressinfo", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getaddressinfo", "1234") + }, + staticCmd: func() interface{} { + return btcjson.NewGetAddressInfoCmd("1234") + }, + marshalled: `{"jsonrpc":"1.0","method":"getaddressinfo","params":["1234"],"id":1}`, + unmarshalled: &btcjson.GetAddressInfoCmd{ + Address: "1234", + }, + }, { name: "getbalance", newCmd: func() (interface{}, error) { @@ -222,30 +362,57 @@ func TestWalletSvrCmds(t *testing.T) { MinConf: btcjson.Int(6), }, }, + { + name: "getbalances", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getbalances") + }, + staticCmd: func() interface{} { + return btcjson.NewGetBalancesCmd() + }, + marshalled: `{"jsonrpc":"1.0","method":"getbalances","params":[],"id":1}`, + unmarshalled: &btcjson.GetBalancesCmd{}, + }, { name: "getnewaddress", newCmd: func() (interface{}, error) { return btcjson.NewCmd("getnewaddress") }, staticCmd: func() interface{} { - return btcjson.NewGetNewAddressCmd(nil) + return btcjson.NewGetNewAddressCmd(nil, nil) }, marshalled: `{"jsonrpc":"1.0","method":"getnewaddress","params":[],"id":1}`, unmarshalled: &btcjson.GetNewAddressCmd{ - Account: nil, + Account: nil, + AddressType: nil, }, }, { - name: "getnewaddress optional", + name: "getnewaddress optional acct", newCmd: func() (interface{}, error) { return btcjson.NewCmd("getnewaddress", "acct") }, staticCmd: func() interface{} { - return btcjson.NewGetNewAddressCmd(btcjson.String("acct")) + return btcjson.NewGetNewAddressCmd(btcjson.String("acct"), nil) }, marshalled: `{"jsonrpc":"1.0","method":"getnewaddress","params":["acct"],"id":1}`, unmarshalled: &btcjson.GetNewAddressCmd{ - Account: btcjson.String("acct"), + Account: btcjson.String("acct"), + AddressType: nil, + }, + }, + { + name: "getnewaddress optional acct and type", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getnewaddress", "acct", "legacy") + }, + staticCmd: func() interface{} { + return btcjson.NewGetNewAddressCmd(btcjson.String("acct"), btcjson.String("legacy")) + }, + marshalled: `{"jsonrpc":"1.0","method":"getnewaddress","params":["acct","legacy"],"id":1}`, + unmarshalled: &btcjson.GetNewAddressCmd{ + Account: btcjson.String("acct"), + AddressType: btcjson.String("legacy"), }, }, { @@ -254,24 +421,40 @@ func TestWalletSvrCmds(t *testing.T) { return btcjson.NewCmd("getrawchangeaddress") }, staticCmd: func() interface{} { - return btcjson.NewGetRawChangeAddressCmd(nil) + return btcjson.NewGetRawChangeAddressCmd(nil, nil) }, marshalled: `{"jsonrpc":"1.0","method":"getrawchangeaddress","params":[],"id":1}`, unmarshalled: &btcjson.GetRawChangeAddressCmd{ - Account: nil, + Account: nil, + AddressType: nil, }, }, { - name: "getrawchangeaddress optional", + name: "getrawchangeaddress optional acct", newCmd: func() (interface{}, error) { return btcjson.NewCmd("getrawchangeaddress", "acct") }, staticCmd: func() interface{} { - return btcjson.NewGetRawChangeAddressCmd(btcjson.String("acct")) + return btcjson.NewGetRawChangeAddressCmd(btcjson.String("acct"), nil) }, marshalled: `{"jsonrpc":"1.0","method":"getrawchangeaddress","params":["acct"],"id":1}`, unmarshalled: &btcjson.GetRawChangeAddressCmd{ - Account: btcjson.String("acct"), + Account: btcjson.String("acct"), + AddressType: nil, + }, + }, + { + name: "getrawchangeaddress optional acct and type", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("getrawchangeaddress", "acct", "legacy") + }, + staticCmd: func() interface{} { + return btcjson.NewGetRawChangeAddressCmd(btcjson.String("acct"), btcjson.String("legacy")) + }, + marshalled: `{"jsonrpc":"1.0","method":"getrawchangeaddress","params":["acct","legacy"],"id":1}`, + unmarshalled: &btcjson.GetRawChangeAddressCmd{ + Account: btcjson.String("acct"), + AddressType: btcjson.String("legacy"), }, }, { @@ -668,6 +851,21 @@ func TestWalletSvrCmds(t *testing.T) { IncludeWatchOnly: btcjson.Bool(true), }, }, + { + name: "listsinceblock pad null", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("listsinceblock", "null", 1, false) + }, + staticCmd: func() interface{} { + return btcjson.NewListSinceBlockCmd(nil, btcjson.Int(1), btcjson.Bool(false)) + }, + marshalled: `{"jsonrpc":"1.0","method":"listsinceblock","params":[null,1,false],"id":1}`, + unmarshalled: &btcjson.ListSinceBlockCmd{ + BlockHash: nil, + TargetConfirmations: btcjson.Int(1), + IncludeWatchOnly: btcjson.Bool(false), + }, + }, { name: "listtransactions", newCmd: func() (interface{}, error) { @@ -1165,6 +1363,103 @@ func TestWalletSvrCmds(t *testing.T) { Flags: btcjson.String("ALL"), }, }, + { + name: "signrawtransactionwithwallet", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("signrawtransactionwithwallet", "001122") + }, + staticCmd: func() interface{} { + return btcjson.NewSignRawTransactionWithWalletCmd("001122", nil, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"signrawtransactionwithwallet","params":["001122"],"id":1}`, + unmarshalled: &btcjson.SignRawTransactionWithWalletCmd{ + RawTx: "001122", + Inputs: nil, + SigHashType: btcjson.String("ALL"), + }, + }, + { + name: "signrawtransactionwithwallet optional1", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("signrawtransactionwithwallet", "001122", `[{"txid":"123","vout":1,"scriptPubKey":"00","redeemScript":"01","witnessScript":"02","amount":1.5}]`) + }, + staticCmd: func() interface{} { + txInputs := []btcjson.RawTxWitnessInput{ + { + Txid: "123", + Vout: 1, + ScriptPubKey: "00", + RedeemScript: btcjson.String("01"), + WitnessScript: btcjson.String("02"), + Amount: btcjson.Float64(1.5), + }, + } + + return btcjson.NewSignRawTransactionWithWalletCmd("001122", &txInputs, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"signrawtransactionwithwallet","params":["001122",[{"txid":"123","vout":1,"scriptPubKey":"00","redeemScript":"01","witnessScript":"02","amount":1.5}]],"id":1}`, + unmarshalled: &btcjson.SignRawTransactionWithWalletCmd{ + RawTx: "001122", + Inputs: &[]btcjson.RawTxWitnessInput{ + { + Txid: "123", + Vout: 1, + ScriptPubKey: "00", + RedeemScript: btcjson.String("01"), + WitnessScript: btcjson.String("02"), + Amount: btcjson.Float64(1.5), + }, + }, + SigHashType: btcjson.String("ALL"), + }, + }, + { + name: "signrawtransactionwithwallet optional1 with blank fields in input", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("signrawtransactionwithwallet", "001122", `[{"txid":"123","vout":1,"scriptPubKey":"00","redeemScript":"01"}]`) + }, + staticCmd: func() interface{} { + txInputs := []btcjson.RawTxWitnessInput{ + { + Txid: "123", + Vout: 1, + ScriptPubKey: "00", + RedeemScript: btcjson.String("01"), + }, + } + + return btcjson.NewSignRawTransactionWithWalletCmd("001122", &txInputs, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"signrawtransactionwithwallet","params":["001122",[{"txid":"123","vout":1,"scriptPubKey":"00","redeemScript":"01"}]],"id":1}`, + unmarshalled: &btcjson.SignRawTransactionWithWalletCmd{ + RawTx: "001122", + Inputs: &[]btcjson.RawTxWitnessInput{ + { + Txid: "123", + Vout: 1, + ScriptPubKey: "00", + RedeemScript: btcjson.String("01"), + }, + }, + SigHashType: btcjson.String("ALL"), + }, + }, + { + name: "signrawtransactionwithwallet optional2", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd("signrawtransactionwithwallet", "001122", `[]`, "ALL") + }, + staticCmd: func() interface{} { + txInputs := []btcjson.RawTxWitnessInput{} + return btcjson.NewSignRawTransactionWithWalletCmd("001122", &txInputs, btcjson.String("ALL")) + }, + marshalled: `{"jsonrpc":"1.0","method":"signrawtransactionwithwallet","params":["001122",[],"ALL"],"id":1}`, + unmarshalled: &btcjson.SignRawTransactionWithWalletCmd{ + RawTx: "001122", + Inputs: &[]btcjson.RawTxWitnessInput{}, + SigHashType: btcjson.String("ALL"), + }, + }, { name: "walletlock", newCmd: func() (interface{}, error) { @@ -1204,13 +1499,340 @@ func TestWalletSvrCmds(t *testing.T) { NewPassphrase: "new", }, }, + { + name: "importmulti with descriptor + options", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "importmulti", + // Cannot use a native string, due to special types like timestamp. + []btcjson.ImportMultiRequest{ + {Descriptor: btcjson.String("123"), Timestamp: btcjson.TimestampOrNow{Value: 0}}, + }, + `{"rescan": true}`, + ) + }, + staticCmd: func() interface{} { + requests := []btcjson.ImportMultiRequest{ + {Descriptor: btcjson.String("123"), Timestamp: btcjson.TimestampOrNow{Value: 0}}, + } + options := btcjson.ImportMultiOptions{Rescan: true} + return btcjson.NewImportMultiCmd(requests, &options) + }, + marshalled: `{"jsonrpc":"1.0","method":"importmulti","params":[[{"desc":"123","timestamp":0}],{"rescan":true}],"id":1}`, + unmarshalled: &btcjson.ImportMultiCmd{ + Requests: []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + }, + }, + Options: &btcjson.ImportMultiOptions{Rescan: true}, + }, + }, + { + name: "importmulti with descriptor + no options", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "importmulti", + // Cannot use a native string, due to special types like timestamp. + []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + WatchOnly: btcjson.Bool(false), + Internal: btcjson.Bool(true), + Label: btcjson.String("aaa"), + KeyPool: btcjson.Bool(false), + }, + }, + ) + }, + staticCmd: func() interface{} { + requests := []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + WatchOnly: btcjson.Bool(false), + Internal: btcjson.Bool(true), + Label: btcjson.String("aaa"), + KeyPool: btcjson.Bool(false), + }, + } + return btcjson.NewImportMultiCmd(requests, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"importmulti","params":[[{"desc":"123","timestamp":0,"internal":true,"watchonly":false,"label":"aaa","keypool":false}]],"id":1}`, + unmarshalled: &btcjson.ImportMultiCmd{ + Requests: []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + WatchOnly: btcjson.Bool(false), + Internal: btcjson.Bool(true), + Label: btcjson.String("aaa"), + KeyPool: btcjson.Bool(false), + }, + }, + }, + }, + { + name: "importmulti with descriptor + string timestamp", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "importmulti", + // Cannot use a native string, due to special types like timestamp. + []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: "now"}, + }, + }, + ) + }, + staticCmd: func() interface{} { + requests := []btcjson.ImportMultiRequest{ + {Descriptor: btcjson.String("123"), Timestamp: btcjson.TimestampOrNow{Value: "now"}}, + } + return btcjson.NewImportMultiCmd(requests, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"importmulti","params":[[{"desc":"123","timestamp":"now"}]],"id":1}`, + unmarshalled: &btcjson.ImportMultiCmd{ + Requests: []btcjson.ImportMultiRequest{ + {Descriptor: btcjson.String("123"), Timestamp: btcjson.TimestampOrNow{Value: "now"}}, + }, + }, + }, + { + name: "importmulti with scriptPubKey script", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "importmulti", + // Cannot use a native string, due to special types like timestamp and scriptPubKey + []btcjson.ImportMultiRequest{ + { + ScriptPubKey: &btcjson.ScriptPubKey{Value: "script"}, + RedeemScript: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + PubKeys: &[]string{"aaa"}, + }, + }, + ) + }, + staticCmd: func() interface{} { + requests := []btcjson.ImportMultiRequest{ + { + ScriptPubKey: &btcjson.ScriptPubKey{Value: "script"}, + RedeemScript: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + PubKeys: &[]string{"aaa"}, + }, + } + return btcjson.NewImportMultiCmd(requests, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"importmulti","params":[[{"scriptPubKey":"script","timestamp":0,"redeemscript":"123","pubkeys":["aaa"]}]],"id":1}`, + unmarshalled: &btcjson.ImportMultiCmd{ + Requests: []btcjson.ImportMultiRequest{ + { + ScriptPubKey: &btcjson.ScriptPubKey{Value: "script"}, + RedeemScript: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + PubKeys: &[]string{"aaa"}, + }, + }, + }, + }, + { + name: "importmulti with scriptPubKey address", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "importmulti", + // Cannot use a native string, due to special types like timestamp and scriptPubKey + []btcjson.ImportMultiRequest{ + { + ScriptPubKey: &btcjson.ScriptPubKey{Value: btcjson.ScriptPubKeyAddress{Address: "addr"}}, + WitnessScript: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Keys: &[]string{"aaa"}, + }, + }, + ) + }, + staticCmd: func() interface{} { + requests := []btcjson.ImportMultiRequest{ + { + ScriptPubKey: &btcjson.ScriptPubKey{Value: btcjson.ScriptPubKeyAddress{Address: "addr"}}, + WitnessScript: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Keys: &[]string{"aaa"}, + }, + } + return btcjson.NewImportMultiCmd(requests, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"importmulti","params":[[{"scriptPubKey":{"address":"addr"},"timestamp":0,"witnessscript":"123","keys":["aaa"]}]],"id":1}`, + unmarshalled: &btcjson.ImportMultiCmd{ + Requests: []btcjson.ImportMultiRequest{ + { + ScriptPubKey: &btcjson.ScriptPubKey{Value: btcjson.ScriptPubKeyAddress{Address: "addr"}}, + WitnessScript: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Keys: &[]string{"aaa"}, + }, + }, + }, + }, + { + name: "importmulti with ranged (int) descriptor", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "importmulti", + // Cannot use a native string, due to special types like timestamp. + []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Range: &btcjson.DescriptorRange{Value: 7}, + }, + }, + ) + }, + staticCmd: func() interface{} { + requests := []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Range: &btcjson.DescriptorRange{Value: 7}, + }, + } + return btcjson.NewImportMultiCmd(requests, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"importmulti","params":[[{"desc":"123","timestamp":0,"range":7}]],"id":1}`, + unmarshalled: &btcjson.ImportMultiCmd{ + Requests: []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Range: &btcjson.DescriptorRange{Value: 7}, + }, + }, + }, + }, + { + name: "importmulti with ranged (slice) descriptor", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "importmulti", + // Cannot use a native string, due to special types like timestamp. + []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Range: &btcjson.DescriptorRange{Value: []int{1, 7}}, + }, + }, + ) + }, + staticCmd: func() interface{} { + requests := []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Range: &btcjson.DescriptorRange{Value: []int{1, 7}}, + }, + } + return btcjson.NewImportMultiCmd(requests, nil) + }, + marshalled: `{"jsonrpc":"1.0","method":"importmulti","params":[[{"desc":"123","timestamp":0,"range":[1,7]}]],"id":1}`, + unmarshalled: &btcjson.ImportMultiCmd{ + Requests: []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String("123"), + Timestamp: btcjson.TimestampOrNow{Value: 0}, + Range: &btcjson.DescriptorRange{Value: []int{1, 7}}, + }, + }, + }, + }, + { + name: "walletcreatefundedpsbt", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "walletcreatefundedpsbt", + []btcjson.PsbtInput{ + { + Txid: "1234", + Vout: 0, + Sequence: 0, + }, + }, + []btcjson.PsbtOutput{ + btcjson.NewPsbtOutput("1234", btcutil.Amount(1234)), + btcjson.NewPsbtDataOutput([]byte{1, 2, 3, 4}), + }, + btcjson.Uint32(1), + btcjson.WalletCreateFundedPsbtOpts{}, + btcjson.Bool(true), + ) + }, + staticCmd: func() interface{} { + return btcjson.NewWalletCreateFundedPsbtCmd( + []btcjson.PsbtInput{ + { + Txid: "1234", + Vout: 0, + Sequence: 0, + }, + }, + []btcjson.PsbtOutput{ + btcjson.NewPsbtOutput("1234", btcutil.Amount(1234)), + btcjson.NewPsbtDataOutput([]byte{1, 2, 3, 4}), + }, + btcjson.Uint32(1), + &btcjson.WalletCreateFundedPsbtOpts{}, + btcjson.Bool(true), + ) + }, + marshalled: `{"jsonrpc":"1.0","method":"walletcreatefundedpsbt","params":[[{"txid":"1234","vout":0,"sequence":0}],[{"1234":0.00001234},{"data":"01020304"}],1,{},true],"id":1}`, + unmarshalled: &btcjson.WalletCreateFundedPsbtCmd{ + Inputs: []btcjson.PsbtInput{ + { + Txid: "1234", + Vout: 0, + Sequence: 0, + }, + }, + Outputs: []btcjson.PsbtOutput{ + btcjson.NewPsbtOutput("1234", btcutil.Amount(1234)), + btcjson.NewPsbtDataOutput([]byte{1, 2, 3, 4}), + }, + Locktime: btcjson.Uint32(1), + Options: &btcjson.WalletCreateFundedPsbtOpts{}, + Bip32Derivs: btcjson.Bool(true), + }, + }, + { + name: "walletprocesspsbt", + newCmd: func() (interface{}, error) { + return btcjson.NewCmd( + "walletprocesspsbt", "1234", btcjson.Bool(true), btcjson.String("ALL"), btcjson.Bool(true)) + }, + staticCmd: func() interface{} { + return btcjson.NewWalletProcessPsbtCmd( + "1234", btcjson.Bool(true), btcjson.String("ALL"), btcjson.Bool(true)) + }, + marshalled: `{"jsonrpc":"1.0","method":"walletprocesspsbt","params":["1234",true,"ALL",true],"id":1}`, + unmarshalled: &btcjson.WalletProcessPsbtCmd{ + Psbt: "1234", + Sign: btcjson.Bool(true), + SighashType: btcjson.String("ALL"), + Bip32Derivs: btcjson.Bool(true), + }, + }, } t.Logf("Running %d tests", len(tests)) for i, test := range tests { // Marshal the command as created by the new static command // creation function. - marshalled, err := btcjson.MarshalCmd(testID, test.staticCmd()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, testID, test.staticCmd()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -1234,7 +1856,7 @@ func TestWalletSvrCmds(t *testing.T) { // Marshal the command as created by the generic new command // creation function. - marshalled, err = btcjson.MarshalCmd(testID, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, testID, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/walletsvrresults.go b/btcjson/walletsvrresults.go index 9246d131ae..78a6e647f5 100644 --- a/btcjson/walletsvrresults.go +++ b/btcjson/walletsvrresults.go @@ -1,9 +1,132 @@ -// Copyright (c) 2014 The btcsuite developers +// Copyright (c) 2014-2020 The btcsuite developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. package btcjson +import ( + "encoding/json" + "fmt" + + "github.com/btcsuite/btcd/txscript" +) + +// CreateWalletResult models the result of the createwallet command. +type CreateWalletResult struct { + Name string `json:"name"` + Warning string `json:"warning"` +} + +// embeddedAddressInfo includes all getaddressinfo output fields, excluding +// metadata and relation to the wallet. +// +// It represents the non-metadata/non-wallet fields for GetAddressInfo, as well +// as the precise fields for an embedded P2SH or P2WSH address. +type embeddedAddressInfo struct { + Address string `json:"address"` + ScriptPubKey string `json:"scriptPubKey"` + Solvable bool `json:"solvable"` + Descriptor *string `json:"desc,omitempty"` + IsScript bool `json:"isscript"` + IsChange bool `json:"ischange"` + IsWitness bool `json:"iswitness"` + WitnessVersion int `json:"witness_version,omitempty"` + WitnessProgram *string `json:"witness_program,omitempty"` + ScriptType *txscript.ScriptClass `json:"script,omitempty"` + Hex *string `json:"hex,omitempty"` + PubKeys *[]string `json:"pubkeys,omitempty"` + SignaturesRequired *int `json:"sigsrequired,omitempty"` + PubKey *string `json:"pubkey,omitempty"` + IsCompressed *bool `json:"iscompressed,omitempty"` + HDMasterFingerprint *string `json:"hdmasterfingerprint,omitempty"` + Labels []string `json:"labels"` +} + +// GetAddressInfoResult models the result of the getaddressinfo command. It +// contains information about a bitcoin address. +// +// Reference: https://bitcoincore.org/en/doc/0.20.0/rpc/wallet/getaddressinfo +// +// The GetAddressInfoResult has three segments: +// 1. General information about the address. +// 2. Metadata (Timestamp, HDKeyPath, HDSeedID) and wallet fields +// (IsMine, IsWatchOnly). +// 3. Information about the embedded address in case of P2SH or P2WSH. +// Same structure as (1). +type GetAddressInfoResult struct { + embeddedAddressInfo + IsMine bool `json:"ismine"` + IsWatchOnly bool `json:"iswatchonly"` + Timestamp *int `json:"timestamp,omitempty"` + HDKeyPath *string `json:"hdkeypath,omitempty"` + HDSeedID *string `json:"hdseedid,omitempty"` + Embedded *embeddedAddressInfo `json:"embedded,omitempty"` +} + +// UnmarshalJSON provides a custom unmarshaller for GetAddressInfoResult. +// It is adapted to avoid creating a duplicate raw struct for unmarshalling +// the JSON bytes into. +// +// Reference: http://choly.ca/post/go-json-marshalling +func (e *GetAddressInfoResult) UnmarshalJSON(data []byte) error { + // Step 1: Create type aliases of the original struct, including the + // embedded one. + type Alias GetAddressInfoResult + type EmbeddedAlias embeddedAddressInfo + + // Step 2: Create an anonymous struct with raw replacements for the special + // fields. + aux := &struct { + ScriptType *string `json:"script,omitempty"` + Embedded *struct { + ScriptType *string `json:"script,omitempty"` + *EmbeddedAlias + } `json:"embedded,omitempty"` + *Alias + }{ + Alias: (*Alias)(e), + } + + // Step 3: Unmarshal the data into the anonymous struct. + if err := json.Unmarshal(data, &aux); err != nil { + return err + } + + // Step 4: Convert the raw fields to the desired types + var ( + sc *txscript.ScriptClass + err error + ) + + if aux.ScriptType != nil { + sc, err = txscript.NewScriptClass(*aux.ScriptType) + if err != nil { + return err + } + } + + e.ScriptType = sc + + if aux.Embedded != nil { + var ( + embeddedSc *txscript.ScriptClass + err error + ) + + if aux.Embedded.ScriptType != nil { + embeddedSc, err = txscript.NewScriptClass(*aux.Embedded.ScriptType) + if err != nil { + return err + } + } + + e.Embedded = (*embeddedAddressInfo)(aux.Embedded.EmbeddedAlias) + e.Embedded.ScriptType = embeddedSc + } + + return nil +} + // GetTransactionDetailsResult models the details data from the gettransaction command. // // This models the "short" version of the ListTransactionsResult type, which @@ -35,6 +158,58 @@ type GetTransactionResult struct { Hex string `json:"hex"` } +type ScanningOrFalse struct { + Value interface{} +} + +type ScanProgress struct { + Duration int `json:"duration"` + Progress float64 `json:"progress"` +} + +// MarshalJSON implements the json.Marshaler interface +func (h ScanningOrFalse) MarshalJSON() ([]byte, error) { + return json.Marshal(h.Value) +} + +// UnmarshalJSON implements the json.Unmarshaler interface +func (h *ScanningOrFalse) UnmarshalJSON(data []byte) error { + var unmarshalled interface{} + if err := json.Unmarshal(data, &unmarshalled); err != nil { + return err + } + + switch v := unmarshalled.(type) { + case bool: + h.Value = v + case map[string]interface{}: + h.Value = ScanProgress{ + Duration: int(v["duration"].(float64)), + Progress: v["progress"].(float64), + } + default: + return fmt.Errorf("invalid scanning value: %v", unmarshalled) + } + + return nil +} + +// GetWalletInfoResult models the result of the getwalletinfo command. +type GetWalletInfoResult struct { + WalletName string `json:"walletname"` + WalletVersion int `json:"walletversion"` + TransactionCount int `json:"txcount"` + KeyPoolOldest int `json:"keypoololdest"` + KeyPoolSize int `json:"keypoolsize"` + KeyPoolSizeHDInternal *int `json:"keypoolsize_hd_internal,omitempty"` + UnlockedUntil *int `json:"unlocked_until,omitempty"` + PayTransactionFee float64 `json:"paytxfee"` + HDSeedID *string `json:"hdseedid,omitempty"` + PrivateKeysEnabled bool `json:"private_keys_enabled"` + AvoidReuse bool `json:"avoid_reuse"` + Scanning ScanningOrFalse `json:"scanning"` +} + // InfoWalletResult models the data returned by the wallet server getinfo // command. type InfoWalletResult struct { @@ -64,6 +239,7 @@ type ListTransactionsResult struct { Amount float64 `json:"amount"` BIP125Replaceable string `json:"bip125-replaceable,omitempty"` BlockHash string `json:"blockhash,omitempty"` + BlockHeight *int32 `json:"blockheight,omitempty"` BlockIndex *int64 `json:"blockindex,omitempty"` BlockTime int64 `json:"blocktime,omitempty"` Category string `json:"category"` @@ -71,6 +247,7 @@ type ListTransactionsResult struct { Fee *float64 `json:"fee,omitempty"` Generated bool `json:"generated,omitempty"` InvolvesWatchOnly bool `json:"involveswatchonly,omitempty"` + Label *string `json:"label,omitempty"` Time int64 `json:"time"` TimeReceived int64 `json:"timereceived"` Trusted bool `json:"trusted"` @@ -137,6 +314,14 @@ type SignRawTransactionResult struct { Errors []SignRawTransactionError `json:"errors,omitempty"` } +// SignRawTransactionWithWalletResult models the data from the +// signrawtransactionwithwallet command. +type SignRawTransactionWithWalletResult struct { + Hex string `json:"hex"` + Complete bool `json:"complete"` + Errors []SignRawTransactionError `json:"errors,omitempty"` +} + // ValidateAddressWalletResult models the data returned by the wallet server // validateaddress command. type ValidateAddressWalletResult struct { @@ -159,3 +344,43 @@ type GetBestBlockResult struct { Hash string `json:"hash"` Height int32 `json:"height"` } + +// BalanceDetailsResult models the details data from the `getbalances` command. +type BalanceDetailsResult struct { + Trusted float64 `json:"trusted"` + UntrustedPending float64 `json:"untrusted_pending"` + Immature float64 `json:"immature"` + Used *float64 `json:"used"` +} + +// GetBalancesResult models the data returned from the getbalances command. +type GetBalancesResult struct { + Mine BalanceDetailsResult `json:"mine"` + WatchOnly *BalanceDetailsResult `json:"watchonly"` +} + +// ImportMultiResults is a slice that models the result of the importmulti command. +// +// Each item in the slice contains the execution result corresponding to the input +// requests of type btcjson.ImportMultiRequest, passed to the ImportMulti[Async] +// function. +type ImportMultiResults []struct { + Success bool `json:"success"` + Error *RPCError `json:"error,omitempty"` + Warnings *[]string `json:"warnings,omitempty"` +} + +// WalletCreateFundedPsbtResult models the data returned from the +// walletcreatefundedpsbtresult command. +type WalletCreateFundedPsbtResult struct { + Psbt string `json:"psbt"` + Fee float64 `json:"fee"` + ChangePos int64 `json:"changepos"` +} + +// WalletProcessPsbtResult models the data returned from the +// walletprocesspsbtresult command. +type WalletProcessPsbtResult struct { + Psbt string `json:"psbt"` + Complete bool `json:"complete"` +} diff --git a/btcjson/walletsvrresults_test.go b/btcjson/walletsvrresults_test.go new file mode 100644 index 0000000000..fd44b066b8 --- /dev/null +++ b/btcjson/walletsvrresults_test.go @@ -0,0 +1,127 @@ +// Copyright (c) 2020 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcjson + +import ( + "encoding/json" + "errors" + "reflect" + "testing" + + "github.com/btcsuite/btcd/txscript" + "github.com/davecgh/go-spew/spew" +) + +// TestGetAddressInfoResult ensures that custom unmarshalling of +// GetAddressInfoResult works as intended. +func TestGetAddressInfoResult(t *testing.T) { + t.Parallel() + + // arbitrary script class to use in tests + nonStandard, _ := txscript.NewScriptClass("nonstandard") + + tests := []struct { + name string + result string + want GetAddressInfoResult + wantErr error + }{ + { + name: "GetAddressInfoResult - no ScriptType", + result: `{}`, + want: GetAddressInfoResult{}, + }, + { + name: "GetAddressInfoResult - ScriptType", + result: `{"script":"nonstandard","address":"1abc"}`, + want: GetAddressInfoResult{ + embeddedAddressInfo: embeddedAddressInfo{ + Address: "1abc", + ScriptType: nonStandard, + }, + }, + }, + { + name: "GetAddressInfoResult - embedded ScriptType", + result: `{"embedded": {"script":"nonstandard","address":"121313"}}`, + want: GetAddressInfoResult{ + Embedded: &embeddedAddressInfo{ + Address: "121313", + ScriptType: nonStandard, + }, + }, + }, + { + name: "GetAddressInfoResult - invalid ScriptType", + result: `{"embedded": {"script":"foo","address":"121313"}}`, + wantErr: txscript.ErrUnsupportedScriptType, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + var out GetAddressInfoResult + err := json.Unmarshal([]byte(test.result), &out) + if err != nil && !errors.Is(err, test.wantErr) { + t.Errorf("Test #%d (%s) unexpected error: %v, want: %v", i, + test.name, err, test.wantErr) + continue + } + + if !reflect.DeepEqual(out, test.want) { + t.Errorf("Test #%d (%s) unexpected unmarshalled data - "+ + "got %v, want %v", i, test.name, spew.Sdump(out), + spew.Sdump(test.want)) + continue + } + } +} + +// TestGetWalletInfoResult ensures that custom unmarshalling of +// GetWalletInfoResult works as intended. +func TestGetWalletInfoResult(t *testing.T) { + t.Parallel() + + tests := []struct { + name string + result string + want GetWalletInfoResult + }{ + { + name: "GetWalletInfoResult - not scanning", + result: `{"scanning":false}`, + want: GetWalletInfoResult{ + Scanning: ScanningOrFalse{Value: false}, + }, + }, + { + name: "GetWalletInfoResult - scanning", + result: `{"scanning":{"duration":10,"progress":1.0}}`, + want: GetWalletInfoResult{ + Scanning: ScanningOrFalse{ + Value: ScanProgress{Duration: 10, Progress: 1.0}, + }, + }, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + var out GetWalletInfoResult + err := json.Unmarshal([]byte(test.result), &out) + if err != nil { + t.Errorf("Test #%d (%s) unexpected error: %v", i, + test.name, err) + continue + } + + if !reflect.DeepEqual(out, test.want) { + t.Errorf("Test #%d (%s) unexpected unmarshalled data - "+ + "got %v, want %v", i, test.name, spew.Sdump(out), + spew.Sdump(test.want)) + continue + } + } +} diff --git a/btcjson/walletsvrwscmds_test.go b/btcjson/walletsvrwscmds_test.go index 17144b6ea7..110a893b23 100644 --- a/btcjson/walletsvrwscmds_test.go +++ b/btcjson/walletsvrwscmds_test.go @@ -195,7 +195,7 @@ func TestWalletSvrWsCmds(t *testing.T) { for i, test := range tests { // Marshal the command as created by the new static command // creation function. - marshalled, err := btcjson.MarshalCmd(testID, test.staticCmd()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, testID, test.staticCmd()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -219,7 +219,7 @@ func TestWalletSvrWsCmds(t *testing.T) { // Marshal the command as created by the generic new command // creation function. - marshalled, err = btcjson.MarshalCmd(testID, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, testID, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/walletsvrwsntfns_test.go b/btcjson/walletsvrwsntfns_test.go index 7662b3c2a1..111916627e 100644 --- a/btcjson/walletsvrwsntfns_test.go +++ b/btcjson/walletsvrwsntfns_test.go @@ -122,7 +122,7 @@ func TestWalletSvrWsNtfns(t *testing.T) { for i, test := range tests { // Marshal the notification as created by the new static // creation function. The ID is nil for notifications. - marshalled, err := btcjson.MarshalCmd(nil, test.staticNtfn()) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, test.staticNtfn()) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) @@ -147,7 +147,7 @@ func TestWalletSvrWsNtfns(t *testing.T) { // Marshal the notification as created by the generic new // notification creation function. The ID is nil for // notifications. - marshalled, err = btcjson.MarshalCmd(nil, cmd) + marshalled, err = btcjson.MarshalCmd(btcjson.RpcVersion1, nil, cmd) if err != nil { t.Errorf("MarshalCmd #%d (%s) unexpected error: %v", i, test.name, err) diff --git a/btcjson/zmqsvrcmds.go b/btcjson/zmqsvrcmds.go new file mode 100644 index 0000000000..666ea2eb99 --- /dev/null +++ b/btcjson/zmqsvrcmds.go @@ -0,0 +1,16 @@ +package btcjson + +// GetZmqNotificationsCmd defines the getzmqnotifications JSON-RPC command. +type GetZmqNotificationsCmd struct{} + +// NewGetZmqNotificationsCmd returns a new instance which can be used to issue a +// getzmqnotifications JSON-RPC command. +func NewGetZmqNotificationsCmd() *GetZmqNotificationsCmd { + return &GetZmqNotificationsCmd{} +} + +func init() { + flags := UsageFlag(0) + + MustRegisterCmd("getzmqnotifications", (*GetZmqNotificationsCmd)(nil), flags) +} diff --git a/btcjson/zmqsvrresults.go b/btcjson/zmqsvrresults.go new file mode 100644 index 0000000000..a500b403ea --- /dev/null +++ b/btcjson/zmqsvrresults.go @@ -0,0 +1,63 @@ +package btcjson + +import ( + "encoding/json" + "net/url" +) + +// GetZmqNotificationResult models the data returned from the getzmqnotifications command. +type GetZmqNotificationResult []struct { + Type string // Type of notification + Address *url.URL // Address of the publisher + HighWaterMark int // Outbound message high water mark +} + +func (z *GetZmqNotificationResult) MarshalJSON() ([]byte, error) { + var out []map[string]interface{} + for _, notif := range *z { + out = append(out, + map[string]interface{}{ + "type": notif.Type, + "address": notif.Address.String(), + "hwm": notif.HighWaterMark, + }) + } + return json.Marshal(out) +} + +// UnmarshalJSON satisfies the json.Unmarshaller interface +func (z *GetZmqNotificationResult) UnmarshalJSON(bytes []byte) error { + type basicNotification struct { + Type string + Address string + Hwm int + } + + var basics []basicNotification + if err := json.Unmarshal(bytes, &basics); err != nil { + return err + } + + var notifications GetZmqNotificationResult + for _, basic := range basics { + + address, err := url.Parse(basic.Address) + if err != nil { + return err + } + + notifications = append(notifications, struct { + Type string + Address *url.URL + HighWaterMark int + }{ + Type: basic.Type, + Address: address, + HighWaterMark: basic.Hwm, + }) + } + + *z = notifications + + return nil +} diff --git a/btcutil/LICENSE b/btcutil/LICENSE new file mode 100644 index 0000000000..3e7b16791f --- /dev/null +++ b/btcutil/LICENSE @@ -0,0 +1,16 @@ +ISC License + +Copyright (c) 2013-2017 The btcsuite developers +Copyright (c) 2016-2017 The Lightning Network Developers + +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/btcutil/README.md b/btcutil/README.md new file mode 100644 index 0000000000..ad32607ca5 --- /dev/null +++ b/btcutil/README.md @@ -0,0 +1,49 @@ +btcutil +======= + +[![Build Status](https://github.com/btcsuite/btcd/btcutil/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/btcutil/actions) +[![ISC License](https://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://godoc.org/github.com/btcsuite/btcd/btcutil) + +Package btcutil provides bitcoin-specific convenience functions and types. +A comprehensive suite of tests is provided to ensure proper functionality. See +`test_coverage.txt` for the gocov coverage report. Alternatively, if you are +running a POSIX OS, you can run the `cov_report.sh` script for a real-time +report. + +This package was developed for btcd, an alternative full-node implementation of +bitcoin which is under active development by Conformal. Although it was +primarily written for btcd, this package has intentionally been designed so it +can be used as a standalone package for any projects needing the functionality +provided. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil +``` + +## GPG Verification Key + +All official release tags are signed by Conformal so users can ensure the code +has not been tampered with and is coming from the btcsuite developers. To +verify the signature perform the following: + +- Download the public key from the Conformal website at + https://opensource.conformal.com/GIT-GPG-KEY-conformal.txt + +- Import the public key into your GPG keyring: + ```bash + gpg --import GIT-GPG-KEY-conformal.txt + ``` + +- Verify the release tag with the following command where `TAG_NAME` is a + placeholder for the specific tag: + ```bash + git tag -v TAG_NAME + ``` + +## License + +Package btcutil is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/address.go b/btcutil/address.go new file mode 100644 index 0000000000..d0367abfc8 --- /dev/null +++ b/btcutil/address.go @@ -0,0 +1,711 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "bytes" + "encoding/hex" + "errors" + "fmt" + "strings" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil/base58" + "github.com/btcsuite/btcd/btcutil/bech32" + "github.com/btcsuite/btcd/chaincfg" + "golang.org/x/crypto/ripemd160" +) + +// UnsupportedWitnessVerError describes an error where a segwit address being +// decoded has an unsupported witness version. +type UnsupportedWitnessVerError byte + +func (e UnsupportedWitnessVerError) Error() string { + return fmt.Sprintf("unsupported witness version: %#x", byte(e)) +} + +// UnsupportedWitnessProgLenError describes an error where a segwit address +// being decoded has an unsupported witness program length. +type UnsupportedWitnessProgLenError int + +func (e UnsupportedWitnessProgLenError) Error() string { + return fmt.Sprintf("unsupported witness program length: %d", int(e)) +} + +var ( + // ErrChecksumMismatch describes an error where decoding failed due + // to a bad checksum. + ErrChecksumMismatch = errors.New("checksum mismatch") + + // ErrUnknownAddressType describes an error where an address can not + // decoded as a specific address type due to the string encoding + // beginning with an identifier byte unknown to any standard or + // registered (via chaincfg.Register) network. + ErrUnknownAddressType = errors.New("unknown address type") + + // ErrAddressCollision describes an error where an address can not + // be uniquely determined as either a pay-to-pubkey-hash or + // pay-to-script-hash address since the leading identifier is used for + // describing both address kinds, but for different networks. Rather + // than assuming or defaulting to one or the other, this error is + // returned and the caller must decide how to decode the address. + ErrAddressCollision = errors.New("address collision") +) + +// encodeAddress returns a human-readable payment address given a ripemd160 hash +// and netID which encodes the bitcoin network and address type. It is used +// in both pay-to-pubkey-hash (P2PKH) and pay-to-script-hash (P2SH) address +// encoding. +func encodeAddress(hash160 []byte, netID byte) string { + // Format is 1 byte for a network and address class (i.e. P2PKH vs + // P2SH), 20 bytes for a RIPEMD160 hash, and 4 bytes of checksum. + return base58.CheckEncode(hash160[:ripemd160.Size], netID) +} + +// encodeSegWitAddress creates a bech32 (or bech32m for SegWit v1) encoded +// address string representation from witness version and witness program. +func encodeSegWitAddress(hrp string, witnessVersion byte, witnessProgram []byte) (string, error) { + // Group the address bytes into 5 bit groups, as this is what is used to + // encode each character in the address string. + converted, err := bech32.ConvertBits(witnessProgram, 8, 5, true) + if err != nil { + return "", err + } + + // Concatenate the witness version and program, and encode the resulting + // bytes using bech32 encoding. + combined := make([]byte, len(converted)+1) + combined[0] = witnessVersion + copy(combined[1:], converted) + + var bech string + switch witnessVersion { + case 0: + bech, err = bech32.Encode(hrp, combined) + + case 1: + bech, err = bech32.EncodeM(hrp, combined) + + default: + return "", fmt.Errorf("unsupported witness version %d", + witnessVersion) + } + if err != nil { + return "", err + } + + // Check validity by decoding the created address. + version, program, err := decodeSegWitAddress(bech) + if err != nil { + return "", fmt.Errorf("invalid segwit address: %v", err) + } + + if version != witnessVersion || !bytes.Equal(program, witnessProgram) { + return "", fmt.Errorf("invalid segwit address") + } + + return bech, nil +} + +// Address is an interface type for any type of destination a transaction +// output may spend to. This includes pay-to-pubkey (P2PK), pay-to-pubkey-hash +// (P2PKH), and pay-to-script-hash (P2SH). Address is designed to be generic +// enough that other kinds of addresses may be added in the future without +// changing the decoding and encoding API. +type Address interface { + // String returns the string encoding of the transaction output + // destination. + // + // Please note that String differs subtly from EncodeAddress: String + // will return the value as a string without any conversion, while + // EncodeAddress may convert destination types (for example, + // converting pubkeys to P2PKH addresses) before encoding as a + // payment address string. + String() string + + // EncodeAddress returns the string encoding of the payment address + // associated with the Address value. See the comment on String + // for how this method differs from String. + EncodeAddress() string + + // ScriptAddress returns the raw bytes of the address to be used + // when inserting the address into a txout's script. + ScriptAddress() []byte + + // IsForNet returns whether or not the address is associated with the + // passed bitcoin network. + IsForNet(*chaincfg.Params) bool +} + +// DecodeAddress decodes the string encoding of an address and returns +// the Address if addr is a valid encoding for a known address type. +// +// The bitcoin network the address is associated with is extracted if possible. +// When the address does not encode the network, such as in the case of a raw +// public key, the address will be associated with the passed defaultNet. +func DecodeAddress(addr string, defaultNet *chaincfg.Params) (Address, error) { + // Bech32 encoded segwit addresses start with a human-readable part + // (hrp) followed by '1'. For Bitcoin mainnet the hrp is "bc", and for + // testnet it is "tb". If the address string has a prefix that matches + // one of the prefixes for the known networks, we try to decode it as + // a segwit address. + oneIndex := strings.LastIndexByte(addr, '1') + if oneIndex > 1 { + prefix := addr[:oneIndex+1] + if chaincfg.IsBech32SegwitPrefix(prefix) { + witnessVer, witnessProg, err := decodeSegWitAddress(addr) + if err != nil { + return nil, err + } + + // We currently only support P2WPKH and P2WSH, which is + // witness version 0 and P2TR which is witness version + // 1. + if witnessVer != 0 && witnessVer != 1 { + return nil, UnsupportedWitnessVerError(witnessVer) + } + + // The HRP is everything before the found '1'. + hrp := prefix[:len(prefix)-1] + + switch len(witnessProg) { + case 20: + return newAddressWitnessPubKeyHash(hrp, witnessProg) + case 32: + if witnessVer == 1 { + return newAddressTaproot(hrp, witnessProg) + } + + return newAddressWitnessScriptHash(hrp, witnessProg) + default: + return nil, UnsupportedWitnessProgLenError(len(witnessProg)) + } + } + } + + // Serialized public keys are either 65 bytes (130 hex chars) if + // uncompressed/hybrid or 33 bytes (66 hex chars) if compressed. + if len(addr) == 130 || len(addr) == 66 { + serializedPubKey, err := hex.DecodeString(addr) + if err != nil { + return nil, err + } + return NewAddressPubKey(serializedPubKey, defaultNet) + } + + // Switch on decoded length to determine the type. + decoded, netID, err := base58.CheckDecode(addr) + if err != nil { + if err == base58.ErrChecksum { + return nil, ErrChecksumMismatch + } + return nil, errors.New("decoded address is of unknown format") + } + switch len(decoded) { + case ripemd160.Size: // P2PKH or P2SH + isP2PKH := netID == defaultNet.PubKeyHashAddrID + isP2SH := netID == defaultNet.ScriptHashAddrID + switch hash160 := decoded; { + case isP2PKH && isP2SH: + return nil, ErrAddressCollision + case isP2PKH: + return newAddressPubKeyHash(hash160, netID) + case isP2SH: + return newAddressScriptHashFromHash(hash160, netID) + default: + return nil, ErrUnknownAddressType + } + + default: + return nil, errors.New("decoded address is of unknown size") + } +} + +// decodeSegWitAddress parses a bech32 encoded segwit address string and +// returns the witness version and witness program byte representation. +func decodeSegWitAddress(address string) (byte, []byte, error) { + // Decode the bech32 encoded address. + _, data, bech32version, err := bech32.DecodeGeneric(address) + if err != nil { + return 0, nil, err + } + + // The first byte of the decoded address is the witness version, it must + // exist. + if len(data) < 1 { + return 0, nil, fmt.Errorf("no witness version") + } + + // ...and be <= 16. + version := data[0] + if version > 16 { + return 0, nil, fmt.Errorf("invalid witness version: %v", version) + } + + // The remaining characters of the address returned are grouped into + // words of 5 bits. In order to restore the original witness program + // bytes, we'll need to regroup into 8 bit words. + regrouped, err := bech32.ConvertBits(data[1:], 5, 8, false) + if err != nil { + return 0, nil, err + } + + // The regrouped data must be between 2 and 40 bytes. + if len(regrouped) < 2 || len(regrouped) > 40 { + return 0, nil, fmt.Errorf("invalid data length") + } + + // For witness version 0, address MUST be exactly 20 or 32 bytes. + if version == 0 && len(regrouped) != 20 && len(regrouped) != 32 { + return 0, nil, fmt.Errorf("invalid data length for witness "+ + "version 0: %v", len(regrouped)) + } + + // For witness version 0, the bech32 encoding must be used. + if version == 0 && bech32version != bech32.Version0 { + return 0, nil, fmt.Errorf("invalid checksum expected bech32 " + + "encoding for address with witness version 0") + } + + // For witness version 1, the bech32m encoding must be used. + if version == 1 && bech32version != bech32.VersionM { + return 0, nil, fmt.Errorf("invalid checksum expected bech32m " + + "encoding for address with witness version 1") + } + + return version, regrouped, nil +} + +// AddressPubKeyHash is an Address for a pay-to-pubkey-hash (P2PKH) +// transaction. +type AddressPubKeyHash struct { + hash [ripemd160.Size]byte + netID byte +} + +// NewAddressPubKeyHash returns a new AddressPubKeyHash. pkHash mustbe 20 +// bytes. +func NewAddressPubKeyHash(pkHash []byte, net *chaincfg.Params) (*AddressPubKeyHash, error) { + return newAddressPubKeyHash(pkHash, net.PubKeyHashAddrID) +} + +// newAddressPubKeyHash is the internal API to create a pubkey hash address +// with a known leading identifier byte for a network, rather than looking +// it up through its parameters. This is useful when creating a new address +// structure from a string encoding where the identifier byte is already +// known. +func newAddressPubKeyHash(pkHash []byte, netID byte) (*AddressPubKeyHash, error) { + // Check for a valid pubkey hash length. + if len(pkHash) != ripemd160.Size { + return nil, errors.New("pkHash must be 20 bytes") + } + + addr := &AddressPubKeyHash{netID: netID} + copy(addr.hash[:], pkHash) + return addr, nil +} + +// EncodeAddress returns the string encoding of a pay-to-pubkey-hash +// address. Part of the Address interface. +func (a *AddressPubKeyHash) EncodeAddress() string { + return encodeAddress(a.hash[:], a.netID) +} + +// ScriptAddress returns the bytes to be included in a txout script to pay +// to a pubkey hash. Part of the Address interface. +func (a *AddressPubKeyHash) ScriptAddress() []byte { + return a.hash[:] +} + +// IsForNet returns whether or not the pay-to-pubkey-hash address is associated +// with the passed bitcoin network. +func (a *AddressPubKeyHash) IsForNet(net *chaincfg.Params) bool { + return a.netID == net.PubKeyHashAddrID +} + +// String returns a human-readable string for the pay-to-pubkey-hash address. +// This is equivalent to calling EncodeAddress, but is provided so the type can +// be used as a fmt.Stringer. +func (a *AddressPubKeyHash) String() string { + return a.EncodeAddress() +} + +// Hash160 returns the underlying array of the pubkey hash. This can be useful +// when an array is more appropriate than a slice (for example, when used as map +// keys). +func (a *AddressPubKeyHash) Hash160() *[ripemd160.Size]byte { + return &a.hash +} + +// AddressScriptHash is an Address for a pay-to-script-hash (P2SH) +// transaction. +type AddressScriptHash struct { + hash [ripemd160.Size]byte + netID byte +} + +// NewAddressScriptHash returns a new AddressScriptHash. +func NewAddressScriptHash(serializedScript []byte, net *chaincfg.Params) (*AddressScriptHash, error) { + scriptHash := Hash160(serializedScript) + return newAddressScriptHashFromHash(scriptHash, net.ScriptHashAddrID) +} + +// NewAddressScriptHashFromHash returns a new AddressScriptHash. scriptHash +// must be 20 bytes. +func NewAddressScriptHashFromHash(scriptHash []byte, net *chaincfg.Params) (*AddressScriptHash, error) { + return newAddressScriptHashFromHash(scriptHash, net.ScriptHashAddrID) +} + +// newAddressScriptHashFromHash is the internal API to create a script hash +// address with a known leading identifier byte for a network, rather than +// looking it up through its parameters. This is useful when creating a new +// address structure from a string encoding where the identifier byte is already +// known. +func newAddressScriptHashFromHash(scriptHash []byte, netID byte) (*AddressScriptHash, error) { + // Check for a valid script hash length. + if len(scriptHash) != ripemd160.Size { + return nil, errors.New("scriptHash must be 20 bytes") + } + + addr := &AddressScriptHash{netID: netID} + copy(addr.hash[:], scriptHash) + return addr, nil +} + +// EncodeAddress returns the string encoding of a pay-to-script-hash +// address. Part of the Address interface. +func (a *AddressScriptHash) EncodeAddress() string { + return encodeAddress(a.hash[:], a.netID) +} + +// ScriptAddress returns the bytes to be included in a txout script to pay +// to a script hash. Part of the Address interface. +func (a *AddressScriptHash) ScriptAddress() []byte { + return a.hash[:] +} + +// IsForNet returns whether or not the pay-to-script-hash address is associated +// with the passed bitcoin network. +func (a *AddressScriptHash) IsForNet(net *chaincfg.Params) bool { + return a.netID == net.ScriptHashAddrID +} + +// String returns a human-readable string for the pay-to-script-hash address. +// This is equivalent to calling EncodeAddress, but is provided so the type can +// be used as a fmt.Stringer. +func (a *AddressScriptHash) String() string { + return a.EncodeAddress() +} + +// Hash160 returns the underlying array of the script hash. This can be useful +// when an array is more appropriate than a slice (for example, when used as map +// keys). +func (a *AddressScriptHash) Hash160() *[ripemd160.Size]byte { + return &a.hash +} + +// PubKeyFormat describes what format to use for a pay-to-pubkey address. +type PubKeyFormat int + +const ( + // PKFUncompressed indicates the pay-to-pubkey address format is an + // uncompressed public key. + PKFUncompressed PubKeyFormat = iota + + // PKFCompressed indicates the pay-to-pubkey address format is a + // compressed public key. + PKFCompressed +) + +// AddressPubKey is an Address for a pay-to-pubkey transaction. +type AddressPubKey struct { + pubKeyFormat PubKeyFormat + pubKey *btcec.PublicKey + pubKeyHashID byte +} + +// NewAddressPubKey returns a new AddressPubKey which represents a pay-to-pubkey +// address. The serializedPubKey parameter must be a valid pubkey and can be +// uncompressed, compressed, or hybrid. +func NewAddressPubKey(serializedPubKey []byte, net *chaincfg.Params) (*AddressPubKey, error) { + pubKey, err := btcec.ParsePubKey(serializedPubKey) + if err != nil { + return nil, err + } + + // Set the format of the pubkey. This probably should be returned + // from btcec, but do it here to avoid API churn. We already know the + // pubkey is valid since it parsed above, so it's safe to simply examine + // the leading byte to get the format. + pkFormat := PKFUncompressed + switch serializedPubKey[0] { + case 0x02, 0x03: + pkFormat = PKFCompressed + } + + return &AddressPubKey{ + pubKeyFormat: pkFormat, + pubKey: pubKey, + pubKeyHashID: net.PubKeyHashAddrID, + }, nil +} + +// serialize returns the serialization of the public key according to the +// format associated with the address. +func (a *AddressPubKey) serialize() []byte { + switch a.pubKeyFormat { + default: + fallthrough + case PKFUncompressed: + return a.pubKey.SerializeUncompressed() + + case PKFCompressed: + return a.pubKey.SerializeCompressed() + } +} + +// EncodeAddress returns the string encoding of the public key as a +// pay-to-pubkey-hash. Note that the public key format (uncompressed, +// compressed, etc) will change the resulting address. This is expected since +// pay-to-pubkey-hash is a hash of the serialized public key which obviously +// differs with the format. At the time of this writing, most Bitcoin addresses +// are pay-to-pubkey-hash constructed from the uncompressed public key. +// +// Part of the Address interface. +func (a *AddressPubKey) EncodeAddress() string { + return encodeAddress(Hash160(a.serialize()), a.pubKeyHashID) +} + +// ScriptAddress returns the bytes to be included in a txout script to pay +// to a public key. Setting the public key format will affect the output of +// this function accordingly. Part of the Address interface. +func (a *AddressPubKey) ScriptAddress() []byte { + return a.serialize() +} + +// IsForNet returns whether or not the pay-to-pubkey address is associated +// with the passed bitcoin network. +func (a *AddressPubKey) IsForNet(net *chaincfg.Params) bool { + return a.pubKeyHashID == net.PubKeyHashAddrID +} + +// String returns the hex-encoded human-readable string for the pay-to-pubkey +// address. This is not the same as calling EncodeAddress. +func (a *AddressPubKey) String() string { + return hex.EncodeToString(a.serialize()) +} + +// Format returns the format (uncompressed, compressed, etc) of the +// pay-to-pubkey address. +func (a *AddressPubKey) Format() PubKeyFormat { + return a.pubKeyFormat +} + +// SetFormat sets the format (uncompressed, compressed, etc) of the +// pay-to-pubkey address. +func (a *AddressPubKey) SetFormat(pkFormat PubKeyFormat) { + a.pubKeyFormat = pkFormat +} + +// AddressPubKeyHash returns the pay-to-pubkey address converted to a +// pay-to-pubkey-hash address. Note that the public key format (uncompressed, +// compressed, etc) will change the resulting address. This is expected since +// pay-to-pubkey-hash is a hash of the serialized public key which obviously +// differs with the format. At the time of this writing, most Bitcoin addresses +// are pay-to-pubkey-hash constructed from the uncompressed public key. +func (a *AddressPubKey) AddressPubKeyHash() *AddressPubKeyHash { + addr := &AddressPubKeyHash{netID: a.pubKeyHashID} + copy(addr.hash[:], Hash160(a.serialize())) + return addr +} + +// PubKey returns the underlying public key for the address. +func (a *AddressPubKey) PubKey() *btcec.PublicKey { + return a.pubKey +} + +// AddressSegWit is the base address type for all SegWit addresses. +type AddressSegWit struct { + hrp string + witnessVersion byte + witnessProgram []byte +} + +// EncodeAddress returns the bech32 (or bech32m for SegWit v1) string encoding +// of an AddressSegWit. +// +// NOTE: This method is part of the Address interface. +func (a *AddressSegWit) EncodeAddress() string { + str, err := encodeSegWitAddress( + a.hrp, a.witnessVersion, a.witnessProgram[:], + ) + if err != nil { + return "" + } + return str +} + +// ScriptAddress returns the witness program for this address. +// +// NOTE: This method is part of the Address interface. +func (a *AddressSegWit) ScriptAddress() []byte { + return a.witnessProgram[:] +} + +// IsForNet returns whether the AddressSegWit is associated with the passed +// bitcoin network. +// +// NOTE: This method is part of the Address interface. +func (a *AddressSegWit) IsForNet(net *chaincfg.Params) bool { + return a.hrp == net.Bech32HRPSegwit +} + +// String returns a human-readable string for the AddressWitnessPubKeyHash. +// This is equivalent to calling EncodeAddress, but is provided so the type +// can be used as a fmt.Stringer. +// +// NOTE: This method is part of the Address interface. +func (a *AddressSegWit) String() string { + return a.EncodeAddress() +} + +// Hrp returns the human-readable part of the bech32 (or bech32m for SegWit v1) +// encoded AddressSegWit. +func (a *AddressSegWit) Hrp() string { + return a.hrp +} + +// WitnessVersion returns the witness version of the AddressSegWit. +func (a *AddressSegWit) WitnessVersion() byte { + return a.witnessVersion +} + +// WitnessProgram returns the witness program of the AddressSegWit. +func (a *AddressSegWit) WitnessProgram() []byte { + return a.witnessProgram[:] +} + +// AddressWitnessPubKeyHash is an Address for a pay-to-witness-pubkey-hash +// (P2WPKH) output. See BIP 173 for further details regarding native segregated +// witness address encoding: +// https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki +type AddressWitnessPubKeyHash struct { + AddressSegWit +} + +// NewAddressWitnessPubKeyHash returns a new AddressWitnessPubKeyHash. +func NewAddressWitnessPubKeyHash(witnessProg []byte, + net *chaincfg.Params) (*AddressWitnessPubKeyHash, error) { + + return newAddressWitnessPubKeyHash(net.Bech32HRPSegwit, witnessProg) +} + +// newAddressWitnessPubKeyHash is an internal helper function to create an +// AddressWitnessPubKeyHash with a known human-readable part, rather than +// looking it up through its parameters. +func newAddressWitnessPubKeyHash(hrp string, + witnessProg []byte) (*AddressWitnessPubKeyHash, error) { + + // Check for valid program length for witness version 0, which is 20 + // for P2WPKH. + if len(witnessProg) != 20 { + return nil, errors.New("witness program must be 20 " + + "bytes for p2wpkh") + } + + addr := &AddressWitnessPubKeyHash{ + AddressSegWit{ + hrp: strings.ToLower(hrp), + witnessVersion: 0x00, + witnessProgram: witnessProg, + }, + } + + return addr, nil +} + +// Hash160 returns the witness program of the AddressWitnessPubKeyHash as a +// byte array. +func (a *AddressWitnessPubKeyHash) Hash160() *[20]byte { + var pubKeyHashWitnessProgram [20]byte + copy(pubKeyHashWitnessProgram[:], a.witnessProgram) + return &pubKeyHashWitnessProgram +} + +// AddressWitnessScriptHash is an Address for a pay-to-witness-script-hash +// (P2WSH) output. See BIP 173 for further details regarding native segregated +// witness address encoding: +// https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki +type AddressWitnessScriptHash struct { + AddressSegWit +} + +// NewAddressWitnessScriptHash returns a new AddressWitnessPubKeyHash. +func NewAddressWitnessScriptHash(witnessProg []byte, + net *chaincfg.Params) (*AddressWitnessScriptHash, error) { + + return newAddressWitnessScriptHash(net.Bech32HRPSegwit, witnessProg) +} + +// newAddressWitnessScriptHash is an internal helper function to create an +// AddressWitnessScriptHash with a known human-readable part, rather than +// looking it up through its parameters. +func newAddressWitnessScriptHash(hrp string, + witnessProg []byte) (*AddressWitnessScriptHash, error) { + + // Check for valid program length for witness version 0, which is 32 + // for P2WSH. + if len(witnessProg) != 32 { + return nil, errors.New("witness program must be 32 " + + "bytes for p2wsh") + } + + addr := &AddressWitnessScriptHash{ + AddressSegWit{ + hrp: strings.ToLower(hrp), + witnessVersion: 0x00, + witnessProgram: witnessProg, + }, + } + + return addr, nil +} + +// AddressTaproot is an Address for a pay-to-taproot (P2TR) output. See BIP 341 +// for further details. +type AddressTaproot struct { + AddressSegWit +} + +// NewAddressTaproot returns a new AddressTaproot. +func NewAddressTaproot(witnessProg []byte, + net *chaincfg.Params) (*AddressTaproot, error) { + + return newAddressTaproot(net.Bech32HRPSegwit, witnessProg) +} + +// newAddressWitnessScriptHash is an internal helper function to create an +// AddressWitnessScriptHash with a known human-readable part, rather than +// looking it up through its parameters. +func newAddressTaproot(hrp string, + witnessProg []byte) (*AddressTaproot, error) { + + // Check for valid program length for witness version 1, which is 32 + // for P2TR. + if len(witnessProg) != 32 { + return nil, errors.New("witness program must be 32 bytes for " + + "p2tr") + } + + addr := &AddressTaproot{ + AddressSegWit{ + hrp: strings.ToLower(hrp), + witnessVersion: 0x01, + witnessProgram: witnessProg, + }, + } + + return addr, nil +} diff --git a/btcutil/address_test.go b/btcutil/address_test.go new file mode 100644 index 0000000000..f5ae2ac0d5 --- /dev/null +++ b/btcutil/address_test.go @@ -0,0 +1,896 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil_test + +import ( + "bytes" + "encoding/hex" + "fmt" + "reflect" + "strings" + "testing" + + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/wire" + "golang.org/x/crypto/ripemd160" +) + +type CustomParamStruct struct { + Net wire.BitcoinNet + PubKeyHashAddrID byte + ScriptHashAddrID byte + Bech32HRPSegwit string +} + +var CustomParams = CustomParamStruct{ + Net: 0xdbb6c0fb, // litecoin mainnet HD version bytes + PubKeyHashAddrID: 0x30, // starts with L + ScriptHashAddrID: 0x32, // starts with M + Bech32HRPSegwit: "ltc", // starts with ltc +} + +// We use this function to be able to test functionality in DecodeAddress for +// defaultNet addresses +func applyCustomParams(params chaincfg.Params, customParams CustomParamStruct) chaincfg.Params { + params.Net = customParams.Net + params.PubKeyHashAddrID = customParams.PubKeyHashAddrID + params.ScriptHashAddrID = customParams.ScriptHashAddrID + params.Bech32HRPSegwit = customParams.Bech32HRPSegwit + return params +} + +var customParams = applyCustomParams(chaincfg.MainNetParams, CustomParams) + +func TestAddresses(t *testing.T) { + tests := []struct { + name string + addr string + encoded string + valid bool + result btcutil.Address + f func() (btcutil.Address, error) + net *chaincfg.Params + }{ + // Positive P2PKH tests. + { + name: "mainnet p2pkh", + addr: "1MirQ9bwyQcGVJPwKUgapu5ouK2E2Ey4gX", + encoded: "1MirQ9bwyQcGVJPwKUgapu5ouK2E2Ey4gX", + valid: true, + result: btcutil.TstAddressPubKeyHash( + [ripemd160.Size]byte{ + 0xe3, 0x4c, 0xce, 0x70, 0xc8, 0x63, 0x73, 0x27, 0x3e, 0xfc, + 0xc5, 0x4c, 0xe7, 0xd2, 0xa4, 0x91, 0xbb, 0x4a, 0x0e, 0x84}, + chaincfg.MainNetParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0xe3, 0x4c, 0xce, 0x70, 0xc8, 0x63, 0x73, 0x27, 0x3e, 0xfc, + 0xc5, 0x4c, 0xe7, 0xd2, 0xa4, 0x91, 0xbb, 0x4a, 0x0e, 0x84} + return btcutil.NewAddressPubKeyHash(pkHash, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "mainnet p2pkh 2", + addr: "12MzCDwodF9G1e7jfwLXfR164RNtx4BRVG", + encoded: "12MzCDwodF9G1e7jfwLXfR164RNtx4BRVG", + valid: true, + result: btcutil.TstAddressPubKeyHash( + [ripemd160.Size]byte{ + 0x0e, 0xf0, 0x30, 0x10, 0x7f, 0xd2, 0x6e, 0x0b, 0x6b, 0xf4, + 0x05, 0x12, 0xbc, 0xa2, 0xce, 0xb1, 0xdd, 0x80, 0xad, 0xaa}, + chaincfg.MainNetParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0x0e, 0xf0, 0x30, 0x10, 0x7f, 0xd2, 0x6e, 0x0b, 0x6b, 0xf4, + 0x05, 0x12, 0xbc, 0xa2, 0xce, 0xb1, 0xdd, 0x80, 0xad, 0xaa} + return btcutil.NewAddressPubKeyHash(pkHash, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "litecoin mainnet p2pkh", + addr: "LM2WMpR1Rp6j3Sa59cMXMs1SPzj9eXpGc1", + encoded: "LM2WMpR1Rp6j3Sa59cMXMs1SPzj9eXpGc1", + valid: true, + result: btcutil.TstAddressPubKeyHash( + [ripemd160.Size]byte{ + 0x13, 0xc6, 0x0d, 0x8e, 0x68, 0xd7, 0x34, 0x9f, 0x5b, 0x4c, + 0xa3, 0x62, 0xc3, 0x95, 0x4b, 0x15, 0x04, 0x50, 0x61, 0xb1}, + CustomParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0x13, 0xc6, 0x0d, 0x8e, 0x68, 0xd7, 0x34, 0x9f, 0x5b, 0x4c, + 0xa3, 0x62, 0xc3, 0x95, 0x4b, 0x15, 0x04, 0x50, 0x61, 0xb1} + return btcutil.NewAddressPubKeyHash(pkHash, &customParams) + }, + net: &customParams, + }, + { + name: "testnet p2pkh", + addr: "mrX9vMRYLfVy1BnZbc5gZjuyaqH3ZW2ZHz", + encoded: "mrX9vMRYLfVy1BnZbc5gZjuyaqH3ZW2ZHz", + valid: true, + result: btcutil.TstAddressPubKeyHash( + [ripemd160.Size]byte{ + 0x78, 0xb3, 0x16, 0xa0, 0x86, 0x47, 0xd5, 0xb7, 0x72, 0x83, + 0xe5, 0x12, 0xd3, 0x60, 0x3f, 0x1f, 0x1c, 0x8d, 0xe6, 0x8f}, + chaincfg.TestNet3Params.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0x78, 0xb3, 0x16, 0xa0, 0x86, 0x47, 0xd5, 0xb7, 0x72, 0x83, + 0xe5, 0x12, 0xd3, 0x60, 0x3f, 0x1f, 0x1c, 0x8d, 0xe6, 0x8f} + return btcutil.NewAddressPubKeyHash(pkHash, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + + // Negative P2PKH tests. + { + name: "p2pkh wrong hash length", + addr: "", + valid: false, + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0x00, 0x0e, 0xf0, 0x30, 0x10, 0x7f, 0xd2, 0x6e, 0x0b, 0x6b, + 0xf4, 0x05, 0x12, 0xbc, 0xa2, 0xce, 0xb1, 0xdd, 0x80, 0xad, + 0xaa} + return btcutil.NewAddressPubKeyHash(pkHash, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "p2pkh bad checksum", + addr: "1MirQ9bwyQcGVJPwKUgapu5ouK2E2Ey4gY", + valid: false, + net: &chaincfg.MainNetParams, + }, + + // Positive P2SH tests. + { + // Taken from transactions: + // output: 3c9018e8d5615c306d72397f8f5eef44308c98fb576a88e030c25456b4f3a7ac + // input: 837dea37ddc8b1e3ce646f1a656e79bbd8cc7f558ac56a169626d649ebe2a3ba. + name: "mainnet p2sh", + addr: "3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC", + encoded: "3QJmV3qfvL9SuYo34YihAf3sRCW3qSinyC", + valid: true, + result: btcutil.TstAddressScriptHash( + [ripemd160.Size]byte{ + 0xf8, 0x15, 0xb0, 0x36, 0xd9, 0xbb, 0xbc, 0xe5, 0xe9, 0xf2, + 0xa0, 0x0a, 0xbd, 0x1b, 0xf3, 0xdc, 0x91, 0xe9, 0x55, 0x10}, + chaincfg.MainNetParams.ScriptHashAddrID), + f: func() (btcutil.Address, error) { + script := []byte{ + 0x52, 0x41, 0x04, 0x91, 0xbb, 0xa2, 0x51, 0x09, 0x12, 0xa5, + 0xbd, 0x37, 0xda, 0x1f, 0xb5, 0xb1, 0x67, 0x30, 0x10, 0xe4, + 0x3d, 0x2c, 0x6d, 0x81, 0x2c, 0x51, 0x4e, 0x91, 0xbf, 0xa9, + 0xf2, 0xeb, 0x12, 0x9e, 0x1c, 0x18, 0x33, 0x29, 0xdb, 0x55, + 0xbd, 0x86, 0x8e, 0x20, 0x9a, 0xac, 0x2f, 0xbc, 0x02, 0xcb, + 0x33, 0xd9, 0x8f, 0xe7, 0x4b, 0xf2, 0x3f, 0x0c, 0x23, 0x5d, + 0x61, 0x26, 0xb1, 0xd8, 0x33, 0x4f, 0x86, 0x41, 0x04, 0x86, + 0x5c, 0x40, 0x29, 0x3a, 0x68, 0x0c, 0xb9, 0xc0, 0x20, 0xe7, + 0xb1, 0xe1, 0x06, 0xd8, 0xc1, 0x91, 0x6d, 0x3c, 0xef, 0x99, + 0xaa, 0x43, 0x1a, 0x56, 0xd2, 0x53, 0xe6, 0x92, 0x56, 0xda, + 0xc0, 0x9e, 0xf1, 0x22, 0xb1, 0xa9, 0x86, 0x81, 0x8a, 0x7c, + 0xb6, 0x24, 0x53, 0x2f, 0x06, 0x2c, 0x1d, 0x1f, 0x87, 0x22, + 0x08, 0x48, 0x61, 0xc5, 0xc3, 0x29, 0x1c, 0xcf, 0xfe, 0xf4, + 0xec, 0x68, 0x74, 0x41, 0x04, 0x8d, 0x24, 0x55, 0xd2, 0x40, + 0x3e, 0x08, 0x70, 0x8f, 0xc1, 0xf5, 0x56, 0x00, 0x2f, 0x1b, + 0x6c, 0xd8, 0x3f, 0x99, 0x2d, 0x08, 0x50, 0x97, 0xf9, 0x97, + 0x4a, 0xb0, 0x8a, 0x28, 0x83, 0x8f, 0x07, 0x89, 0x6f, 0xba, + 0xb0, 0x8f, 0x39, 0x49, 0x5e, 0x15, 0xfa, 0x6f, 0xad, 0x6e, + 0xdb, 0xfb, 0x1e, 0x75, 0x4e, 0x35, 0xfa, 0x1c, 0x78, 0x44, + 0xc4, 0x1f, 0x32, 0x2a, 0x18, 0x63, 0xd4, 0x62, 0x13, 0x53, + 0xae} + return btcutil.NewAddressScriptHash(script, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "litecoin mainnet P2SH ", + addr: "MVcg9uEvtWuP5N6V48EHfEtbz48qR8TKZ9", + encoded: "MVcg9uEvtWuP5N6V48EHfEtbz48qR8TKZ9", + valid: true, + result: btcutil.TstAddressScriptHash( + [ripemd160.Size]byte{ + 0xee, 0x34, 0xac, 0x67, 0x6b, 0xda, 0xf6, 0xe3, 0x70, 0xc8, + 0xc8, 0x20, 0xb9, 0x48, 0xed, 0xfa, 0xd3, 0xa8, 0x73, 0xd8}, + CustomParams.ScriptHashAddrID), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0xEE, 0x34, 0xAC, 0x67, 0x6B, 0xDA, 0xF6, 0xE3, 0x70, 0xC8, + 0xC8, 0x20, 0xB9, 0x48, 0xED, 0xFA, 0xD3, 0xA8, 0x73, 0xD8} + return btcutil.NewAddressScriptHashFromHash(pkHash, &customParams) + }, + net: &customParams, + }, + { + // Taken from transactions: + // output: b0539a45de13b3e0403909b8bd1a555b8cbe45fd4e3f3fda76f3a5f52835c29d + // input: (not yet redeemed at time test was written) + name: "mainnet p2sh 2", + addr: "3NukJ6fYZJ5Kk8bPjycAnruZkE5Q7UW7i8", + encoded: "3NukJ6fYZJ5Kk8bPjycAnruZkE5Q7UW7i8", + valid: true, + result: btcutil.TstAddressScriptHash( + [ripemd160.Size]byte{ + 0xe8, 0xc3, 0x00, 0xc8, 0x79, 0x86, 0xef, 0xa8, 0x4c, 0x37, + 0xc0, 0x51, 0x99, 0x29, 0x01, 0x9e, 0xf8, 0x6e, 0xb5, 0xb4}, + chaincfg.MainNetParams.ScriptHashAddrID), + f: func() (btcutil.Address, error) { + hash := []byte{ + 0xe8, 0xc3, 0x00, 0xc8, 0x79, 0x86, 0xef, 0xa8, 0x4c, 0x37, + 0xc0, 0x51, 0x99, 0x29, 0x01, 0x9e, 0xf8, 0x6e, 0xb5, 0xb4} + return btcutil.NewAddressScriptHashFromHash(hash, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + // Taken from bitcoind base58_keys_valid. + name: "testnet p2sh", + addr: "2NBFNJTktNa7GZusGbDbGKRZTxdK9VVez3n", + encoded: "2NBFNJTktNa7GZusGbDbGKRZTxdK9VVez3n", + valid: true, + result: btcutil.TstAddressScriptHash( + [ripemd160.Size]byte{ + 0xc5, 0x79, 0x34, 0x2c, 0x2c, 0x4c, 0x92, 0x20, 0x20, 0x5e, + 0x2c, 0xdc, 0x28, 0x56, 0x17, 0x04, 0x0c, 0x92, 0x4a, 0x0a}, + chaincfg.TestNet3Params.ScriptHashAddrID), + f: func() (btcutil.Address, error) { + hash := []byte{ + 0xc5, 0x79, 0x34, 0x2c, 0x2c, 0x4c, 0x92, 0x20, 0x20, 0x5e, + 0x2c, 0xdc, 0x28, 0x56, 0x17, 0x04, 0x0c, 0x92, 0x4a, 0x0a} + return btcutil.NewAddressScriptHashFromHash(hash, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + + // Negative P2SH tests. + { + name: "p2sh wrong hash length", + addr: "", + valid: false, + f: func() (btcutil.Address, error) { + hash := []byte{ + 0x00, 0xf8, 0x15, 0xb0, 0x36, 0xd9, 0xbb, 0xbc, 0xe5, 0xe9, + 0xf2, 0xa0, 0x0a, 0xbd, 0x1b, 0xf3, 0xdc, 0x91, 0xe9, 0x55, + 0x10} + return btcutil.NewAddressScriptHashFromHash(hash, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + + // Positive P2PK tests. + { + name: "mainnet p2pk compressed (0x02)", + addr: "02192d74d0cb94344c9569c2e77901573d8d7903c3ebec3a957724895dca52c6b4", + encoded: "13CG6SJ3yHUXo4Cr2RY4THLLJrNFuG3gUg", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x02, 0x19, 0x2d, 0x74, 0xd0, 0xcb, 0x94, 0x34, 0x4c, 0x95, + 0x69, 0xc2, 0xe7, 0x79, 0x01, 0x57, 0x3d, 0x8d, 0x79, 0x03, + 0xc3, 0xeb, 0xec, 0x3a, 0x95, 0x77, 0x24, 0x89, 0x5d, 0xca, + 0x52, 0xc6, 0xb4}, + btcutil.PKFCompressed, chaincfg.MainNetParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x02, 0x19, 0x2d, 0x74, 0xd0, 0xcb, 0x94, 0x34, 0x4c, 0x95, + 0x69, 0xc2, 0xe7, 0x79, 0x01, 0x57, 0x3d, 0x8d, 0x79, 0x03, + 0xc3, 0xeb, 0xec, 0x3a, 0x95, 0x77, 0x24, 0x89, 0x5d, 0xca, + 0x52, 0xc6, 0xb4} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "mainnet p2pk compressed (0x03)", + addr: "03b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e65", + encoded: "15sHANNUBSh6nDp8XkDPmQcW6n3EFwmvE6", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x03, 0xb0, 0xbd, 0x63, 0x42, 0x34, 0xab, 0xbb, 0x1b, 0xa1, + 0xe9, 0x86, 0xe8, 0x84, 0x18, 0x5c, 0x61, 0xcf, 0x43, 0xe0, + 0x01, 0xf9, 0x13, 0x7f, 0x23, 0xc2, 0xc4, 0x09, 0x27, 0x3e, + 0xb1, 0x6e, 0x65}, + btcutil.PKFCompressed, chaincfg.MainNetParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x03, 0xb0, 0xbd, 0x63, 0x42, 0x34, 0xab, 0xbb, 0x1b, 0xa1, + 0xe9, 0x86, 0xe8, 0x84, 0x18, 0x5c, 0x61, 0xcf, 0x43, 0xe0, + 0x01, 0xf9, 0x13, 0x7f, 0x23, 0xc2, 0xc4, 0x09, 0x27, 0x3e, + 0xb1, 0x6e, 0x65} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "mainnet p2pk uncompressed (0x04)", + addr: "0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2" + + "e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3", + encoded: "12cbQLTFMXRnSzktFkuoG3eHoMeFtpTu3S", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x04, 0x11, 0xdb, 0x93, 0xe1, 0xdc, 0xdb, 0x8a, 0x01, 0x6b, + 0x49, 0x84, 0x0f, 0x8c, 0x53, 0xbc, 0x1e, 0xb6, 0x8a, 0x38, + 0x2e, 0x97, 0xb1, 0x48, 0x2e, 0xca, 0xd7, 0xb1, 0x48, 0xa6, + 0x90, 0x9a, 0x5c, 0xb2, 0xe0, 0xea, 0xdd, 0xfb, 0x84, 0xcc, + 0xf9, 0x74, 0x44, 0x64, 0xf8, 0x2e, 0x16, 0x0b, 0xfa, 0x9b, + 0x8b, 0x64, 0xf9, 0xd4, 0xc0, 0x3f, 0x99, 0x9b, 0x86, 0x43, + 0xf6, 0x56, 0xb4, 0x12, 0xa3}, + btcutil.PKFUncompressed, chaincfg.MainNetParams.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x04, 0x11, 0xdb, 0x93, 0xe1, 0xdc, 0xdb, 0x8a, 0x01, 0x6b, + 0x49, 0x84, 0x0f, 0x8c, 0x53, 0xbc, 0x1e, 0xb6, 0x8a, 0x38, + 0x2e, 0x97, 0xb1, 0x48, 0x2e, 0xca, 0xd7, 0xb1, 0x48, 0xa6, + 0x90, 0x9a, 0x5c, 0xb2, 0xe0, 0xea, 0xdd, 0xfb, 0x84, 0xcc, + 0xf9, 0x74, 0x44, 0x64, 0xf8, 0x2e, 0x16, 0x0b, 0xfa, 0x9b, + 0x8b, 0x64, 0xf9, 0xd4, 0xc0, 0x3f, 0x99, 0x9b, 0x86, 0x43, + 0xf6, 0x56, 0xb4, 0x12, 0xa3} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "testnet p2pk compressed (0x02)", + addr: "02192d74d0cb94344c9569c2e77901573d8d7903c3ebec3a957724895dca52c6b4", + encoded: "mhiDPVP2nJunaAgTjzWSHCYfAqxxrxzjmo", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x02, 0x19, 0x2d, 0x74, 0xd0, 0xcb, 0x94, 0x34, 0x4c, 0x95, + 0x69, 0xc2, 0xe7, 0x79, 0x01, 0x57, 0x3d, 0x8d, 0x79, 0x03, + 0xc3, 0xeb, 0xec, 0x3a, 0x95, 0x77, 0x24, 0x89, 0x5d, 0xca, + 0x52, 0xc6, 0xb4}, + btcutil.PKFCompressed, chaincfg.TestNet3Params.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x02, 0x19, 0x2d, 0x74, 0xd0, 0xcb, 0x94, 0x34, 0x4c, 0x95, + 0x69, 0xc2, 0xe7, 0x79, 0x01, 0x57, 0x3d, 0x8d, 0x79, 0x03, + 0xc3, 0xeb, 0xec, 0x3a, 0x95, 0x77, 0x24, 0x89, 0x5d, 0xca, + 0x52, 0xc6, 0xb4} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + { + name: "testnet p2pk compressed (0x03)", + addr: "03b0bd634234abbb1ba1e986e884185c61cf43e001f9137f23c2c409273eb16e65", + encoded: "mkPETRTSzU8MZLHkFKBmbKppxmdw9qT42t", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x03, 0xb0, 0xbd, 0x63, 0x42, 0x34, 0xab, 0xbb, 0x1b, 0xa1, + 0xe9, 0x86, 0xe8, 0x84, 0x18, 0x5c, 0x61, 0xcf, 0x43, 0xe0, + 0x01, 0xf9, 0x13, 0x7f, 0x23, 0xc2, 0xc4, 0x09, 0x27, 0x3e, + 0xb1, 0x6e, 0x65}, + btcutil.PKFCompressed, chaincfg.TestNet3Params.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x03, 0xb0, 0xbd, 0x63, 0x42, 0x34, 0xab, 0xbb, 0x1b, 0xa1, + 0xe9, 0x86, 0xe8, 0x84, 0x18, 0x5c, 0x61, 0xcf, 0x43, 0xe0, + 0x01, 0xf9, 0x13, 0x7f, 0x23, 0xc2, 0xc4, 0x09, 0x27, 0x3e, + 0xb1, 0x6e, 0x65} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + { + name: "testnet p2pk uncompressed (0x04)", + addr: "0411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5" + + "cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3", + encoded: "mh8YhPYEAYs3E7EVyKtB5xrcfMExkkdEMF", + valid: true, + result: btcutil.TstAddressPubKey( + []byte{ + 0x04, 0x11, 0xdb, 0x93, 0xe1, 0xdc, 0xdb, 0x8a, 0x01, 0x6b, + 0x49, 0x84, 0x0f, 0x8c, 0x53, 0xbc, 0x1e, 0xb6, 0x8a, 0x38, + 0x2e, 0x97, 0xb1, 0x48, 0x2e, 0xca, 0xd7, 0xb1, 0x48, 0xa6, + 0x90, 0x9a, 0x5c, 0xb2, 0xe0, 0xea, 0xdd, 0xfb, 0x84, 0xcc, + 0xf9, 0x74, 0x44, 0x64, 0xf8, 0x2e, 0x16, 0x0b, 0xfa, 0x9b, + 0x8b, 0x64, 0xf9, 0xd4, 0xc0, 0x3f, 0x99, 0x9b, 0x86, 0x43, + 0xf6, 0x56, 0xb4, 0x12, 0xa3}, + btcutil.PKFUncompressed, chaincfg.TestNet3Params.PubKeyHashAddrID), + f: func() (btcutil.Address, error) { + serializedPubKey := []byte{ + 0x04, 0x11, 0xdb, 0x93, 0xe1, 0xdc, 0xdb, 0x8a, 0x01, 0x6b, + 0x49, 0x84, 0x0f, 0x8c, 0x53, 0xbc, 0x1e, 0xb6, 0x8a, 0x38, + 0x2e, 0x97, 0xb1, 0x48, 0x2e, 0xca, 0xd7, 0xb1, 0x48, 0xa6, + 0x90, 0x9a, 0x5c, 0xb2, 0xe0, 0xea, 0xdd, 0xfb, 0x84, 0xcc, + 0xf9, 0x74, 0x44, 0x64, 0xf8, 0x2e, 0x16, 0x0b, 0xfa, 0x9b, + 0x8b, 0x64, 0xf9, 0xd4, 0xc0, 0x3f, 0x99, 0x9b, 0x86, 0x43, + 0xf6, 0x56, 0xb4, 0x12, 0xa3} + return btcutil.NewAddressPubKey(serializedPubKey, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + // Segwit address tests. + { + name: "segwit mainnet p2wpkh v0", + addr: "BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4", + encoded: "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t4", + valid: true, + result: btcutil.TstAddressWitnessPubKeyHash( + 0, + [20]byte{ + 0x75, 0x1e, 0x76, 0xe8, 0x19, 0x91, 0x96, 0xd4, 0x54, 0x94, + 0x1c, 0x45, 0xd1, 0xb3, 0xa3, 0x23, 0xf1, 0x43, 0x3b, 0xd6}, + chaincfg.MainNetParams.Bech32HRPSegwit), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0x75, 0x1e, 0x76, 0xe8, 0x19, 0x91, 0x96, 0xd4, 0x54, 0x94, + 0x1c, 0x45, 0xd1, 0xb3, 0xa3, 0x23, 0xf1, 0x43, 0x3b, 0xd6} + return btcutil.NewAddressWitnessPubKeyHash(pkHash, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit mainnet p2wsh v0", + addr: "bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3", + encoded: "bc1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3qccfmv3", + valid: true, + result: btcutil.TstAddressWitnessScriptHash( + 0, + [32]byte{ + 0x18, 0x63, 0x14, 0x3c, 0x14, 0xc5, 0x16, 0x68, + 0x04, 0xbd, 0x19, 0x20, 0x33, 0x56, 0xda, 0x13, + 0x6c, 0x98, 0x56, 0x78, 0xcd, 0x4d, 0x27, 0xa1, + 0xb8, 0xc6, 0x32, 0x96, 0x04, 0x90, 0x32, 0x62}, + chaincfg.MainNetParams.Bech32HRPSegwit), + f: func() (btcutil.Address, error) { + scriptHash := []byte{ + 0x18, 0x63, 0x14, 0x3c, 0x14, 0xc5, 0x16, 0x68, + 0x04, 0xbd, 0x19, 0x20, 0x33, 0x56, 0xda, 0x13, + 0x6c, 0x98, 0x56, 0x78, 0xcd, 0x4d, 0x27, 0xa1, + 0xb8, 0xc6, 0x32, 0x96, 0x04, 0x90, 0x32, 0x62} + return btcutil.NewAddressWitnessScriptHash(scriptHash, &chaincfg.MainNetParams) + }, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit testnet p2wpkh v0", + addr: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", + encoded: "tb1qw508d6qejxtdg4y5r3zarvary0c5xw7kxpjzsx", + valid: true, + result: btcutil.TstAddressWitnessPubKeyHash( + 0, + [20]byte{ + 0x75, 0x1e, 0x76, 0xe8, 0x19, 0x91, 0x96, 0xd4, 0x54, 0x94, + 0x1c, 0x45, 0xd1, 0xb3, 0xa3, 0x23, 0xf1, 0x43, 0x3b, 0xd6}, + chaincfg.TestNet3Params.Bech32HRPSegwit), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0x75, 0x1e, 0x76, 0xe8, 0x19, 0x91, 0x96, 0xd4, 0x54, 0x94, + 0x1c, 0x45, 0xd1, 0xb3, 0xa3, 0x23, 0xf1, 0x43, 0x3b, 0xd6} + return btcutil.NewAddressWitnessPubKeyHash(pkHash, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit testnet p2wsh v0", + addr: "tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7", + encoded: "tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7", + valid: true, + result: btcutil.TstAddressWitnessScriptHash( + 0, + [32]byte{ + 0x18, 0x63, 0x14, 0x3c, 0x14, 0xc5, 0x16, 0x68, + 0x04, 0xbd, 0x19, 0x20, 0x33, 0x56, 0xda, 0x13, + 0x6c, 0x98, 0x56, 0x78, 0xcd, 0x4d, 0x27, 0xa1, + 0xb8, 0xc6, 0x32, 0x96, 0x04, 0x90, 0x32, 0x62}, + chaincfg.TestNet3Params.Bech32HRPSegwit), + f: func() (btcutil.Address, error) { + scriptHash := []byte{ + 0x18, 0x63, 0x14, 0x3c, 0x14, 0xc5, 0x16, 0x68, + 0x04, 0xbd, 0x19, 0x20, 0x33, 0x56, 0xda, 0x13, + 0x6c, 0x98, 0x56, 0x78, 0xcd, 0x4d, 0x27, 0xa1, + 0xb8, 0xc6, 0x32, 0x96, 0x04, 0x90, 0x32, 0x62} + return btcutil.NewAddressWitnessScriptHash(scriptHash, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit testnet p2wsh witness v0", + addr: "tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy", + encoded: "tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy", + valid: true, + result: btcutil.TstAddressWitnessScriptHash( + 0, + [32]byte{ + 0x00, 0x00, 0x00, 0xc4, 0xa5, 0xca, 0xd4, 0x62, + 0x21, 0xb2, 0xa1, 0x87, 0x90, 0x5e, 0x52, 0x66, + 0x36, 0x2b, 0x99, 0xd5, 0xe9, 0x1c, 0x6c, 0xe2, + 0x4d, 0x16, 0x5d, 0xab, 0x93, 0xe8, 0x64, 0x33}, + chaincfg.TestNet3Params.Bech32HRPSegwit), + f: func() (btcutil.Address, error) { + scriptHash := []byte{ + 0x00, 0x00, 0x00, 0xc4, 0xa5, 0xca, 0xd4, 0x62, + 0x21, 0xb2, 0xa1, 0x87, 0x90, 0x5e, 0x52, 0x66, + 0x36, 0x2b, 0x99, 0xd5, 0xe9, 0x1c, 0x6c, 0xe2, + 0x4d, 0x16, 0x5d, 0xab, 0x93, 0xe8, 0x64, 0x33} + return btcutil.NewAddressWitnessScriptHash(scriptHash, &chaincfg.TestNet3Params) + }, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit litecoin mainnet p2wpkh v0", + addr: "LTC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KGMN4N9", + encoded: "ltc1qw508d6qejxtdg4y5r3zarvary0c5xw7kgmn4n9", + valid: true, + result: btcutil.TstAddressWitnessPubKeyHash( + 0, + [20]byte{ + 0x75, 0x1e, 0x76, 0xe8, 0x19, 0x91, 0x96, 0xd4, 0x54, 0x94, + 0x1c, 0x45, 0xd1, 0xb3, 0xa3, 0x23, 0xf1, 0x43, 0x3b, 0xd6}, + CustomParams.Bech32HRPSegwit, + ), + f: func() (btcutil.Address, error) { + pkHash := []byte{ + 0x75, 0x1e, 0x76, 0xe8, 0x19, 0x91, 0x96, 0xd4, 0x54, 0x94, + 0x1c, 0x45, 0xd1, 0xb3, 0xa3, 0x23, 0xf1, 0x43, 0x3b, 0xd6} + return btcutil.NewAddressWitnessPubKeyHash(pkHash, &customParams) + }, + net: &customParams, + }, + + // P2TR address tests. + { + name: "segwit v1 mainnet p2tr", + addr: "bc1paardr2nczq0rx5rqpfwnvpzm497zvux64y0f7wjgcs7xuuuh2nnqwr2d5c", + encoded: "bc1paardr2nczq0rx5rqpfwnvpzm497zvux64y0f7wjgcs7xuuuh2nnqwr2d5c", + valid: true, + result: btcutil.TstAddressTaproot( + 1, [32]byte{ + 0xef, 0x46, 0xd1, 0xaa, 0x78, 0x10, 0x1e, 0x33, + 0x50, 0x60, 0x0a, 0x5d, 0x36, 0x04, 0x5b, 0xa9, + 0x7c, 0x26, 0x70, 0xda, 0xa9, 0x1e, 0x9f, 0x3a, + 0x48, 0xc4, 0x3c, 0x6e, 0x73, 0x97, 0x54, 0xe6, + }, chaincfg.MainNetParams.Bech32HRPSegwit, + ), + f: func() (btcutil.Address, error) { + scriptHash := []byte{ + 0xef, 0x46, 0xd1, 0xaa, 0x78, 0x10, 0x1e, 0x33, + 0x50, 0x60, 0x0a, 0x5d, 0x36, 0x04, 0x5b, 0xa9, + 0x7c, 0x26, 0x70, 0xda, 0xa9, 0x1e, 0x9f, 0x3a, + 0x48, 0xc4, 0x3c, 0x6e, 0x73, 0x97, 0x54, 0xe6, + } + return btcutil.NewAddressTaproot( + scriptHash, &chaincfg.MainNetParams, + ) + }, + net: &chaincfg.MainNetParams, + }, + + // Invalid bech32m tests. Source: + // https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki + { + name: "segwit v1 invalid human-readable part", + addr: "tc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vq5zuyut", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v1 mainnet bech32 instead of bech32m", + addr: "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqh2y7hd", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v1 testnet bech32 instead of bech32m", + addr: "tb1z0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqglt7rf", + valid: false, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit v1 mainnet bech32 instead of bech32m upper case", + addr: "BC1S0XLXVLHEMJA6C4DQV22UAPCTQUPFHLXM9H8Z3K2E72Q4K9HCZ7VQ54WELL", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v0 mainnet bech32m instead of bech32", + addr: "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kemeawh", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v1 testnet bech32 instead of bech32m second test", + addr: "tb1q0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vq24jc47", + valid: false, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit v1 mainnet bech32m invalid character in checksum", + addr: "bc1p38j9r5y49hruaue7wxjce0updqjuyyx0kh56v8s25huc6995vvpql3jow4", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit mainnet witness v17", + addr: "BC130XLXVLHEMJA6C4DQV22UAPCTQUPFHLXM9H8Z3K2E72Q4K9HCZ7VQ7ZWS8R", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v1 mainnet bech32m invalid program length (1 byte)", + addr: "bc1pw5dgrnzv", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v1 mainnet bech32m invalid program length (41 bytes)", + addr: "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7v8n0nx0muaewav253zgeav", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v1 testnet bech32m mixed case", + addr: "tb1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vq47Zagq", + valid: false, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit v1 mainnet bech32m zero padding of more than 4 bits", + addr: "bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7v07qwwzcrf", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit v1 mainnet bech32m non-zero padding in 8-to-5-conversion", + addr: "tb1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vpggkg4j", + valid: false, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit v1 mainnet bech32m empty data section", + addr: "bc1gmk9yu", + valid: false, + net: &chaincfg.MainNetParams, + }, + + // Unsupported witness versions (version 0 and 1 only supported at this point) + { + name: "segwit mainnet witness v16", + addr: "BC1SW50QA3JX3S", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit mainnet witness v2", + addr: "bc1zw508d6qejxtdg4y5r3zarvaryvg6kdaj", + valid: false, + net: &chaincfg.MainNetParams, + }, + // Invalid segwit addresses + { + name: "segwit invalid hrp", + addr: "tc1qw508d6qejxtdg4y5r3zarvary0c5xw7kg3g4ty", + valid: false, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit invalid checksum", + addr: "bc1qw508d6qejxtdg4y5r3zarvary0c5xw7kv8f3t5", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit invalid witness version", + addr: "BC13W508D6QEJXTDG4Y5R3ZARVARY0C5XW7KN40WF2", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit invalid program length", + addr: "bc1rw5uspcuh", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit invalid program length", + addr: "bc10w508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kw5rljs90", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit invalid program length for witness version 0 (per BIP141)", + addr: "BC1QR508D6QEJXTDG4Y5R3ZARVARYV98GJ9P", + valid: false, + net: &chaincfg.MainNetParams, + }, + { + name: "segwit mixed case", + addr: "tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sL5k7", + valid: false, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit zero padding of more than 4 bits", + addr: "tb1pw508d6qejxtdg4y5r3zarqfsj6c3", + valid: false, + net: &chaincfg.TestNet3Params, + }, + { + name: "segwit non-zero padding in 8-to-5 conversion", + addr: "tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3pjxtptv", + valid: false, + net: &chaincfg.TestNet3Params, + }, + } + + if err := chaincfg.Register(&customParams); err != nil { + panic(err) + } + + for _, test := range tests { + // Decode addr and compare error against valid. + decoded, err := btcutil.DecodeAddress(test.addr, test.net) + if (err == nil) != test.valid { + t.Errorf("%v: decoding test failed: %v", test.name, err) + return + } + + if err == nil { + // Ensure the stringer returns the same address as the + // original. + if decodedStringer, ok := decoded.(fmt.Stringer); ok { + addr := test.addr + + // For Segwit addresses the string representation + // will always be lower case, so in that case we + // convert the original to lower case first. + if strings.Contains(test.name, "segwit") { + addr = strings.ToLower(addr) + } + + if addr != decodedStringer.String() { + t.Errorf("%v: String on decoded value does not match expected value: %v != %v", + test.name, test.addr, decodedStringer.String()) + return + } + } + + // Encode again and compare against the original. + encoded := decoded.EncodeAddress() + if test.encoded != encoded { + t.Errorf("%v: decoding and encoding produced different addresses: %v != %v", + test.name, test.encoded, encoded) + return + } + + // Perform type-specific calculations. + var saddr []byte + switch d := decoded.(type) { + case *btcutil.AddressPubKeyHash: + saddr = btcutil.TstAddressSAddr(encoded) + + case *btcutil.AddressScriptHash: + saddr = btcutil.TstAddressSAddr(encoded) + + case *btcutil.AddressPubKey: + // Ignore the error here since the script + // address is checked below. + saddr, _ = hex.DecodeString(d.String()) + case *btcutil.AddressWitnessPubKeyHash: + saddr = btcutil.TstAddressSegwitSAddr(encoded) + case *btcutil.AddressWitnessScriptHash: + saddr = btcutil.TstAddressSegwitSAddr(encoded) + case *btcutil.AddressTaproot: + saddr = btcutil.TstAddressTaprootSAddr(encoded) + } + + // Check script address, as well as the Hash160 method for P2PKH and + // P2SH addresses. + if !bytes.Equal(saddr, decoded.ScriptAddress()) { + t.Errorf("%v: script addresses do not match:\n%x != \n%x", + test.name, saddr, decoded.ScriptAddress()) + return + } + switch a := decoded.(type) { + case *btcutil.AddressPubKeyHash: + if h := a.Hash160()[:]; !bytes.Equal(saddr, h) { + t.Errorf("%v: hashes do not match:\n%x != \n%x", + test.name, saddr, h) + return + } + + case *btcutil.AddressScriptHash: + if h := a.Hash160()[:]; !bytes.Equal(saddr, h) { + t.Errorf("%v: hashes do not match:\n%x != \n%x", + test.name, saddr, h) + return + } + + case *btcutil.AddressWitnessPubKeyHash: + if hrp := a.Hrp(); test.net.Bech32HRPSegwit != hrp { + t.Errorf("%v: hrps do not match:\n%x != \n%x", + test.name, test.net.Bech32HRPSegwit, hrp) + return + } + + expVer := test.result.(*btcutil.AddressWitnessPubKeyHash).WitnessVersion() + if v := a.WitnessVersion(); v != expVer { + t.Errorf("%v: witness versions do not match:\n%x != \n%x", + test.name, expVer, v) + return + } + + if p := a.WitnessProgram(); !bytes.Equal(saddr, p) { + t.Errorf("%v: witness programs do not match:\n%x != \n%x", + test.name, saddr, p) + return + } + + case *btcutil.AddressWitnessScriptHash: + if hrp := a.Hrp(); test.net.Bech32HRPSegwit != hrp { + t.Errorf("%v: hrps do not match:\n%x != \n%x", + test.name, test.net.Bech32HRPSegwit, hrp) + return + } + + expVer := test.result.(*btcutil.AddressWitnessScriptHash).WitnessVersion() + if v := a.WitnessVersion(); v != expVer { + t.Errorf("%v: witness versions do not match:\n%x != \n%x", + test.name, expVer, v) + return + } + + if p := a.WitnessProgram(); !bytes.Equal(saddr, p) { + t.Errorf("%v: witness programs do not match:\n%x != \n%x", + test.name, saddr, p) + return + } + } + + // Ensure the address is for the expected network. + if !decoded.IsForNet(test.net) { + t.Errorf("%v: calculated network does not match expected", + test.name) + return + } + } else { + // If there is an error, make sure we can print it + // correctly. + errStr := err.Error() + if errStr == "" { + t.Errorf("%v: error was non-nil but message is"+ + "empty: %v", test.name, err) + } + } + + if !test.valid { + // If address is invalid, but a creation function exists, + // verify that it returns a nil addr and non-nil error. + if test.f != nil { + _, err := test.f() + if err == nil { + t.Errorf("%v: address is invalid but creating new address succeeded", + test.name) + return + } + } + continue + } + + // Valid test, compare address created with f against expected result. + addr, err := test.f() + if err != nil { + t.Errorf("%v: address is valid but creating new address failed with error %v", + test.name, err) + return + } + + if !reflect.DeepEqual(addr, test.result) { + t.Errorf("%v: created address does not match expected result", + test.name) + return + } + } +} diff --git a/btcutil/amount.go b/btcutil/amount.go new file mode 100644 index 0000000000..71714153aa --- /dev/null +++ b/btcutil/amount.go @@ -0,0 +1,122 @@ +// Copyright (c) 2013, 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "errors" + "math" + "strconv" +) + +// AmountUnit describes a method of converting an Amount to something +// other than the base unit of a bitcoin. The value of the AmountUnit +// is the exponent component of the decadic multiple to convert from +// an amount in bitcoin to an amount counted in units. +type AmountUnit int + +// These constants define various units used when describing a bitcoin +// monetary amount. +const ( + AmountMegaBTC AmountUnit = 6 + AmountKiloBTC AmountUnit = 3 + AmountBTC AmountUnit = 0 + AmountMilliBTC AmountUnit = -3 + AmountMicroBTC AmountUnit = -6 + AmountSatoshi AmountUnit = -8 +) + +// String returns the unit as a string. For recognized units, the SI +// prefix is used, or "Satoshi" for the base unit. For all unrecognized +// units, "1eN BTC" is returned, where N is the AmountUnit. +func (u AmountUnit) String() string { + switch u { + case AmountMegaBTC: + return "MBTC" + case AmountKiloBTC: + return "kBTC" + case AmountBTC: + return "BTC" + case AmountMilliBTC: + return "mBTC" + case AmountMicroBTC: + return "μBTC" + case AmountSatoshi: + return "Satoshi" + default: + return "1e" + strconv.FormatInt(int64(u), 10) + " BTC" + } +} + +// Amount represents the base bitcoin monetary unit (colloquially referred +// to as a `Satoshi'). A single Amount is equal to 1e-8 of a bitcoin. +type Amount int64 + +// round converts a floating point number, which may or may not be representable +// as an integer, to the Amount integer type by rounding to the nearest integer. +// This is performed by adding or subtracting 0.5 depending on the sign, and +// relying on integer truncation to round the value to the nearest Amount. +func round(f float64) Amount { + if f < 0 { + return Amount(f - 0.5) + } + return Amount(f + 0.5) +} + +// NewAmount creates an Amount from a floating point value representing +// some value in bitcoin. NewAmount errors if f is NaN or +-Infinity, but +// does not check that the amount is within the total amount of bitcoin +// producible as f may not refer to an amount at a single moment in time. +// +// NewAmount is for specifically for converting BTC to Satoshi. +// For creating a new Amount with an int64 value which denotes a quantity of Satoshi, +// do a simple type conversion from type int64 to Amount. +// See GoDoc for example: http://godoc.org/github.com/btcsuite/btcd/btcutil#example-Amount +func NewAmount(f float64) (Amount, error) { + // The amount is only considered invalid if it cannot be represented + // as an integer type. This may happen if f is NaN or +-Infinity. + switch { + case math.IsNaN(f): + fallthrough + case math.IsInf(f, 1): + fallthrough + case math.IsInf(f, -1): + return 0, errors.New("invalid bitcoin amount") + } + + return round(f * SatoshiPerBitcoin), nil +} + +// ToUnit converts a monetary amount counted in bitcoin base units to a +// floating point value representing an amount of bitcoin. +func (a Amount) ToUnit(u AmountUnit) float64 { + return float64(a) / math.Pow10(int(u+8)) +} + +// ToBTC is the equivalent of calling ToUnit with AmountBTC. +func (a Amount) ToBTC() float64 { + return a.ToUnit(AmountBTC) +} + +// Format formats a monetary amount counted in bitcoin base units as a +// string for a given unit. The conversion will succeed for any unit, +// however, known units will be formated with an appended label describing +// the units with SI notation, or "Satoshi" for the base unit. +func (a Amount) Format(u AmountUnit) string { + units := " " + u.String() + return strconv.FormatFloat(a.ToUnit(u), 'f', -int(u+8), 64) + units +} + +// String is the equivalent of calling Format with AmountBTC. +func (a Amount) String() string { + return a.Format(AmountBTC) +} + +// MulF64 multiplies an Amount by a floating point value. While this is not +// an operation that must typically be done by a full node or wallet, it is +// useful for services that build on top of bitcoin (for example, calculating +// a fee by multiplying by a percentage). +func (a Amount) MulF64(f float64) Amount { + return round(float64(a) * f) +} diff --git a/btcutil/amount_test.go b/btcutil/amount_test.go new file mode 100644 index 0000000000..2b6c3f753d --- /dev/null +++ b/btcutil/amount_test.go @@ -0,0 +1,309 @@ +// Copyright (c) 2013, 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil_test + +import ( + "math" + "testing" + + . "github.com/btcsuite/btcd/btcutil" +) + +func TestAmountCreation(t *testing.T) { + tests := []struct { + name string + amount float64 + valid bool + expected Amount + }{ + // Positive tests. + { + name: "zero", + amount: 0, + valid: true, + expected: 0, + }, + { + name: "max producible", + amount: 21e6, + valid: true, + expected: MaxSatoshi, + }, + { + name: "min producible", + amount: -21e6, + valid: true, + expected: -MaxSatoshi, + }, + { + name: "exceeds max producible", + amount: 21e6 + 1e-8, + valid: true, + expected: MaxSatoshi + 1, + }, + { + name: "exceeds min producible", + amount: -21e6 - 1e-8, + valid: true, + expected: -MaxSatoshi - 1, + }, + { + name: "one hundred", + amount: 100, + valid: true, + expected: 100 * SatoshiPerBitcoin, + }, + { + name: "fraction", + amount: 0.01234567, + valid: true, + expected: 1234567, + }, + { + name: "rounding up", + amount: 54.999999999999943157, + valid: true, + expected: 55 * SatoshiPerBitcoin, + }, + { + name: "rounding down", + amount: 55.000000000000056843, + valid: true, + expected: 55 * SatoshiPerBitcoin, + }, + + // Negative tests. + { + name: "not-a-number", + amount: math.NaN(), + valid: false, + }, + { + name: "-infinity", + amount: math.Inf(-1), + valid: false, + }, + { + name: "+infinity", + amount: math.Inf(1), + valid: false, + }, + } + + for _, test := range tests { + a, err := NewAmount(test.amount) + switch { + case test.valid && err != nil: + t.Errorf("%v: Positive test Amount creation failed with: %v", test.name, err) + continue + case !test.valid && err == nil: + t.Errorf("%v: Negative test Amount creation succeeded (value %v) when should fail", test.name, a) + continue + } + + if a != test.expected { + t.Errorf("%v: Created amount %v does not match expected %v", test.name, a, test.expected) + continue + } + } +} + +func TestAmountUnitConversions(t *testing.T) { + tests := []struct { + name string + amount Amount + unit AmountUnit + converted float64 + s string + }{ + { + name: "MBTC", + amount: MaxSatoshi, + unit: AmountMegaBTC, + converted: 21, + s: "21 MBTC", + }, + { + name: "kBTC", + amount: 44433322211100, + unit: AmountKiloBTC, + converted: 444.33322211100, + s: "444.333222111 kBTC", + }, + { + name: "BTC", + amount: 44433322211100, + unit: AmountBTC, + converted: 444333.22211100, + s: "444333.222111 BTC", + }, + { + name: "mBTC", + amount: 44433322211100, + unit: AmountMilliBTC, + converted: 444333222.11100, + s: "444333222.111 mBTC", + }, + { + + name: "μBTC", + amount: 44433322211100, + unit: AmountMicroBTC, + converted: 444333222111.00, + s: "444333222111 μBTC", + }, + { + + name: "satoshi", + amount: 44433322211100, + unit: AmountSatoshi, + converted: 44433322211100, + s: "44433322211100 Satoshi", + }, + { + + name: "non-standard unit", + amount: 44433322211100, + unit: AmountUnit(-1), + converted: 4443332.2211100, + s: "4443332.22111 1e-1 BTC", + }, + } + + for _, test := range tests { + f := test.amount.ToUnit(test.unit) + if f != test.converted { + t.Errorf("%v: converted value %v does not match expected %v", test.name, f, test.converted) + continue + } + + s := test.amount.Format(test.unit) + if s != test.s { + t.Errorf("%v: format '%v' does not match expected '%v'", test.name, s, test.s) + continue + } + + // Verify that Amount.ToBTC works as advertised. + f1 := test.amount.ToUnit(AmountBTC) + f2 := test.amount.ToBTC() + if f1 != f2 { + t.Errorf("%v: ToBTC does not match ToUnit(AmountBTC): %v != %v", test.name, f1, f2) + } + + // Verify that Amount.String works as advertised. + s1 := test.amount.Format(AmountBTC) + s2 := test.amount.String() + if s1 != s2 { + t.Errorf("%v: String does not match Format(AmountBitcoin): %v != %v", test.name, s1, s2) + } + } +} + +func TestAmountMulF64(t *testing.T) { + tests := []struct { + name string + amt Amount + mul float64 + res Amount + }{ + { + name: "Multiply 0.1 BTC by 2", + amt: 100e5, // 0.1 BTC + mul: 2, + res: 200e5, // 0.2 BTC + }, + { + name: "Multiply 0.2 BTC by 0.02", + amt: 200e5, // 0.2 BTC + mul: 1.02, + res: 204e5, // 0.204 BTC + }, + { + name: "Multiply 0.1 BTC by -2", + amt: 100e5, // 0.1 BTC + mul: -2, + res: -200e5, // -0.2 BTC + }, + { + name: "Multiply 0.2 BTC by -0.02", + amt: 200e5, // 0.2 BTC + mul: -1.02, + res: -204e5, // -0.204 BTC + }, + { + name: "Multiply -0.1 BTC by 2", + amt: -100e5, // -0.1 BTC + mul: 2, + res: -200e5, // -0.2 BTC + }, + { + name: "Multiply -0.2 BTC by 0.02", + amt: -200e5, // -0.2 BTC + mul: 1.02, + res: -204e5, // -0.204 BTC + }, + { + name: "Multiply -0.1 BTC by -2", + amt: -100e5, // -0.1 BTC + mul: -2, + res: 200e5, // 0.2 BTC + }, + { + name: "Multiply -0.2 BTC by -0.02", + amt: -200e5, // -0.2 BTC + mul: -1.02, + res: 204e5, // 0.204 BTC + }, + { + name: "Round down", + amt: 49, // 49 Satoshis + mul: 0.01, + res: 0, + }, + { + name: "Round up", + amt: 50, // 50 Satoshis + mul: 0.01, + res: 1, // 1 Satoshi + }, + { + name: "Multiply by 0.", + amt: 1e8, // 1 BTC + mul: 0, + res: 0, // 0 BTC + }, + { + name: "Multiply 1 by 0.5.", + amt: 1, // 1 Satoshi + mul: 0.5, + res: 1, // 1 Satoshi + }, + { + name: "Multiply 100 by 66%.", + amt: 100, // 100 Satoshis + mul: 0.66, + res: 66, // 66 Satoshis + }, + { + name: "Multiply 100 by 66.6%.", + amt: 100, // 100 Satoshis + mul: 0.666, + res: 67, // 67 Satoshis + }, + { + name: "Multiply 100 by 2/3.", + amt: 100, // 100 Satoshis + mul: 2.0 / 3, + res: 67, // 67 Satoshis + }, + } + + for _, test := range tests { + a := test.amt.MulF64(test.mul) + if a != test.res { + t.Errorf("%v: expected %v got %v", test.name, test.res, a) + } + } +} diff --git a/btcutil/appdata.go b/btcutil/appdata.go new file mode 100644 index 0000000000..e36cf7c4a4 --- /dev/null +++ b/btcutil/appdata.go @@ -0,0 +1,105 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "os" + "os/user" + "path/filepath" + "runtime" + "strings" + "unicode" +) + +// appDataDir returns an operating system specific directory to be used for +// storing application data for an application. See AppDataDir for more +// details. This unexported version takes an operating system argument +// primarily to enable the testing package to properly test the function by +// forcing an operating system that is not the currently one. +func appDataDir(goos, appName string, roaming bool) string { + if appName == "" || appName == "." { + return "." + } + + // The caller really shouldn't prepend the appName with a period, but + // if they do, handle it gracefully by trimming it. + appName = strings.TrimPrefix(appName, ".") + appNameUpper := string(unicode.ToUpper(rune(appName[0]))) + appName[1:] + appNameLower := string(unicode.ToLower(rune(appName[0]))) + appName[1:] + + // Get the OS specific home directory via the Go standard lib. + var homeDir string + usr, err := user.Current() + if err == nil { + homeDir = usr.HomeDir + } + + // Fall back to standard HOME environment variable that works + // for most POSIX OSes if the directory from the Go standard + // lib failed. + if err != nil || homeDir == "" { + homeDir = os.Getenv("HOME") + } + + switch goos { + // Attempt to use the LOCALAPPDATA or APPDATA environment variable on + // Windows. + case "windows": + // Windows XP and before didn't have a LOCALAPPDATA, so fallback + // to regular APPDATA when LOCALAPPDATA is not set. + appData := os.Getenv("LOCALAPPDATA") + if roaming || appData == "" { + appData = os.Getenv("APPDATA") + } + + if appData != "" { + return filepath.Join(appData, appNameUpper) + } + + case "darwin": + if homeDir != "" { + return filepath.Join(homeDir, "Library", + "Application Support", appNameUpper) + } + + case "plan9": + if homeDir != "" { + return filepath.Join(homeDir, appNameLower) + } + + default: + if homeDir != "" { + return filepath.Join(homeDir, "."+appNameLower) + } + } + + // Fall back to the current directory if all else fails. + return "." +} + +// AppDataDir returns an operating system specific directory to be used for +// storing application data for an application. +// +// The appName parameter is the name of the application the data directory is +// being requested for. This function will prepend a period to the appName for +// POSIX style operating systems since that is standard practice. An empty +// appName or one with a single dot is treated as requesting the current +// directory so only "." will be returned. Further, the first character +// of appName will be made lowercase for POSIX style operating systems and +// uppercase for Mac and Windows since that is standard practice. +// +// The roaming parameter only applies to Windows where it specifies the roaming +// application data profile (%APPDATA%) should be used instead of the local one +// (%LOCALAPPDATA%) that is used by default. +// +// Example results: +// dir := AppDataDir("myapp", false) +// POSIX (Linux/BSD): ~/.myapp +// Mac OS: $HOME/Library/Application Support/Myapp +// Windows: %LOCALAPPDATA%\Myapp +// Plan 9: $home/myapp +func AppDataDir(appName string, roaming bool) string { + return appDataDir(runtime.GOOS, appName, roaming) +} diff --git a/btcutil/appdata_test.go b/btcutil/appdata_test.go new file mode 100644 index 0000000000..061b1b5d80 --- /dev/null +++ b/btcutil/appdata_test.go @@ -0,0 +1,133 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil_test + +import ( + "os" + "os/user" + "path/filepath" + "runtime" + "testing" + "unicode" + + "github.com/btcsuite/btcd/btcutil" +) + +// TestAppDataDir tests the API for AppDataDir to ensure it gives expected +// results for various operating systems. +func TestAppDataDir(t *testing.T) { + // App name plus upper and lowercase variants. + appName := "myapp" + appNameUpper := string(unicode.ToUpper(rune(appName[0]))) + appName[1:] + appNameLower := string(unicode.ToLower(rune(appName[0]))) + appName[1:] + + // When we're on Windows, set the expected local and roaming directories + // per the environment vars. When we aren't on Windows, the function + // should return the current directory when forced to provide the + // Windows path since the environment variables won't exist. + winLocal := "." + winRoaming := "." + if runtime.GOOS == "windows" { + localAppData := os.Getenv("LOCALAPPDATA") + roamingAppData := os.Getenv("APPDATA") + if localAppData == "" { + localAppData = roamingAppData + } + winLocal = filepath.Join(localAppData, appNameUpper) + winRoaming = filepath.Join(roamingAppData, appNameUpper) + } + + // Get the home directory to use for testing expected results. + var homeDir string + usr, err := user.Current() + if err != nil { + t.Errorf("user.Current: %v", err) + return + } + homeDir = usr.HomeDir + + // Mac app data directory. + macAppData := filepath.Join(homeDir, "Library", "Application Support") + + tests := []struct { + goos string + appName string + roaming bool + want string + }{ + // Various combinations of application name casing, leading + // period, operating system, and roaming flags. + {"windows", appNameLower, false, winLocal}, + {"windows", appNameUpper, false, winLocal}, + {"windows", "." + appNameLower, false, winLocal}, + {"windows", "." + appNameUpper, false, winLocal}, + {"windows", appNameLower, true, winRoaming}, + {"windows", appNameUpper, true, winRoaming}, + {"windows", "." + appNameLower, true, winRoaming}, + {"windows", "." + appNameUpper, true, winRoaming}, + {"linux", appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"linux", appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"linux", "." + appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"linux", "." + appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"darwin", appNameLower, false, filepath.Join(macAppData, appNameUpper)}, + {"darwin", appNameUpper, false, filepath.Join(macAppData, appNameUpper)}, + {"darwin", "." + appNameLower, false, filepath.Join(macAppData, appNameUpper)}, + {"darwin", "." + appNameUpper, false, filepath.Join(macAppData, appNameUpper)}, + {"openbsd", appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"openbsd", appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"openbsd", "." + appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"openbsd", "." + appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"freebsd", appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"freebsd", appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"freebsd", "." + appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"freebsd", "." + appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"netbsd", appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"netbsd", appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"netbsd", "." + appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"netbsd", "." + appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"plan9", appNameLower, false, filepath.Join(homeDir, appNameLower)}, + {"plan9", appNameUpper, false, filepath.Join(homeDir, appNameLower)}, + {"plan9", "." + appNameLower, false, filepath.Join(homeDir, appNameLower)}, + {"plan9", "." + appNameUpper, false, filepath.Join(homeDir, appNameLower)}, + {"unrecognized", appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"unrecognized", appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + {"unrecognized", "." + appNameLower, false, filepath.Join(homeDir, "."+appNameLower)}, + {"unrecognized", "." + appNameUpper, false, filepath.Join(homeDir, "."+appNameLower)}, + + // No application name provided, so expect current directory. + {"windows", "", false, "."}, + {"windows", "", true, "."}, + {"linux", "", false, "."}, + {"darwin", "", false, "."}, + {"openbsd", "", false, "."}, + {"freebsd", "", false, "."}, + {"netbsd", "", false, "."}, + {"plan9", "", false, "."}, + {"unrecognized", "", false, "."}, + + // Single dot provided for application name, so expect current + // directory. + {"windows", ".", false, "."}, + {"windows", ".", true, "."}, + {"linux", ".", false, "."}, + {"darwin", ".", false, "."}, + {"openbsd", ".", false, "."}, + {"freebsd", ".", false, "."}, + {"netbsd", ".", false, "."}, + {"plan9", ".", false, "."}, + {"unrecognized", ".", false, "."}, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + ret := btcutil.TstAppDataDir(test.goos, test.appName, test.roaming) + if ret != test.want { + t.Errorf("appDataDir #%d (%s) does not match - "+ + "expected got %s, want %s", i, test.goos, ret, + test.want) + continue + } + } +} diff --git a/btcutil/base58/README.md b/btcutil/base58/README.md new file mode 100644 index 0000000000..abdb78155d --- /dev/null +++ b/btcutil/base58/README.md @@ -0,0 +1,34 @@ +base58 +========== + +[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/btcutil/base58) + +Package base58 provides an API for encoding and decoding to and from the +modified base58 encoding. It also provides an API to do Base58Check encoding, +as described [here](https://en.bitcoin.it/wiki/Base58Check_encoding). + +A comprehensive suite of tests is provided to ensure proper functionality. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil/base58 +``` + +## Examples + +* [Decode Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/base58#example-Decode) + Demonstrates how to decode modified base58 encoded data. +* [Encode Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/base58#example-Encode) + Demonstrates how to encode data using the modified base58 encoding scheme. +* [CheckDecode Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/base58#example-CheckDecode) + Demonstrates how to decode Base58Check encoded data. +* [CheckEncode Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/base58#example-CheckEncode) + Demonstrates how to encode data using the Base58Check encoding scheme. + +## License + +Package base58 is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/base58/alphabet.go b/btcutil/base58/alphabet.go new file mode 100644 index 0000000000..6bb39fef11 --- /dev/null +++ b/btcutil/base58/alphabet.go @@ -0,0 +1,49 @@ +// Copyright (c) 2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +// AUTOGENERATED by genalphabet.go; do not edit. + +package base58 + +const ( + // alphabet is the modified base58 alphabet used by Bitcoin. + alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" + + alphabetIdx0 = '1' +) + +var b58 = [256]byte{ + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 0, 1, 2, 3, 4, 5, 6, + 7, 8, 255, 255, 255, 255, 255, 255, + 255, 9, 10, 11, 12, 13, 14, 15, + 16, 255, 17, 18, 19, 20, 21, 255, + 22, 23, 24, 25, 26, 27, 28, 29, + 30, 31, 32, 255, 255, 255, 255, 255, + 255, 33, 34, 35, 36, 37, 38, 39, + 40, 41, 42, 43, 255, 44, 45, 46, + 47, 48, 49, 50, 51, 52, 53, 54, + 55, 56, 57, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, + 255, 255, 255, 255, 255, 255, 255, 255, +} diff --git a/btcutil/base58/base58.go b/btcutil/base58/base58.go new file mode 100644 index 0000000000..8ee5956718 --- /dev/null +++ b/btcutil/base58/base58.go @@ -0,0 +1,138 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package base58 + +import ( + "math/big" +) + +//go:generate go run genalphabet.go + +var bigRadix = [...]*big.Int{ + big.NewInt(0), + big.NewInt(58), + big.NewInt(58 * 58), + big.NewInt(58 * 58 * 58), + big.NewInt(58 * 58 * 58 * 58), + big.NewInt(58 * 58 * 58 * 58 * 58), + big.NewInt(58 * 58 * 58 * 58 * 58 * 58), + big.NewInt(58 * 58 * 58 * 58 * 58 * 58 * 58), + big.NewInt(58 * 58 * 58 * 58 * 58 * 58 * 58 * 58), + big.NewInt(58 * 58 * 58 * 58 * 58 * 58 * 58 * 58 * 58), + bigRadix10, +} + +var bigRadix10 = big.NewInt(58 * 58 * 58 * 58 * 58 * 58 * 58 * 58 * 58 * 58) // 58^10 + +// Decode decodes a modified base58 string to a byte slice. +func Decode(b string) []byte { + answer := big.NewInt(0) + scratch := new(big.Int) + + // Calculating with big.Int is slow for each iteration. + // x += b58[b[i]] * j + // j *= 58 + // + // Instead we can try to do as much calculations on int64. + // We can represent a 10 digit base58 number using an int64. + // + // Hence we'll try to convert 10, base58 digits at a time. + // The rough idea is to calculate `t`, such that: + // + // t := b58[b[i+9]] * 58^9 ... + b58[b[i+1]] * 58^1 + b58[b[i]] * 58^0 + // x *= 58^10 + // x += t + // + // Of course, in addition, we'll need to handle boundary condition when `b` is not multiple of 58^10. + // In that case we'll use the bigRadix[n] lookup for the appropriate power. + for t := b; len(t) > 0; { + n := len(t) + if n > 10 { + n = 10 + } + + total := uint64(0) + for _, v := range t[:n] { + tmp := b58[v] + if tmp == 255 { + return []byte("") + } + total = total*58 + uint64(tmp) + } + + answer.Mul(answer, bigRadix[n]) + scratch.SetUint64(total) + answer.Add(answer, scratch) + + t = t[n:] + } + + tmpval := answer.Bytes() + + var numZeros int + for numZeros = 0; numZeros < len(b); numZeros++ { + if b[numZeros] != alphabetIdx0 { + break + } + } + flen := numZeros + len(tmpval) + val := make([]byte, flen) + copy(val[numZeros:], tmpval) + + return val +} + +// Encode encodes a byte slice to a modified base58 string. +func Encode(b []byte) string { + x := new(big.Int) + x.SetBytes(b) + + // maximum length of output is log58(2^(8*len(b))) == len(b) * 8 / log(58) + maxlen := int(float64(len(b))*1.365658237309761) + 1 + answer := make([]byte, 0, maxlen) + mod := new(big.Int) + for x.Sign() > 0 { + // Calculating with big.Int is slow for each iteration. + // x, mod = x / 58, x % 58 + // + // Instead we can try to do as much calculations on int64. + // x, mod = x / 58^10, x % 58^10 + // + // Which will give us mod, which is 10 digit base58 number. + // We'll loop that 10 times to convert to the answer. + + x.DivMod(x, bigRadix10, mod) + if x.Sign() == 0 { + // When x = 0, we need to ensure we don't add any extra zeros. + m := mod.Int64() + for m > 0 { + answer = append(answer, alphabet[m%58]) + m /= 58 + } + } else { + m := mod.Int64() + for i := 0; i < 10; i++ { + answer = append(answer, alphabet[m%58]) + m /= 58 + } + } + } + + // leading zero bytes + for _, i := range b { + if i != 0 { + break + } + answer = append(answer, alphabetIdx0) + } + + // reverse + alen := len(answer) + for i := 0; i < alen/2; i++ { + answer[i], answer[alen-1-i] = answer[alen-1-i], answer[i] + } + + return string(answer) +} diff --git a/btcutil/base58/base58_test.go b/btcutil/base58/base58_test.go new file mode 100644 index 0000000000..b868d1d401 --- /dev/null +++ b/btcutil/base58/base58_test.go @@ -0,0 +1,101 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package base58_test + +import ( + "bytes" + "encoding/hex" + "testing" + + "github.com/btcsuite/btcd/btcutil/base58" +) + +var stringTests = []struct { + in string + out string +}{ + {"", ""}, + {" ", "Z"}, + {"-", "n"}, + {"0", "q"}, + {"1", "r"}, + {"-1", "4SU"}, + {"11", "4k8"}, + {"abc", "ZiCa"}, + {"1234598760", "3mJr7AoUXx2Wqd"}, + {"abcdefghijklmnopqrstuvwxyz", "3yxU3u1igY8WkgtjK92fbJQCd4BZiiT1v25f"}, + {"00000000000000000000000000000000000000000000000000000000000000", "3sN2THZeE9Eh9eYrwkvZqNstbHGvrxSAM7gXUXvyFQP8XvQLUqNCS27icwUeDT7ckHm4FUHM2mTVh1vbLmk7y"}, +} + +var invalidStringTests = []struct { + in string + out string +}{ + {"0", ""}, + {"O", ""}, + {"I", ""}, + {"l", ""}, + {"3mJr0", ""}, + {"O3yxU", ""}, + {"3sNI", ""}, + {"4kl8", ""}, + {"0OIl", ""}, + {"!@#$%^&*()-_=+~`", ""}, +} + +var hexTests = []struct { + in string + out string +}{ + {"", ""}, + {"61", "2g"}, + {"626262", "a3gV"}, + {"636363", "aPEr"}, + {"73696d706c792061206c6f6e6720737472696e67", "2cFupjhnEsSn59qHXstmK2ffpLv2"}, + {"00eb15231dfceb60925886b67d065299925915aeb172c06647", "1NS17iag9jJgTHD1VXjvLCEnZuQ3rJDE9L"}, + {"516b6fcd0f", "ABnLTmg"}, + {"bf4f89001e670274dd", "3SEo3LWLoPntC"}, + {"572e4794", "3EFU7m"}, + {"ecac89cad93923c02321", "EJDM8drfXA6uyA"}, + {"10c8511e", "Rt5zm"}, + {"00000000000000000000", "1111111111"}, + {"000111d38e5fc9071ffcd20b4a763cc9ae4f252bb4e48fd66a835e252ada93ff480d6dd43dc62a641155a5", "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz"}, + {"000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f606162636465666768696a6b6c6d6e6f707172737475767778797a7b7c7d7e7f808182838485868788898a8b8c8d8e8f909192939495969798999a9b9c9d9e9fa0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebfc0c1c2c3c4c5c6c7c8c9cacbcccdcecfd0d1d2d3d4d5d6d7d8d9dadbdcdddedfe0e1e2e3e4e5e6e7e8e9eaebecedeeeff0f1f2f3f4f5f6f7f8f9fafbfcfdfeff", "1cWB5HCBdLjAuqGGReWE3R3CguuwSjw6RHn39s2yuDRTS5NsBgNiFpWgAnEx6VQi8csexkgYw3mdYrMHr8x9i7aEwP8kZ7vccXWqKDvGv3u1GxFKPuAkn8JCPPGDMf3vMMnbzm6Nh9zh1gcNsMvH3ZNLmP5fSG6DGbbi2tuwMWPthr4boWwCxf7ewSgNQeacyozhKDDQQ1qL5fQFUW52QKUZDZ5fw3KXNQJMcNTcaB723LchjeKun7MuGW5qyCBZYzA1KjofN1gYBV3NqyhQJ3Ns746GNuf9N2pQPmHz4xpnSrrfCvy6TVVz5d4PdrjeshsWQwpZsZGzvbdAdN8MKV5QsBDY"}, +} + +func TestBase58(t *testing.T) { + // Encode tests + for x, test := range stringTests { + tmp := []byte(test.in) + if res := base58.Encode(tmp); res != test.out { + t.Errorf("Encode test #%d failed: got: %s want: %s", + x, res, test.out) + continue + } + } + + // Decode tests + for x, test := range hexTests { + b, err := hex.DecodeString(test.in) + if err != nil { + t.Errorf("hex.DecodeString failed failed #%d: got: %s", x, test.in) + continue + } + if res := base58.Decode(test.out); !bytes.Equal(res, b) { + t.Errorf("Decode test #%d failed: got: %q want: %q", + x, res, test.in) + continue + } + } + + // Decode with invalid input + for x, test := range invalidStringTests { + if res := base58.Decode(test.in); string(res) != test.out { + t.Errorf("Decode invalidString test #%d failed: got: %q want: %q", + x, res, test.out) + continue + } + } +} diff --git a/btcutil/base58/base58bench_test.go b/btcutil/base58/base58bench_test.go new file mode 100644 index 0000000000..c7286e53c7 --- /dev/null +++ b/btcutil/base58/base58bench_test.go @@ -0,0 +1,47 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package base58_test + +import ( + "bytes" + "testing" + + "github.com/btcsuite/btcd/btcutil/base58" +) + +var ( + raw5k = bytes.Repeat([]byte{0xff}, 5000) + raw100k = bytes.Repeat([]byte{0xff}, 100*1000) + encoded5k = base58.Encode(raw5k) + encoded100k = base58.Encode(raw100k) +) + +func BenchmarkBase58Encode_5K(b *testing.B) { + b.SetBytes(int64(len(raw5k))) + for i := 0; i < b.N; i++ { + base58.Encode(raw5k) + } +} + +func BenchmarkBase58Encode_100K(b *testing.B) { + b.SetBytes(int64(len(raw100k))) + for i := 0; i < b.N; i++ { + base58.Encode(raw100k) + } +} + +func BenchmarkBase58Decode_5K(b *testing.B) { + b.SetBytes(int64(len(encoded5k))) + for i := 0; i < b.N; i++ { + base58.Decode(encoded5k) + } +} + +func BenchmarkBase58Decode_100K(b *testing.B) { + b.SetBytes(int64(len(encoded100k))) + for i := 0; i < b.N; i++ { + base58.Decode(encoded100k) + } +} diff --git a/btcutil/base58/base58check.go b/btcutil/base58/base58check.go new file mode 100644 index 0000000000..402c3233f4 --- /dev/null +++ b/btcutil/base58/base58check.go @@ -0,0 +1,52 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package base58 + +import ( + "crypto/sha256" + "errors" +) + +// ErrChecksum indicates that the checksum of a check-encoded string does not verify against +// the checksum. +var ErrChecksum = errors.New("checksum error") + +// ErrInvalidFormat indicates that the check-encoded string has an invalid format. +var ErrInvalidFormat = errors.New("invalid format: version and/or checksum bytes missing") + +// checksum: first four bytes of sha256^2 +func checksum(input []byte) (cksum [4]byte) { + h := sha256.Sum256(input) + h2 := sha256.Sum256(h[:]) + copy(cksum[:], h2[:4]) + return +} + +// CheckEncode prepends a version byte and appends a four byte checksum. +func CheckEncode(input []byte, version byte) string { + b := make([]byte, 0, 1+len(input)+4) + b = append(b, version) + b = append(b, input...) + cksum := checksum(b) + b = append(b, cksum[:]...) + return Encode(b) +} + +// CheckDecode decodes a string that was encoded with CheckEncode and verifies the checksum. +func CheckDecode(input string) (result []byte, version byte, err error) { + decoded := Decode(input) + if len(decoded) < 5 { + return nil, 0, ErrInvalidFormat + } + version = decoded[0] + var cksum [4]byte + copy(cksum[:], decoded[len(decoded)-4:]) + if checksum(decoded[:len(decoded)-4]) != cksum { + return nil, 0, ErrChecksum + } + payload := decoded[1 : len(decoded)-4] + result = append(result, payload...) + return +} diff --git a/btcutil/base58/base58check_test.go b/btcutil/base58/base58check_test.go new file mode 100644 index 0000000000..e180b16391 --- /dev/null +++ b/btcutil/base58/base58check_test.go @@ -0,0 +1,69 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package base58_test + +import ( + "testing" + + "github.com/btcsuite/btcd/btcutil/base58" +) + +var checkEncodingStringTests = []struct { + version byte + in string + out string +}{ + {20, "", "3MNQE1X"}, + {20, " ", "B2Kr6dBE"}, + {20, "-", "B3jv1Aft"}, + {20, "0", "B482yuaX"}, + {20, "1", "B4CmeGAC"}, + {20, "-1", "mM7eUf6kB"}, + {20, "11", "mP7BMTDVH"}, + {20, "abc", "4QiVtDjUdeq"}, + {20, "1234598760", "ZmNb8uQn5zvnUohNCEPP"}, + {20, "abcdefghijklmnopqrstuvwxyz", "K2RYDcKfupxwXdWhSAxQPCeiULntKm63UXyx5MvEH2"}, + {20, "00000000000000000000000000000000000000000000000000000000000000", "bi1EWXwJay2udZVxLJozuTb8Meg4W9c6xnmJaRDjg6pri5MBAxb9XwrpQXbtnqEoRV5U2pixnFfwyXC8tRAVC8XxnjK"}, +} + +func TestBase58Check(t *testing.T) { + for x, test := range checkEncodingStringTests { + // test encoding + if res := base58.CheckEncode([]byte(test.in), test.version); res != test.out { + t.Errorf("CheckEncode test #%d failed: got %s, want: %s", x, res, test.out) + } + + // test decoding + res, version, err := base58.CheckDecode(test.out) + switch { + case err != nil: + t.Errorf("CheckDecode test #%d failed with err: %v", x, err) + + case version != test.version: + t.Errorf("CheckDecode test #%d failed: got version: %d want: %d", x, version, test.version) + + case string(res) != test.in: + t.Errorf("CheckDecode test #%d failed: got: %s want: %s", x, res, test.in) + } + } + + // test the two decoding failure cases + // case 1: checksum error + _, _, err := base58.CheckDecode("3MNQE1Y") + if err != base58.ErrChecksum { + t.Error("Checkdecode test failed, expected ErrChecksum") + } + // case 2: invalid formats (string lengths below 5 mean the version byte and/or the checksum + // bytes are missing). + testString := "" + for len := 0; len < 4; len++ { + testString += "x" + _, _, err = base58.CheckDecode(testString) + if err != base58.ErrInvalidFormat { + t.Error("Checkdecode test failed, expected ErrInvalidFormat") + } + } + +} diff --git a/btcutil/base58/cov_report.sh b/btcutil/base58/cov_report.sh new file mode 100644 index 0000000000..307f05b76c --- /dev/null +++ b/btcutil/base58/cov_report.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# This script uses gocov to generate a test coverage report. +# The gocov tool my be obtained with the following command: +# go get github.com/axw/gocov/gocov +# +# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH. + +# Check for gocov. +type gocov >/dev/null 2>&1 +if [ $? -ne 0 ]; then + echo >&2 "This script requires the gocov tool." + echo >&2 "You may obtain it with the following command:" + echo >&2 "go get github.com/axw/gocov/gocov" + exit 1 +fi +gocov test | gocov report diff --git a/btcutil/base58/doc.go b/btcutil/base58/doc.go new file mode 100644 index 0000000000..9a2c0e6e3d --- /dev/null +++ b/btcutil/base58/doc.go @@ -0,0 +1,29 @@ +// Copyright (c) 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package base58 provides an API for working with modified base58 and Base58Check +encodings. + +Modified Base58 Encoding + +Standard base58 encoding is similar to standard base64 encoding except, as the +name implies, it uses a 58 character alphabet which results in an alphanumeric +string and allows some characters which are problematic for humans to be +excluded. Due to this, there can be various base58 alphabets. + +The modified base58 alphabet used by Bitcoin, and hence this package, omits the +0, O, I, and l characters that look the same in many fonts and are therefore +hard to humans to distinguish. + +Base58Check Encoding Scheme + +The Base58Check encoding scheme is primarily used for Bitcoin addresses at the +time of this writing, however it can be used to generically encode arbitrary +byte arrays into human-readable strings along with a version byte that can be +used to differentiate the same payload. For Bitcoin addresses, the extra +version is used to differentiate the network of otherwise identical public keys +which helps prevent using an address intended for one network on another. +*/ +package base58 diff --git a/btcutil/base58/example_test.go b/btcutil/base58/example_test.go new file mode 100644 index 0000000000..babb35d3f4 --- /dev/null +++ b/btcutil/base58/example_test.go @@ -0,0 +1,71 @@ +// Copyright (c) 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package base58_test + +import ( + "fmt" + + "github.com/btcsuite/btcd/btcutil/base58" +) + +// This example demonstrates how to decode modified base58 encoded data. +func ExampleDecode() { + // Decode example modified base58 encoded data. + encoded := "25JnwSn7XKfNQ" + decoded := base58.Decode(encoded) + + // Show the decoded data. + fmt.Println("Decoded Data:", string(decoded)) + + // Output: + // Decoded Data: Test data +} + +// This example demonstrates how to encode data using the modified base58 +// encoding scheme. +func ExampleEncode() { + // Encode example data with the modified base58 encoding scheme. + data := []byte("Test data") + encoded := base58.Encode(data) + + // Show the encoded data. + fmt.Println("Encoded Data:", encoded) + + // Output: + // Encoded Data: 25JnwSn7XKfNQ +} + +// This example demonstrates how to decode Base58Check encoded data. +func ExampleCheckDecode() { + // Decode an example Base58Check encoded data. + encoded := "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa" + decoded, version, err := base58.CheckDecode(encoded) + if err != nil { + fmt.Println(err) + return + } + + // Show the decoded data. + fmt.Printf("Decoded data: %x\n", decoded) + fmt.Println("Version Byte:", version) + + // Output: + // Decoded data: 62e907b15cbf27d5425399ebf6f0fb50ebb88f18 + // Version Byte: 0 +} + +// This example demonstrates how to encode data using the Base58Check encoding +// scheme. +func ExampleCheckEncode() { + // Encode example data with the Base58Check encoding scheme. + data := []byte("Test data") + encoded := base58.CheckEncode(data, 0) + + // Show the encoded data. + fmt.Println("Encoded Data:", encoded) + + // Output: + // Encoded Data: 182iP79GRURMp7oMHDU +} diff --git a/btcutil/base58/genalphabet.go b/btcutil/base58/genalphabet.go new file mode 100644 index 0000000000..010cbee39e --- /dev/null +++ b/btcutil/base58/genalphabet.go @@ -0,0 +1,79 @@ +// Copyright (c) 2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +//+build ignore + +package main + +import ( + "bytes" + "io" + "log" + "os" + "strconv" +) + +var ( + start = []byte(`// Copyright (c) 2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +// AUTOGENERATED by genalphabet.go; do not edit. + +package base58 + +const ( + // alphabet is the modified base58 alphabet used by Bitcoin. + alphabet = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz" + + alphabetIdx0 = '1' +) + +var b58 = [256]byte{`) + + end = []byte(`}`) + + alphabet = []byte("123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz") + tab = []byte("\t") + invalid = []byte("255") + comma = []byte(",") + space = []byte(" ") + nl = []byte("\n") +) + +func write(w io.Writer, b []byte) { + _, err := w.Write(b) + if err != nil { + log.Fatal(err) + } +} + +func main() { + fi, err := os.Create("alphabet.go") + if err != nil { + log.Fatal(err) + } + defer fi.Close() + + write(fi, start) + write(fi, nl) + for i := byte(0); i < 32; i++ { + write(fi, tab) + for j := byte(0); j < 8; j++ { + idx := bytes.IndexByte(alphabet, i*8+j) + if idx == -1 { + write(fi, invalid) + } else { + write(fi, strconv.AppendInt(nil, int64(idx), 10)) + } + write(fi, comma) + if j != 7 { + write(fi, space) + } + } + write(fi, nl) + } + write(fi, end) + write(fi, nl) +} diff --git a/btcutil/bech32/README.md b/btcutil/bech32/README.md new file mode 100644 index 0000000000..471cd50ee9 --- /dev/null +++ b/btcutil/bech32/README.md @@ -0,0 +1,29 @@ +bech32 +========== + +[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/btcutil/bech32?status.png)](http://godoc.org/github.com/btcsuite/btcd/btcutil/bech32) + +Package bech32 provides a Go implementation of the bech32 format specified in +[BIP 173](https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki). + +Test vectors from BIP 173 are added to ensure compatibility with the BIP. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil/bech32 +``` + +## Examples + +* [Bech32 decode Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/bech32#example-Bech32Decode) + Demonstrates how to decode a bech32 encoded string. +* [Bech32 encode Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/bech32#example-BechEncode) + Demonstrates how to encode data into a bech32 string. + +## License + +Package bech32 is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/bech32/bech32.go b/btcutil/bech32/bech32.go new file mode 100644 index 0000000000..c1e00106e6 --- /dev/null +++ b/btcutil/bech32/bech32.go @@ -0,0 +1,442 @@ +// Copyright (c) 2017 The btcsuite developers +// Copyright (c) 2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bech32 + +import ( + "strings" +) + +// charset is the set of characters used in the data section of bech32 strings. +// Note that this is ordered, such that for a given charset[i], i is the binary +// value of the character. +const charset = "qpzry9x8gf2tvdw0s3jn54khce6mua7l" + +// gen encodes the generator polynomial for the bech32 BCH checksum. +var gen = []int{0x3b6a57b2, 0x26508e6d, 0x1ea119fa, 0x3d4233dd, 0x2a1462b3} + +// toBytes converts each character in the string 'chars' to the value of the +// index of the correspoding character in 'charset'. +func toBytes(chars string) ([]byte, error) { + decoded := make([]byte, 0, len(chars)) + for i := 0; i < len(chars); i++ { + index := strings.IndexByte(charset, chars[i]) + if index < 0 { + return nil, ErrNonCharsetChar(chars[i]) + } + decoded = append(decoded, byte(index)) + } + return decoded, nil +} + +// bech32Polymod calculates the BCH checksum for a given hrp, values and +// checksum data. Checksum is optional, and if nil a 0 checksum is assumed. +// +// Values and checksum (if provided) MUST be encoded as 5 bits per element (base +// 32), otherwise the results are undefined. +// +// For more details on the polymod calculation, please refer to BIP 173. +func bech32Polymod(hrp string, values, checksum []byte) int { + chk := 1 + + // Account for the high bits of the HRP in the checksum. + for i := 0; i < len(hrp); i++ { + b := chk >> 25 + hiBits := int(hrp[i]) >> 5 + chk = (chk&0x1ffffff)<<5 ^ hiBits + for i := 0; i < 5; i++ { + if (b>>uint(i))&1 == 1 { + chk ^= gen[i] + } + } + } + + // Account for the separator (0) between high and low bits of the HRP. + // x^0 == x, so we eliminate the redundant xor used in the other rounds. + b := chk >> 25 + chk = (chk & 0x1ffffff) << 5 + for i := 0; i < 5; i++ { + if (b>>uint(i))&1 == 1 { + chk ^= gen[i] + } + } + + // Account for the low bits of the HRP. + for i := 0; i < len(hrp); i++ { + b := chk >> 25 + loBits := int(hrp[i]) & 31 + chk = (chk&0x1ffffff)<<5 ^ loBits + for i := 0; i < 5; i++ { + if (b>>uint(i))&1 == 1 { + chk ^= gen[i] + } + } + } + + // Account for the values. + for _, v := range values { + b := chk >> 25 + chk = (chk&0x1ffffff)<<5 ^ int(v) + for i := 0; i < 5; i++ { + if (b>>uint(i))&1 == 1 { + chk ^= gen[i] + } + } + } + + if checksum == nil { + // A nil checksum is used during encoding, so assume all bytes are zero. + // x^0 == x, so we eliminate the redundant xor used in the other rounds. + for v := 0; v < 6; v++ { + b := chk >> 25 + chk = (chk & 0x1ffffff) << 5 + for i := 0; i < 5; i++ { + if (b>>uint(i))&1 == 1 { + chk ^= gen[i] + } + } + } + } else { + // Checksum is provided during decoding, so use it. + for _, v := range checksum { + b := chk >> 25 + chk = (chk&0x1ffffff)<<5 ^ int(v) + for i := 0; i < 5; i++ { + if (b>>uint(i))&1 == 1 { + chk ^= gen[i] + } + } + } + } + + return chk +} + +// writeBech32Checksum calculates the checksum data expected for a string that +// will have the given hrp and payload data and writes it to the provided string +// builder. +// +// The payload data MUST be encoded as a base 32 (5 bits per element) byte slice +// and the hrp MUST only use the allowed character set (ascii chars between 33 +// and 126), otherwise the results are undefined. +// +// For more details on the checksum calculation, please refer to BIP 173. +func writeBech32Checksum(hrp string, data []byte, bldr *strings.Builder, + version Version) { + + bech32Const := int(VersionToConsts[version]) + polymod := bech32Polymod(hrp, data, nil) ^ bech32Const + for i := 0; i < 6; i++ { + b := byte((polymod >> uint(5*(5-i))) & 31) + + // This can't fail, given we explicitly cap the previous b byte by the + // first 31 bits. + c := charset[b] + bldr.WriteByte(c) + } +} + +// bech32VerifyChecksum verifies whether the bech32 string specified by the +// provided hrp and payload data (encoded as 5 bits per element byte slice) has +// the correct checksum suffix. The version of bech32 used (bech32 OG, or +// bech32m) is also returned to allow the caller to perform proper address +// validation (segwitv0 should use bech32, v1+ should use bech32m). +// +// Data MUST have more than 6 elements, otherwise this function panics. +// +// For more details on the checksum verification, please refer to BIP 173. +func bech32VerifyChecksum(hrp string, data []byte) (Version, bool) { + checksum := data[len(data)-6:] + values := data[:len(data)-6] + polymod := bech32Polymod(hrp, values, checksum) + + // Before BIP-350, we'd always check this against a static constant of + // 1 to know if the checksum was computed properly. As we want to + // generically support decoding for bech32m as well as bech32, we'll + // look up the returned value and compare it to the set of defined + // constants. + bech32Version, ok := ConstsToVersion[ChecksumConst(polymod)] + if ok { + return bech32Version, true + } + + return VersionUnknown, false +} + +// DecodeNoLimit is a bech32 checksum version aware arbitrary string length +// decoder. This function will return the version of the decoded checksum +// constant so higher level validation can be performed to ensure the correct +// version of bech32 was used when encoding. +func decodeNoLimit(bech string) (string, []byte, Version, error) { + // The minimum allowed size of a bech32 string is 8 characters, since it + // needs a non-empty HRP, a separator, and a 6 character checksum. + if len(bech) < 8 { + return "", nil, VersionUnknown, ErrInvalidLength(len(bech)) + } + + // Only ASCII characters between 33 and 126 are allowed. + var hasLower, hasUpper bool + for i := 0; i < len(bech); i++ { + if bech[i] < 33 || bech[i] > 126 { + return "", nil, VersionUnknown, ErrInvalidCharacter(bech[i]) + } + + // The characters must be either all lowercase or all uppercase. Testing + // directly with ascii codes is safe here, given the previous test. + hasLower = hasLower || (bech[i] >= 97 && bech[i] <= 122) + hasUpper = hasUpper || (bech[i] >= 65 && bech[i] <= 90) + if hasLower && hasUpper { + return "", nil, VersionUnknown, ErrMixedCase{} + } + } + + // Bech32 standard uses only the lowercase for of strings for checksum + // calculation. + if hasUpper { + bech = strings.ToLower(bech) + } + + // The string is invalid if the last '1' is non-existent, it is the + // first character of the string (no human-readable part) or one of the + // last 6 characters of the string (since checksum cannot contain '1'). + one := strings.LastIndexByte(bech, '1') + if one < 1 || one+7 > len(bech) { + return "", nil, VersionUnknown, ErrInvalidSeparatorIndex(one) + } + + // The human-readable part is everything before the last '1'. + hrp := bech[:one] + data := bech[one+1:] + + // Each character corresponds to the byte with value of the index in + // 'charset'. + decoded, err := toBytes(data) + if err != nil { + return "", nil, VersionUnknown, err + } + + // Verify if the checksum (stored inside decoded[:]) is valid, given the + // previously decoded hrp. + bech32Version, ok := bech32VerifyChecksum(hrp, decoded) + if !ok { + // Invalid checksum. Calculate what it should have been, so that the + // error contains this information. + + // Extract the payload bytes and actual checksum in the string. + actual := bech[len(bech)-6:] + payload := decoded[:len(decoded)-6] + + // Calculate the expected checksum, given the hrp and payload + // data. We'll actually compute _both_ possibly valid checksum + // to further aide in debugging. + var expectedBldr strings.Builder + expectedBldr.Grow(6) + writeBech32Checksum(hrp, payload, &expectedBldr, Version0) + expectedVersion0 := expectedBldr.String() + + var b strings.Builder + b.Grow(6) + writeBech32Checksum(hrp, payload, &expectedBldr, VersionM) + expectedVersionM := expectedBldr.String() + + err = ErrInvalidChecksum{ + Expected: expectedVersion0, + ExpectedM: expectedVersionM, + Actual: actual, + } + return "", nil, VersionUnknown, err + } + + // We exclude the last 6 bytes, which is the checksum. + return hrp, decoded[:len(decoded)-6], bech32Version, nil +} + +// DecodeNoLimit decodes a bech32 encoded string, returning the human-readable +// part and the data part excluding the checksum. This function does NOT +// validate against the BIP-173 maximum length allowed for bech32 strings and +// is meant for use in custom applications (such as lightning network payment +// requests), NOT on-chain addresses. +// +// Note that the returned data is 5-bit (base32) encoded and the human-readable +// part will be lowercase. +func DecodeNoLimit(bech string) (string, []byte, error) { + hrp, data, _, err := decodeNoLimit(bech) + return hrp, data, err +} + +// Decode decodes a bech32 encoded string, returning the human-readable part and +// the data part excluding the checksum. +// +// Note that the returned data is 5-bit (base32) encoded and the human-readable +// part will be lowercase. +func Decode(bech string) (string, []byte, error) { + // The maximum allowed length for a bech32 string is 90. + if len(bech) > 90 { + return "", nil, ErrInvalidLength(len(bech)) + } + + hrp, data, _, err := decodeNoLimit(bech) + return hrp, data, err +} + +// DecodeGeneric is identical to the existing Decode method, but will also +// return bech32 version that matches the decoded checksum. This method should +// be used when decoding segwit addresses, as it enables additional +// verification to ensure the proper checksum is used. +func DecodeGeneric(bech string) (string, []byte, Version, error) { + // The maximum allowed length for a bech32 string is 90. + if len(bech) > 90 { + return "", nil, VersionUnknown, ErrInvalidLength(len(bech)) + } + + return decodeNoLimit(bech) +} + +// encodeGeneric is the base bech32 encoding function that is aware of the +// existence of the checksum versions. This method is private, as the Encode +// and EncodeM methods are intended to be used instead. +func encodeGeneric(hrp string, data []byte, + version Version) (string, error) { + + // The resulting bech32 string is the concatenation of the lowercase + // hrp, the separator 1, data and the 6-byte checksum. + hrp = strings.ToLower(hrp) + var bldr strings.Builder + bldr.Grow(len(hrp) + 1 + len(data) + 6) + bldr.WriteString(hrp) + bldr.WriteString("1") + + // Write the data part, using the bech32 charset. + for _, b := range data { + if int(b) >= len(charset) { + return "", ErrInvalidDataByte(b) + } + bldr.WriteByte(charset[b]) + } + + // Calculate and write the checksum of the data. + writeBech32Checksum(hrp, data, &bldr, version) + + return bldr.String(), nil +} + +// Encode encodes a byte slice into a bech32 string with the given +// human-readable part (HRP). The HRP will be converted to lowercase if needed +// since mixed cased encodings are not permitted and lowercase is used for +// checksum purposes. Note that the bytes must each encode 5 bits (base32). +func Encode(hrp string, data []byte) (string, error) { + return encodeGeneric(hrp, data, Version0) +} + +// EncodeM is the exactly same as the Encode method, but it uses the new +// bech32m constant instead of the original one. It should be used whenever one +// attempts to encode a segwit address of v1 and beyond. +func EncodeM(hrp string, data []byte) (string, error) { + return encodeGeneric(hrp, data, VersionM) +} + +// ConvertBits converts a byte slice where each byte is encoding fromBits bits, +// to a byte slice where each byte is encoding toBits bits. +func ConvertBits(data []byte, fromBits, toBits uint8, pad bool) ([]byte, error) { + if fromBits < 1 || fromBits > 8 || toBits < 1 || toBits > 8 { + return nil, ErrInvalidBitGroups{} + } + + // Determine the maximum size the resulting array can have after base + // conversion, so that we can size it a single time. This might be off + // by a byte depending on whether padding is used or not and if the input + // data is a multiple of both fromBits and toBits, but we ignore that and + // just size it to the maximum possible. + maxSize := len(data)*int(fromBits)/int(toBits) + 1 + + // The final bytes, each byte encoding toBits bits. + regrouped := make([]byte, 0, maxSize) + + // Keep track of the next byte we create and how many bits we have + // added to it out of the toBits goal. + nextByte := byte(0) + filledBits := uint8(0) + + for _, b := range data { + + // Discard unused bits. + b <<= 8 - fromBits + + // How many bits remaining to extract from the input data. + remFromBits := fromBits + for remFromBits > 0 { + // How many bits remaining to be added to the next byte. + remToBits := toBits - filledBits + + // The number of bytes to next extract is the minimum of + // remFromBits and remToBits. + toExtract := remFromBits + if remToBits < toExtract { + toExtract = remToBits + } + + // Add the next bits to nextByte, shifting the already + // added bits to the left. + nextByte = (nextByte << toExtract) | (b >> (8 - toExtract)) + + // Discard the bits we just extracted and get ready for + // next iteration. + b <<= toExtract + remFromBits -= toExtract + filledBits += toExtract + + // If the nextByte is completely filled, we add it to + // our regrouped bytes and start on the next byte. + if filledBits == toBits { + regrouped = append(regrouped, nextByte) + filledBits = 0 + nextByte = 0 + } + } + } + + // We pad any unfinished group if specified. + if pad && filledBits > 0 { + nextByte <<= toBits - filledBits + regrouped = append(regrouped, nextByte) + filledBits = 0 + nextByte = 0 + } + + // Any incomplete group must be <= 4 bits, and all zeroes. + if filledBits > 0 && (filledBits > 4 || nextByte != 0) { + return nil, ErrInvalidIncompleteGroup{} + } + + return regrouped, nil +} + +// EncodeFromBase256 converts a base256-encoded byte slice into a base32-encoded +// byte slice and then encodes it into a bech32 string with the given +// human-readable part (HRP). The HRP will be converted to lowercase if needed +// since mixed cased encodings are not permitted and lowercase is used for +// checksum purposes. +func EncodeFromBase256(hrp string, data []byte) (string, error) { + converted, err := ConvertBits(data, 8, 5, true) + if err != nil { + return "", err + } + return Encode(hrp, converted) +} + +// DecodeToBase256 decodes a bech32-encoded string into its associated +// human-readable part (HRP) and base32-encoded data, converts that data to a +// base256-encoded byte slice and returns it along with the lowercase HRP. +func DecodeToBase256(bech string) (string, []byte, error) { + hrp, data, err := Decode(bech) + if err != nil { + return "", nil, err + } + converted, err := ConvertBits(data, 5, 8, false) + if err != nil { + return "", nil, err + } + return hrp, converted, nil +} diff --git a/btcutil/bech32/bech32_test.go b/btcutil/bech32/bech32_test.go new file mode 100644 index 0000000000..1e04905a61 --- /dev/null +++ b/btcutil/bech32/bech32_test.go @@ -0,0 +1,691 @@ +// Copyright (c) 2017-2020 The btcsuite developers +// Copyright (c) 2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bech32 + +import ( + "bytes" + "encoding/hex" + "fmt" + "strings" + "testing" +) + +// TestBech32 tests whether decoding and re-encoding the valid BIP-173 test +// vectors works and if decoding invalid test vectors fails for the correct +// reason. +func TestBech32(t *testing.T) { + tests := []struct { + str string + expectedError error + }{ + {"A12UEL5L", nil}, + {"a12uel5l", nil}, + {"an83characterlonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1tt5tgs", nil}, + {"abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", nil}, + {"11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", nil}, + {"split1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", nil}, + {"split1checkupstagehandshakeupstreamerranterredcaperred2y9e2w", ErrInvalidChecksum{"2y9e3w", "2y9e3wlc445v", "2y9e2w"}}, // invalid checksum + {"s lit1checkupstagehandshakeupstreamerranterredcaperredp8hs2p", ErrInvalidCharacter(' ')}, // invalid character (space) in hrp + {"spl\x7Ft1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", ErrInvalidCharacter(127)}, // invalid character (DEL) in hrp + {"split1cheo2y9e2w", ErrNonCharsetChar('o')}, // invalid character (o) in data part + {"split1a2y9w", ErrInvalidSeparatorIndex(5)}, // too short data part + {"1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", ErrInvalidSeparatorIndex(0)}, // empty hrp + {"11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", ErrInvalidLength(91)}, // too long + + // Additional test vectors used in bitcoin core + {" 1nwldj5", ErrInvalidCharacter(' ')}, + {"\x7f" + "1axkwrx", ErrInvalidCharacter(0x7f)}, + {"\x801eym55h", ErrInvalidCharacter(0x80)}, + {"an84characterslonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1569pvx", ErrInvalidLength(91)}, + {"pzry9x0s0muk", ErrInvalidSeparatorIndex(-1)}, + {"1pzry9x0s0muk", ErrInvalidSeparatorIndex(0)}, + {"x1b4n0q5v", ErrNonCharsetChar(98)}, + {"li1dgmt3", ErrInvalidSeparatorIndex(2)}, + {"de1lg7wt\xff", ErrInvalidCharacter(0xff)}, + {"A1G7SGD8", ErrInvalidChecksum{"2uel5l", "2uel5llqfn3a", "g7sgd8"}}, + {"10a06t8", ErrInvalidLength(7)}, + {"1qzzfhee", ErrInvalidSeparatorIndex(0)}, + {"a12UEL5L", ErrMixedCase{}}, + {"A12uEL5L", ErrMixedCase{}}, + } + + for i, test := range tests { + str := test.str + hrp, decoded, err := Decode(str) + if test.expectedError != err { + t.Errorf("%d: expected decoding error %v "+ + "instead got %v", i, test.expectedError, err) + continue + } + + if err != nil { + // End test case here if a decoding error was expected. + continue + } + + // Check that it encodes to the same string + encoded, err := Encode(hrp, decoded) + if err != nil { + t.Errorf("encoding failed: %v", err) + } + + if encoded != strings.ToLower(str) { + t.Errorf("expected data to encode to %v, but got %v", + str, encoded) + } + + // Flip a bit in the string an make sure it is caught. + pos := strings.LastIndexAny(str, "1") + flipped := str[:pos+1] + string((str[pos+1] ^ 1)) + str[pos+2:] + _, _, err = Decode(flipped) + if err == nil { + t.Error("expected decoding to fail") + } + } +} + +// TestBech32M tests that the following set of strings, based on the test +// vectors in BIP-350 are either valid or invalid using the new bech32m +// checksum algo. Some of these strings are similar to the set of above test +// vectors, but end up with different checksums. +func TestBech32M(t *testing.T) { + tests := []struct { + str string + expectedError error + }{ + {"A1LQFN3A", nil}, + {"a1lqfn3a", nil}, + {"an83characterlonghumanreadablepartthatcontainsthetheexcludedcharactersbioandnumber11sg7hg6", nil}, + {"abcdef1l7aum6echk45nj3s0wdvt2fg8x9yrzpqzd3ryx", nil}, + {"11llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllludsr8", nil}, + {"split1checkupstagehandshakeupstreamerranterredcaperredlc445v", nil}, + {"?1v759aa", nil}, + + // Additional test vectors used in bitcoin core + {"\x201xj0phk", ErrInvalidCharacter('\x20')}, + {"\x7f1g6xzxy", ErrInvalidCharacter('\x7f')}, + {"\x801vctc34", ErrInvalidCharacter('\x80')}, + {"an84characterslonghumanreadablepartthatcontainsthetheexcludedcharactersbioandnumber11d6pts4", ErrInvalidLength(91)}, + {"qyrz8wqd2c9m", ErrInvalidSeparatorIndex(-1)}, + {"1qyrz8wqd2c9m", ErrInvalidSeparatorIndex(0)}, + {"y1b0jsk6g", ErrNonCharsetChar(98)}, + {"lt1igcx5c0", ErrNonCharsetChar(105)}, + {"in1muywd", ErrInvalidSeparatorIndex(2)}, + {"mm1crxm3i", ErrNonCharsetChar(105)}, + {"au1s5cgom", ErrNonCharsetChar(111)}, + {"M1VUXWEZ", ErrInvalidChecksum{"mzl49c", "mzl49cw70eq6", "vuxwez"}}, + {"16plkw9", ErrInvalidLength(7)}, + {"1p2gdwpf", ErrInvalidSeparatorIndex(0)}, + + {" 1nwldj5", ErrInvalidCharacter(' ')}, + {"\x7f" + "1axkwrx", ErrInvalidCharacter(0x7f)}, + {"\x801eym55h", ErrInvalidCharacter(0x80)}, + } + + for i, test := range tests { + str := test.str + hrp, decoded, err := Decode(str) + if test.expectedError != err { + t.Errorf("%d: (%v) expected decoding error %v "+ + "instead got %v", i, str, test.expectedError, + err) + continue + } + + if err != nil { + // End test case here if a decoding error was expected. + continue + } + + // Check that it encodes to the same string, using bech32 m. + encoded, err := EncodeM(hrp, decoded) + if err != nil { + t.Errorf("encoding failed: %v", err) + } + + if encoded != strings.ToLower(str) { + t.Errorf("expected data to encode to %v, but got %v", + str, encoded) + } + + // Flip a bit in the string an make sure it is caught. + pos := strings.LastIndexAny(str, "1") + flipped := str[:pos+1] + string((str[pos+1] ^ 1)) + str[pos+2:] + _, _, err = Decode(flipped) + if err == nil { + t.Error("expected decoding to fail") + } + } +} + +// TestBech32DecodeGeneric tests that given a bech32 string, or a bech32m +// string, the proper checksum version is returned so that callers can perform +// segwit addr validation. +func TestBech32DecodeGeneric(t *testing.T) { + tests := []struct { + str string + version Version + }{ + {"A1LQFN3A", VersionM}, + {"a1lqfn3a", VersionM}, + {"an83characterlonghumanreadablepartthatcontainsthetheexcludedcharactersbioandnumber11sg7hg6", VersionM}, + {"abcdef1l7aum6echk45nj3s0wdvt2fg8x9yrzpqzd3ryx", VersionM}, + {"11llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllllludsr8", VersionM}, + {"split1checkupstagehandshakeupstreamerranterredcaperredlc445v", VersionM}, + {"?1v759aa", VersionM}, + + {"A12UEL5L", Version0}, + {"a12uel5l", Version0}, + {"an83characterlonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1tt5tgs", Version0}, + {"abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", Version0}, + {"11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", Version0}, + {"split1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", Version0}, + + {"BC1QW508D6QEJXTDG4Y5R3ZARVARY0C5XW7KV8F3T4", Version0}, + {"tb1qrp33g0q5c5txsp9arysrx4k6zdkfs4nce4xj0gdcccefvpysxf3q0sl5k7", Version0}, + {"bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7kt5nd6y", VersionM}, + {"BC1SW50QGDZ25J", VersionM}, + {"bc1zw508d6qejxtdg4y5r3zarvaryvaxxpcs", VersionM}, + {"tb1qqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesrxh6hy", Version0}, + {"tb1pqqqqp399et2xygdj5xreqhjjvcmzhxw4aywxecjdzew6hylgvsesf3hn0c", VersionM}, + {"bc1p0xlxvlhemja6c4dqv22uapctqupfhlxm9h8z3k2e72q4k9hcz7vqzk5jj0", VersionM}, + } + for i, test := range tests { + _, _, version, err := DecodeGeneric(test.str) + if err != nil { + t.Errorf("%d: (%v) unexpected error during "+ + "decoding: %v", i, test.str, err) + continue + } + + if version != test.version { + t.Errorf("(%v): invalid version: expected %v, got %v", + test.str, test.version, version) + } + } +} + +// TestMixedCaseEncode ensures mixed case HRPs are converted to lowercase as +// expected when encoding and that decoding the produced encoding when converted +// to all uppercase produces the lowercase HRP and original data. +func TestMixedCaseEncode(t *testing.T) { + tests := []struct { + name string + hrp string + data string + encoded string + }{{ + name: "all uppercase HRP with no data", + hrp: "A", + data: "", + encoded: "a12uel5l", + }, { + name: "all uppercase HRP with data", + hrp: "UPPERCASE", + data: "787878", + encoded: "uppercase10pu8sss7kmp", + }, { + name: "mixed case HRP even offsets uppercase", + hrp: "AbCdEf", + data: "00443214c74254b635cf84653a56d7c675be77df", + encoded: "abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", + }, { + name: "mixed case HRP odd offsets uppercase ", + hrp: "aBcDeF", + data: "00443214c74254b635cf84653a56d7c675be77df", + encoded: "abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", + }, { + name: "all lowercase HRP", + hrp: "abcdef", + data: "00443214c74254b635cf84653a56d7c675be77df", + encoded: "abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", + }} + + for _, test := range tests { + // Convert the text hex to bytes, convert those bytes from base256 to + // base32, then ensure the encoded result with the HRP provided in the + // test data is as expected. + data, err := hex.DecodeString(test.data) + if err != nil { + t.Errorf("%q: invalid hex %q: %v", test.name, test.data, err) + continue + } + convertedData, err := ConvertBits(data, 8, 5, true) + if err != nil { + t.Errorf("%q: unexpected convert bits error: %v", test.name, + err) + continue + } + gotEncoded, err := Encode(test.hrp, convertedData) + if err != nil { + t.Errorf("%q: unexpected encode error: %v", test.name, err) + continue + } + if gotEncoded != test.encoded { + t.Errorf("%q: mismatched encoding -- got %q, want %q", test.name, + gotEncoded, test.encoded) + continue + } + + // Ensure the decoding the expected lowercase encoding converted to all + // uppercase produces the lowercase HRP and original data. + gotHRP, gotData, err := Decode(strings.ToUpper(test.encoded)) + if err != nil { + t.Errorf("%q: unexpected decode error: %v", test.name, err) + continue + } + wantHRP := strings.ToLower(test.hrp) + if gotHRP != wantHRP { + t.Errorf("%q: mismatched decoded HRP -- got %q, want %q", test.name, + gotHRP, wantHRP) + continue + } + convertedGotData, err := ConvertBits(gotData, 5, 8, false) + if err != nil { + t.Errorf("%q: unexpected convert bits error: %v", test.name, + err) + continue + } + if !bytes.Equal(convertedGotData, data) { + t.Errorf("%q: mismatched data -- got %x, want %x", test.name, + convertedGotData, data) + continue + } + } +} + +// TestCanDecodeUnlimtedBech32 tests whether decoding a large bech32 string works +// when using the DecodeNoLimit version +func TestCanDecodeUnlimtedBech32(t *testing.T) { + input := "11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq5kx0yd" + + // Sanity check that an input of this length errors on regular Decode() + _, _, err := Decode(input) + if err == nil { + t.Fatalf("Test vector not appropriate") + } + + // Try and decode it. + hrp, data, err := DecodeNoLimit(input) + if err != nil { + t.Fatalf("Expected decoding of large string to work. Got error: %v", err) + } + + // Verify data for correctness. + if hrp != "1" { + t.Fatalf("Unexpected hrp: %v", hrp) + } + decodedHex := fmt.Sprintf("%x", data) + expected := "0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000" + if decodedHex != expected { + t.Fatalf("Unexpected decoded data: %s", decodedHex) + } +} + +// TestBech32Base256 ensures decoding and encoding various bech32, HRPs, and +// data produces the expected results when using EncodeFromBase256 and +// DecodeToBase256. It includes tests for proper handling of case +// manipulations. +func TestBech32Base256(t *testing.T) { + tests := []struct { + name string // test name + encoded string // bech32 string to decode + hrp string // expected human-readable part + data string // expected hex-encoded data + err error // expected error + }{{ + name: "all uppercase, no data", + encoded: "A12UEL5L", + hrp: "a", + data: "", + }, { + name: "long hrp with separator and excluded chars, no data", + encoded: "an83characterlonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio1tt5tgs", + hrp: "an83characterlonghumanreadablepartthatcontainsthenumber1andtheexcludedcharactersbio", + data: "", + }, { + name: "6 char hrp with data with leading zero", + encoded: "abcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", + hrp: "abcdef", + data: "00443214c74254b635cf84653a56d7c675be77df", + }, { + name: "hrp same as separator and max length encoded string", + encoded: "11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", + hrp: "1", + data: "000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + }, { + name: "5 char hrp with data chosen to produce human-readable data part", + encoded: "split1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", + hrp: "split", + data: "c5f38b70305f519bf66d85fb6cf03058f3dde463ecd7918f2dc743918f2d", + }, { + name: "same as previous but with checksum invalidated", + encoded: "split1checkupstagehandshakeupstreamerranterredcaperred2y9e2w", + err: ErrInvalidChecksum{"2y9e3w", "2y9e3wlc445v", "2y9e2w"}, + }, { + name: "hrp with invalid character (space)", + encoded: "s lit1checkupstagehandshakeupstreamerranterredcaperredp8hs2p", + err: ErrInvalidCharacter(' '), + }, { + name: "hrp with invalid character (DEL)", + encoded: "spl\x7ft1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", + err: ErrInvalidCharacter(127), + }, { + name: "data part with invalid character (o)", + encoded: "split1cheo2y9e2w", + err: ErrNonCharsetChar('o'), + }, { + name: "data part too short", + encoded: "split1a2y9w", + err: ErrInvalidSeparatorIndex(5), + }, { + name: "empty hrp", + encoded: "1checkupstagehandshakeupstreamerranterredcaperred2y9e3w", + err: ErrInvalidSeparatorIndex(0), + }, { + name: "no separator", + encoded: "pzry9x0s0muk", + err: ErrInvalidSeparatorIndex(-1), + }, { + name: "too long by one char", + encoded: "11qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqsqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqc8247j", + err: ErrInvalidLength(91), + }, { + name: "invalid due to mixed case in hrp", + encoded: "aBcdef1qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", + err: ErrMixedCase{}, + }, { + name: "invalid due to mixed case in data part", + encoded: "abcdef1Qpzry9x8gf2tvdw0s3jn54khce6mua7lmqqqxw", + err: ErrMixedCase{}, + }} + + for _, test := range tests { + // Ensure the decode either produces an error or not as expected. + str := test.encoded + gotHRP, gotData, err := DecodeToBase256(str) + if test.err != err { + t.Errorf("%q: unexpected decode error -- got %v, want %v", + test.name, err, test.err) + continue + } + if err != nil { + // End test case here if a decoding error was expected. + continue + } + + // Ensure the expected HRP and original data are as expected. + if gotHRP != test.hrp { + t.Errorf("%q: mismatched decoded HRP -- got %q, want %q", test.name, + gotHRP, test.hrp) + continue + } + data, err := hex.DecodeString(test.data) + if err != nil { + t.Errorf("%q: invalid hex %q: %v", test.name, test.data, err) + continue + } + if !bytes.Equal(gotData, data) { + t.Errorf("%q: mismatched data -- got %x, want %x", test.name, + gotData, data) + continue + } + + // Encode the same data with the HRP converted to all uppercase and + // ensure the result is the lowercase version of the original encoded + // bech32 string. + gotEncoded, err := EncodeFromBase256(strings.ToUpper(test.hrp), data) + if err != nil { + t.Errorf("%q: unexpected uppercase HRP encode error: %v", test.name, + err) + } + wantEncoded := strings.ToLower(str) + if gotEncoded != wantEncoded { + t.Errorf("%q: mismatched encoding -- got %q, want %q", test.name, + gotEncoded, wantEncoded) + } + + // Encode the same data with the HRP converted to all lowercase and + // ensure the result is the lowercase version of the original encoded + // bech32 string. + gotEncoded, err = EncodeFromBase256(strings.ToLower(test.hrp), data) + if err != nil { + t.Errorf("%q: unexpected lowercase HRP encode error: %v", test.name, + err) + } + if gotEncoded != wantEncoded { + t.Errorf("%q: mismatched encoding -- got %q, want %q", test.name, + gotEncoded, wantEncoded) + } + + // Encode the same data with the HRP converted to mixed upper and + // lowercase and ensure the result is the lowercase version of the + // original encoded bech32 string. + var mixedHRPBuilder strings.Builder + for i, r := range test.hrp { + if i%2 == 0 { + mixedHRPBuilder.WriteString(strings.ToUpper(string(r))) + continue + } + mixedHRPBuilder.WriteRune(r) + } + gotEncoded, err = EncodeFromBase256(mixedHRPBuilder.String(), data) + if err != nil { + t.Errorf("%q: unexpected lowercase HRP encode error: %v", test.name, + err) + } + if gotEncoded != wantEncoded { + t.Errorf("%q: mismatched encoding -- got %q, want %q", test.name, + gotEncoded, wantEncoded) + } + + // Ensure a bit flip in the string is caught. + pos := strings.LastIndexAny(test.encoded, "1") + flipped := str[:pos+1] + string((str[pos+1] ^ 1)) + str[pos+2:] + _, _, err = DecodeToBase256(flipped) + if err == nil { + t.Error("expected decoding to fail") + } + } +} + +// BenchmarkEncodeDecodeCycle performs a benchmark for a full encode/decode +// cycle of a bech32 string. It also reports the allocation count, which we +// expect to be 2 for a fully optimized cycle. +func BenchmarkEncodeDecodeCycle(b *testing.B) { + // Use a fixed, 49-byte raw data for testing. + inputData, err := hex.DecodeString("cbe6365ddbcda9a9915422c3f091c13f8c7b2f263b8d34067bd12c274408473fa764871c9dd51b1bb34873b3473b633ed1") + if err != nil { + b.Fatalf("failed to initialize input data: %v", err) + } + + // Convert this into a 79-byte, base 32 byte slice. + base32Input, err := ConvertBits(inputData, 8, 5, true) + if err != nil { + b.Fatalf("failed to convert input to 32 bits-per-element: %v", err) + } + + // Use a fixed hrp for the tests. This should generate an encoded bech32 + // string of size 90 (the maximum allowed by BIP-173). + hrp := "bc" + + // Begin the benchmark. Given that we test one roundtrip per iteration + // (that is, one Encode() and one Decode() operation), we expect at most + // 2 allocations per reported test op. + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + str, err := Encode(hrp, base32Input) + if err != nil { + b.Fatalf("failed to encode input: %v", err) + } + + _, _, err = Decode(str) + if err != nil { + b.Fatalf("failed to decode string: %v", err) + } + } +} + +// TestConvertBits tests whether base conversion works using TestConvertBits(). +func TestConvertBits(t *testing.T) { + tests := []struct { + input string + output string + fromBits uint8 + toBits uint8 + pad bool + }{ + // Trivial empty conversions. + {"", "", 8, 5, false}, + {"", "", 8, 5, true}, + {"", "", 5, 8, false}, + {"", "", 5, 8, true}, + + // Conversions of 0 value with/without padding. + {"00", "00", 8, 5, false}, + {"00", "0000", 8, 5, true}, + {"0000", "00", 5, 8, false}, + {"0000", "0000", 5, 8, true}, + + // Testing when conversion ends exactly at the byte edge. This makes + // both padded and unpadded versions the same. + {"0000000000", "0000000000000000", 8, 5, false}, + {"0000000000", "0000000000000000", 8, 5, true}, + {"0000000000000000", "0000000000", 5, 8, false}, + {"0000000000000000", "0000000000", 5, 8, true}, + + // Conversions of full byte sequences. + {"ffffff", "1f1f1f1f1e", 8, 5, true}, + {"1f1f1f1f1e", "ffffff", 5, 8, false}, + {"1f1f1f1f1e", "ffffff00", 5, 8, true}, + + // Sample random conversions. + {"c9ca", "190705", 8, 5, false}, + {"c9ca", "19070500", 8, 5, true}, + {"19070500", "c9ca", 5, 8, false}, + {"19070500", "c9ca00", 5, 8, true}, + + // Test cases tested on TestConvertBitsFailures with their corresponding + // fixes. + {"ff", "1f1c", 8, 5, true}, + {"1f1c10", "ff20", 5, 8, true}, + + // Large conversions. + { + "cbe6365ddbcda9a9915422c3f091c13f8c7b2f263b8d34067bd12c274408473fa764871c9dd51b1bb34873b3473b633ed1", + "190f13030c170e1b1916141a13040a14040b011f01040e01071e0607160b1906070e06130801131b1a0416020e110008081c1f1a0e19040703120e1d0a06181b160d0407070c1a07070d11131d1408", + 8, 5, true, + }, + { + "190f13030c170e1b1916141a13040a14040b011f01040e01071e0607160b1906070e06130801131b1a0416020e110008081c1f1a0e19040703120e1d0a06181b160d0407070c1a07070d11131d1408", + "cbe6365ddbcda9a9915422c3f091c13f8c7b2f263b8d34067bd12c274408473fa764871c9dd51b1bb34873b3473b633ed100", + 5, 8, true, + }, + } + + for i, tc := range tests { + input, err := hex.DecodeString(tc.input) + if err != nil { + t.Fatalf("invalid test input data: %v", err) + } + + expected, err := hex.DecodeString(tc.output) + if err != nil { + t.Fatalf("invalid test output data: %v", err) + } + + actual, err := ConvertBits(input, tc.fromBits, tc.toBits, tc.pad) + if err != nil { + t.Fatalf("test case %d failed: %v", i, err) + } + + if !bytes.Equal(actual, expected) { + t.Fatalf("test case %d has wrong output; expected=%x actual=%x", + i, expected, actual) + } + } +} + +// TestConvertBitsFailures tests for the expected conversion failures of +// ConvertBits(). +func TestConvertBitsFailures(t *testing.T) { + tests := []struct { + input string + fromBits uint8 + toBits uint8 + pad bool + err error + }{ + // Not enough output bytes when not using padding. + {"ff", 8, 5, false, ErrInvalidIncompleteGroup{}}, + {"1f1c10", 5, 8, false, ErrInvalidIncompleteGroup{}}, + + // Unsupported bit conversions. + {"", 0, 5, false, ErrInvalidBitGroups{}}, + {"", 10, 5, false, ErrInvalidBitGroups{}}, + {"", 5, 0, false, ErrInvalidBitGroups{}}, + {"", 5, 10, false, ErrInvalidBitGroups{}}, + } + + for i, tc := range tests { + input, err := hex.DecodeString(tc.input) + if err != nil { + t.Fatalf("invalid test input data: %v", err) + } + + _, err = ConvertBits(input, tc.fromBits, tc.toBits, tc.pad) + if err != tc.err { + t.Fatalf("test case %d failure: expected '%v' got '%v'", i, + tc.err, err) + } + } + +} + +// BenchmarkConvertBitsDown benchmarks the speed and memory allocation behavior +// of ConvertBits when converting from a higher base into a lower base (e.g. 8 +// => 5). +// +// Only a single allocation is expected, which is used for the output array. +func BenchmarkConvertBitsDown(b *testing.B) { + // Use a fixed, 49-byte raw data for testing. + inputData, err := hex.DecodeString("cbe6365ddbcda9a9915422c3f091c13f8c7b2f263b8d34067bd12c274408473fa764871c9dd51b1bb34873b3473b633ed1") + if err != nil { + b.Fatalf("failed to initialize input data: %v", err) + } + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := ConvertBits(inputData, 8, 5, true) + if err != nil { + b.Fatalf("error converting bits: %v", err) + } + } +} + +// BenchmarkConvertBitsDown benchmarks the speed and memory allocation behavior +// of ConvertBits when converting from a lower base into a higher base (e.g. 5 +// => 8). +// +// Only a single allocation is expected, which is used for the output array. +func BenchmarkConvertBitsUp(b *testing.B) { + // Use a fixed, 79-byte raw data for testing. + inputData, err := hex.DecodeString("190f13030c170e1b1916141a13040a14040b011f01040e01071e0607160b1906070e06130801131b1a0416020e110008081c1f1a0e19040703120e1d0a06181b160d0407070c1a07070d11131d1408") + if err != nil { + b.Fatalf("failed to initialize input data: %v", err) + } + + b.ReportAllocs() + b.ResetTimer() + for i := 0; i < b.N; i++ { + _, err := ConvertBits(inputData, 8, 5, true) + if err != nil { + b.Fatalf("error converting bits: %v", err) + } + } +} diff --git a/btcutil/bech32/doc.go b/btcutil/bech32/doc.go new file mode 100644 index 0000000000..2d64fbe0bf --- /dev/null +++ b/btcutil/bech32/doc.go @@ -0,0 +1,15 @@ +// Copyright (c) 2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package bech32 provides a Go implementation of the bech32 format specified in +BIP 173. + +Bech32 strings consist of a human-readable part (hrp), followed by the +separator 1, then a checksummed data part encoded using the 32 characters +"qpzry9x8gf2tvdw0s3jn54khce6mua7l". + +More info: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki +*/ +package bech32 diff --git a/btcutil/bech32/error.go b/btcutil/bech32/error.go new file mode 100644 index 0000000000..e8b1fe8c30 --- /dev/null +++ b/btcutil/bech32/error.go @@ -0,0 +1,87 @@ +// Copyright (c) 2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bech32 + +import ( + "fmt" +) + +// ErrMixedCase is returned when the bech32 string has both lower and uppercase +// characters. +type ErrMixedCase struct{} + +func (e ErrMixedCase) Error() string { + return "string not all lowercase or all uppercase" +} + +// ErrInvalidBitGroups is returned when conversion is attempted between byte +// slices using bit-per-element of unsupported value. +type ErrInvalidBitGroups struct{} + +func (e ErrInvalidBitGroups) Error() string { + return "only bit groups between 1 and 8 allowed" +} + +// ErrInvalidIncompleteGroup is returned when then byte slice used as input has +// data of wrong length. +type ErrInvalidIncompleteGroup struct{} + +func (e ErrInvalidIncompleteGroup) Error() string { + return "invalid incomplete group" +} + +// ErrInvalidLength is returned when the bech32 string has an invalid length +// given the BIP-173 defined restrictions. +type ErrInvalidLength int + +func (e ErrInvalidLength) Error() string { + return fmt.Sprintf("invalid bech32 string length %d", int(e)) +} + +// ErrInvalidCharacter is returned when the bech32 string has a character +// outside the range of the supported charset. +type ErrInvalidCharacter rune + +func (e ErrInvalidCharacter) Error() string { + return fmt.Sprintf("invalid character in string: '%c'", rune(e)) +} + +// ErrInvalidSeparatorIndex is returned when the separator character '1' is +// in an invalid position in the bech32 string. +type ErrInvalidSeparatorIndex int + +func (e ErrInvalidSeparatorIndex) Error() string { + return fmt.Sprintf("invalid separator index %d", int(e)) +} + +// ErrNonCharsetChar is returned when a character outside of the specific +// bech32 charset is used in the string. +type ErrNonCharsetChar rune + +func (e ErrNonCharsetChar) Error() string { + return fmt.Sprintf("invalid character not part of charset: %v", int(e)) +} + +// ErrInvalidChecksum is returned when the extracted checksum of the string +// is different than what was expected. Both the original version, as well as +// the new bech32m checksum may be specified. +type ErrInvalidChecksum struct { + Expected string + ExpectedM string + Actual string +} + +func (e ErrInvalidChecksum) Error() string { + return fmt.Sprintf("invalid checksum (expected (bech32=%v, "+ + "bech32m=%v), got %v)", e.Expected, e.ExpectedM, e.Actual) +} + +// ErrInvalidDataByte is returned when a byte outside the range required for +// conversion into a string was found. +type ErrInvalidDataByte byte + +func (e ErrInvalidDataByte) Error() string { + return fmt.Sprintf("invalid data byte: %v", byte(e)) +} diff --git a/btcutil/bech32/example_test.go b/btcutil/bech32/example_test.go new file mode 100644 index 0000000000..290baaed6c --- /dev/null +++ b/btcutil/bech32/example_test.go @@ -0,0 +1,49 @@ +// Copyright (c) 2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bech32_test + +import ( + "encoding/hex" + "fmt" + + "github.com/btcsuite/btcd/btcutil/bech32" +) + +// This example demonstrates how to decode a bech32 encoded string. +func ExampleDecode() { + encoded := "bc1pw508d6qejxtdg4y5r3zarvary0c5xw7kw508d6qejxtdg4y5r3zarvary0c5xw7k7grplx" + hrp, decoded, err := bech32.Decode(encoded) + if err != nil { + fmt.Println("Error:", err) + } + + // Show the decoded data. + fmt.Println("Decoded human-readable part:", hrp) + fmt.Println("Decoded Data:", hex.EncodeToString(decoded)) + + // Output: + // Decoded human-readable part: bc + // Decoded Data: 010e140f070d1a001912060b0d081504140311021d030c1d03040f1814060e1e160e140f070d1a001912060b0d081504140311021d030c1d03040f1814060e1e16 +} + +// This example demonstrates how to encode data into a bech32 string. +func ExampleEncode() { + data := []byte("Test data") + // Convert test data to base32: + conv, err := bech32.ConvertBits(data, 8, 5, true) + if err != nil { + fmt.Println("Error:", err) + } + encoded, err := bech32.Encode("customHrp!11111q", conv) + if err != nil { + fmt.Println("Error:", err) + } + + // Show the encoded data. + fmt.Println("Encoded Data:", encoded) + + // Output: + // Encoded Data: customhrp!11111q123jhxapqv3shgcgkxpuhe +} diff --git a/btcutil/bech32/version.go b/btcutil/bech32/version.go new file mode 100644 index 0000000000..147037db9a --- /dev/null +++ b/btcutil/bech32/version.go @@ -0,0 +1,43 @@ +package bech32 + +// ChecksumConst is a type that represents the currently defined bech32 +// checksum constants. +type ChecksumConst int + +const ( + // Version0Const is the original constant used in the checksum + // verification for bech32. + Version0Const ChecksumConst = 1 + + // VersionMConst is the new constant used for bech32m checksum + // verification. + VersionMConst ChecksumConst = 0x2bc830a3 +) + +// Version defines the current set of bech32 versions. +type Version uint8 + +const ( + // Version0 defines the original bech version. + Version0 Version = iota + + // VersionM is the new bech32 version defined in BIP-350, also known as + // bech32m. + VersionM + + // VersionUnknown denotes an unknown bech version. + VersionUnknown +) + +// VersionToConsts maps bech32 versions to the checksum constant to be used +// when encoding, and asserting a particular version when decoding. +var VersionToConsts = map[Version]ChecksumConst{ + Version0: Version0Const, + VersionM: VersionMConst, +} + +// ConstsToVersion maps a bech32 constant to the version it's associated with. +var ConstsToVersion = map[ChecksumConst]Version{ + Version0Const: Version0, + VersionMConst: VersionM, +} diff --git a/btcutil/block.go b/btcutil/block.go new file mode 100644 index 0000000000..7d38abc4a0 --- /dev/null +++ b/btcutil/block.go @@ -0,0 +1,265 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "bytes" + "fmt" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// OutOfRangeError describes an error due to accessing an element that is out +// of range. +type OutOfRangeError string + +// BlockHeightUnknown is the value returned for a block height that is unknown. +// This is typically because the block has not been inserted into the main chain +// yet. +const BlockHeightUnknown = int32(-1) + +// Error satisfies the error interface and prints human-readable errors. +func (e OutOfRangeError) Error() string { + return string(e) +} + +// Block defines a bitcoin block that provides easier and more efficient +// manipulation of raw blocks. It also memoizes hashes for the block and its +// transactions on their first access so subsequent accesses don't have to +// repeat the relatively expensive hashing operations. +type Block struct { + msgBlock *wire.MsgBlock // Underlying MsgBlock + serializedBlock []byte // Serialized bytes for the block + serializedBlockNoWitness []byte // Serialized bytes for block w/o witness data + blockHash *chainhash.Hash // Cached block hash + blockHeight int32 // Height in the main block chain + transactions []*Tx // Transactions + txnsGenerated bool // ALL wrapped transactions generated +} + +// MsgBlock returns the underlying wire.MsgBlock for the Block. +func (b *Block) MsgBlock() *wire.MsgBlock { + // Return the cached block. + return b.msgBlock +} + +// Bytes returns the serialized bytes for the Block. This is equivalent to +// calling Serialize on the underlying wire.MsgBlock, however it caches the +// result so subsequent calls are more efficient. +func (b *Block) Bytes() ([]byte, error) { + // Return the cached serialized bytes if it has already been generated. + if len(b.serializedBlock) != 0 { + return b.serializedBlock, nil + } + + // Serialize the MsgBlock. + w := bytes.NewBuffer(make([]byte, 0, b.msgBlock.SerializeSize())) + err := b.msgBlock.Serialize(w) + if err != nil { + return nil, err + } + serializedBlock := w.Bytes() + + // Cache the serialized bytes and return them. + b.serializedBlock = serializedBlock + return serializedBlock, nil +} + +// BytesNoWitness returns the serialized bytes for the block with transactions +// encoded without any witness data. +func (b *Block) BytesNoWitness() ([]byte, error) { + // Return the cached serialized bytes if it has already been generated. + if len(b.serializedBlockNoWitness) != 0 { + return b.serializedBlockNoWitness, nil + } + + // Serialize the MsgBlock. + var w bytes.Buffer + err := b.msgBlock.SerializeNoWitness(&w) + if err != nil { + return nil, err + } + serializedBlock := w.Bytes() + + // Cache the serialized bytes and return them. + b.serializedBlockNoWitness = serializedBlock + return serializedBlock, nil +} + +// Hash returns the block identifier hash for the Block. This is equivalent to +// calling BlockHash on the underlying wire.MsgBlock, however it caches the +// result so subsequent calls are more efficient. +func (b *Block) Hash() *chainhash.Hash { + // Return the cached block hash if it has already been generated. + if b.blockHash != nil { + return b.blockHash + } + + // Cache the block hash and return it. + hash := b.msgBlock.BlockHash() + b.blockHash = &hash + return &hash +} + +// Tx returns a wrapped transaction (btcutil.Tx) for the transaction at the +// specified index in the Block. The supplied index is 0 based. That is to +// say, the first transaction in the block is txNum 0. This is nearly +// equivalent to accessing the raw transaction (wire.MsgTx) from the +// underlying wire.MsgBlock, however the wrapped transaction has some helpful +// properties such as caching the hash so subsequent calls are more efficient. +func (b *Block) Tx(txNum int) (*Tx, error) { + // Ensure the requested transaction is in range. + numTx := uint64(len(b.msgBlock.Transactions)) + if txNum < 0 || uint64(txNum) >= numTx { + str := fmt.Sprintf("transaction index %d is out of range - max %d", + txNum, numTx-1) + return nil, OutOfRangeError(str) + } + + // Generate slice to hold all of the wrapped transactions if needed. + if len(b.transactions) == 0 { + b.transactions = make([]*Tx, numTx) + } + + // Return the wrapped transaction if it has already been generated. + if b.transactions[txNum] != nil { + return b.transactions[txNum], nil + } + + // Generate and cache the wrapped transaction and return it. + newTx := NewTx(b.msgBlock.Transactions[txNum]) + newTx.SetIndex(txNum) + b.transactions[txNum] = newTx + return newTx, nil +} + +// Transactions returns a slice of wrapped transactions (btcutil.Tx) for all +// transactions in the Block. This is nearly equivalent to accessing the raw +// transactions (wire.MsgTx) in the underlying wire.MsgBlock, however it +// instead provides easy access to wrapped versions (btcutil.Tx) of them. +func (b *Block) Transactions() []*Tx { + // Return transactions if they have ALL already been generated. This + // flag is necessary because the wrapped transactions are lazily + // generated in a sparse fashion. + if b.txnsGenerated { + return b.transactions + } + + // Generate slice to hold all of the wrapped transactions if needed. + if len(b.transactions) == 0 { + b.transactions = make([]*Tx, len(b.msgBlock.Transactions)) + } + + // Generate and cache the wrapped transactions for all that haven't + // already been done. + for i, tx := range b.transactions { + if tx == nil { + newTx := NewTx(b.msgBlock.Transactions[i]) + newTx.SetIndex(i) + b.transactions[i] = newTx + } + } + + b.txnsGenerated = true + return b.transactions +} + +// TxHash returns the hash for the requested transaction number in the Block. +// The supplied index is 0 based. That is to say, the first transaction in the +// block is txNum 0. This is equivalent to calling TxHash on the underlying +// wire.MsgTx, however it caches the result so subsequent calls are more +// efficient. +func (b *Block) TxHash(txNum int) (*chainhash.Hash, error) { + // Attempt to get a wrapped transaction for the specified index. It + // will be created lazily if needed or simply return the cached version + // if it has already been generated. + tx, err := b.Tx(txNum) + if err != nil { + return nil, err + } + + // Defer to the wrapped transaction which will return the cached hash if + // it has already been generated. + return tx.Hash(), nil +} + +// TxLoc returns the offsets and lengths of each transaction in a raw block. +// It is used to allow fast indexing into transactions within the raw byte +// stream. +func (b *Block) TxLoc() ([]wire.TxLoc, error) { + rawMsg, err := b.Bytes() + if err != nil { + return nil, err + } + rbuf := bytes.NewBuffer(rawMsg) + + var mblock wire.MsgBlock + txLocs, err := mblock.DeserializeTxLoc(rbuf) + if err != nil { + return nil, err + } + return txLocs, err +} + +// Height returns the saved height of the block in the block chain. This value +// will be BlockHeightUnknown if it hasn't already explicitly been set. +func (b *Block) Height() int32 { + return b.blockHeight +} + +// SetHeight sets the height of the block in the block chain. +func (b *Block) SetHeight(height int32) { + b.blockHeight = height +} + +// NewBlock returns a new instance of a bitcoin block given an underlying +// wire.MsgBlock. See Block. +func NewBlock(msgBlock *wire.MsgBlock) *Block { + return &Block{ + msgBlock: msgBlock, + blockHeight: BlockHeightUnknown, + } +} + +// NewBlockFromBytes returns a new instance of a bitcoin block given the +// serialized bytes. See Block. +func NewBlockFromBytes(serializedBlock []byte) (*Block, error) { + br := bytes.NewReader(serializedBlock) + b, err := NewBlockFromReader(br) + if err != nil { + return nil, err + } + b.serializedBlock = serializedBlock + return b, nil +} + +// NewBlockFromReader returns a new instance of a bitcoin block given a +// Reader to deserialize the block. See Block. +func NewBlockFromReader(r io.Reader) (*Block, error) { + // Deserialize the bytes into a MsgBlock. + var msgBlock wire.MsgBlock + err := msgBlock.Deserialize(r) + if err != nil { + return nil, err + } + + b := Block{ + msgBlock: &msgBlock, + blockHeight: BlockHeightUnknown, + } + return &b, nil +} + +// NewBlockFromBlockAndBytes returns a new instance of a bitcoin block given +// an underlying wire.MsgBlock and the serialized bytes for it. See Block. +func NewBlockFromBlockAndBytes(msgBlock *wire.MsgBlock, serializedBlock []byte) *Block { + return &Block{ + msgBlock: msgBlock, + serializedBlock: serializedBlock, + blockHeight: BlockHeightUnknown, + } +} diff --git a/btcutil/block_test.go b/btcutil/block_test.go new file mode 100644 index 0000000000..e24b9842f7 --- /dev/null +++ b/btcutil/block_test.go @@ -0,0 +1,556 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil_test + +import ( + "bytes" + "io" + "reflect" + "testing" + "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" + "github.com/davecgh/go-spew/spew" +) + +// TestBlock tests the API for Block. +func TestBlock(t *testing.T) { + b := btcutil.NewBlock(&Block100000) + + // Ensure we get the same data back out. + if msgBlock := b.MsgBlock(); !reflect.DeepEqual(msgBlock, &Block100000) { + t.Errorf("MsgBlock: mismatched MsgBlock - got %v, want %v", + spew.Sdump(msgBlock), spew.Sdump(&Block100000)) + } + + // Ensure block height set and get work properly. + wantHeight := int32(100000) + b.SetHeight(wantHeight) + if gotHeight := b.Height(); gotHeight != wantHeight { + t.Errorf("Height: mismatched height - got %v, want %v", + gotHeight, wantHeight) + } + + // Hash for block 100,000. + wantHashStr := "3ba27aa200b1cecaad478d2b00432346c3f1f3986da1afd33e506" + wantHash, err := chainhash.NewHashFromStr(wantHashStr) + if err != nil { + t.Errorf("NewHashFromStr: %v", err) + } + + // Request the hash multiple times to test generation and caching. + for i := 0; i < 2; i++ { + hash := b.Hash() + if !hash.IsEqual(wantHash) { + t.Errorf("Hash #%d mismatched hash - got %v, want %v", + i, hash, wantHash) + } + } + + // Hashes for the transactions in Block100000. + wantTxHashes := []string{ + "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87", + "fff2525b8931402dd09222c50775608f75787bd2b87e56995a7bdd30f79702c4", + "6359f0868171b1d194cbee1af2f16ea598ae8fad666d9b012c8ed2b79a236ec4", + "e9a66845e05d5abc0ad04ec80f774a7e585c6e8db975962d069a522137b80c1d", + } + + // Create a new block to nuke all cached data. + b = btcutil.NewBlock(&Block100000) + + // Request hash for all transactions one at a time via Tx. + for i, txHash := range wantTxHashes { + wantHash, err := chainhash.NewHashFromStr(txHash) + if err != nil { + t.Errorf("NewHashFromStr: %v", err) + } + + // Request the hash multiple times to test generation and + // caching. + for j := 0; j < 2; j++ { + tx, err := b.Tx(i) + if err != nil { + t.Errorf("Tx #%d: %v", i, err) + continue + } + + hash := tx.Hash() + if !hash.IsEqual(wantHash) { + t.Errorf("Hash #%d mismatched hash - got %v, "+ + "want %v", j, hash, wantHash) + continue + } + } + } + + // Create a new block to nuke all cached data. + b = btcutil.NewBlock(&Block100000) + + // Request slice of all transactions multiple times to test generation + // and caching. + for i := 0; i < 2; i++ { + transactions := b.Transactions() + + // Ensure we get the expected number of transactions. + if len(transactions) != len(wantTxHashes) { + t.Errorf("Transactions #%d mismatched number of "+ + "transactions - got %d, want %d", i, + len(transactions), len(wantTxHashes)) + continue + } + + // Ensure all of the hashes match. + for j, tx := range transactions { + wantHash, err := chainhash.NewHashFromStr(wantTxHashes[j]) + if err != nil { + t.Errorf("NewHashFromStr: %v", err) + } + + hash := tx.Hash() + if !hash.IsEqual(wantHash) { + t.Errorf("Transactions #%d mismatched hashes "+ + "- got %v, want %v", j, hash, wantHash) + continue + } + } + } + + // Serialize the test block. + var block100000Buf bytes.Buffer + err = Block100000.Serialize(&block100000Buf) + if err != nil { + t.Errorf("Serialize: %v", err) + } + block100000Bytes := block100000Buf.Bytes() + + // Request serialized bytes multiple times to test generation and + // caching. + for i := 0; i < 2; i++ { + serializedBytes, err := b.Bytes() + if err != nil { + t.Errorf("Bytes: %v", err) + continue + } + if !bytes.Equal(serializedBytes, block100000Bytes) { + t.Errorf("Bytes #%d wrong bytes - got %v, want %v", i, + spew.Sdump(serializedBytes), + spew.Sdump(block100000Bytes)) + continue + } + } + + // Transaction offsets and length for the transaction in Block100000. + wantTxLocs := []wire.TxLoc{ + {TxStart: 81, TxLen: 144}, + {TxStart: 225, TxLen: 259}, + {TxStart: 484, TxLen: 257}, + {TxStart: 741, TxLen: 225}, + } + + // Ensure the transaction location information is accurate. + txLocs, err := b.TxLoc() + if err != nil { + t.Errorf("TxLoc: %v", err) + return + } + if !reflect.DeepEqual(txLocs, wantTxLocs) { + t.Errorf("TxLoc: mismatched transaction location information "+ + "- got %v, want %v", spew.Sdump(txLocs), + spew.Sdump(wantTxLocs)) + } +} + +// TestNewBlockFromBytes tests creation of a Block from serialized bytes. +func TestNewBlockFromBytes(t *testing.T) { + // Serialize the test block. + var block100000Buf bytes.Buffer + err := Block100000.Serialize(&block100000Buf) + if err != nil { + t.Errorf("Serialize: %v", err) + } + block100000Bytes := block100000Buf.Bytes() + + // Create a new block from the serialized bytes. + b, err := btcutil.NewBlockFromBytes(block100000Bytes) + if err != nil { + t.Errorf("NewBlockFromBytes: %v", err) + return + } + + // Ensure we get the same data back out. + serializedBytes, err := b.Bytes() + if err != nil { + t.Errorf("Bytes: %v", err) + return + } + if !bytes.Equal(serializedBytes, block100000Bytes) { + t.Errorf("Bytes: wrong bytes - got %v, want %v", + spew.Sdump(serializedBytes), + spew.Sdump(block100000Bytes)) + } + + // Ensure the generated MsgBlock is correct. + if msgBlock := b.MsgBlock(); !reflect.DeepEqual(msgBlock, &Block100000) { + t.Errorf("MsgBlock: mismatched MsgBlock - got %v, want %v", + spew.Sdump(msgBlock), spew.Sdump(&Block100000)) + } +} + +// TestNewBlockFromBlockAndBytes tests creation of a Block from a MsgBlock and +// raw bytes. +func TestNewBlockFromBlockAndBytes(t *testing.T) { + // Serialize the test block. + var block100000Buf bytes.Buffer + err := Block100000.Serialize(&block100000Buf) + if err != nil { + t.Errorf("Serialize: %v", err) + } + block100000Bytes := block100000Buf.Bytes() + + // Create a new block from the serialized bytes. + b := btcutil.NewBlockFromBlockAndBytes(&Block100000, block100000Bytes) + + // Ensure we get the same data back out. + serializedBytes, err := b.Bytes() + if err != nil { + t.Errorf("Bytes: %v", err) + return + } + if !bytes.Equal(serializedBytes, block100000Bytes) { + t.Errorf("Bytes: wrong bytes - got %v, want %v", + spew.Sdump(serializedBytes), + spew.Sdump(block100000Bytes)) + } + if msgBlock := b.MsgBlock(); !reflect.DeepEqual(msgBlock, &Block100000) { + t.Errorf("MsgBlock: mismatched MsgBlock - got %v, want %v", + spew.Sdump(msgBlock), spew.Sdump(&Block100000)) + } +} + +// TestBlockErrors tests the error paths for the Block API. +func TestBlockErrors(t *testing.T) { + // Ensure out of range errors are as expected. + wantErr := "transaction index -1 is out of range - max 3" + testErr := btcutil.OutOfRangeError(wantErr) + if testErr.Error() != wantErr { + t.Errorf("OutOfRangeError: wrong error - got %v, want %v", + testErr.Error(), wantErr) + } + + // Serialize the test block. + var block100000Buf bytes.Buffer + err := Block100000.Serialize(&block100000Buf) + if err != nil { + t.Errorf("Serialize: %v", err) + } + block100000Bytes := block100000Buf.Bytes() + + // Create a new block from the serialized bytes. + b, err := btcutil.NewBlockFromBytes(block100000Bytes) + if err != nil { + t.Errorf("NewBlockFromBytes: %v", err) + return + } + + // Truncate the block byte buffer to force errors. + shortBytes := block100000Bytes[:80] + _, err = btcutil.NewBlockFromBytes(shortBytes) + if err != io.EOF { + t.Errorf("NewBlockFromBytes: did not get expected error - "+ + "got %v, want %v", err, io.EOF) + } + + // Ensure TxHash returns expected error on invalid indices. + _, err = b.TxHash(-1) + if _, ok := err.(btcutil.OutOfRangeError); !ok { + t.Errorf("TxHash: wrong error - got: %v <%T>, "+ + "want: <%T>", err, err, btcutil.OutOfRangeError("")) + } + _, err = b.TxHash(len(Block100000.Transactions)) + if _, ok := err.(btcutil.OutOfRangeError); !ok { + t.Errorf("TxHash: wrong error - got: %v <%T>, "+ + "want: <%T>", err, err, btcutil.OutOfRangeError("")) + } + + // Ensure Tx returns expected error on invalid indices. + _, err = b.Tx(-1) + if _, ok := err.(btcutil.OutOfRangeError); !ok { + t.Errorf("Tx: wrong error - got: %v <%T>, "+ + "want: <%T>", err, err, btcutil.OutOfRangeError("")) + } + _, err = b.Tx(len(Block100000.Transactions)) + if _, ok := err.(btcutil.OutOfRangeError); !ok { + t.Errorf("Tx: wrong error - got: %v <%T>, "+ + "want: <%T>", err, err, btcutil.OutOfRangeError("")) + } + + // Ensure TxLoc returns expected error with short byte buffer. + // This makes use of the test package only function, SetBlockBytes, to + // inject a short byte buffer. + b.SetBlockBytes(shortBytes) + _, err = b.TxLoc() + if err != io.EOF { + t.Errorf("TxLoc: did not get expected error - "+ + "got %v, want %v", err, io.EOF) + } +} + +// Block100000 defines block 100,000 of the block chain. It is used to +// test Block operations. +var Block100000 = wire.MsgBlock{ + Header: wire.BlockHeader{ + Version: 1, + PrevBlock: chainhash.Hash([32]byte{ // Make go vet happy. + 0x50, 0x12, 0x01, 0x19, 0x17, 0x2a, 0x61, 0x04, + 0x21, 0xa6, 0xc3, 0x01, 0x1d, 0xd3, 0x30, 0xd9, + 0xdf, 0x07, 0xb6, 0x36, 0x16, 0xc2, 0xcc, 0x1f, + 0x1c, 0xd0, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, + }), // 000000000002d01c1fccc21636b607dfd930d31d01c3a62104612a1719011250 + MerkleRoot: chainhash.Hash([32]byte{ // Make go vet happy. + 0x66, 0x57, 0xa9, 0x25, 0x2a, 0xac, 0xd5, 0xc0, + 0xb2, 0x94, 0x09, 0x96, 0xec, 0xff, 0x95, 0x22, + 0x28, 0xc3, 0x06, 0x7c, 0xc3, 0x8d, 0x48, 0x85, + 0xef, 0xb5, 0xa4, 0xac, 0x42, 0x47, 0xe9, 0xf3, + }), // f3e94742aca4b5ef85488dc37c06c3282295ffec960994b2c0d5ac2a25a95766 + Timestamp: time.Unix(1293623863, 0), // 2010-12-29 11:57:43 +0000 UTC + Bits: 0x1b04864c, // 453281356 + Nonce: 0x10572b0f, // 274148111 + }, + Transactions: []*wire.MsgTx{ + { + Version: 1, + TxIn: []*wire.TxIn{ + { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{}, + Index: 0xffffffff, + }, + SignatureScript: []byte{ + 0x04, 0x4c, 0x86, 0x04, 0x1b, 0x02, 0x06, 0x02, + }, + Sequence: 0xffffffff, + Witness: [][]byte{ + {0x04, 0x31}, + {0x01, 0x43}, + }, + }, + }, + TxOut: []*wire.TxOut{ + { + Value: 0x12a05f200, // 5000000000 + PkScript: []byte{ + 0x41, // OP_DATA_65 + 0x04, 0x1b, 0x0e, 0x8c, 0x25, 0x67, 0xc1, 0x25, + 0x36, 0xaa, 0x13, 0x35, 0x7b, 0x79, 0xa0, 0x73, + 0xdc, 0x44, 0x44, 0xac, 0xb8, 0x3c, 0x4e, 0xc7, + 0xa0, 0xe2, 0xf9, 0x9d, 0xd7, 0x45, 0x75, 0x16, + 0xc5, 0x81, 0x72, 0x42, 0xda, 0x79, 0x69, 0x24, + 0xca, 0x4e, 0x99, 0x94, 0x7d, 0x08, 0x7f, 0xed, + 0xf9, 0xce, 0x46, 0x7c, 0xb9, 0xf7, 0xc6, 0x28, + 0x70, 0x78, 0xf8, 0x01, 0xdf, 0x27, 0x6f, 0xdf, + 0x84, // 65-byte signature + 0xac, // OP_CHECKSIG + }, + }, + }, + LockTime: 0, + }, + { + Version: 1, + TxIn: []*wire.TxIn{ + { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash([32]byte{ // Make go vet happy. + 0x03, 0x2e, 0x38, 0xe9, 0xc0, 0xa8, 0x4c, 0x60, + 0x46, 0xd6, 0x87, 0xd1, 0x05, 0x56, 0xdc, 0xac, + 0xc4, 0x1d, 0x27, 0x5e, 0xc5, 0x5f, 0xc0, 0x07, + 0x79, 0xac, 0x88, 0xfd, 0xf3, 0x57, 0xa1, 0x87, + }), // 87a157f3fd88ac7907c05fc55e271dc4acdc5605d187d646604ca8c0e9382e03 + Index: 0, + }, + SignatureScript: []byte{ + 0x49, // OP_DATA_73 + 0x30, 0x46, 0x02, 0x21, 0x00, 0xc3, 0x52, 0xd3, + 0xdd, 0x99, 0x3a, 0x98, 0x1b, 0xeb, 0xa4, 0xa6, + 0x3a, 0xd1, 0x5c, 0x20, 0x92, 0x75, 0xca, 0x94, + 0x70, 0xab, 0xfc, 0xd5, 0x7d, 0xa9, 0x3b, 0x58, + 0xe4, 0xeb, 0x5d, 0xce, 0x82, 0x02, 0x21, 0x00, + 0x84, 0x07, 0x92, 0xbc, 0x1f, 0x45, 0x60, 0x62, + 0x81, 0x9f, 0x15, 0xd3, 0x3e, 0xe7, 0x05, 0x5c, + 0xf7, 0xb5, 0xee, 0x1a, 0xf1, 0xeb, 0xcc, 0x60, + 0x28, 0xd9, 0xcd, 0xb1, 0xc3, 0xaf, 0x77, 0x48, + 0x01, // 73-byte signature + 0x41, // OP_DATA_65 + 0x04, 0xf4, 0x6d, 0xb5, 0xe9, 0xd6, 0x1a, 0x9d, + 0xc2, 0x7b, 0x8d, 0x64, 0xad, 0x23, 0xe7, 0x38, + 0x3a, 0x4e, 0x6c, 0xa1, 0x64, 0x59, 0x3c, 0x25, + 0x27, 0xc0, 0x38, 0xc0, 0x85, 0x7e, 0xb6, 0x7e, + 0xe8, 0xe8, 0x25, 0xdc, 0xa6, 0x50, 0x46, 0xb8, + 0x2c, 0x93, 0x31, 0x58, 0x6c, 0x82, 0xe0, 0xfd, + 0x1f, 0x63, 0x3f, 0x25, 0xf8, 0x7c, 0x16, 0x1b, + 0xc6, 0xf8, 0xa6, 0x30, 0x12, 0x1d, 0xf2, 0xb3, + 0xd3, // 65-byte pubkey + }, + Sequence: 0xffffffff, + }, + }, + TxOut: []*wire.TxOut{ + { + Value: 0x2123e300, // 556000000 + PkScript: []byte{ + 0x76, // OP_DUP + 0xa9, // OP_HASH160 + 0x14, // OP_DATA_20 + 0xc3, 0x98, 0xef, 0xa9, 0xc3, 0x92, 0xba, 0x60, + 0x13, 0xc5, 0xe0, 0x4e, 0xe7, 0x29, 0x75, 0x5e, + 0xf7, 0xf5, 0x8b, 0x32, + 0x88, // OP_EQUALVERIFY + 0xac, // OP_CHECKSIG + }, + }, + { + Value: 0x108e20f00, // 4444000000 + PkScript: []byte{ + 0x76, // OP_DUP + 0xa9, // OP_HASH160 + 0x14, // OP_DATA_20 + 0x94, 0x8c, 0x76, 0x5a, 0x69, 0x14, 0xd4, 0x3f, + 0x2a, 0x7a, 0xc1, 0x77, 0xda, 0x2c, 0x2f, 0x6b, + 0x52, 0xde, 0x3d, 0x7c, + 0x88, // OP_EQUALVERIFY + 0xac, // OP_CHECKSIG + }, + }, + }, + LockTime: 0, + }, + { + Version: 1, + TxIn: []*wire.TxIn{ + { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash([32]byte{ // Make go vet happy. + 0xc3, 0x3e, 0xbf, 0xf2, 0xa7, 0x09, 0xf1, 0x3d, + 0x9f, 0x9a, 0x75, 0x69, 0xab, 0x16, 0xa3, 0x27, + 0x86, 0xaf, 0x7d, 0x7e, 0x2d, 0xe0, 0x92, 0x65, + 0xe4, 0x1c, 0x61, 0xd0, 0x78, 0x29, 0x4e, 0xcf, + }), // cf4e2978d0611ce46592e02d7e7daf8627a316ab69759a9f3df109a7f2bf3ec3 + Index: 1, + }, + SignatureScript: []byte{ + 0x47, // OP_DATA_71 + 0x30, 0x44, 0x02, 0x20, 0x03, 0x2d, 0x30, 0xdf, + 0x5e, 0xe6, 0xf5, 0x7f, 0xa4, 0x6c, 0xdd, 0xb5, + 0xeb, 0x8d, 0x0d, 0x9f, 0xe8, 0xde, 0x6b, 0x34, + 0x2d, 0x27, 0x94, 0x2a, 0xe9, 0x0a, 0x32, 0x31, + 0xe0, 0xba, 0x33, 0x3e, 0x02, 0x20, 0x3d, 0xee, + 0xe8, 0x06, 0x0f, 0xdc, 0x70, 0x23, 0x0a, 0x7f, + 0x5b, 0x4a, 0xd7, 0xd7, 0xbc, 0x3e, 0x62, 0x8c, + 0xbe, 0x21, 0x9a, 0x88, 0x6b, 0x84, 0x26, 0x9e, + 0xae, 0xb8, 0x1e, 0x26, 0xb4, 0xfe, 0x01, + 0x41, // OP_DATA_65 + 0x04, 0xae, 0x31, 0xc3, 0x1b, 0xf9, 0x12, 0x78, + 0xd9, 0x9b, 0x83, 0x77, 0xa3, 0x5b, 0xbc, 0xe5, + 0xb2, 0x7d, 0x9f, 0xff, 0x15, 0x45, 0x68, 0x39, + 0xe9, 0x19, 0x45, 0x3f, 0xc7, 0xb3, 0xf7, 0x21, + 0xf0, 0xba, 0x40, 0x3f, 0xf9, 0x6c, 0x9d, 0xee, + 0xb6, 0x80, 0xe5, 0xfd, 0x34, 0x1c, 0x0f, 0xc3, + 0xa7, 0xb9, 0x0d, 0xa4, 0x63, 0x1e, 0xe3, 0x95, + 0x60, 0x63, 0x9d, 0xb4, 0x62, 0xe9, 0xcb, 0x85, + 0x0f, // 65-byte pubkey + }, + Sequence: 0xffffffff, + }, + }, + TxOut: []*wire.TxOut{ + { + Value: 0xf4240, // 1000000 + PkScript: []byte{ + 0x76, // OP_DUP + 0xa9, // OP_HASH160 + 0x14, // OP_DATA_20 + 0xb0, 0xdc, 0xbf, 0x97, 0xea, 0xbf, 0x44, 0x04, + 0xe3, 0x1d, 0x95, 0x24, 0x77, 0xce, 0x82, 0x2d, + 0xad, 0xbe, 0x7e, 0x10, + 0x88, // OP_EQUALVERIFY + 0xac, // OP_CHECKSIG + }, + }, + { + Value: 0x11d260c0, // 299000000 + PkScript: []byte{ + 0x76, // OP_DUP + 0xa9, // OP_HASH160 + 0x14, // OP_DATA_20 + 0x6b, 0x12, 0x81, 0xee, 0xc2, 0x5a, 0xb4, 0xe1, + 0xe0, 0x79, 0x3f, 0xf4, 0xe0, 0x8a, 0xb1, 0xab, + 0xb3, 0x40, 0x9c, 0xd9, + 0x88, // OP_EQUALVERIFY + 0xac, // OP_CHECKSIG + }, + }, + }, + LockTime: 0, + }, + { + Version: 1, + TxIn: []*wire.TxIn{ + { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash([32]byte{ // Make go vet happy. + 0x0b, 0x60, 0x72, 0xb3, 0x86, 0xd4, 0xa7, 0x73, + 0x23, 0x52, 0x37, 0xf6, 0x4c, 0x11, 0x26, 0xac, + 0x3b, 0x24, 0x0c, 0x84, 0xb9, 0x17, 0xa3, 0x90, + 0x9b, 0xa1, 0xc4, 0x3d, 0xed, 0x5f, 0x51, 0xf4, + }), // f4515fed3dc4a19b90a317b9840c243bac26114cf637522373a7d486b372600b + Index: 0, + }, + SignatureScript: []byte{ + 0x49, // OP_DATA_73 + 0x30, 0x46, 0x02, 0x21, 0x00, 0xbb, 0x1a, 0xd2, + 0x6d, 0xf9, 0x30, 0xa5, 0x1c, 0xce, 0x11, 0x0c, + 0xf4, 0x4f, 0x7a, 0x48, 0xc3, 0xc5, 0x61, 0xfd, + 0x97, 0x75, 0x00, 0xb1, 0xae, 0x5d, 0x6b, 0x6f, + 0xd1, 0x3d, 0x0b, 0x3f, 0x4a, 0x02, 0x21, 0x00, + 0xc5, 0xb4, 0x29, 0x51, 0xac, 0xed, 0xff, 0x14, + 0xab, 0xba, 0x27, 0x36, 0xfd, 0x57, 0x4b, 0xdb, + 0x46, 0x5f, 0x3e, 0x6f, 0x8d, 0xa1, 0x2e, 0x2c, + 0x53, 0x03, 0x95, 0x4a, 0xca, 0x7f, 0x78, 0xf3, + 0x01, // 73-byte signature + 0x41, // OP_DATA_65 + 0x04, 0xa7, 0x13, 0x5b, 0xfe, 0x82, 0x4c, 0x97, + 0xec, 0xc0, 0x1e, 0xc7, 0xd7, 0xe3, 0x36, 0x18, + 0x5c, 0x81, 0xe2, 0xaa, 0x2c, 0x41, 0xab, 0x17, + 0x54, 0x07, 0xc0, 0x94, 0x84, 0xce, 0x96, 0x94, + 0xb4, 0x49, 0x53, 0xfc, 0xb7, 0x51, 0x20, 0x65, + 0x64, 0xa9, 0xc2, 0x4d, 0xd0, 0x94, 0xd4, 0x2f, + 0xdb, 0xfd, 0xd5, 0xaa, 0xd3, 0xe0, 0x63, 0xce, + 0x6a, 0xf4, 0xcf, 0xaa, 0xea, 0x4e, 0xa1, 0x4f, + 0xbb, // 65-byte pubkey + }, + Sequence: 0xffffffff, + }, + }, + TxOut: []*wire.TxOut{ + { + Value: 0xf4240, // 1000000 + PkScript: []byte{ + 0x76, // OP_DUP + 0xa9, // OP_HASH160 + 0x14, // OP_DATA_20 + 0x39, 0xaa, 0x3d, 0x56, 0x9e, 0x06, 0xa1, 0xd7, + 0x92, 0x6d, 0xc4, 0xbe, 0x11, 0x93, 0xc9, 0x9b, + 0xf2, 0xeb, 0x9e, 0xe0, + 0x88, // OP_EQUALVERIFY + 0xac, // OP_CHECKSIG + }, + }, + }, + LockTime: 0, + }, + }, +} diff --git a/btcutil/bloom/README.md b/btcutil/bloom/README.md new file mode 100644 index 0000000000..4a5c937f88 --- /dev/null +++ b/btcutil/bloom/README.md @@ -0,0 +1,30 @@ +bloom +===== + +[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/btcutil/bloom) + +Package bloom provides an API for dealing with bitcoin-specific bloom filters. + +A comprehensive suite of tests is provided to ensure proper functionality. See +`test_coverage.txt` for the gocov coverage report. Alternatively, if you are +running a POSIX OS, you can run the `cov_report.sh` script for a real-time +report. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil/bloom +``` + +## Examples + +* [NewFilter Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/bloom#example-NewFilter) + Demonstrates how to create a new bloom filter, add a transaction hash to it, + and check if the filter matches the transaction. + +## License + +Package bloom is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/bloom/cov_report.sh b/btcutil/bloom/cov_report.sh new file mode 100644 index 0000000000..307f05b76c --- /dev/null +++ b/btcutil/bloom/cov_report.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# This script uses gocov to generate a test coverage report. +# The gocov tool my be obtained with the following command: +# go get github.com/axw/gocov/gocov +# +# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH. + +# Check for gocov. +type gocov >/dev/null 2>&1 +if [ $? -ne 0 ]; then + echo >&2 "This script requires the gocov tool." + echo >&2 "You may obtain it with the following command:" + echo >&2 "go get github.com/axw/gocov/gocov" + exit 1 +fi +gocov test | gocov report diff --git a/btcutil/bloom/example_test.go b/btcutil/bloom/example_test.go new file mode 100644 index 0000000000..bcd5d0190b --- /dev/null +++ b/btcutil/bloom/example_test.go @@ -0,0 +1,45 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bloom_test + +import ( + "fmt" + "math/rand" + "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil/bloom" +) + +// This example demonstrates how to create a new bloom filter, add a transaction +// hash to it, and check if the filter matches the transaction. +func ExampleNewFilter() { + rand.Seed(time.Now().UnixNano()) + tweak := rand.Uint32() + + // Create a new bloom filter intended to hold 10 elements with a 0.01% + // false positive rate and does not include any automatic update + // functionality when transactions are matched. + filter := bloom.NewFilter(10, tweak, 0.0001, wire.BloomUpdateNone) + + // Create a transaction hash and add it to the filter. This particular + // trasaction is the first transaction in block 310,000 of the main + // bitcoin block chain. + txHashStr := "fd611c56ca0d378cdcd16244b45c2ba9588da3adac367c4ef43e808b280b8a45" + txHash, err := chainhash.NewHashFromStr(txHashStr) + if err != nil { + fmt.Println(err) + return + } + filter.AddHash(txHash) + + // Show that the filter matches. + matches := filter.Matches(txHash[:]) + fmt.Println("Filter Matches?:", matches) + + // Output: + // Filter Matches?: true +} diff --git a/btcutil/bloom/filter.go b/btcutil/bloom/filter.go new file mode 100644 index 0000000000..8c4527ea29 --- /dev/null +++ b/btcutil/bloom/filter.go @@ -0,0 +1,354 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bloom + +import ( + "encoding/binary" + "math" + "sync" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" +) + +// ln2Squared is simply the square of the natural log of 2. +const ln2Squared = math.Ln2 * math.Ln2 + +// minUint32 is a convenience function to return the minimum value of the two +// passed uint32 values. +func minUint32(a, b uint32) uint32 { + if a < b { + return a + } + return b +} + +// Filter defines a bitcoin bloom filter that provides easy manipulation of raw +// filter data. +type Filter struct { + mtx sync.Mutex + msgFilterLoad *wire.MsgFilterLoad +} + +// NewFilter creates a new bloom filter instance, mainly to be used by SPV +// clients. The tweak parameter is a random value added to the seed value. +// The false positive rate is the probability of a false positive where 1.0 is +// "match everything" and zero is unachievable. Thus, providing any false +// positive rates less than 0 or greater than 1 will be adjusted to the valid +// range. +// +// For more information on what values to use for both elements and fprate, +// see https://en.wikipedia.org/wiki/Bloom_filter. +func NewFilter(elements, tweak uint32, fprate float64, flags wire.BloomUpdateType) *Filter { + // Massage the false positive rate to sane values. + if fprate > 1.0 { + fprate = 1.0 + } + if fprate < 1e-9 { + fprate = 1e-9 + } + + // Calculate the size of the filter in bytes for the given number of + // elements and false positive rate. + // + // Equivalent to m = -(n*ln(p) / ln(2)^2), where m is in bits. + // Then clamp it to the maximum filter size and convert to bytes. + dataLen := uint32(-1 * float64(elements) * math.Log(fprate) / ln2Squared) + dataLen = minUint32(dataLen, wire.MaxFilterLoadFilterSize*8) / 8 + + // Calculate the number of hash functions based on the size of the + // filter calculated above and the number of elements. + // + // Equivalent to k = (m/n) * ln(2) + // Then clamp it to the maximum allowed hash funcs. + hashFuncs := uint32(float64(dataLen*8) / float64(elements) * math.Ln2) + hashFuncs = minUint32(hashFuncs, wire.MaxFilterLoadHashFuncs) + + data := make([]byte, dataLen) + msg := wire.NewMsgFilterLoad(data, hashFuncs, tweak, flags) + + return &Filter{ + msgFilterLoad: msg, + } +} + +// LoadFilter creates a new Filter instance with the given underlying +// wire.MsgFilterLoad. +func LoadFilter(filter *wire.MsgFilterLoad) *Filter { + return &Filter{ + msgFilterLoad: filter, + } +} + +// IsLoaded returns true if a filter is loaded, otherwise false. +// +// This function is safe for concurrent access. +func (bf *Filter) IsLoaded() bool { + bf.mtx.Lock() + loaded := bf.msgFilterLoad != nil + bf.mtx.Unlock() + return loaded +} + +// Reload loads a new filter replacing any existing filter. +// +// This function is safe for concurrent access. +func (bf *Filter) Reload(filter *wire.MsgFilterLoad) { + bf.mtx.Lock() + bf.msgFilterLoad = filter + bf.mtx.Unlock() +} + +// Unload unloads the bloom filter. +// +// This function is safe for concurrent access. +func (bf *Filter) Unload() { + bf.mtx.Lock() + bf.msgFilterLoad = nil + bf.mtx.Unlock() +} + +// hash returns the bit offset in the bloom filter which corresponds to the +// passed data for the given independent hash function number. +func (bf *Filter) hash(hashNum uint32, data []byte) uint32 { + // bitcoind: 0xfba4c795 chosen as it guarantees a reasonable bit + // difference between hashNum values. + // + // Note that << 3 is equivalent to multiplying by 8, but is faster. + // Thus the returned hash is brought into range of the number of bits + // the filter has and returned. + mm := MurmurHash3(hashNum*0xfba4c795+bf.msgFilterLoad.Tweak, data) + return mm % (uint32(len(bf.msgFilterLoad.Filter)) << 3) +} + +// matches returns true if the bloom filter might contain the passed data and +// false if it definitely does not. +// +// This function MUST be called with the filter lock held. +func (bf *Filter) matches(data []byte) bool { + if bf.msgFilterLoad == nil { + return false + } + + // The bloom filter does not contain the data if any of the bit offsets + // which result from hashing the data using each independent hash + // function are not set. The shifts and masks below are a faster + // equivalent of: + // arrayIndex := idx / 8 (idx >> 3) + // bitOffset := idx % 8 (idx & 7) + /// if filter[arrayIndex] & 1<>3]&(1<<(idx&7)) == 0 { + return false + } + } + return true +} + +// Matches returns true if the bloom filter might contain the passed data and +// false if it definitely does not. +// +// This function is safe for concurrent access. +func (bf *Filter) Matches(data []byte) bool { + bf.mtx.Lock() + match := bf.matches(data) + bf.mtx.Unlock() + return match +} + +// matchesOutPoint returns true if the bloom filter might contain the passed +// outpoint and false if it definitely does not. +// +// This function MUST be called with the filter lock held. +func (bf *Filter) matchesOutPoint(outpoint *wire.OutPoint) bool { + // Serialize + var buf [chainhash.HashSize + 4]byte + copy(buf[:], outpoint.Hash[:]) + binary.LittleEndian.PutUint32(buf[chainhash.HashSize:], outpoint.Index) + + return bf.matches(buf[:]) +} + +// MatchesOutPoint returns true if the bloom filter might contain the passed +// outpoint and false if it definitely does not. +// +// This function is safe for concurrent access. +func (bf *Filter) MatchesOutPoint(outpoint *wire.OutPoint) bool { + bf.mtx.Lock() + match := bf.matchesOutPoint(outpoint) + bf.mtx.Unlock() + return match +} + +// add adds the passed byte slice to the bloom filter. +// +// This function MUST be called with the filter lock held. +func (bf *Filter) add(data []byte) { + if bf.msgFilterLoad == nil { + return + } + + // Adding data to a bloom filter consists of setting all of the bit + // offsets which result from hashing the data using each independent + // hash function. The shifts and masks below are a faster equivalent + // of: + // arrayIndex := idx / 8 (idx >> 3) + // bitOffset := idx % 8 (idx & 7) + /// filter[arrayIndex] |= 1<>3] |= (1 << (7 & idx)) + } +} + +// Add adds the passed byte slice to the bloom filter. +// +// This function is safe for concurrent access. +func (bf *Filter) Add(data []byte) { + bf.mtx.Lock() + bf.add(data) + bf.mtx.Unlock() +} + +// AddHash adds the passed chainhash.Hash to the Filter. +// +// This function is safe for concurrent access. +func (bf *Filter) AddHash(hash *chainhash.Hash) { + bf.mtx.Lock() + bf.add(hash[:]) + bf.mtx.Unlock() +} + +// addOutPoint adds the passed transaction outpoint to the bloom filter. +// +// This function MUST be called with the filter lock held. +func (bf *Filter) addOutPoint(outpoint *wire.OutPoint) { + // Serialize + var buf [chainhash.HashSize + 4]byte + copy(buf[:], outpoint.Hash[:]) + binary.LittleEndian.PutUint32(buf[chainhash.HashSize:], outpoint.Index) + + bf.add(buf[:]) +} + +// AddOutPoint adds the passed transaction outpoint to the bloom filter. +// +// This function is safe for concurrent access. +func (bf *Filter) AddOutPoint(outpoint *wire.OutPoint) { + bf.mtx.Lock() + bf.addOutPoint(outpoint) + bf.mtx.Unlock() +} + +// maybeAddOutpoint potentially adds the passed outpoint to the bloom filter +// depending on the bloom update flags and the type of the passed public key +// script. +// +// This function MUST be called with the filter lock held. +func (bf *Filter) maybeAddOutpoint(pkScript []byte, outHash *chainhash.Hash, outIdx uint32) { + switch bf.msgFilterLoad.Flags { + case wire.BloomUpdateAll: + outpoint := wire.NewOutPoint(outHash, outIdx) + bf.addOutPoint(outpoint) + case wire.BloomUpdateP2PubkeyOnly: + class := txscript.GetScriptClass(pkScript) + if class == txscript.PubKeyTy || class == txscript.MultiSigTy { + outpoint := wire.NewOutPoint(outHash, outIdx) + bf.addOutPoint(outpoint) + } + } +} + +// matchTxAndUpdate returns true if the bloom filter matches data within the +// passed transaction, otherwise false is returned. If the filter does match +// the passed transaction, it will also update the filter depending on the bloom +// update flags set via the loaded filter if needed. +// +// This function MUST be called with the filter lock held. +func (bf *Filter) matchTxAndUpdate(tx *btcutil.Tx) bool { + // Check if the filter matches the hash of the transaction. + // This is useful for finding transactions when they appear in a block. + matched := bf.matches(tx.Hash()[:]) + + // Check if the filter matches any data elements in the public key + // scripts of any of the outputs. When it does, add the outpoint that + // matched so transactions which spend from the matched transaction are + // also included in the filter. This removes the burden of updating the + // filter for this scenario from the client. It is also more efficient + // on the network since it avoids the need for another filteradd message + // from the client and avoids some potential races that could otherwise + // occur. + for i, txOut := range tx.MsgTx().TxOut { + pushedData, err := txscript.PushedData(txOut.PkScript) + if err != nil { + continue + } + + for _, data := range pushedData { + if !bf.matches(data) { + continue + } + + matched = true + bf.maybeAddOutpoint(txOut.PkScript, tx.Hash(), uint32(i)) + break + } + } + + // Nothing more to do if a match has already been made. + if matched { + return true + } + + // At this point, the transaction and none of the data elements in the + // public key scripts of its outputs matched. + + // Check if the filter matches any outpoints this transaction spends or + // any data elements in the signature scripts of any of the inputs. + for _, txin := range tx.MsgTx().TxIn { + if bf.matchesOutPoint(&txin.PreviousOutPoint) { + return true + } + + pushedData, err := txscript.PushedData(txin.SignatureScript) + if err != nil { + continue + } + for _, data := range pushedData { + if bf.matches(data) { + return true + } + } + } + + return false +} + +// MatchTxAndUpdate returns true if the bloom filter matches data within the +// passed transaction, otherwise false is returned. If the filter does match +// the passed transaction, it will also update the filter depending on the bloom +// update flags set via the loaded filter if needed. +// +// This function is safe for concurrent access. +func (bf *Filter) MatchTxAndUpdate(tx *btcutil.Tx) bool { + bf.mtx.Lock() + match := bf.matchTxAndUpdate(tx) + bf.mtx.Unlock() + return match +} + +// MsgFilterLoad returns the underlying wire.MsgFilterLoad for the bloom +// filter. +// +// This function is safe for concurrent access. +func (bf *Filter) MsgFilterLoad() *wire.MsgFilterLoad { + bf.mtx.Lock() + msg := bf.msgFilterLoad + bf.mtx.Unlock() + return msg +} diff --git a/btcutil/bloom/filter_test.go b/btcutil/bloom/filter_test.go new file mode 100644 index 0000000000..1811dbf57e --- /dev/null +++ b/btcutil/bloom/filter_test.go @@ -0,0 +1,660 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bloom_test + +import ( + "bytes" + "encoding/hex" + "testing" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/bloom" +) + +// TestFilterLarge ensures a maximum sized filter can be created. +func TestFilterLarge(t *testing.T) { + f := bloom.NewFilter(100000000, 0, 0.01, wire.BloomUpdateNone) + if len(f.MsgFilterLoad().Filter) > wire.MaxFilterLoadFilterSize { + t.Errorf("TestFilterLarge test failed: %d > %d", + len(f.MsgFilterLoad().Filter), wire.MaxFilterLoadFilterSize) + } +} + +// TestFilterLoad ensures loading and unloading of a filter pass. +func TestFilterLoad(t *testing.T) { + merkle := wire.MsgFilterLoad{} + + f := bloom.LoadFilter(&merkle) + if !f.IsLoaded() { + t.Errorf("TestFilterLoad IsLoaded test failed: want %v got %v", + true, !f.IsLoaded()) + return + } + f.Unload() + if f.IsLoaded() { + t.Errorf("TestFilterLoad IsLoaded test failed: want %v got %v", + f.IsLoaded(), false) + return + } +} + +// TestFilterInsert ensures inserting data into the filter causes that data +// to be matched and the resulting serialized MsgFilterLoad is the expected +// value. +func TestFilterInsert(t *testing.T) { + var tests = []struct { + hex string + insert bool + }{ + {"99108ad8ed9bb6274d3980bab5a85c048f0950c8", true}, + {"19108ad8ed9bb6274d3980bab5a85c048f0950c8", false}, + {"b5a2c786d9ef4658287ced5914b37a1b4aa32eee", true}, + {"b9300670b4c5366e95b2699e8b18bc75e5f729c5", true}, + } + + f := bloom.NewFilter(3, 0, 0.01, wire.BloomUpdateAll) + + for i, test := range tests { + data, err := hex.DecodeString(test.hex) + if err != nil { + t.Errorf("TestFilterInsert DecodeString failed: %v\n", err) + return + } + if test.insert { + f.Add(data) + } + + result := f.Matches(data) + if test.insert != result { + t.Errorf("TestFilterInsert Matches test #%d failure: got %v want %v\n", + i, result, test.insert) + return + } + } + + want, err := hex.DecodeString("03614e9b050000000000000001") + if err != nil { + t.Errorf("TestFilterInsert DecodeString failed: %v\n", err) + return + } + + got := bytes.NewBuffer(nil) + err = f.MsgFilterLoad().BtcEncode(got, wire.ProtocolVersion, wire.LatestEncoding) + if err != nil { + t.Errorf("TestFilterInsert BtcDecode failed: %v\n", err) + return + } + + if !bytes.Equal(got.Bytes(), want) { + t.Errorf("TestFilterInsert failure: got %v want %v\n", + got.Bytes(), want) + return + } +} + +// TestFilterFPRange checks that new filters made with out of range +// false positive targets result in either max or min false positive rates. +func TestFilterFPRange(t *testing.T) { + tests := []struct { + name string + hash string + want string + filter *bloom.Filter + }{ + { + name: "fprates > 1 should be clipped at 1", + hash: "02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041", + want: "00000000000000000001", + filter: bloom.NewFilter(1, 0, 20.9999999769, wire.BloomUpdateAll), + }, + { + name: "fprates less than 1e-9 should be clipped at min", + hash: "02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041", + want: "0566d97a91a91b0000000000000001", + filter: bloom.NewFilter(1, 0, 0, wire.BloomUpdateAll), + }, + { + name: "negative fprates should be clipped at min", + hash: "02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041", + want: "0566d97a91a91b0000000000000001", + filter: bloom.NewFilter(1, 0, -1, wire.BloomUpdateAll), + }, + } + + for _, test := range tests { + // Convert test input to appropriate types. + hash, err := chainhash.NewHashFromStr(test.hash) + if err != nil { + t.Errorf("NewHashFromStr unexpected error: %v", err) + continue + } + want, err := hex.DecodeString(test.want) + if err != nil { + t.Errorf("DecodeString unexpected error: %v\n", err) + continue + } + + // Add the test hash to the bloom filter and ensure the + // filter serializes to the expected bytes. + f := test.filter + f.AddHash(hash) + got := bytes.NewBuffer(nil) + err = f.MsgFilterLoad().BtcEncode(got, wire.ProtocolVersion, wire.LatestEncoding) + if err != nil { + t.Errorf("BtcDecode unexpected error: %v\n", err) + continue + } + if !bytes.Equal(got.Bytes(), want) { + t.Errorf("serialized filter mismatch: got %x want %x\n", + got.Bytes(), want) + continue + } + } +} + +// TestFilterInsert ensures inserting data into the filter with a tweak causes +// that data to be matched and the resulting serialized MsgFilterLoad is the +// expected value. +func TestFilterInsertWithTweak(t *testing.T) { + var tests = []struct { + hex string + insert bool + }{ + {"99108ad8ed9bb6274d3980bab5a85c048f0950c8", true}, + {"19108ad8ed9bb6274d3980bab5a85c048f0950c8", false}, + {"b5a2c786d9ef4658287ced5914b37a1b4aa32eee", true}, + {"b9300670b4c5366e95b2699e8b18bc75e5f729c5", true}, + } + + f := bloom.NewFilter(3, 2147483649, 0.01, wire.BloomUpdateAll) + + for i, test := range tests { + data, err := hex.DecodeString(test.hex) + if err != nil { + t.Errorf("TestFilterInsertWithTweak DecodeString failed: %v\n", err) + return + } + if test.insert { + f.Add(data) + } + + result := f.Matches(data) + if test.insert != result { + t.Errorf("TestFilterInsertWithTweak Matches test #%d failure: got %v want %v\n", + i, result, test.insert) + return + } + } + + want, err := hex.DecodeString("03ce4299050000000100008001") + if err != nil { + t.Errorf("TestFilterInsertWithTweak DecodeString failed: %v\n", err) + return + } + got := bytes.NewBuffer(nil) + err = f.MsgFilterLoad().BtcEncode(got, wire.ProtocolVersion, wire.LatestEncoding) + if err != nil { + t.Errorf("TestFilterInsertWithTweak BtcDecode failed: %v\n", err) + return + } + + if !bytes.Equal(got.Bytes(), want) { + t.Errorf("TestFilterInsertWithTweak failure: got %v want %v\n", + got.Bytes(), want) + return + } +} + +// TestFilterInsertKey ensures inserting public keys and addresses works as +// expected. +func TestFilterInsertKey(t *testing.T) { + secret := "5Kg1gnAjaLfKiwhhPpGS3QfRg2m6awQvaj98JCZBZQ5SuS2F15C" + + wif, err := btcutil.DecodeWIF(secret) + if err != nil { + t.Errorf("TestFilterInsertKey DecodeWIF failed: %v", err) + return + } + + f := bloom.NewFilter(2, 0, 0.001, wire.BloomUpdateAll) + f.Add(wif.SerializePubKey()) + f.Add(btcutil.Hash160(wif.SerializePubKey())) + + want, err := hex.DecodeString("038fc16b080000000000000001") + if err != nil { + t.Errorf("TestFilterInsertWithTweak DecodeString failed: %v\n", err) + return + } + got := bytes.NewBuffer(nil) + err = f.MsgFilterLoad().BtcEncode(got, wire.ProtocolVersion, wire.LatestEncoding) + if err != nil { + t.Errorf("TestFilterInsertWithTweak BtcDecode failed: %v\n", err) + return + } + + if !bytes.Equal(got.Bytes(), want) { + t.Errorf("TestFilterInsertWithTweak failure: got %v want %v\n", + got.Bytes(), want) + return + } +} + +func TestFilterBloomMatch(t *testing.T) { + str := "01000000010b26e9b7735eb6aabdf358bab62f9816a21ba9ebdb719d5299e" + + "88607d722c190000000008b4830450220070aca44506c5cef3a16ed519d7" + + "c3c39f8aab192c4e1c90d065f37b8a4af6141022100a8e160b856c2d43d2" + + "7d8fba71e5aef6405b8643ac4cb7cb3c462aced7f14711a0141046d11fee" + + "51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95c9a40ac5e" + + "eef87e10a5cd336c19a84565f80fa6c547957b7700ff4dfbdefe76036c33" + + "9ffffffff021bff3d11000000001976a91404943fdd508053c75000106d3" + + "bc6e2754dbcff1988ac2f15de00000000001976a914a266436d296554760" + + "8b9e15d9032a7b9d64fa43188ac00000000" + strBytes, err := hex.DecodeString(str) + if err != nil { + t.Errorf("TestFilterBloomMatch DecodeString failure: %v", err) + return + } + tx, err := btcutil.NewTxFromBytes(strBytes) + if err != nil { + t.Errorf("TestFilterBloomMatch NewTxFromBytes failure: %v", err) + return + } + spendingTxBytes := []byte{0x01, 0x00, 0x00, 0x00, 0x01, 0x6b, 0xff, 0x7f, + 0xcd, 0x4f, 0x85, 0x65, 0xef, 0x40, 0x6d, 0xd5, 0xd6, + 0x3d, 0x4f, 0xf9, 0x4f, 0x31, 0x8f, 0xe8, 0x20, 0x27, + 0xfd, 0x4d, 0xc4, 0x51, 0xb0, 0x44, 0x74, 0x01, 0x9f, + 0x74, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x8c, 0x49, 0x30, + 0x46, 0x02, 0x21, 0x00, 0xda, 0x0d, 0xc6, 0xae, 0xce, + 0xfe, 0x1e, 0x06, 0xef, 0xdf, 0x05, 0x77, 0x37, 0x57, + 0xde, 0xb1, 0x68, 0x82, 0x09, 0x30, 0xe3, 0xb0, 0xd0, + 0x3f, 0x46, 0xf5, 0xfc, 0xf1, 0x50, 0xbf, 0x99, 0x0c, + 0x02, 0x21, 0x00, 0xd2, 0x5b, 0x5c, 0x87, 0x04, 0x00, + 0x76, 0xe4, 0xf2, 0x53, 0xf8, 0x26, 0x2e, 0x76, 0x3e, + 0x2d, 0xd5, 0x1e, 0x7f, 0xf0, 0xbe, 0x15, 0x77, 0x27, + 0xc4, 0xbc, 0x42, 0x80, 0x7f, 0x17, 0xbd, 0x39, 0x01, + 0x41, 0x04, 0xe6, 0xc2, 0x6e, 0xf6, 0x7d, 0xc6, 0x10, + 0xd2, 0xcd, 0x19, 0x24, 0x84, 0x78, 0x9a, 0x6c, 0xf9, + 0xae, 0xa9, 0x93, 0x0b, 0x94, 0x4b, 0x7e, 0x2d, 0xb5, + 0x34, 0x2b, 0x9d, 0x9e, 0x5b, 0x9f, 0xf7, 0x9a, 0xff, + 0x9a, 0x2e, 0xe1, 0x97, 0x8d, 0xd7, 0xfd, 0x01, 0xdf, + 0xc5, 0x22, 0xee, 0x02, 0x28, 0x3d, 0x3b, 0x06, 0xa9, + 0xd0, 0x3a, 0xcf, 0x80, 0x96, 0x96, 0x8d, 0x7d, 0xbb, + 0x0f, 0x91, 0x78, 0xff, 0xff, 0xff, 0xff, 0x02, 0x8b, + 0xa7, 0x94, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x19, 0x76, + 0xa9, 0x14, 0xba, 0xde, 0xec, 0xfd, 0xef, 0x05, 0x07, + 0x24, 0x7f, 0xc8, 0xf7, 0x42, 0x41, 0xd7, 0x3b, 0xc0, + 0x39, 0x97, 0x2d, 0x7b, 0x88, 0xac, 0x40, 0x94, 0xa8, + 0x02, 0x00, 0x00, 0x00, 0x00, 0x19, 0x76, 0xa9, 0x14, + 0xc1, 0x09, 0x32, 0x48, 0x3f, 0xec, 0x93, 0xed, 0x51, + 0xf5, 0xfe, 0x95, 0xe7, 0x25, 0x59, 0xf2, 0xcc, 0x70, + 0x43, 0xf9, 0x88, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00} + + spendingTx, err := btcutil.NewTxFromBytes(spendingTxBytes) + if err != nil { + t.Errorf("TestFilterBloomMatch NewTxFromBytes failure: %v", err) + return + } + + f := bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr := "b4749f017444b051c44dfd2720e88f314ff94f3dd6d56d40ef65854fcd7fff6b" + hash, err := chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch NewHashFromStr failed: %v\n", err) + return + } + f.AddHash(hash) + if !f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch didn't match hash %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "6bff7fcd4f8565ef406dd5d63d4ff94f318fe82027fd4dc451b04474019f74b4" + hashBytes, err := hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch DecodeString failed: %v\n", err) + return + } + f.Add(hashBytes) + if !f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch didn't match hash %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "30450220070aca44506c5cef3a16ed519d7c3c39f8aab192c4e1c90d065" + + "f37b8a4af6141022100a8e160b856c2d43d27d8fba71e5aef6405b8643" + + "ac4cb7cb3c462aced7f14711a01" + hashBytes, err = hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch DecodeString failed: %v\n", err) + return + } + f.Add(hashBytes) + if !f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch didn't match input signature %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "046d11fee51b0e60666d5049a9101a72741df480b96ee26488a4d3466b95" + + "c9a40ac5eeef87e10a5cd336c19a84565f80fa6c547957b7700ff4dfbdefe" + + "76036c339" + hashBytes, err = hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch DecodeString failed: %v\n", err) + return + } + f.Add(hashBytes) + if !f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch didn't match input pubkey %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "04943fdd508053c75000106d3bc6e2754dbcff19" + hashBytes, err = hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch DecodeString failed: %v\n", err) + return + } + f.Add(hashBytes) + if !f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch didn't match output address %s", inputStr) + } + if !f.MatchTxAndUpdate(spendingTx) { + t.Errorf("TestFilterBloomMatch spendingTx didn't match output address %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "a266436d2965547608b9e15d9032a7b9d64fa431" + hashBytes, err = hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch DecodeString failed: %v\n", err) + return + } + f.Add(hashBytes) + if !f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch didn't match output address %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "90c122d70786e899529d71dbeba91ba216982fb6ba58f3bdaab65e73b7e9260b" + hash, err = chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch NewHashFromStr failed: %v\n", err) + return + } + outpoint := wire.NewOutPoint(hash, 0) + f.AddOutPoint(outpoint) + if !f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch didn't match outpoint %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "00000009e784f32f62ef849763d4f45b98e07ba658647343b915ff832b110436" + hash, err = chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch NewHashFromStr failed: %v\n", err) + return + } + f.AddHash(hash) + if f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch matched hash %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "0000006d2965547608b9e15d9032a7b9d64fa431" + hashBytes, err = hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch DecodeString failed: %v\n", err) + return + } + f.Add(hashBytes) + if f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch matched address %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "90c122d70786e899529d71dbeba91ba216982fb6ba58f3bdaab65e73b7e9260b" + hash, err = chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch NewHashFromStr failed: %v\n", err) + return + } + outpoint = wire.NewOutPoint(hash, 1) + f.AddOutPoint(outpoint) + if f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch matched outpoint %s", inputStr) + } + + f = bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + inputStr = "000000d70786e899529d71dbeba91ba216982fb6ba58f3bdaab65e73b7e9260b" + hash, err = chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestFilterBloomMatch NewHashFromStr failed: %v\n", err) + return + } + outpoint = wire.NewOutPoint(hash, 0) + f.AddOutPoint(outpoint) + if f.MatchTxAndUpdate(tx) { + t.Errorf("TestFilterBloomMatch matched outpoint %s", inputStr) + } +} + +func TestFilterInsertUpdateNone(t *testing.T) { + f := bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateNone) + + // Add the generation pubkey + inputStr := "04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c" + + "876f2c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a" + + "2252247d97a46a91" + inputBytes, err := hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterInsertUpdateNone DecodeString failed: %v", err) + return + } + f.Add(inputBytes) + + // Add the output address for the 4th transaction + inputStr = "b6efd80d99179f4f4ff6f4dd0a007d018c385d21" + inputBytes, err = hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterInsertUpdateNone DecodeString failed: %v", err) + return + } + f.Add(inputBytes) + + inputStr = "147caa76786596590baa4e98f5d9f48b86c7765e489f7a6ff3360fe5c674360b" + hash, err := chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestFilterInsertUpdateNone NewHashFromStr failed: %v", err) + return + } + outpoint := wire.NewOutPoint(hash, 0) + + if f.MatchesOutPoint(outpoint) { + t.Errorf("TestFilterInsertUpdateNone matched outpoint %s", inputStr) + return + } + + inputStr = "02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041" + hash, err = chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestFilterInsertUpdateNone NewHashFromStr failed: %v", err) + return + } + outpoint = wire.NewOutPoint(hash, 0) + + if f.MatchesOutPoint(outpoint) { + t.Errorf("TestFilterInsertUpdateNone matched outpoint %s", inputStr) + return + } +} + +func TestFilterInsertP2PubKeyOnly(t *testing.T) { + blockStr := "0100000082bb869cf3a793432a66e826e05a6fc37469f8efb7421dc" + + "880670100000000007f16c5962e8bd963659c793ce370d95f093bc7e367" + + "117b3c30c1f8fdd0d9728776381b4d4c86041b554b85290701000000010" + + "00000000000000000000000000000000000000000000000000000000000" + + "0000ffffffff07044c86041b0136ffffffff0100f2052a0100000043410" + + "4eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c876f2" + + "c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a22522" + + "47d97a46a91ac000000000100000001bcad20a6a29827d1424f08989255" + + "120bf7f3e9e3cdaaa6bb31b0737fe048724300000000494830450220356" + + "e834b046cadc0f8ebb5a8a017b02de59c86305403dad52cd77b55af062e" + + "a10221009253cd6c119d4729b77c978e1e2aa19f5ea6e0e52b3f16e32fa" + + "608cd5bab753901ffffffff02008d380c010000001976a9142b4b8072ec" + + "bba129b6453c63e129e643207249ca88ac0065cd1d000000001976a9141" + + "b8dd13b994bcfc787b32aeadf58ccb3615cbd5488ac0000000001000000" + + "03fdacf9b3eb077412e7a968d2e4f11b9a9dee312d666187ed77ee7d26a" + + "f16cb0b000000008c493046022100ea1608e70911ca0de5af51ba57ad23" + + "b9a51db8d28f82c53563c56a05c20f5a87022100a8bdc8b4a8acc8634c6" + + "b420410150775eb7f2474f5615f7fccd65af30f310fbf01410465fdf49e" + + "29b06b9a1582287b6279014f834edc317695d125ef623c1cc3aaece245b" + + "d69fcad7508666e9c74a49dc9056d5fc14338ef38118dc4afae5fe2c585" + + "caffffffff309e1913634ecb50f3c4f83e96e70b2df071b497b8973a3e7" + + "5429df397b5af83000000004948304502202bdb79c596a9ffc24e96f438" + + "6199aba386e9bc7b6071516e2b51dda942b3a1ed022100c53a857e76b72" + + "4fc14d45311eac5019650d415c3abb5428f3aae16d8e69bec2301ffffff" + + "ff2089e33491695080c9edc18a428f7d834db5b6d372df13ce2b1b0e0cb" + + "cb1e6c10000000049483045022100d4ce67c5896ee251c810ac1ff9cecc" + + "d328b497c8f553ab6e08431e7d40bad6b5022033119c0c2b7d792d31f11" + + "87779c7bd95aefd93d90a715586d73801d9b47471c601ffffffff010071" + + "4460030000001976a914c7b55141d097ea5df7a0ed330cf794376e53ec8" + + "d88ac0000000001000000045bf0e214aa4069a3e792ecee1e1bf0c1d397" + + "cde8dd08138f4b72a00681743447000000008b48304502200c45de8c4f3" + + "e2c1821f2fc878cba97b1e6f8807d94930713aa1c86a67b9bf1e4022100" + + "8581abfef2e30f957815fc89978423746b2086375ca8ecf359c85c2a5b7" + + "c88ad01410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf64852" + + "61c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270efb1d" + + "3ae37079b794a92d7ec95ffffffffd669f7d7958d40fc59d2253d88e0f2" + + "48e29b599c80bbcec344a83dda5f9aa72c000000008a473044022078124" + + "c8beeaa825f9e0b30bff96e564dd859432f2d0cb3b72d3d5d93d38d7e93" + + "0220691d233b6c0f995be5acb03d70a7f7a65b6bc9bdd426260f38a1346" + + "669507a3601410462bb73f76ca0994fcb8b4271e6fb7561f5c0f9ca0cf6" + + "485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f4d87270e" + + "fb1d3ae37079b794a92d7ec95fffffffff878af0d93f5229a68166cf051" + + "fd372bb7a537232946e0a46f53636b4dafdaa4000000008c49304602210" + + "0c717d1714551663f69c3c5759bdbb3a0fcd3fab023abc0e522fe6440de" + + "35d8290221008d9cbe25bffc44af2b18e81c58eb37293fd7fe1c2e7b46f" + + "c37ee8c96c50ab1e201410462bb73f76ca0994fcb8b4271e6fb7561f5c0" + + "f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018ffd6238f" + + "4d87270efb1d3ae37079b794a92d7ec95ffffffff27f2b668859cd7f2f8" + + "94aa0fd2d9e60963bcd07c88973f425f999b8cbfd7a1e2000000008c493" + + "046022100e00847147cbf517bcc2f502f3ddc6d284358d102ed20d47a8a" + + "a788a62f0db780022100d17b2d6fa84dcaf1c95d88d7e7c30385aecf415" + + "588d749afd3ec81f6022cecd701410462bb73f76ca0994fcb8b4271e6fb" + + "7561f5c0f9ca0cf6485261c4a0dc894f4ab844c6cdfb97cd0b60ffb5018" + + "ffd6238f4d87270efb1d3ae37079b794a92d7ec95ffffffff0100c817a8" + + "040000001976a914b6efd80d99179f4f4ff6f4dd0a007d018c385d2188a" + + "c000000000100000001834537b2f1ce8ef9373a258e10545ce5a50b758d" + + "f616cd4356e0032554ebd3c4000000008b483045022100e68f422dd7c34" + + "fdce11eeb4509ddae38201773dd62f284e8aa9d96f85099d0b002202243" + + "bd399ff96b649a0fad05fa759d6a882f0af8c90cf7632c2840c29070aec" + + "20141045e58067e815c2f464c6a2a15f987758374203895710c2d452442" + + "e28496ff38ba8f5fd901dc20e29e88477167fe4fc299bf818fd0d9e1632" + + "d467b2a3d9503b1aaffffffff0280d7e636030000001976a914f34c3e10" + + "eb387efe872acb614c89e78bfca7815d88ac404b4c00000000001976a91" + + "4a84e272933aaf87e1715d7786c51dfaeb5b65a6f88ac00000000010000" + + "000143ac81c8e6f6ef307dfe17f3d906d999e23e0189fda838c5510d850" + + "927e03ae7000000008c4930460221009c87c344760a64cb8ae6685a3eec" + + "2c1ac1bed5b88c87de51acd0e124f266c16602210082d07c037359c3a25" + + "7b5c63ebd90f5a5edf97b2ac1c434b08ca998839f346dd40141040ba7e5" + + "21fa7946d12edbb1d1e95a15c34bd4398195e86433c92b431cd315f455f" + + "e30032ede69cad9d1e1ed6c3c4ec0dbfced53438c625462afb792dcb098" + + "544bffffffff0240420f00000000001976a9144676d1b820d63ec272f19" + + "00d59d43bc6463d96f888ac40420f00000000001976a914648d04341d00" + + "d7968b3405c034adc38d4d8fb9bd88ac00000000010000000248cc91750" + + "1ea5c55f4a8d2009c0567c40cfe037c2e71af017d0a452ff705e3f10000" + + "00008b483045022100bf5fdc86dc5f08a5d5c8e43a8c9d5b1ed8c65562e" + + "280007b52b133021acd9acc02205e325d613e555f772802bf413d36ba80" + + "7892ed1a690a77811d3033b3de226e0a01410429fa713b124484cb2bd7b" + + "5557b2c0b9df7b2b1fee61825eadc5ae6c37a9920d38bfccdc7dc3cb0c4" + + "7d7b173dbc9db8d37db0a33ae487982c59c6f8606e9d1791ffffffff41e" + + "d70551dd7e841883ab8f0b16bf04176b7d1480e4f0af9f3d4c3595768d0" + + "68000000008b4830450221008513ad65187b903aed1102d1d0c47688127" + + "658c51106753fed0151ce9c16b80902201432b9ebcb87bd04ceb2de6603" + + "5fbbaf4bf8b00d1cfe41f1a1f7338f9ad79d210141049d4cf80125bf50b" + + "e1709f718c07ad15d0fc612b7da1f5570dddc35f2a352f0f27c978b0682" + + "0edca9ef982c35fda2d255afba340068c5035552368bc7200c1488fffff" + + "fff0100093d00000000001976a9148edb68822f1ad580b043c7b3df2e40" + + "0f8699eb4888ac00000000" + blockBytes, err := hex.DecodeString(blockStr) + if err != nil { + t.Errorf("TestFilterInsertP2PubKeyOnly DecodeString failed: %v", err) + return + } + block, err := btcutil.NewBlockFromBytes(blockBytes) + if err != nil { + t.Errorf("TestFilterInsertP2PubKeyOnly NewBlockFromBytes failed: %v", err) + return + } + + f := bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateP2PubkeyOnly) + + // Generation pubkey + inputStr := "04eaafc2314def4ca98ac970241bcab022b9c1e1f4ea423a20f134c" + + "876f2c01ec0f0dd5b2e86e7168cefe0d81113c3807420ce13ad1357231a" + + "2252247d97a46a91" + inputBytes, err := hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterInsertP2PubKeyOnly DecodeString failed: %v", err) + return + } + f.Add(inputBytes) + + // Output address of 4th transaction + inputStr = "b6efd80d99179f4f4ff6f4dd0a007d018c385d21" + inputBytes, err = hex.DecodeString(inputStr) + if err != nil { + t.Errorf("TestFilterInsertP2PubKeyOnly DecodeString failed: %v", err) + return + } + f.Add(inputBytes) + + // Ignore return value -- this is just used to update the filter. + _, _ = bloom.NewMerkleBlock(block, f) + + // We should match the generation pubkey + inputStr = "147caa76786596590baa4e98f5d9f48b86c7765e489f7a6ff3360fe5c674360b" + hash, err := chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestMerkleBlockP2PubKeyOnly NewHashFromStr failed: %v", err) + return + } + outpoint := wire.NewOutPoint(hash, 0) + if !f.MatchesOutPoint(outpoint) { + t.Errorf("TestMerkleBlockP2PubKeyOnly didn't match the generation "+ + "outpoint %s", inputStr) + return + } + + // We should not match the 4th transaction, which is not p2pk + inputStr = "02981fa052f0481dbc5868f4fc2166035a10f27a03cfd2de67326471df5bc041" + hash, err = chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestMerkleBlockP2PubKeyOnly NewHashFromStr failed: %v", err) + return + } + outpoint = wire.NewOutPoint(hash, 0) + if f.MatchesOutPoint(outpoint) { + t.Errorf("TestMerkleBlockP2PubKeyOnly matched outpoint %s", inputStr) + return + } +} + +func TestFilterReload(t *testing.T) { + f := bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + + bFilter := bloom.LoadFilter(f.MsgFilterLoad()) + if bFilter.MsgFilterLoad() == nil { + t.Errorf("TestFilterReload LoadFilter test failed") + return + } + bFilter.Reload(nil) + + if bFilter.MsgFilterLoad() != nil { + t.Errorf("TestFilterReload Reload test failed") + } +} diff --git a/btcutil/bloom/merkleblock.go b/btcutil/bloom/merkleblock.go new file mode 100644 index 0000000000..101a8f9194 --- /dev/null +++ b/btcutil/bloom/merkleblock.go @@ -0,0 +1,125 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bloom + +import ( + "github.com/btcsuite/btcd/blockchain" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" +) + +// merkleBlock is used to house intermediate information needed to generate a +// wire.MsgMerkleBlock according to a filter. +type merkleBlock struct { + numTx uint32 + allHashes []*chainhash.Hash + finalHashes []*chainhash.Hash + matchedBits []byte + bits []byte +} + +// calcTreeWidth calculates and returns the the number of nodes (width) or a +// merkle tree at the given depth-first height. +func (m *merkleBlock) calcTreeWidth(height uint32) uint32 { + return (m.numTx + (1 << height) - 1) >> height +} + +// calcHash returns the hash for a sub-tree given a depth-first height and +// node position. +func (m *merkleBlock) calcHash(height, pos uint32) *chainhash.Hash { + if height == 0 { + return m.allHashes[pos] + } + + var right *chainhash.Hash + left := m.calcHash(height-1, pos*2) + if pos*2+1 < m.calcTreeWidth(height-1) { + right = m.calcHash(height-1, pos*2+1) + } else { + right = left + } + return blockchain.HashMerkleBranches(left, right) +} + +// traverseAndBuild builds a partial merkle tree using a recursive depth-first +// approach. As it calculates the hashes, it also saves whether or not each +// node is a parent node and a list of final hashes to be included in the +// merkle block. +func (m *merkleBlock) traverseAndBuild(height, pos uint32) { + // Determine whether this node is a parent of a matched node. + var isParent byte + for i := pos << height; i < (pos+1)< 1 { + height++ + } + + // Build the depth-first partial merkle tree. + mBlock.traverseAndBuild(height, 0) + + // Create and return the merkle block. + msgMerkleBlock := wire.MsgMerkleBlock{ + Header: block.MsgBlock().Header, + Transactions: mBlock.numTx, + Hashes: make([]*chainhash.Hash, 0, len(mBlock.finalHashes)), + Flags: make([]byte, (len(mBlock.bits)+7)/8), + } + for _, hash := range mBlock.finalHashes { + _ = msgMerkleBlock.AddTxHash(hash) + } + for i := uint32(0); i < uint32(len(mBlock.bits)); i++ { + msgMerkleBlock.Flags[i/8] |= mBlock.bits[i] << (i % 8) + } + return &msgMerkleBlock, matchedIndices +} diff --git a/btcutil/bloom/merkleblock_test.go b/btcutil/bloom/merkleblock_test.go new file mode 100644 index 0000000000..15e21a4bb7 --- /dev/null +++ b/btcutil/bloom/merkleblock_test.go @@ -0,0 +1,74 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bloom_test + +import ( + "bytes" + "encoding/hex" + "testing" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/bloom" +) + +func TestMerkleBlock3(t *testing.T) { + blockStr := "0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b" + + "4b8b0000000000000b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdc" + + "c96b2c3ff60abe184f196367291b4d4c86041b8fa45d630101000000010" + + "00000000000000000000000000000000000000000000000000000000000" + + "0000ffffffff08044c86041b020a02ffffffff0100f2052a01000000434" + + "104ecd3229b0571c3be876feaac0442a9f13c5a572742927af1dc623353" + + "ecf8c202225f64868137a18cdd85cbbb4c74fbccfd4f49639cf1bdc94a5" + + "672bb15ad5d4cac00000000" + blockBytes, err := hex.DecodeString(blockStr) + if err != nil { + t.Errorf("TestMerkleBlock3 DecodeString failed: %v", err) + return + } + blk, err := btcutil.NewBlockFromBytes(blockBytes) + if err != nil { + t.Errorf("TestMerkleBlock3 NewBlockFromBytes failed: %v", err) + return + } + + f := bloom.NewFilter(10, 0, 0.000001, wire.BloomUpdateAll) + + inputStr := "63194f18be0af63f2c6bc9dc0f777cbefed3d9415c4af83f3ee3a3d669c00cb5" + hash, err := chainhash.NewHashFromStr(inputStr) + if err != nil { + t.Errorf("TestMerkleBlock3 NewHashFromStr failed: %v", err) + return + } + + f.AddHash(hash) + + mBlock, _ := bloom.NewMerkleBlock(blk, f) + + wantStr := "0100000079cda856b143d9db2c1caff01d1aecc8630d30625d10e8b4" + + "b8b0000000000000b50cc069d6a3e33e3ff84a5c41d9d3febe7c770fdcc" + + "96b2c3ff60abe184f196367291b4d4c86041b8fa45d630100000001b50c" + + "c069d6a3e33e3ff84a5c41d9d3febe7c770fdcc96b2c3ff60abe184f196" + + "30101" + want, err := hex.DecodeString(wantStr) + if err != nil { + t.Errorf("TestMerkleBlock3 DecodeString failed: %v", err) + return + } + + got := bytes.NewBuffer(nil) + err = mBlock.BtcEncode(got, wire.ProtocolVersion, wire.LatestEncoding) + if err != nil { + t.Errorf("TestMerkleBlock3 BtcEncode failed: %v", err) + return + } + + if !bytes.Equal(want, got.Bytes()) { + t.Errorf("TestMerkleBlock3 failed merkle block comparison: "+ + "got %v want %v", got.Bytes(), want) + return + } +} diff --git a/btcutil/bloom/murmurhash3.go b/btcutil/bloom/murmurhash3.go new file mode 100644 index 0000000000..6bb562ecba --- /dev/null +++ b/btcutil/bloom/murmurhash3.go @@ -0,0 +1,72 @@ +// Copyright (c) 2013, 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bloom + +import ( + "encoding/binary" +) + +// The following constants are used by the MurmurHash3 algorithm. +const ( + murmurC1 = 0xcc9e2d51 + murmurC2 = 0x1b873593 + murmurR1 = 15 + murmurR2 = 13 + murmurM = 5 + murmurN = 0xe6546b64 +) + +// MurmurHash3 implements a non-cryptographic hash function using the +// MurmurHash3 algorithm. This implementation yields a 32-bit hash value which +// is suitable for general hash-based lookups. The seed can be used to +// effectively randomize the hash function. This makes it ideal for use in +// bloom filters which need multiple independent hash functions. +func MurmurHash3(seed uint32, data []byte) uint32 { + dataLen := uint32(len(data)) + hash := seed + k := uint32(0) + numBlocks := dataLen / 4 + + // Calculate the hash in 4-byte chunks. + for i := uint32(0); i < numBlocks; i++ { + k = binary.LittleEndian.Uint32(data[i*4:]) + k *= murmurC1 + k = (k << murmurR1) | (k >> (32 - murmurR1)) + k *= murmurC2 + + hash ^= k + hash = (hash << murmurR2) | (hash >> (32 - murmurR2)) + hash = hash*murmurM + murmurN + } + + // Handle remaining bytes. + tailIdx := numBlocks * 4 + k = 0 + + switch dataLen & 3 { + case 3: + k ^= uint32(data[tailIdx+2]) << 16 + fallthrough + case 2: + k ^= uint32(data[tailIdx+1]) << 8 + fallthrough + case 1: + k ^= uint32(data[tailIdx]) + k *= murmurC1 + k = (k << murmurR1) | (k >> (32 - murmurR1)) + k *= murmurC2 + hash ^= k + } + + // Finalization. + hash ^= dataLen + hash ^= hash >> 16 + hash *= 0x85ebca6b + hash ^= hash >> 13 + hash *= 0xc2b2ae35 + hash ^= hash >> 16 + + return hash +} diff --git a/btcutil/bloom/murmurhash3_test.go b/btcutil/bloom/murmurhash3_test.go new file mode 100644 index 0000000000..9c102d5f8c --- /dev/null +++ b/btcutil/bloom/murmurhash3_test.go @@ -0,0 +1,45 @@ +// Copyright (c) 2013, 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package bloom_test + +import ( + "testing" + + "github.com/btcsuite/btcd/btcutil/bloom" +) + +// TestMurmurHash3 ensure the MurmurHash3 function produces the correct hash +// when given various seeds and data. +func TestMurmurHash3(t *testing.T) { + var tests = []struct { + seed uint32 + data []byte + out uint32 + }{ + {0x00000000, []byte{}, 0x00000000}, + {0xfba4c795, []byte{}, 0x6a396f08}, + {0xffffffff, []byte{}, 0x81f16f39}, + {0x00000000, []byte{0x00}, 0x514e28b7}, + {0xfba4c795, []byte{0x00}, 0xea3f0b17}, + {0x00000000, []byte{0xff}, 0xfd6cf10d}, + {0x00000000, []byte{0x00, 0x11}, 0x16c6b7ab}, + {0x00000000, []byte{0x00, 0x11, 0x22}, 0x8eb51c3d}, + {0x00000000, []byte{0x00, 0x11, 0x22, 0x33}, 0xb4471bf8}, + {0x00000000, []byte{0x00, 0x11, 0x22, 0x33, 0x44}, 0xe2301fa8}, + {0x00000000, []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55}, 0xfc2e4a15}, + {0x00000000, []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66}, 0xb074502c}, + {0x00000000, []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77}, 0x8034d2a0}, + {0x00000000, []byte{0x00, 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88}, 0xb4698def}, + } + + for i, test := range tests { + result := bloom.MurmurHash3(test.seed, test.data) + if result != test.out { + t.Errorf("MurmurHash3 test #%d failed: got %v want %v\n", + i, result, test.out) + continue + } + } +} diff --git a/btcutil/bloom/test_coverage.txt b/btcutil/bloom/test_coverage.txt new file mode 100644 index 0000000000..e503f26feb --- /dev/null +++ b/btcutil/bloom/test_coverage.txt @@ -0,0 +1,28 @@ + +github.com/conformal/btcutil/bloom/murmurhash3.go MurmurHash3 100.00% (31/31) +github.com/conformal/btcutil/bloom/merkleblock.go NewMerkleBlock 100.00% (19/19) +github.com/conformal/btcutil/bloom/merkleblock.go merkleBlock.traverseAndBuild 100.00% (10/10) +github.com/conformal/btcutil/bloom/merkleblock.go merkleBlock.calcHash 100.00% (8/8) +github.com/conformal/btcutil/bloom/filter.go Filter.maybeAddOutpoint 100.00% (7/7) +github.com/conformal/btcutil/bloom/filter.go Filter.addOutPoint 100.00% (4/4) +github.com/conformal/btcutil/bloom/filter.go Filter.IsLoaded 100.00% (4/4) +github.com/conformal/btcutil/bloom/filter.go Filter.MsgFilterLoad 100.00% (4/4) +github.com/conformal/btcutil/bloom/filter.go Filter.matchesOutPoint 100.00% (4/4) +github.com/conformal/btcutil/bloom/filter.go Filter.MatchesOutPoint 100.00% (4/4) +github.com/conformal/btcutil/bloom/filter.go Filter.MatchTxAndUpdate 100.00% (4/4) +github.com/conformal/btcutil/bloom/filter.go Filter.Matches 100.00% (4/4) +github.com/conformal/btcutil/bloom/filter.go Filter.Add 100.00% (3/3) +github.com/conformal/btcutil/bloom/filter.go Filter.Reload 100.00% (3/3) +github.com/conformal/btcutil/bloom/filter.go Filter.Unload 100.00% (3/3) +github.com/conformal/btcutil/bloom/filter.go Filter.AddShaHash 100.00% (3/3) +github.com/conformal/btcutil/bloom/filter.go Filter.AddOutPoint 100.00% (3/3) +github.com/conformal/btcutil/bloom/filter.go minUint32 100.00% (3/3) +github.com/conformal/btcutil/bloom/filter.go Filter.hash 100.00% (2/2) +github.com/conformal/btcutil/bloom/merkleblock.go merkleBlock.calcTreeWidth 100.00% (1/1) +github.com/conformal/btcutil/bloom/filter.go LoadFilter 100.00% (1/1) +github.com/conformal/btcutil/bloom/filter.go Filter.matchTxAndUpdate 91.30% (21/23) +github.com/conformal/btcutil/bloom/filter.go Filter.matches 85.71% (6/7) +github.com/conformal/btcutil/bloom/filter.go NewFilter 81.82% (9/11) +github.com/conformal/btcutil/bloom/filter.go Filter.add 80.00% (4/5) +github.com/conformal/btcutil/bloom ---------------------------- 96.49% (165/171) + diff --git a/btcutil/certgen.go b/btcutil/certgen.go new file mode 100644 index 0000000000..52e2d9cc95 --- /dev/null +++ b/btcutil/certgen.go @@ -0,0 +1,144 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "bytes" + "crypto/ecdsa" + "crypto/elliptic" + "crypto/rand" + _ "crypto/sha512" // Needed for RegisterHash in init + "crypto/x509" + "crypto/x509/pkix" + "encoding/pem" + "errors" + "fmt" + "math/big" + "net" + "os" + "time" +) + +// NewTLSCertPair returns a new PEM-encoded x.509 certificate pair +// based on a 521-bit ECDSA private key. The machine's local interface +// addresses and all variants of IPv4 and IPv6 localhost are included as +// valid IP addresses. +func NewTLSCertPair(organization string, validUntil time.Time, extraHosts []string) (cert, key []byte, err error) { + now := time.Now() + if validUntil.Before(now) { + return nil, nil, errors.New("validUntil would create an already-expired certificate") + } + + priv, err := ecdsa.GenerateKey(elliptic.P521(), rand.Reader) + if err != nil { + return nil, nil, err + } + + // end of ASN.1 time + endOfTime := time.Date(2049, 12, 31, 23, 59, 59, 0, time.UTC) + if validUntil.After(endOfTime) { + validUntil = endOfTime + } + + serialNumberLimit := new(big.Int).Lsh(big.NewInt(1), 128) + serialNumber, err := rand.Int(rand.Reader, serialNumberLimit) + if err != nil { + return nil, nil, fmt.Errorf("failed to generate serial number: %s", err) + } + + host, err := os.Hostname() + if err != nil { + return nil, nil, err + } + + ipAddresses := []net.IP{net.ParseIP("127.0.0.1"), net.ParseIP("::1")} + dnsNames := []string{host} + if host != "localhost" { + dnsNames = append(dnsNames, "localhost") + } + + addIP := func(ipAddr net.IP) { + for _, ip := range ipAddresses { + if ip.Equal(ipAddr) { + return + } + } + ipAddresses = append(ipAddresses, ipAddr) + } + addHost := func(host string) { + for _, dnsName := range dnsNames { + if host == dnsName { + return + } + } + dnsNames = append(dnsNames, host) + } + + addrs, err := interfaceAddrs() + if err != nil { + return nil, nil, err + } + for _, a := range addrs { + ipAddr, _, err := net.ParseCIDR(a.String()) + if err == nil { + addIP(ipAddr) + } + } + + for _, hostStr := range extraHosts { + host, _, err := net.SplitHostPort(hostStr) + if err != nil { + host = hostStr + } + if ip := net.ParseIP(host); ip != nil { + addIP(ip) + } else { + addHost(host) + } + } + + template := x509.Certificate{ + SerialNumber: serialNumber, + Subject: pkix.Name{ + Organization: []string{organization}, + CommonName: host, + }, + NotBefore: now.Add(-time.Hour * 24), + NotAfter: validUntil, + + KeyUsage: x509.KeyUsageKeyEncipherment | x509.KeyUsageDigitalSignature | + x509.KeyUsageCertSign, + IsCA: true, // so can sign self. + BasicConstraintsValid: true, + + DNSNames: dnsNames, + IPAddresses: ipAddresses, + } + + derBytes, err := x509.CreateCertificate(rand.Reader, &template, + &template, &priv.PublicKey, priv) + if err != nil { + return nil, nil, fmt.Errorf("failed to create certificate: %v", err) + } + + certBuf := &bytes.Buffer{} + err = pem.Encode(certBuf, &pem.Block{Type: "CERTIFICATE", Bytes: derBytes}) + if err != nil { + return nil, nil, fmt.Errorf("failed to encode certificate: %v", err) + } + + keybytes, err := x509.MarshalECPrivateKey(priv) + if err != nil { + return nil, nil, fmt.Errorf("failed to marshal private key: %v", err) + } + + keyBuf := &bytes.Buffer{} + err = pem.Encode(keyBuf, &pem.Block{Type: "EC PRIVATE KEY", Bytes: keybytes}) + if err != nil { + return nil, nil, fmt.Errorf("failed to encode private key: %v", err) + } + + return certBuf.Bytes(), keyBuf.Bytes(), nil +} diff --git a/btcutil/certgen_test.go b/btcutil/certgen_test.go new file mode 100644 index 0000000000..81aeea5d6a --- /dev/null +++ b/btcutil/certgen_test.go @@ -0,0 +1,123 @@ +// Copyright (c) 2013-2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil_test + +import ( + "crypto/x509" + "encoding/pem" + "net" + "testing" + "time" + + "github.com/btcsuite/btcd/btcutil" + //"github.com/davecgh/go-spew/spew" +) + +// TestNewTLSCertPair ensures the NewTLSCertPair function works as expected. +func TestNewTLSCertPair(t *testing.T) { + // Certs don't support sub-second precision, so truncate it now to + // ensure the checks later don't fail due to nanosecond precision + // differences. + validUntil := time.Unix(time.Now().Add(10*365*24*time.Hour).Unix(), 0) + org := "test autogenerated cert" + extraHosts := []string{"testtlscert.bogus", "localhost", "127.0.0.1"} + cert, key, err := btcutil.NewTLSCertPair(org, validUntil, extraHosts) + if err != nil { + t.Fatalf("failed with unexpected error: %v", err) + } + + // Ensure the PEM-encoded cert that is returned can be decoded. + pemCert, _ := pem.Decode(cert) + if pemCert == nil { + t.Fatalf("pem.Decode was unable to decode the certificate") + } + + // Ensure the PEM-encoded key that is returned can be decoded. + pemKey, _ := pem.Decode(key) + if pemCert == nil { + t.Fatalf("pem.Decode was unable to decode the key") + } + + // Ensure the DER-encoded key bytes can be successfully parsed. + _, err = x509.ParseECPrivateKey(pemKey.Bytes) + if err != nil { + t.Fatalf("failed with unexpected error: %v", err) + } + + // Ensure the DER-encoded cert bytes can be successfully into an X.509 + // certificate. + x509Cert, err := x509.ParseCertificate(pemCert.Bytes) + if err != nil { + t.Fatalf("failed with unexpected error: %v", err) + } + + // Ensure the specified organization is correct. + x509Orgs := x509Cert.Subject.Organization + if len(x509Orgs) == 0 || x509Orgs[0] != org { + x509Org := "" + if len(x509Orgs) > 0 { + x509Org = x509Orgs[0] + } + t.Fatalf("generated cert organization field mismatch, got "+ + "'%v', want '%v'", x509Org, org) + } + + // Ensure the specified valid until value is correct. + if !x509Cert.NotAfter.Equal(validUntil) { + t.Fatalf("generated cert valid until field mismatch, got %v, "+ + "want %v", x509Cert.NotAfter, validUntil) + } + + // Ensure the specified extra hosts are present. + for _, host := range extraHosts { + if err := x509Cert.VerifyHostname(host); err != nil { + t.Fatalf("failed to verify extra host '%s'", host) + } + } + + // Ensure that the Common Name is also the first SAN DNS name. + cn := x509Cert.Subject.CommonName + san0 := x509Cert.DNSNames[0] + if cn != san0 { + t.Errorf("common name %s does not match first SAN %s", cn, san0) + } + + // Ensure there are no duplicate hosts or IPs. + hostCounts := make(map[string]int) + for _, host := range x509Cert.DNSNames { + hostCounts[host]++ + } + ipCounts := make(map[string]int) + for _, ip := range x509Cert.IPAddresses { + ipCounts[string(ip)]++ + } + for host, count := range hostCounts { + if count != 1 { + t.Errorf("host %s appears %d times in certificate", host, count) + } + } + for ipStr, count := range ipCounts { + if count != 1 { + t.Errorf("ip %s appears %d times in certificate", net.IP(ipStr), count) + } + } + + // Ensure the cert can be use for the intended purposes. + if !x509Cert.IsCA { + t.Fatal("generated cert is not a certificate authority") + } + if x509Cert.KeyUsage&x509.KeyUsageKeyEncipherment == 0 { + t.Fatal("generated cert can't be used for key encipherment") + } + if x509Cert.KeyUsage&x509.KeyUsageDigitalSignature == 0 { + t.Fatal("generated cert can't be used for digital signatures") + } + if x509Cert.KeyUsage&x509.KeyUsageCertSign == 0 { + t.Fatal("generated cert can't be used for signing other certs") + } + if !x509Cert.BasicConstraintsValid { + t.Fatal("generated cert does not have valid basic constraints") + } +} diff --git a/btcutil/coinset/README.md b/btcutil/coinset/README.md new file mode 100644 index 0000000000..4fc239ad5e --- /dev/null +++ b/btcutil/coinset/README.md @@ -0,0 +1,71 @@ +coinset +======= + +[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/btcutil/coinset) + +Package coinset provides bitcoin-specific convenience functions for selecting +from and managing sets of unspent transaction outpoints (UTXOs). + +A comprehensive suite of tests is provided to ensure proper functionality. See +`test_coverage.txt` for the gocov coverage report. Alternatively, if you are +running a POSIX OS, you can run the `cov_report.sh` script for a real-time +report. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil/coinset +``` + +## Usage + +Each unspent transaction outpoint is represented by the Coin interface. An +example of a concrete type that implements Coin is coinset.SimpleCoin. + +The typical use case for this library is for creating raw bitcoin transactions +given a set of Coins that may be spent by the user, for example as below: + +```Go +var unspentCoins = []coinset.Coin{ ... } +``` + +When the user needs to spend a certain amount, they will need to select a +subset of these coins which contain at least that value. CoinSelector is +an interface that represents types that implement coin selection algos, +subject to various criteria. There are a few examples of CoinSelector's: + +- MinIndexCoinSelector + +- MinNumberCoinSelector + +- MaxValueAgeCoinSelector + +- MinPriorityCoinSelector + +For example, if the user wishes to maximize the probability that their +transaction is mined quickly, they could use the MaxValueAgeCoinSelector to +select high priority coins, then also attach a relatively high fee. + +```Go +selector := &coinset.MaxValueAgeCoinSelector{ + MaxInputs: 10, + MinAmountChange: 10000, +} +selectedCoins, err := selector.CoinSelect(targetAmount + bigFee, unspentCoins) +if err != nil { + return err +} +msgTx := coinset.NewMsgTxWithInputCoins(selectedCoins) +... + +``` + +The user can then create the msgTx.TxOut's as required, then sign the +transaction and transmit it to the network. + +## License + +Package coinset is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/coinset/coins.go b/btcutil/coinset/coins.go new file mode 100644 index 0000000000..9d813418b6 --- /dev/null +++ b/btcutil/coinset/coins.go @@ -0,0 +1,396 @@ +// Copyright (c) 2014-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package coinset + +import ( + "container/list" + "errors" + "sort" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" +) + +// Coin represents a spendable transaction outpoint +type Coin interface { + Hash() *chainhash.Hash + Index() uint32 + Value() btcutil.Amount + PkScript() []byte + NumConfs() int64 + ValueAge() int64 +} + +// Coins represents a set of Coins +type Coins interface { + Coins() []Coin +} + +// CoinSet is a utility struct for the modifications of a set of +// Coins that implements the Coins interface. To create a CoinSet, +// you must call NewCoinSet with nil for an empty set or a slice of +// coins as the initial contents. +// +// It is important to note that the all the Coins being added or removed +// from a CoinSet must have a constant ValueAge() during the use of +// the CoinSet, otherwise the cached values will be incorrect. +type CoinSet struct { + coinList *list.List + totalValue btcutil.Amount + totalValueAge int64 +} + +// Ensure that CoinSet is a Coins +var _ Coins = NewCoinSet(nil) + +// NewCoinSet creates a CoinSet containing the coins provided. +// To create an empty CoinSet, you may pass null as the coins input parameter. +func NewCoinSet(coins []Coin) *CoinSet { + newCoinSet := &CoinSet{ + coinList: list.New(), + totalValue: 0, + totalValueAge: 0, + } + for _, coin := range coins { + newCoinSet.PushCoin(coin) + } + return newCoinSet +} + +// Coins returns a new slice of the coins contained in the set. +func (cs *CoinSet) Coins() []Coin { + coins := make([]Coin, cs.coinList.Len()) + for i, e := 0, cs.coinList.Front(); e != nil; i, e = i+1, e.Next() { + coins[i] = e.Value.(Coin) + } + return coins +} + +// TotalValue returns the total value of the coins in the set. +func (cs *CoinSet) TotalValue() (value btcutil.Amount) { + return cs.totalValue +} + +// TotalValueAge returns the total value * number of confirmations +// of the coins in the set. +func (cs *CoinSet) TotalValueAge() (valueAge int64) { + return cs.totalValueAge +} + +// Num returns the number of coins in the set +func (cs *CoinSet) Num() int { + return cs.coinList.Len() +} + +// PushCoin adds a coin to the end of the list and updates +// the cached value amounts. +func (cs *CoinSet) PushCoin(c Coin) { + cs.coinList.PushBack(c) + cs.totalValue += c.Value() + cs.totalValueAge += c.ValueAge() +} + +// PopCoin removes the last coin on the list and returns it. +func (cs *CoinSet) PopCoin() Coin { + back := cs.coinList.Back() + if back == nil { + return nil + } + return cs.removeElement(back) +} + +// ShiftCoin removes the first coin on the list and returns it. +func (cs *CoinSet) ShiftCoin() Coin { + front := cs.coinList.Front() + if front == nil { + return nil + } + return cs.removeElement(front) +} + +// removeElement updates the cached value amounts in the CoinSet, +// removes the element from the list, then returns the Coin that +// was removed to the caller. +func (cs *CoinSet) removeElement(e *list.Element) Coin { + c := e.Value.(Coin) + cs.coinList.Remove(e) + cs.totalValue -= c.Value() + cs.totalValueAge -= c.ValueAge() + return c +} + +// NewMsgTxWithInputCoins takes the coins in the CoinSet and makes them +// the inputs to a new wire.MsgTx which is returned. +func NewMsgTxWithInputCoins(txVersion int32, inputCoins Coins) *wire.MsgTx { + msgTx := wire.NewMsgTx(txVersion) + coins := inputCoins.Coins() + msgTx.TxIn = make([]*wire.TxIn, len(coins)) + for i, coin := range coins { + msgTx.TxIn[i] = &wire.TxIn{ + PreviousOutPoint: wire.OutPoint{ + Hash: *coin.Hash(), + Index: coin.Index(), + }, + SignatureScript: nil, + Sequence: wire.MaxTxInSequenceNum, + } + } + return msgTx +} + +var ( + // ErrCoinsNoSelectionAvailable is returned when a CoinSelector believes there is no + // possible combination of coins which can meet the requirements provided to the selector. + ErrCoinsNoSelectionAvailable = errors.New("no coin selection possible") +) + +// satisfiesTargetValue checks that the totalValue is either exactly the targetValue +// or is greater than the targetValue by at least the minChange amount. +func satisfiesTargetValue(targetValue, minChange, totalValue btcutil.Amount) bool { + return (totalValue == targetValue || totalValue >= targetValue+minChange) +} + +// CoinSelector is an interface that wraps the CoinSelect method. +// +// CoinSelect will attempt to select a subset of the coins which has at +// least the targetValue amount. CoinSelect is not guaranteed to return a +// selection of coins even if the total value of coins given is greater +// than the target value. +// +// The exact choice of coins in the subset will be implementation specific. +// +// It is important to note that the Coins being used as inputs need to have +// a constant ValueAge() during the execution of CoinSelect. +type CoinSelector interface { + CoinSelect(targetValue btcutil.Amount, coins []Coin) (Coins, error) +} + +// MinIndexCoinSelector is a CoinSelector that attempts to construct a +// selection of coins whose total value is at least targetValue and prefers +// any number of lower indexes (as in the ordered array) over higher ones. +type MinIndexCoinSelector struct { + MaxInputs int + MinChangeAmount btcutil.Amount +} + +// CoinSelect will attempt to select coins using the algorithm described +// in the MinIndexCoinSelector struct. +func (s MinIndexCoinSelector) CoinSelect(targetValue btcutil.Amount, coins []Coin) (Coins, error) { + cs := NewCoinSet(nil) + for n := 0; n < len(coins) && n < s.MaxInputs; n++ { + cs.PushCoin(coins[n]) + if satisfiesTargetValue(targetValue, s.MinChangeAmount, cs.TotalValue()) { + return cs, nil + } + } + return nil, ErrCoinsNoSelectionAvailable +} + +// MinNumberCoinSelector is a CoinSelector that attempts to construct +// a selection of coins whose total value is at least targetValue +// that uses as few of the inputs as possible. +type MinNumberCoinSelector struct { + MaxInputs int + MinChangeAmount btcutil.Amount +} + +// CoinSelect will attempt to select coins using the algorithm described +// in the MinNumberCoinSelector struct. +func (s MinNumberCoinSelector) CoinSelect(targetValue btcutil.Amount, coins []Coin) (Coins, error) { + sortedCoins := make([]Coin, 0, len(coins)) + sortedCoins = append(sortedCoins, coins...) + sort.Sort(sort.Reverse(byAmount(sortedCoins))) + + return MinIndexCoinSelector(s).CoinSelect(targetValue, sortedCoins) +} + +// MaxValueAgeCoinSelector is a CoinSelector that attempts to construct +// a selection of coins whose total value is at least targetValue +// that has as much input value-age as possible. +// +// This would be useful in the case where you want to maximize +// likelihood of the inclusion of your transaction in the next mined +// block. +type MaxValueAgeCoinSelector struct { + MaxInputs int + MinChangeAmount btcutil.Amount +} + +// CoinSelect will attempt to select coins using the algorithm described +// in the MaxValueAgeCoinSelector struct. +func (s MaxValueAgeCoinSelector) CoinSelect(targetValue btcutil.Amount, coins []Coin) (Coins, error) { + sortedCoins := make([]Coin, 0, len(coins)) + sortedCoins = append(sortedCoins, coins...) + sort.Sort(sort.Reverse(byValueAge(sortedCoins))) + + return MinIndexCoinSelector(s).CoinSelect(targetValue, sortedCoins) +} + +// MinPriorityCoinSelector is a CoinSelector that attempts to construct +// a selection of coins whose total value is at least targetValue and +// whose average value-age per input is greater than MinAvgValueAgePerInput. +// If there is change, it must exceed MinChangeAmount to be a valid selection. +// +// When possible, MinPriorityCoinSelector will attempt to reduce the average +// input priority over the threshold, but no guarantees will be made as to +// minimality of the selection. The selection below is almost certainly +// suboptimal. +// +type MinPriorityCoinSelector struct { + MaxInputs int + MinChangeAmount btcutil.Amount + MinAvgValueAgePerInput int64 +} + +// CoinSelect will attempt to select coins using the algorithm described +// in the MinPriorityCoinSelector struct. +func (s MinPriorityCoinSelector) CoinSelect(targetValue btcutil.Amount, coins []Coin) (Coins, error) { + possibleCoins := make([]Coin, 0, len(coins)) + possibleCoins = append(possibleCoins, coins...) + + sort.Sort(byValueAge(possibleCoins)) + + // find the first coin with sufficient valueAge + cutoffIndex := -1 + for i := 0; i < len(possibleCoins); i++ { + if possibleCoins[i].ValueAge() >= s.MinAvgValueAgePerInput { + cutoffIndex = i + break + } + } + if cutoffIndex < 0 { + return nil, ErrCoinsNoSelectionAvailable + } + + // create sets of input coins that will obey minimum average valueAge + for i := cutoffIndex; i < len(possibleCoins); i++ { + possibleHighCoins := possibleCoins[cutoffIndex : i+1] + + // choose a set of high-enough valueAge coins + highSelect, err := (&MinNumberCoinSelector{ + MaxInputs: s.MaxInputs, + MinChangeAmount: s.MinChangeAmount, + }).CoinSelect(targetValue, possibleHighCoins) + + if err != nil { + // attempt to add available low priority to make a solution + + for numLow := 1; numLow <= cutoffIndex && numLow+(i-cutoffIndex) <= s.MaxInputs; numLow++ { + allHigh := NewCoinSet(possibleCoins[cutoffIndex : i+1]) + newTargetValue := targetValue - allHigh.TotalValue() + newMaxInputs := allHigh.Num() + numLow + if newMaxInputs > numLow { + newMaxInputs = numLow + } + newMinAvgValueAge := ((s.MinAvgValueAgePerInput * int64(allHigh.Num()+numLow)) - allHigh.TotalValueAge()) / int64(numLow) + + // find the minimum priority that can be added to set + lowSelect, err := (&MinPriorityCoinSelector{ + MaxInputs: newMaxInputs, + MinChangeAmount: s.MinChangeAmount, + MinAvgValueAgePerInput: newMinAvgValueAge, + }).CoinSelect(newTargetValue, possibleCoins[0:cutoffIndex]) + + if err != nil { + continue + } + + for _, coin := range lowSelect.Coins() { + allHigh.PushCoin(coin) + } + + return allHigh, nil + } + // oh well, couldn't fix, try to add more high priority to the set. + } else { + extendedCoins := NewCoinSet(highSelect.Coins()) + + // attempt to lower priority towards target with lowest ones first + for n := 0; n < cutoffIndex; n++ { + if extendedCoins.Num() >= s.MaxInputs { + break + } + if possibleCoins[n].ValueAge() == 0 { + continue + } + + extendedCoins.PushCoin(possibleCoins[n]) + if extendedCoins.TotalValueAge()/int64(extendedCoins.Num()) < s.MinAvgValueAgePerInput { + extendedCoins.PopCoin() + continue + } + } + return extendedCoins, nil + } + } + + return nil, ErrCoinsNoSelectionAvailable +} + +type byValueAge []Coin + +func (a byValueAge) Len() int { return len(a) } +func (a byValueAge) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byValueAge) Less(i, j int) bool { return a[i].ValueAge() < a[j].ValueAge() } + +type byAmount []Coin + +func (a byAmount) Len() int { return len(a) } +func (a byAmount) Swap(i, j int) { a[i], a[j] = a[j], a[i] } +func (a byAmount) Less(i, j int) bool { return a[i].Value() < a[j].Value() } + +// SimpleCoin defines a concrete instance of Coin that is backed by a +// btcutil.Tx, a specific outpoint index, and the number of confirmations +// that transaction has had. +type SimpleCoin struct { + Tx *btcutil.Tx + TxIndex uint32 + TxNumConfs int64 +} + +// Ensure that SimpleCoin is a Coin +var _ Coin = &SimpleCoin{} + +// Hash returns the hash value of the transaction on which the Coin is an output +func (c *SimpleCoin) Hash() *chainhash.Hash { + return c.Tx.Hash() +} + +// Index returns the index of the output on the transaction which the Coin represents +func (c *SimpleCoin) Index() uint32 { + return c.TxIndex +} + +// txOut returns the TxOut of the transaction the Coin represents +func (c *SimpleCoin) txOut() *wire.TxOut { + return c.Tx.MsgTx().TxOut[c.TxIndex] +} + +// Value returns the value of the Coin +func (c *SimpleCoin) Value() btcutil.Amount { + return btcutil.Amount(c.txOut().Value) +} + +// PkScript returns the outpoint script of the Coin. +// +// This can be used to determine what type of script the Coin uses +// and extract standard addresses if possible using +// txscript.ExtractPkScriptAddrs for example. +func (c *SimpleCoin) PkScript() []byte { + return c.txOut().PkScript +} + +// NumConfs returns the number of confirmations that the transaction the Coin references +// has had. +func (c *SimpleCoin) NumConfs() int64 { + return c.TxNumConfs +} + +// ValueAge returns the product of the value and the number of confirmations. This is +// used as an input to calculate the priority of the transaction. +func (c *SimpleCoin) ValueAge() int64 { + return c.TxNumConfs * int64(c.Value()) +} diff --git a/btcutil/coinset/coins_test.go b/btcutil/coinset/coins_test.go new file mode 100644 index 0000000000..874dc6c6d6 --- /dev/null +++ b/btcutil/coinset/coins_test.go @@ -0,0 +1,260 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package coinset_test + +import ( + "bytes" + "crypto/sha256" + "encoding/hex" + "fmt" + "testing" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/coinset" +) + +type TestCoin struct { + TxHash *chainhash.Hash + TxIndex uint32 + TxValue btcutil.Amount + TxNumConfs int64 +} + +func (c *TestCoin) Hash() *chainhash.Hash { return c.TxHash } +func (c *TestCoin) Index() uint32 { return c.TxIndex } +func (c *TestCoin) Value() btcutil.Amount { return c.TxValue } +func (c *TestCoin) PkScript() []byte { return nil } +func (c *TestCoin) NumConfs() int64 { return c.TxNumConfs } +func (c *TestCoin) ValueAge() int64 { return int64(c.TxValue) * c.TxNumConfs } + +func NewCoin(index int64, value btcutil.Amount, numConfs int64) coinset.Coin { + h := sha256.New() + _, _ = h.Write([]byte(fmt.Sprintf("%d", index))) + hash, _ := chainhash.NewHash(h.Sum(nil)) + c := &TestCoin{ + TxHash: hash, + TxIndex: 0, + TxValue: value, + TxNumConfs: numConfs, + } + return coinset.Coin(c) +} + +type coinSelectTest struct { + selector coinset.CoinSelector + inputCoins []coinset.Coin + targetValue btcutil.Amount + expectedCoins []coinset.Coin + expectedError error +} + +func testCoinSelector(tests []coinSelectTest, t *testing.T) { + for testIndex, test := range tests { + cs, err := test.selector.CoinSelect(test.targetValue, test.inputCoins) + if err != test.expectedError { + t.Errorf("[%d] expected a different error: got=%v, expected=%v", testIndex, err, test.expectedError) + continue + } + if test.expectedCoins != nil { + if cs == nil { + t.Errorf("[%d] expected non-nil coinset", testIndex) + continue + } + coins := cs.Coins() + if len(coins) != len(test.expectedCoins) { + t.Errorf("[%d] expected different number of coins: got=%d, expected=%d", testIndex, len(coins), len(test.expectedCoins)) + continue + } + for n := 0; n < len(test.expectedCoins); n++ { + if coins[n] != test.expectedCoins[n] { + t.Errorf("[%d] expected different coins at coin index %d: got=%#v, expected=%#v", testIndex, n, coins[n], test.expectedCoins[n]) + continue + } + } + coinSet := coinset.NewCoinSet(coins) + if coinSet.TotalValue() < test.targetValue { + t.Errorf("[%d] targetValue not satistifed", testIndex) + continue + } + } + } +} + +var coins = []coinset.Coin{ + NewCoin(1, 100000000, 1), + NewCoin(2, 10000000, 20), + NewCoin(3, 50000000, 0), + NewCoin(4, 25000000, 6), +} + +func TestCoinSet(t *testing.T) { + cs := coinset.NewCoinSet(nil) + if cs.PopCoin() != nil { + t.Error("Expected popCoin of empty to be nil") + } + if cs.ShiftCoin() != nil { + t.Error("Expected shiftCoin of empty to be nil") + } + + cs.PushCoin(coins[0]) + cs.PushCoin(coins[1]) + cs.PushCoin(coins[2]) + if cs.PopCoin() != coins[2] { + t.Error("Expected third coin") + } + if cs.ShiftCoin() != coins[0] { + t.Error("Expected first coin") + } + + mtx := coinset.NewMsgTxWithInputCoins(wire.TxVersion, cs) + if len(mtx.TxIn) != 1 { + t.Errorf("Expected only 1 TxIn, got %d", len(mtx.TxIn)) + } + op := mtx.TxIn[0].PreviousOutPoint + if !op.Hash.IsEqual(coins[1].Hash()) || op.Index != coins[1].Index() { + t.Errorf("Expected the second coin to be added as input to mtx") + } +} + +var minIndexSelectors = []coinset.MinIndexCoinSelector{ + {MaxInputs: 10, MinChangeAmount: 10000}, + {MaxInputs: 2, MinChangeAmount: 10000}, +} + +var minIndexTests = []coinSelectTest{ + {minIndexSelectors[0], coins, coins[0].Value() - minIndexSelectors[0].MinChangeAmount, []coinset.Coin{coins[0]}, nil}, + {minIndexSelectors[0], coins, coins[0].Value() - minIndexSelectors[0].MinChangeAmount + 1, []coinset.Coin{coins[0], coins[1]}, nil}, + {minIndexSelectors[0], coins, 100000000, []coinset.Coin{coins[0]}, nil}, + {minIndexSelectors[0], coins, 110000000, []coinset.Coin{coins[0], coins[1]}, nil}, + {minIndexSelectors[0], coins, 140000000, []coinset.Coin{coins[0], coins[1], coins[2]}, nil}, + {minIndexSelectors[0], coins, 200000000, nil, coinset.ErrCoinsNoSelectionAvailable}, + {minIndexSelectors[1], coins, 10000000, []coinset.Coin{coins[0]}, nil}, + {minIndexSelectors[1], coins, 110000000, []coinset.Coin{coins[0], coins[1]}, nil}, + {minIndexSelectors[1], coins, 140000000, nil, coinset.ErrCoinsNoSelectionAvailable}, +} + +func TestMinIndexSelector(t *testing.T) { + testCoinSelector(minIndexTests, t) +} + +var minNumberSelectors = []coinset.MinNumberCoinSelector{ + {MaxInputs: 10, MinChangeAmount: 10000}, + {MaxInputs: 2, MinChangeAmount: 10000}, +} + +var minNumberTests = []coinSelectTest{ + {minNumberSelectors[0], coins, coins[0].Value() - minNumberSelectors[0].MinChangeAmount, []coinset.Coin{coins[0]}, nil}, + {minNumberSelectors[0], coins, coins[0].Value() - minNumberSelectors[0].MinChangeAmount + 1, []coinset.Coin{coins[0], coins[2]}, nil}, + {minNumberSelectors[0], coins, 100000000, []coinset.Coin{coins[0]}, nil}, + {minNumberSelectors[0], coins, 110000000, []coinset.Coin{coins[0], coins[2]}, nil}, + {minNumberSelectors[0], coins, 160000000, []coinset.Coin{coins[0], coins[2], coins[3]}, nil}, + {minNumberSelectors[0], coins, 184990000, []coinset.Coin{coins[0], coins[2], coins[3], coins[1]}, nil}, + {minNumberSelectors[0], coins, 184990001, nil, coinset.ErrCoinsNoSelectionAvailable}, + {minNumberSelectors[0], coins, 200000000, nil, coinset.ErrCoinsNoSelectionAvailable}, + {minNumberSelectors[1], coins, 10000000, []coinset.Coin{coins[0]}, nil}, + {minNumberSelectors[1], coins, 110000000, []coinset.Coin{coins[0], coins[2]}, nil}, + {minNumberSelectors[1], coins, 140000000, []coinset.Coin{coins[0], coins[2]}, nil}, +} + +func TestMinNumberSelector(t *testing.T) { + testCoinSelector(minNumberTests, t) +} + +var maxValueAgeSelectors = []coinset.MaxValueAgeCoinSelector{ + {MaxInputs: 10, MinChangeAmount: 10000}, + {MaxInputs: 2, MinChangeAmount: 10000}, +} + +var maxValueAgeTests = []coinSelectTest{ + {maxValueAgeSelectors[0], coins, 100000, []coinset.Coin{coins[1]}, nil}, + {maxValueAgeSelectors[0], coins, 10000000, []coinset.Coin{coins[1]}, nil}, + {maxValueAgeSelectors[0], coins, 10000001, []coinset.Coin{coins[1], coins[3]}, nil}, + {maxValueAgeSelectors[0], coins, 35000000, []coinset.Coin{coins[1], coins[3]}, nil}, + {maxValueAgeSelectors[0], coins, 135000000, []coinset.Coin{coins[1], coins[3], coins[0]}, nil}, + {maxValueAgeSelectors[0], coins, 185000000, []coinset.Coin{coins[1], coins[3], coins[0], coins[2]}, nil}, + {maxValueAgeSelectors[0], coins, 200000000, nil, coinset.ErrCoinsNoSelectionAvailable}, + {maxValueAgeSelectors[1], coins, 40000000, nil, coinset.ErrCoinsNoSelectionAvailable}, + {maxValueAgeSelectors[1], coins, 35000000, []coinset.Coin{coins[1], coins[3]}, nil}, + {maxValueAgeSelectors[1], coins, 34990001, nil, coinset.ErrCoinsNoSelectionAvailable}, +} + +func TestMaxValueAgeSelector(t *testing.T) { + testCoinSelector(maxValueAgeTests, t) +} + +var minPrioritySelectors = []coinset.MinPriorityCoinSelector{ + {MaxInputs: 10, MinChangeAmount: 10000, MinAvgValueAgePerInput: 100000000}, + {MaxInputs: 02, MinChangeAmount: 10000, MinAvgValueAgePerInput: 200000000}, + {MaxInputs: 02, MinChangeAmount: 10000, MinAvgValueAgePerInput: 150000000}, + {MaxInputs: 03, MinChangeAmount: 10000, MinAvgValueAgePerInput: 150000000}, + {MaxInputs: 10, MinChangeAmount: 10000, MinAvgValueAgePerInput: 1000000000}, + {MaxInputs: 10, MinChangeAmount: 10000, MinAvgValueAgePerInput: 175000000}, + {MaxInputs: 02, MinChangeAmount: 10000, MinAvgValueAgePerInput: 125000000}, +} + +var connectedCoins = []coinset.Coin{coins[0], coins[1], coins[3]} + +var minPriorityTests = []coinSelectTest{ + {minPrioritySelectors[0], connectedCoins, 100000000, []coinset.Coin{coins[0]}, nil}, + {minPrioritySelectors[0], connectedCoins, 125000000, []coinset.Coin{coins[0], coins[3]}, nil}, + {minPrioritySelectors[0], connectedCoins, 135000000, []coinset.Coin{coins[0], coins[3], coins[1]}, nil}, + {minPrioritySelectors[0], connectedCoins, 140000000, nil, coinset.ErrCoinsNoSelectionAvailable}, + {minPrioritySelectors[1], connectedCoins, 100000000, nil, coinset.ErrCoinsNoSelectionAvailable}, + {minPrioritySelectors[1], connectedCoins, 10000000, []coinset.Coin{coins[1]}, nil}, + {minPrioritySelectors[1], connectedCoins, 100000000, nil, coinset.ErrCoinsNoSelectionAvailable}, + {minPrioritySelectors[2], connectedCoins, 11000000, []coinset.Coin{coins[3]}, nil}, + {minPrioritySelectors[2], connectedCoins, 25000001, []coinset.Coin{coins[3], coins[1]}, nil}, + {minPrioritySelectors[3], connectedCoins, 25000001, []coinset.Coin{coins[3], coins[1], coins[0]}, nil}, + {minPrioritySelectors[3], connectedCoins, 100000000, []coinset.Coin{coins[3], coins[1], coins[0]}, nil}, + {minPrioritySelectors[3], []coinset.Coin{coins[1], coins[2]}, 10000000, []coinset.Coin{coins[1]}, nil}, + {minPrioritySelectors[4], connectedCoins, 1, nil, coinset.ErrCoinsNoSelectionAvailable}, + {minPrioritySelectors[5], connectedCoins, 20000000, []coinset.Coin{coins[1], coins[3]}, nil}, + {minPrioritySelectors[6], connectedCoins, 25000000, []coinset.Coin{coins[3], coins[0]}, nil}, +} + +func TestMinPrioritySelector(t *testing.T) { + testCoinSelector(minPriorityTests, t) +} + +var ( + // should be two outpoints, with 1st one having 0.035BTC value. + testSimpleCoinNumConfs = int64(1) + testSimpleCoinTxHash = "9b5965c86de51d5dc824e179a05cf232db78c80ae86ca9d7cb2a655b5e19c1e2" + testSimpleCoinTxHex = "0100000001a214a110f79e4abe073865ea5b3745c6e82c913bad44be70652804a5e4003b0a010000008c493046022100edd18a69664efa57264be207100c203e6cade1888cbb88a0ad748548256bb2f0022100f1027dc2e6c7f248d78af1dd90027b5b7d8ec563bb62aa85d4e74d6376f3868c0141048f3757b65ed301abd1b0e8942d1ab5b50594d3314cff0299f300c696376a0a9bf72e74710a8af7a5372d4af4bb519e2701a094ef48c8e48e3b65b28502452dceffffffff02e0673500000000001976a914686dd149a79b4a559d561fbc396d3e3c6628b98d88ace86ef102000000001976a914ac3f995655e81b875b38b64351d6f896ddbfc68588ac00000000" + testSimpleCoinTxValue0 = btcutil.Amount(3500000) + testSimpleCoinTxValueAge0 = int64(testSimpleCoinTxValue0) * testSimpleCoinNumConfs + testSimpleCoinTxPkScript0Hex = "76a914686dd149a79b4a559d561fbc396d3e3c6628b98d88ac" + testSimpleCoinTxPkScript0Bytes, _ = hex.DecodeString(testSimpleCoinTxPkScript0Hex) + testSimpleCoinTxBytes, _ = hex.DecodeString(testSimpleCoinTxHex) + testSimpleCoinTx, _ = btcutil.NewTxFromBytes(testSimpleCoinTxBytes) + testSimpleCoin = &coinset.SimpleCoin{ + Tx: testSimpleCoinTx, + TxIndex: 0, + TxNumConfs: testSimpleCoinNumConfs, + } +) + +func TestSimpleCoin(t *testing.T) { + if testSimpleCoin.Hash().String() != testSimpleCoinTxHash { + t.Error("Different value for tx hash than expected") + } + if testSimpleCoin.Index() != 0 { + t.Error("Different value for index of outpoint than expected") + } + if testSimpleCoin.Value() != testSimpleCoinTxValue0 { + t.Error("Different value of coin value than expected") + } + if !bytes.Equal(testSimpleCoin.PkScript(), testSimpleCoinTxPkScript0Bytes) { + t.Error("Different value of coin pkScript than expected") + } + if testSimpleCoin.NumConfs() != 1 { + t.Error("Differet value of num confs than expected") + } + if testSimpleCoin.ValueAge() != testSimpleCoinTxValueAge0 { + t.Error("Different value of coin value * age than expected") + } +} diff --git a/btcutil/coinset/cov_report.sh b/btcutil/coinset/cov_report.sh new file mode 100644 index 0000000000..307f05b76c --- /dev/null +++ b/btcutil/coinset/cov_report.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# This script uses gocov to generate a test coverage report. +# The gocov tool my be obtained with the following command: +# go get github.com/axw/gocov/gocov +# +# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH. + +# Check for gocov. +type gocov >/dev/null 2>&1 +if [ $? -ne 0 ]; then + echo >&2 "This script requires the gocov tool." + echo >&2 "You may obtain it with the following command:" + echo >&2 "go get github.com/axw/gocov/gocov" + exit 1 +fi +gocov test | gocov report diff --git a/btcutil/coinset/test_coverage.txt b/btcutil/coinset/test_coverage.txt new file mode 100644 index 0000000000..0e3e15d9f7 --- /dev/null +++ b/btcutil/coinset/test_coverage.txt @@ -0,0 +1,31 @@ + +github.com/conformal/btcutil/coinset/coins.go MinPriorityCoinSelector.CoinSelect 100.00% (39/39) +github.com/conformal/btcutil/coinset/coins.go NewMsgTxWithInputCoins 100.00% (6/6) +github.com/conformal/btcutil/coinset/coins.go MinIndexCoinSelector.CoinSelect 100.00% (6/6) +github.com/conformal/btcutil/coinset/coins.go CoinSet.removeElement 100.00% (5/5) +github.com/conformal/btcutil/coinset/coins.go NewCoinSet 100.00% (4/4) +github.com/conformal/btcutil/coinset/coins.go CoinSet.Coins 100.00% (4/4) +github.com/conformal/btcutil/coinset/coins.go CoinSet.PopCoin 100.00% (4/4) +github.com/conformal/btcutil/coinset/coins.go CoinSet.ShiftCoin 100.00% (4/4) +github.com/conformal/btcutil/coinset/coins.go MinNumberCoinSelector.CoinSelect 100.00% (4/4) +github.com/conformal/btcutil/coinset/coins.go MaxValueAgeCoinSelector.CoinSelect 100.00% (4/4) +github.com/conformal/btcutil/coinset/coins.go CoinSet.PushCoin 100.00% (3/3) +github.com/conformal/btcutil/coinset/coins.go CoinSet.TotalValueAge 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go SimpleCoin.NumConfs 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go SimpleCoin.ValueAge 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go CoinSet.TotalValue 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go byValueAge.Len 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go byValueAge.Swap 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go byValueAge.Less 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go byAmount.Len 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go byAmount.Swap 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go byAmount.Less 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go SimpleCoin.Hash 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go SimpleCoin.Index 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go SimpleCoin.txOut 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go SimpleCoin.Value 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go SimpleCoin.PkScript 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go CoinSet.Num 100.00% (1/1) +github.com/conformal/btcutil/coinset/coins.go satisfiesTargetValue 100.00% (1/1) +github.com/conformal/btcutil/coinset ---------------------------------- 100.00% (100/100) + diff --git a/btcutil/const.go b/btcutil/const.go new file mode 100644 index 0000000000..c73946056f --- /dev/null +++ b/btcutil/const.go @@ -0,0 +1,16 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +const ( + // SatoshiPerBitcent is the number of satoshi in one bitcoin cent. + SatoshiPerBitcent = 1e6 + + // SatoshiPerBitcoin is the number of satoshi in one bitcoin (1 BTC). + SatoshiPerBitcoin = 1e8 + + // MaxSatoshi is the maximum transaction amount allowed in satoshi. + MaxSatoshi = 21e6 * SatoshiPerBitcoin +) diff --git a/btcutil/cov_report.sh b/btcutil/cov_report.sh new file mode 100644 index 0000000000..307f05b76c --- /dev/null +++ b/btcutil/cov_report.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# This script uses gocov to generate a test coverage report. +# The gocov tool my be obtained with the following command: +# go get github.com/axw/gocov/gocov +# +# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH. + +# Check for gocov. +type gocov >/dev/null 2>&1 +if [ $? -ne 0 ]; then + echo >&2 "This script requires the gocov tool." + echo >&2 "You may obtain it with the following command:" + echo >&2 "go get github.com/axw/gocov/gocov" + exit 1 +fi +gocov test | gocov report diff --git a/btcutil/doc.go b/btcutil/doc.go new file mode 100644 index 0000000000..36cda1c782 --- /dev/null +++ b/btcutil/doc.go @@ -0,0 +1,46 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package btcutil provides bitcoin-specific convenience functions and types. + +Block Overview + +A Block defines a bitcoin block that provides easier and more efficient +manipulation of raw wire protocol blocks. It also memoizes hashes for the +block and its transactions on their first access so subsequent accesses don't +have to repeat the relatively expensive hashing operations. + +Tx Overview + +A Tx defines a bitcoin transaction that provides more efficient manipulation of +raw wire protocol transactions. It memoizes the hash for the transaction on its +first access so subsequent accesses don't have to repeat the relatively +expensive hashing operations. + +Address Overview + +The Address interface provides an abstraction for a Bitcoin address. While the +most common type is a pay-to-pubkey-hash, Bitcoin already supports others and +may well support more in the future. This package currently provides +implementations for the pay-to-pubkey, pay-to-pubkey-hash, and +pay-to-script-hash address types. + +To decode/encode an address: + + // NOTE: The default network is only used for address types which do not + // already contain that information. At this time, that is only + // pay-to-pubkey addresses. + addrString := "04678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962" + + "e0ea1f61deb649f6bc3f4cef38c4f35504e51ec112de5c384df7ba0b8d57" + + "8a4c702b6bf11d5f" + defaultNet := &chaincfg.MainNetParams + addr, err := btcutil.DecodeAddress(addrString, defaultNet) + if err != nil { + fmt.Println(err) + return + } + fmt.Println(addr.EncodeAddress()) +*/ +package btcutil diff --git a/btcutil/example_test.go b/btcutil/example_test.go new file mode 100644 index 0000000000..6b62fdd44f --- /dev/null +++ b/btcutil/example_test.go @@ -0,0 +1,76 @@ +package btcutil_test + +import ( + "fmt" + "math" + + "github.com/btcsuite/btcd/btcutil" +) + +func ExampleAmount() { + + a := btcutil.Amount(0) + fmt.Println("Zero Satoshi:", a) + + a = btcutil.Amount(1e8) + fmt.Println("100,000,000 Satoshis:", a) + + a = btcutil.Amount(1e5) + fmt.Println("100,000 Satoshis:", a) + // Output: + // Zero Satoshi: 0 BTC + // 100,000,000 Satoshis: 1 BTC + // 100,000 Satoshis: 0.001 BTC +} + +func ExampleNewAmount() { + amountOne, err := btcutil.NewAmount(1) + if err != nil { + fmt.Println(err) + return + } + fmt.Println(amountOne) //Output 1 + + amountFraction, err := btcutil.NewAmount(0.01234567) + if err != nil { + fmt.Println(err) + return + } + fmt.Println(amountFraction) //Output 2 + + amountZero, err := btcutil.NewAmount(0) + if err != nil { + fmt.Println(err) + return + } + fmt.Println(amountZero) //Output 3 + + amountNaN, err := btcutil.NewAmount(math.NaN()) + if err != nil { + fmt.Println(err) + return + } + fmt.Println(amountNaN) //Output 4 + + // Output: 1 BTC + // 0.01234567 BTC + // 0 BTC + // invalid bitcoin amount +} + +func ExampleAmount_unitConversions() { + amount := btcutil.Amount(44433322211100) + + fmt.Println("Satoshi to kBTC:", amount.Format(btcutil.AmountKiloBTC)) + fmt.Println("Satoshi to BTC:", amount) + fmt.Println("Satoshi to MilliBTC:", amount.Format(btcutil.AmountMilliBTC)) + fmt.Println("Satoshi to MicroBTC:", amount.Format(btcutil.AmountMicroBTC)) + fmt.Println("Satoshi to Satoshi:", amount.Format(btcutil.AmountSatoshi)) + + // Output: + // Satoshi to kBTC: 444.333222111 kBTC + // Satoshi to BTC: 444333.222111 BTC + // Satoshi to MilliBTC: 444333222.111 mBTC + // Satoshi to MicroBTC: 444333222111 μBTC + // Satoshi to Satoshi: 44433322211100 Satoshi +} diff --git a/btcutil/gcs/README.md b/btcutil/gcs/README.md new file mode 100644 index 0000000000..ee0c120401 --- /dev/null +++ b/btcutil/gcs/README.md @@ -0,0 +1,24 @@ +gcs +========== + +[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)] +(https://travis-ci.org/btcsuite/btcutil) [![ISC License] +(http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/btcutil/gcs?status.png)] +(http://godoc.org/github.com/btcsuite/btcd/btcutil/gcs) + +Package gcs provides an API for building and using a Golomb-coded set filter +similar to that described [here](http://giovanni.bajo.it/post/47119962313/golomb-coded-sets-smaller-than-bloom-filters). + +A comprehensive suite of tests is provided to ensure proper functionality. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil/gcs +``` + +## License + +Package gcs is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/gcs/builder/builder.go b/btcutil/gcs/builder/builder.go new file mode 100644 index 0000000000..6f15ec7a68 --- /dev/null +++ b/btcutil/gcs/builder/builder.go @@ -0,0 +1,371 @@ +// Copyright (c) 2017 The btcsuite developers +// Copyright (c) 2017 The Lightning Network Developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package builder + +import ( + "crypto/rand" + "fmt" + "math" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil/gcs" +) + +const ( + // DefaultP is the default collision probability (2^-19) + DefaultP = 19 + + // DefaultM is the default value used for the hash range. + DefaultM uint64 = 784931 +) + +// GCSBuilder is a utility class that makes building GCS filters convenient. +type GCSBuilder struct { + p uint8 + + m uint64 + + key [gcs.KeySize]byte + + // data is a set of entries represented as strings. This is done to + // deduplicate items as they are added. + data map[string]struct{} + err error +} + +// RandomKey is a utility function that returns a cryptographically random +// [gcs.KeySize]byte usable as a key for a GCS filter. +func RandomKey() ([gcs.KeySize]byte, error) { + var key [gcs.KeySize]byte + + // Read a byte slice from rand.Reader. + randKey := make([]byte, gcs.KeySize) + _, err := rand.Read(randKey) + + // This shouldn't happen unless the user is on a system that doesn't + // have a system CSPRNG. OK to panic in this case. + if err != nil { + return key, err + } + + // Copy the byte slice to a [gcs.KeySize]byte array and return it. + copy(key[:], randKey) + return key, nil +} + +// DeriveKey is a utility function that derives a key from a chainhash.Hash by +// truncating the bytes of the hash to the appopriate key size. +func DeriveKey(keyHash *chainhash.Hash) [gcs.KeySize]byte { + var key [gcs.KeySize]byte + copy(key[:], keyHash.CloneBytes()) + return key +} + +// Key retrieves the key with which the builder will build a filter. This is +// useful if the builder is created with a random initial key. +func (b *GCSBuilder) Key() ([gcs.KeySize]byte, error) { + // Do nothing if the builder's errored out. + if b.err != nil { + return [gcs.KeySize]byte{}, b.err + } + + return b.key, nil +} + +// SetKey sets the key with which the builder will build a filter to the passed +// [gcs.KeySize]byte. +func (b *GCSBuilder) SetKey(key [gcs.KeySize]byte) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + copy(b.key[:], key[:]) + return b +} + +// SetKeyFromHash sets the key with which the builder will build a filter to a +// key derived from the passed chainhash.Hash using DeriveKey(). +func (b *GCSBuilder) SetKeyFromHash(keyHash *chainhash.Hash) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + return b.SetKey(DeriveKey(keyHash)) +} + +// SetP sets the filter's probability after calling Builder(). +func (b *GCSBuilder) SetP(p uint8) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + // Basic sanity check. + if p > 32 { + b.err = gcs.ErrPTooBig + return b + } + + b.p = p + return b +} + +// SetM sets the filter's modulous value after calling Builder(). +func (b *GCSBuilder) SetM(m uint64) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + // Basic sanity check. + if m > uint64(math.MaxUint32) { + b.err = gcs.ErrPTooBig + return b + } + + b.m = m + return b +} + +// Preallocate sets the estimated filter size after calling Builder() to reduce +// the probability of memory reallocations. If the builder has already had data +// added to it, Preallocate has no effect. +func (b *GCSBuilder) Preallocate(n uint32) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + if b.data == nil { + b.data = make(map[string]struct{}, n) + } + + return b +} + +// AddEntry adds a []byte to the list of entries to be included in the GCS +// filter when it's built. +func (b *GCSBuilder) AddEntry(data []byte) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + b.data[string(data)] = struct{}{} + return b +} + +// AddEntries adds all the []byte entries in a [][]byte to the list of entries +// to be included in the GCS filter when it's built. +func (b *GCSBuilder) AddEntries(data [][]byte) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + for _, entry := range data { + b.AddEntry(entry) + } + return b +} + +// AddHash adds a chainhash.Hash to the list of entries to be included in the +// GCS filter when it's built. +func (b *GCSBuilder) AddHash(hash *chainhash.Hash) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + return b.AddEntry(hash.CloneBytes()) +} + +// AddWitness adds each item of the passed filter stack to the filter, and then +// adds each item as a script. +func (b *GCSBuilder) AddWitness(witness wire.TxWitness) *GCSBuilder { + // Do nothing if the builder's already errored out. + if b.err != nil { + return b + } + + return b.AddEntries(witness) +} + +// Build returns a function which builds a GCS filter with the given parameters +// and data. +func (b *GCSBuilder) Build() (*gcs.Filter, error) { + // Do nothing if the builder's already errored out. + if b.err != nil { + return nil, b.err + } + + // We'll ensure that all the parmaters we need to actually build the + // filter properly are set. + if b.p == 0 { + return nil, fmt.Errorf("p value is not set, cannot build") + } + if b.m == 0 { + return nil, fmt.Errorf("m value is not set, cannot build") + } + + dataSlice := make([][]byte, 0, len(b.data)) + for item := range b.data { + dataSlice = append(dataSlice, []byte(item)) + } + + return gcs.BuildGCSFilter(b.p, b.m, b.key, dataSlice) +} + +// WithKeyPNM creates a GCSBuilder with specified key and the passed +// probability, modulus and estimated filter size. +func WithKeyPNM(key [gcs.KeySize]byte, p uint8, n uint32, m uint64) *GCSBuilder { + b := GCSBuilder{} + return b.SetKey(key).SetP(p).SetM(m).Preallocate(n) +} + +// WithKeyPM creates a GCSBuilder with specified key and the passed +// probability. Estimated filter size is set to zero, which means more +// reallocations are done when building the filter. +func WithKeyPM(key [gcs.KeySize]byte, p uint8, m uint64) *GCSBuilder { + return WithKeyPNM(key, p, 0, m) +} + +// WithKey creates a GCSBuilder with specified key. Probability is set to 19 +// (2^-19 collision probability). Estimated filter size is set to zero, which +// means more reallocations are done when building the filter. +func WithKey(key [gcs.KeySize]byte) *GCSBuilder { + return WithKeyPNM(key, DefaultP, 0, DefaultM) +} + +// WithKeyHashPNM creates a GCSBuilder with key derived from the specified +// chainhash.Hash and the passed probability and estimated filter size. +func WithKeyHashPNM(keyHash *chainhash.Hash, p uint8, n uint32, + m uint64) *GCSBuilder { + + return WithKeyPNM(DeriveKey(keyHash), p, n, m) +} + +// WithKeyHashPM creates a GCSBuilder with key derived from the specified +// chainhash.Hash and the passed probability. Estimated filter size is set to +// zero, which means more reallocations are done when building the filter. +func WithKeyHashPM(keyHash *chainhash.Hash, p uint8, m uint64) *GCSBuilder { + return WithKeyHashPNM(keyHash, p, 0, m) +} + +// WithKeyHash creates a GCSBuilder with key derived from the specified +// chainhash.Hash. Probability is set to 20 (2^-20 collision probability). +// Estimated filter size is set to zero, which means more reallocations are +// done when building the filter. +func WithKeyHash(keyHash *chainhash.Hash) *GCSBuilder { + return WithKeyHashPNM(keyHash, DefaultP, 0, DefaultM) +} + +// WithRandomKeyPNM creates a GCSBuilder with a cryptographically random key and +// the passed probability and estimated filter size. +func WithRandomKeyPNM(p uint8, n uint32, m uint64) *GCSBuilder { + key, err := RandomKey() + if err != nil { + b := GCSBuilder{err: err} + return &b + } + return WithKeyPNM(key, p, n, m) +} + +// WithRandomKeyPM creates a GCSBuilder with a cryptographically random key and +// the passed probability. Estimated filter size is set to zero, which means +// more reallocations are done when building the filter. +func WithRandomKeyPM(p uint8, m uint64) *GCSBuilder { + return WithRandomKeyPNM(p, 0, m) +} + +// WithRandomKey creates a GCSBuilder with a cryptographically random key. +// Probability is set to 20 (2^-20 collision probability). Estimated filter +// size is set to zero, which means more reallocations are done when +// building the filter. +func WithRandomKey() *GCSBuilder { + return WithRandomKeyPNM(DefaultP, 0, DefaultM) +} + +// BuildBasicFilter builds a basic GCS filter from a block. A basic GCS filter +// will contain all the previous output scripts spent by inputs within a block, +// as well as the data pushes within all the outputs created within a block. +func BuildBasicFilter(block *wire.MsgBlock, prevOutScripts [][]byte) (*gcs.Filter, error) { + blockHash := block.BlockHash() + b := WithKeyHash(&blockHash) + + // If the filter had an issue with the specified key, then we force it + // to bubble up here by calling the Key() function. + _, err := b.Key() + if err != nil { + return nil, err + } + + // In order to build a basic filter, we'll range over the entire block, + // adding each whole script itself. + for _, tx := range block.Transactions { + // For each output in a transaction, we'll add each of the + // individual data pushes within the script. + for _, txOut := range tx.TxOut { + if len(txOut.PkScript) == 0 { + continue + } + + // In order to allow the filters to later be committed + // to within an OP_RETURN output, we ignore all + // OP_RETURNs to avoid a circular dependency. + if txOut.PkScript[0] == txscript.OP_RETURN { + continue + } + + b.AddEntry(txOut.PkScript) + } + } + + // In the second pass, we'll also add all the prevOutScripts + // individually as elements. + for _, prevScript := range prevOutScripts { + if len(prevScript) == 0 { + continue + } + + b.AddEntry(prevScript) + } + + return b.Build() +} + +// GetFilterHash returns the double-SHA256 of the filter. +func GetFilterHash(filter *gcs.Filter) (chainhash.Hash, error) { + filterData, err := filter.NBytes() + if err != nil { + return chainhash.Hash{}, err + } + + return chainhash.DoubleHashH(filterData), nil +} + +// MakeHeaderForFilter makes a filter chain header for a filter, given the +// filter and the previous filter chain header. +func MakeHeaderForFilter(filter *gcs.Filter, prevHeader chainhash.Hash) (chainhash.Hash, error) { + filterTip := make([]byte, 2*chainhash.HashSize) + filterHash, err := GetFilterHash(filter) + if err != nil { + return chainhash.Hash{}, err + } + + // In the buffer we created above we'll compute hash || prevHash as an + // intermediate value. + copy(filterTip, filterHash[:]) + copy(filterTip[chainhash.HashSize:], prevHeader[:]) + + // The final filter hash is the double-sha256 of the hash computed + // above. + return chainhash.DoubleHashH(filterTip), nil +} diff --git a/btcutil/gcs/builder/builder_test.go b/btcutil/gcs/builder/builder_test.go new file mode 100644 index 0000000000..59768380b1 --- /dev/null +++ b/btcutil/gcs/builder/builder_test.go @@ -0,0 +1,281 @@ +// Copyright (c) 2017 The btcsuite developers +// Copyright (c) 2017 The Lightning Network Developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package builder_test + +import ( + "encoding/hex" + "testing" + + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/gcs" + "github.com/btcsuite/btcd/btcutil/gcs/builder" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" +) + +var ( + // List of values for building a filter + contents = [][]byte{ + []byte("Alex"), + []byte("Bob"), + []byte("Charlie"), + []byte("Dick"), + []byte("Ed"), + []byte("Frank"), + []byte("George"), + []byte("Harry"), + []byte("Ilya"), + []byte("John"), + []byte("Kevin"), + []byte("Larry"), + []byte("Michael"), + []byte("Nate"), + []byte("Owen"), + []byte("Paul"), + []byte("Quentin"), + } + + testKey = [16]byte{0x4c, 0xb1, 0xab, 0x12, 0x57, 0x62, 0x1e, 0x41, + 0x3b, 0x8b, 0x0e, 0x26, 0x64, 0x8d, 0x4a, 0x15} + + testHash = "000000000000000000496d7ff9bd2c96154a8d64260e8b3b411e625712abb14c" + + testAddr = "3Nxwenay9Z8Lc9JBiywExpnEFiLp6Afp8v" + + witness = [][]byte{ + {0x4c, 0xb1, 0xab, 0x12, 0x57, 0x62, 0x1e, 0x41, + 0x3b, 0x8b, 0x0e, 0x26, 0x64, 0x8d, 0x4a, 0x15, + 0x3b, 0x8b, 0x0e, 0x26, 0x64, 0x8d, 0x4a, 0x15, + 0x3b, 0x8b, 0x0e, 0x26, 0x64, 0x8d, 0x4a, 0x15}, + + {0xdd, 0xa3, 0x5a, 0x14, 0x88, 0xfb, 0x97, 0xb6, + 0xeb, 0x3f, 0xe6, 0xe9, 0xef, 0x2a, 0x25, 0x81, + 0x4e, 0x39, 0x6f, 0xb5, 0xdc, 0x29, 0x5f, 0xe9, + 0x94, 0xb9, 0x67, 0x89, 0xb2, 0x1a, 0x03, 0x98, + 0x94, 0xb9, 0x67, 0x89, 0xb2, 0x1a, 0x03, 0x98, + 0x94, 0xb9, 0x67, 0x89, 0xb2, 0x1a, 0x03, 0x98}, + } +) + +// TestUseBlockHash tests using a block hash as a filter key. +func TestUseBlockHash(t *testing.T) { + // Block hash #448710, pretty high difficulty. + hash, err := chainhash.NewHashFromStr(testHash) + if err != nil { + t.Fatalf("Hash from string failed: %s", err.Error()) + } + + // wire.OutPoint + outPoint := wire.OutPoint{ + Hash: *hash, + Index: 4321, + } + + // btcutil.Address + addr, err := btcutil.DecodeAddress(testAddr, &chaincfg.MainNetParams) + if err != nil { + t.Fatalf("Address decode failed: %s", err.Error()) + } + addrBytes, err := txscript.NewScriptBuilder(). + AddOp(txscript.OP_HASH160).AddData(addr.ScriptAddress()). + AddOp(txscript.OP_EQUAL).Script() + if err != nil { + t.Fatalf("Address script build failed: %s", err.Error()) + } + + // Create a GCSBuilder with a key hash and check that the key is derived + // correctly, then test it. + b := builder.WithKeyHash(hash) + key, err := b.Key() + if err != nil { + t.Fatalf("Builder instantiation with key hash failed: %s", + err.Error()) + } + if key != testKey { + t.Fatalf("Key not derived correctly from key hash:\n%s\n%s", + hex.EncodeToString(key[:]), + hex.EncodeToString(testKey[:])) + } + BuilderTest(b, hash, builder.DefaultP, outPoint, addrBytes, witness, t) + + // Create a GCSBuilder with a key hash and non-default P and test it. + b = builder.WithKeyHashPM(hash, 30, 90) + BuilderTest(b, hash, 30, outPoint, addrBytes, witness, t) + + // Create a GCSBuilder with a random key, set the key from a hash + // manually, check that the key is correct, and test it. + b = builder.WithRandomKey() + b.SetKeyFromHash(hash) + key, err = b.Key() + if err != nil { + t.Fatalf("Builder instantiation with known key failed: %s", + err.Error()) + } + if key != testKey { + t.Fatalf("Key not copied correctly from known key:\n%s\n%s", + hex.EncodeToString(key[:]), + hex.EncodeToString(testKey[:])) + } + BuilderTest(b, hash, builder.DefaultP, outPoint, addrBytes, witness, t) + + // Create a GCSBuilder with a random key and test it. + b = builder.WithRandomKey() + key1, err := b.Key() + if err != nil { + t.Fatalf("Builder instantiation with random key failed: %s", + err.Error()) + } + t.Logf("Random Key 1: %s", hex.EncodeToString(key1[:])) + BuilderTest(b, hash, builder.DefaultP, outPoint, addrBytes, witness, t) + + // Create a GCSBuilder with a random key and non-default P and test it. + b = builder.WithRandomKeyPM(30, 90) + key2, err := b.Key() + if err != nil { + t.Fatalf("Builder instantiation with random key failed: %s", + err.Error()) + } + t.Logf("Random Key 2: %s", hex.EncodeToString(key2[:])) + if key2 == key1 { + t.Fatalf("Random keys are the same!") + } + BuilderTest(b, hash, 30, outPoint, addrBytes, witness, t) + + // Create a GCSBuilder with a known key and test it. + b = builder.WithKey(testKey) + key, err = b.Key() + if err != nil { + t.Fatalf("Builder instantiation with known key failed: %s", + err.Error()) + } + if key != testKey { + t.Fatalf("Key not copied correctly from known key:\n%s\n%s", + hex.EncodeToString(key[:]), + hex.EncodeToString(testKey[:])) + } + BuilderTest(b, hash, builder.DefaultP, outPoint, addrBytes, witness, t) + + // Create a GCSBuilder with a known key and non-default P and test it. + b = builder.WithKeyPM(testKey, 30, 90) + key, err = b.Key() + if err != nil { + t.Fatalf("Builder instantiation with known key failed: %s", + err.Error()) + } + if key != testKey { + t.Fatalf("Key not copied correctly from known key:\n%s\n%s", + hex.EncodeToString(key[:]), + hex.EncodeToString(testKey[:])) + } + BuilderTest(b, hash, 30, outPoint, addrBytes, witness, t) + + // Create a GCSBuilder with a known key and too-high P and ensure error + // works throughout all functions that use it. + b = builder.WithRandomKeyPM(33, 99).SetKeyFromHash(hash).SetKey(testKey) + b.SetP(30).AddEntry(hash.CloneBytes()).AddEntries(contents). + AddHash(hash).AddEntry(addrBytes) + _, err = b.Key() + if err != gcs.ErrPTooBig { + t.Fatalf("No error on P too big!") + } + _, err = b.Build() + if err != gcs.ErrPTooBig { + t.Fatalf("No error on P too big!") + } +} + +func BuilderTest(b *builder.GCSBuilder, hash *chainhash.Hash, p uint8, + outPoint wire.OutPoint, addrBytes []byte, witness wire.TxWitness, + t *testing.T) { + + key, err := b.Key() + if err != nil { + t.Fatalf("Builder instantiation with key hash failed: %s", + err.Error()) + } + + // Build a filter and test matches. + b.AddEntries(contents) + f, err := b.Build() + if err != nil { + t.Fatalf("Filter build failed: %s", err.Error()) + } + if f.P() != p { + t.Fatalf("Filter built with wrong probability") + } + match, err := f.Match(key, []byte("Nate")) + if err != nil { + t.Fatalf("Filter match failed: %s", err) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + match, err = f.Match(key, []byte("weks")) + if err != nil { + t.Fatalf("Filter match failed: %s", err) + } + if match { + t.Logf("False positive match, should be 1 in 2**%d!", + builder.DefaultP) + } + + // Add a hash, build a filter, and test matches + b.AddHash(hash) + f, err = b.Build() + if err != nil { + t.Fatalf("Filter build failed: %s", err.Error()) + } + match, err = f.Match(key, hash.CloneBytes()) + if err != nil { + t.Fatalf("Filter match failed: %s", err) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + + // Add a script, build a filter, and test matches + b.AddEntry(addrBytes) + f, err = b.Build() + if err != nil { + t.Fatalf("Filter build failed: %s", err.Error()) + } + match, err = f.MatchAny(key, [][]byte{addrBytes}) + if err != nil { + t.Fatalf("Filter match any failed: %s", err) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + + // Add a routine witness stack, build a filter, and test that it + // matches. + b.AddWitness(witness) + f, err = b.Build() + if err != nil { + t.Fatalf("Filter build failed: %s", err.Error()) + } + match, err = f.MatchAny(key, witness) + if err != nil { + t.Fatalf("Filter match any failed: %s", err) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + + // Check that adding duplicate items does not increase filter size. + originalSize := f.N() + b.AddEntry(addrBytes) + b.AddWitness(witness) + f, err = b.Build() + if err != nil { + t.Fatalf("Filter build failed: %s", err.Error()) + } + if f.N() != originalSize { + t.Fatal("Filter size increased with duplicate items") + } +} diff --git a/btcutil/gcs/doc.go b/btcutil/gcs/doc.go new file mode 100644 index 0000000000..780fd76631 --- /dev/null +++ b/btcutil/gcs/doc.go @@ -0,0 +1,24 @@ +// Copyright (c) 2016-2017 The btcsuite developers +// Copyright (c) 2016-2017 The Lightning Network Developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package gcs provides an API for building and using a Golomb-coded set filter. + +Golomb-Coded Set + +A Golomb-coded set is a probabilistic data structure used similarly to a Bloom +filter. A filter uses constant-size overhead plus on average n+2 bits per +item added to the filter, where 2^-n is the desired false positive (collision) +probability. + +GCS use in Bitcoin + +GCS filters are a proposed mechanism for storing and transmitting per-block +filters in Bitcoin. The usage is intended to be the inverse of Bloom filters: +a full node would send an SPV node the GCS filter for a block, which the SPV +node would check against its list of relevant items. The suggested collision +probability for Bitcoin use is 2^-20. +*/ +package gcs diff --git a/btcutil/gcs/gcs.go b/btcutil/gcs/gcs.go new file mode 100644 index 0000000000..fbffb06131 --- /dev/null +++ b/btcutil/gcs/gcs.go @@ -0,0 +1,541 @@ +// Copyright (c) 2016-2017 The btcsuite developers +// Copyright (c) 2016-2017 The Lightning Network Developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package gcs + +import ( + "bytes" + "fmt" + "io" + "sort" + + "github.com/aead/siphash" + "github.com/btcsuite/btcd/wire" + "github.com/kkdai/bstream" +) + +// Inspired by https://github.com/rasky/gcs + +var ( + // ErrNTooBig signifies that the filter can't handle N items. + ErrNTooBig = fmt.Errorf("N is too big to fit in uint32") + + // ErrPTooBig signifies that the filter can't handle `1/2**P` + // collision probability. + ErrPTooBig = fmt.Errorf("P is too big to fit in uint32") +) + +const ( + // KeySize is the size of the byte array required for key material for + // the SipHash keyed hash function. + KeySize = 16 + + // varIntProtoVer is the protocol version to use for serializing N as a + // VarInt. + varIntProtoVer uint32 = 0 +) + +// fastReduction calculates a mapping that's more ore less equivalent to: x mod +// N. However, instead of using a mod operation, which using a non-power of two +// will lead to slowness on many processors due to unnecessary division, we +// instead use a "multiply-and-shift" trick which eliminates all divisions, +// described in: +// https://lemire.me/blog/2016/06/27/a-fast-alternative-to-the-modulo-reduction/ +// +// * v * N >> log_2(N) +// +// In our case, using 64-bit integers, log_2 is 64. As most processors don't +// support 128-bit arithmetic natively, we'll be super portable and unfold the +// operation into several operations with 64-bit arithmetic. As inputs, we the +// number to reduce, and our modulus N divided into its high 32-bits and lower +// 32-bits. +func fastReduction(v, nHi, nLo uint64) uint64 { + // First, we'll spit the item we need to reduce into its higher and + // lower bits. + vhi := v >> 32 + vlo := uint64(uint32(v)) + + // Then, we distribute multiplication over each part. + vnphi := vhi * nHi + vnpmid := vhi * nLo + npvmid := nHi * vlo + vnplo := vlo * nLo + + // We calculate the carry bit. + carry := (uint64(uint32(vnpmid)) + uint64(uint32(npvmid)) + + (vnplo >> 32)) >> 32 + + // Last, we add the high bits, the middle bits, and the carry. + v = vnphi + (vnpmid >> 32) + (npvmid >> 32) + carry + + return v +} + +// Filter describes an immutable filter that can be built from a set of data +// elements, serialized, deserialized, and queried in a thread-safe manner. The +// serialized form is compressed as a Golomb Coded Set (GCS), but does not +// include N or P to allow the user to encode the metadata separately if +// necessary. The hash function used is SipHash, a keyed function; the key used +// in building the filter is required in order to match filter values and is +// not included in the serialized form. +type Filter struct { + n uint32 + p uint8 + modulusNP uint64 + + filterData []byte +} + +// BuildGCSFilter builds a new GCS filter with the collision probability of +// `1/(2**P)`, key `key`, and including every `[]byte` in `data` as a member of +// the set. +func BuildGCSFilter(P uint8, M uint64, key [KeySize]byte, data [][]byte) (*Filter, error) { // nolint:gocritic + // Some initial parameter checks: make sure we have data from which to + // build the filter, and make sure our parameters will fit the hash + // function we're using. + if uint64(len(data)) >= (1 << 32) { + return nil, ErrNTooBig + } + if P > 32 { + return nil, ErrPTooBig + } + + // Create the filter object and insert metadata. + f := Filter{ + n: uint32(len(data)), + p: P, + } + + // First we'll compute the value of m, which is the modulus we use + // within our finite field. We want to compute: mScalar * 2^P. We use + // math.Round in order to round the value up, rather than down. + f.modulusNP = uint64(f.n) * M + + // Shortcut if the filter is empty. + if f.n == 0 { + return &f, nil + } + + // Build the filter. + values := make([]uint64, 0, len(data)) + b := bstream.NewBStreamWriter(0) + + // Insert the hash (fast-ranged over a space of N*P) of each data + // element into a slice and sort the slice. This can be greatly + // optimized with native 128-bit multiplication, but we're going to be + // fully portable for now. + // + // First, we cache the high and low bits of modulusNP for the + // multiplication of 2 64-bit integers into a 128-bit integer. + nphi := f.modulusNP >> 32 + nplo := uint64(uint32(f.modulusNP)) + for _, d := range data { + // For each datum, we assign the initial hash to a uint64. + v := siphash.Sum64(d, &key) + + v = fastReduction(v, nphi, nplo) + values = append(values, v) + } + sort.Slice(values, func(i, j int) bool { return values[i] < values[j] }) + + // Write the sorted list of values into the filter bitstream, + // compressing it using Golomb coding. + var value, lastValue, remainder uint64 + for _, v := range values { + // Calculate the difference between this value and the last, + // modulo P. + remainder = (v - lastValue) & ((uint64(1) << f.p) - 1) + + // Calculate the difference between this value and the last, + // divided by P. + value = (v - lastValue - remainder) >> f.p + lastValue = v + + // Write the P multiple into the bitstream in unary; the + // average should be around 1 (2 bits - 0b10). + for value > 0 { + b.WriteBit(true) + value-- + } + b.WriteBit(false) + + // Write the remainder as a big-endian integer with enough bits + // to represent the appropriate collision probability. + b.WriteBits(remainder, int(f.p)) + } + + // Copy the bitstream into the filter object and return the object. + f.filterData = b.Bytes() + + return &f, nil +} + +// FromBytes deserializes a GCS filter from a known N, P, and serialized filter +// as returned by Bytes(). +func FromBytes(N uint32, P uint8, M uint64, d []byte) (*Filter, error) { // nolint:gocritic + // Basic sanity check. + if P > 32 { + return nil, ErrPTooBig + } + + // Create the filter object and insert metadata. + f := &Filter{ + n: N, + p: P, + } + + // First we'll compute the value of m, which is the modulus we use + // within our finite field. We want to compute: mScalar * 2^P. We use + // math.Round in order to round the value up, rather than down. + f.modulusNP = uint64(f.n) * M + + // Copy the filter. + f.filterData = make([]byte, len(d)) + copy(f.filterData, d) + + return f, nil +} + +// FromNBytes deserializes a GCS filter from a known P, and serialized N and +// filter as returned by NBytes(). +func FromNBytes(P uint8, M uint64, d []byte) (*Filter, error) { // nolint:gocritic + buffer := bytes.NewBuffer(d) + N, err := wire.ReadVarInt(buffer, varIntProtoVer) + if err != nil { + return nil, err + } + if N >= (1 << 32) { + return nil, ErrNTooBig + } + return FromBytes(uint32(N), P, M, buffer.Bytes()) +} + +// Bytes returns the serialized format of the GCS filter, which does not +// include N or P (returned by separate methods) or the key used by SipHash. +func (f *Filter) Bytes() ([]byte, error) { + filterData := make([]byte, len(f.filterData)) + copy(filterData, f.filterData) + return filterData, nil +} + +// NBytes returns the serialized format of the GCS filter with N, which does +// not include P (returned by a separate method) or the key used by SipHash. +func (f *Filter) NBytes() ([]byte, error) { + var buffer bytes.Buffer + buffer.Grow(wire.VarIntSerializeSize(uint64(f.n)) + len(f.filterData)) + + err := wire.WriteVarInt(&buffer, varIntProtoVer, uint64(f.n)) + if err != nil { + return nil, err + } + + _, err = buffer.Write(f.filterData) + if err != nil { + return nil, err + } + + return buffer.Bytes(), nil +} + +// PBytes returns the serialized format of the GCS filter with P, which does +// not include N (returned by a separate method) or the key used by SipHash. +func (f *Filter) PBytes() ([]byte, error) { + filterData := make([]byte, len(f.filterData)+1) + filterData[0] = f.p + copy(filterData[1:], f.filterData) + return filterData, nil +} + +// NPBytes returns the serialized format of the GCS filter with N and P, which +// does not include the key used by SipHash. +func (f *Filter) NPBytes() ([]byte, error) { + var buffer bytes.Buffer + buffer.Grow(wire.VarIntSerializeSize(uint64(f.n)) + 1 + len(f.filterData)) + + err := wire.WriteVarInt(&buffer, varIntProtoVer, uint64(f.n)) + if err != nil { + return nil, err + } + + err = buffer.WriteByte(f.p) + if err != nil { + return nil, err + } + + _, err = buffer.Write(f.filterData) + if err != nil { + return nil, err + } + + return buffer.Bytes(), nil +} + +// P returns the filter's collision probability as a negative power of 2 (that +// is, a collision probability of `1/2**20` is represented as 20). +func (f *Filter) P() uint8 { + return f.p +} + +// N returns the size of the data set used to build the filter. +func (f *Filter) N() uint32 { + return f.n +} + +// Match checks whether a []byte value is likely (within collision probability) +// to be a member of the set represented by the filter. +func (f *Filter) Match(key [KeySize]byte, data []byte) (bool, error) { + // Create a filter bitstream. + filterData, err := f.Bytes() + if err != nil { + return false, err + } + + b := bstream.NewBStreamReader(filterData) + + // We take the high and low bits of modulusNP for the multiplication + // of 2 64-bit integers into a 128-bit integer. + nphi := f.modulusNP >> 32 + nplo := uint64(uint32(f.modulusNP)) + + // Then we hash our search term with the same parameters as the filter. + term := siphash.Sum64(data, &key) + term = fastReduction(term, nphi, nplo) + + // Go through the search filter and look for the desired value. + var value uint64 + for i := uint32(0); i < f.N(); i++ { + // Read the difference between previous and new value from + // bitstream. + delta, err := f.readFullUint64(b) + if err != nil { + if err == io.EOF { + return false, nil + } + return false, err + } + + // Add the delta to the previous value. + value += delta + switch { + + // The current value matches our query term, success. + case value == term: + return true, nil + + // The current value is greater than our query term, thus no + // future decoded value can match because the values + // monotonically increase. + case value > term: + return false, nil + } + } + + // All values were decoded and none produced a successful match. This + // indicates that the items in the filter were all smaller than our + // target. + return false, nil +} + +// MatchAny returns checks whether any []byte value is likely (within collision +// probability) to be a member of the set represented by the filter faster than +// calling Match() for each value individually. +func (f *Filter) MatchAny(key [KeySize]byte, data [][]byte) (bool, error) { + // TODO(conner): add real heuristics to query optimization + switch { + + case len(data) >= int(f.N()/2): + return f.HashMatchAny(key, data) + + default: + return f.ZipMatchAny(key, data) + } +} + +// ZipMatchAny returns checks whether any []byte value is likely (within +// collision probability) to be a member of the set represented by the filter +// faster than calling Match() for each value individually. +// +// NOTE: This method should outperform HashMatchAny when the number of query +// entries is smaller than the number of filter entries. +func (f *Filter) ZipMatchAny(key [KeySize]byte, data [][]byte) (bool, error) { + // Basic anity check. + if len(data) == 0 { + return false, nil + } + + // Create a filter bitstream. + filterData, err := f.Bytes() + if err != nil { + return false, err + } + + b := bstream.NewBStreamReader(filterData) + + // Create an uncompressed filter of the search values. + values := make([]uint64, 0, len(data)) + + // First, we cache the high and low bits of modulusNP for the + // multiplication of 2 64-bit integers into a 128-bit integer. + nphi := f.modulusNP >> 32 + nplo := uint64(uint32(f.modulusNP)) + for _, d := range data { + // For each datum, we assign the initial hash to a uint64. + v := siphash.Sum64(d, &key) + + // We'll then reduce the value down to the range of our + // modulus. + v = fastReduction(v, nphi, nplo) + values = append(values, v) + } + sort.Slice(values, func(i, j int) bool { return values[i] < values[j] }) + + querySize := len(values) + + // Zip down the filters, comparing values until we either run out of + // values to compare in one of the filters or we reach a matching + // value. + var ( + value uint64 + queryIndex int + ) +out: + for i := uint32(0); i < f.N(); i++ { + // Advance filter we're searching or return false if we're at + // the end because nothing matched. + delta, err := f.readFullUint64(b) + if err != nil { + if err == io.EOF { + return false, nil + } + return false, err + } + value += delta + + for { + switch { + + // All query items have been exhausted and we haven't + // had a match, therefore there are no matches. + case queryIndex == querySize: + return false, nil + + // The current item in the query matches the decoded + // value, success. + case values[queryIndex] == value: + return true, nil + + // The current item in the query is greater than the + // current decoded value, continue to decode the next + // delta and try again. + case values[queryIndex] > value: + continue out + } + + queryIndex++ + } + } + + // All items in the filter were decoded and none produced a successful + // match. + return false, nil +} + +// HashMatchAny returns checks whether any []byte value is likely (within +// collision probability) to be a member of the set represented by the filter +// faster than calling Match() for each value individually. +// +// NOTE: This method should outperform MatchAny if the number of query entries +// approaches the number of filter entries, len(data) >= f.N(). +func (f *Filter) HashMatchAny(key [KeySize]byte, data [][]byte) (bool, error) { + // Basic sanity check. + if len(data) == 0 { + return false, nil + } + + // Create a filter bitstream. + filterData, err := f.Bytes() + if err != nil { + return false, err + } + + b := bstream.NewBStreamReader(filterData) + + var ( + values = make(map[uint32]struct{}, f.N()) + lastValue uint64 + ) + + // First, decompress the filter and construct an index of the keys + // contained within the filter. Index construction terminates after all + // values have been read from the bitstream. + for { + // Read the next diff value from the filter, add it to the + // last value, and set the new value in the index. + value, err := f.readFullUint64(b) + if err == nil { + lastValue += value + values[uint32(lastValue)] = struct{}{} + continue + } else if err == io.EOF { + break + } + + return false, err + } + + // We cache the high and low bits of modulusNP for the multiplication of + // 2 64-bit integers into a 128-bit integer. + nphi := f.modulusNP >> 32 + nplo := uint64(uint32(f.modulusNP)) + + // Finally, run through the provided data items, querying the index to + // determine if the filter contains any elements of interest. + for _, d := range data { + // For each datum, we assign the initial hash to + // a uint64. + v := siphash.Sum64(d, &key) + + // We'll then reduce the value down to the range + // of our modulus. + v = fastReduction(v, nphi, nplo) + + if _, ok := values[uint32(v)]; !ok { + continue + } + + return true, nil + } + + return false, nil +} + +// readFullUint64 reads a value represented by the sum of a unary multiple of +// the filter's P modulus (`2**P`) and a big-endian P-bit remainder. +func (f *Filter) readFullUint64(b *bstream.BStream) (uint64, error) { + var quotient uint64 + + // Count the 1s until we reach a 0. + c, err := b.ReadBit() + if err != nil { + return 0, err + } + for c { + quotient++ + c, err = b.ReadBit() + if err != nil { + return 0, err + } + } + + // Read P bits. + remainder, err := b.ReadBits(int(f.p)) + if err != nil { + return 0, err + } + + // Add the multiple and the remainder. + v := (quotient << f.p) + remainder + return v, nil +} diff --git a/btcutil/gcs/gcs_test.go b/btcutil/gcs/gcs_test.go new file mode 100644 index 0000000000..8ae49f0507 --- /dev/null +++ b/btcutil/gcs/gcs_test.go @@ -0,0 +1,368 @@ +// Copyright (c) 2016-2017 The btcsuite developers +// Copyright (c) 2016-2017 The Lightning Network Developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package gcs_test + +import ( + "bytes" + "encoding/binary" + "math/rand" + "testing" + + "github.com/btcsuite/btcd/btcutil/gcs" +) + +var ( + // No need to allocate an err variable in every test + err error + + // Collision probability for the tests (1/2**19) + P = uint8(19) + + // Modulus value for the tests. + M uint64 = 784931 + + // Filters are conserved between tests but we must define with an + // interface which functions we're testing because the gcsFilter type + // isn't exported + filter, filter2, filter3 *gcs.Filter + + // We need to use the same key for building and querying the filters + key [gcs.KeySize]byte + + // List of values for building a filter + contents = [][]byte{ + []byte("Alex"), + []byte("Bob"), + []byte("Charlie"), + []byte("Dick"), + []byte("Ed"), + []byte("Frank"), + []byte("George"), + []byte("Harry"), + []byte("Ilya"), + []byte("John"), + []byte("Kevin"), + []byte("Larry"), + []byte("Michael"), + []byte("Nate"), + []byte("Owen"), + []byte("Paul"), + []byte("Quentin"), + } + + // List of values for querying a filter using MatchAny() + contents2 = [][]byte{ + []byte("Alice"), + []byte("Betty"), + []byte("Charmaine"), + []byte("Donna"), + []byte("Edith"), + []byte("Faina"), + []byte("Georgia"), + []byte("Hannah"), + []byte("Ilsbeth"), + []byte("Jennifer"), + []byte("Kayla"), + []byte("Lena"), + []byte("Michelle"), + []byte("Natalie"), + []byte("Ophelia"), + []byte("Peggy"), + []byte("Queenie"), + } +) + +// TestGCSFilterBuild builds a test filter with a randomized key. For Bitcoin +// use, deterministic filter generation is desired. Therefore, a key that's +// derived deterministically would be required. +func TestGCSFilterBuild(t *testing.T) { + for i := 0; i < gcs.KeySize; i += 4 { + binary.BigEndian.PutUint32(key[i:], rand.Uint32()) + } + filter, err = gcs.BuildGCSFilter(P, M, key, contents) + if err != nil { + t.Fatalf("Filter build failed: %s", err.Error()) + } +} + +// TestGCSMatchZeroHash ensures that Match and MatchAny properly match an item +// if it's hash after the reduction is zero. This is accomplished by brute +// forcing a specific target whose hash is zero given a certain (P, M, key, +// len(elements)) combination. In this case, P and M are the default, key was +// chosen randomly, and len(elements) is 13. The target 4-byte value of 16060032 +// is the first such 32-bit value, thus we use the number 0-11 as the other +// elements in the filter since we know they won't collide. We test both the +// positive and negative cases, when the zero hash item is in the filter and +// when it is excluded. In the negative case, the 32-bit value of 12 is added to +// the filter instead of the target. +func TestGCSMatchZeroHash(t *testing.T) { + t.Run("include zero", func(t *testing.T) { + testGCSMatchZeroHash(t, true) + }) + t.Run("exclude zero", func(t *testing.T) { + testGCSMatchZeroHash(t, false) + }) +} + +func testGCSMatchZeroHash(t *testing.T, includeZeroHash bool) { + key := [gcs.KeySize]byte{ + 0x25, 0x28, 0x0d, 0x25, 0x26, 0xe1, 0xd3, 0xc7, + 0xa5, 0x71, 0x85, 0x34, 0x92, 0xa5, 0x7e, 0x68, + } + + // Construct the target data to match, whose hash is zero after applying + // the reduction with the parameters in the test. + target := make([]byte, 4) + binary.BigEndian.PutUint32(target, 16060032) + + // Construct the set of 13 items including the target, using the 32-bit + // values of 0 through 11 as the first 12 items. We known none of these + // hash to zero since the brute force ended well beyond them. + elements := make([][]byte, 0, 13) + for i := 0; i < 12; i++ { + data := make([]byte, 4) + binary.BigEndian.PutUint32(data, uint32(i)) + elements = append(elements, data) + } + + // If the filter should include the zero hash element, add the target + // which we know hashes to zero. Otherwise add 32-bit value of 12 which + // we know does not hash to zero. + if includeZeroHash { + elements = append(elements, target) + } else { + data := make([]byte, 4) + binary.BigEndian.PutUint32(data, 12) + elements = append(elements, data) + } + + filter, err := gcs.BuildGCSFilter(P, M, key, elements) + if err != nil { + t.Fatalf("unable to build filter: %v", err) + } + + match, err := filter.Match(key, target) + if err != nil { + t.Fatalf("unable to match: %v", err) + } + + // We should only get a match iff the target was included. + if match != includeZeroHash { + t.Fatalf("expected match from Match: %t, got %t", + includeZeroHash, match) + } + + match, err = filter.MatchAny(key, [][]byte{target}) + if err != nil { + t.Fatalf("unable to match any: %v", err) + } + + // We should only get a match iff the target was included. + if match != includeZeroHash { + t.Fatalf("expected match from MatchAny: %t, got %t", + includeZeroHash, match) + } +} + +// TestGCSFilterCopy deserializes and serializes a filter to create a copy. +func TestGCSFilterCopy(t *testing.T) { + serialized2, err := filter.Bytes() + if err != nil { + t.Fatalf("Filter Bytes() failed: %v", err) + } + filter2, err = gcs.FromBytes(filter.N(), P, M, serialized2) + if err != nil { + t.Fatalf("Filter copy failed: %s", err.Error()) + } + serialized3, err := filter.NBytes() + if err != nil { + t.Fatalf("Filter NBytes() failed: %v", err) + } + filter3, err = gcs.FromNBytes(filter.P(), M, serialized3) + if err != nil { + t.Fatalf("Filter copy failed: %s", err.Error()) + } +} + +// TestGCSFilterMetadata checks that the filter metadata is built and copied +// correctly. +func TestGCSFilterMetadata(t *testing.T) { + if filter.P() != P { + t.Fatal("P not correctly stored in filter metadata") + } + if filter.N() != uint32(len(contents)) { + t.Fatal("N not correctly stored in filter metadata") + } + if filter.P() != filter2.P() { + t.Fatal("P doesn't match between copied filters") + } + if filter.P() != filter3.P() { + t.Fatal("P doesn't match between copied filters") + } + if filter.N() != filter2.N() { + t.Fatal("N doesn't match between copied filters") + } + if filter.N() != filter3.N() { + t.Fatal("N doesn't match between copied filters") + } + serialized, err := filter.Bytes() + if err != nil { + t.Fatalf("Filter Bytes() failed: %v", err) + } + serialized2, err := filter2.Bytes() + if err != nil { + t.Fatalf("Filter Bytes() failed: %v", err) + } + if !bytes.Equal(serialized, serialized2) { + t.Fatal("Bytes don't match between copied filters") + } + serialized3, err := filter3.Bytes() + if err != nil { + t.Fatalf("Filter Bytes() failed: %v", err) + } + if !bytes.Equal(serialized, serialized3) { + t.Fatal("Bytes don't match between copied filters") + } + serialized4, err := filter3.Bytes() + if err != nil { + t.Fatalf("Filter Bytes() failed: %v", err) + } + if !bytes.Equal(serialized, serialized4) { + t.Fatal("Bytes don't match between copied filters") + } +} + +// TestGCSFilterMatch checks that both the built and copied filters match +// correctly, logging any false positives without failing on them. +func TestGCSFilterMatch(t *testing.T) { + match, err := filter.Match(key, []byte("Nate")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + match, err = filter2.Match(key, []byte("Nate")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + match, err = filter.Match(key, []byte("Quentin")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + match, err = filter2.Match(key, []byte("Quentin")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if !match { + t.Fatal("Filter didn't match when it should have!") + } + match, err = filter.Match(key, []byte("Nates")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if match { + t.Logf("False positive match, should be 1 in 2**%d!", P) + } + match, err = filter2.Match(key, []byte("Nates")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if match { + t.Logf("False positive match, should be 1 in 2**%d!", P) + } + match, err = filter.Match(key, []byte("Quentins")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if match { + t.Logf("False positive match, should be 1 in 2**%d!", P) + } + match, err = filter2.Match(key, []byte("Quentins")) + if err != nil { + t.Fatalf("Filter match failed: %s", err.Error()) + } + if match { + t.Logf("False positive match, should be 1 in 2**%d!", P) + } +} + +// AnyMatcher is the function signature of our matching algorithms. +type AnyMatcher func(key [gcs.KeySize]byte, data [][]byte) (bool, error) + +// TestGCSFilterMatchAnySuite checks that all of our matching algorithms +// properly match a list correctly when using built or copied filters, logging +// any false positives without failing on them. +func TestGCSFilterMatchAnySuite(t *testing.T) { + funcs := []struct { + name string + matchAny func(*gcs.Filter) AnyMatcher + }{ + { + "default", + func(f *gcs.Filter) AnyMatcher { + return f.MatchAny + }, + }, + { + "hash", + func(f *gcs.Filter) AnyMatcher { + return f.HashMatchAny + }, + }, + { + "zip", + func(f *gcs.Filter) AnyMatcher { + return f.ZipMatchAny + }, + }, + } + + for _, test := range funcs { + test := test + + t.Run(test.name, func(t *testing.T) { + contentsCopy := make([][]byte, len(contents2)) + copy(contentsCopy, contents2) + + match, err := test.matchAny(filter)(key, contentsCopy) + if err != nil { + t.Fatalf("Filter match any failed: %s", err.Error()) + } + if match { + t.Logf("False positive match, should be 1 in 2**%d!", P) + } + match, err = test.matchAny(filter2)(key, contentsCopy) + if err != nil { + t.Fatalf("Filter match any failed: %s", err.Error()) + } + if match { + t.Logf("False positive match, should be 1 in 2**%d!", P) + } + contentsCopy = append(contentsCopy, []byte("Nate")) + match, err = test.matchAny(filter)(key, contentsCopy) + if err != nil { + t.Fatalf("Filter match any failed: %s", err.Error()) + } + if !match { + t.Fatal("Filter didn't match any when it should have!") + } + match, err = test.matchAny(filter2)(key, contentsCopy) + if err != nil { + t.Fatalf("Filter match any failed: %s", err.Error()) + } + if !match { + t.Fatal("Filter didn't match any when it should have!") + } + }) + } +} diff --git a/btcutil/gcs/gcsbench_test.go b/btcutil/gcs/gcsbench_test.go new file mode 100644 index 0000000000..14125a16c0 --- /dev/null +++ b/btcutil/gcs/gcsbench_test.go @@ -0,0 +1,237 @@ +// Copyright (c) 2016-2017 The btcsuite developers +// Copyright (c) 2016-2017 The Lightning Network Developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package gcs_test + +import ( + "encoding/binary" + "math/rand" + "testing" + + "github.com/btcsuite/btcd/btcutil/gcs" +) + +func genRandFilterElements(numElements uint) ([][]byte, error) { + testContents := make([][]byte, numElements) + for i := range testContents { + randElem := make([]byte, 32) + if _, err := rand.Read(randElem); err != nil { + return nil, err + } + testContents[i] = randElem + } + + return testContents, nil +} + +var ( + generatedFilter *gcs.Filter +) + +// BenchmarkGCSFilterBuild benchmarks building a filter. +func BenchmarkGCSFilterBuild50000(b *testing.B) { + var testKey [gcs.KeySize]byte + for i := 0; i < gcs.KeySize; i += 4 { + binary.BigEndian.PutUint32(testKey[i:], rand.Uint32()) + } + + randFilterElems, genErr := genRandFilterElements(50000) + if err != nil { + b.Fatalf("unable to generate random item: %v", genErr) + } + + b.ReportAllocs() + b.ResetTimer() + + var localFilter *gcs.Filter + for i := 0; i < b.N; i++ { + localFilter, err = gcs.BuildGCSFilter( + P, M, key, randFilterElems, + ) + if err != nil { + b.Fatalf("unable to generate filter: %v", err) + } + } + generatedFilter = localFilter +} + +// BenchmarkGCSFilterBuild benchmarks building a filter. +func BenchmarkGCSFilterBuild100000(b *testing.B) { + var testKey [gcs.KeySize]byte + for i := 0; i < gcs.KeySize; i += 4 { + binary.BigEndian.PutUint32(testKey[i:], rand.Uint32()) + } + + randFilterElems, genErr := genRandFilterElements(100000) + if err != nil { + b.Fatalf("unable to generate random item: %v", genErr) + } + + b.ReportAllocs() + b.ResetTimer() + + var localFilter *gcs.Filter + for i := 0; i < b.N; i++ { + localFilter, err = gcs.BuildGCSFilter( + P, M, key, randFilterElems, + ) + if err != nil { + b.Fatalf("unable to generate filter: %v", err) + } + } + generatedFilter = localFilter +} + +var ( + match bool +) + +// BenchmarkGCSFilterMatch benchmarks querying a filter for a single value. +func BenchmarkGCSFilterMatch(b *testing.B) { + filter, err := gcs.BuildGCSFilter(P, M, key, contents) + if err != nil { + b.Fatalf("Failed to build filter") + } + + b.ReportAllocs() + b.ResetTimer() + + var localMatch bool + for i := 0; i < b.N; i++ { + _, err = filter.Match(key, []byte("Nate")) + if err != nil { + b.Fatalf("unable to match filter: %v", err) + } + + localMatch, err = filter.Match(key, []byte("Nates")) + if err != nil { + b.Fatalf("unable to match filter: %v", err) + } + } + match = localMatch +} + +var ( + randElems100, _ = genRandFilterElements(100) + randElems1000, _ = genRandFilterElements(1000) + randElems10000, _ = genRandFilterElements(10000) + randElems100000, _ = genRandFilterElements(100000) + randElems1000000, _ = genRandFilterElements(1000000) + randElems10000000, _ = genRandFilterElements(10000000) + + filterElems1000, _ = genRandFilterElements(1000) + filter1000, _ = gcs.BuildGCSFilter(P, M, key, filterElems1000) + filterElems5000, _ = genRandFilterElements(5000) + filter5000, _ = gcs.BuildGCSFilter(P, M, key, filterElems5000) + filterElems10000, _ = genRandFilterElements(10000) + filter10000, _ = gcs.BuildGCSFilter(P, M, key, filterElems10000) +) + +// matchAnyBenchmarks contains combinations of random filters and queries used +// to measure performance of various MatchAny implementations. +var matchAnyBenchmarks = []struct { + name string + query [][]byte + filter *gcs.Filter +}{ + {"q100-f1K", randElems100, filter1000}, + {"q1K-f1K", randElems1000, filter1000}, + {"q10K-f1K", randElems10000, filter1000}, + {"q100K-f1K", randElems100000, filter1000}, + {"q1M-f1K", randElems1000000, filter1000}, + {"q10M-f1K", randElems10000000, filter1000}, + + {"q100-f5K", randElems100, filter5000}, + {"q1K-f5K", randElems1000, filter5000}, + {"q10K-f5K", randElems10000, filter5000}, + {"q100K-f5K", randElems100000, filter5000}, + {"q1M-f5K", randElems1000000, filter5000}, + {"q10M-f5K", randElems10000000, filter5000}, + + {"q100-f10K", randElems100, filter10000}, + {"q1K-f10K", randElems1000, filter10000}, + {"q10K-f10K", randElems10000, filter10000}, + {"q100K-f10K", randElems100000, filter10000}, + {"q1M-f10K", randElems1000000, filter10000}, + {"q10M-f10K", randElems10000000, filter10000}, +} + +// BenchmarkGCSFilterMatchAny benchmarks the sort-and-zip MatchAny impl. +func BenchmarkGCSFilterZipMatchAny(b *testing.B) { + for _, test := range matchAnyBenchmarks { + test := test + + b.Run(test.name, func(b *testing.B) { + b.ReportAllocs() + + var ( + localMatch bool + err error + ) + + for i := 0; i < b.N; i++ { + localMatch, err = test.filter.ZipMatchAny( + key, test.query, + ) + if err != nil { + b.Fatalf("unable to match filter: %v", err) + } + } + match = localMatch + }) + } +} + +// BenchmarkGCSFilterMatchAny benchmarks the hash-join MatchAny impl. +func BenchmarkGCSFilterHashMatchAny(b *testing.B) { + for _, test := range matchAnyBenchmarks { + test := test + + b.Run(test.name, func(b *testing.B) { + b.ReportAllocs() + + var ( + localMatch bool + err error + ) + + for i := 0; i < b.N; i++ { + localMatch, err = test.filter.HashMatchAny( + key, test.query, + ) + if err != nil { + b.Fatalf("unable to match filter: %v", err) + } + } + match = localMatch + }) + } +} + +// BenchmarkGCSFilterMatchAny benchmarks the hybrid MatchAny impl. +func BenchmarkGCSFilterMatchAny(b *testing.B) { + for _, test := range matchAnyBenchmarks { + test := test + + b.Run(test.name, func(b *testing.B) { + b.ReportAllocs() + + var ( + localMatch bool + err error + ) + + for i := 0; i < b.N; i++ { + localMatch, err = test.filter.MatchAny( + key, test.query, + ) + if err != nil { + b.Fatalf("unable to match filter: %v", err) + } + } + match = localMatch + }) + } +} diff --git a/btcutil/go.mod b/btcutil/go.mod new file mode 100644 index 0000000000..b03318a461 --- /dev/null +++ b/btcutil/go.mod @@ -0,0 +1,16 @@ +module github.com/btcsuite/btcd/btcutil + +go 1.16 + +require ( + github.com/aead/siphash v1.0.1 + github.com/btcsuite/btcd v0.23.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.3 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 + github.com/davecgh/go-spew v1.1.1 + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 + github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 +) + +replace github.com/btcsuite/btcd => ../ diff --git a/btcutil/go.sum b/btcutil/go.sum new file mode 100644 index 0000000000..8d35bdaf86 --- /dev/null +++ b/btcutil/go.sum @@ -0,0 +1,91 @@ +github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd/btcec/v2 v2.1.0/go.mod h1:2VzYrv4Gm4apmbVVsSq5bqf1Ec8v56E48Vt0Y/umPgA= +github.com/btcsuite/btcd/btcec/v2 v2.1.3 h1:xM/n3yIhHAhHy04z4i43C8p4ehixJZMsnrVJkgl+MTE= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/btcutil v1.1.0/go.mod h1:5OapHB7A2hBBWLm48mmw4MOHNJCcUBTwmWH/0Jn8VHE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/btcutil/hash160.go b/btcutil/hash160.go new file mode 100644 index 0000000000..fa26e09bf9 --- /dev/null +++ b/btcutil/hash160.go @@ -0,0 +1,23 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "crypto/sha256" + "hash" + + "golang.org/x/crypto/ripemd160" +) + +// Calculate the hash of hasher over buf. +func calcHash(buf []byte, hasher hash.Hash) []byte { + _, _ = hasher.Write(buf) + return hasher.Sum(nil) +} + +// Hash160 calculates the hash ripemd160(sha256(b)). +func Hash160(buf []byte) []byte { + return calcHash(calcHash(buf, sha256.New()), ripemd160.New()) +} diff --git a/btcutil/hdkeychain/README.md b/btcutil/hdkeychain/README.md new file mode 100644 index 0000000000..eaf57d7c58 --- /dev/null +++ b/btcutil/hdkeychain/README.md @@ -0,0 +1,59 @@ +hdkeychain +========== + +[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/btcutil/hdkeychain) + +Package hdkeychain provides an API for bitcoin hierarchical deterministic +extended keys (BIP0032). + +A comprehensive suite of tests is provided to ensure proper functionality. See +`test_coverage.txt` for the gocov coverage report. Alternatively, if you are +running a POSIX OS, you can run the `cov_report.sh` script for a real-time +report. + +## Feature Overview + +- Full BIP0032 implementation +- Single type for private and public extended keys +- Convenient cryptograpically secure seed generation +- Simple creation of master nodes +- Support for multi-layer derivation +- Easy serialization and deserialization for both private and public extended + keys +- Support for custom networks by registering them with chaincfg +- Obtaining the underlying EC pubkeys, EC privkeys, and associated bitcoin + addresses ties in seamlessly with existing btcec and btcutil types which + provide powerful tools for working with them to do things like sign + transations and generate payment scripts +- Uses the btcec package which is highly optimized for secp256k1 +- Code examples including: + - Generating a cryptographically secure random seed and deriving a + master node from it + - Default HD wallet layout as described by BIP0032 + - Audits use case as described by BIP0032 +- Comprehensive test coverage including the BIP0032 test vectors +- Benchmarks + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil/hdkeychain +``` + +## Examples + +* [NewMaster Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/hdkeychain#example-NewMaster) + Demonstrates how to generate a cryptographically random seed then use it to + create a new master node (extended key). +* [Default Wallet Layout Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/hdkeychain#example-package--DefaultWalletLayout) + Demonstrates the default hierarchical deterministic wallet layout as described + in BIP0032. +* [Audits Use Case Example](http://godoc.org/github.com/btcsuite/btcd/btcutil/hdkeychain#example-package--Audits) + Demonstrates the audits use case in BIP0032. + +## License + +Package hdkeychain is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/hdkeychain/bench_test.go b/btcutil/hdkeychain/bench_test.go new file mode 100644 index 0000000000..285ef3e8d6 --- /dev/null +++ b/btcutil/hdkeychain/bench_test.go @@ -0,0 +1,84 @@ +// Copyright (c) 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package hdkeychain_test + +import ( + "testing" + + "github.com/btcsuite/btcd/btcutil/hdkeychain" +) + +// bip0032MasterPriv1 is the master private extended key from the first set of +// test vectors in BIP0032. +const bip0032MasterPriv1 = "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbP" + + "y6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi" + +// BenchmarkDeriveHardened benchmarks how long it takes to derive a hardened +// child from a master private extended key. +func BenchmarkDeriveHardened(b *testing.B) { + b.StopTimer() + masterKey, err := hdkeychain.NewKeyFromString(bip0032MasterPriv1) + if err != nil { + b.Errorf("Failed to decode master seed: %v", err) + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + _, _ = masterKey.Derive(hdkeychain.HardenedKeyStart) + } +} + +// BenchmarkDeriveNormal benchmarks how long it takes to derive a normal +// (non-hardened) child from a master private extended key. +func BenchmarkDeriveNormal(b *testing.B) { + b.StopTimer() + masterKey, err := hdkeychain.NewKeyFromString(bip0032MasterPriv1) + if err != nil { + b.Errorf("Failed to decode master seed: %v", err) + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + _, _ = masterKey.Derive(0) + } +} + +// BenchmarkPrivToPub benchmarks how long it takes to convert a private extended +// key to a public extended key. +func BenchmarkPrivToPub(b *testing.B) { + b.StopTimer() + masterKey, err := hdkeychain.NewKeyFromString(bip0032MasterPriv1) + if err != nil { + b.Errorf("Failed to decode master seed: %v", err) + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + _, _ = masterKey.Neuter() + } +} + +// BenchmarkDeserialize benchmarks how long it takes to deserialize a private +// extended key. +func BenchmarkDeserialize(b *testing.B) { + for i := 0; i < b.N; i++ { + _, _ = hdkeychain.NewKeyFromString(bip0032MasterPriv1) + } +} + +// BenchmarkSerialize benchmarks how long it takes to serialize a private +// extended key. +func BenchmarkSerialize(b *testing.B) { + b.StopTimer() + masterKey, err := hdkeychain.NewKeyFromString(bip0032MasterPriv1) + if err != nil { + b.Errorf("Failed to decode master seed: %v", err) + } + b.StartTimer() + + for i := 0; i < b.N; i++ { + _ = masterKey.String() + } +} diff --git a/btcutil/hdkeychain/cov_report.sh b/btcutil/hdkeychain/cov_report.sh new file mode 100644 index 0000000000..307f05b76c --- /dev/null +++ b/btcutil/hdkeychain/cov_report.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +# This script uses gocov to generate a test coverage report. +# The gocov tool my be obtained with the following command: +# go get github.com/axw/gocov/gocov +# +# It will be installed to $GOPATH/bin, so ensure that location is in your $PATH. + +# Check for gocov. +type gocov >/dev/null 2>&1 +if [ $? -ne 0 ]; then + echo >&2 "This script requires the gocov tool." + echo >&2 "You may obtain it with the following command:" + echo >&2 "go get github.com/axw/gocov/gocov" + exit 1 +fi +gocov test | gocov report diff --git a/btcutil/hdkeychain/doc.go b/btcutil/hdkeychain/doc.go new file mode 100644 index 0000000000..dcf74f6b51 --- /dev/null +++ b/btcutil/hdkeychain/doc.go @@ -0,0 +1,84 @@ +// Copyright (c) 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package hdkeychain provides an API for bitcoin hierarchical deterministic +extended keys (BIP0032). + +Overview + +The ability to implement hierarchical deterministic wallets depends on the +ability to create and derive hierarchical deterministic extended keys. + +At a high level, this package provides support for those hierarchical +deterministic extended keys by providing an ExtendedKey type and supporting +functions. Each extended key can either be a private or public extended key +which itself is capable of deriving a child extended key. + +Determining the Extended Key Type + +Whether an extended key is a private or public extended key can be determined +with the IsPrivate function. + +Transaction Signing Keys and Payment Addresses + +In order to create and sign transactions, or provide others with addresses to +send funds to, the underlying key and address material must be accessible. This +package provides the ECPubKey, ECPrivKey, and Address functions for this +purpose. + +The Master Node + +As previously mentioned, the extended keys are hierarchical meaning they are +used to form a tree. The root of that tree is called the master node and this +package provides the NewMaster function to create it from a cryptographically +random seed. The GenerateSeed function is provided as a convenient way to +create a random seed for use with the NewMaster function. + +Deriving Children + +Once you have created a tree root (or have deserialized an extended key as +discussed later), the child extended keys can be derived by using the Derive +function. The Derive function supports deriving both normal (non-hardened) and +hardened child extended keys. In order to derive a hardened extended key, use +the HardenedKeyStart constant + the hardened key number as the index to the +Derive function. This provides the ability to cascade the keys into a tree and +hence generate the hierarchical deterministic key chains. + +Normal vs Hardened Derived Extended Keys + +A private extended key can be used to derive both hardened and non-hardened +(normal) child private and public extended keys. A public extended key can only +be used to derive non-hardened child public extended keys. As enumerated in +BIP0032 "knowledge of the extended public key plus any non-hardened private key +descending from it is equivalent to knowing the extended private key (and thus +every private and public key descending from it). This means that extended +public keys must be treated more carefully than regular public keys. It is also +the reason for the existence of hardened keys, and why they are used for the +account level in the tree. This way, a leak of an account-specific (or below) +private key never risks compromising the master or other accounts." + +Neutering a Private Extended Key + +A private extended key can be converted to a new instance of the corresponding +public extended key with the Neuter function. The original extended key is not +modified. A public extended key is still capable of deriving non-hardened child +public extended keys. + +Serializing and Deserializing Extended Keys + +Extended keys are serialized and deserialized with the String and +NewKeyFromString functions. The serialized key is a Base58-encoded string which +looks like the following: + public key: xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw + private key: xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7 + +Network + +Extended keys are much like normal Bitcoin addresses in that they have version +bytes which tie them to a specific network. The SetNet and IsForNet functions +are provided to set and determinine which network an extended key is associated +with. +*/ +package hdkeychain diff --git a/btcutil/hdkeychain/example_test.go b/btcutil/hdkeychain/example_test.go new file mode 100644 index 0000000000..7489d387a7 --- /dev/null +++ b/btcutil/hdkeychain/example_test.go @@ -0,0 +1,182 @@ +// Copyright (c) 2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package hdkeychain_test + +import ( + "fmt" + + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/btcutil/hdkeychain" +) + +// This example demonstrates how to generate a cryptographically random seed +// then use it to create a new master node (extended key). +func ExampleNewMaster() { + // Generate a random seed at the recommended length. + seed, err := hdkeychain.GenerateSeed(hdkeychain.RecommendedSeedLen) + if err != nil { + fmt.Println(err) + return + } + + // Generate a new master node using the seed. + key, err := hdkeychain.NewMaster(seed, &chaincfg.MainNetParams) + if err != nil { + fmt.Println(err) + return + } + + // Show that the generated master node extended key is private. + fmt.Println("Private Extended Key?:", key.IsPrivate()) + + // Output: + // Private Extended Key?: true +} + +// This example demonstrates the default hierarchical deterministic wallet +// layout as described in BIP0032. +func Example_defaultWalletLayout() { + // The default wallet layout described in BIP0032 is: + // + // Each account is composed of two keypair chains: an internal and an + // external one. The external keychain is used to generate new public + // addresses, while the internal keychain is used for all other + // operations (change addresses, generation addresses, ..., anything + // that doesn't need to be communicated). + // + // * m/iH/0/k + // corresponds to the k'th keypair of the external chain of account + // number i of the HDW derived from master m. + // * m/iH/1/k + // corresponds to the k'th keypair of the internal chain of account + // number i of the HDW derived from master m. + + // Ordinarily this would either be read from some encrypted source + // and be decrypted or generated as the NewMaster example shows, but + // for the purposes of this example, the private extended key for the + // master node is being hard coded here. + master := "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jP" + + "PqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi" + + // Start by getting an extended key instance for the master node. + // This gives the path: + // m + masterKey, err := hdkeychain.NewKeyFromString(master) + if err != nil { + fmt.Println(err) + return + } + + // Derive the extended key for account 0. This gives the path: + // m/0H + acct0, err := masterKey.Derive(hdkeychain.HardenedKeyStart + 0) + if err != nil { + fmt.Println(err) + return + } + + // Derive the extended key for the account 0 external chain. This + // gives the path: + // m/0H/0 + acct0Ext, err := acct0.Derive(0) + if err != nil { + fmt.Println(err) + return + } + + // Derive the extended key for the account 0 internal chain. This gives + // the path: + // m/0H/1 + acct0Int, err := acct0.Derive(1) + if err != nil { + fmt.Println(err) + return + } + + // At this point, acct0Ext and acct0Int are ready to derive the keys for + // the external and internal wallet chains. + + // Derive the 10th extended key for the account 0 external chain. This + // gives the path: + // m/0H/0/10 + acct0Ext10, err := acct0Ext.Derive(10) + if err != nil { + fmt.Println(err) + return + } + + // Derive the 1st extended key for the account 0 internal chain. This + // gives the path: + // m/0H/1/0 + acct0Int0, err := acct0Int.Derive(0) + if err != nil { + fmt.Println(err) + return + } + + // Get and show the address associated with the extended keys for the + // main bitcoin network. + acct0ExtAddr, err := acct0Ext10.Address(&chaincfg.MainNetParams) + if err != nil { + fmt.Println(err) + return + } + acct0IntAddr, err := acct0Int0.Address(&chaincfg.MainNetParams) + if err != nil { + fmt.Println(err) + return + } + fmt.Println("Account 0 External Address 10:", acct0ExtAddr) + fmt.Println("Account 0 Internal Address 0:", acct0IntAddr) + + // Output: + // Account 0 External Address 10: 1HVccubUT8iKTapMJ5AnNA4sLRN27xzQ4F + // Account 0 Internal Address 0: 1J5rebbkQaunJTUoNVREDbeB49DqMNFFXk +} + +// This example demonstrates the audits use case in BIP0032. +func Example_audits() { + // The audits use case described in BIP0032 is: + // + // In case an auditor needs full access to the list of incoming and + // outgoing payments, one can share all account public extended keys. + // This will allow the auditor to see all transactions from and to the + // wallet, in all accounts, but not a single secret key. + // + // * N(m/*) + // corresponds to the neutered master extended key (also called + // the master public extended key) + + // Ordinarily this would either be read from some encrypted source + // and be decrypted or generated as the NewMaster example shows, but + // for the purposes of this example, the private extended key for the + // master node is being hard coded here. + master := "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jP" + + "PqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi" + + // Start by getting an extended key instance for the master node. + // This gives the path: + // m + masterKey, err := hdkeychain.NewKeyFromString(master) + if err != nil { + fmt.Println(err) + return + } + + // Neuter the master key to generate a master public extended key. This + // gives the path: + // N(m/*) + masterPubKey, err := masterKey.Neuter() + if err != nil { + fmt.Println(err) + return + } + + // Share the master public extended key with the auditor. + fmt.Println("Audit key N(m/*):", masterPubKey) + + // Output: + // Audit key N(m/*): xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8 +} diff --git a/btcutil/hdkeychain/extendedkey.go b/btcutil/hdkeychain/extendedkey.go new file mode 100644 index 0000000000..c44e6a18b4 --- /dev/null +++ b/btcutil/hdkeychain/extendedkey.go @@ -0,0 +1,753 @@ +// Copyright (c) 2014-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package hdkeychain + +// References: +// [BIP32]: BIP0032 - Hierarchical Deterministic Wallets +// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki + +import ( + "bytes" + "crypto/hmac" + "crypto/rand" + "crypto/sha512" + "encoding/binary" + "errors" + "fmt" + "math/big" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/base58" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +const ( + // RecommendedSeedLen is the recommended length in bytes for a seed + // to a master node. + RecommendedSeedLen = 32 // 256 bits + + // HardenedKeyStart is the index at which a hardened key starts. Each + // extended key has 2^31 normal child keys and 2^31 hardened child keys. + // Thus the range for normal child keys is [0, 2^31 - 1] and the range + // for hardened child keys is [2^31, 2^32 - 1]. + HardenedKeyStart = 0x80000000 // 2^31 + + // MinSeedBytes is the minimum number of bytes allowed for a seed to + // a master node. + MinSeedBytes = 16 // 128 bits + + // MaxSeedBytes is the maximum number of bytes allowed for a seed to + // a master node. + MaxSeedBytes = 64 // 512 bits + + // serializedKeyLen is the length of a serialized public or private + // extended key. It consists of 4 bytes version, 1 byte depth, 4 bytes + // fingerprint, 4 bytes child number, 32 bytes chain code, and 33 bytes + // public/private key data. + serializedKeyLen = 4 + 1 + 4 + 4 + 32 + 33 // 78 bytes + + // maxUint8 is the max positive integer which can be serialized in a uint8 + maxUint8 = 1<<8 - 1 +) + +var ( + // ErrDeriveHardFromPublic describes an error in which the caller + // attempted to derive a hardened extended key from a public key. + ErrDeriveHardFromPublic = errors.New("cannot derive a hardened key " + + "from a public key") + + // ErrDeriveBeyondMaxDepth describes an error in which the caller + // has attempted to derive more than 255 keys from a root key. + ErrDeriveBeyondMaxDepth = errors.New("cannot derive a key with more than " + + "255 indices in its path") + + // ErrNotPrivExtKey describes an error in which the caller attempted + // to extract a private key from a public extended key. + ErrNotPrivExtKey = errors.New("unable to create private keys from a " + + "public extended key") + + // ErrInvalidChild describes an error in which the child at a specific + // index is invalid due to the derived key falling outside of the valid + // range for secp256k1 private keys. This error indicates the caller + // should simply ignore the invalid child extended key at this index and + // increment to the next index. + ErrInvalidChild = errors.New("the extended key at this index is invalid") + + // ErrUnusableSeed describes an error in which the provided seed is not + // usable due to the derived key falling outside of the valid range for + // secp256k1 private keys. This error indicates the caller must choose + // another seed. + ErrUnusableSeed = errors.New("unusable seed") + + // ErrInvalidSeedLen describes an error in which the provided seed or + // seed length is not in the allowed range. + ErrInvalidSeedLen = fmt.Errorf("seed length must be between %d and %d "+ + "bits", MinSeedBytes*8, MaxSeedBytes*8) + + // ErrBadChecksum describes an error in which the checksum encoded with + // a serialized extended key does not match the calculated value. + ErrBadChecksum = errors.New("bad extended key checksum") + + // ErrInvalidKeyLen describes an error in which the provided serialized + // key is not the expected length. + ErrInvalidKeyLen = errors.New("the provided serialized extended key " + + "length is invalid") +) + +// masterKey is the master key used along with a random seed used to generate +// the master node in the hierarchical tree. +var masterKey = []byte("Bitcoin seed") + +// ExtendedKey houses all the information needed to support a hierarchical +// deterministic extended key. See the package overview documentation for +// more details on how to use extended keys. +type ExtendedKey struct { + key []byte // This will be the pubkey for extended pub keys + pubKey []byte // This will only be set for extended priv keys + chainCode []byte + depth uint8 + parentFP []byte + childNum uint32 + version []byte + isPrivate bool +} + +// NewExtendedKey returns a new instance of an extended key with the given +// fields. No error checking is performed here as it's only intended to be a +// convenience method used to create a populated struct. This function should +// only be used by applications that need to create custom ExtendedKeys. All +// other applications should just use NewMaster, Derive, or Neuter. +func NewExtendedKey(version, key, chainCode, parentFP []byte, depth uint8, + childNum uint32, isPrivate bool) *ExtendedKey { + + // NOTE: The pubKey field is intentionally left nil so it is only + // computed and memoized as required. + return &ExtendedKey{ + key: key, + chainCode: chainCode, + depth: depth, + parentFP: parentFP, + childNum: childNum, + version: version, + isPrivate: isPrivate, + } +} + +// pubKeyBytes returns bytes for the serialized compressed public key associated +// with this extended key in an efficient manner including memoization as +// necessary. +// +// When the extended key is already a public key, the key is simply returned as +// is since it's already in the correct form. However, when the extended key is +// a private key, the public key will be calculated and memoized so future +// accesses can simply return the cached result. +func (k *ExtendedKey) pubKeyBytes() []byte { + // Just return the key if it's already an extended public key. + if !k.isPrivate { + return k.key + } + + // This is a private extended key, so calculate and memoize the public + // key if needed. + if len(k.pubKey) == 0 { + _, pubKey := btcec.PrivKeyFromBytes(k.key) + k.pubKey = pubKey.SerializeCompressed() + } + + return k.pubKey +} + +// IsPrivate returns whether or not the extended key is a private extended key. +// +// A private extended key can be used to derive both hardened and non-hardened +// child private and public extended keys. A public extended key can only be +// used to derive non-hardened child public extended keys. +func (k *ExtendedKey) IsPrivate() bool { + return k.isPrivate +} + +// Depth returns the current derivation level with respect to the root. +// +// The root key has depth zero, and the field has a maximum of 255 due to +// how depth is serialized. +func (k *ExtendedKey) Depth() uint8 { + return k.depth +} + +// Version returns the extended key's hardened derivation version. This can be +// used to identify the extended key's type. +func (k *ExtendedKey) Version() []byte { + return k.version +} + +// ParentFingerprint returns a fingerprint of the parent extended key from which +// this one was derived. +func (k *ExtendedKey) ParentFingerprint() uint32 { + return binary.BigEndian.Uint32(k.parentFP) +} + +// ChainCode returns the chain code part of this extended key. +// +// It is identical for both public and private extended keys. +func (k *ExtendedKey) ChainCode() []byte { + return append([]byte{}, k.chainCode...) +} + +// Derive returns a derived child extended key at the given index. +// +// IMPORTANT: if you were previously using the Child method, this method is incompatible. +// The Child method had a BIP-32 standard compatibility issue. You have to check whether +// any hardened derivations in your derivation path are affected by this issue, via the +// IsAffectedByIssue172 method and migrate the wallet if so. This method does conform +// to the standard. If you need the old behavior, use DeriveNonStandard. +// +// When this extended key is a private extended key (as determined by the IsPrivate +// function), a private extended key will be derived. Otherwise, the derived +// extended key will be also be a public extended key. +// +// When the index is greater to or equal than the HardenedKeyStart constant, the +// derived extended key will be a hardened extended key. It is only possible to +// derive a hardened extended key from a private extended key. Consequently, +// this function will return ErrDeriveHardFromPublic if a hardened child +// extended key is requested from a public extended key. +// +// A hardened extended key is useful since, as previously mentioned, it requires +// a parent private extended key to derive. In other words, normal child +// extended public keys can be derived from a parent public extended key (no +// knowledge of the parent private key) whereas hardened extended keys may not +// be. +// +// NOTE: There is an extremely small chance (< 1 in 2^127) the specific child +// index does not derive to a usable child. The ErrInvalidChild error will be +// returned if this should occur, and the caller is expected to ignore the +// invalid child and simply increment to the next index. +func (k *ExtendedKey) Derive(i uint32) (*ExtendedKey, error) { + // Prevent derivation of children beyond the max allowed depth. + if k.depth == maxUint8 { + return nil, ErrDeriveBeyondMaxDepth + } + + // There are four scenarios that could happen here: + // 1) Private extended key -> Hardened child private extended key + // 2) Private extended key -> Non-hardened child private extended key + // 3) Public extended key -> Non-hardened child public extended key + // 4) Public extended key -> Hardened child public extended key (INVALID!) + + // Case #4 is invalid, so error out early. + // A hardened child extended key may not be created from a public + // extended key. + isChildHardened := i >= HardenedKeyStart + if !k.isPrivate && isChildHardened { + return nil, ErrDeriveHardFromPublic + } + + // The data used to derive the child key depends on whether or not the + // child is hardened per [BIP32]. + // + // For hardened children: + // 0x00 || ser256(parentKey) || ser32(i) + // + // For normal children: + // serP(parentPubKey) || ser32(i) + keyLen := 33 + data := make([]byte, keyLen+4) + if isChildHardened { + // Case #1. + // When the child is a hardened child, the key is known to be a + // private key due to the above early return. Pad it with a + // leading zero as required by [BIP32] for deriving the child. + // Additionally, right align it if it's shorter than 32 bytes. + offset := 33 - len(k.key) + copy(data[offset:], k.key) + } else { + // Case #2 or #3. + // This is either a public or private extended key, but in + // either case, the data which is used to derive the child key + // starts with the secp256k1 compressed public key bytes. + copy(data, k.pubKeyBytes()) + } + binary.BigEndian.PutUint32(data[keyLen:], i) + + // Take the HMAC-SHA512 of the current key's chain code and the derived + // data: + // I = HMAC-SHA512(Key = chainCode, Data = data) + hmac512 := hmac.New(sha512.New, k.chainCode) + _, _ = hmac512.Write(data) + ilr := hmac512.Sum(nil) + + // Split "I" into two 32-byte sequences Il and Ir where: + // Il = intermediate key used to derive the child + // Ir = child chain code + il := ilr[:len(ilr)/2] + childChainCode := ilr[len(ilr)/2:] + + // Both derived public or private keys rely on treating the left 32-byte + // sequence calculated above (Il) as a 256-bit integer that must be + // within the valid range for a secp256k1 private key. There is a small + // chance (< 1 in 2^127) this condition will not hold, and in that case, + // a child extended key can't be created for this index and the caller + // should simply increment to the next index. + var ilNum btcec.ModNScalar + if overflow := ilNum.SetByteSlice(il); overflow { + return nil, ErrInvalidChild + } + + // The algorithm used to derive the child key depends on whether or not + // a private or public child is being derived. + // + // For private children: + // childKey = parse256(Il) + parentKey + // + // For public children: + // childKey = serP(point(parse256(Il)) + parentKey) + var isPrivate bool + var childKey []byte + if k.isPrivate { + // Case #1 or #2. + // Add the parent private key to the intermediate private key to + // derive the final child key. + // + // childKey = parse256(Il) + parenKey + var keyNum btcec.ModNScalar + if overflow := keyNum.SetByteSlice(k.key); overflow { + return nil, ErrInvalidChild + } + + childKeyBytes := ilNum.Add(&keyNum).Bytes() + childKey = childKeyBytes[:] + + // Strip leading zeroes from childKey, to match the expectation + // as the old big.Int usage in this area of the codebase. + for len(childKey) > 0 && childKey[0] == 0x00 { + childKey = childKey[1:] + } + + isPrivate = true + } else { + // Case #3. + // Calculate the corresponding intermediate public key for thek + // intermediate private key: ilJ = ilScalar*G + var ( + ilScalar btcec.ModNScalar + ilJ btcec.JacobianPoint + ) + if overflow := ilScalar.SetByteSlice(il); overflow { + return nil, ErrInvalidChild + } + btcec.ScalarBaseMultNonConst(&ilScalar, &ilJ) + + if (ilJ.X.IsZero() && ilJ.Y.IsZero()) || ilJ.Z.IsZero() { + return nil, ErrInvalidChild + } + + // Convert the serialized compressed parent public key into X + // and Y coordinates so it can be added to the intermediate + // public key. + pubKey, err := btcec.ParsePubKey(k.key) + if err != nil { + return nil, err + } + + // Convert the public key to jacobian coordinates, as that's + // what our main add/double methods use. + var pubKeyJ btcec.JacobianPoint + pubKey.AsJacobian(&pubKeyJ) + + // Add the intermediate public key to the parent public key to + // derive the final child key. + // + // childKey = serP(point(parse256(Il)) + parentKey) + var childKeyPubJ btcec.JacobianPoint + btcec.AddNonConst(&ilJ, &pubKeyJ, &childKeyPubJ) + + // Convert the new child public key back to affine coordinates + // so we can serialize it in compressed format. + childKeyPubJ.ToAffine() + childKeyPub := btcec.NewPublicKey( + &childKeyPubJ.X, &childKeyPubJ.Y, + ) + + childKey = childKeyPub.SerializeCompressed() + } + + // The fingerprint of the parent for the derived child is the first 4 + // bytes of the RIPEMD160(SHA256(parentPubKey)). + parentFP := btcutil.Hash160(k.pubKeyBytes())[:4] + return NewExtendedKey(k.version, childKey, childChainCode, parentFP, + k.depth+1, i, isPrivate), nil +} + +// Returns true if this key was affected by the BIP-32 issue in the Child +// method (since renamed to DeriveNonStandard). +func (k *ExtendedKey) IsAffectedByIssue172() bool { + return len(k.key) < 32 +} + +// Deprecated: This is a non-standard derivation that is affected by issue #172. +// 1-of-256 hardened derivations will be wrong. See note in the Derive method +// and IsAffectedByIssue172. +func (k *ExtendedKey) DeriveNonStandard(i uint32) (*ExtendedKey, error) { + if k.depth == maxUint8 { + return nil, ErrDeriveBeyondMaxDepth + } + + isChildHardened := i >= HardenedKeyStart + if !k.isPrivate && isChildHardened { + return nil, ErrDeriveHardFromPublic + } + + keyLen := 33 + data := make([]byte, keyLen+4) + if isChildHardened { + copy(data[1:], k.key) + } else { + copy(data, k.pubKeyBytes()) + } + binary.BigEndian.PutUint32(data[keyLen:], i) + + hmac512 := hmac.New(sha512.New, k.chainCode) + _, _ = hmac512.Write(data) + ilr := hmac512.Sum(nil) + + il := ilr[:len(ilr)/2] + childChainCode := ilr[len(ilr)/2:] + + ilNum := new(big.Int).SetBytes(il) + if ilNum.Cmp(btcec.S256().N) >= 0 || ilNum.Sign() == 0 { + return nil, ErrInvalidChild + } + + var isPrivate bool + var childKey []byte + if k.isPrivate { + keyNum := new(big.Int).SetBytes(k.key) + ilNum.Add(ilNum, keyNum) + ilNum.Mod(ilNum, btcec.S256().N) + childKey = ilNum.Bytes() + isPrivate = true + } else { + var ( + ilScalar btcec.ModNScalar + ilJ btcec.JacobianPoint + ) + if overflow := ilScalar.SetByteSlice(il); overflow { + return nil, ErrInvalidChild + } + btcec.ScalarBaseMultNonConst(&ilScalar, &ilJ) + + if (ilJ.X.IsZero() && ilJ.Y.IsZero()) || ilJ.Z.IsZero() { + return nil, ErrInvalidChild + } + + pubKey, err := btcec.ParsePubKey(k.key) + if err != nil { + return nil, err + } + + var pubKeyJ btcec.JacobianPoint + pubKey.AsJacobian(&pubKeyJ) + + var childKeyPubJ btcec.JacobianPoint + btcec.AddNonConst(&ilJ, &pubKeyJ, &childKeyPubJ) + + childKeyPubJ.ToAffine() + childKeyPub := btcec.NewPublicKey( + &childKeyPubJ.X, &childKeyPubJ.Y, + ) + + childKey = childKeyPub.SerializeCompressed() + } + + parentFP := btcutil.Hash160(k.pubKeyBytes())[:4] + return NewExtendedKey(k.version, childKey, childChainCode, parentFP, + k.depth+1, i, isPrivate), nil +} + +// ChildNum returns the index at which the child extended key was derived. +// +// Extended keys with ChildNum value between 0 and 2^31-1 are normal child +// keys, and those with a value between 2^31 and 2^32-1 are hardened keys. +func (k *ExtendedKey) ChildIndex() uint32 { + return k.childNum +} + +// Neuter returns a new extended public key from this extended private key. The +// same extended key will be returned unaltered if it is already an extended +// public key. +// +// As the name implies, an extended public key does not have access to the +// private key, so it is not capable of signing transactions or deriving +// child extended private keys. However, it is capable of deriving further +// child extended public keys. +func (k *ExtendedKey) Neuter() (*ExtendedKey, error) { + // Already an extended public key. + if !k.isPrivate { + return k, nil + } + + // Get the associated public extended key version bytes. + version, err := chaincfg.HDPrivateKeyToPublicKeyID(k.version) + if err != nil { + return nil, err + } + + // Convert it to an extended public key. The key for the new extended + // key will simply be the pubkey of the current extended private key. + // + // This is the function N((k,c)) -> (K, c) from [BIP32]. + return NewExtendedKey(version, k.pubKeyBytes(), k.chainCode, k.parentFP, + k.depth, k.childNum, false), nil +} + +// CloneWithVersion returns a new extended key cloned from this extended key, +// but using the provided HD version bytes. The version must be a private HD +// key ID for an extended private key, and a public HD key ID for an extended +// public key. +// +// This method creates a new copy and therefore does not mutate the original +// extended key instance. +// +// Unlike Neuter(), this does NOT convert an extended private key to an +// extended public key. It is particularly useful for converting between +// standard BIP0032 extended keys (serializable to xprv/xpub) and keys based +// on the SLIP132 standard (serializable to yprv/ypub, zprv/zpub, etc.). +// +// References: +// [SLIP132]: SLIP-0132 - Registered HD version bytes for BIP-0032 +// https://github.com/satoshilabs/slips/blob/master/slip-0132.md +func (k *ExtendedKey) CloneWithVersion(version []byte) (*ExtendedKey, error) { + if len(version) != 4 { + // TODO: The semantically correct error to return here is + // ErrInvalidHDKeyID (introduced in btcsuite/btcd#1617). Update the + // error type once available in a stable btcd / chaincfg release. + return nil, chaincfg.ErrUnknownHDKeyID + } + + // Initialize a new extended key instance with the same fields as the + // current extended private/public key and the provided HD version bytes. + return NewExtendedKey(version, k.key, k.chainCode, k.parentFP, + k.depth, k.childNum, k.isPrivate), nil +} + +// ECPubKey converts the extended key to a btcec public key and returns it. +func (k *ExtendedKey) ECPubKey() (*btcec.PublicKey, error) { + return btcec.ParsePubKey(k.pubKeyBytes()) +} + +// ECPrivKey converts the extended key to a btcec private key and returns it. +// As you might imagine this is only possible if the extended key is a private +// extended key (as determined by the IsPrivate function). The ErrNotPrivExtKey +// error will be returned if this function is called on a public extended key. +func (k *ExtendedKey) ECPrivKey() (*btcec.PrivateKey, error) { + if !k.isPrivate { + return nil, ErrNotPrivExtKey + } + + privKey, _ := btcec.PrivKeyFromBytes(k.key) + return privKey, nil +} + +// Address converts the extended key to a standard bitcoin pay-to-pubkey-hash +// address for the passed network. +func (k *ExtendedKey) Address(net *chaincfg.Params) (*btcutil.AddressPubKeyHash, error) { + pkHash := btcutil.Hash160(k.pubKeyBytes()) + return btcutil.NewAddressPubKeyHash(pkHash, net) +} + +// paddedAppend appends the src byte slice to dst, returning the new slice. +// If the length of the source is smaller than the passed size, leading zero +// bytes are appended to the dst slice before appending src. +func paddedAppend(size uint, dst, src []byte) []byte { + for i := 0; i < int(size)-len(src); i++ { + dst = append(dst, 0) + } + return append(dst, src...) +} + +// String returns the extended key as a human-readable base58-encoded string. +func (k *ExtendedKey) String() string { + if len(k.key) == 0 { + return "zeroed extended key" + } + + var childNumBytes [4]byte + binary.BigEndian.PutUint32(childNumBytes[:], k.childNum) + + // The serialized format is: + // version (4) || depth (1) || parent fingerprint (4)) || + // child num (4) || chain code (32) || key data (33) || checksum (4) + serializedBytes := make([]byte, 0, serializedKeyLen+4) + serializedBytes = append(serializedBytes, k.version...) + serializedBytes = append(serializedBytes, k.depth) + serializedBytes = append(serializedBytes, k.parentFP...) + serializedBytes = append(serializedBytes, childNumBytes[:]...) + serializedBytes = append(serializedBytes, k.chainCode...) + if k.isPrivate { + serializedBytes = append(serializedBytes, 0x00) + serializedBytes = paddedAppend(32, serializedBytes, k.key) + } else { + serializedBytes = append(serializedBytes, k.pubKeyBytes()...) + } + + checkSum := chainhash.DoubleHashB(serializedBytes)[:4] + serializedBytes = append(serializedBytes, checkSum...) + return base58.Encode(serializedBytes) +} + +// IsForNet returns whether or not the extended key is associated with the +// passed bitcoin network. +func (k *ExtendedKey) IsForNet(net *chaincfg.Params) bool { + return bytes.Equal(k.version, net.HDPrivateKeyID[:]) || + bytes.Equal(k.version, net.HDPublicKeyID[:]) +} + +// SetNet associates the extended key, and any child keys yet to be derived from +// it, with the passed network. +func (k *ExtendedKey) SetNet(net *chaincfg.Params) { + if k.isPrivate { + k.version = net.HDPrivateKeyID[:] + } else { + k.version = net.HDPublicKeyID[:] + } +} + +// zero sets all bytes in the passed slice to zero. This is used to +// explicitly clear private key material from memory. +func zero(b []byte) { + lenb := len(b) + for i := 0; i < lenb; i++ { + b[i] = 0 + } +} + +// Zero manually clears all fields and bytes in the extended key. This can be +// used to explicitly clear key material from memory for enhanced security +// against memory scraping. This function only clears this particular key and +// not any children that have already been derived. +func (k *ExtendedKey) Zero() { + zero(k.key) + zero(k.pubKey) + zero(k.chainCode) + zero(k.parentFP) + k.version = nil + k.key = nil + k.depth = 0 + k.childNum = 0 + k.isPrivate = false +} + +// NewMaster creates a new master node for use in creating a hierarchical +// deterministic key chain. The seed must be between 128 and 512 bits and +// should be generated by a cryptographically secure random generation source. +// +// NOTE: There is an extremely small chance (< 1 in 2^127) the provided seed +// will derive to an unusable secret key. The ErrUnusable error will be +// returned if this should occur, so the caller must check for it and generate a +// new seed accordingly. +func NewMaster(seed []byte, net *chaincfg.Params) (*ExtendedKey, error) { + // Per [BIP32], the seed must be in range [MinSeedBytes, MaxSeedBytes]. + if len(seed) < MinSeedBytes || len(seed) > MaxSeedBytes { + return nil, ErrInvalidSeedLen + } + + // First take the HMAC-SHA512 of the master key and the seed data: + // I = HMAC-SHA512(Key = "Bitcoin seed", Data = S) + hmac512 := hmac.New(sha512.New, masterKey) + _, _ = hmac512.Write(seed) + lr := hmac512.Sum(nil) + + // Split "I" into two 32-byte sequences Il and Ir where: + // Il = master secret key + // Ir = master chain code + secretKey := lr[:len(lr)/2] + chainCode := lr[len(lr)/2:] + + // Ensure the key in usable. + secretKeyNum := new(big.Int).SetBytes(secretKey) + if secretKeyNum.Cmp(btcec.S256().N) >= 0 || secretKeyNum.Sign() == 0 { + return nil, ErrUnusableSeed + } + + parentFP := []byte{0x00, 0x00, 0x00, 0x00} + return NewExtendedKey(net.HDPrivateKeyID[:], secretKey, chainCode, + parentFP, 0, 0, true), nil +} + +// NewKeyFromString returns a new extended key instance from a base58-encoded +// extended key. +func NewKeyFromString(key string) (*ExtendedKey, error) { + // The base58-decoded extended key must consist of a serialized payload + // plus an additional 4 bytes for the checksum. + decoded := base58.Decode(key) + if len(decoded) != serializedKeyLen+4 { + return nil, ErrInvalidKeyLen + } + + // The serialized format is: + // version (4) || depth (1) || parent fingerprint (4)) || + // child num (4) || chain code (32) || key data (33) || checksum (4) + + // Split the payload and checksum up and ensure the checksum matches. + payload := decoded[:len(decoded)-4] + checkSum := decoded[len(decoded)-4:] + expectedCheckSum := chainhash.DoubleHashB(payload)[:4] + if !bytes.Equal(checkSum, expectedCheckSum) { + return nil, ErrBadChecksum + } + + // Deserialize each of the payload fields. + version := payload[:4] + depth := payload[4:5][0] + parentFP := payload[5:9] + childNum := binary.BigEndian.Uint32(payload[9:13]) + chainCode := payload[13:45] + keyData := payload[45:78] + + // The key data is a private key if it starts with 0x00. Serialized + // compressed pubkeys either start with 0x02 or 0x03. + isPrivate := keyData[0] == 0x00 + if isPrivate { + // Ensure the private key is valid. It must be within the range + // of the order of the secp256k1 curve and not be 0. + keyData = keyData[1:] + keyNum := new(big.Int).SetBytes(keyData) + if keyNum.Cmp(btcec.S256().N) >= 0 || keyNum.Sign() == 0 { + return nil, ErrUnusableSeed + } + } else { + // Ensure the public key parses correctly and is actually on the + // secp256k1 curve. + _, err := btcec.ParsePubKey(keyData) + if err != nil { + return nil, err + } + } + + return NewExtendedKey(version, keyData, chainCode, parentFP, depth, + childNum, isPrivate), nil +} + +// GenerateSeed returns a cryptographically secure random seed that can be used +// as the input for the NewMaster function to generate a new master node. +// +// The length is in bytes and it must be between 16 and 64 (128 to 512 bits). +// The recommended length is 32 (256 bits) as defined by the RecommendedSeedLen +// constant. +func GenerateSeed(length uint8) ([]byte, error) { + // Per [BIP32], the seed must be in range [MinSeedBytes, MaxSeedBytes]. + if length < MinSeedBytes || length > MaxSeedBytes { + return nil, ErrInvalidSeedLen + } + + buf := make([]byte, length) + _, err := rand.Read(buf) + if err != nil { + return nil, err + } + + return buf, nil +} diff --git a/btcutil/hdkeychain/extendedkey_test.go b/btcutil/hdkeychain/extendedkey_test.go new file mode 100644 index 0000000000..0721b92480 --- /dev/null +++ b/btcutil/hdkeychain/extendedkey_test.go @@ -0,0 +1,1210 @@ +// Copyright (c) 2014-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package hdkeychain + +// References: +// [BIP32]: BIP0032 - Hierarchical Deterministic Wallets +// https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki + +import ( + "bytes" + "encoding/binary" + "encoding/hex" + "errors" + "math" + "reflect" + "testing" + + "github.com/btcsuite/btcd/chaincfg" + secp_ecdsa "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// TestBIP0032Vectors tests the vectors provided by [BIP32] to ensure the +// derivation works as intended. +func TestBIP0032Vectors(t *testing.T) { + // The master seeds for each of the two test vectors in [BIP32]. + testVec1MasterHex := "000102030405060708090a0b0c0d0e0f" + testVec2MasterHex := "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542" + testVec3MasterHex := "4b381541583be4423346c643850da4b320e46a87ae3d2a4e6da11eba819cd4acba45d239319ac14f863b8d5ab5a0d0c64d2e8a1e7d1457df2e5a3c51c73235be" + hkStart := uint32(0x80000000) + + tests := []struct { + name string + master string + path []uint32 + wantPub string + wantPriv string + net *chaincfg.Params + }{ + // Test vector 1 + { + name: "test vector 1 chain m", + master: testVec1MasterHex, + path: []uint32{}, + wantPub: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + wantPriv: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 1 chain m/0H", + master: testVec1MasterHex, + path: []uint32{hkStart}, + wantPub: "xpub68Gmy5EdvgibQVfPdqkBBCHxA5htiqg55crXYuXoQRKfDBFA1WEjWgP6LHhwBZeNK1VTsfTFUHCdrfp1bgwQ9xv5ski8PX9rL2dZXvgGDnw", + wantPriv: "xprv9uHRZZhk6KAJC1avXpDAp4MDc3sQKNxDiPvvkX8Br5ngLNv1TxvUxt4cV1rGL5hj6KCesnDYUhd7oWgT11eZG7XnxHrnYeSvkzY7d2bhkJ7", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 1 chain m/0H/1", + master: testVec1MasterHex, + path: []uint32{hkStart, 1}, + wantPub: "xpub6ASuArnXKPbfEwhqN6e3mwBcDTgzisQN1wXN9BJcM47sSikHjJf3UFHKkNAWbWMiGj7Wf5uMash7SyYq527Hqck2AxYysAA7xmALppuCkwQ", + wantPriv: "xprv9wTYmMFdV23N2TdNG573QoEsfRrWKQgWeibmLntzniatZvR9BmLnvSxqu53Kw1UmYPxLgboyZQaXwTCg8MSY3H2EU4pWcQDnRnrVA1xe8fs", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 1 chain m/0H/1/2H", + master: testVec1MasterHex, + path: []uint32{hkStart, 1, hkStart + 2}, + wantPub: "xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5", + wantPriv: "xprv9z4pot5VBttmtdRTWfWQmoH1taj2axGVzFqSb8C9xaxKymcFzXBDptWmT7FwuEzG3ryjH4ktypQSAewRiNMjANTtpgP4mLTj34bhnZX7UiM", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 1 chain m/0H/1/2H/2", + master: testVec1MasterHex, + path: []uint32{hkStart, 1, hkStart + 2, 2}, + wantPub: "xpub6FHa3pjLCk84BayeJxFW2SP4XRrFd1JYnxeLeU8EqN3vDfZmbqBqaGJAyiLjTAwm6ZLRQUMv1ZACTj37sR62cfN7fe5JnJ7dh8zL4fiyLHV", + wantPriv: "xprvA2JDeKCSNNZky6uBCviVfJSKyQ1mDYahRjijr5idH2WwLsEd4Hsb2Tyh8RfQMuPh7f7RtyzTtdrbdqqsunu5Mm3wDvUAKRHSC34sJ7in334", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 1 chain m/0H/1/2H/2/1000000000", + master: testVec1MasterHex, + path: []uint32{hkStart, 1, hkStart + 2, 2, 1000000000}, + wantPub: "xpub6H1LXWLaKsWFhvm6RVpEL9P4KfRZSW7abD2ttkWP3SSQvnyA8FSVqNTEcYFgJS2UaFcxupHiYkro49S8yGasTvXEYBVPamhGW6cFJodrTHy", + wantPriv: "xprvA41z7zogVVwxVSgdKUHDy1SKmdb533PjDz7J6N6mV6uS3ze1ai8FHa8kmHScGpWmj4WggLyQjgPie1rFSruoUihUZREPSL39UNdE3BBDu76", + net: &chaincfg.MainNetParams, + }, + + // Test vector 2 + { + name: "test vector 2 chain m", + master: testVec2MasterHex, + path: []uint32{}, + wantPub: "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB", + wantPriv: "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 2 chain m/0", + master: testVec2MasterHex, + path: []uint32{0}, + wantPub: "xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH", + wantPriv: "xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 2 chain m/0/2147483647H", + master: testVec2MasterHex, + path: []uint32{0, hkStart + 2147483647}, + wantPub: "xpub6ASAVgeehLbnwdqV6UKMHVzgqAG8Gr6riv3Fxxpj8ksbH9ebxaEyBLZ85ySDhKiLDBrQSARLq1uNRts8RuJiHjaDMBU4Zn9h8LZNnBC5y4a", + wantPriv: "xprv9wSp6B7kry3Vj9m1zSnLvN3xH8RdsPP1Mh7fAaR7aRLcQMKTR2vidYEeEg2mUCTAwCd6vnxVrcjfy2kRgVsFawNzmjuHc2YmYRmagcEPdU9", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 2 chain m/0/2147483647H/1", + master: testVec2MasterHex, + path: []uint32{0, hkStart + 2147483647, 1}, + wantPub: "xpub6DF8uhdarytz3FWdA8TvFSvvAh8dP3283MY7p2V4SeE2wyWmG5mg5EwVvmdMVCQcoNJxGoWaU9DCWh89LojfZ537wTfunKau47EL2dhHKon", + wantPriv: "xprv9zFnWC6h2cLgpmSA46vutJzBcfJ8yaJGg8cX1e5StJh45BBciYTRXSd25UEPVuesF9yog62tGAQtHjXajPPdbRCHuWS6T8XA2ECKADdw4Ef", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 2 chain m/0/2147483647H/1/2147483646H", + master: testVec2MasterHex, + path: []uint32{0, hkStart + 2147483647, 1, hkStart + 2147483646}, + wantPub: "xpub6ERApfZwUNrhLCkDtcHTcxd75RbzS1ed54G1LkBUHQVHQKqhMkhgbmJbZRkrgZw4koxb5JaHWkY4ALHY2grBGRjaDMzQLcgJvLJuZZvRcEL", + wantPriv: "xprvA1RpRA33e1JQ7ifknakTFpgNXPmW2YvmhqLQYMmrj4xJXXWYpDPS3xz7iAxn8L39njGVyuoseXzU6rcxFLJ8HFsTjSyQbLYnMpCqE2VbFWc", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 2 chain m/0/2147483647H/1/2147483646H/2", + master: testVec2MasterHex, + path: []uint32{0, hkStart + 2147483647, 1, hkStart + 2147483646, 2}, + wantPub: "xpub6FnCn6nSzZAw5Tw7cgR9bi15UV96gLZhjDstkXXxvCLsUXBGXPdSnLFbdpq8p9HmGsApME5hQTZ3emM2rnY5agb9rXpVGyy3bdW6EEgAtqt", + wantPriv: "xprvA2nrNbFZABcdryreWet9Ea4LvTJcGsqrMzxHx98MMrotbir7yrKCEXw7nadnHM8Dq38EGfSh6dqA9QWTyefMLEcBYJUuekgW4BYPJcr9E7j", + net: &chaincfg.MainNetParams, + }, + + // Test vector 3 + { + name: "test vector 3 chain m", + master: testVec3MasterHex, + path: []uint32{}, + wantPub: "xpub661MyMwAqRbcEZVB4dScxMAdx6d4nFc9nvyvH3v4gJL378CSRZiYmhRoP7mBy6gSPSCYk6SzXPTf3ND1cZAceL7SfJ1Z3GC8vBgp2epUt13", + wantPriv: "xprv9s21ZrQH143K25QhxbucbDDuQ4naNntJRi4KUfWT7xo4EKsHt2QJDu7KXp1A3u7Bi1j8ph3EGsZ9Xvz9dGuVrtHHs7pXeTzjuxBrCmmhgC6", + net: &chaincfg.MainNetParams, + }, + { + name: "test vector 3 chain m/0H", + master: testVec3MasterHex, + path: []uint32{hkStart}, + wantPub: "xpub68NZiKmJWnxxS6aaHmn81bvJeTESw724CRDs6HbuccFQN9Ku14VQrADWgqbhhTHBaohPX4CjNLf9fq9MYo6oDaPPLPxSb7gwQN3ih19Zm4Y", + wantPriv: "xprv9uPDJpEQgRQfDcW7BkF7eTya6RPxXeJCqCJGHuCJ4GiRVLzkTXBAJMu2qaMWPrS7AANYqdq6vcBcBUdJCVVFceUvJFjaPdGZ2y9WACViL4L", + net: &chaincfg.MainNetParams, + }, + + // Test vector 1 - Testnet + { + name: "test vector 1 chain m - testnet", + master: testVec1MasterHex, + path: []uint32{}, + wantPub: "tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp", + wantPriv: "tprv8ZgxMBicQKsPeDgjzdC36fs6bMjGApWDNLR9erAXMs5skhMv36j9MV5ecvfavji5khqjWaWSFhN3YcCUUdiKH6isR4Pwy3U5y5egddBr16m", + net: &chaincfg.TestNet3Params, + }, + { + name: "test vector 1 chain m/0H - testnet", + master: testVec1MasterHex, + path: []uint32{hkStart}, + wantPub: "tpubD8eQVK4Kdxg3gHrF62jGP7dKVCoYiEB8dFSpuTawkL5YxTus5j5pf83vaKnii4bc6v2NVEy81P2gYrJczYne3QNNwMTS53p5uzDyHvnw2jm", + wantPriv: "tprv8bxNLu25VazNnppTCP4fyhyCvBHcYtzE3wr3cwYeL4HA7yf6TLGEUdS4QC1vLT63TkjRssqJe4CvGNEC8DzW5AoPUw56D1Ayg6HY4oy8QZ9", + net: &chaincfg.TestNet3Params, + }, + { + name: "test vector 1 chain m/0H/1 - testnet", + master: testVec1MasterHex, + path: []uint32{hkStart, 1}, + wantPub: "tpubDApXh6cD2fZ7WjtgpHd8yrWyYaneiFuRZa7fVjMkgxsmC1QzoXW8cgx9zQFJ81Jx4deRGfRE7yXA9A3STsxXj4CKEZJHYgpMYikkas9DBTP", + wantPriv: "tprv8e8VYgZxtHsSdGrtvdxYaSrryZGiYviWzGWtDDKTGh5NMXAEB8gYSCLHpFCywNs5uqV7ghRjimALQJkRFZnUrLHpzi2pGkwqLtbubgWuQ8q", + net: &chaincfg.TestNet3Params, + }, + { + name: "test vector 1 chain m/0H/1/2H - testnet", + master: testVec1MasterHex, + path: []uint32{hkStart, 1, hkStart + 2}, + wantPub: "tpubDDRojdS4jYQXNugn4t2WLrZ7mjfAyoVQu7MLk4eurqFCbrc7cHLZX8W5YRS8ZskGR9k9t3PqVv68bVBjAyW4nWM9pTGRddt3GQftg6MVQsm", + wantPriv: "tprv8gjmbDPpbAirVSezBEMuwSu1Ci9EpUJWKokZTYccSZSomNMLytWyLdtDNHRbucNaRJWWHANf9AzEdWVAqahfyRjVMKbNRhBmxAM8EJr7R15", + net: &chaincfg.TestNet3Params, + }, + { + name: "test vector 1 chain m/0H/1/2H/2 - testnet", + master: testVec1MasterHex, + path: []uint32{hkStart, 1, hkStart + 2, 2}, + wantPub: "tpubDFfCa4Z1v25WTPAVm9EbEMiRrYwucPocLbEe12BPBGooxxEUg42vihy1DkRWyftztTsL23snYezF9uXjGGwGW6pQjEpcTpmsH6ajpf4CVPn", + wantPriv: "tprv8iyAReWmmePqZv8hsVZzpx4KHXRyT4chmHdriW95m11R8Tyi3fDLYDM93bq4NGn1V6eCu5cE3zSQ6hPd31F2ApKXkZgTyn1V78pHjkq1V2v", + net: &chaincfg.TestNet3Params, + }, + { + name: "test vector 1 chain m/0H/1/2H/2/1000000000 - testnet", + master: testVec1MasterHex, + path: []uint32{hkStart, 1, hkStart + 2, 2, 1000000000}, + wantPub: "tpubDHNy3kAG39ThyiwwsgoKY4iRenXDRtce8qdCFJZXPMCJg5dsCUHayp84raLTpvyiNA9sXPob5rgqkKvkN8S7MMyXbnEhGJMW64Cf4vFAoaF", + wantPriv: "tprv8kgvuL81tmn36Fv9z38j8f4K5m1HGZRjZY2QxnXDy5PuqbP6a5TzoKWCgTcGHBu66W3TgSbAu2yX6sPza5FkHmy564Sh6gmCPUNeUt4yj2x", + net: &chaincfg.TestNet3Params, + }, + } + +tests: + for i, test := range tests { + masterSeed, err := hex.DecodeString(test.master) + if err != nil { + t.Errorf("DecodeString #%d (%s): unexpected error: %v", + i, test.name, err) + continue + } + + extKey, err := NewMaster(masterSeed, test.net) + if err != nil { + t.Errorf("NewMaster #%d (%s): unexpected error when "+ + "creating new master key: %v", i, test.name, + err) + continue + } + + for _, childNum := range test.path { + var err error + extKey, err = extKey.Derive(childNum) + if err != nil { + t.Errorf("err: %v", err) + continue tests + } + } + + if extKey.Depth() != uint8(len(test.path)) { + t.Errorf("Depth of key %d should match fixture path: %v", + extKey.Depth(), len(test.path)) + continue + } + + privStr := extKey.String() + if privStr != test.wantPriv { + t.Errorf("Serialize #%d (%s): mismatched serialized "+ + "private extended key -- got: %s, want: %s", i, + test.name, privStr, test.wantPriv) + continue + } + + pubKey, err := extKey.Neuter() + if err != nil { + t.Errorf("Neuter #%d (%s): unexpected error: %v ", i, + test.name, err) + continue + } + + // Neutering a second time should have no effect. + pubKey, err = pubKey.Neuter() + if err != nil { + t.Errorf("Neuter #%d (%s): unexpected error: %v", i, + test.name, err) + return + } + + pubStr := pubKey.String() + if pubStr != test.wantPub { + t.Errorf("Neuter #%d (%s): mismatched serialized "+ + "public extended key -- got: %s, want: %s", i, + test.name, pubStr, test.wantPub) + continue + } + } +} + +// TestPrivateDerivation tests several vectors which derive private keys from +// other private keys works as intended. +func TestPrivateDerivation(t *testing.T) { + // The private extended keys for test vectors in [BIP32]. + testVec1MasterPrivKey := "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi" + testVec2MasterPrivKey := "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U" + + tests := []struct { + name string + master string + path []uint32 + wantPriv string + }{ + // Test vector 1 + { + name: "test vector 1 chain m", + master: testVec1MasterPrivKey, + path: []uint32{}, + wantPriv: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + }, + { + name: "test vector 1 chain m/0", + master: testVec1MasterPrivKey, + path: []uint32{0}, + wantPriv: "xprv9uHRZZhbkedL37eZEnyrNsQPFZYRAvjy5rt6M1nbEkLSo378x1CQQLo2xxBvREwiK6kqf7GRNvsNEchwibzXaV6i5GcsgyjBeRguXhKsi4R", + }, + { + name: "test vector 1 chain m/0/1", + master: testVec1MasterPrivKey, + path: []uint32{0, 1}, + wantPriv: "xprv9ww7sMFLzJMzy7bV1qs7nGBxgKYrgcm3HcJvGb4yvNhT9vxXC7eX7WVULzCfxucFEn2TsVvJw25hH9d4mchywguGQCZvRgsiRaTY1HCqN8G", + }, + { + name: "test vector 1 chain m/0/1/2", + master: testVec1MasterPrivKey, + path: []uint32{0, 1, 2}, + wantPriv: "xprv9xrdP7iD2L1YZCgR9AecDgpDMZSTzP5KCfUykGXgjBxLgp1VFHsEeL3conzGAkbc1MigG1o8YqmfEA2jtkPdf4vwMaGJC2YSDbBTPAjfRUi", + }, + { + name: "test vector 1 chain m/0/1/2/2", + master: testVec1MasterPrivKey, + path: []uint32{0, 1, 2, 2}, + wantPriv: "xprvA2J8Hq4eiP7xCEBP7gzRJGJnd9CHTkEU6eTNMrZ6YR7H5boik8daFtDZxmJDfdMSKHwroCfAfsBKWWidRfBQjpegy6kzXSkQGGoMdWKz5Xh", + }, + { + name: "test vector 1 chain m/0/1/2/2/1000000000", + master: testVec1MasterPrivKey, + path: []uint32{0, 1, 2, 2, 1000000000}, + wantPriv: "xprvA3XhazxncJqJsQcG85Gg61qwPQKiobAnWjuPpjKhExprZjfse6nErRwTMwGe6uGWXPSykZSTiYb2TXAm7Qhwj8KgRd2XaD21Styu6h6AwFz", + }, + + // Test vector 2 + { + name: "test vector 2 chain m", + master: testVec2MasterPrivKey, + path: []uint32{}, + wantPriv: "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U", + }, + { + name: "test vector 2 chain m/0", + master: testVec2MasterPrivKey, + path: []uint32{0}, + wantPriv: "xprv9vHkqa6EV4sPZHYqZznhT2NPtPCjKuDKGY38FBWLvgaDx45zo9WQRUT3dKYnjwih2yJD9mkrocEZXo1ex8G81dwSM1fwqWpWkeS3v86pgKt", + }, + { + name: "test vector 2 chain m/0/2147483647", + master: testVec2MasterPrivKey, + path: []uint32{0, 2147483647}, + wantPriv: "xprv9wSp6B7cXJWXZRpDbxkFg3ry2fuSyUfvboJ5Yi6YNw7i1bXmq9QwQ7EwMpeG4cK2pnMqEx1cLYD7cSGSCtruGSXC6ZSVDHugMsZgbuY62m6", + }, + { + name: "test vector 2 chain m/0/2147483647/1", + master: testVec2MasterPrivKey, + path: []uint32{0, 2147483647, 1}, + wantPriv: "xprv9ysS5br6UbWCRCJcggvpUNMyhVWgD7NypY9gsVTMYmuRtZg8izyYC5Ey4T931WgWbfJwRDwfVFqV3b29gqHDbuEpGcbzf16pdomk54NXkSm", + }, + { + name: "test vector 2 chain m/0/2147483647/1/2147483646", + master: testVec2MasterPrivKey, + path: []uint32{0, 2147483647, 1, 2147483646}, + wantPriv: "xprvA2LfeWWwRCxh4iqigcDMnUf2E3nVUFkntc93nmUYBtb9rpSPYWa8MY3x9ZHSLZkg4G84UefrDruVK3FhMLSJsGtBx883iddHNuH1LNpRrEp", + }, + { + name: "test vector 2 chain m/0/2147483647/1/2147483646/2", + master: testVec2MasterPrivKey, + path: []uint32{0, 2147483647, 1, 2147483646, 2}, + wantPriv: "xprvA48ALo8BDjcRET68R5RsPzF3H7WeyYYtHcyUeLRGBPHXu6CJSGjwW7dWoeUWTEzT7LG3qk6Eg6x2ZoqD8gtyEFZecpAyvchksfLyg3Zbqam", + }, + + // Custom tests to trigger specific conditions. + { + // Seed 000000000000000000000000000000da. + name: "Derived privkey with zero high byte m/0", + master: "xprv9s21ZrQH143K4FR6rNeqEK4EBhRgLjWLWhA3pw8iqgAKk82ypz58PXbrzU19opYcxw8JDJQF4id55PwTsN1Zv8Xt6SKvbr2KNU5y8jN8djz", + path: []uint32{0}, + wantPriv: "xprv9uC5JqtViMmgcAMUxcsBCBFA7oYCNs4bozPbyvLfddjHou4rMiGEHipz94xNaPb1e4f18TRoPXfiXx4C3cDAcADqxCSRSSWLvMBRWPctSN9", + }, + } + +tests: + for i, test := range tests { + extKey, err := NewKeyFromString(test.master) + if err != nil { + t.Errorf("NewKeyFromString #%d (%s): unexpected error "+ + "creating extended key: %v", i, test.name, + err) + continue + } + + for _, childNum := range test.path { + var err error + extKey, err = extKey.Derive(childNum) + if err != nil { + t.Errorf("err: %v", err) + continue tests + } + } + + privStr := extKey.String() + if privStr != test.wantPriv { + t.Errorf("Derive #%d (%s): mismatched serialized "+ + "private extended key -- got: %s, want: %s", i, + test.name, privStr, test.wantPriv) + continue + } + } +} + +// TestPublicDerivation tests several vectors which derive public keys from +// other public keys works as intended. +func TestPublicDerivation(t *testing.T) { + // The public extended keys for test vectors in [BIP32]. + testVec1MasterPubKey := "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8" + testVec2MasterPubKey := "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB" + + tests := []struct { + name string + master string + path []uint32 + wantPub string + }{ + // Test vector 1 + { + name: "test vector 1 chain m", + master: testVec1MasterPubKey, + path: []uint32{}, + wantPub: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + }, + { + name: "test vector 1 chain m/0", + master: testVec1MasterPubKey, + path: []uint32{0}, + wantPub: "xpub68Gmy5EVb2BdFbj2LpWrk1M7obNuaPTpT5oh9QCCo5sRfqSHVYWex97WpDZzszdzHzxXDAzPLVSwybe4uPYkSk4G3gnrPqqkV9RyNzAcNJ1", + }, + { + name: "test vector 1 chain m/0/1", + master: testVec1MasterPubKey, + path: []uint32{0, 1}, + wantPub: "xpub6AvUGrnEpfvJBbfx7sQ89Q8hEMPM65UteqEX4yUbUiES2jHfjexmfJoxCGSwFMZiPBaKQT1RiKWrKfuDV4vpgVs4Xn8PpPTR2i79rwHd4Zr", + }, + { + name: "test vector 1 chain m/0/1/2", + master: testVec1MasterPubKey, + path: []uint32{0, 1, 2}, + wantPub: "xpub6BqyndF6rhZqmgktFCBcapkwubGxPqoAZtQaYewJHXVKZcLdnqBVC8N6f6FSHWUghjuTLeubWyQWfJdk2G3tGgvgj3qngo4vLTnnSjAZckv", + }, + { + name: "test vector 1 chain m/0/1/2/2", + master: testVec1MasterPubKey, + path: []uint32{0, 1, 2, 2}, + wantPub: "xpub6FHUhLbYYkgFQiFrDiXRfQFXBB2msCxKTsNyAExi6keFxQ8sHfwpogY3p3s1ePSpUqLNYks5T6a3JqpCGszt4kxbyq7tUoFP5c8KWyiDtPp", + }, + { + name: "test vector 1 chain m/0/1/2/2/1000000000", + master: testVec1MasterPubKey, + path: []uint32{0, 1, 2, 2, 1000000000}, + wantPub: "xpub6GX3zWVgSgPc5tgjE6ogT9nfwSADD3tdsxpzd7jJoJMqSY12Be6VQEFwDCp6wAQoZsH2iq5nNocHEaVDxBcobPrkZCjYW3QUmoDYzMFBDu9", + }, + + // Test vector 2 + { + name: "test vector 2 chain m", + master: testVec2MasterPubKey, + path: []uint32{}, + wantPub: "xpub661MyMwAqRbcFW31YEwpkMuc5THy2PSt5bDMsktWQcFF8syAmRUapSCGu8ED9W6oDMSgv6Zz8idoc4a6mr8BDzTJY47LJhkJ8UB7WEGuduB", + }, + { + name: "test vector 2 chain m/0", + master: testVec2MasterPubKey, + path: []uint32{0}, + wantPub: "xpub69H7F5d8KSRgmmdJg2KhpAK8SR3DjMwAdkxj3ZuxV27CprR9LgpeyGmXUbC6wb7ERfvrnKZjXoUmmDznezpbZb7ap6r1D3tgFxHmwMkQTPH", + }, + { + name: "test vector 2 chain m/0/2147483647", + master: testVec2MasterPubKey, + path: []uint32{0, 2147483647}, + wantPub: "xpub6ASAVgeWMg4pmutghzHG3BohahjwNwPmy2DgM6W9wGegtPrvNgjBwuZRD7hSDFhYfunq8vDgwG4ah1gVzZysgp3UsKz7VNjCnSUJJ5T4fdD", + }, + { + name: "test vector 2 chain m/0/2147483647/1", + master: testVec2MasterPubKey, + path: []uint32{0, 2147483647, 1}, + wantPub: "xpub6CrnV7NzJy4VdgP5niTpqWJiFXMAca6qBm5Hfsry77SQmN1HGYHnjsZSujoHzdxf7ZNK5UVrmDXFPiEW2ecwHGWMFGUxPC9ARipss9rXd4b", + }, + { + name: "test vector 2 chain m/0/2147483647/1/2147483646", + master: testVec2MasterPubKey, + path: []uint32{0, 2147483647, 1, 2147483646}, + wantPub: "xpub6FL2423qFaWzHCvBndkN9cbkn5cysiUeFq4eb9t9kE88jcmY63tNuLNRzpHPdAM4dUpLhZ7aUm2cJ5zF7KYonf4jAPfRqTMTRBNkQL3Tfta", + }, + { + name: "test vector 2 chain m/0/2147483647/1/2147483646/2", + master: testVec2MasterPubKey, + path: []uint32{0, 2147483647, 1, 2147483646, 2}, + wantPub: "xpub6H7WkJf547AiSwAbX6xsm8Bmq9M9P1Gjequ5SipsjipWmtXSyp4C3uwzewedGEgAMsDy4jEvNTWtxLyqqHY9C12gaBmgUdk2CGmwachwnWK", + }, + } + +tests: + for i, test := range tests { + extKey, err := NewKeyFromString(test.master) + if err != nil { + t.Errorf("NewKeyFromString #%d (%s): unexpected error "+ + "creating extended key: %v", i, test.name, + err) + continue + } + + for _, childNum := range test.path { + var err error + extKey, err = extKey.Derive(childNum) + if err != nil { + t.Errorf("err: %v", err) + continue tests + } + } + + pubStr := extKey.String() + if pubStr != test.wantPub { + t.Errorf("Derive #%d (%s): mismatched serialized "+ + "public extended key -- got: %s, want: %s", i, + test.name, pubStr, test.wantPub) + continue + } + } +} + +// TestGenerateSeed ensures the GenerateSeed function works as intended. +func TestGenerateSeed(t *testing.T) { + wantErr := errors.New("seed length must be between 128 and 512 bits") + + tests := []struct { + name string + length uint8 + err error + }{ + // Test various valid lengths. + {name: "16 bytes", length: 16}, + {name: "17 bytes", length: 17}, + {name: "20 bytes", length: 20}, + {name: "32 bytes", length: 32}, + {name: "64 bytes", length: 64}, + + // Test invalid lengths. + {name: "15 bytes", length: 15, err: wantErr}, + {name: "65 bytes", length: 65, err: wantErr}, + } + + for i, test := range tests { + seed, err := GenerateSeed(test.length) + if !reflect.DeepEqual(err, test.err) { + t.Errorf("GenerateSeed #%d (%s): unexpected error -- "+ + "want %v, got %v", i, test.name, test.err, err) + continue + } + + if test.err == nil && len(seed) != int(test.length) { + t.Errorf("GenerateSeed #%d (%s): length mismatch -- "+ + "got %d, want %d", i, test.name, len(seed), + test.length) + continue + } + } +} + +// TestExtendedKeyAPI ensures the API on the ExtendedKey type works as intended. +func TestExtendedKeyAPI(t *testing.T) { + tests := []struct { + name string + extKey string + isPrivate bool + parentFP uint32 + chainCode []byte + childNum uint32 + privKey string + privKeyErr error + pubKey string + address string + }{ + { + name: "test vector 1 master node private", + extKey: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + isPrivate: true, + parentFP: 0, + chainCode: []byte{135, 61, 255, 129, 192, 47, 82, 86, 35, 253, 31, 229, 22, 126, 172, 58, 85, 160, 73, 222, 61, 49, 75, 180, 46, 226, 39, 255, 237, 55, 213, 8}, + childNum: 0, + privKey: "e8f32e723decf4051aefac8e2c93c9c5b214313817cdb01a1494b917c8436b35", + pubKey: "0339a36013301597daef41fbe593a02cc513d0b55527ec2df1050e2e8ff49c85c2", + address: "15mKKb2eos1hWa6tisdPwwDC1a5J1y9nma", + }, + { + name: "test vector 1 chain m/0H/1/2H public", + extKey: "xpub6D4BDPcP2GT577Vvch3R8wDkScZWzQzMMUm3PWbmWvVJrZwQY4VUNgqFJPMM3No2dFDFGTsxxpG5uJh7n7epu4trkrX7x7DogT5Uv6fcLW5", + isPrivate: false, + parentFP: 3203769081, + chainCode: []byte{4, 70, 107, 156, 200, 225, 97, 233, 102, 64, 156, 165, 41, 134, 197, 132, 240, 126, 157, 200, 31, 115, 93, 182, 131, 195, 255, 110, 199, 177, 80, 63}, + childNum: 2147483650, + privKeyErr: ErrNotPrivExtKey, + pubKey: "0357bfe1e341d01c69fe5654309956cbea516822fba8a601743a012a7896ee8dc2", + address: "1NjxqbA9aZWnh17q1UW3rB4EPu79wDXj7x", + }, + } + + for i, test := range tests { + key, err := NewKeyFromString(test.extKey) + if err != nil { + t.Errorf("NewKeyFromString #%d (%s): unexpected "+ + "error: %v", i, test.name, err) + continue + } + + if key.IsPrivate() != test.isPrivate { + t.Errorf("IsPrivate #%d (%s): mismatched key type -- "+ + "want private %v, got private %v", i, test.name, + test.isPrivate, key.IsPrivate()) + continue + } + + parentFP := key.ParentFingerprint() + if parentFP != test.parentFP { + t.Errorf("ParentFingerprint #%d (%s): mismatched "+ + "parent fingerprint -- want %d, got %d", i, + test.name, test.parentFP, parentFP) + continue + } + + chainCode := key.ChainCode() + if !bytes.Equal(chainCode, test.chainCode) { + t.Errorf("ChainCode #%d (%s): want %v, got %v", i, + test.name, test.chainCode, chainCode) + continue + } + + childIndex := key.ChildIndex() + if childIndex != test.childNum { + t.Errorf("ChildIndex #%d (%s): want %d, got %d", i, + test.name, test.childNum, childIndex) + continue + } + + serializedKey := key.String() + if serializedKey != test.extKey { + t.Errorf("String #%d (%s): mismatched serialized key "+ + "-- want %s, got %s", i, test.name, test.extKey, + serializedKey) + continue + } + + privKey, err := key.ECPrivKey() + if !reflect.DeepEqual(err, test.privKeyErr) { + t.Errorf("ECPrivKey #%d (%s): mismatched error: want "+ + "%v, got %v", i, test.name, test.privKeyErr, err) + continue + } + if test.privKeyErr == nil { + privKeyStr := hex.EncodeToString(privKey.Serialize()) + if privKeyStr != test.privKey { + t.Errorf("ECPrivKey #%d (%s): mismatched "+ + "private key -- want %s, got %s", i, + test.name, test.privKey, privKeyStr) + continue + } + } + + pubKey, err := key.ECPubKey() + if err != nil { + t.Errorf("ECPubKey #%d (%s): unexpected error: %v", i, + test.name, err) + continue + } + pubKeyStr := hex.EncodeToString(pubKey.SerializeCompressed()) + if pubKeyStr != test.pubKey { + t.Errorf("ECPubKey #%d (%s): mismatched public key -- "+ + "want %s, got %s", i, test.name, test.pubKey, + pubKeyStr) + continue + } + + addr, err := key.Address(&chaincfg.MainNetParams) + if err != nil { + t.Errorf("Address #%d (%s): unexpected error: %v", i, + test.name, err) + continue + } + if addr.EncodeAddress() != test.address { + t.Errorf("Address #%d (%s): mismatched address -- want "+ + "%s, got %s", i, test.name, test.address, + addr.EncodeAddress()) + continue + } + } +} + +// TestNet ensures the network related APIs work as intended. +func TestNet(t *testing.T) { + tests := []struct { + name string + key string + origNet *chaincfg.Params + newNet *chaincfg.Params + newPriv string + newPub string + isPrivate bool + }{ + // Private extended keys. + { + name: "mainnet -> simnet", + key: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + origNet: &chaincfg.MainNetParams, + newNet: &chaincfg.SimNetParams, + newPriv: "sprv8Erh3X3hFeKunvVdAGQQtambRPapECWiTDtvsTGdyrhzhbYgnSZajRRWbihzvq4AM4ivm6uso31VfKaukwJJUs3GYihXP8ebhMb3F2AHu3P", + newPub: "spub4Tr3T2ab61tD1Qa6GHwRFiiKyRRJdfEZpSpXfqgFYCEyaPsqKysqHDjzSzMJSiUEGbcsG3w2SLMoTqn44B8x6u3MLRRkYfACTUBnHK79THk", + isPrivate: true, + }, + { + name: "simnet -> mainnet", + key: "sprv8Erh3X3hFeKunvVdAGQQtambRPapECWiTDtvsTGdyrhzhbYgnSZajRRWbihzvq4AM4ivm6uso31VfKaukwJJUs3GYihXP8ebhMb3F2AHu3P", + origNet: &chaincfg.SimNetParams, + newNet: &chaincfg.MainNetParams, + newPriv: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + newPub: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + isPrivate: true, + }, + { + name: "mainnet -> regtest", + key: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + origNet: &chaincfg.MainNetParams, + newNet: &chaincfg.RegressionNetParams, + newPriv: "tprv8ZgxMBicQKsPeDgjzdC36fs6bMjGApWDNLR9erAXMs5skhMv36j9MV5ecvfavji5khqjWaWSFhN3YcCUUdiKH6isR4Pwy3U5y5egddBr16m", + newPub: "tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp", + isPrivate: true, + }, + { + name: "regtest -> mainnet", + key: "tprv8ZgxMBicQKsPeDgjzdC36fs6bMjGApWDNLR9erAXMs5skhMv36j9MV5ecvfavji5khqjWaWSFhN3YcCUUdiKH6isR4Pwy3U5y5egddBr16m", + origNet: &chaincfg.RegressionNetParams, + newNet: &chaincfg.MainNetParams, + newPriv: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + newPub: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + isPrivate: true, + }, + + // Public extended keys. + { + name: "mainnet -> simnet", + key: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + origNet: &chaincfg.MainNetParams, + newNet: &chaincfg.SimNetParams, + newPub: "spub4Tr3T2ab61tD1Qa6GHwRFiiKyRRJdfEZpSpXfqgFYCEyaPsqKysqHDjzSzMJSiUEGbcsG3w2SLMoTqn44B8x6u3MLRRkYfACTUBnHK79THk", + isPrivate: false, + }, + { + name: "simnet -> mainnet", + key: "spub4Tr3T2ab61tD1Qa6GHwRFiiKyRRJdfEZpSpXfqgFYCEyaPsqKysqHDjzSzMJSiUEGbcsG3w2SLMoTqn44B8x6u3MLRRkYfACTUBnHK79THk", + origNet: &chaincfg.SimNetParams, + newNet: &chaincfg.MainNetParams, + newPub: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + isPrivate: false, + }, + { + name: "mainnet -> regtest", + key: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + origNet: &chaincfg.MainNetParams, + newNet: &chaincfg.RegressionNetParams, + newPub: "tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp", + isPrivate: false, + }, + { + name: "regtest -> mainnet", + key: "tpubD6NzVbkrYhZ4XgiXtGrdW5XDAPFCL9h7we1vwNCpn8tGbBcgfVYjXyhWo4E1xkh56hjod1RhGjxbaTLV3X4FyWuejifB9jusQ46QzG87VKp", + origNet: &chaincfg.RegressionNetParams, + newNet: &chaincfg.MainNetParams, + newPub: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + isPrivate: false, + }, + } + + for i, test := range tests { + extKey, err := NewKeyFromString(test.key) + if err != nil { + t.Errorf("NewKeyFromString #%d (%s): unexpected error "+ + "creating extended key: %v", i, test.name, + err) + continue + } + + if !extKey.IsForNet(test.origNet) { + t.Errorf("IsForNet #%d (%s): key is not for expected "+ + "network %v", i, test.name, test.origNet.Name) + continue + } + + extKey.SetNet(test.newNet) + if !extKey.IsForNet(test.newNet) { + t.Errorf("SetNet/IsForNet #%d (%s): key is not for "+ + "expected network %v", i, test.name, + test.newNet.Name) + continue + } + + if test.isPrivate { + privStr := extKey.String() + if privStr != test.newPriv { + t.Errorf("Serialize #%d (%s): mismatched serialized "+ + "private extended key -- got: %s, want: %s", i, + test.name, privStr, test.newPriv) + continue + } + + extKey, err = extKey.Neuter() + if err != nil { + t.Errorf("Neuter #%d (%s): unexpected error: %v ", i, + test.name, err) + continue + } + } + + pubStr := extKey.String() + if pubStr != test.newPub { + t.Errorf("Neuter #%d (%s): mismatched serialized "+ + "public extended key -- got: %s, want: %s", i, + test.name, pubStr, test.newPub) + continue + } + } +} + +// TestErrors performs some negative tests for various invalid cases to ensure +// the errors are handled properly. +func TestErrors(t *testing.T) { + // Should get an error when seed has too few bytes. + net := &chaincfg.MainNetParams + _, err := NewMaster(bytes.Repeat([]byte{0x00}, 15), net) + if err != ErrInvalidSeedLen { + t.Fatalf("NewMaster: mismatched error -- got: %v, want: %v", + err, ErrInvalidSeedLen) + } + + // Should get an error when seed has too many bytes. + _, err = NewMaster(bytes.Repeat([]byte{0x00}, 65), net) + if err != ErrInvalidSeedLen { + t.Fatalf("NewMaster: mismatched error -- got: %v, want: %v", + err, ErrInvalidSeedLen) + } + + // Generate a new key and neuter it to a public extended key. + seed, err := GenerateSeed(RecommendedSeedLen) + if err != nil { + t.Fatalf("GenerateSeed: unexpected error: %v", err) + } + extKey, err := NewMaster(seed, net) + if err != nil { + t.Fatalf("NewMaster: unexpected error: %v", err) + } + pubKey, err := extKey.Neuter() + if err != nil { + t.Fatalf("Neuter: unexpected error: %v", err) + } + + // Deriving a hardened child extended key should fail from a public key. + _, err = pubKey.Derive(HardenedKeyStart) + if err != ErrDeriveHardFromPublic { + t.Fatalf("Derive: mismatched error -- got: %v, want: %v", + err, ErrDeriveHardFromPublic) + } + + // NewKeyFromString failure tests. + tests := []struct { + name string + key string + err error + neuter bool + neuterErr error + }{ + { + name: "invalid key length", + key: "xpub1234", + err: ErrInvalidKeyLen, + }, + { + name: "bad checksum", + key: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EBygr15", + err: ErrBadChecksum, + }, + { + name: "pubkey not on curve", + key: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ1hr9Rwbk95YadvBkQXxzHBSngB8ndpW6QH7zhhsXZ2jHyZqPjk", + err: secp_ecdsa.ErrPubKeyNotOnCurve, + }, + { + name: "unsupported version", + key: "xbad4LfUL9eKmA66w2GJdVMqhvDmYGJpTGjWRAtjHqoUY17sGaymoMV9Cm3ocn9Ud6Hh2vLFVC7KSKCRVVrqc6dsEdsTjRV1WUmkK85YEUujAPX", + err: nil, + neuter: true, + neuterErr: chaincfg.ErrUnknownHDKeyID, + }, + } + + for i, test := range tests { + extKey, err := NewKeyFromString(test.key) + if !errors.Is(err, test.err) { + t.Errorf("NewKeyFromString #%d (%s): mismatched error "+ + "-- got: %v, want: %v", i, test.name, err, + test.err) + continue + } + + if test.neuter { + _, err := extKey.Neuter() + if !errors.Is(err, test.neuterErr) { + t.Errorf("Neuter #%d (%s): mismatched error "+ + "-- got: %v, want: %v", i, test.name, + err, test.neuterErr) + continue + } + } + } +} + +// TestZero ensures that zeroing an extended key works as intended. +func TestZero(t *testing.T) { + tests := []struct { + name string + master string + extKey string + net *chaincfg.Params + }{ + // Test vector 1 + { + name: "test vector 1 chain m", + master: "000102030405060708090a0b0c0d0e0f", + extKey: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + net: &chaincfg.MainNetParams, + }, + + // Test vector 2 + { + name: "test vector 2 chain m", + master: "fffcf9f6f3f0edeae7e4e1dedbd8d5d2cfccc9c6c3c0bdbab7b4b1aeaba8a5a29f9c999693908d8a8784817e7b7875726f6c696663605d5a5754514e4b484542", + extKey: "xprv9s21ZrQH143K31xYSDQpPDxsXRTUcvj2iNHm5NUtrGiGG5e2DtALGdso3pGz6ssrdK4PFmM8NSpSBHNqPqm55Qn3LqFtT2emdEXVYsCzC2U", + net: &chaincfg.MainNetParams, + }, + } + + // Use a closure to test that a key is zeroed since the tests create + // keys in different ways and need to test the same things multiple + // times. + testZeroed := func(i int, testName string, key *ExtendedKey) bool { + // Zeroing a key should result in it no longer being private + if key.IsPrivate() { + t.Errorf("IsPrivate #%d (%s): mismatched key type -- "+ + "want private %v, got private %v", i, testName, + false, key.IsPrivate()) + return false + } + + parentFP := key.ParentFingerprint() + if parentFP != 0 { + t.Errorf("ParentFingerprint #%d (%s): mismatched "+ + "parent fingerprint -- want %d, got %d", i, + testName, 0, parentFP) + return false + } + + wantKey := "zeroed extended key" + serializedKey := key.String() + if serializedKey != wantKey { + t.Errorf("String #%d (%s): mismatched serialized key "+ + "-- want %s, got %s", i, testName, wantKey, + serializedKey) + return false + } + + wantErr := ErrNotPrivExtKey + _, err := key.ECPrivKey() + if !reflect.DeepEqual(err, wantErr) { + t.Errorf("ECPrivKey #%d (%s): mismatched error: want "+ + "%v, got %v", i, testName, wantErr, err) + return false + } + + wantErr = secp_ecdsa.ErrPubKeyInvalidLen + _, err = key.ECPubKey() + if !errors.Is(err, wantErr) { + t.Errorf("ECPubKey #%d (%s): mismatched error: want "+ + "%v, got %v", i, testName, wantErr, err) + return false + } + + wantAddr := "1HT7xU2Ngenf7D4yocz2SAcnNLW7rK8d4E" + addr, err := key.Address(&chaincfg.MainNetParams) + if err != nil { + t.Errorf("Address #%d (%s): unexpected error: %v", i, + testName, err) + return false + } + if addr.EncodeAddress() != wantAddr { + t.Errorf("Address #%d (%s): mismatched address -- want "+ + "%s, got %s", i, testName, wantAddr, + addr.EncodeAddress()) + return false + } + + return true + } + + for i, test := range tests { + // Create new key from seed and get the neutered version. + masterSeed, err := hex.DecodeString(test.master) + if err != nil { + t.Errorf("DecodeString #%d (%s): unexpected error: %v", + i, test.name, err) + continue + } + key, err := NewMaster(masterSeed, test.net) + if err != nil { + t.Errorf("NewMaster #%d (%s): unexpected error when "+ + "creating new master key: %v", i, test.name, + err) + continue + } + neuteredKey, err := key.Neuter() + if err != nil { + t.Errorf("Neuter #%d (%s): unexpected error: %v", i, + test.name, err) + continue + } + + // Ensure both non-neutered and neutered keys are zeroed + // properly. + key.Zero() + if !testZeroed(i, test.name+" from seed not neutered", key) { + continue + } + neuteredKey.Zero() + if !testZeroed(i, test.name+" from seed neutered", key) { + continue + } + + // Deserialize key and get the neutered version. + key, err = NewKeyFromString(test.extKey) + if err != nil { + t.Errorf("NewKeyFromString #%d (%s): unexpected "+ + "error: %v", i, test.name, err) + continue + } + neuteredKey, err = key.Neuter() + if err != nil { + t.Errorf("Neuter #%d (%s): unexpected error: %v", i, + test.name, err) + continue + } + + // Ensure both non-neutered and neutered keys are zeroed + // properly. + key.Zero() + if !testZeroed(i, test.name+" deserialized not neutered", key) { + continue + } + neuteredKey.Zero() + if !testZeroed(i, test.name+" deserialized neutered", key) { + continue + } + } +} + +// TestMaximumDepth ensures that attempting to retrieve a child key when already +// at the maximum depth is not allowed. The serialization of a BIP32 key uses +// uint8 to encode the depth. This implicitly bounds the depth of the tree to +// 255 derivations. Here we test that an error is returned after 'max uint8'. +func TestMaximumDepth(t *testing.T) { + net := &chaincfg.MainNetParams + extKey, err := NewMaster([]byte(`abcd1234abcd1234abcd1234abcd1234`), net) + if err != nil { + t.Fatalf("NewMaster: unexpected error: %v", err) + } + + for i := uint8(0); i < math.MaxUint8; i++ { + if extKey.Depth() != i { + t.Fatalf("extendedkey depth %d should match expected value %d", + extKey.Depth(), i) + } + newKey, err := extKey.Derive(1) + if err != nil { + t.Fatalf("Derive: unexpected error: %v", err) + } + extKey = newKey + } + + noKey, err := extKey.Derive(1) + if err != ErrDeriveBeyondMaxDepth { + t.Fatalf("Derive: mismatched error: want %v, got %v", + ErrDeriveBeyondMaxDepth, err) + } + if noKey != nil { + t.Fatal("Derive: deriving 256th key should not succeed") + } +} + +// TestCloneWithVersion ensures proper conversion between standard and SLIP132 +// extended keys. +// +// The following tool was used for generating the tests: +// https://jlopp.github.io/xpub-converter +func TestCloneWithVersion(t *testing.T) { + tests := []struct { + name string + key string + version []byte + want string + wantErr error + }{ + { + name: "test xpub to zpub", + key: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + version: []byte{0x04, 0xb2, 0x47, 0x46}, + want: "zpub6jftahH18ngZxUuv6oSniLNrBCSSE1B4EEU59bwTCEt8x6aS6b2mdfLxbS4QS53g85SWWP6wexqeer516433gYpZQoJie2tcMYdJ1SYYYAL", + }, + { + name: "test zpub to xpub", + key: "zpub6jftahH18ngZxUuv6oSniLNrBCSSE1B4EEU59bwTCEt8x6aS6b2mdfLxbS4QS53g85SWWP6wexqeer516433gYpZQoJie2tcMYdJ1SYYYAL", + version: []byte{0x04, 0x88, 0xb2, 0x1e}, + want: "xpub661MyMwAqRbcFtXgS5sYJABqqG9YLmC4Q1Rdap9gSE8NqtwybGhePY2gZ29ESFjqJoCu1Rupje8YtGqsefD265TMg7usUDFdp6W1EGMcet8", + }, + { + name: "test xprv to zprv", + key: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + version: []byte{0x04, 0xb2, 0x43, 0x0c}, + want: "zprvAWgYBBk7JR8GjzqSzmunMCS7dAbwpYTCs1YUMDXqduMA5JFHZ3iX5s2UkAR6vBdcCYYa1S5o1fVLrKsrnpCQ4WpUd6aVUWP1bS2Yy5DoaKv", + }, + { + name: "test zprv to xprv", + key: "zprvAWgYBBk7JR8GjzqSzmunMCS7dAbwpYTCs1YUMDXqduMA5JFHZ3iX5s2UkAR6vBdcCYYa1S5o1fVLrKsrnpCQ4WpUd6aVUWP1bS2Yy5DoaKv", + version: []byte{0x04, 0x88, 0xad, 0xe4}, + want: "xprv9s21ZrQH143K3QTDL4LXw2F7HEK3wJUD2nW2nRk4stbPy6cq3jPPqjiChkVvvNKmPGJxWUtg6LnF5kejMRNNU3TGtRBeJgk33yuGBxrMPHi", + }, + { + name: "test invalid key id", + key: "zprvAWgYBBk7JR8GjzqSzmunMCS7dAbwpYTCs1YUMDXqduMA5JFHZ3iX5s2UkAR6vBdcCYYa1S5o1fVLrKsrnpCQ4WpUd6aVUWP1bS2Yy5DoaKv", + version: []byte{0x4B, 0x1D}, + wantErr: chaincfg.ErrUnknownHDKeyID, + }, + } + + for i, test := range tests { + extKey, err := NewKeyFromString(test.key) + if err != nil { + panic(err) // This is never expected to fail. + } + + got, err := extKey.CloneWithVersion(test.version) + if !reflect.DeepEqual(err, test.wantErr) { + t.Errorf("CloneWithVersion #%d (%s): unexpected error -- "+ + "want %v, got %v", i, test.name, test.wantErr, err) + continue + } + + if test.wantErr == nil { + if k := got.String(); k != test.want { + t.Errorf("CloneWithVersion #%d (%s): "+ + "got %s, want %s", i, test.name, k, test.want) + continue + } + } + } +} + +// TestLeadingZero ensures that deriving children from keys with a leading zero byte is done according +// to the BIP-32 standard and that the legacy method generates a backwards-compatible result. +func TestLeadingZero(t *testing.T) { + // The 400th seed results in a m/0' public key with a leading zero, allowing us to test + // the desired behavior. + ii := 399 + seed := make([]byte, 32) + binary.BigEndian.PutUint32(seed[28:], uint32(ii)) + masterKey, err := NewMaster(seed, &chaincfg.MainNetParams) + if err != nil { + t.Fatalf("hdkeychain.NewMaster failed: %v", err) + } + child0, err := masterKey.Derive(0 + HardenedKeyStart) + if err != nil { + t.Fatalf("masterKey.Derive failed: %v", err) + } + if !child0.IsAffectedByIssue172() { + t.Fatal("expected child0 to be affected by issue 172") + } + child1, err := child0.Derive(0 + HardenedKeyStart) + if err != nil { + t.Fatalf("child0.Derive failed: %v", err) + } + if child1.IsAffectedByIssue172() { + t.Fatal("did not expect child1 to be affected by issue 172") + } + + child1nonstandard, err := child0.DeriveNonStandard(0 + HardenedKeyStart) + if err != nil { + t.Fatalf("child0.DeriveNonStandard failed: %v", err) + } + + // This is the correct result based on BIP32 + if hex.EncodeToString(child1.key) != "a9b6b30a5b90b56ed48728c73af1d8a7ef1e9cc372ec21afcc1d9bdf269b0988" { + t.Error("incorrect standard BIP32 derivation") + } + + if hex.EncodeToString(child1nonstandard.key) != "ea46d8f58eb863a2d371a938396af8b0babe85c01920f59a8044412e70e837ee" { + t.Error("incorrect btcutil backwards compatible BIP32-like derivation") + } + + if !child0.IsAffectedByIssue172() { + t.Error("child 0 should be affected by issue 172") + } + + if child1.IsAffectedByIssue172() { + t.Error("child 1 should not be affected by issue 172") + } +} diff --git a/btcutil/hdkeychain/test_coverage.txt b/btcutil/hdkeychain/test_coverage.txt new file mode 100644 index 0000000000..c0bc7ef035 --- /dev/null +++ b/btcutil/hdkeychain/test_coverage.txt @@ -0,0 +1,20 @@ + +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.String 100.00% (18/18) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.Zero 100.00% (9/9) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.pubKeyBytes 100.00% (7/7) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.Neuter 100.00% (6/6) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.ECPrivKey 100.00% (4/4) +github.com/conformal/btcutil/hdkeychain/extendedkey.go zero 100.00% (3/3) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.SetNet 100.00% (3/3) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.Address 100.00% (2/2) +github.com/conformal/btcutil/hdkeychain/extendedkey.go newExtendedKey 100.00% (1/1) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.IsPrivate 100.00% (1/1) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.ParentFingerprint 100.00% (1/1) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.ECPubKey 100.00% (1/1) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.IsForNet 100.00% (1/1) +github.com/conformal/btcutil/hdkeychain/extendedkey.go NewKeyFromString 95.83% (23/24) +github.com/conformal/btcutil/hdkeychain/extendedkey.go ExtendedKey.Child 91.67% (33/36) +github.com/conformal/btcutil/hdkeychain/extendedkey.go NewMaster 91.67% (11/12) +github.com/conformal/btcutil/hdkeychain/extendedkey.go GenerateSeed 85.71% (6/7) +github.com/conformal/btcutil/hdkeychain ----------------------------- 95.59% (130/136) + diff --git a/btcutil/internal_test.go b/btcutil/internal_test.go new file mode 100644 index 0000000000..211b6ae64b --- /dev/null +++ b/btcutil/internal_test.go @@ -0,0 +1,147 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +This test file is part of the btcutil package rather than than the +btcutil_test package so it can bridge access to the internals to properly test +cases which are either not possible or can't reliably be tested via the public +interface. The functions are only exported while the tests are being run. +*/ + +package btcutil + +import ( + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil/base58" + "github.com/btcsuite/btcd/btcutil/bech32" + "golang.org/x/crypto/ripemd160" +) + +// SetBlockBytes sets the internal serialized block byte buffer to the passed +// buffer. It is used to inject errors and is only available to the test +// package. +func (b *Block) SetBlockBytes(buf []byte) { + b.serializedBlock = buf +} + +// TstAppDataDir makes the internal appDataDir function available to the test +// package. +func TstAppDataDir(goos, appName string, roaming bool) string { + return appDataDir(goos, appName, roaming) +} + +// TstAddressPubKeyHash makes an AddressPubKeyHash, setting the +// unexported fields with the parameters hash and netID. +func TstAddressPubKeyHash(hash [ripemd160.Size]byte, + netID byte) *AddressPubKeyHash { + + return &AddressPubKeyHash{ + hash: hash, + netID: netID, + } +} + +// TstAddressScriptHash makes an AddressScriptHash, setting the +// unexported fields with the parameters hash and netID. +func TstAddressScriptHash(hash [ripemd160.Size]byte, + netID byte) *AddressScriptHash { + + return &AddressScriptHash{ + hash: hash, + netID: netID, + } +} + +// TstAddressWitnessPubKeyHash creates an AddressWitnessPubKeyHash, initiating +// the fields as given. +func TstAddressWitnessPubKeyHash(version byte, program [20]byte, + hrp string) *AddressWitnessPubKeyHash { + + return &AddressWitnessPubKeyHash{ + AddressSegWit{ + hrp: hrp, + witnessVersion: version, + witnessProgram: program[:], + }, + } +} + +// TstAddressWitnessScriptHash creates an AddressWitnessScriptHash, initiating +// the fields as given. +func TstAddressWitnessScriptHash(version byte, program [32]byte, + hrp string) *AddressWitnessScriptHash { + + return &AddressWitnessScriptHash{ + AddressSegWit{ + hrp: hrp, + witnessVersion: version, + witnessProgram: program[:], + }, + } +} + +// TstAddressTaproot creates an AddressTaproot, initiating the fields as given. +func TstAddressTaproot(version byte, program [32]byte, + hrp string) *AddressTaproot { + + return &AddressTaproot{ + AddressSegWit{ + hrp: hrp, + witnessVersion: version, + witnessProgram: program[:], + }, + } +} + +// TstAddressPubKey makes an AddressPubKey, setting the unexported fields with +// the parameters. +func TstAddressPubKey(serializedPubKey []byte, pubKeyFormat PubKeyFormat, + netID byte) *AddressPubKey { + + pubKey, _ := btcec.ParsePubKey(serializedPubKey) + return &AddressPubKey{ + pubKeyFormat: pubKeyFormat, + pubKey: pubKey, + pubKeyHashID: netID, + } +} + +// TstAddressSAddr returns the expected script address bytes for +// P2PKH and P2SH bitcoin addresses. +func TstAddressSAddr(addr string) []byte { + decoded := base58.Decode(addr) + return decoded[1 : 1+ripemd160.Size] +} + +// TstAddressSegwitSAddr returns the expected witness program bytes for +// bech32 encoded P2WPKH and P2WSH bitcoin addresses. +func TstAddressSegwitSAddr(addr string) []byte { + _, data, err := bech32.Decode(addr) + if err != nil { + return []byte{} + } + + // First byte is version, rest is base 32 encoded data. + data, err = bech32.ConvertBits(data[1:], 5, 8, false) + if err != nil { + return []byte{} + } + return data +} + +// TstAddressTaprootSAddr returns the expected witness program bytes for a +// bech32m encoded P2TR bitcoin address. +func TstAddressTaprootSAddr(addr string) []byte { + _, data, err := bech32.Decode(addr) + if err != nil { + return []byte{} + } + + // First byte is version, rest is base 32 encoded data. + data, err = bech32.ConvertBits(data[1:], 5, 8, false) + if err != nil { + return []byte{} + } + return data +} diff --git a/btcutil/net.go b/btcutil/net.go new file mode 100644 index 0000000000..bf11733c64 --- /dev/null +++ b/btcutil/net.go @@ -0,0 +1,18 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +// +build !appengine + +package btcutil + +import ( + "net" +) + +// interfaceAddrs returns a list of the system's network interface addresses. +// It is wrapped here so that we can substitute it for other functions when +// building for systems that do not allow access to net.InterfaceAddrs(). +func interfaceAddrs() ([]net.Addr, error) { + return net.InterfaceAddrs() +} diff --git a/btcutil/net_noop.go b/btcutil/net_noop.go new file mode 100644 index 0000000000..b0b7c2e40a --- /dev/null +++ b/btcutil/net_noop.go @@ -0,0 +1,19 @@ +// Copyright (c) 2013-2014 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +// +build appengine + +package btcutil + +import ( + "net" +) + +// interfaceAddrs returns a list of the system's network interface addresses. +// It is wrapped here so that we can substitute it for a no-op function that +// returns an empty slice of net.Addr when building for systems that do not +// allow access to net.InterfaceAddrs(). +func interfaceAddrs() ([]net.Addr, error) { + return []net.Addr{}, nil +} diff --git a/btcutil/psbt/bip32.go b/btcutil/psbt/bip32.go new file mode 100644 index 0000000000..6b22dc0654 --- /dev/null +++ b/btcutil/psbt/bip32.go @@ -0,0 +1,80 @@ +package psbt + +import ( + "bytes" + "encoding/binary" +) + +// Bip32Derivation encapsulates the data for the input and output +// Bip32Derivation key-value fields. +// +// TODO(roasbeef): use hdkeychain here instead? +type Bip32Derivation struct { + // PubKey is the raw pubkey serialized in compressed format. + PubKey []byte + + // MasterKeyFingerprint is the finger print of the master pubkey. + MasterKeyFingerprint uint32 + + // Bip32Path is the BIP 32 path with child index as a distinct integer. + Bip32Path []uint32 +} + +// checkValid ensures that the PubKey in the Bip32Derivation struct is valid. +func (pb *Bip32Derivation) checkValid() bool { + return validatePubkey(pb.PubKey) +} + +// Bip32Sorter implements sort.Interface for the Bip32Derivation struct. +type Bip32Sorter []*Bip32Derivation + +func (s Bip32Sorter) Len() int { return len(s) } + +func (s Bip32Sorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func (s Bip32Sorter) Less(i, j int) bool { + return bytes.Compare(s[i].PubKey, s[j].PubKey) < 0 +} + +// readBip32Derivation deserializes a byte slice containing chunks of 4 byte +// little endian encodings of uint32 values, the first of which is the +// masterkeyfingerprint and the remainder of which are the derivation path. +func readBip32Derivation(path []byte) (uint32, []uint32, error) { + // BIP-0174 defines the derivation path being encoded as + // "<32-bit uint> <32-bit uint>*" + // with the asterisk meaning 0 to n times. Which in turn means that an + // empty path is valid, only the key fingerprint is mandatory. + if len(path)%4 != 0 { + return 0, nil, ErrInvalidPsbtFormat + } + + masterKeyInt := binary.LittleEndian.Uint32(path[:4]) + + var paths []uint32 + for i := 4; i < len(path); i += 4 { + paths = append(paths, binary.LittleEndian.Uint32(path[i:i+4])) + } + + return masterKeyInt, paths, nil +} + +// SerializeBIP32Derivation takes a master key fingerprint as defined in BIP32, +// along with a path specified as a list of uint32 values, and returns a +// bytestring specifying the derivation in the format required by BIP174: // +// master key fingerprint (4) || child index (4) || child index (4) || .... +func SerializeBIP32Derivation(masterKeyFingerprint uint32, + bip32Path []uint32) []byte { + + var masterKeyBytes [4]byte + binary.LittleEndian.PutUint32(masterKeyBytes[:], masterKeyFingerprint) + + derivationPath := make([]byte, 0, 4+4*len(bip32Path)) + derivationPath = append(derivationPath, masterKeyBytes[:]...) + for _, path := range bip32Path { + var pathbytes [4]byte + binary.LittleEndian.PutUint32(pathbytes[:], path) + derivationPath = append(derivationPath, pathbytes[:]...) + } + + return derivationPath +} diff --git a/btcutil/psbt/creator.go b/btcutil/psbt/creator.go new file mode 100644 index 0000000000..a5f832e0dd --- /dev/null +++ b/btcutil/psbt/creator.go @@ -0,0 +1,63 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package psbt + +import ( + "github.com/btcsuite/btcd/wire" +) + +// MinTxVersion is the lowest transaction version that we'll permit. +const MinTxVersion = 1 + +// New on provision of an input and output 'skeleton' for the transaction, a +// new partially populated PBST packet. The populated packet will include the +// unsigned transaction, and the set of known inputs and outputs contained +// within the unsigned transaction. The values of nLockTime, nSequence (per +// input) and transaction version (must be 1 of 2) must be specified here. Note +// that the default nSequence value is wire.MaxTxInSequenceNum. Referencing +// the PSBT BIP, this function serves the roles of teh Creator. +func New(inputs []*wire.OutPoint, + outputs []*wire.TxOut, version int32, nLockTime uint32, + nSequences []uint32) (*Packet, error) { + + // Create the new struct; the input and output lists will be empty, the + // unsignedTx object must be constructed and serialized, and that + // serialization should be entered as the only entry for the + // globalKVPairs list. + // + // Ensure that the version of the transaction is greater then our + // minimum allowed transaction version. There must be one sequence + // number per input. + if version < MinTxVersion || len(nSequences) != len(inputs) { + return nil, ErrInvalidPsbtFormat + } + + unsignedTx := wire.NewMsgTx(version) + unsignedTx.LockTime = nLockTime + for i, in := range inputs { + unsignedTx.AddTxIn(&wire.TxIn{ + PreviousOutPoint: *in, + Sequence: nSequences[i], + }) + } + for _, out := range outputs { + unsignedTx.AddTxOut(out) + } + + // The input and output lists are empty, but there is a list of those + // two lists, and each one must be of length matching the unsigned + // transaction; the unknown list can be nil. + pInputs := make([]PInput, len(unsignedTx.TxIn)) + pOutputs := make([]POutput, len(unsignedTx.TxOut)) + + // This new Psbt is "raw" and contains no key-value fields, so sanity + // checking with c.Cpsbt.SanityCheck() is not required. + return &Packet{ + UnsignedTx: unsignedTx, + Inputs: pInputs, + Outputs: pOutputs, + Unknowns: nil, + }, nil +} diff --git a/btcutil/psbt/extractor.go b/btcutil/psbt/extractor.go new file mode 100644 index 0000000000..dc7f10fddb --- /dev/null +++ b/btcutil/psbt/extractor.go @@ -0,0 +1,81 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package psbt + +// The Extractor requires provision of a single PSBT +// in which all necessary signatures are encoded, and +// uses it to construct a fully valid network serialized +// transaction. + +import ( + "bytes" + + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" +) + +// Extract takes a finalized psbt.Packet and outputs a finalized transaction +// instance. Note that if the PSBT is in-complete, then an error +// ErrIncompletePSBT will be returned. As the extracted transaction has been +// fully finalized, it will be ready for network broadcast once returned. +func Extract(p *Packet) (*wire.MsgTx, error) { + // If the packet isn't complete, then we'll return an error as it + // doesn't have all the required witness data. + if !p.IsComplete() { + return nil, ErrIncompletePSBT + } + + // First, we'll make a copy of the underlying unsigned transaction (the + // initial template) so we don't mutate it during our activates below. + finalTx := p.UnsignedTx.Copy() + + // For each input, we'll now populate any relevant witness and + // sigScript data. + for i, tin := range finalTx.TxIn { + // We'll grab the corresponding internal packet input which + // matches this materialized transaction input and emplace that + // final sigScript (if present). + pInput := p.Inputs[i] + if pInput.FinalScriptSig != nil { + tin.SignatureScript = pInput.FinalScriptSig + } + + // Similarly, if there's a final witness, then we'll also need + // to extract that as well, parsing the lower-level transaction + // encoding. + if pInput.FinalScriptWitness != nil { + // In order to set the witness, need to re-deserialize + // the field as encoded within the PSBT packet. For + // each input, the witness is encoded as a stack with + // one or more items. + witnessReader := bytes.NewReader( + pInput.FinalScriptWitness, + ) + + // First we extract the number of witness elements + // encoded in the above witnessReader. + witCount, err := wire.ReadVarInt(witnessReader, 0) + if err != nil { + return nil, err + } + + // Now that we know how may inputs we'll need, we'll + // construct a packing slice, then read out each input + // (with a varint prefix) from the witnessReader. + tin.Witness = make(wire.TxWitness, witCount) + for j := uint64(0); j < witCount; j++ { + wit, err := wire.ReadVarBytes( + witnessReader, 0, txscript.MaxScriptSize, "witness", + ) + if err != nil { + return nil, err + } + tin.Witness[j] = wit + } + } + } + + return finalTx, nil +} diff --git a/btcutil/psbt/finalizer.go b/btcutil/psbt/finalizer.go new file mode 100644 index 0000000000..8c50a94b48 --- /dev/null +++ b/btcutil/psbt/finalizer.go @@ -0,0 +1,580 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package psbt + +// The Finalizer requires provision of a single PSBT input +// in which all necessary signatures are encoded, and +// uses it to construct valid final sigScript and scriptWitness +// fields. +// NOTE that p2sh (legacy) and p2wsh currently support only +// multisig and no other custom script. + +import ( + "bytes" + "fmt" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" +) + +// isFinalized considers this input finalized if it contains at least one of +// the FinalScriptSig or FinalScriptWitness are filled (which only occurs in a +// successful call to Finalize*). +func isFinalized(p *Packet, inIndex int) bool { + input := p.Inputs[inIndex] + return input.FinalScriptSig != nil || input.FinalScriptWitness != nil +} + +// isFinalizableWitnessInput returns true if the target input is a witness UTXO +// that can be finalized. +func isFinalizableWitnessInput(pInput *PInput) bool { + pkScript := pInput.WitnessUtxo.PkScript + + switch { + // If this is a native witness output, then we require both + // the witness script, but not a redeem script. + case txscript.IsWitnessProgram(pkScript): + switch { + case txscript.IsPayToWitnessScriptHash(pkScript): + if pInput.WitnessScript == nil || + pInput.RedeemScript != nil { + + return false + } + + case txscript.IsPayToTaproot(pkScript): + if pInput.TaprootKeySpendSig == nil && + pInput.TaprootScriptSpendSig == nil { + + return false + } + + // For each of the script spend signatures we need a + // corresponding tap script leaf with the control block. + for _, sig := range pInput.TaprootScriptSpendSig { + _, err := FindLeafScript(pInput, sig.LeafHash) + if err != nil { + return false + } + } + + default: + // A P2WKH output on the other hand doesn't need + // neither a witnessScript or redeemScript. + if pInput.WitnessScript != nil || + pInput.RedeemScript != nil { + + return false + } + } + + // For nested P2SH inputs, we verify that a witness script is known. + case txscript.IsPayToScriptHash(pkScript): + if pInput.RedeemScript == nil { + return false + } + + // If this is a nested P2SH input, then it must also have a + // witness script, while we don't need one for P2WKH. + if txscript.IsPayToWitnessScriptHash(pInput.RedeemScript) { + if pInput.WitnessScript == nil { + return false + } + } else if txscript.IsPayToWitnessPubKeyHash(pInput.RedeemScript) { + if pInput.WitnessScript != nil { + return false + } + } else { + // unrecognized type + return false + } + + // If this isn't a nested P2SH output or a native witness output, then + // we can't finalize this input as we don't understand it. + default: + return false + } + + return true +} + +// isFinalizableLegacyInput returns true of the passed input a legacy input +// (non-witness) that can be finalized. +func isFinalizableLegacyInput(p *Packet, pInput *PInput, inIndex int) bool { + // If the input has a witness, then it's invalid. + if pInput.WitnessScript != nil { + return false + } + + // Otherwise, we'll verify that we only have a RedeemScript if the prev + // output script is P2SH. + outIndex := p.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Index + if txscript.IsPayToScriptHash(pInput.NonWitnessUtxo.TxOut[outIndex].PkScript) { + if pInput.RedeemScript == nil { + return false + } + } else { + if pInput.RedeemScript != nil { + return false + } + } + + return true +} + +// isFinalizable checks whether the structure of the entry for the input of the +// psbt.Packet at index inIndex contains sufficient information to finalize +// this input. +func isFinalizable(p *Packet, inIndex int) bool { + pInput := p.Inputs[inIndex] + + // The input cannot be finalized without any signatures. + if pInput.PartialSigs == nil && pInput.TaprootKeySpendSig == nil && + pInput.TaprootScriptSpendSig == nil { + + return false + } + + // For an input to be finalized, we'll one of two possible top-level + // UTXOs present. Each UTXO type has a distinct set of requirements to + // be considered finalized. + switch { + + // A witness input must be either native P2WSH or nested P2SH with all + // relevant sigScript or witness data populated. + case pInput.WitnessUtxo != nil: + if !isFinalizableWitnessInput(&pInput) { + return false + } + + case pInput.NonWitnessUtxo != nil: + if !isFinalizableLegacyInput(p, &pInput, inIndex) { + return false + } + + // If neither a known UTXO type isn't present at all, then we'll + // return false as we need one of them. + default: + return false + } + + return true +} + +// MaybeFinalize attempts to finalize the input at index inIndex in the PSBT p, +// returning true with no error if it succeeds, OR if the input has already +// been finalized. +func MaybeFinalize(p *Packet, inIndex int) (bool, error) { + if isFinalized(p, inIndex) { + return true, nil + } + + if !isFinalizable(p, inIndex) { + return false, ErrNotFinalizable + } + + if err := Finalize(p, inIndex); err != nil { + return false, err + } + + return true, nil +} + +// MaybeFinalizeAll attempts to finalize all inputs of the psbt.Packet that are +// not already finalized, and returns an error if it fails to do so. +func MaybeFinalizeAll(p *Packet) error { + for i := range p.UnsignedTx.TxIn { + success, err := MaybeFinalize(p, i) + if err != nil || !success { + return err + } + } + + return nil +} + +// Finalize assumes that the provided psbt.Packet struct has all partial +// signatures and redeem scripts/witness scripts already prepared for the +// specified input, and so removes all temporary data and replaces them with +// completed sigScript and witness fields, which are stored in key-types 07 and +// 08. The witness/non-witness utxo fields in the inputs (key-types 00 and 01) +// are left intact as they may be needed for validation (?). If there is any +// invalid or incomplete data, an error is returned. +func Finalize(p *Packet, inIndex int) error { + pInput := p.Inputs[inIndex] + + // Depending on the UTXO type, we either attempt to finalize it as a + // witness or legacy UTXO. + switch { + case pInput.WitnessUtxo != nil: + pkScript := pInput.WitnessUtxo.PkScript + + switch { + case txscript.IsPayToTaproot(pkScript): + if err := finalizeTaprootInput(p, inIndex); err != nil { + return err + } + + default: + if err := finalizeWitnessInput(p, inIndex); err != nil { + return err + } + } + + case pInput.NonWitnessUtxo != nil: + if err := finalizeNonWitnessInput(p, inIndex); err != nil { + return err + } + + default: + return ErrInvalidPsbtFormat + } + + // Before returning we sanity check the PSBT to ensure we don't extract + // an invalid transaction or produce an invalid intermediate state. + if err := p.SanityCheck(); err != nil { + return err + } + + return nil +} + +// checkFinalScriptSigWitness checks whether a given input in the psbt.Packet +// struct already has the fields 07 (FinalInScriptSig) or 08 (FinalInWitness). +// If so, it returns true. It does not modify the Psbt. +func checkFinalScriptSigWitness(p *Packet, inIndex int) bool { + pInput := p.Inputs[inIndex] + + if pInput.FinalScriptSig != nil { + return true + } + + if pInput.FinalScriptWitness != nil { + return true + } + + return false +} + +// finalizeNonWitnessInput attempts to create a PsbtInFinalScriptSig field for +// the input at index inIndex, and removes all other fields except for the UTXO +// field, for an input of type non-witness, or returns an error. +func finalizeNonWitnessInput(p *Packet, inIndex int) error { + // If this input has already been finalized, then we'll return an error + // as we can't proceed. + if checkFinalScriptSigWitness(p, inIndex) { + return ErrInputAlreadyFinalized + } + + // Our goal here is to construct a sigScript given the pubkey, + // signature (keytype 02), of which there might be multiple, and the + // redeem script field (keytype 04) if present (note, it is not present + // for p2pkh type inputs). + var sigScript []byte + + pInput := p.Inputs[inIndex] + containsRedeemScript := pInput.RedeemScript != nil + + var ( + pubKeys [][]byte + sigs [][]byte + ) + for _, ps := range pInput.PartialSigs { + pubKeys = append(pubKeys, ps.PubKey) + + sigOK := checkSigHashFlags(ps.Signature, &pInput) + if !sigOK { + return ErrInvalidSigHashFlags + } + + sigs = append(sigs, ps.Signature) + } + + // We have failed to identify at least 1 (sig, pub) pair in the PSBT, + // which indicates it was not ready to be finalized. As a result, we + // can't proceed. + if len(sigs) < 1 || len(pubKeys) < 1 { + return ErrNotFinalizable + } + + // If this input doesn't need a redeem script (P2PKH), then we'll + // construct a simple sigScript that's just the signature then the + // pubkey (OP_CHECKSIG). + var err error + if !containsRedeemScript { + // At this point, we should only have a single signature and + // pubkey. + if len(sigs) != 1 || len(pubKeys) != 1 { + return ErrNotFinalizable + } + + // In this case, our sigScript is just: . + builder := txscript.NewScriptBuilder() + builder.AddData(sigs[0]).AddData(pubKeys[0]) + sigScript, err = builder.Script() + if err != nil { + return err + } + } else { + // This is assumed p2sh multisig Given redeemScript and pubKeys + // we can decide in what order signatures must be appended. + orderedSigs, err := extractKeyOrderFromScript( + pInput.RedeemScript, pubKeys, sigs, + ) + if err != nil { + return err + } + + // At this point, we assume that this is a mult-sig input, so + // we construct our sigScript which looks something like this + // (mind the extra element for the extra multi-sig pop): + // * + // + // TODO(waxwing): the below is specific to the multisig case. + builder := txscript.NewScriptBuilder() + builder.AddOp(txscript.OP_FALSE) + for _, os := range orderedSigs { + builder.AddData(os) + } + builder.AddData(pInput.RedeemScript) + sigScript, err = builder.Script() + if err != nil { + return err + } + } + + // At this point, a sigScript has been constructed. Remove all fields + // other than non-witness utxo (00) and finaliscriptsig (07) + newInput := NewPsbtInput(pInput.NonWitnessUtxo, nil) + newInput.FinalScriptSig = sigScript + + // Overwrite the entry in the input list at the correct index. Note + // that this removes all the other entries in the list for this input + // index. + p.Inputs[inIndex] = *newInput + + return nil +} + +// finalizeWitnessInput attempts to create PsbtInFinalScriptSig field and +// PsbtInFinalScriptWitness field for input at index inIndex, and removes all +// other fields except for the utxo field, for an input of type witness, or +// returns an error. +func finalizeWitnessInput(p *Packet, inIndex int) error { + // If this input has already been finalized, then we'll return an error + // as we can't proceed. + if checkFinalScriptSigWitness(p, inIndex) { + return ErrInputAlreadyFinalized + } + + // Depending on the actual output type, we'll either populate a + // serializedWitness or a witness as well asa sigScript. + var ( + sigScript []byte + serializedWitness []byte + ) + + pInput := p.Inputs[inIndex] + + // First we'll validate and collect the pubkey+sig pairs from the set + // of partial signatures. + var ( + pubKeys [][]byte + sigs [][]byte + ) + for _, ps := range pInput.PartialSigs { + pubKeys = append(pubKeys, ps.PubKey) + + sigOK := checkSigHashFlags(ps.Signature, &pInput) + if !sigOK { + return ErrInvalidSigHashFlags + + } + + sigs = append(sigs, ps.Signature) + } + + // If at this point, we don't have any pubkey+sig pairs, then we bail + // as we can't proceed. + if len(sigs) == 0 || len(pubKeys) == 0 { + return ErrNotFinalizable + } + + containsRedeemScript := pInput.RedeemScript != nil + cointainsWitnessScript := pInput.WitnessScript != nil + + // If there's no redeem script, then we assume that this is native + // segwit input. + var err error + if !containsRedeemScript { + // If we have only a sigley pubkey+sig pair, and no witness + // script, then we assume this is a P2WKH input. + if len(pubKeys) == 1 && len(sigs) == 1 && + !cointainsWitnessScript { + + serializedWitness, err = writePKHWitness( + sigs[0], pubKeys[0], + ) + if err != nil { + return err + } + } else { + // Otherwise, we must have a witnessScript field, so + // we'll generate a valid multi-sig witness. + // + // NOTE: We tacitly assume multisig. + // + // TODO(roasbeef): need to add custom finalize for + // non-multisig P2WSH outputs (HTLCs, delay outputs, + // etc). + if !cointainsWitnessScript { + return ErrNotFinalizable + } + + serializedWitness, err = getMultisigScriptWitness( + pInput.WitnessScript, pubKeys, sigs, + ) + if err != nil { + return err + } + } + } else { + // Otherwise, we assume that this is a p2wsh multi-sig output, + // which is nested in a p2sh, or a p2wkh nested in a p2sh. + // + // In this case, we'll take the redeem script (the witness + // program in this case), and push it on the stack within the + // sigScript. + builder := txscript.NewScriptBuilder() + builder.AddData(pInput.RedeemScript) + sigScript, err = builder.Script() + if err != nil { + return err + } + + // If don't have a witness script, then we assume this is a + // nested p2wkh output. + if !cointainsWitnessScript { + // Assumed p2sh-p2wkh Here the witness is just (sig, + // pub) as for p2pkh case + if len(sigs) != 1 || len(pubKeys) != 1 { + return ErrNotFinalizable + } + + serializedWitness, err = writePKHWitness(sigs[0], pubKeys[0]) + if err != nil { + return err + } + + } else { + // Otherwise, we assume that this is a p2wsh multi-sig, + // so we generate the proper witness. + serializedWitness, err = getMultisigScriptWitness( + pInput.WitnessScript, pubKeys, sigs, + ) + if err != nil { + return err + } + } + } + + // At this point, a witness has been constructed, and a sigScript (if + // nested; else it's []). Remove all fields other than witness utxo + // (01) and finalscriptsig (07), finalscriptwitness (08). + newInput := NewPsbtInput(nil, pInput.WitnessUtxo) + if len(sigScript) > 0 { + newInput.FinalScriptSig = sigScript + } + + newInput.FinalScriptWitness = serializedWitness + + // Finally, we overwrite the entry in the input list at the correct + // index. + p.Inputs[inIndex] = *newInput + return nil +} + +// finalizeTaprootInput attempts to create PsbtInFinalScriptWitness field for +// input at index inIndex, and removes all other fields except for the utxo +// field, for an input of type p2tr, or returns an error. +func finalizeTaprootInput(p *Packet, inIndex int) error { + // If this input has already been finalized, then we'll return an error + // as we can't proceed. + if checkFinalScriptSigWitness(p, inIndex) { + return ErrInputAlreadyFinalized + } + + // Any p2tr input will only have a witness script, no sig script. + var ( + serializedWitness []byte + err error + pInput = &p.Inputs[inIndex] + ) + + // What spend path did we take? + switch { + // Key spend path. + case len(pInput.TaprootKeySpendSig) > 0: + serializedWitness, err = writeWitness(pInput.TaprootKeySpendSig) + + // Script spend path. + case len(pInput.TaprootScriptSpendSig) > 0: + var witnessStack wire.TxWitness + + // If there are multiple script spend signatures, we assume they + // are from multiple signing participants for the same leaf + // script that uses OP_CHECKSIGADD for multi-sig. Signing + // multiple possible execution paths at the same time is + // currently not supported by this library. + targetLeafHash := pInput.TaprootScriptSpendSig[0].LeafHash + leafScript, err := FindLeafScript(pInput, targetLeafHash) + if err != nil { + return fmt.Errorf("control block for script spend " + + "signature not found") + } + + // The witness stack will contain all signatures, followed by + // the script itself and then the control block. + for idx, scriptSpendSig := range pInput.TaprootScriptSpendSig { + // Make sure that if there are indeed multiple + // signatures, they all reference the same leaf hash. + if !bytes.Equal(scriptSpendSig.LeafHash, targetLeafHash) { + return fmt.Errorf("script spend signature %d "+ + "references different target leaf "+ + "hash than first signature; only one "+ + "script path is supported", idx) + } + + sig := append([]byte{}, scriptSpendSig.Signature...) + if scriptSpendSig.SigHash != txscript.SigHashDefault { + sig = append(sig, byte(scriptSpendSig.SigHash)) + } + witnessStack = append(witnessStack, sig) + } + + // Complete the witness stack with the executed script and the + // serialized control block. + witnessStack = append(witnessStack, leafScript.Script) + witnessStack = append(witnessStack, leafScript.ControlBlock) + + serializedWitness, err = writeWitness(witnessStack...) + + default: + return ErrInvalidPsbtFormat + } + if err != nil { + return err + } + + // At this point, a witness has been constructed. Remove all fields + // other than witness utxo (01) and finalscriptsig (07), + // finalscriptwitness (08). + newInput := NewPsbtInput(nil, pInput.WitnessUtxo) + newInput.FinalScriptWitness = serializedWitness + + // Finally, we overwrite the entry in the input list at the correct + // index. + p.Inputs[inIndex] = *newInput + return nil +} diff --git a/btcutil/psbt/go.mod b/btcutil/psbt/go.mod new file mode 100644 index 0000000000..80f57fc1b3 --- /dev/null +++ b/btcutil/psbt/go.mod @@ -0,0 +1,26 @@ +module github.com/btcsuite/btcd/btcutil/psbt + +go 1.17 + +require ( + github.com/btcsuite/btcd v0.23.0 + github.com/btcsuite/btcd/btcec/v2 v2.1.3 + github.com/btcsuite/btcd/btcutil v1.1.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 + github.com/davecgh/go-spew v1.1.1 + github.com/stretchr/testify v1.7.0 +) + +require ( + github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 // indirect + golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) + +replace github.com/btcsuite/btcd/btcutil => ../ + +replace github.com/btcsuite/btcd => ../.. diff --git a/btcutil/psbt/go.sum b/btcutil/psbt/go.sum new file mode 100644 index 0000000000..a901223de4 --- /dev/null +++ b/btcutil/psbt/go.sum @@ -0,0 +1,86 @@ +github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd/btcec/v2 v2.1.3 h1:xM/n3yIhHAhHy04z4i43C8p4ehixJZMsnrVJkgl+MTE= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= +github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= +github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= +github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= +github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= +github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= +github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= +golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= +golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= +gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/btcutil/psbt/partial_input.go b/btcutil/psbt/partial_input.go new file mode 100644 index 0000000000..7686c451cb --- /dev/null +++ b/btcutil/psbt/partial_input.go @@ -0,0 +1,605 @@ +package psbt + +import ( + "bytes" + "encoding/binary" + "io" + "sort" + + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" +) + +// PInput is a struct encapsulating all the data that can be attached to any +// specific input of the PSBT. +type PInput struct { + NonWitnessUtxo *wire.MsgTx + WitnessUtxo *wire.TxOut + PartialSigs []*PartialSig + SighashType txscript.SigHashType + RedeemScript []byte + WitnessScript []byte + Bip32Derivation []*Bip32Derivation + FinalScriptSig []byte + FinalScriptWitness []byte + TaprootKeySpendSig []byte + TaprootScriptSpendSig []*TaprootScriptSpendSig + TaprootLeafScript []*TaprootTapLeafScript + TaprootBip32Derivation []*TaprootBip32Derivation + TaprootInternalKey []byte + TaprootMerkleRoot []byte + Unknowns []*Unknown +} + +// NewPsbtInput creates an instance of PsbtInput given either a nonWitnessUtxo +// or a witnessUtxo. +// +// NOTE: Only one of the two arguments should be specified, with the other +// being `nil`; otherwise the created PsbtInput object will fail IsSane() +// checks and will not be usable. +func NewPsbtInput(nonWitnessUtxo *wire.MsgTx, + witnessUtxo *wire.TxOut) *PInput { + + return &PInput{ + NonWitnessUtxo: nonWitnessUtxo, + WitnessUtxo: witnessUtxo, + PartialSigs: []*PartialSig{}, + SighashType: 0, + RedeemScript: nil, + WitnessScript: nil, + Bip32Derivation: []*Bip32Derivation{}, + FinalScriptSig: nil, + FinalScriptWitness: nil, + Unknowns: nil, + } +} + +// IsSane returns true only if there are no conflicting values in the Psbt +// PInput. For segwit v0 no checks are currently implemented. +func (pi *PInput) IsSane() bool { + + // TODO(guggero): Implement sanity checks for segwit v1. For segwit v0 + // it is unsafe to only rely on the witness UTXO so we don't check that + // only one is set anymore. + // See https://github.com/bitcoin/bitcoin/pull/19215. + + return true +} + +// deserialize attempts to deserialize a new PInput from the passed io.Reader. +func (pi *PInput) deserialize(r io.Reader) error { + for { + keyint, keydata, err := getKey(r) + if err != nil { + return err + } + if keyint == -1 { + // Reached separator byte + break + } + value, err := wire.ReadVarBytes( + r, 0, MaxPsbtValueLength, "PSBT value", + ) + if err != nil { + return err + } + + switch InputType(keyint) { + + case NonWitnessUtxoType: + if pi.NonWitnessUtxo != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + tx := wire.NewMsgTx(2) + + err := tx.Deserialize(bytes.NewReader(value)) + if err != nil { + return err + } + pi.NonWitnessUtxo = tx + + case WitnessUtxoType: + if pi.WitnessUtxo != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + txout, err := readTxOut(value) + if err != nil { + return err + } + pi.WitnessUtxo = txout + + case PartialSigType: + newPartialSig := PartialSig{ + PubKey: keydata, + Signature: value, + } + + if !newPartialSig.checkValid() { + return ErrInvalidPsbtFormat + } + + // Duplicate keys are not allowed + for _, x := range pi.PartialSigs { + if bytes.Equal(x.PubKey, newPartialSig.PubKey) { + return ErrDuplicateKey + } + } + + pi.PartialSigs = append(pi.PartialSigs, &newPartialSig) + + case SighashType: + if pi.SighashType != 0 { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + // Bounds check on value here since the sighash type must be a + // 32-bit unsigned integer. + if len(value) != 4 { + return ErrInvalidKeydata + } + + shtype := txscript.SigHashType( + binary.LittleEndian.Uint32(value), + ) + pi.SighashType = shtype + + case RedeemScriptInputType: + if pi.RedeemScript != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + pi.RedeemScript = value + + case WitnessScriptInputType: + if pi.WitnessScript != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + pi.WitnessScript = value + + case Bip32DerivationInputType: + if !validatePubkey(keydata) { + return ErrInvalidPsbtFormat + } + master, derivationPath, err := readBip32Derivation(value) + if err != nil { + return err + } + + // Duplicate keys are not allowed + for _, x := range pi.Bip32Derivation { + if bytes.Equal(x.PubKey, keydata) { + return ErrDuplicateKey + } + } + + pi.Bip32Derivation = append( + pi.Bip32Derivation, + &Bip32Derivation{ + PubKey: keydata, + MasterKeyFingerprint: master, + Bip32Path: derivationPath, + }, + ) + + case FinalScriptSigType: + if pi.FinalScriptSig != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + pi.FinalScriptSig = value + + case FinalScriptWitnessType: + if pi.FinalScriptWitness != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + pi.FinalScriptWitness = value + + case TaprootKeySpendSignatureType: + if pi.TaprootKeySpendSig != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + // The signature can either be 64 or 65 bytes. + switch { + case len(value) == schnorrSigMinLength: + if !validateSchnorrSignature(value) { + return ErrInvalidKeydata + } + + case len(value) == schnorrSigMaxLength: + if !validateSchnorrSignature( + value[0:schnorrSigMinLength], + ) { + return ErrInvalidKeydata + } + + default: + return ErrInvalidKeydata + } + + pi.TaprootKeySpendSig = value + + case TaprootScriptSpendSignatureType: + // The key data for the script spend signature is: + // + if len(keydata) != 32*2 { + return ErrInvalidKeydata + } + + newPartialSig := TaprootScriptSpendSig{ + XOnlyPubKey: keydata[:32], + LeafHash: keydata[32:], + } + + // The signature can either be 64 or 65 bytes. + switch { + case len(value) == schnorrSigMinLength: + newPartialSig.Signature = value + newPartialSig.SigHash = txscript.SigHashDefault + + case len(value) == schnorrSigMaxLength: + newPartialSig.Signature = value[0:schnorrSigMinLength] + newPartialSig.SigHash = txscript.SigHashType( + value[schnorrSigMinLength], + ) + + default: + return ErrInvalidKeydata + } + + if !newPartialSig.checkValid() { + return ErrInvalidKeydata + } + + // Duplicate keys are not allowed. + for _, x := range pi.TaprootScriptSpendSig { + if x.EqualKey(&newPartialSig) { + return ErrDuplicateKey + } + } + + pi.TaprootScriptSpendSig = append( + pi.TaprootScriptSpendSig, &newPartialSig, + ) + + case TaprootLeafScriptType: + if len(value) < 1 { + return ErrInvalidKeydata + } + + newLeafScript := TaprootTapLeafScript{ + ControlBlock: keydata, + Script: value[:len(value)-1], + LeafVersion: txscript.TapscriptLeafVersion( + value[len(value)-1], + ), + } + + if !newLeafScript.checkValid() { + return ErrInvalidKeydata + } + + // Duplicate keys are not allowed. + for _, x := range pi.TaprootLeafScript { + if bytes.Equal( + x.ControlBlock, + newLeafScript.ControlBlock, + ) { + return ErrDuplicateKey + } + } + + pi.TaprootLeafScript = append( + pi.TaprootLeafScript, &newLeafScript, + ) + + case TaprootBip32DerivationInputType: + if !validateXOnlyPubkey(keydata) { + return ErrInvalidKeydata + } + + taprootDerivation, err := readTaprootBip32Derivation( + keydata, value, + ) + if err != nil { + return err + } + + // Duplicate keys are not allowed. + for _, x := range pi.TaprootBip32Derivation { + if bytes.Equal(x.XOnlyPubKey, keydata) { + return ErrDuplicateKey + } + } + + pi.TaprootBip32Derivation = append( + pi.TaprootBip32Derivation, taprootDerivation, + ) + + case TaprootInternalKeyInputType: + if pi.TaprootInternalKey != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + if !validateXOnlyPubkey(value) { + return ErrInvalidKeydata + } + + pi.TaprootInternalKey = value + + case TaprootMerkleRootType: + if pi.TaprootMerkleRoot != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + pi.TaprootMerkleRoot = value + + default: + // A fall through case for any proprietary types. + keyintanddata := []byte{byte(keyint)} + keyintanddata = append(keyintanddata, keydata...) + newUnknown := &Unknown{ + Key: keyintanddata, + Value: value, + } + + // Duplicate key+keydata are not allowed + for _, x := range pi.Unknowns { + if bytes.Equal(x.Key, newUnknown.Key) && + bytes.Equal(x.Value, newUnknown.Value) { + return ErrDuplicateKey + } + } + + pi.Unknowns = append(pi.Unknowns, newUnknown) + } + } + + return nil +} + +// serialize attempts to serialize the target PInput into the passed io.Writer. +func (pi *PInput) serialize(w io.Writer) error { + + if !pi.IsSane() { + return ErrInvalidPsbtFormat + } + + if pi.NonWitnessUtxo != nil { + var buf bytes.Buffer + err := pi.NonWitnessUtxo.Serialize(&buf) + if err != nil { + return err + } + + err = serializeKVPairWithType( + w, uint8(NonWitnessUtxoType), nil, buf.Bytes(), + ) + if err != nil { + return err + } + } + if pi.WitnessUtxo != nil { + var buf bytes.Buffer + err := wire.WriteTxOut(&buf, 0, 0, pi.WitnessUtxo) + if err != nil { + return err + } + + err = serializeKVPairWithType( + w, uint8(WitnessUtxoType), nil, buf.Bytes(), + ) + if err != nil { + return err + } + } + + if pi.FinalScriptSig == nil && pi.FinalScriptWitness == nil { + sort.Sort(PartialSigSorter(pi.PartialSigs)) + for _, ps := range pi.PartialSigs { + err := serializeKVPairWithType( + w, uint8(PartialSigType), ps.PubKey, + ps.Signature, + ) + if err != nil { + return err + } + } + + if pi.SighashType != 0 { + var shtBytes [4]byte + binary.LittleEndian.PutUint32( + shtBytes[:], uint32(pi.SighashType), + ) + + err := serializeKVPairWithType( + w, uint8(SighashType), nil, shtBytes[:], + ) + if err != nil { + return err + } + } + + if pi.RedeemScript != nil { + err := serializeKVPairWithType( + w, uint8(RedeemScriptInputType), nil, + pi.RedeemScript, + ) + if err != nil { + return err + } + } + + if pi.WitnessScript != nil { + err := serializeKVPairWithType( + w, uint8(WitnessScriptInputType), nil, + pi.WitnessScript, + ) + if err != nil { + return err + } + } + + sort.Sort(Bip32Sorter(pi.Bip32Derivation)) + for _, kd := range pi.Bip32Derivation { + err := serializeKVPairWithType( + w, + uint8(Bip32DerivationInputType), kd.PubKey, + SerializeBIP32Derivation( + kd.MasterKeyFingerprint, kd.Bip32Path, + ), + ) + if err != nil { + return err + } + } + + if pi.TaprootKeySpendSig != nil { + err := serializeKVPairWithType( + w, uint8(TaprootKeySpendSignatureType), nil, + pi.TaprootKeySpendSig, + ) + if err != nil { + return err + } + } + + sort.Slice(pi.TaprootScriptSpendSig, func(i, j int) bool { + return pi.TaprootScriptSpendSig[i].SortBefore( + pi.TaprootScriptSpendSig[j], + ) + }) + for _, scriptSpend := range pi.TaprootScriptSpendSig { + keyData := append([]byte{}, scriptSpend.XOnlyPubKey...) + keyData = append(keyData, scriptSpend.LeafHash...) + value := append([]byte{}, scriptSpend.Signature...) + if scriptSpend.SigHash != txscript.SigHashDefault { + value = append(value, byte(scriptSpend.SigHash)) + } + err := serializeKVPairWithType( + w, uint8(TaprootScriptSpendSignatureType), + keyData, value, + ) + if err != nil { + return err + } + } + + sort.Slice(pi.TaprootLeafScript, func(i, j int) bool { + return pi.TaprootLeafScript[i].SortBefore( + pi.TaprootLeafScript[j], + ) + }) + for _, leafScript := range pi.TaprootLeafScript { + value := append([]byte{}, leafScript.Script...) + value = append(value, byte(leafScript.LeafVersion)) + err := serializeKVPairWithType( + w, uint8(TaprootLeafScriptType), + leafScript.ControlBlock, value, + ) + if err != nil { + return err + } + } + + sort.Slice(pi.TaprootBip32Derivation, func(i, j int) bool { + return pi.TaprootBip32Derivation[i].SortBefore( + pi.TaprootBip32Derivation[j], + ) + }) + for _, derivation := range pi.TaprootBip32Derivation { + value, err := serializeTaprootBip32Derivation( + derivation, + ) + if err != nil { + return err + } + err = serializeKVPairWithType( + w, uint8(TaprootBip32DerivationInputType), + derivation.XOnlyPubKey, value, + ) + if err != nil { + return err + } + } + + if pi.TaprootInternalKey != nil { + err := serializeKVPairWithType( + w, uint8(TaprootInternalKeyInputType), nil, + pi.TaprootInternalKey, + ) + if err != nil { + return err + } + } + + if pi.TaprootMerkleRoot != nil { + err := serializeKVPairWithType( + w, uint8(TaprootMerkleRootType), nil, + pi.TaprootMerkleRoot, + ) + if err != nil { + return err + } + } + } + + if pi.FinalScriptSig != nil { + err := serializeKVPairWithType( + w, uint8(FinalScriptSigType), nil, pi.FinalScriptSig, + ) + if err != nil { + return err + } + } + + if pi.FinalScriptWitness != nil { + err := serializeKVPairWithType( + w, uint8(FinalScriptWitnessType), nil, pi.FinalScriptWitness, + ) + if err != nil { + return err + } + } + + // Unknown is a special case; we don't have a key type, only a key and + // a value field + for _, kv := range pi.Unknowns { + err := serializeKVpair(w, kv.Key, kv.Value) + if err != nil { + return err + } + } + + return nil +} diff --git a/btcutil/psbt/partial_output.go b/btcutil/psbt/partial_output.go new file mode 100644 index 0000000000..33b5ff9981 --- /dev/null +++ b/btcutil/psbt/partial_output.go @@ -0,0 +1,230 @@ +package psbt + +import ( + "bytes" + "io" + "sort" + + "github.com/btcsuite/btcd/wire" +) + +// POutput is a struct encapsulating all the data that can be attached +// to any specific output of the PSBT. +type POutput struct { + RedeemScript []byte + WitnessScript []byte + Bip32Derivation []*Bip32Derivation + TaprootInternalKey []byte + TaprootTapTree []byte + TaprootBip32Derivation []*TaprootBip32Derivation +} + +// NewPsbtOutput creates an instance of PsbtOutput; the three parameters +// redeemScript, witnessScript and Bip32Derivation are all allowed to be +// `nil`. +func NewPsbtOutput(redeemScript []byte, witnessScript []byte, + bip32Derivation []*Bip32Derivation) *POutput { + return &POutput{ + RedeemScript: redeemScript, + WitnessScript: witnessScript, + Bip32Derivation: bip32Derivation, + } +} + +// deserialize attempts to recode a new POutput from the passed io.Reader. +func (po *POutput) deserialize(r io.Reader) error { + for { + keyint, keydata, err := getKey(r) + if err != nil { + return err + } + if keyint == -1 { + // Reached separator byte + break + } + + value, err := wire.ReadVarBytes( + r, 0, MaxPsbtValueLength, "PSBT value", + ) + if err != nil { + return err + } + + switch OutputType(keyint) { + + case RedeemScriptOutputType: + if po.RedeemScript != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + po.RedeemScript = value + + case WitnessScriptOutputType: + if po.WitnessScript != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + po.WitnessScript = value + + case Bip32DerivationOutputType: + if !validatePubkey(keydata) { + return ErrInvalidKeydata + } + master, derivationPath, err := readBip32Derivation(value) + if err != nil { + return err + } + + // Duplicate keys are not allowed + for _, x := range po.Bip32Derivation { + if bytes.Equal(x.PubKey, keydata) { + return ErrDuplicateKey + } + } + + po.Bip32Derivation = append(po.Bip32Derivation, + &Bip32Derivation{ + PubKey: keydata, + MasterKeyFingerprint: master, + Bip32Path: derivationPath, + }, + ) + + case TaprootInternalKeyOutputType: + if po.TaprootInternalKey != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + if !validateXOnlyPubkey(value) { + return ErrInvalidKeydata + } + + po.TaprootInternalKey = value + + case TaprootTapTreeType: + if po.TaprootTapTree != nil { + return ErrDuplicateKey + } + if keydata != nil { + return ErrInvalidKeydata + } + + po.TaprootTapTree = value + + case TaprootBip32DerivationOutputType: + if !validateXOnlyPubkey(keydata) { + return ErrInvalidKeydata + } + + taprootDerivation, err := readTaprootBip32Derivation( + keydata, value, + ) + if err != nil { + return err + } + + // Duplicate keys are not allowed. + for _, x := range po.TaprootBip32Derivation { + if bytes.Equal(x.XOnlyPubKey, keydata) { + return ErrDuplicateKey + } + } + + po.TaprootBip32Derivation = append( + po.TaprootBip32Derivation, taprootDerivation, + ) + + default: + // Unknown type is allowed for inputs but not outputs. + return ErrInvalidPsbtFormat + } + } + + return nil +} + +// serialize attempts to write out the target POutput into the passed +// io.Writer. +func (po *POutput) serialize(w io.Writer) error { + if po.RedeemScript != nil { + err := serializeKVPairWithType( + w, uint8(RedeemScriptOutputType), nil, po.RedeemScript, + ) + if err != nil { + return err + } + } + if po.WitnessScript != nil { + err := serializeKVPairWithType( + w, uint8(WitnessScriptOutputType), nil, po.WitnessScript, + ) + if err != nil { + return err + } + } + + sort.Sort(Bip32Sorter(po.Bip32Derivation)) + for _, kd := range po.Bip32Derivation { + err := serializeKVPairWithType(w, + uint8(Bip32DerivationOutputType), + kd.PubKey, + SerializeBIP32Derivation( + kd.MasterKeyFingerprint, + kd.Bip32Path, + ), + ) + if err != nil { + return err + } + } + + if po.TaprootInternalKey != nil { + err := serializeKVPairWithType( + w, uint8(TaprootInternalKeyOutputType), nil, + po.TaprootInternalKey, + ) + if err != nil { + return err + } + } + + if po.TaprootTapTree != nil { + err := serializeKVPairWithType( + w, uint8(TaprootTapTreeType), nil, + po.TaprootTapTree, + ) + if err != nil { + return err + } + } + + sort.Slice(po.TaprootBip32Derivation, func(i, j int) bool { + return po.TaprootBip32Derivation[i].SortBefore( + po.TaprootBip32Derivation[j], + ) + }) + for _, derivation := range po.TaprootBip32Derivation { + value, err := serializeTaprootBip32Derivation( + derivation, + ) + if err != nil { + return err + } + err = serializeKVPairWithType( + w, uint8(TaprootBip32DerivationOutputType), + derivation.XOnlyPubKey, value, + ) + if err != nil { + return err + } + } + + return nil +} diff --git a/btcutil/psbt/partialsig.go b/btcutil/psbt/partialsig.go new file mode 100644 index 0000000000..dfb7004999 --- /dev/null +++ b/btcutil/psbt/partialsig.go @@ -0,0 +1,49 @@ +package psbt + +import ( + "bytes" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" +) + +// PartialSig encapsulate a (BTC public key, ECDSA signature) +// pair, note that the fields are stored as byte slices, not +// btcec.PublicKey or btcec.Signature (because manipulations will +// be with the former not the latter, here); compliance with consensus +// serialization is enforced with .checkValid() +type PartialSig struct { + PubKey []byte + Signature []byte +} + +// PartialSigSorter implements sort.Interface for PartialSig. +type PartialSigSorter []*PartialSig + +func (s PartialSigSorter) Len() int { return len(s) } + +func (s PartialSigSorter) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +func (s PartialSigSorter) Less(i, j int) bool { + return bytes.Compare(s[i].PubKey, s[j].PubKey) < 0 +} + +// validatePubkey checks if pubKey is *any* valid pubKey serialization in a +// Bitcoin context (compressed/uncomp. OK). +func validatePubkey(pubKey []byte) bool { + _, err := btcec.ParsePubKey(pubKey) + return err == nil +} + +// validateSignature checks that the passed byte slice is a valid DER-encoded +// ECDSA signature, including the sighash flag. It does *not* of course +// validate the signature against any message or public key. +func validateSignature(sig []byte) bool { + _, err := ecdsa.ParseDERSignature(sig) + return err == nil +} + +// checkValid checks that both the pubkey and sig are valid. See the methods +// (PartialSig, validatePubkey, validateSignature) for more details. +func (ps *PartialSig) checkValid() bool { + return validatePubkey(ps.PubKey) && validateSignature(ps.Signature) +} diff --git a/btcutil/psbt/psbt.go b/btcutil/psbt/psbt.go new file mode 100644 index 0000000000..5ea51eead0 --- /dev/null +++ b/btcutil/psbt/psbt.go @@ -0,0 +1,397 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +// Package psbt is an implementation of Partially Signed Bitcoin +// Transactions (PSBT). The format is defined in BIP 174: +// https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki +package psbt + +import ( + "bytes" + "encoding/base64" + "errors" + + "io" + + "github.com/btcsuite/btcd/wire" +) + +// psbtMagicLength is the length of the magic bytes used to signal the start of +// a serialized PSBT packet. +const psbtMagicLength = 5 + +var ( + // psbtMagic is the separator + psbtMagic = [psbtMagicLength]byte{0x70, + 0x73, 0x62, 0x74, 0xff, // = "psbt" + 0xff sep + } +) + +// MaxPsbtValueLength is the size of the largest transaction serialization +// that could be passed in a NonWitnessUtxo field. This is definitely +//less than 4M. +const MaxPsbtValueLength = 4000000 + +// MaxPsbtKeyLength is the length of the largest key that we'll successfully +// deserialize from the wire. Anything more will return ErrInvalidKeydata. +const MaxPsbtKeyLength = 10000 + +var ( + + // ErrInvalidPsbtFormat is a generic error for any situation in which a + // provided Psbt serialization does not conform to the rules of BIP174. + ErrInvalidPsbtFormat = errors.New("Invalid PSBT serialization format") + + // ErrDuplicateKey indicates that a passed Psbt serialization is invalid + // due to having the same key repeated in the same key-value pair. + ErrDuplicateKey = errors.New("Invalid Psbt due to duplicate key") + + // ErrInvalidKeydata indicates that a key-value pair in the PSBT + // serialization contains data in the key which is not valid. + ErrInvalidKeydata = errors.New("Invalid key data") + + // ErrInvalidMagicBytes indicates that a passed Psbt serialization is invalid + // due to having incorrect magic bytes. + ErrInvalidMagicBytes = errors.New("Invalid Psbt due to incorrect magic bytes") + + // ErrInvalidRawTxSigned indicates that the raw serialized transaction in the + // global section of the passed Psbt serialization is invalid because it + // contains scriptSigs/witnesses (i.e. is fully or partially signed), which + // is not allowed by BIP174. + ErrInvalidRawTxSigned = errors.New("Invalid Psbt, raw transaction must " + + "be unsigned.") + + // ErrInvalidPrevOutNonWitnessTransaction indicates that the transaction + // hash (i.e. SHA256^2) of the fully serialized previous transaction + // provided in the NonWitnessUtxo key-value field doesn't match the prevout + // hash in the UnsignedTx field in the PSBT itself. + ErrInvalidPrevOutNonWitnessTransaction = errors.New("Prevout hash does " + + "not match the provided non-witness utxo serialization") + + // ErrInvalidSignatureForInput indicates that the signature the user is + // trying to append to the PSBT is invalid, either because it does + // not correspond to the previous transaction hash, or redeem script, + // or witness script. + // NOTE this does not include ECDSA signature checking. + ErrInvalidSignatureForInput = errors.New("Signature does not correspond " + + "to this input") + + // ErrInputAlreadyFinalized indicates that the PSBT passed to a Finalizer + // already contains the finalized scriptSig or witness. + ErrInputAlreadyFinalized = errors.New("Cannot finalize PSBT, finalized " + + "scriptSig or scriptWitnes already exists") + + // ErrIncompletePSBT indicates that the Extractor object + // was unable to successfully extract the passed Psbt struct because + // it is not complete + ErrIncompletePSBT = errors.New("PSBT cannot be extracted as it is " + + "incomplete") + + // ErrNotFinalizable indicates that the PSBT struct does not have + // sufficient data (e.g. signatures) for finalization + ErrNotFinalizable = errors.New("PSBT is not finalizable") + + // ErrInvalidSigHashFlags indicates that a signature added to the PSBT + // uses Sighash flags that are not in accordance with the requirement + // according to the entry in PsbtInSighashType, or otherwise not the + // default value (SIGHASH_ALL) + ErrInvalidSigHashFlags = errors.New("Invalid Sighash Flags") + + // ErrUnsupportedScriptType indicates that the redeem script or + // scriptwitness given is not supported by this codebase, or is otherwise + // not valid. + ErrUnsupportedScriptType = errors.New("Unsupported script type") +) + +// Unknown is a struct encapsulating a key-value pair for which the key type is +// unknown by this package; these fields are allowed in both the 'Global' and +// the 'Input' section of a PSBT. +type Unknown struct { + Key []byte + Value []byte +} + +// Packet is the actual psbt repreesntation. It is a is a set of 1 + N + M +// key-value pair lists, 1 global, defining the unsigned transaction structure +// with N inputs and M outputs. These key-value pairs can contain scripts, +// signatures, key derivations and other transaction-defining data. +type Packet struct { + // UnsignedTx is the decoded unsigned transaction for this PSBT. + UnsignedTx *wire.MsgTx // Deserialization of unsigned tx + + // Inputs contains all the information needed to properly sign this + // target input within the above transaction. + Inputs []PInput + + // Outputs contains all information required to spend any outputs + // produced by this PSBT. + Outputs []POutput + + // Unknowns are the set of custom types (global only) within this PSBT. + Unknowns []Unknown +} + +// validateUnsignedTx returns true if the transaction is unsigned. Note that +// more basic sanity requirements, such as the presence of inputs and outputs, +// is implicitly checked in the call to MsgTx.Deserialize(). +func validateUnsignedTX(tx *wire.MsgTx) bool { + for _, tin := range tx.TxIn { + if len(tin.SignatureScript) != 0 || len(tin.Witness) != 0 { + return false + } + } + + return true +} + +// NewFromUnsignedTx creates a new Psbt struct, without any signatures (i.e. +// only the global section is non-empty) using the passed unsigned transaction. +func NewFromUnsignedTx(tx *wire.MsgTx) (*Packet, error) { + + if !validateUnsignedTX(tx) { + return nil, ErrInvalidRawTxSigned + } + + inSlice := make([]PInput, len(tx.TxIn)) + outSlice := make([]POutput, len(tx.TxOut)) + unknownSlice := make([]Unknown, 0) + + retPsbt := Packet{ + UnsignedTx: tx, + Inputs: inSlice, + Outputs: outSlice, + Unknowns: unknownSlice, + } + + return &retPsbt, nil +} + +// NewFromRawBytes returns a new instance of a Packet struct created by reading +// from a byte slice. If the format is invalid, an error is returned. If the +// argument b64 is true, the passed byte slice is decoded from base64 encoding +// before processing. +// +// NOTE: To create a Packet from one's own data, rather than reading in a +// serialization from a counterparty, one should use a psbt.New. +func NewFromRawBytes(r io.Reader, b64 bool) (*Packet, error) { + + // If the PSBT is encoded in bas64, then we'll create a new wrapper + // reader that'll allow us to incrementally decode the contents of the + // io.Reader. + if b64 { + based64EncodedReader := r + r = base64.NewDecoder(base64.StdEncoding, based64EncodedReader) + } + + // The Packet struct does not store the fixed magic bytes, but they + // must be present or the serialization must be explicitly rejected. + var magic [5]byte + if _, err := io.ReadFull(r, magic[:]); err != nil { + return nil, err + } + if magic != psbtMagic { + return nil, ErrInvalidMagicBytes + } + + // Next we parse the GLOBAL section. There is currently only 1 known + // key type, UnsignedTx. We insist this exists first; unknowns are + // allowed, but only after. + keyint, keydata, err := getKey(r) + if err != nil { + return nil, err + } + if GlobalType(keyint) != UnsignedTxType || keydata != nil { + return nil, ErrInvalidPsbtFormat + } + + // Now that we've verified the global type is present, we'll decode it + // into a proper unsigned transaction, and validate it. + value, err := wire.ReadVarBytes( + r, 0, MaxPsbtValueLength, "PSBT value", + ) + if err != nil { + return nil, err + } + msgTx := wire.NewMsgTx(2) + + // BIP-0174 states: "The transaction must be in the old serialization + // format (without witnesses)." + err = msgTx.DeserializeNoWitness(bytes.NewReader(value)) + if err != nil { + return nil, err + } + if !validateUnsignedTX(msgTx) { + return nil, ErrInvalidRawTxSigned + } + + // Next we parse any unknowns that may be present, making sure that we + // break at the separator. + var unknownSlice []Unknown + for { + keyint, keydata, err := getKey(r) + if err != nil { + return nil, ErrInvalidPsbtFormat + } + if keyint == -1 { + break + } + + value, err := wire.ReadVarBytes( + r, 0, MaxPsbtValueLength, "PSBT value", + ) + if err != nil { + return nil, err + } + + keyintanddata := []byte{byte(keyint)} + keyintanddata = append(keyintanddata, keydata...) + + newUnknown := Unknown{ + Key: keyintanddata, + Value: value, + } + unknownSlice = append(unknownSlice, newUnknown) + } + + // Next we parse the INPUT section. + inSlice := make([]PInput, len(msgTx.TxIn)) + for i := range msgTx.TxIn { + input := PInput{} + err = input.deserialize(r) + if err != nil { + return nil, err + } + + inSlice[i] = input + } + + // Next we parse the OUTPUT section. + outSlice := make([]POutput, len(msgTx.TxOut)) + for i := range msgTx.TxOut { + output := POutput{} + err = output.deserialize(r) + if err != nil { + return nil, err + } + + outSlice[i] = output + } + + // Populate the new Packet object + newPsbt := Packet{ + UnsignedTx: msgTx, + Inputs: inSlice, + Outputs: outSlice, + Unknowns: unknownSlice, + } + + // Extended sanity checking is applied here to make sure the + // externally-passed Packet follows all the rules. + if err = newPsbt.SanityCheck(); err != nil { + return nil, err + } + + return &newPsbt, nil +} + +// Serialize creates a binary serialization of the referenced Packet struct +// with lexicographical ordering (by key) of the subsections. +func (p *Packet) Serialize(w io.Writer) error { + + // First we write out the precise set of magic bytes that identify a + // valid PSBT transaction. + if _, err := w.Write(psbtMagic[:]); err != nil { + return err + } + + // Next we prep to write out the unsigned transaction by first + // serializing it into an intermediate buffer. + serializedTx := bytes.NewBuffer( + make([]byte, 0, p.UnsignedTx.SerializeSize()), + ) + if err := p.UnsignedTx.SerializeNoWitness(serializedTx); err != nil { + return err + } + + // Now that we have the serialized transaction, we'll write it out to + // the proper global type. + err := serializeKVPairWithType( + w, uint8(UnsignedTxType), nil, serializedTx.Bytes(), + ) + if err != nil { + return err + } + + // With that our global section is done, so we'll write out the + // separator. + separator := []byte{0x00} + if _, err := w.Write(separator); err != nil { + return err + } + + for _, pInput := range p.Inputs { + err := pInput.serialize(w) + if err != nil { + return err + } + + if _, err := w.Write(separator); err != nil { + return err + } + } + + for _, pOutput := range p.Outputs { + err := pOutput.serialize(w) + if err != nil { + return err + } + + if _, err := w.Write(separator); err != nil { + return err + } + } + + return nil +} + +// B64Encode returns the base64 encoding of the serialization of +// the current PSBT, or an error if the encoding fails. +func (p *Packet) B64Encode() (string, error) { + var b bytes.Buffer + if err := p.Serialize(&b); err != nil { + return "", err + } + + return base64.StdEncoding.EncodeToString(b.Bytes()), nil +} + +// IsComplete returns true only if all of the inputs are +// finalized; this is particularly important in that it decides +// whether the final extraction to a network serialized signed +// transaction will be possible. +func (p *Packet) IsComplete() bool { + for i := 0; i < len(p.UnsignedTx.TxIn); i++ { + if !isFinalized(p, i) { + return false + } + } + return true +} + +// SanityCheck checks conditions on a PSBT to ensure that it obeys the +// rules of BIP174, and returns true if so, false if not. +func (p *Packet) SanityCheck() error { + + if !validateUnsignedTX(p.UnsignedTx) { + return ErrInvalidRawTxSigned + } + + for _, tin := range p.Inputs { + if !tin.IsSane() { + return ErrInvalidPsbtFormat + } + } + + return nil +} diff --git a/btcutil/psbt/psbt_test.go b/btcutil/psbt/psbt_test.go new file mode 100644 index 0000000000..1ce4780d84 --- /dev/null +++ b/btcutil/psbt/psbt_test.go @@ -0,0 +1,1504 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package psbt + +import ( + "bytes" + "encoding/base64" + "encoding/binary" + "encoding/hex" + "strings" + "testing" + + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" + "github.com/davecgh/go-spew/spew" + "github.com/stretchr/testify/require" +) + +// Test vectors from: +// // https://github.com/bitcoin/bips/blob/master/bip-0174.mediawiki#test-vectors + +// createPsbtFromSignedTx is a utility function to create a PSBT from an +// already-signed transaction, so we can test reconstructing, signing and +// extracting it. Returned are: an unsigned transaction serialization, a list +// of scriptSigs, one per input, and a list of witnesses, one per input. +func createPsbtFromSignedTx(serializedSignedTx []byte) ( + *Packet, [][]byte, []wire.TxWitness, error) { + + tx := wire.NewMsgTx(2) + err := tx.Deserialize(bytes.NewReader(serializedSignedTx)) + if err != nil { + return nil, nil, nil, err + } + scriptSigs := make([][]byte, 0, len(tx.TxIn)) + witnesses := make([]wire.TxWitness, 0, len(tx.TxIn)) + tx2 := tx.Copy() + + // Blank out signature info in inputs + for i, tin := range tx2.TxIn { + tin.SignatureScript = nil + scriptSigs = append(scriptSigs, tx.TxIn[i].SignatureScript) + tin.Witness = nil + witnesses = append(witnesses, tx.TxIn[i].Witness) + + } + + // Outputs always contain: (value, scriptPubkey) so don't need + // amending. Now tx2 is tx with all signing data stripped out + unsignedPsbt, err := NewFromUnsignedTx(tx2) + if err != nil { + return nil, nil, nil, err + } + return unsignedPsbt, scriptSigs, witnesses, nil +} + +// These are all valid PSBTs encoded as hex. +var validPsbtHex = map[int]string{ + 0: "70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab300000000000000", + 1: "70736274ff0100a00200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac000000000001076a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa882920001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787010416001485d13537f2e265405a34dbafa9e3dda01fb82308000000", + 2: "70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab30000000001030401000000000000", + 3: "70736274ff0100a00200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40000000000feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac00000000000100df0200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf6000000006a473044022070b2245123e6bf474d60c5b50c043d4c691a5d2435f09a34a7662a9dc251790a022001329ca9dacf280bdf30740ec0390422422c81cb45839457aeb76fc12edd95b3012102657d118d3357b8e0f4c2cd46db7b39f6d9c38d9a70abcb9b2de5dc8dbfe4ce31feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e13000001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787010416001485d13537f2e265405a34dbafa9e3dda01fb8230800220202ead596687ca806043edc3de116cdf29d5e9257c196cd055cf698c8d02bf24e9910b4a6ba670000008000000080020000800022020394f62be9df19952c5587768aeb7698061ad2c4a25c894f47d8c162b4d7213d0510b4a6ba6700000080010000800200008000", + 4: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + 5: "70736274ff01003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000000a0f0102030405060708090f0102030405060708090a0b0c0d0e0f0000", + 6: "70736274ff01003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000002206030d097466b7f59162ac4d90bf65f2a31a8bad82fcd22e98138dcf279401939bd104ffffffff0a0f0102030405060708090f0102030405060708090a0b0c0d0e0f0000", + 7: "70736274ff01002001000000000100000000000000000d6a0b68656c6c6f20776f726c64000000000000", +} + +// These are additional valid PSBTs encoded as base64. +var validPsbtBase64 = map[int]string{ + 0: "cHNidP8BAHUCAAAAASaBcTce3/KF6Tet7qSze3gADAVmy7OtZGQXE8pCFxv2AAAAAAD+////AtPf9QUAAAAAGXapFNDFmQPFusKGh2DpD9UhpGZap2UgiKwA4fUFAAAAABepFDVF5uM7gyxHBQ8k0+65PJwDlIvHh7MuEwAAAQD9pQEBAAAAAAECiaPHHqtNIOA3G7ukzGmPopXJRjr6Ljl/hTPMti+VZ+UBAAAAFxYAFL4Y0VKpsBIDna89p95PUzSe7LmF/////4b4qkOnHf8USIk6UwpyN+9rRgi7st0tAXHmOuxqSJC0AQAAABcWABT+Pp7xp0XpdNkCxDVZQ6vLNL1TU/////8CAMLrCwAAAAAZdqkUhc/xCX/Z4Ai7NK9wnGIZeziXikiIrHL++E4sAAAAF6kUM5cluiHv1irHU6m80GfWx6ajnQWHAkcwRAIgJxK+IuAnDzlPVoMR3HyppolwuAJf3TskAinwf4pfOiQCIAGLONfc0xTnNMkna9b7QPZzMlvEuqFEyADS8vAtsnZcASED0uFWdJQbrUqZY3LLh+GFbTZSYG2YVi/jnF6efkE/IQUCSDBFAiEA0SuFLYXc2WHS9fSrZgZU327tzHlMDDPOXMMJ/7X85Y0CIGczio4OFyXBl/saiK9Z9R5E5CVbIBZ8hoQDHAXR8lkqASECI7cr7vCWXRC+B3jv7NYfysb3mk6haTkzgHNEZPhPKrMAAAAAIQ12pWrO2RXSUT3NhMLDeLLoqlzWMrW3HKLyrFsOOmSb2wIBAiENnBLP3ATHRYTXh6w9I3chMsGFJLx6so3sQhm4/FtCX3ABAQAAAA==", + 1: "cHNidP8BAFICAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////AUjmBSoBAAAAFgAUdo4e60z0IIZgM/gKzv8PlyB0SWkAAAAAAAEBKwDyBSoBAAAAIlEgWiws9bUs8x+DrS6Npj/wMYPs2PYJx1EK6KSOA5EKB1chFv40kGTJjW4qhT+jybEr2LMEoZwZXGDvp+4jkwRtP6IyGQB3Ky2nVgAAgAEAAIAAAACAAQAAAAAAAAABFyD+NJBkyY1uKoU/o8mxK9izBKGcGVxg76fuI5MEbT+iMgAiAgNrdyptt02HU8mKgnlY3mx4qzMSEJ830+AwRIQkLs5z2Bh3Ky2nVAAAgAEAAIAAAACAAAAAAAAAAAAA", + 2: "cHNidP8BAFICAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////AUjmBSoBAAAAFgAUdo4e60z0IIZgM/gKzv8PlyB0SWkAAAAAAAEBKwDyBSoBAAAAIlEgWiws9bUs8x+DrS6Npj/wMYPs2PYJx1EK6KSOA5EKB1cBE0C7U+yRe62dkGrxuocYHEi4as5aritTYFpyXKdGJWMUdvxvW67a9PLuD0d/NvWPOXDVuCc7fkl7l68uPxJcl680IRb+NJBkyY1uKoU/o8mxK9izBKGcGVxg76fuI5MEbT+iMhkAdystp1YAAIABAACAAAAAgAEAAAAAAAAAARcg/jSQZMmNbiqFP6PJsSvYswShnBlcYO+n7iOTBG0/ojIAIgIDa3cqbbdNh1PJioJ5WN5seKszEhCfN9PgMESEJC7Oc9gYdystp1QAAIABAACAAAAAgAAAAAAAAAAAAA==", + 3: "cHNidP8BAF4CAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////AUjmBSoBAAAAIlEgg2mORYxmZOFZXXXaJZfeHiLul9eY5wbEwKS1qYI810MAAAAAAAEBKwDyBSoBAAAAIlEgWiws9bUs8x+DrS6Npj/wMYPs2PYJx1EK6KSOA5EKB1chFv40kGTJjW4qhT+jybEr2LMEoZwZXGDvp+4jkwRtP6IyGQB3Ky2nVgAAgAEAAIAAAACAAQAAAAAAAAABFyD+NJBkyY1uKoU/o8mxK9izBKGcGVxg76fuI5MEbT+iMgABBSARJNp67JLM0GyVRWJkf0N7E4uVchqEvivyJ2u92rPmcSEHESTaeuySzNBslUViZH9DexOLlXIahL4r8idrvdqz5nEZAHcrLadWAACAAQAAgAAAAIAAAAAABQAAAAA=", + 4: "cHNidP8BAF4CAAAAAZvUh2UjC/mnLmYgAflyVW5U8Mb5f+tWvLVgDYF/aZUmAQAAAAD/////AUjmBSoBAAAAIlEgg2mORYxmZOFZXXXaJZfeHiLul9eY5wbEwKS1qYI810MAAAAAAAEBKwDyBSoBAAAAIlEgwiR++/2SrEf29AuNQtFpF1oZ+p+hDkol1/NetN2FtpJiFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wG99YgWelJehpKJnVp2YdtpgEBr/OONSm5uTnOf5GulwEV8uSQr3zEXE94UR82BXzlxaXFYyWin7RN/CA/NW4fgjICyxOsaCSN6AaqajZZzzwD62gh0JyBFKToaP696GW7bSrMBCFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wJfG5v6l/3FP9XJEmZkIEOQG6YqhD1v35fZ4S8HQqabOIyBDILC/FvARtT6nvmFZJKp/J+XSmtIOoRVdhIZ2w7rRsqzAYhXBUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsDNlw4V9T/AyC+VD9Vg/6kZt2FyvgFzaKiZE68HT0ALCRFfLkkK98xFxPeFEfNgV85cWlxWMlop+0TfwgPzVuH4IyD6D3o87zsdDAps59JuF62gsuXJLRnvrUi0GFnLikUcqazAIRYssTrGgkjegGqmo2Wc88A+toIdCcgRSk6Gj+vehlu20jkBzZcOFfU/wMgvlQ/VYP+pGbdhcr4Bc2iomROvB09ACwl3Ky2nVgAAgAEAAIACAACAAAAAAAAAAAAhFkMgsL8W8BG1Pqe+YVkkqn8n5dKa0g6hFV2EhnbDutGyOQERXy5JCvfMRcT3hRHzYFfOXFpcVjJaKftE38ID81bh+HcrLadWAACAAQAAgAEAAIAAAAAAAAAAACEWUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsAFAHxGHl0hFvoPejzvOx0MCmzn0m4XraCy5cktGe+tSLQYWcuKRRypOQFvfWIFnpSXoaSiZ1admHbaYBAa/zjjUpubk5zn+RrpcHcrLadWAACAAQAAgAMAAIAAAAAAAAAAAAEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARgg8DYuL3Wm9CClvePrIh2WrmcgzyX4GJDJWx13WstRXmUAAQUgESTaeuySzNBslUViZH9DexOLlXIahL4r8idrvdqz5nEhBxEk2nrskszQbJVFYmR/Q3sTi5VyGoS+K/Ina73as+ZxGQB3Ky2nVgAAgAEAAIAAAACAAAAAAAUAAAAA", + 5: "cHNidP8BAF4CAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////AUjmBSoBAAAAIlEgCoy9yG3hzhwPnK6yLW33ztNoP+Qj4F0eQCqHk0HW9vUAAAAAAAEBKwDyBSoBAAAAIlEgWiws9bUs8x+DrS6Npj/wMYPs2PYJx1EK6KSOA5EKB1chFv40kGTJjW4qhT+jybEr2LMEoZwZXGDvp+4jkwRtP6IyGQB3Ky2nVgAAgAEAAIAAAACAAQAAAAAAAAABFyD+NJBkyY1uKoU/o8mxK9izBKGcGVxg76fuI5MEbT+iMgABBSBQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wAEGbwLAIiBzblcpAP4SUliaIUPI88efcaBBLSNTr3VelwHHgmlKAqwCwCIgYxxfO1gyuPvev7GXBM7rMjwh9A96JPQ9aO8MwmsSWWmsAcAiIET6pJoDON5IjI3//s37bzKfOAvVZu8gyN9tgT6rHEJzrCEHRPqkmgM43kiMjf/+zftvMp84C9Vm7yDI322BPqscQnM5AfBreYuSoQ7ZqdC7/Trxc6U7FhfaOkFZygCCFs2Fay4Odystp1YAAIABAACAAQAAgAAAAAADAAAAIQdQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wAUAfEYeXSEHYxxfO1gyuPvev7GXBM7rMjwh9A96JPQ9aO8MwmsSWWk5ARis5AmIl4Xg6nDO67jhyokqenjq7eDy4pbPQ1lhqPTKdystp1YAAIABAACAAgAAgAAAAAADAAAAIQdzblcpAP4SUliaIUPI88efcaBBLSNTr3VelwHHgmlKAjkBKaW0kVCQFi11mv0/4Pk/ozJgVtC0CIy5M8rngmy42Cx3Ky2nVgAAgAEAAIADAACAAAAAAAMAAAAA", + 6: "cHNidP8BAF4CAAAAAZvUh2UjC/mnLmYgAflyVW5U8Mb5f+tWvLVgDYF/aZUmAQAAAAD/////AUjmBSoBAAAAIlEgg2mORYxmZOFZXXXaJZfeHiLul9eY5wbEwKS1qYI810MAAAAAAAEBKwDyBSoBAAAAIlEgwiR++/2SrEf29AuNQtFpF1oZ+p+hDkol1/NetN2FtpJBFCyxOsaCSN6AaqajZZzzwD62gh0JyBFKToaP696GW7bSzZcOFfU/wMgvlQ/VYP+pGbdhcr4Bc2iomROvB09ACwlAv4GNl1fW/+tTi6BX+0wfxOD17xhudlvrVkeR4Cr1/T1eJVHU404z2G8na4LJnHmu0/A5Wgge/NLMLGXdfmk9eUEUQyCwvxbwEbU+p75hWSSqfyfl0prSDqEVXYSGdsO60bIRXy5JCvfMRcT3hRHzYFfOXFpcVjJaKftE38ID81bh+EDh8atvq/omsjbyGDNxncHUKKt2jYD5H5mI2KvvR7+4Y7sfKlKfdowV8AzjTsKDzcB+iPhCi+KPbvZAQ8MpEYEaQRT6D3o87zsdDAps59JuF62gsuXJLRnvrUi0GFnLikUcqW99YgWelJehpKJnVp2YdtpgEBr/OONSm5uTnOf5GulwQOwfA3kgZGHIM0IoVCMyZwirAx8NpKJT7kWq+luMkgNNi2BUkPjNE+APmJmJuX4hX6o28S3uNpPS2szzeBwXV/ZiFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wG99YgWelJehpKJnVp2YdtpgEBr/OONSm5uTnOf5GulwEV8uSQr3zEXE94UR82BXzlxaXFYyWin7RN/CA/NW4fgjICyxOsaCSN6AaqajZZzzwD62gh0JyBFKToaP696GW7bSrMBCFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wJfG5v6l/3FP9XJEmZkIEOQG6YqhD1v35fZ4S8HQqabOIyBDILC/FvARtT6nvmFZJKp/J+XSmtIOoRVdhIZ2w7rRsqzAYhXBUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsDNlw4V9T/AyC+VD9Vg/6kZt2FyvgFzaKiZE68HT0ALCRFfLkkK98xFxPeFEfNgV85cWlxWMlop+0TfwgPzVuH4IyD6D3o87zsdDAps59JuF62gsuXJLRnvrUi0GFnLikUcqazAIRYssTrGgkjegGqmo2Wc88A+toIdCcgRSk6Gj+vehlu20jkBzZcOFfU/wMgvlQ/VYP+pGbdhcr4Bc2iomROvB09ACwl3Ky2nVgAAgAEAAIACAACAAAAAAAAAAAAhFkMgsL8W8BG1Pqe+YVkkqn8n5dKa0g6hFV2EhnbDutGyOQERXy5JCvfMRcT3hRHzYFfOXFpcVjJaKftE38ID81bh+HcrLadWAACAAQAAgAEAAIAAAAAAAAAAACEWUJKbdMGgSVS3i0tgNel6XgeKWg8o7JbVR7/ums6AOsAFAHxGHl0hFvoPejzvOx0MCmzn0m4XraCy5cktGe+tSLQYWcuKRRypOQFvfWIFnpSXoaSiZ1admHbaYBAa/zjjUpubk5zn+RrpcHcrLadWAACAAQAAgAMAAIAAAAAAAAAAAAEXIFCSm3TBoElUt4tLYDXpel4HiloPKOyW1Ue/7prOgDrAARgg8DYuL3Wm9CClvePrIh2WrmcgzyX4GJDJWx13WstRXmUAAQUgESTaeuySzNBslUViZH9DexOLlXIahL4r8idrvdqz5nEhBxEk2nrskszQbJVFYmR/Q3sTi5VyGoS+K/Ina73as+ZxGQB3Ky2nVgAAgAEAAIAAAACAAAAAAAUAAAAA", +} + +// These are all invalid PSBTs for the indicated reasons. +var invalidPsbtHex = map[int]string{ + // wire format, not PSBT format + 0: "0200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf6000000006a473044022070b2245123e6bf474d60c5b50c043d4c691a5d2435f09a34a7662a9dc251790a022001329ca9dacf280bdf30740ec0390422422c81cb45839457aeb76fc12edd95b3012102657d118d3357b8e0f4c2cd46db7b39f6d9c38d9a70abcb9b2de5dc8dbfe4ce31feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300", + // missing outputs + 1: "70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab30000000000", + // Filled in scriptSig in unsigned tx + 2: "70736274ff0100fd0a010200000002ab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be4000000006a47304402204759661797c01b036b25928948686218347d89864b719e1f7fcf57d1e511658702205309eabf56aa4d8891ffd111fdf1336f3a29da866d7f8486d75546ceedaf93190121035cdc61fc7ba971c0b501a646a2a83b102cb43881217ca682dc86e2d73fa88292feffffffab0949a08c5af7c49b8212f417e2f15ab3f5c33dcf153821a8139f877a5b7be40100000000feffffff02603bea0b000000001976a914768a40bbd740cbe81d988e71de2a4d5c71396b1d88ac8e240000000000001976a9146f4620b553fa095e721b9ee0efe9fa039cca459788ac00000000000001012000e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787010416001485d13537f2e265405a34dbafa9e3dda01fb82308000000", + // No unsigned tx + 3: "70736274ff000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab30000000000", + // Duplicate keys in an input + 4: "70736274ff0100750200000001268171371edff285e937adeea4b37b78000c0566cbb3ad64641713ca42171bf60000000000feffffff02d3dff505000000001976a914d0c59903c5bac2868760e90fd521a4665aa7652088ac00e1f5050000000017a9143545e6e33b832c47050f24d3eeb93c9c03948bc787b32e1300000100fda5010100000000010289a3c71eab4d20e0371bbba4cc698fa295c9463afa2e397f8533ccb62f9567e50100000017160014be18d152a9b012039daf3da7de4f53349eecb985ffffffff86f8aa43a71dff1448893a530a7237ef6b4608bbb2dd2d0171e63aec6a4890b40100000017160014fe3e9ef1a745e974d902c4355943abcb34bd5353ffffffff0200c2eb0b000000001976a91485cff1097fd9e008bb34af709c62197b38978a4888ac72fef84e2c00000017a914339725ba21efd62ac753a9bcd067d6c7a6a39d05870247304402202712be22e0270f394f568311dc7ca9a68970b8025fdd3b240229f07f8a5f3a240220018b38d7dcd314e734c9276bd6fb40f673325bc4baa144c800d2f2f02db2765c012103d2e15674941bad4a996372cb87e1856d3652606d98562fe39c5e9e7e413f210502483045022100d12b852d85dcd961d2f5f4ab660654df6eedcc794c0c33ce5cc309ffb5fce58d022067338a8e0e1725c197fb1a88af59f51e44e4255b20167c8684031c05d1f2592a01210223b72beef0965d10be0778efecd61fcac6f79a4ea169393380734464f84f2ab30000000001003f0200000001ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000ffffffff010000000000000000036a010000000000000000", + // Invalid global transaction typed key + 5: "70736274ff020001550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + // Invalid input witness utxo typed key + 6: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac000000000002010020955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + // Invalid pubkey length for input partial signature typed key + 7: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87210203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd46304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + // Invalid redeemscript typed key + 8: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a01020400220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + // Invalid witness script typed key + 9: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d568102050047522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + // Invalid bip32 typed key + 10: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae210603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd10b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + // Invalid non-witness utxo typed key + 11: "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f0000000000020000bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000107da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b20289030108da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + // Invalid final scriptsig typed key + 12: "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f618765000000020700da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b20289030108da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + // Invalid final script witness typed key + 13: "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000107da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903020800da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + // Invalid pubkey in output BIP32 derivation paths typed key + 14: "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000107da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b20289030108da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00210203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca58710d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + // Invalid input sighash type typed key + 15: "70736274ff0100730200000001301ae986e516a1ec8ac5b4bc6573d32f83b465e23ad76167d68b38e730b4dbdb0000000000ffffffff02747b01000000000017a91403aa17ae882b5d0d54b25d63104e4ffece7b9ea2876043993b0000000017a914b921b1ba6f722e4bfa83b6557a3139986a42ec8387000000000001011f00ca9a3b00000000160014d2d94b64ae08587eefc8eeb187c601e939f9037c0203000100000000010016001462e9e982fff34dd8239610316b090cd2a3b747cb000100220020876bad832f1d168015ed41232a9ea65a1815d9ef13c0ef8759f64b5b2b278a65010125512103b7ce23a01c5b4bf00a642537cdfabb315b668332867478ef51309d2bd57f8a8751ae00", + // Invalid output redeemscript typed key + 16: "70736274ff0100730200000001301ae986e516a1ec8ac5b4bc6573d32f83b465e23ad76167d68b38e730b4dbdb0000000000ffffffff02747b01000000000017a91403aa17ae882b5d0d54b25d63104e4ffece7b9ea2876043993b0000000017a914b921b1ba6f722e4bfa83b6557a3139986a42ec8387000000000001011f00ca9a3b00000000160014d2d94b64ae08587eefc8eeb187c601e939f9037c0002000016001462e9e982fff34dd8239610316b090cd2a3b747cb000100220020876bad832f1d168015ed41232a9ea65a1815d9ef13c0ef8759f64b5b2b278a65010125512103b7ce23a01c5b4bf00a642537cdfabb315b668332867478ef51309d2bd57f8a8751ae00", + // Invalid output witnessScript typed key + 17: "70736274ff0100730200000001301ae986e516a1ec8ac5b4bc6573d32f83b465e23ad76167d68b38e730b4dbdb0000000000ffffffff02747b01000000000017a91403aa17ae882b5d0d54b25d63104e4ffece7b9ea2876043993b0000000017a914b921b1ba6f722e4bfa83b6557a3139986a42ec8387000000000001011f00ca9a3b00000000160014d2d94b64ae08587eefc8eeb187c601e939f9037c00010016001462e9e982fff34dd8239610316b090cd2a3b747cb000100220020876bad832f1d168015ed41232a9ea65a1815d9ef13c0ef8759f64b5b2b278a6521010025512103b7ce23a01c5b4bf00a642537cdfabb315b668332867478ef51309d2bd57f8a8751ae00", + // Additional cases outside the existing test vectors. + // Invalid duplicate PartialSig + 18: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a01220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd10b4a6ba670000008000000080050000800000", + // Invalid duplicate BIP32 derivation (different derivs, same key) + 19: "70736274ff0100550200000001279a2323a5dfb51fc45f220fa58b0fc13e1e3342792a85d7e36cd6333b5cbc390000000000ffffffff01a05aea0b000000001976a914ffe9c0061097cc3b636f2cb0460fa4fc427d2b4588ac0000000000010120955eea0b0000000017a9146345200f68d189e1adc0df1c4d16ea8f14c0dbeb87220203b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4646304302200424b58effaaa694e1559ea5c93bbfd4a89064224055cdf070b6771469442d07021f5c8eb0fea6516d60b8acb33ad64ede60e8785bfb3aa94b99bdf86151db9a9a010104220020771fd18ad459666dd49f3d564e3dbc42f4c84774e360ada16816a8ed488d5681010547522103b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd462103de55d1e1dac805e3f8a58c1fbf9b94c02f3dbaafe127fefca4995f26f82083bd52ae220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba67000000800000008004000080220603b1341ccba7683b6af4f1238cd6e97e7167d569fac47f1e48d47541844355bd4610b4a6ba670000008000000080050000800000", +} + +// All following PSBTs are Taproot specific invalid packets taken from +// https://github.com/bitcoin/bitcoin/pull/22558. +var invalidPsbtBase64 = map[int]string{ + // Invalid input internal key length. + 0: "cHNidP8BAHECAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////Anh8AQAAAAAAFgAUg6fjS9mf8DpJYu+KGhAbspVGHs5gawQqAQAAABYAFHrDad8bIOAz1hFmI5V7CsSfPFLoAAAAAAABASsA8gUqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXARchAv40kGTJjW4qhT+jybEr2LMEoZwZXGDvp+4jkwRtP6IyAAAA", + // Invalid input key spend schnorr signature. + 1: "cHNidP8BAHECAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////Anh8AQAAAAAAFgAUg6fjS9mf8DpJYu+KGhAbspVGHs5gawQqAQAAABYAFHrDad8bIOAz1hFmI5V7CsSfPFLoAAAAAAABASsA8gUqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXARM/Fzuz02wHSvtxb+xjB6BpouRQuZXzyCeFlFq43w4kJg3NcDsMvzTeOZGEqUgawrNYbbZgHwJqd/fkk4SBvDR1AAAA", + // Invalid input key spend signature length. + 2: "cHNidP8BAHECAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////Anh8AQAAAAAAFgAUg6fjS9mf8DpJYu+KGhAbspVGHs5gawQqAQAAABYAFHrDad8bIOAz1hFmI5V7CsSfPFLoAAAAAAABASsA8gUqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXARNCFzuz02wHSvtxb+xjB6BpouRQuZXzyCeFlFq43w4kJg3NcDsMvzTeOZGEqUgawrNYbbZgHwJqd/fkk4SBvDR1FwGqAAAA", + // Invalid input x-only pubkey in key. + 3: "cHNidP8BAHECAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////Anh8AQAAAAAAFgAUg6fjS9mf8DpJYu+KGhAbspVGHs5gawQqAQAAABYAFHrDad8bIOAz1hFmI5V7CsSfPFLoAAAAAAABASsA8gUqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXIhYC/jSQZMmNbiqFP6PJsSvYswShnBlcYO+n7iOTBG0/ojIZAHcrLadWAACAAQAAgAAAAIABAAAAAAAAAAAAAA==", + // Invalid output internal key length. + 4: "cHNidP8BAH0CAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////Aoh7AQAAAAAAFgAUI4KHHH6EIaAAk/dU2RKB5nWHS59gawQqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXAAAAAAABASsA8gUqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXAAABBSEC/jSQZMmNbiqFP6PJsSvYswShnBlcYO+n7iOTBG0/ojIA", + // Invalid output BIP32 derivation x-only pubkey in key. + 5: "cHNidP8BAH0CAAAAASd0Srq/MCf+DWzyOpbu4u+xiO9SMBlUWFiD5ptmJLJCAAAAAAD/////Aoh7AQAAAAAAFgAUI4KHHH6EIaAAk/dU2RKB5nWHS59gawQqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXAAAAAAABASsA8gUqAQAAACJRIFosLPW1LPMfg60ujaY/8DGD7Nj2CcdRCuikjgORCgdXAAAiBwL+NJBkyY1uKoU/o8mxK9izBKGcGVxg76fuI5MEbT+iMhkAdystp1YAAIABAACAAAAAgAEAAAAAAAAAAA==", + // Invalid input script spend signature key length. + 6: "cHNidP8BAF4CAAAAAZvUh2UjC/mnLmYgAflyVW5U8Mb5f+tWvLVgDYF/aZUmAQAAAAD/////AUjmBSoBAAAAIlEgAw2k/OT32yjCyylRYx4ANxOFZZf+ljiCy1AOaBEsymMAAAAAAAEBKwDyBSoBAAAAIlEgwiR++/2SrEf29AuNQtFpF1oZ+p+hDkol1/NetN2FtpJCFAIssTrGgkjegGqmo2Wc88A+toIdCcgRSk6Gj+vehlu20s2XDhX1P8DIL5UP1WD/qRm3YXK+AXNoqJkTrwdPQAsJQIl1aqNznMxonsD886NgvjLMC1mxbpOh6LtGBXJrLKej/3BsQXZkljKyzGjh+RK4pXjjcZzncQiFx6lm9JvNQ8sAAA==", + // Invalid input script spend signature length. + 7: "cHNidP8BAF4CAAAAAZvUh2UjC/mnLmYgAflyVW5U8Mb5f+tWvLVgDYF/aZUmAQAAAAD/////AUjmBSoBAAAAIlEgAw2k/OT32yjCyylRYx4ANxOFZZf+ljiCy1AOaBEsymMAAAAAAAEBKwDyBSoBAAAAIlEgwiR++/2SrEf29AuNQtFpF1oZ+p+hDkol1/NetN2FtpJBFCyxOsaCSN6AaqajZZzzwD62gh0JyBFKToaP696GW7bSzZcOFfU/wMgvlQ/VYP+pGbdhcr4Bc2iomROvB09ACwlCiXVqo3OczGiewPzzo2C+MswLWbFuk6Hou0YFcmssp6P/cGxBdmSWMrLMaOH5ErileONxnOdxCIXHqWb0m81DywEBAAA=", + // Invalid encoding of base64 stream. + 8: "cHNidP8BAF4CAAAAAZvUh2UjC/mnLmYgAflyVW5U8Mb5f+tWvLVgDYF/aZUmAQAAAAD/////AUjmBSoBAAAAIlEgAw2k/OT32yjCyylRYx4ANxOFZZf+ljiCy1AOaBEsymMAAAAAAAEBKwDyBSoBAAAAIlEgwiR++/2SrEf29AuNQtFpF1oZ+p+hDkol1/NetN2FtpJBFCyxOsaCSN6AaqajZZzzwD62gh0JyBFKToaP696GW7bSzZcOFfU/wMgvlQ/VYP+pGbdhcr4Bc2iomROvB09ACwk5iXVqo3OczGiewPzzo2C+MswLWbFuk6Hou0YFcmssp6P/cGxBdmSWMrLMaOH5ErileONxnOdxCIXHqWb0m81DywAA", + // Invalid input leaf script type control block. + 9: "cHNidP8BAF4CAAAAAZvUh2UjC/mnLmYgAflyVW5U8Mb5f+tWvLVgDYF/aZUmAQAAAAD/////AUjmBSoBAAAAIlEgAw2k/OT32yjCyylRYx4ANxOFZZf+ljiCy1AOaBEsymMAAAAAAAEBKwDyBSoBAAAAIlEgwiR++/2SrEf29AuNQtFpF1oZ+p+hDkol1/NetN2FtpJjFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wG99YgWelJehpKJnVp2YdtpgEBr/OONSm5uTnOf5GulwEV8uSQr3zEXE94UR82BXzlxaXFYyWin7RN/CA/NW4fgAIyAssTrGgkjegGqmo2Wc88A+toIdCcgRSk6Gj+vehlu20qzAAAA=", + // Invalid input leaf script type control block. + 10: "cHNidP8BAF4CAAAAAZvUh2UjC/mnLmYgAflyVW5U8Mb5f+tWvLVgDYF/aZUmAQAAAAD/////AUjmBSoBAAAAIlEgAw2k/OT32yjCyylRYx4ANxOFZZf+ljiCy1AOaBEsymMAAAAAAAEBKwDyBSoBAAAAIlEgwiR++/2SrEf29AuNQtFpF1oZ+p+hDkol1/NetN2FtpJhFcFQkpt0waBJVLeLS2A16XpeB4paDyjsltVHv+6azoA6wG99YgWelJehpKJnVp2YdtpgEBr/OONSm5uTnOf5GulwEV8uSQr3zEXE94UR82BXzlxaXFYyWin7RN/CA/NW4SMgLLE6xoJI3oBqpqNlnPPAPraCHQnIEUpOho/r3oZbttKswAAA", +} + +// This tests that valid PSBT serializations can be parsed +// into Psbt structs. +func TestReadValidPsbtAndReserialize(t *testing.T) { + for key, v := range validPsbtHex { + psbtBytes, err := hex.DecodeString(v) + require.NoErrorf(t, err, "%d: hex decode", key) + + testPsbt, err := NewFromRawBytes( + bytes.NewReader(psbtBytes), false, + ) + require.NoErrorf(t, err, "%d: parse", key) + + t.Logf("Successfully parsed test %d, got transaction: %v", + key, spew.Sdump(testPsbt.UnsignedTx)) + + var b bytes.Buffer + err = testPsbt.Serialize(&b) + require.NoErrorf(t, err, "%d: serialize", key) + if err != nil { + t.Fatalf("Unable to serialize created Psbt: %v", err) + } + + require.Equal(t, psbtBytes, b.Bytes(), "%d: serialized", key) + } + + for key, v := range validPsbtBase64 { + testPsbt, err := NewFromRawBytes( + strings.NewReader(v), true, + ) + require.NoErrorf(t, err, "%d: parse", key) + + t.Logf("Successfully parsed test %d, got transaction: %v", + key, spew.Sdump(testPsbt.UnsignedTx)) + + var b bytes.Buffer + err = testPsbt.Serialize(&b) + require.NoErrorf(t, err, "%d: serialize", key) + if err != nil { + t.Fatalf("Unable to serialize created Psbt: %v", err) + } + + base64Packet := base64.StdEncoding.EncodeToString(b.Bytes()) + require.Equal(t, v, base64Packet, "%d: serialized", key) + } +} + +func TestReadInvalidPsbt(t *testing.T) { + for key, v := range invalidPsbtHex { + psbtBytes, err := hex.DecodeString(v) + require.NoErrorf(t, err, "%d: hex decode", key) + + _, err = NewFromRawBytes(bytes.NewReader(psbtBytes), false) + require.Errorf(t, err, "%d: new from raw bytes", key) + + t.Logf("Correctly got error: %v", err) + } + + for key, v := range invalidPsbtBase64 { + _, err := NewFromRawBytes(strings.NewReader(v), true) + require.Errorf(t, err, "%d: new from raw bytes", key) + + t.Logf("Correctly got error: %v", err) + } +} + +func TestSanityCheck(t *testing.T) { + // TODO(guggero): Remove when checks for segwit v1 are implemented. + t.Skip("Skipping PSBT sanity checks for segwit v0.") + + // Test strategy: + // 1. Create an invalid PSBT from a serialization + // Then ensure that the sanity check fails. + // 2. Create a valid PSBT from a serialization + // Then create an updater, add a witness utxo to a non-witness + // utxo. + // Then ensure that the sanity check fails. + // Then add a witnessScript field to a non-witness utxo. + // Then ensure that the sanity check fails. + + // index 1 contains a psbt with two inputs, first non-witness, + // second witness. + psbtraw1, err := hex.DecodeString(validPsbtHex[1]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + psbt1, err := NewFromRawBytes(bytes.NewReader(psbtraw1), false) + if err != nil { + t.Fatalf("Unable to create Psbt struct: %v", err) + } + + // Add a non-witness utxo field to input2 using raw insertion function, + // so that it becomes invalid, then NewUpdater should fail. + nonWitnessUtxoRaw, err := hex.DecodeString( + CUTestHexData["NonWitnessUtxo"], + ) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + nonWitnessUtxo := wire.NewMsgTx(2) + err = nonWitnessUtxo.Deserialize(bytes.NewReader(nonWitnessUtxoRaw)) + if err != nil { + t.Fatalf("Unable to deserialize: %v", err) + } + inputs1 := &psbt1.Inputs[1] + inputs1.NonWitnessUtxo = nonWitnessUtxo + + // The PSBT is now in an inconsistent state; Updater creation should + // fail. + updater, err := NewUpdater(psbt1) + if err == nil { + t.Fatalf("Failed to identify invalid PSBT state ( " + + "witness, non-witness fields)") + } + + // Overwrite back with the correct psbt + psbtraw1, err = hex.DecodeString(validPsbtHex[1]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + psbt1, err = NewFromRawBytes(bytes.NewReader(psbtraw1), false) + updater, err = NewUpdater(psbt1) + if err != nil { + t.Fatalf("Unable to create Updater: %v", err) + } + + // Create a fake non-witness utxo field to overlap with + // the existing witness input at index 1. + tx := wire.NewMsgTx(2) + err = tx.Deserialize(bytes.NewReader(nonWitnessUtxoRaw)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + err = updater.AddInNonWitnessUtxo(tx, 1) + if err == nil { + t.Fatalf("Incorrectly accepted Psbt with conflicting witness " + + "and non-witness utxo entries in the same input.") + } + + // Now we try again; this time we try to add a witnessScript + // key-value pair to an input which is non-witness, which should + // also be rejected. + psbt2, err := NewFromRawBytes( + bytes.NewReader(psbtraw1), false, + ) + if err != nil { + t.Fatalf("Unable to create Psbt struct: %v", err) + } + updater2, err := NewUpdater(psbt2) + if err != nil { + t.Fatalf("Got error creating updater2: %v", err) + } + witnessScript, err := hex.DecodeString( + CUTestHexData["Input2WitnessScript"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + err = updater2.AddInWitnessScript(witnessScript, 0) + if err == nil { + t.Fatalf("Incorrectly accepted adding witness script field " + + "to non-witness utxo") + } +} + +// Data for creation and updating tests +// =============================================================================== +var CUTestHexData = map[string]string{ + "scriptPubkey1": "0014d85c2b71d0060b09c9886aeb815e50991dda124d", + "scriptPubkey2": "001400aea9a2e5f0f876a588df5546e8742d1d87008f", + "txid1": "75ddabb27b8845f5247975c8a5ba7c6f336c4570708ebe230caf6db5217ae858", + "txid2": "1dea7cd05979072a3578cab271c02244ea8a090bbb46aa680a65ecd027048d83", + "COPsbtHex": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f000000000000000000", + "NonWitnessUtxo": "0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f618765000000", + "WitnessUtxo": "00c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e887", + // After adding witnessutxo and nonwitness utxo to inputs: + "UOPsbtHex": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e887000000", + "Input1RedeemScript": "5221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae", + "Input2RedeemScript": "00208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903", + "Input2WitnessScript": "522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae", + // After adding redeemscripts and witness scripts to inputs: + "UOPsbtHex2": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e88701042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae000000", + // After adding bip32 derivations to inputs and outputs: + "UOPsbtHex3": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f0000008000000080010000800001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e88701042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f00000080000000800200008000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + //After adding sighash types to inputs + "UOPsbtHex4": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f618765000000010304010000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f0000008000000080010000800001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870103040100000001042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f00000080000000800200008000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", +} + +// Just one example sanity check of B64 construction; after sighash appending above +var CUTestB64Data = map[string]string{ + "UOPsbtB644": "cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAABAwQBAAAAAQRHUiEClYO/Oa4KYJdHrRma3dY0+mEIVZ1sXNObTCGD8auW4H8hAtq2H/SaFNtqfQKwzR+7ePxLGDErW05U2uTbovv+9TbXUq4iBgKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgfxDZDGpPAAAAgAAAAIAAAACAIgYC2rYf9JoU22p9ArDNH7t4/EsYMStbTlTa5Nui+/71NtcQ2QxqTwAAAIAAAACAAQAAgAABASAAwusLAAAAABepFLf1+vQOPUClpFmx2zU18rcvqSHohwEDBAEAAAABBCIAIIwjUxc3Q7WV37Sge3K6jkLjeX2nTof+fZ10l+OyAokDAQVHUiEDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwhAjrdkE89bc9Z3bkGsN7iNSm3/7ntUOXoYVGSaGAiHw5zUq4iBgI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8OcxDZDGpPAAAAgAAAAIADAACAIgYDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwQ2QxqTwAAAIAAAACAAgAAgAAiAgOppMN/WZbTqiXbrGtXCvBlA5RJKUJGCzVHU+2e7KWHcRDZDGpPAAAAgAAAAIAEAACAACICAn9jmXV9Lv9VoTatAsaEsYOLZVbl8bazQoKpS2tQBRCWENkMak8AAACAAAAAgAUAAIAA", +} + +var CUTestAmountData = map[string]int64{ + "amount1": 149990000, + "amount2": 100000000, + "amount3": 200000000, +} + +var CUTestIndexData = map[string]uint32{ + "index1": 0, + "index2": 1, +} + +var CUMasterKeyFingerPrint = "d90c6a4f" + +var CUTestPathData = map[string][]uint32{ + "dpath1": {0 + 0x80000000, 0 + 0x80000000, 0 + 0x80000000}, + "dpath2": {0 + 0x80000000, 0 + 0x80000000, 1 + 0x80000000}, + "dpath3": {0 + 0x80000000, 0 + 0x80000000, 2 + 0x80000000}, + "dpath4": {0 + 0x80000000, 0 + 0x80000000, 3 + 0x80000000}, + "dpath5": {0 + 0x80000000, 0 + 0x80000000, 4 + 0x80000000}, + "dpath6": {0 + 0x80000000, 0 + 0x80000000, 5 + 0x80000000}, +} + +var CUTestPubkeyData = map[string]string{ + "pub1": "029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f", + "pub2": "02dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d7", + "pub3": "03089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc", + "pub4": "023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e73", + "pub5": "03a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca58771", + "pub6": "027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b50051096", +} + +// =============================================================================== + +func TestPsbtCreator(t *testing.T) { + spkOut1, err := hex.DecodeString(CUTestHexData["scriptPubkey1"]) + if err != nil { + t.Fatalf("Error: %v", err) + } + spkOut2, err := hex.DecodeString(CUTestHexData["scriptPubkey2"]) + if err != nil { + t.Fatalf("Error: %v", err) + } + out1 := wire.NewTxOut(CUTestAmountData["amount1"], spkOut1) + out2 := wire.NewTxOut(CUTestAmountData["amount2"], spkOut2) + outputs := []*wire.TxOut{out1, out2} + hash1, err := chainhash.NewHashFromStr(CUTestHexData["txid1"]) + if err != nil { + t.Fatalf("Error: %v", err) + } + prevOut1 := wire.NewOutPoint(hash1, uint32(0)) + hash2, err := chainhash.NewHashFromStr(CUTestHexData["txid2"]) + if err != nil { + t.Fatalf("Error: %v", err) + } + prevOut2 := wire.NewOutPoint(hash2, uint32(1)) + inputs := []*wire.OutPoint{prevOut1, prevOut2} + + // Check creation fails with invalid sequences: + nSequences := []uint32{wire.MaxTxInSequenceNum} + _, err = New(inputs, outputs, int32(3), uint32(0), nSequences) + if err == nil { + t.Fatalf("Did not error when creating transaction with " + + "invalid nSequences") + } + nSequences = append(nSequences, wire.MaxTxInSequenceNum) + + // Check creation fails with invalid version + _, err = New(inputs, outputs, int32(0), uint32(0), nSequences) + if err == nil { + t.Fatalf("Did not error when creating transaction with " + + "invalid version (3)") + } + + // Use valid data to create: + cPsbt, err := New(inputs, outputs, int32(2), uint32(0), nSequences) + var b bytes.Buffer + err = cPsbt.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize created Psbt: %v", err) + } + if CUTestHexData["COPsbtHex"] != hex.EncodeToString(b.Bytes()) { + t.Fatalf("Failed to create expected psbt, instead got: %v", + hex.EncodeToString(b.Bytes())) + } + + // Now simulate passing the created PSBT to an Updater + updater, err := NewUpdater(cPsbt) + if err != nil { + t.Fatalf("Unable to create Updater object") + } + tx := wire.NewMsgTx(2) + nonWitnessUtxoHex, err := hex.DecodeString( + CUTestHexData["NonWitnessUtxo"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + err = tx.Deserialize(bytes.NewReader(nonWitnessUtxoHex)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + witnessUtxoHex, err := hex.DecodeString( + CUTestHexData["WitnessUtxo"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + txout := wire.TxOut{Value: CUTestAmountData["amount3"], + PkScript: witnessUtxoHex[9:]} + err = updater.AddInNonWitnessUtxo(tx, 0) + if err != nil { + t.Fatalf("Unable to add NonWitness Utxo to inputs: %v", err) + } + err = updater.AddInWitnessUtxo(&txout, 1) + if err != nil { + t.Fatalf("Unable to add Witness Utxo to inputs: %v", err) + } + + b.Reset() + + err = updater.Upsbt.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize updated Psbt: %v", err) + } + if CUTestHexData["UOPsbtHex"] != hex.EncodeToString(b.Bytes()) { + t.Fatal("Failed to create valid updated PSBT after utxos") + } + input1RedeemScript, err := hex.DecodeString(CUTestHexData["Input1RedeemScript"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + err = updater.AddInRedeemScript(input1RedeemScript, 0) + if err != nil { + t.Fatalf("Unable to add redeem script: %v", err) + } + input2RedeemScript, err := hex.DecodeString(CUTestHexData["Input2RedeemScript"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + err = updater.AddInRedeemScript(input2RedeemScript, 1) + if err != nil { + t.Fatalf("Unable to add redeem script: %v", err) + } + input2WitnessScript, err := hex.DecodeString(CUTestHexData["Input2WitnessScript"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + err = updater.AddInWitnessScript(input2WitnessScript, 1) + if err != nil { + t.Fatalf("Unable to add witness script: %v", err) + } + + b.Reset() + err = updater.Upsbt.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize updated Psbt: %v", err) + } + if CUTestHexData["UOPsbtHex2"] != hex.EncodeToString(b.Bytes()) { + t.Fatal("Failed to create valid updated PSBT after redeem scripts") + } + masterKey, err := hex.DecodeString(CUMasterKeyFingerPrint) + masterKeyInt := binary.LittleEndian.Uint32(masterKey) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + input1Path1 := CUTestPathData["dpath1"] + input1Path2 := CUTestPathData["dpath2"] + input1Key1, err := hex.DecodeString(CUTestPubkeyData["pub1"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + input1Key2, err := hex.DecodeString(CUTestPubkeyData["pub2"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + err = updater.AddInBip32Derivation(masterKeyInt, input1Path1, input1Key1, 0) + if err != nil { + t.Fatal("Failed to add first key derivation for input 1") + } + err = updater.AddInBip32Derivation(masterKeyInt, input1Path2, input1Key2, 0) + if err != nil { + t.Fatal("Failed to add second key derivation for input 1") + } + input2Path1 := CUTestPathData["dpath3"] + input2Path2 := CUTestPathData["dpath4"] + input2Key1, err := hex.DecodeString(CUTestPubkeyData["pub3"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + input2Key2, err := hex.DecodeString(CUTestPubkeyData["pub4"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + // check invalid pubkeys are not accepted + borkedInput2Key1 := append([]byte{0xff}, input2Key1...) + err = updater.AddInBip32Derivation(masterKeyInt, input2Path1, + borkedInput2Key1, 1) + if err == nil { + t.Fatalf("Expected invalid pubkey, got: %v", err) + } + + err = updater.AddInBip32Derivation(masterKeyInt, input2Path1, input2Key1, 1) + if err != nil { + t.Fatal("Failed to add first key derivation for input 2") + } + err = updater.AddInBip32Derivation(masterKeyInt, input2Path2, input2Key2, 1) + if err != nil { + t.Fatal("Failed to add second key derivation for input 2") + } + output1Key1, err := hex.DecodeString(CUTestPubkeyData["pub5"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + output1Path := CUTestPathData["dpath5"] + + // check invalid pubkeys are not accepted + borkedOutput1Key1 := append([]byte{0xab}, output1Key1[:13]...) + err = updater.AddOutBip32Derivation(masterKeyInt, output1Path, + borkedOutput1Key1, 0) + if err == nil { + t.Fatalf("Expected invalid pubkey, got: %v", err) + } + + err = updater.AddOutBip32Derivation(masterKeyInt, output1Path, output1Key1, 0) + if err != nil { + t.Fatal("Failed to add key to first output") + } + output2Key1, err := hex.DecodeString(CUTestPubkeyData["pub6"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + output2Path := CUTestPathData["dpath6"] + err = updater.AddOutBip32Derivation(masterKeyInt, output2Path, output2Key1, 1) + if err != nil { + t.Fatal("Failed to add key to second output") + } + + b.Reset() + err = updater.Upsbt.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize updated Psbt: %v", err) + } + if CUTestHexData["UOPsbtHex3"] != hex.EncodeToString(b.Bytes()) { + t.Fatal("Failed to create valid updated PSBT after BIP32 derivations") + } + err = updater.AddInSighashType(txscript.SigHashType(1), 0) + if err != nil { + t.Fatal("Failed to add sighash type to first input") + } + err = updater.AddInSighashType(txscript.SigHashType(1), 1) + if err != nil { + t.Fatal("Failed to add sighash type to second input") + } + + b.Reset() + err = updater.Upsbt.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize updated Psbt: %v", err) + } + if CUTestHexData["UOPsbtHex4"] != hex.EncodeToString(b.Bytes()) { + t.Fatal("Failed to create valid updated PSBT after sighash types") + } + b644, err := updater.Upsbt.B64Encode() + if err != nil { + t.Fatalf("Unable to B64Encode updated Psbt: %v", err) + } + if b644 != CUTestB64Data["UOPsbtB644"] { + t.Fatalf("Failed to base64 encode updated PSBT after sighash "+ + "types: %v", b644) + } +} + +// Signing test data taken from +// https://github.com/achow101/bitcoin/blob/020628e3a4e88e36647eaf92bac4b3552796ac6a/test/functional/data/rpc_psbt.json +var signerPsbtData = map[string]string{ + "signer1Privkey1": "cP53pDbR5WtAD8dYAW9hhTjuvvTVaEiQBdrz9XPrgLBeRFiyCbQr", + "signer1Privkey2": "cR6SXDoyfQrcp4piaiHE97Rsgta9mNhGTen9XeonVgwsh4iSgw6d", + "signer1PsbtB64": "cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAABBEdSIQKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgfyEC2rYf9JoU22p9ArDNH7t4/EsYMStbTlTa5Nui+/71NtdSriIGApWDvzmuCmCXR60Zmt3WNPphCFWdbFzTm0whg/GrluB/ENkMak8AAACAAAAAgAAAAIAiBgLath/0mhTban0CsM0fu3j8SxgxK1tOVNrk26L7/vU21xDZDGpPAAAAgAAAAIABAACAAQMEAQAAAAABASAAwusLAAAAABepFLf1+vQOPUClpFmx2zU18rcvqSHohwEEIgAgjCNTFzdDtZXftKB7crqOQuN5fadOh/59nXSX47ICiQMBBUdSIQMIncEMesbbVPkTKa9hczPbOIzq0MIx9yM3nRuZAwsC3CECOt2QTz1tz1nduQaw3uI1Kbf/ue1Q5ehhUZJoYCIfDnNSriIGAjrdkE89bc9Z3bkGsN7iNSm3/7ntUOXoYVGSaGAiHw5zENkMak8AAACAAAAAgAMAAIAiBgMIncEMesbbVPkTKa9hczPbOIzq0MIx9yM3nRuZAwsC3BDZDGpPAAAAgAAAAIACAACAAQMEAQAAAAAiAgOppMN/WZbTqiXbrGtXCvBlA5RJKUJGCzVHU+2e7KWHcRDZDGpPAAAAgAAAAIAEAACAACICAn9jmXV9Lv9VoTatAsaEsYOLZVbl8bazQoKpS2tQBRCWENkMak8AAACAAAAAgAUAAIAA", + "signer1Result": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000002202029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01010304010000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f0000008000000080010000800001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e887220203089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f010103040100000001042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f00000080000000800200008000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + "signer2Privkey1": "cT7J9YpCwY3AVRFSjN6ukeEeWY6mhpbJPxRaDaP5QTdygQRxP9Au", + "signer2Privkey2": "cNBc3SWUip9PPm1GjRoLEJT6T41iNzCYtD7qro84FMnM5zEqeJsE", + "signer2Psbt": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f000000800000008001000080010304010000000001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e88701042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f0000008000000080020000800103040100000000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + "signer2Result": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f618765000000220202dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d7483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01010304010000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f0000008000000080010000800001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8872202023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e73473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d2010103040100000001042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f00000080000000800200008000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", +} + +func TestPsbtSigner(t *testing.T) { + psbt1, err := NewFromRawBytes( + bytes.NewReader([]byte(signerPsbtData["signer1PsbtB64"])), + true, + ) + if err != nil { + t.Fatalf("Failed to parse PSBT: %v", err) + } + psbtUpdater1 := Updater{ + Upsbt: psbt1, + } + sig1, err := hex.DecodeString("3044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01") + pub1, err := hex.DecodeString("029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f") + res, err := psbtUpdater1.Sign(0, sig1, pub1, nil, nil) + if err != nil || res != 0 { + t.Fatalf("Error from adding signatures: %v %v", err, res) + } + sig2, err := hex.DecodeString("3044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01") + pub2, err := hex.DecodeString("03089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc") + res, err = psbtUpdater1.Sign(1, sig2, pub2, nil, nil) + if err != nil || res != 0 { + t.Fatalf("Error from adding signatures: %v %v", err, res) + } + signer1Result, err := hex.DecodeString(signerPsbtData["signer1Result"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + var b bytes.Buffer + err = psbtUpdater1.Upsbt.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize updated Psbt: %v", err) + } + if !bytes.Equal(b.Bytes(), signer1Result) { + t.Fatalf("Failed to add signatures correctly") + } +} + +// Finalizer-extractor test + +var finalizerPsbtData = map[string]string{ + "finalizeb64": "cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAAiAgKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgf0cwRAIgdAGK1BgAl7hzMjwAFXILNoTMgSOJEEjn282bVa1nnJkCIHPTabdA4+tT3O+jOCPIBwUUylWn3ZVE8VfBZ5EyYRGMASICAtq2H/SaFNtqfQKwzR+7ePxLGDErW05U2uTbovv+9TbXSDBFAiEA9hA4swjcHahlo0hSdG8BV3KTQgjG0kRUOTzZm98iF3cCIAVuZ1pnWm0KArhbFOXikHTYolqbV2C+ooFvZhkQoAbqAQEDBAEAAAABBEdSIQKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgfyEC2rYf9JoU22p9ArDNH7t4/EsYMStbTlTa5Nui+/71NtdSriIGApWDvzmuCmCXR60Zmt3WNPphCFWdbFzTm0whg/GrluB/ENkMak8AAACAAAAAgAAAAIAiBgLath/0mhTban0CsM0fu3j8SxgxK1tOVNrk26L7/vU21xDZDGpPAAAAgAAAAIABAACAAAEBIADC6wsAAAAAF6kUt/X69A49QKWkWbHbNTXyty+pIeiHIgIDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtxHMEQCIGLrelVhB6fHP0WsSrWh3d9vcHX7EnWWmn84Pv/3hLyyAiAMBdu3Rw2/LwhVfdNWxzJcHtMJE+mWzThAlF2xIijaXwEiAgI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8Oc0cwRAIgZfRbpZmLWaJ//hp77QFq8fH5DVSzqo90UKpfVqJRA70CIH9yRwOtHtuWaAsoS1bU/8uI9/t1nqu+CKow8puFE4PSAQEDBAEAAAABBCIAIIwjUxc3Q7WV37Sge3K6jkLjeX2nTof+fZ10l+OyAokDAQVHUiEDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwhAjrdkE89bc9Z3bkGsN7iNSm3/7ntUOXoYVGSaGAiHw5zUq4iBgI63ZBPPW3PWd25BrDe4jUpt/+57VDl6GFRkmhgIh8OcxDZDGpPAAAAgAAAAIADAACAIgYDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwQ2QxqTwAAAIAAAACAAgAAgAAiAgOppMN/WZbTqiXbrGtXCvBlA5RJKUJGCzVHU+2e7KWHcRDZDGpPAAAAgAAAAIAEAACAACICAn9jmXV9Lv9VoTatAsaEsYOLZVbl8bazQoKpS2tQBRCWENkMak8AAACAAAAAgAUAAIAA", + "finalize": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000002202029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01220202dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d7483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01010304010000000104475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae2206029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f10d90c6a4f000000800000008000000080220602dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d710d90c6a4f0000008000000080010000800001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e887220203089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f012202023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e73473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d2010103040100000001042200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903010547522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae2206023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7310d90c6a4f000000800000008003000080220603089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc10d90c6a4f00000080000000800200008000220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + "resultb64": "cHNidP8BAJoCAAAAAljoeiG1ba8MI76OcHBFbDNvfLqlyHV5JPVFiHuyq911AAAAAAD/////g40EJ9DsZQpoqka7CwmK6kQiwHGyyng1Kgd5WdB86h0BAAAAAP////8CcKrwCAAAAAAWABTYXCtx0AYLCcmIauuBXlCZHdoSTQDh9QUAAAAAFgAUAK6pouXw+HaliN9VRuh0LR2HAI8AAAAAAAEAuwIAAAABqtc5MQGL0l+ErkALaISL4J23BurCrBgpi6vucatlb4sAAAAASEcwRAIgWPb8fGoz4bMVSNSByCbAFb0wE1qtQs1neQ2rZtKtJDsCIEoc7SYExnNbY5PltBaR3XiwDwxZQvufdRhW+qk4FX26Af7///8CgPD6AgAAAAAXqRQPuUY0IWlrgsgzryQceMF9295JNIfQ8gonAQAAABepFCnKdPigj4GZlCgYXJe12FLkBj9hh2UAAAABB9oARzBEAiB0AYrUGACXuHMyPAAVcgs2hMyBI4kQSOfbzZtVrWecmQIgc9Npt0Dj61Pc76M4I8gHBRTKVafdlUTxV8FnkTJhEYwBSDBFAiEA9hA4swjcHahlo0hSdG8BV3KTQgjG0kRUOTzZm98iF3cCIAVuZ1pnWm0KArhbFOXikHTYolqbV2C+ooFvZhkQoAbqAUdSIQKVg785rgpgl0etGZrd1jT6YQhVnWxc05tMIYPxq5bgfyEC2rYf9JoU22p9ArDNH7t4/EsYMStbTlTa5Nui+/71NtdSrgABASAAwusLAAAAABepFLf1+vQOPUClpFmx2zU18rcvqSHohwEHIyIAIIwjUxc3Q7WV37Sge3K6jkLjeX2nTof+fZ10l+OyAokDAQjaBABHMEQCIGLrelVhB6fHP0WsSrWh3d9vcHX7EnWWmn84Pv/3hLyyAiAMBdu3Rw2/LwhVfdNWxzJcHtMJE+mWzThAlF2xIijaXwFHMEQCIGX0W6WZi1mif/4ae+0BavHx+Q1Us6qPdFCqX1aiUQO9AiB/ckcDrR7blmgLKEtW1P/LiPf7dZ6rvgiqMPKbhROD0gFHUiEDCJ3BDHrG21T5EymvYXMz2ziM6tDCMfcjN50bmQMLAtwhAjrdkE89bc9Z3bkGsN7iNSm3/7ntUOXoYVGSaGAiHw5zUq4AIgIDqaTDf1mW06ol26xrVwrwZQOUSSlCRgs1R1Ptnuylh3EQ2QxqTwAAAIAAAACABAAAgAAiAgJ/Y5l1fS7/VaE2rQLGhLGDi2VW5fG2s0KCqUtrUAUQlhDZDGpPAAAAgAAAAIAFAACAAA==", + "result": "70736274ff01009a020000000258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd750000000000ffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d0100000000ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f00000000000100bb0200000001aad73931018bd25f84ae400b68848be09db706eac2ac18298babee71ab656f8b0000000048473044022058f6fc7c6a33e1b31548d481c826c015bd30135aad42cd67790dab66d2ad243b02204a1ced2604c6735b6393e5b41691dd78b00f0c5942fb9f751856faa938157dba01feffffff0280f0fa020000000017a9140fb9463421696b82c833af241c78c17ddbde493487d0f20a270100000017a91429ca74f8a08f81999428185c97b5d852e4063f6187650000000107da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752ae0001012000c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e8870107232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b20289030108da0400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00220203a9a4c37f5996d3aa25dbac6b570af0650394492942460b354753ed9eeca5877110d90c6a4f000000800000008004000080002202027f6399757d2eff55a136ad02c684b1838b6556e5f1b6b34282a94b6b5005109610d90c6a4f00000080000000800500008000", + "network": "0200000000010258e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd7500000000da00473044022074018ad4180097b873323c0015720b3684cc8123891048e7dbcd9b55ad679c99022073d369b740e3eb53dcefa33823c8070514ca55a7dd9544f157c167913261118c01483045022100f61038b308dc1da865a34852746f015772934208c6d24454393cd99bdf2217770220056e675a675a6d0a02b85b14e5e29074d8a25a9b5760bea2816f661910a006ea01475221029583bf39ae0a609747ad199addd634fa6108559d6c5cd39b4c2183f1ab96e07f2102dab61ff49a14db6a7d02b0cd1fbb78fc4b18312b5b4e54dae4dba2fbfef536d752aeffffffff838d0427d0ec650a68aa46bb0b098aea4422c071b2ca78352a077959d07cea1d01000000232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903ffffffff0270aaf00800000000160014d85c2b71d0060b09c9886aeb815e50991dda124d00e1f5050000000016001400aea9a2e5f0f876a588df5546e8742d1d87008f000400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00000000", + "twoOfThree": "70736274ff01005e01000000019a5fdb3c36f2168ea34a031857863c63bb776fd8a8a9149efd7341dfaf81c9970000000000ffffffff01e013a8040000000022002001c3a65ccfa5b39e31e6bafa504446200b9c88c58b4f21eb7e18412aff154e3f000000000001012bc817a80400000000220020114c9ab91ea00eb3e81a7aa4d0d8f1bc6bd8761f8f00dbccb38060dc2b9fdd5522020242ecd19afda551d58f496c17e3f51df4488089df4caafac3285ed3b9c590f6a847304402207c6ab50f421c59621323460aaf0f731a1b90ca76eddc635aed40e4d2fc86f97e02201b3f8fe931f1f94fde249e2b5b4dbfaff2f9df66dd97c6b518ffa746a4390bd1012202039f0acfe5a292aafc5331f18f6360a3cc53d645ebf0cc7f0509630b22b5d9f547473044022075329343e01033ebe5a22ea6eecf6361feca58752716bdc2260d7f449360a0810220299740ed32f694acc5f99d80c988bb270a030f63947f775382daf4669b272da0010103040100000001056952210242ecd19afda551d58f496c17e3f51df4488089df4caafac3285ed3b9c590f6a821035a654524d301dd0265c2370225a6837298b8ca2099085568cc61a8491287b63921039f0acfe5a292aafc5331f18f6360a3cc53d645ebf0cc7f0509630b22b5d9f54753ae22060242ecd19afda551d58f496c17e3f51df4488089df4caafac3285ed3b9c590f6a818d5f7375b2c000080000000800000008000000000010000002206035a654524d301dd0265c2370225a6837298b8ca2099085568cc61a8491287b63918e2314cf32c000080000000800000008000000000010000002206039f0acfe5a292aafc5331f18f6360a3cc53d645ebf0cc7f0509630b22b5d9f54718e524a1ce2c000080000000800000008000000000010000000000", +} + +func TestFinalize2of3(t *testing.T) { + b, err := hex.DecodeString(finalizerPsbtData["twoOfThree"]) + if err != nil { + t.Fatalf("Error decoding hex: %v", err) + } + p, err := NewFromRawBytes(bytes.NewReader(b), false) + if p.IsComplete() { + t.Fatalf("Psbt is complete") + } + err = MaybeFinalizeAll(p) + if err != nil { + t.Fatalf("Error in MaybeFinalizeAll: %v", err) + } + if !p.IsComplete() { + t.Fatalf("Psbt is not complete") + } +} + +func TestPsbtExtractor(t *testing.T) { + rawToFinalize, err := base64.StdEncoding.DecodeString( + finalizerPsbtData["finalizeb64"], + ) + if err != nil { + t.Fatalf("Error decoding b64: %v", err) + } + + psbt1, err := NewFromRawBytes( + bytes.NewReader(rawToFinalize), false, + ) + if err != nil { + t.Fatalf("Failed to parse PSBT: %v", err) + } + + for i := range psbt1.Inputs { + err = Finalize(psbt1, i) + if err != nil { + t.Fatalf("Error from finalizing PSBT: %v", err) + } + } + + finalizer1Result, err := base64.StdEncoding.DecodeString( + finalizerPsbtData["resultb64"], + ) + if err != nil { + t.Fatalf("Unable to decode b64: %v", err) + } + finalToNetworkExpected, err := hex.DecodeString(finalizerPsbtData["network"]) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + tx, err := Extract(psbt1) + if err != nil { + t.Fatalf("Failed to extract: %v", err) + } + var resultToNetwork bytes.Buffer + if err := tx.Serialize(&resultToNetwork); err != nil { + t.Fatalf("unable to serialize: %v", err) + } + + var b bytes.Buffer + err = psbt1.Serialize(&b) + if err != nil { + t.Fatalf("Unable to serialize updated Psbt: %v", err) + } + if !bytes.Equal(b.Bytes(), finalizer1Result) { + t.Fatalf("Failed to finalize transaction: expected %x, "+ + "got %x", finalizer1Result, b.Bytes()) + } + if !bytes.Equal(finalToNetworkExpected, resultToNetwork.Bytes()) { + t.Fatalf("Failed to network serialize transaction: %x", b.Bytes()) + } +} + +func TestImportFromCore1(t *testing.T) { + // This example #1 was created manually using Bitcoin Core 0.17 regtest. + // It contains two inputs, one p2wkh and one p2pkh (non-witness). + // We take the created PSBT as input, then add the fields for each input + // separately, then finalize and extract, and compare with the network + // serialized tx output from Core. + imported := "cHNidP8BAJwCAAAAAjaoF6eKeGsPiDQxxqqhFDfHWjBtZzRqmaZmvyCVWZ5JAQAAAAD/////RhypNiFfnQSMNpo0SGsgIvDOyMQFAYEHZXD5jp4kCrUAAAAAAP////8CgCcSjAAAAAAXqRQFWy8ScSkkhlGMwfOnx15YwRzApofwX5MDAAAAABepFAt4TyLfGnL9QY6GLYHbpSQj+QclhwAAAAAAAAAAAA==" + psbt1, err := NewFromRawBytes(bytes.NewReader([]byte(imported)), true) + if err != nil { + t.Fatalf("Failed to parse PSBT: %v", err) + } + + // update with the first input's utxo (witness) and the second input's utxo + // (non-witness) + fundingTxInput1Hex := "02000000014f2cbac7d7691fafca30313097d79be9e78aa6670752fcb1fc15508e77586efb000000004847304402201b5568d7cab977ae0892840b779d84e36d62e42fd93b95e648aaebeacd2577d602201d2ebda2b0cddfa0c1a71d3cbcb602e7c9c860a41ed8b4d18d40c92ccbe92aed01feffffff028c636f91000000001600147447b6d7e6193499565779c8eb5184fcfdfee6ef00879303000000001600149e88f2828a074ebf64af23c2168d1816258311d72d010000" + fundingTxInput2Hex := "020000000001012f03f70c673d83d65da0e8d0db3867b3e7d7bfbd34fd6be65892042e57576eb00000000000feffffff028027128c000000001976a91485780899b61a5506f342bd67a2f635181f50c8b788acb8032c040000000017a914e2e3d32d42d6f043cab39708a6073301df5039db8702473044022047ae396fd8aba8f67482ad16e315fe680db585c1ac6422ffb18dacd9cf5bac350220321176fd6157ef51d9eae9230b0b5bd7dd29bb6247a879189e6aaa8091f3020201210368081f7ff37dfadbed407eba17b232f959e41e6ac78741192c805ebf80d487852f010000" + fundingTxInput1Bytes, err := hex.DecodeString(fundingTxInput1Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + txFund1 := wire.NewMsgTx(2) + err = txFund1.Deserialize(bytes.NewReader(fundingTxInput1Bytes)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + // First input is witness, take correct output: + txFund1Out := txFund1.TxOut[1] + + fundingTxInput2Bytes, err := hex.DecodeString(fundingTxInput2Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + txFund2 := wire.NewMsgTx(2) + err = txFund2.Deserialize(bytes.NewReader(fundingTxInput2Bytes)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + psbtupdater1 := Updater{Upsbt: psbt1} + psbtupdater1.AddInWitnessUtxo(txFund1Out, 0) + err = psbtupdater1.AddInNonWitnessUtxo(txFund2, 1) + if err != nil { + t.Fatalf("Error inserting non-witness utxo: %v", err) + } + + // Signing was done with Core; we manually insert the relevant input + // entries here. + sig1Hex := "304402200da03ac9890f5d724c42c83c2a62844c08425a274f1a5bca50dcde4126eb20dd02205278897b65cb8e390a0868c9582133c7157b2ad3e81c1c70d8fbd65f51a5658b01" + sig1, err := hex.DecodeString(sig1Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + pub1Hex := "024d6b24f372dd4551277c8df4ecc0655101e11c22894c8e05a3468409c865a72c" + pub1, err := hex.DecodeString(pub1Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + // Check that invalid pubkeys are not accepted. + pubInvalid := append(pub1, 0x00) + + res, err := psbtupdater1.Sign(0, sig1, pubInvalid, nil, nil) + if err == nil { + t.Fatalf("Incorrectly accepted invalid pubkey: %v", + pubInvalid) + } + + res, err = psbtupdater1.Sign(0, sig1, pub1, nil, nil) + if err != nil || res != 0 { + t.Fatalf("Error from adding signatures: %v %v", err, res) + } + + sig2Hex := "3044022014eb9c4858f71c9f280bc68402aa742a5187f54c56c8eb07c902eb1eb5804e5502203d66656de8386b9b044346d5605f5ae2b200328fb30476f6ac993fc0dbb0455901" + sig2, err := hex.DecodeString(sig2Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + pub2Hex := "03b4c79acdf4e7d978bef4019c421e4c6c67044ed49d27322dc90e808d8080e862" + pub2, err := hex.DecodeString(pub2Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + // =============================================================== + // Before adding the signature, we'll make a new PSBT with + // modifications to the input data and check it fails sanity checks. + + // First an invalid tx: + psbtBorkedInput2, _ := NewFromRawBytes(bytes.NewReader([]byte(imported)), true) + borkedUpdater, err := NewUpdater(psbtBorkedInput2) + if err != nil { + t.Fatalf("NewUpdater failed while trying to create borked "+ + "version: %v", err) + } + borkedUpdater.AddInWitnessUtxo(txFund1Out, 0) + + res, err = borkedUpdater.Sign(0, sig2, pub2, nil, nil) + if err != ErrInvalidSignatureForInput { + t.Fatalf("AddPartialSig succeeded, but should have failed "+ + "due to mismatch between pubkey and prevOut; err was: %v", err) + } + + // Next, a valid tx serialization, but not the right one + wrongTxBytes, err := hex.DecodeString("020000000001012d1d7b17356d0ad8232a5817d2d2fa5cd97d803c0ed03e013e97b65f4f1e5e7501000000171600147848cfb25bb163c7c63732615980a25eddbadc7bfeffffff022a8227630000000017a91472128ae6b6a1b74e499bedb5efb1cb09c9a6713287107240000000000017a91485f81cb970d854e2513ebf5c5b5d09e4509f4af3870247304402201c09aa8bcd18753ef01d8712a55eea5a0f69b6c4cc2944ac942264ff0662c91402201fc1390bf8b0023dd12ae78d7ec181124e106de57bc8f00812ae92bd024d3045012103ba077fc011aa59393bfe17cf491b3a02a9c4d39df122b2148322da0ec23508f459430800") + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + wrongTx := wire.NewMsgTx(2) + err = wrongTx.Deserialize(bytes.NewReader(wrongTxBytes)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + psbtBorkedInput2.Inputs[1] = *NewPsbtInput(wrongTx, nil) + res, err = borkedUpdater.Sign(1, sig2, pub2, nil, nil) + if err != ErrInvalidSignatureForInput { + t.Fatalf("Error should have been invalid sig for input, was: %v", err) + } + // ====================================================== + + res, err = psbtupdater1.Sign(1, sig2, pub2, nil, nil) + if err != nil || res != 0 { + t.Fatalf("Failed to add signature to second input: %v %v", err, res) + } + + // Neither input (p2pkh and p2wkh) require redeem script nor witness script, + // so there are no more fields to add; we are ready to finalize. + err = Finalize(psbt1, 0) + if err != nil { + t.Fatalf("Failed to finalize the first input, %v", err) + } + if psbt1.IsComplete() { + t.Fatalf("PSBT was complete but has not been fully finalized") + } + err = Finalize(psbt1, 1) + if err != nil { + t.Fatalf("Failed to finalize second input, %v", err) + } + + tx, err := Extract(psbt1) + if err != nil { + t.Fatalf("unable to extract tx: %v", err) + } + var networkSerializedTx bytes.Buffer + if err := tx.Serialize(&networkSerializedTx); err != nil { + t.Fatalf("unable to encode tx: %v", err) + } + + expectedTx := "0200000000010236a817a78a786b0f883431c6aaa11437c75a306d67346a99a666bf2095599e490100000000ffffffff461ca936215f9d048c369a34486b2022f0cec8c4050181076570f98e9e240ab5000000006a473044022014eb9c4858f71c9f280bc68402aa742a5187f54c56c8eb07c902eb1eb5804e5502203d66656de8386b9b044346d5605f5ae2b200328fb30476f6ac993fc0dbb04559012103b4c79acdf4e7d978bef4019c421e4c6c67044ed49d27322dc90e808d8080e862ffffffff028027128c0000000017a914055b2f1271292486518cc1f3a7c75e58c11cc0a687f05f93030000000017a9140b784f22df1a72fd418e862d81dba52423f90725870247304402200da03ac9890f5d724c42c83c2a62844c08425a274f1a5bca50dcde4126eb20dd02205278897b65cb8e390a0868c9582133c7157b2ad3e81c1c70d8fbd65f51a5658b0121024d6b24f372dd4551277c8df4ecc0655101e11c22894c8e05a3468409c865a72c0000000000" + expectedTxBytes, err := hex.DecodeString(expectedTx) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + if !bytes.Equal(expectedTxBytes, networkSerializedTx.Bytes()) { + t.Fatalf("The produced network transaction did not match the expected: %x \n %x \n", + networkSerializedTx.Bytes(), expectedTxBytes) + } + +} + +func TestImportFromCore2(t *testing.T) { + // This example #2 was created manually using Bitcoin Core 0.17 regtest. + // It contains two inputs, one p2sh-p2wkh and one fake utxo. + // The PSBT has been created with walletcreatepsbt and then partial-signed + // on the real input with walletprocessbst in Core. + // We first check that the updating here, using the Core created signature, + // redeem script and signature for the p2sh-p2wkh input, creates the + // same partial-signed intermediate transaction as Core did after + // walletprocesspsbt. + // We then attach a fake + // input of type p2sh-p2wsh, attach its witnessUtxo, redeemscript and + // witnessscript fields, and then finalize the whole transaction. Unlike + // the previous example, we cannot here compare with a Core produced + // network serialized final transaction, because of the fake input. + imported := "cHNidP8BAJsCAAAAAkxTQ+rig5QNnUS5nMc+Pccow4IcOJeQRcNNw+7p5ZA5AQAAAAD/////qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoNAAAAAP////8CAIYOcAAAAAAWABQ1l7nn13RubTwqRQU2BnVV5WlXBWAxMbUAAAAAF6kUkiuXUjfWFgTp6nl/gf9+8zIWR6KHAAAAAAAAAAAA" + psbt1, err := NewFromRawBytes(bytes.NewReader([]byte(imported)), true) + if err != nil { + t.Fatalf("Failed to parse PSBT: %v", err) + } + + // update with the first input's utxo, taken from its funding + // transaction + fundingTxInput1Hex := "02000000017b260536a3c17aee49c41a9b36fdf01a418e0c04df06fbabcb0d4f590b95d175000000006a473044022074a5a13159b6c12d77881c9501aa5c18616fb76c1809fc4d55f18a2e63159a6702200d1aa72be6056a41808898d24da93c0c0192cad65b7c2cc86e00b3e0fbbd57f601210212cc429d61fde565d0c2271a3e4fdb063cb49ae2257fa71460be753ceb56d175feffffff02bc060d8f0000000017a9140b56c31b5dc5a5a22c45a7850e707ad602d94a3087008352840000000017a9149f3679d67a9a486238764f618a93b82a7d999103879a000000" + fundingTxInput1Bytes, err := hex.DecodeString(fundingTxInput1Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + txFund1 := wire.NewMsgTx(2) + err = txFund1.Deserialize(bytes.NewReader(fundingTxInput1Bytes)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + // First input is witness, take correct output: + txFund1Out := txFund1.TxOut[1] + + psbtupdater1 := Updater{Upsbt: psbt1} + psbtupdater1.AddInWitnessUtxo(txFund1Out, 0) + + // This input is p2sh-p2wkh, so it requires a redeemscript but not + // a witness script. The redeemscript is the witness program. + redeemScript, err := hex.DecodeString("00147aed39420a8b7ab98a83791327ccb70819d1fbe2") + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + psbtupdater1.AddInRedeemScript(redeemScript, 0) + + // Signing for the first input was done with Core; we manually insert the + // relevant input entries here. + sig1Hex := "30440220546d182d00e45ef659c329dce6197dc19e0abc795e2c9279873f5a887998b273022044143113fc3475d04fc8d5113e0bbcb42d80514a9f1a2247e9b2a7878e20d44901" + sig1, err := hex.DecodeString(sig1Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + pub1Hex := "02bb3ce35af26f4c826eab3e5fc263ef56871b26686a8a995599b7ee6576613104" + pub1, err := hex.DecodeString(pub1Hex) + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + res, err := psbtupdater1.Sign(0, sig1, pub1, nil, nil) + if err != nil || res != 0 { + t.Fatalf("Unable to add partial signature: %v %v", err, res) + } + + // Since this input is now finalizable, we do so: + err = Finalize(psbt1, 0) + if err != nil { + t.Fatalf("Failed to finalize the first input: %v", err) + } + if psbt1.IsComplete() { + t.Fatalf("PSBT was complete but has not been fully finalized") + } + + // Core also adds the OutRedeemScript field for the output it knows about. + // Note that usually we would not of course re-create, but rather start + // from the half-signed version; so this is needed only for a sanity check + // that we can recreate the half-signed. + output2RedeemScript, err := hex.DecodeString("0014e0846bd17848ab40ca1f56b655c6fa31667880cc") + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + psbtupdater1.AddOutRedeemScript(output2RedeemScript, 1) + // The main function of the test is to compare the thus-generated + // partially (not completely) signed transaction with that generated and + // encoded by Core. + expectedPsbtPartialB64 := "cHNidP8BAJsCAAAAAkxTQ+rig5QNnUS5nMc+Pccow4IcOJeQRcNNw+7p5ZA5AQAAAAD/////qqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqoNAAAAAP////8CAIYOcAAAAAAWABQ1l7nn13RubTwqRQU2BnVV5WlXBWAxMbUAAAAAF6kUkiuXUjfWFgTp6nl/gf9+8zIWR6KHAAAAAAABASAAg1KEAAAAABepFJ82edZ6mkhiOHZPYYqTuCp9mZEDhwEHFxYAFHrtOUIKi3q5ioN5EyfMtwgZ0fviAQhrAkcwRAIgVG0YLQDkXvZZwync5hl9wZ4KvHleLJJ5hz9aiHmYsnMCIEQUMRP8NHXQT8jVET4LvLQtgFFKnxoiR+myp4eOINRJASECuzzjWvJvTIJuqz5fwmPvVocbJmhqiplVmbfuZXZhMQQAAAABABYAFOCEa9F4SKtAyh9WtlXG+jFmeIDMAA==" + generatedPsbtPartialB64, err := psbt1.B64Encode() + if err != nil { + t.Fatalf("Unable to B64Encode Psbt: %v", err) + } + if expectedPsbtPartialB64 != generatedPsbtPartialB64 { + t.Fatalf("Partial did not match expected: %v", generatedPsbtPartialB64) + } + + // We now simulate adding the signing data for the second (fake) input, + // and check that we can finalize and extract. This input is p2sh-p2wsh. + // the second input is fake, we're going to make it witness type, + // so create a TxOut struct that fits + fakeTxOutSerialized, err := hex.DecodeString("00c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e887") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + fakevalSerialized := binary.LittleEndian.Uint64(fakeTxOutSerialized[:8]) + fakeScriptPubKey := fakeTxOutSerialized[9:] + txFund2Out := wire.NewTxOut(int64(fakevalSerialized), fakeScriptPubKey) + psbt2, err := NewFromRawBytes(bytes.NewReader([]byte(expectedPsbtPartialB64)), true) + if err != nil { + t.Fatalf("Failed to load partial PSBT: %v", err) + } + psbtupdater2, err := NewUpdater(psbt2) + if err != nil { + t.Fatalf("Failed to create updater: %v", err) + } + psbtupdater2.AddInWitnessUtxo(txFund2Out, 1) + // Add redeemScript, which is the witnessscript/program: + redeemScript, err = hex.DecodeString("00208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + err = psbtupdater2.AddInRedeemScript(redeemScript, 1) + if err != nil { + t.Fatalf("Failed to add redeemscript to second input: %v", err) + } + // Add witnessScript, which here is multisig: + witnessScript, err := hex.DecodeString("522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + // To test multisig checks, add a nonsense version of the multisig script + witnessScriptNonsense, err := hex.DecodeString("52ffff") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + err = psbtupdater2.AddInWitnessScript(witnessScript, 1) + if err != nil { + t.Fatalf("Failed to add witnessscript to second input: %v", err) + } + // Construct the two partial signatures to be added + sig21, err := hex.DecodeString("3044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + pub21, err := hex.DecodeString("03089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + sig22, err := hex.DecodeString("3044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d201") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + pub22, err := hex.DecodeString("023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e73") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + res, err = psbtupdater2.Sign(1, sig21, pub21, nil, nil) + + // Check that the finalization procedure fails here due to not + // meeting the multisig policy + success, err := MaybeFinalize(psbt2, 1) + if success { + t.Fatalf("Incorrectly succeeded in finalizing without sigs") + } + if err != ErrUnsupportedScriptType { + t.Fatalf("Got unexpected error type: %v", err) + } + + res, err = psbtupdater2.Sign(1, sig22, pub22, nil, nil) + + // Check that the finalization procedure also fails with a nonsense + // script + err = psbtupdater2.AddInWitnessScript(witnessScriptNonsense, 1) + if err != nil { + t.Fatalf("Failed to add witnessscript to second input: %v", err) + } + success, err = MaybeFinalize(psbt2, 1) + if success { + t.Fatalf("Incorrectly succeeded in finalizing with invalid msigscript") + } + if err != ErrUnsupportedScriptType { + t.Fatalf("Got unexpected error type: %v", err) + } + + // Restore the correct witnessScript to complete correctly + err = psbtupdater2.AddInWitnessScript(witnessScript, 1) + if err != nil { + t.Fatalf("Failed to add witnessscript to second input: %v", err) + } + + success, err = MaybeFinalize(psbt2, 1) + if !success { + if err != nil { + t.Fatalf("Failed to finalize second input: %v", err) + } else { + t.Fatalf("Input was not finalizable") + } + } + + // Add a (fake) witnessOut descriptor field to one of the outputs, + // for coverage purposes (we aren't currently using this field) + psbtupdater2.AddOutWitnessScript([]byte{0xff, 0xff, 0xff}, 0) + + // Sanity check; we should not have lost the additional output entry + // provided by Core initially + uoutput1 := psbtupdater2.Upsbt.Outputs[1] + if uoutput1.RedeemScript == nil { + t.Fatalf("PSBT should contain outredeemscript entry, but it does not.") + } + // Nor should we have lost our fake witnessscript output entry + uoutput2 := psbtupdater2.Upsbt.Outputs[0] + if uoutput2.WitnessScript == nil { + t.Fatalf("PSBT should contain outwitnessscript but it does not.") + } + var tx bytes.Buffer + networkSerializedTx, err := Extract(psbt2) + if err != nil { + t.Fatalf("unable to extract tx: %v", err) + } + if err := networkSerializedTx.Serialize(&tx); err != nil { + t.Fatalf("unable to encode tx: %v", err) + } + expectedSerializedTx, err := hex.DecodeString("020000000001024c5343eae283940d9d44b99cc73e3dc728c3821c38979045c34dc3eee9e5903901000000171600147aed39420a8b7ab98a83791327ccb70819d1fbe2ffffffffaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa0d000000232200208c2353173743b595dfb4a07b72ba8e42e3797da74e87fe7d9d7497e3b2028903ffffffff0200860e70000000001600143597b9e7d7746e6d3c2a450536067555e5695705603131b50000000017a914922b975237d61604e9ea797f81ff7ef3321647a287024730440220546d182d00e45ef659c329dce6197dc19e0abc795e2c9279873f5a887998b273022044143113fc3475d04fc8d5113e0bbcb42d80514a9f1a2247e9b2a7878e20d449012102bb3ce35af26f4c826eab3e5fc263ef56871b26686a8a995599b7ee65766131040400473044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01473044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d20147522103089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc21023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e7352ae00000000") + if err != nil { + t.Fatalf("Failed to decode hex: %v", err) + } + if !bytes.Equal(expectedSerializedTx, tx.Bytes()) { + t.Fatalf("Failed to create correct network serialized "+ + "transaction: expected %x, got %x", + expectedSerializedTx, tx.Bytes()) + } +} + +func TestMaybeFinalizeAll(t *testing.T) { + // The following data is from a 3rd transaction from Core, + // using 3 inputs, all p2wkh. + imported := "cHNidP8BAKQCAAAAAzJyXH13IqBFvvZ7y1VSgUgkMvMoPgP5CfFNqsjQexKQAQAAAAD/////fMdLydu5bsoiHN9cFSaBL0Qnq2KLSKx0RA4b938CAgQAAAAAAP/////yKNgfsDAHr/zFz8R9k8EFI26allfg9DdE8Gzj6tGlegEAAAAA/////wHw9E0OAAAAABYAFDnPCRduiEWmmSc1j30SJ8k9u7PHAAAAAAAAAAAA" + psbt1, err := NewFromRawBytes(bytes.NewReader([]byte(imported)), true) + if err != nil { + t.Fatalf("Failed to parse PSBT: %v", err) + } + + // update with the first input's utxo, taken from its funding + // transaction + fundingTxInput1, err := hex.DecodeString("020000000001017b260536a3c17aee49c41a9b36fdf01a418e0c04df06fbabcb0d4f590b95d1750100000017160014af82cd4409241b1de892726324bd780e3b5cd8aafeffffff02a85f9800000000001600149d21f8b306ddfd4dd035080689e88b4c3471e3cc801d2c0400000000160014d97ccd3dfb60820d7d33d862371ca5a73039bd560247304402201a1d2fdb5a7190b7fa59907769f0fc9c91fd3b34f6424acf5868a8ac21ec287102200a59b9d076ecf98c88f2196ed2be0aafff4966ead754041182fff5f92115a783012103604ffd31dc71db2e32c20f09eafe6353cd7515d3648aff829bb4879b553e30629a000000") + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + fundingTxInput2, err := hex.DecodeString("020000000001019c27b886e420fcadb077706b0933efa8bb53e3a250c3ec45cfdba5e05e233f360100000000feffffff0200b4c404000000001600140853f50c7d2d5d2af326a75efdbc83b62551e89afce31c0d000000001600142d6936c082c35607ec3bdb334a932d928150b75802473044022000d962f5e5e6425f9de21da7ac65b4fd8af8f6bfbd33c7ba022827c73866b477022034c59935c1ea10b5ba335d93f55a200c2588ec6058b8c7aedd10d5cbc4654f99012102c30e9f0cd98f6a805464d6b8a326b5679b6c3262934341855ee0436eaedfd2869a000000") + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + fundingTxInput3, err := hex.DecodeString("02000000012bf4331bb95df4eadb14f7a28db3fecdc5e87f08c29c2332b66338dd606699f60000000048473044022075ed43f508528da47673550a785702e9a93eca84a11faea91c4e9c66fcab3c9e022054a37610bd40b12263a5933188f062b718e007f290cecde2b6e41da3e1ebbddf01feffffff020c99a8240100000016001483bd916985726094d6d1c5b969722da580b5966a804a5d05000000001600140a2ee13a6696d75006af5e8a026ea49316087dae9a000000") + if err != nil { + t.Fatalf("Unable to decode hex: %v", err) + } + + psbtupdater1 := Updater{Upsbt: psbt1} + tx := wire.NewMsgTx(2) + err = tx.Deserialize(bytes.NewReader(fundingTxInput1)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + txFund1Out := tx.TxOut[1] + psbtupdater1.AddInWitnessUtxo(txFund1Out, 0) + + tx = wire.NewMsgTx(2) + err = tx.Deserialize(bytes.NewReader(fundingTxInput2)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + txFund2Out := tx.TxOut[0] + psbtupdater1.AddInWitnessUtxo(txFund2Out, 1) + + tx = wire.NewMsgTx(2) + err = tx.Deserialize(bytes.NewReader(fundingTxInput3)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + txFund3Out := tx.TxOut[1] + psbtupdater1.AddInWitnessUtxo(txFund3Out, 2) + + // To be ready for finalization, we need to have partial signature + // fields for each input + sig1, _ := hex.DecodeString("30440220027605ee8015970baf02a72652967a543e1b29a6882d799738ed1baee508822702203818a2f1b9770c46a473f47ad7ae90bcc129a5d047f00fae354c80197a7cf50601") + pub1, _ := hex.DecodeString("03235fc1f9dc8bbf6fa3df35dfeb0dd486f2d488f139579885eb684510f004f6c1") + sig2, _ := hex.DecodeString("304402206f5aea4621696610de48736b95a89b1d3a434a4e536d9aae65e039c477cf4c7202203b27a18b0f63be7d3bbf5be1bc2306a7ec8c2da12c2820ff07b73c7f3f1d4d7301") + pub2, _ := hex.DecodeString("022011b496f0603a268b55a781c7be0c3849f605f09cb2e917ed44288b8144a752") + sig3, _ := hex.DecodeString("3044022036dbc6f8f85a856e7803cbbcf0a97b7a74806fc592e92d7c06826f911610b98e0220111d43c4b20f756581791334d9c5cbb1a9c07558f28404cabf01c782897ad50501") + pub3, _ := hex.DecodeString("0381772a80c69e275e20d7f014555b13031e9cacf1c54a44a67ab2bc7eba64f227") + res, err := psbtupdater1.Sign(0, sig1, pub1, nil, nil) + if err != nil || res != 0 { + t.Fatalf("Failed to add partial signature for input 0: %v %v", err, res) + } + res, err = psbtupdater1.Sign(1, sig2, pub2, nil, nil) + if err != nil || res != 0 { + t.Fatalf("Failed to add partial signature for input 1: %v %v", err, res) + } + + // Not ready for finalize all, check it fails: + err = MaybeFinalizeAll(psbt1) + if err != ErrNotFinalizable { + t.Fatalf("Expected finalization failure, got: %v", err) + } + + res, err = psbtupdater1.Sign(2, sig3, pub3, nil, nil) + + // Since this input is now finalizable and is p2wkh only, we can do + // all at once: + err = MaybeFinalizeAll(psbt1) + if err != nil { + t.Fatalf("Failed to finalize PSBT: %v", err) + } + if !psbt1.IsComplete() { + t.Fatalf("PSBT was finalized but not marked complete") + } + +} + +func TestFromUnsigned(t *testing.T) { + serTx, err := hex.DecodeString("00000000000101e165f072311e71825b47a4797221d7ae56d4b40b7707c540049aee43302448a40000000000feffffff0212f1126a0000000017a9143e836801b2b15aa193449d815c62d6c4b6227c898780778e060000000017a914ba4bdb0b07d67bc60f59c1f4fe54170565254974870000000000") + if err != nil { + t.Fatalf("Error: %v", err) + } + tx := wire.NewMsgTx(2) + err = tx.Deserialize(bytes.NewReader(serTx)) + if err != nil { + t.Fatalf("Error: %v", err) + } + psbt1, err := NewFromUnsignedTx(tx) + if err != nil { + t.Fatalf("Error: %v", err) + } + encoded, err := psbt1.B64Encode() + if err != nil { + t.Fatalf("Unable to B64Encode Psbt: %v", err) + } + + // Compare with output of Core: + fromCoreB64 := "cHNidP8BAHMAAAAAAeFl8HIxHnGCW0ekeXIh165W1LQLdwfFQASa7kMwJEikAAAAAAD+////AhLxEmoAAAAAF6kUPoNoAbKxWqGTRJ2BXGLWxLYifImHgHeOBgAAAAAXqRS6S9sLB9Z7xg9ZwfT+VBcFZSVJdIcAAAAAAAAAAA==" + if encoded != fromCoreB64 { + t.Fatalf("Got incorrect b64: %v", encoded) + } + _, err = NewFromRawBytes(bytes.NewReader([]byte(fromCoreB64)), true) + if err != nil { + t.Fatalf("Error: %v", err) + } +} + +func TestNonWitnessToWitness(t *testing.T) { + // We'll start with a PSBT produced by Core for which + // the first input is signed and we'll provided the signatures for + // the other three inputs; they are p2sh-p2wkh, p2wkh and legacy + // respectively. + // In each case we'll *first* attach the NonWitnessUtxo field, + // and then call sign; in the first two but not the third case, the + // NonWitnessUtxo will automatically be replaced with the WitnessUtxo. + // Finally we'll check that the fully finalized PSBT produced matches + // the one produced by Core for the same keys. + + psbt1B64 := "cHNidP8BAM4CAAAABHtBMXY+SX95xidmWJP67CTQ02FPUpbNhIxNplAdlvk+AQAAAAD/////G2mt4bX7+sVi1jdbuBa5Q/xsJdgzFCgdHHSZq3ewK6YAAAAAAP/////NrbZb7GzfAg4kOqFWAIbXabq4cAvtVGv+eecIIv1KggEAAAAA/////73s9ifprgErlaONH1rgpNs3l6+t+mz2XGTHsTVWCem/AQAAAAD/////AfAmclMAAAAAF6kUQwsEC5nzbdY5meON2ZQ2thmeFgOHAAAAAAABASAAZc0dAAAAABepFPAv3VTMu5+4WN+/HIji6kG9RpzKhwEHFxYAFLN3PqXSyIHWKqm4ah5m9erc/3OoAQhrAkcwRAIgH7kzGO2iskfCvX0dgkDuzfqJ7tAu7KUZOeykTkJ1SYkCIBv4QRZK1hLz45D0gs+Lz93OE4s37lkPVE+SlXZtazWEASEC3jaf19MMferBn0Bn5lxXJGOqoqmfSvnHclQvB5gJ3nEAAAAAAQAWABTB+Qcq6iqdSvvc6959kd7XHrhYFgA=" + nwutxo1ser, _ := hex.DecodeString("02000000017f7baa6b7377541c4aca372d2dce8e1098ba44aa8379b7ea87644ef27e08ec240000000048473044022072e3b94c33cb5128518cd3903cc0ca19e8c234ac6d462e01ae2bb1da7768ed7d0220167d7ad89f6e1bbb3b866ae6fc2f67b5e7d51eb4f33f7bfe3f4b2673856b815001feffffff0200c2eb0b0000000017a9142dd25c78db2e2e09376eab9cb342e1b03005abe487e4ab953e0000000017a914120b8ca3fb4c7f852e30d4e3714fb64027a0b4c38721020000") + nwutxo2ser, _ := hex.DecodeString("0200000001f51b0bb5d945dd5532448a4d3fb88134d0bd90493813515f9c2ddb1fa15b9ba60000000048473044022047d83caf88d398245c006374bfa9f27ae968f5f51d640cacd5a214ed2cba397a02204519b26035496855f574a72b73bdcfa46d53995faf64c8f0ab394b628cc5383901feffffff020ccb9f3800000000160014e13544a3c718faa6c5ad7089a6660383c12b072700a3e11100000000160014a5439b477c116b79bd4c7c5131f3e58d54f27bb721020000") + nwutxo3ser, _ := hex.DecodeString("0200000001eb452f0fc9a8c39edb79f7174763f3cb25dc56db455926e411719a115ef16509000000004847304402205aa80cc615eb4b3f6e89696db4eadd192581a6c46f5c09807d3d98ece1d77355022025007e58c1992a1e5d877ee324bfe0a65db26d29f80941cfa277ac3efbcad2a701feffffff02bce9a9320000000017a9141590e852ac66eb8798afeb2a5ed67c568a2d6561870084d717000000001976a914a57ea05eacf94900d5fb92bccd273cfdb90af36f88ac21020000") + + nwutxo1 := wire.NewMsgTx(2) + err := nwutxo1.Deserialize(bytes.NewReader(nwutxo1ser)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + nwutxo2 := wire.NewMsgTx(2) + err = nwutxo2.Deserialize(bytes.NewReader(nwutxo2ser)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + nwutxo3 := wire.NewMsgTx(2) + err = nwutxo3.Deserialize(bytes.NewReader(nwutxo3ser)) + if err != nil { + t.Fatalf("Error deserializing transaction: %v", err) + } + + // import the PSBT + psbt1, err := NewFromRawBytes(bytes.NewReader([]byte(psbt1B64)), true) + if err != nil { + t.Fatalf("Failed to create PSBT: %v", err) + } + + // check that we recognize the finality of the first input + if !isFinalized(psbt1, 0) { + t.Fatalf("First input incorrectly read as not finalized.") + } + + // Add NonWitnessUtxo fields for each of the other three inputs + u := Updater{Upsbt: psbt1} + u.AddInNonWitnessUtxo(nwutxo1, 1) + u.AddInNonWitnessUtxo(nwutxo2, 2) + u.AddInNonWitnessUtxo(nwutxo3, 3) + + // Signatures for each of those inputs were created with Core: + sig1, _ := hex.DecodeString("304402205676877e6162ce40a49ee5a74443cdc1e7915637c42da7b872c2ec2298fd371b02203c1d4a05b1e2a7a588d9ec9b8d4892d2cd59bebe0e777483477a0ec692ebbe6d01") + pub1, _ := hex.DecodeString("02534f23cb88a048b649672967263bd7570312d5d31d066fa7b303970010a77b2b") + redeemScript1, _ := hex.DecodeString("00142412be29368c0260cb841eecd9b59d7e01174aa1") + + sig2, _ := hex.DecodeString("3044022065d0a349709b8d8043cfd644cf6c196c1f601a22e1b3fdfbf8c0cc2a80fe2f1702207c87d36b666a8862e81ec5df288707f517d2f35ea1548feb82019de2c8de90f701") + pub2, _ := hex.DecodeString("0257d88eaf1e79b72ea0a33ae89b57dae95ea68499bdc6770257e010ab899f0abb") + + sig3, _ := hex.DecodeString("30440220290abcaacbd759c4f989762a9ee3468a9231788aab8f50bf65955d8597d8dd3602204d7e394f4419dc5392c6edba6945837458dd750a030ac67a746231903a8eb7db01") + pub3, _ := hex.DecodeString("0388025f50bb51c0469421ed13381f22f9d46a070ec2837e055c49c5876f0d0968") + + // Add the signatures and any scripts needed to the inputs + res, err := u.Sign(1, sig1, pub1, redeemScript1, nil) + if res != 0 || err != nil { + t.Fatalf("Failed to sign at index %v res %v err %v", 1, res, err) + } + res, err = u.Sign(2, sig2, pub2, nil, nil) + if res != 0 || err != nil { + t.Fatalf("Failed to sign at index %v res %v err %v", 2, res, err) + } + res, err = u.Sign(3, sig3, pub3, nil, nil) + if res != 0 || err != nil { + t.Fatalf("Failed to sign at index %v res %v err %v", 3, res, err) + } + + // Attempt to finalize the rest of the transaction + _, err = MaybeFinalize(psbt1, 1) + if err != nil { + t.Fatalf("Failed to finalize input 1 %v", err) + } + _, err = MaybeFinalize(psbt1, 2) + if err != nil { + t.Fatalf("Failed to finalize input 2 %v", err) + } + _, err = MaybeFinalize(psbt1, 3) + if err != nil { + t.Fatalf("Failed to finalize input 3 %v", err) + } + + // Finally we can check whether both the B64 encoding of the PSBT, + // and the final network serialized signed transaction, that we generated + // with Core using the 2 wallets, matches what this code produces: + expectedFinalizedPsbt := "cHNidP8BAM4CAAAABHtBMXY+SX95xidmWJP67CTQ02FPUpbNhIxNplAdlvk+AQAAAAD/////G2mt4bX7+sVi1jdbuBa5Q/xsJdgzFCgdHHSZq3ewK6YAAAAAAP/////NrbZb7GzfAg4kOqFWAIbXabq4cAvtVGv+eecIIv1KggEAAAAA/////73s9ifprgErlaONH1rgpNs3l6+t+mz2XGTHsTVWCem/AQAAAAD/////AfAmclMAAAAAF6kUQwsEC5nzbdY5meON2ZQ2thmeFgOHAAAAAAABASAAZc0dAAAAABepFPAv3VTMu5+4WN+/HIji6kG9RpzKhwEHFxYAFLN3PqXSyIHWKqm4ah5m9erc/3OoAQhrAkcwRAIgH7kzGO2iskfCvX0dgkDuzfqJ7tAu7KUZOeykTkJ1SYkCIBv4QRZK1hLz45D0gs+Lz93OE4s37lkPVE+SlXZtazWEASEC3jaf19MMferBn0Bn5lxXJGOqoqmfSvnHclQvB5gJ3nEAAQEgAMLrCwAAAAAXqRQt0lx42y4uCTduq5yzQuGwMAWr5IcBBxcWABQkEr4pNowCYMuEHuzZtZ1+ARdKoQEIawJHMEQCIFZ2h35hYs5ApJ7lp0RDzcHnkVY3xC2nuHLC7CKY/TcbAiA8HUoFseKnpYjZ7JuNSJLSzVm+vg53dINHeg7Gkuu+bQEhAlNPI8uIoEi2SWcpZyY711cDEtXTHQZvp7MDlwAQp3srAAEBHwCj4REAAAAAFgAUpUObR3wRa3m9THxRMfPljVTye7cBCGsCRzBEAiBl0KNJcJuNgEPP1kTPbBlsH2AaIuGz/fv4wMwqgP4vFwIgfIfTa2ZqiGLoHsXfKIcH9RfS816hVI/rggGd4sjekPcBIQJX2I6vHnm3LqCjOuibV9rpXqaEmb3GdwJX4BCriZ8KuwABAL0CAAAAAetFLw/JqMOe23n3F0dj88sl3FbbRVkm5BFxmhFe8WUJAAAAAEhHMEQCIFqoDMYV60s/bolpbbTq3RklgabEb1wJgH09mOzh13NVAiAlAH5YwZkqHl2HfuMkv+CmXbJtKfgJQc+id6w++8rSpwH+////ArzpqTIAAAAAF6kUFZDoUqxm64eYr+sqXtZ8VootZWGHAITXFwAAAAAZdqkUpX6gXqz5SQDV+5K8zSc8/bkK82+IrCECAAABB2pHMEQCICkKvKrL11nE+Yl2Kp7jRoqSMXiKq49Qv2WVXYWX2N02AiBNfjlPRBncU5LG7bppRYN0WN11CgMKxnp0YjGQOo632wEhA4gCX1C7UcBGlCHtEzgfIvnUagcOwoN+BVxJxYdvDQloAAEAFgAUwfkHKuoqnUr73OvefZHe1x64WBYA" + calculatedPsbt, err := u.Upsbt.B64Encode() + if err != nil { + t.Fatalf("Failed to base64 encode") + } + if expectedFinalizedPsbt != calculatedPsbt { + t.Fatalf("Failed to generate correct PSBT") + } + + expectedNetworkSer, _ := hex.DecodeString("020000000001047b4131763e497f79c627665893faec24d0d3614f5296cd848c4da6501d96f93e0100000017160014b3773ea5d2c881d62aa9b86a1e66f5eadcff73a8ffffffff1b69ade1b5fbfac562d6375bb816b943fc6c25d83314281d1c7499ab77b02ba600000000171600142412be29368c0260cb841eecd9b59d7e01174aa1ffffffffcdadb65bec6cdf020e243aa1560086d769bab8700bed546bfe79e70822fd4a820100000000ffffffffbdecf627e9ae012b95a38d1f5ae0a4db3797afadfa6cf65c64c7b1355609e9bf010000006a4730440220290abcaacbd759c4f989762a9ee3468a9231788aab8f50bf65955d8597d8dd3602204d7e394f4419dc5392c6edba6945837458dd750a030ac67a746231903a8eb7db01210388025f50bb51c0469421ed13381f22f9d46a070ec2837e055c49c5876f0d0968ffffffff01f02672530000000017a914430b040b99f36dd63999e38dd99436b6199e1603870247304402201fb93318eda2b247c2bd7d1d8240eecdfa89eed02eeca51939eca44e4275498902201bf841164ad612f3e390f482cf8bcfddce138b37ee590f544f9295766d6b3584012102de369fd7d30c7deac19f4067e65c572463aaa2a99f4af9c772542f079809de710247304402205676877e6162ce40a49ee5a74443cdc1e7915637c42da7b872c2ec2298fd371b02203c1d4a05b1e2a7a588d9ec9b8d4892d2cd59bebe0e777483477a0ec692ebbe6d012102534f23cb88a048b649672967263bd7570312d5d31d066fa7b303970010a77b2b02473044022065d0a349709b8d8043cfd644cf6c196c1f601a22e1b3fdfbf8c0cc2a80fe2f1702207c87d36b666a8862e81ec5df288707f517d2f35ea1548feb82019de2c8de90f701210257d88eaf1e79b72ea0a33ae89b57dae95ea68499bdc6770257e010ab899f0abb0000000000") + tx, err := Extract(psbt1) + if err != nil { + t.Fatalf("Failed to extract: %v", err) + } + var b bytes.Buffer + if err := tx.Serialize(&b); err != nil { + t.Fatalf("unable to encode tx: %v", err) + } + if !bytes.Equal(expectedNetworkSer, b.Bytes()) { + t.Fatalf("Expected serialized transaction was not produced: %x", b.Bytes()) + } +} + +// TestEmptyInputSerialization tests the special serialization case for a wire +// transaction that has no inputs. +func TestEmptyInputSerialization(t *testing.T) { + // Create and serialize a new, empty PSBT. The wire package will assume + // it's a non-witness transaction, as there are no inputs. + psbt, err := New(nil, nil, 2, 0, nil) + if err != nil { + t.Fatalf("failed to create empty PSBT: %v", err) + } + var buf bytes.Buffer + err = psbt.Serialize(&buf) + if err != nil { + t.Fatalf("failed to serialize empty PSBT: %v", err) + } + + // Try to deserialize the empty transaction again. The wire package will + // assume it's a witness transaction because of the special case where + // there are no inputs. This assumption is wrong and the first attempt + // will fail. But a workaround should try again to deserialize the TX + // with the non-witness format. + psbt2, err := NewFromRawBytes(&buf, false) + if err != nil { + t.Fatalf("failed to deserialize empty PSBT: %v", err) + } + if len(psbt2.UnsignedTx.TxIn) > 0 || len(psbt2.UnsignedTx.TxOut) > 0 { + t.Fatalf("deserialized transaction not empty") + } +} + +// TestWitnessForNonWitnessUtxo makes sure that a packet that only has a non- +// witness UTXO set can still be signed correctly by adding witness data. This +// is to make sure that PSBTs following the CVE-2020-14199 bugfix are not +// rejected. See https://github.com/bitcoin/bitcoin/pull/19215. +func TestWitnessForNonWitnessUtxo(t *testing.T) { + // Our witness UTXO is index 1 of this raw transaction from the test + // vectors. + prevTxRaw, _ := hex.DecodeString("0200000000010158e87a21b56daf0c23be8e7070456c336f7cbaa5c8757924f545887bb2abdd7501000000171600145f275f436b09a8cc9a2eb2a2f528485c68a56323feffffff02d8231f1b0100000017a914aed962d6654f9a2b36608eb9d64d2b260db4f1118700c2eb0b0000000017a914b7f5faf40e3d40a5a459b1db3535f2b72fa921e88702483045022100a22edcc6e5bc511af4cc4ae0de0fcd75c7e04d8c1c3a8aa9d820ed4b967384ec02200642963597b9b1bc22c75e9f3e117284a962188bf5e8a74c895089046a20ad770121035509a48eb623e10aace8bfd0212fdb8a8e5af3c94b0b133b95e114cab89e4f7965000000") + prevTx := wire.NewMsgTx(2) + err := prevTx.Deserialize(bytes.NewReader(prevTxRaw)) + if err != nil { + t.Fatalf("failed to deserialize previous TX: %v", err) + } + + // First create a packet that contains one input and one output. + outPkScript, _ := hex.DecodeString(CUTestHexData["scriptPubkey1"]) + packet := &Packet{ + UnsignedTx: &wire.MsgTx{ + Version: 2, + LockTime: 0, + TxIn: []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{ + Hash: prevTx.TxHash(), + Index: 1, + }, + }}, + TxOut: []*wire.TxOut{{ + PkScript: outPkScript, + Value: 1.9 * btcutil.SatoshiPerBitcoin, + }}, + }, + Inputs: []PInput{{}}, + Outputs: []POutput{{}}, + } + + // Create an updater for the packet. This also performs a sanity check. + updater, err := NewUpdater(packet) + if err != nil { + t.Fatalf("failed to sanity check raw packet: %v", err) + } + + // Now add our witness UTXO to the input. But because hardware wallets + // that are patched against CVE-2020-14199 require the full non-witness + // UTXO to be set for all inputs, we do what Core does and add the full + // transaction in the NonWitnessUtxo instead of just the outpoint in + // WitnessUtxo. + err = updater.AddInNonWitnessUtxo(prevTx, 0) + if err != nil { + t.Fatalf("failed to update non-witness UTXO: %v", err) + } + + // Then add the redeem scripts and witness scripts. + redeemScript, _ := hex.DecodeString(CUTestHexData["Input2RedeemScript"]) + err = updater.AddInRedeemScript(redeemScript, 0) + if err != nil { + t.Fatalf("failed to update redeem script: %v", err) + } + witnessScript, _ := hex.DecodeString(CUTestHexData["Input2WitnessScript"]) + err = updater.AddInWitnessScript(witnessScript, 0) + if err != nil { + t.Fatalf("failed to update redeem script: %v", err) + } + + // Add the first of the two partial signatures. + sig1, _ := hex.DecodeString("3044022062eb7a556107a7c73f45ac4ab5a1dddf6f7075fb1275969a7f383efff784bcb202200c05dbb7470dbf2f08557dd356c7325c1ed30913e996cd3840945db12228da5f01") + pub1, _ := hex.DecodeString("03089dc10c7ac6db54f91329af617333db388cead0c231f723379d1b99030b02dc") + res, err := updater.Sign(0, sig1, pub1, nil, nil) + if err != nil { + t.Fatalf("failed to sign with pubkey 1: %v", err) + } + if res != SignSuccesful { + t.Fatalf("signing was not successful, got result %v", res) + } + + // Check that the finalization procedure fails here due to not + // meeting the multisig policy + success, err := MaybeFinalize(packet, 0) + if success { + t.Fatalf("Incorrectly succeeded in finalizing without sigs") + } + if err != ErrUnsupportedScriptType { + t.Fatalf("Got unexpected error type: %v", err) + } + + // Add the second partial signature. + sig2, _ := hex.DecodeString("3044022065f45ba5998b59a27ffe1a7bed016af1f1f90d54b3aa8f7450aa5f56a25103bd02207f724703ad1edb96680b284b56d4ffcb88f7fb759eabbe08aa30f29b851383d201") + pub2, _ := hex.DecodeString("023add904f3d6dcf59ddb906b0dee23529b7ffb9ed50e5e86151926860221f0e73") + res, err = updater.Sign(0, sig2, pub2, nil, nil) + if err != nil { + t.Fatalf("failed to sign with pubkey 2: %v", err) + } + if res != SignSuccesful { + t.Fatalf("signing was not successful, got result %v", res) + } + + // Finally make sure we can finalize the packet and extract the raw TX. + err = MaybeFinalizeAll(packet) + if err != nil { + t.Fatalf("error finalizing PSBT: %v", err) + } + _, err = Extract(packet) + if err != nil { + t.Fatalf("unable to extract funding TX: %v", err) + } +} diff --git a/btcutil/psbt/signer.go b/btcutil/psbt/signer.go new file mode 100644 index 0000000000..588265317f --- /dev/null +++ b/btcutil/psbt/signer.go @@ -0,0 +1,155 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package psbt + +// signer encapsulates the role 'Signer' as specified in BIP174; it controls +// the insertion of signatures; the Sign() function will attempt to insert +// signatures using Updater.addPartialSignature, after first ensuring the Psbt +// is in the correct state. + +import ( + "github.com/btcsuite/btcd/txscript" +) + +// SignOutcome is a enum-like value that expresses the outcome of a call to the +// Sign method. +type SignOutcome int + +const ( + // SignSuccesful indicates that the partial signature was successfully + // attached. + SignSuccesful = 0 + + // SignFinalized indicates that this input is already finalized, so the provided + // signature was *not* attached + SignFinalized = 1 + + // SignInvalid indicates that the provided signature data was not valid. In this case + // an error will also be returned. + SignInvalid = -1 +) + +// Sign allows the caller to sign a PSBT at a particular input; they +// must provide a signature and a pubkey, both as byte slices; they can also +// optionally provide both witnessScript and/or redeemScript, otherwise these +// arguments must be set as nil (and in that case, they must already be present +// in the PSBT if required for signing to succeed). +// +// This serves as a wrapper around Updater.addPartialSignature; it ensures that +// the redeemScript and witnessScript are updated as needed (note that the +// Updater is allowed to add redeemScripts and witnessScripts independently, +// before signing), and ensures that the right form of utxo field +// (NonWitnessUtxo or WitnessUtxo) is included in the input so that signature +// insertion (and then finalization) can take place. +func (u *Updater) Sign(inIndex int, sig []byte, pubKey []byte, + redeemScript []byte, witnessScript []byte) (SignOutcome, error) { + + if isFinalized(u.Upsbt, inIndex) { + return SignFinalized, nil + } + + // Add the witnessScript to the PSBT in preparation. If it already + // exists, it will be overwritten. + if witnessScript != nil { + err := u.AddInWitnessScript(witnessScript, inIndex) + if err != nil { + return SignInvalid, err + } + } + + // Add the redeemScript to the PSBT in preparation. If it already + // exists, it will be overwritten. + if redeemScript != nil { + err := u.AddInRedeemScript(redeemScript, inIndex) + if err != nil { + return SignInvalid, err + } + } + + // At this point, the PSBT must have the requisite witnessScript or + // redeemScript fields for signing to succeed. + // + // Case 1: if witnessScript is present, it must be of type witness; + // if not, signature insertion will of course fail. + switch { + case u.Upsbt.Inputs[inIndex].WitnessScript != nil: + if u.Upsbt.Inputs[inIndex].WitnessUtxo == nil { + err := nonWitnessToWitness(u.Upsbt, inIndex) + if err != nil { + return SignInvalid, err + } + } + + err := u.addPartialSignature(inIndex, sig, pubKey) + if err != nil { + return SignInvalid, err + } + + // Case 2: no witness script, only redeem script; can be legacy p2sh or + // p2sh-wrapped p2wkh. + case u.Upsbt.Inputs[inIndex].RedeemScript != nil: + // We only need to decide if the input is witness, and we don't + // rely on the witnessutxo/nonwitnessutxo in the PSBT, instead + // we check the redeemScript content. + if txscript.IsWitnessProgram(redeemScript) { + if u.Upsbt.Inputs[inIndex].WitnessUtxo == nil { + err := nonWitnessToWitness(u.Upsbt, inIndex) + if err != nil { + return SignInvalid, err + } + } + } + + // If it is not a valid witness program, we here assume that + // the provided WitnessUtxo/NonWitnessUtxo field was correct. + err := u.addPartialSignature(inIndex, sig, pubKey) + if err != nil { + return SignInvalid, err + } + + // Case 3: Neither provided only works for native p2wkh, or non-segwit + // non-p2sh. To check if it's segwit, check the scriptPubKey of the + // output. + default: + if u.Upsbt.Inputs[inIndex].WitnessUtxo == nil { + outIndex := u.Upsbt.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Index + script := u.Upsbt.Inputs[inIndex].NonWitnessUtxo.TxOut[outIndex].PkScript + + if txscript.IsWitnessProgram(script) { + err := nonWitnessToWitness(u.Upsbt, inIndex) + if err != nil { + return SignInvalid, err + } + } + } + + err := u.addPartialSignature(inIndex, sig, pubKey) + if err != nil { + return SignInvalid, err + } + } + + return SignSuccesful, nil +} + +// nonWitnessToWitness extracts the TxOut from the existing NonWitnessUtxo +// field in the given PSBT input and sets it as type witness by replacing the +// NonWitnessUtxo field with a WitnessUtxo field. See +// https://github.com/bitcoin/bitcoin/pull/14197. +func nonWitnessToWitness(p *Packet, inIndex int) error { + outIndex := p.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Index + txout := p.Inputs[inIndex].NonWitnessUtxo.TxOut[outIndex] + + // TODO(guggero): For segwit v1, we'll want to remove the NonWitnessUtxo + // from the packet. For segwit v0 it is unsafe to only rely on the + // witness UTXO. See https://github.com/bitcoin/bitcoin/pull/19215. + // p.Inputs[inIndex].NonWitnessUtxo = nil + + u := Updater{ + Upsbt: p, + } + + return u.AddInWitnessUtxo(txout, inIndex) +} diff --git a/btcutil/psbt/sort.go b/btcutil/psbt/sort.go new file mode 100644 index 0000000000..2232d68feb --- /dev/null +++ b/btcutil/psbt/sort.go @@ -0,0 +1,102 @@ +package psbt + +import ( + "bytes" + "sort" + + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// InPlaceSort modifies the passed packet's wire TX inputs and outputs to be +// sorted based on BIP 69. The sorting happens in a way that the packet's +// partial inputs and outputs are also modified to match the sorted TxIn and +// TxOuts of the wire transaction. +// +// WARNING: This function must NOT be called with packages that already contain +// (partial) witness data since it will mutate the transaction if it's not +// already sorted. This can cause issues if you mutate a tx in a block, for +// example, which would invalidate the block. It could also cause cached hashes, +// such as in a btcutil.Tx to become invalidated. +// +// The function should only be used if the caller is creating the transaction or +// is otherwise 100% positive mutating will not cause adverse affects due to +// other dependencies. +func InPlaceSort(packet *Packet) error { + // To make sure we don't run into any nil pointers or array index + // violations during sorting, do a very basic sanity check first. + err := VerifyInputOutputLen(packet, false, false) + if err != nil { + return err + } + + sort.Sort(&sortableInputs{p: packet}) + sort.Sort(&sortableOutputs{p: packet}) + + return nil +} + +// sortableInputs is a simple wrapper around a packet that implements the +// sort.Interface for sorting the wire and partial inputs of a packet. +type sortableInputs struct { + p *Packet +} + +// sortableOutputs is a simple wrapper around a packet that implements the +// sort.Interface for sorting the wire and partial outputs of a packet. +type sortableOutputs struct { + p *Packet +} + +// For sortableInputs and sortableOutputs, three functions are needed to make +// them sortable with sort.Sort() -- Len, Less, and Swap. +// Len and Swap are trivial. Less is BIP 69 specific. +func (s *sortableInputs) Len() int { return len(s.p.UnsignedTx.TxIn) } +func (s sortableOutputs) Len() int { return len(s.p.UnsignedTx.TxOut) } + +// Swap swaps two inputs. +func (s *sortableInputs) Swap(i, j int) { + tx := s.p.UnsignedTx + tx.TxIn[i], tx.TxIn[j] = tx.TxIn[j], tx.TxIn[i] + s.p.Inputs[i], s.p.Inputs[j] = s.p.Inputs[j], s.p.Inputs[i] +} + +// Swap swaps two outputs. +func (s *sortableOutputs) Swap(i, j int) { + tx := s.p.UnsignedTx + tx.TxOut[i], tx.TxOut[j] = tx.TxOut[j], tx.TxOut[i] + s.p.Outputs[i], s.p.Outputs[j] = s.p.Outputs[j], s.p.Outputs[i] +} + +// Less is the input comparison function. First sort based on input hash +// (reversed / rpc-style), then index. +func (s *sortableInputs) Less(i, j int) bool { + ins := s.p.UnsignedTx.TxIn + + // Input hashes are the same, so compare the index. + ihash := ins[i].PreviousOutPoint.Hash + jhash := ins[j].PreviousOutPoint.Hash + if ihash == jhash { + return ins[i].PreviousOutPoint.Index < + ins[j].PreviousOutPoint.Index + } + + // At this point, the hashes are not equal, so reverse them to + // big-endian and return the result of the comparison. + const hashSize = chainhash.HashSize + for b := 0; b < hashSize/2; b++ { + ihash[b], ihash[hashSize-1-b] = ihash[hashSize-1-b], ihash[b] + jhash[b], jhash[hashSize-1-b] = jhash[hashSize-1-b], jhash[b] + } + return bytes.Compare(ihash[:], jhash[:]) == -1 +} + +// Less is the output comparison function. First sort based on amount (smallest +// first), then PkScript. +func (s *sortableOutputs) Less(i, j int) bool { + outs := s.p.UnsignedTx.TxOut + + if outs[i].Value == outs[j].Value { + return bytes.Compare(outs[i].PkScript, outs[j].PkScript) < 0 + } + return outs[i].Value < outs[j].Value +} diff --git a/btcutil/psbt/sort_test.go b/btcutil/psbt/sort_test.go new file mode 100644 index 0000000000..3dee0f48d8 --- /dev/null +++ b/btcutil/psbt/sort_test.go @@ -0,0 +1,167 @@ +package psbt + +import ( + "reflect" + "testing" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +func TestInPlaceSort(t *testing.T) { + testCases := []struct { + name string + packet *Packet + expectedTxIn []*wire.TxIn + expectedTxOut []*wire.TxOut + expectedPIn []PInput + expectedPOut []POutput + expectErr bool + }{{ + name: "packet nil", + packet: nil, + expectErr: true, + }, { + name: "no inputs or outputs", + packet: &Packet{UnsignedTx: &wire.MsgTx{}}, + expectErr: false, + }, { + name: "inputs only", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{ + TxIn: []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{99, 88}, + Index: 7, + }, + }, { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{77, 88}, + Index: 12, + }, + }, { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{77, 88}, + Index: 7, + }, + }}, + }, + // Abuse the SighashType as an index to make sure the + // partial inputs are also sorted together with the wire + // inputs. + Inputs: []PInput{{ + SighashType: 0, + }, { + SighashType: 1, + }, { + SighashType: 2, + }}, + }, + expectedTxIn: []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{77, 88}, + Index: 7, + }, + }, { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{77, 88}, + Index: 12, + }, + }, { + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{99, 88}, + Index: 7, + }, + }}, + expectedPIn: []PInput{{ + SighashType: 2, + }, { + SighashType: 1, + }, { + SighashType: 0, + }}, + expectErr: false, + }, { + name: "outputs only", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{ + TxOut: []*wire.TxOut{{ + PkScript: []byte{99, 88}, + Value: 7, + }, { + PkScript: []byte{77, 88}, + Value: 12, + }, { + PkScript: []byte{77, 88}, + Value: 7, + }}, + }, + // Abuse the RedeemScript as an index to make sure the + // partial inputs are also sorted together with the wire + // inputs. + Outputs: []POutput{{ + RedeemScript: []byte{0}, + }, { + RedeemScript: []byte{1}, + }, { + RedeemScript: []byte{2}, + }}, + }, + expectedTxOut: []*wire.TxOut{{ + PkScript: []byte{77, 88}, + Value: 7, + }, { + PkScript: []byte{99, 88}, + Value: 7, + }, { + PkScript: []byte{77, 88}, + Value: 12, + }}, + expectedPOut: []POutput{{ + RedeemScript: []byte{2}, + }, { + RedeemScript: []byte{0}, + }, { + RedeemScript: []byte{1}, + }}, + expectErr: false, + }} + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + p := tc.packet + err := InPlaceSort(p) + if (tc.expectErr && err == nil) || + (!tc.expectErr && err != nil) { + + t.Fatalf("got error '%v' but wanted it to be "+ + "nil: %v", err, tc.expectErr) + } + + // Don't continue on this special test case. + if p == nil { + return + } + + tx := p.UnsignedTx + if !reflect.DeepEqual(tx.TxIn, tc.expectedTxIn) { + t.Fatalf("unexpected txin, got %#v wanted %#v", + tx.TxIn, tc.expectedTxIn) + } + if !reflect.DeepEqual(tx.TxOut, tc.expectedTxOut) { + t.Fatalf("unexpected txout, got %#v wanted %#v", + tx.TxOut, tc.expectedTxOut) + } + + if !reflect.DeepEqual(p.Inputs, tc.expectedPIn) { + t.Fatalf("unexpected pin, got %#v wanted %#v", + p.Inputs, tc.expectedPIn) + } + if !reflect.DeepEqual(p.Outputs, tc.expectedPOut) { + t.Fatalf("unexpected pout, got %#v wanted %#v", + p.Inputs, tc.expectedPOut) + } + }) + } +} diff --git a/btcutil/psbt/taproot.go b/btcutil/psbt/taproot.go new file mode 100644 index 0000000000..4d0619ec43 --- /dev/null +++ b/btcutil/psbt/taproot.go @@ -0,0 +1,206 @@ +package psbt + +import ( + "bytes" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" +) + +const ( + // schnorrSigMinLength is the minimum length of a Schnorr signature + // which is 64 bytes. + schnorrSigMinLength = schnorr.SignatureSize + + // schnorrSigMaxLength is the maximum length of a Schnorr signature + // which is 64 bytes plus one byte for the appended sighash flag. + schnorrSigMaxLength = schnorrSigMinLength + 1 +) + +// TaprootScriptSpendSig encapsulates an individual Schnorr signature for a +// given public key and leaf hash. +type TaprootScriptSpendSig struct { + XOnlyPubKey []byte + LeafHash []byte + Signature []byte + SigHash txscript.SigHashType +} + +// checkValid checks that both the pubkey and the signature are valid. +func (s *TaprootScriptSpendSig) checkValid() bool { + return validateXOnlyPubkey(s.XOnlyPubKey) && + validateSchnorrSignature(s.Signature) +} + +// EqualKey returns true if this script spend signature's key data is the same +// as the given script spend signature. +func (s *TaprootScriptSpendSig) EqualKey(other *TaprootScriptSpendSig) bool { + return bytes.Equal(s.XOnlyPubKey, other.XOnlyPubKey) && + bytes.Equal(s.LeafHash, other.LeafHash) +} + +// SortBefore returns true if this script spend signature's key is +// lexicographically smaller than the given other script spend signature's key +// and should come first when being sorted. +func (s *TaprootScriptSpendSig) SortBefore(other *TaprootScriptSpendSig) bool { + return bytes.Compare(s.XOnlyPubKey, other.XOnlyPubKey) < 0 && + bytes.Compare(s.LeafHash, other.LeafHash) < 0 +} + +// TaprootTapLeafScript represents a single taproot leaf script that is +// identified by its control block. +type TaprootTapLeafScript struct { + ControlBlock []byte + Script []byte + LeafVersion txscript.TapscriptLeafVersion +} + +// checkValid checks that the control block is valid. +func (s *TaprootTapLeafScript) checkValid() bool { + return validateControlBlock(s.ControlBlock) +} + +// SortBefore returns true if this leaf script's key is lexicographically +// smaller than the given other leaf script's key and should come first when +// being sorted. +func (s *TaprootTapLeafScript) SortBefore(other *TaprootTapLeafScript) bool { + return bytes.Compare(s.ControlBlock, other.ControlBlock) < 0 +} + +// TaprootBip32Derivation encapsulates the data for the input and output +// taproot specific BIP-32 derivation key-value fields. +type TaprootBip32Derivation struct { + // XOnlyPubKey is the raw public key serialized in the x-only BIP-340 + // format. + XOnlyPubKey []byte + + // LeafHashes is a list of leaf hashes that the given public key is + // involved in. + LeafHashes [][]byte + + // MasterKeyFingerprint is the fingerprint of the master pubkey. + MasterKeyFingerprint uint32 + + // Bip32Path is the BIP 32 path with child index as a distinct integer. + Bip32Path []uint32 +} + +// SortBefore returns true if this derivation info's key is lexicographically +// smaller than the given other derivation info's key and should come first when +// being sorted. +func (s *TaprootBip32Derivation) SortBefore(other *TaprootBip32Derivation) bool { + return bytes.Compare(s.XOnlyPubKey, other.XOnlyPubKey) < 0 +} + +// readTaprootBip32Derivation deserializes a byte slice containing the Taproot +// BIP32 derivation info that consists of a list of leaf hashes as well as the +// normal BIP32 derivation info. +func readTaprootBip32Derivation(xOnlyPubKey, + value []byte) (*TaprootBip32Derivation, error) { + + // The taproot key BIP 32 derivation path is defined as: + // * <4 byte fingerprint> <32-bit uint>* + // So we get at least 5 bytes for the length and the 4 byte fingerprint. + if len(value) < 5 { + return nil, ErrInvalidPsbtFormat + } + + // The first element is the number of hashes that will follow. + reader := bytes.NewReader(value) + numHashes, err := wire.ReadVarInt(reader, 0) + if err != nil { + return nil, ErrInvalidPsbtFormat + } + + // A hash is 32 bytes in size, so we need at least numHashes*32 + 5 + // bytes to be present. + if len(value) < (int(numHashes)*32)+5 { + return nil, ErrInvalidPsbtFormat + } + + derivation := TaprootBip32Derivation{ + XOnlyPubKey: xOnlyPubKey, + LeafHashes: make([][]byte, int(numHashes)), + } + + for i := 0; i < int(numHashes); i++ { + derivation.LeafHashes[i] = make([]byte, 32) + n, err := reader.Read(derivation.LeafHashes[i]) + if err != nil || n != 32 { + return nil, ErrInvalidPsbtFormat + } + } + + // Extract the remaining bytes from the reader (we don't actually know + // how many bytes we read due to the compact size integer at the + // beginning). + var leftoverBuf bytes.Buffer + _, err = reader.WriteTo(&leftoverBuf) + if err != nil { + return nil, err + } + + // Read the BIP32 derivation info. + fingerprint, path, err := readBip32Derivation(leftoverBuf.Bytes()) + if err != nil { + return nil, err + } + + derivation.MasterKeyFingerprint = fingerprint + derivation.Bip32Path = path + + return &derivation, nil +} + +// serializeTaprootBip32Derivation serializes a TaprootBip32Derivation to its +// raw byte representation. +func serializeTaprootBip32Derivation(d *TaprootBip32Derivation) ([]byte, + error) { + + var buf bytes.Buffer + + // The taproot key BIP 32 derivation path is defined as: + // * <4 byte fingerprint> <32-bit uint>* + err := wire.WriteVarInt(&buf, 0, uint64(len(d.LeafHashes))) + if err != nil { + return nil, ErrInvalidPsbtFormat + } + + for _, hash := range d.LeafHashes { + n, err := buf.Write(hash) + if err != nil || n != 32 { + return nil, ErrInvalidPsbtFormat + } + } + + _, err = buf.Write(SerializeBIP32Derivation( + d.MasterKeyFingerprint, d.Bip32Path, + )) + if err != nil { + return nil, ErrInvalidPsbtFormat + } + + return buf.Bytes(), nil +} + +// validateXOnlyPubkey checks if pubKey is *any* valid pubKey serialization in a +// BIP-340 context (x-only serialization). +func validateXOnlyPubkey(pubKey []byte) bool { + _, err := schnorr.ParsePubKey(pubKey) + return err == nil +} + +// validateSchnorrSignature checks that the passed byte slice is a valid Schnorr +// signature, _NOT_ including the sighash flag. It does *not* of course +// validate the signature against any message or public key. +func validateSchnorrSignature(sig []byte) bool { + _, err := schnorr.ParseSignature(sig) + return err == nil +} + +// validateControlBlock checks that the passed byte slice is a valid control +// block as it would appear in a BIP-341 witness stack as the last element. +func validateControlBlock(controlBlock []byte) bool { + _, err := txscript.ParseControlBlock(controlBlock) + return err == nil +} diff --git a/btcutil/psbt/types.go b/btcutil/psbt/types.go new file mode 100644 index 0000000000..e833e1af35 --- /dev/null +++ b/btcutil/psbt/types.go @@ -0,0 +1,203 @@ +package psbt + +// GlobalType is the set of types that are used at the global scope level +// within the PSBT. +type GlobalType uint8 + +const ( + // UnsignedTxType is the global scope key that houses the unsigned + // transaction of the PSBT. The value is a transaction in network + // serialization. The scriptSigs and witnesses for each input must be + // empty. The transaction must be in the old serialization format + // (without witnesses). A PSBT must have a transaction, otherwise it is + // invalid. + UnsignedTxType GlobalType = 0 + + // XpubType houses a global xpub for the entire PSBT packet. + // + // The key ({0x01}|{xpub}) is he 78 byte serialized extended public key + // as defined by BIP 32. Extended public keys are those that can be + // used to derive public keys used in the inputs and outputs of this + // transaction. It should be the public key at the highest hardened + // derivation index so that + // the unhardened child keys used in the transaction can be derived. + // + // The value is the master key fingerprint as defined by BIP 32 + // concatenated with the derivation path of the public key. The + // derivation path is represented as 32-bit little endian unsigned + // integer indexes concatenated with each other. The number of 32 bit + // unsigned integer indexes must match the depth provided in the + // extended public key. + XpubType GlobalType = 1 + + // VersionType houses the global version number of this PSBT. There is + // no key (only contains the byte type), then the value if omitted, is + // assumed to be zero. + VersionType GlobalType = 0xFB + + // ProprietaryGlobalType is used to house any proper chary global-scope + // keys within the PSBT. + // + // The key is ({0xFC}||{subtype}|{key data}) a variable length + // identifier prefix, followed by a subtype, followed by the key data + // itself. + // + // The value is any data as defined by the proprietary type user. + ProprietaryGlobalType = 0xFC +) + +// InputType is the set of types that are defined for each input included +// within the PSBT. +type InputType uint32 + +const ( + // NonWitnessUtxoType has no key ({0x00}) and houses the transaction in + // network serialization format the current input spends from. This + // should only be present for inputs which spend non-segwit outputs. + // However, if it is unknown whether an input spends a segwit output, + // this type should be used. The entire input transaction is needed in + // order to be able to verify the values of the input (pre-segwit they + // aren't in the signature digest). + NonWitnessUtxoType InputType = 0 + + // WitnessUtxoType has no key ({0x01}), and houses the entire + // transaction output in network serialization which the current input + // spends from. This should only be present for inputs which spend + // segwit outputs, including P2SH embedded ones (value || script). + WitnessUtxoType InputType = 1 + + // PartialSigType is used to include a partial signature with key + // ({0x02}|{public key}). + // + // The value is the signature as would be pushed to the stack from a + // scriptSig or witness.. + PartialSigType InputType = 2 + + // SighashType is an empty key ({0x03}). + // + // The value contains the 32-bit unsigned integer specifying the + // sighash type to be used for this input. Signatures for this input + // must use the sighash type, finalizers must fail to finalize inputs + // which have signatures that do not match the specified sighash type. + // Signers who cannot produce signatures with the sighash type must not + // provide a signature. + SighashType InputType = 3 + + // RedeemScriptInputType is an empty key ({0x40}). + // + // The value is the redeem script of the input if present. + RedeemScriptInputType InputType = 4 + + // WitnessScriptInputType is an empty key ({0x05}). + // + // The value is the witness script of this input, if it has one. + WitnessScriptInputType InputType = 5 + + // Bip32DerivationInputType is a type that carries the pubkey along + // with the key ({0x06}|{public key}). + // + // The value is master key fingerprint as defined by BIP 32 + // concatenated with the derivation path of the public key. The + // derivation path is represented as 32 bit unsigned integer indexes + // concatenated with each other. Public keys are those that will be + // needed to sign this input. + Bip32DerivationInputType InputType = 6 + + // FinalScriptSigType is an empty key ({0x07}). + // + // The value contains a fully constructed scriptSig with signatures and + // any other scripts necessary for the input to pass validation. + FinalScriptSigType InputType = 7 + + // FinalScriptWitnessType is an empty key ({0x08}). The value is a + // fully constructed scriptWitness with signatures and any other + // scripts necessary for the input to pass validation. + FinalScriptWitnessType InputType = 8 + + // TaprootKeySpendSignatureType is an empty key ({0x13}). The value is + // a 64-byte Schnorr signature or a 65-byte Schnorr signature with the + // one byte sighash type appended to it. + TaprootKeySpendSignatureType InputType = 0x13 + + // TaprootScriptSpendSignatureType is a type that carries the + // x-only pubkey and leaf hash along with the key + // ({0x14}|{xonlypubkey}|{leafhash}). + // + // The value is a 64-byte Schnorr signature or a 65-byte Schnorr + // signature with the one byte sighash type appended to it. + TaprootScriptSpendSignatureType InputType = 0x14 + + // TaprootLeafScriptType is a type that carries the control block along + // with the key ({0x15}|{control block}). + // + // The value is a script followed by a one byte unsigned integer that + // represents the leaf version. + TaprootLeafScriptType InputType = 0x15 + + // TaprootBip32DerivationInputType is a type that carries the x-only + // pubkey along with the key ({0x16}|{xonlypubkey}). + // + // The value is a compact integer denoting the number of hashes, + // followed by said number of 32-byte leaf hashes. The rest of the value + // is then identical to the Bip32DerivationInputType value. + TaprootBip32DerivationInputType InputType = 0x16 + + // TaprootInternalKeyInputType is an empty key ({0x17}). The value is + // an x-only pubkey denoting the internal public key used for + // constructing a taproot key. + TaprootInternalKeyInputType InputType = 0x17 + + // TaprootMerkleRootType is an empty key ({0x18}). The value is a + // 32-byte hash denoting the root hash of a merkle tree of scripts. + TaprootMerkleRootType InputType = 0x18 + + // ProprietaryInputType is a custom type for use by devs. + // + // The key ({0xFC}||{subtype}|{key data}), is a Variable length + // identifier prefix, followed by a subtype, followed by the key data + // itself. + // + // The value is any value data as defined by the proprietary type user. + ProprietaryInputType InputType = 0xFC +) + +// OutputType is the set of types defined per output within the PSBT. +type OutputType uint32 + +const ( + // RedeemScriptOutputType is an empty key ({0x00}> + // + // The value is the redeemScript for this output if it has one. + RedeemScriptOutputType OutputType = 0 + + // WitnessScriptOutputType is an empty key ({0x01}). + // + // The value is the witness script of this input, if it has one. + WitnessScriptOutputType OutputType = 1 + + // Bip32DerivationOutputType is used to communicate derivation information + // needed to spend this output. The key is ({0x02}|{public key}). + // + // The value is master key fingerprint concatenated with the derivation + // path of the public key. The derivation path is represented as 32-bit + // little endian unsigned integer indexes concatenated with each other. + // Public keys are those needed to spend this output. + Bip32DerivationOutputType OutputType = 2 + + // TaprootInternalKeyOutputType is an empty key ({0x05}). The value is + // an x-only pubkey denoting the internal public key used for + // constructing a taproot key. + TaprootInternalKeyOutputType OutputType = 5 + + // TaprootTapTreeType is an empty key ({0x06}). The value is a + // serialized taproot tree. + TaprootTapTreeType OutputType = 6 + + // TaprootBip32DerivationOutputType is a type that carries the x-only + // pubkey along with the key ({0x07}|{xonlypubkey}). + // + // The value is a compact integer denoting the number of hashes, + // followed by said number of 32-byte leaf hashes. The rest of the value + // is then identical to the Bip32DerivationInputType value. + TaprootBip32DerivationOutputType OutputType = 7 +) diff --git a/btcutil/psbt/updater.go b/btcutil/psbt/updater.go new file mode 100644 index 0000000000..66c8d1d83c --- /dev/null +++ b/btcutil/psbt/updater.go @@ -0,0 +1,377 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package psbt + +// The Updater requires provision of a single PSBT and is able to add data to +// both input and output sections. It can be called repeatedly to add more +// data. It also allows addition of signatures via the addPartialSignature +// function; this is called internally to the package in the Sign() function of +// Updater, located in signer.go + +import ( + "bytes" + "crypto/sha256" + + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" +) + +// Updater encapsulates the role 'Updater' as specified in BIP174; it accepts +// Psbt structs and has methods to add fields to the inputs and outputs. +type Updater struct { + Upsbt *Packet +} + +// NewUpdater returns a new instance of Updater, if the passed Psbt struct is +// in a valid form, else an error. +func NewUpdater(p *Packet) (*Updater, error) { + if err := p.SanityCheck(); err != nil { + return nil, err + } + + return &Updater{Upsbt: p}, nil + +} + +// AddInNonWitnessUtxo adds the utxo information for an input which is +// non-witness. This requires provision of a full transaction (which is the +// source of the corresponding prevOut), and the input index. If addition of +// this key-value pair to the Psbt fails, an error is returned. +func (u *Updater) AddInNonWitnessUtxo(tx *wire.MsgTx, inIndex int) error { + if inIndex > len(u.Upsbt.Inputs)-1 { + return ErrInvalidPrevOutNonWitnessTransaction + } + + u.Upsbt.Inputs[inIndex].NonWitnessUtxo = tx + + if err := u.Upsbt.SanityCheck(); err != nil { + return ErrInvalidPsbtFormat + } + + return nil +} + +// AddInWitnessUtxo adds the utxo information for an input which is witness. +// This requires provision of a full transaction *output* (which is the source +// of the corresponding prevOut); not the full transaction because BIP143 means +// the output information is sufficient, and the input index. If addition of +// this key-value pair to the Psbt fails, an error is returned. +func (u *Updater) AddInWitnessUtxo(txout *wire.TxOut, inIndex int) error { + if inIndex > len(u.Upsbt.Inputs)-1 { + return ErrInvalidPsbtFormat + } + + u.Upsbt.Inputs[inIndex].WitnessUtxo = txout + + if err := u.Upsbt.SanityCheck(); err != nil { + return ErrInvalidPsbtFormat + } + + return nil +} + +// addPartialSignature allows the Updater role to insert fields of type partial +// signature into a Psbt, consisting of both the pubkey (as keydata) and the +// ECDSA signature (as value). Note that the Signer role is encapsulated in +// this function; signatures are only allowed to be added that follow the +// sanity-check on signing rules explained in the BIP under `Signer`; if the +// rules are not satisfied, an ErrInvalidSignatureForInput is returned. +// +// NOTE: This function does *not* validate the ECDSA signature itself. +func (u *Updater) addPartialSignature(inIndex int, sig []byte, + pubkey []byte) error { + + partialSig := PartialSig{ + PubKey: pubkey, Signature: sig, + } + + // First validate the passed (sig, pub). + if !partialSig.checkValid() { + return ErrInvalidPsbtFormat + } + + pInput := u.Upsbt.Inputs[inIndex] + + // First check; don't add duplicates. + for _, x := range pInput.PartialSigs { + if bytes.Equal(x.PubKey, partialSig.PubKey) { + return ErrDuplicateKey + } + } + + // Attaching signature without utxo field is not allowed. + if pInput.WitnessUtxo == nil && pInput.NonWitnessUtxo == nil { + return ErrInvalidPsbtFormat + } + + // Next, we perform a series of additional sanity checks. + if pInput.NonWitnessUtxo != nil { + if len(u.Upsbt.UnsignedTx.TxIn) < inIndex+1 { + return ErrInvalidPrevOutNonWitnessTransaction + } + + if pInput.NonWitnessUtxo.TxHash() != + u.Upsbt.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Hash { + return ErrInvalidSignatureForInput + } + + // To validate that the redeem script matches, we must pull out + // the scriptPubKey of the corresponding output and compare + // that with the P2SH scriptPubKey that is generated by + // redeemScript. + if pInput.RedeemScript != nil { + outIndex := u.Upsbt.UnsignedTx.TxIn[inIndex].PreviousOutPoint.Index + scriptPubKey := pInput.NonWitnessUtxo.TxOut[outIndex].PkScript + scriptHash := btcutil.Hash160(pInput.RedeemScript) + + scriptHashScript, err := txscript.NewScriptBuilder(). + AddOp(txscript.OP_HASH160). + AddData(scriptHash). + AddOp(txscript.OP_EQUAL). + Script() + if err != nil { + return err + } + + if !bytes.Equal(scriptHashScript, scriptPubKey) { + return ErrInvalidSignatureForInput + } + } + + } + + // It could be that we set both the non-witness and witness UTXO fields + // in case it's from a wallet that patched the CVE-2020-14199 + // vulnerability. We detect whether the input being spent is actually a + // witness input and then copy it over to the witness UTXO field in the + // signer. Run the witness checks as well, even if we might already have + // checked the script hash. But that should be a negligible performance + // penalty. + if pInput.WitnessUtxo != nil { + scriptPubKey := pInput.WitnessUtxo.PkScript + + var script []byte + if pInput.RedeemScript != nil { + scriptHash := btcutil.Hash160(pInput.RedeemScript) + scriptHashScript, err := txscript.NewScriptBuilder(). + AddOp(txscript.OP_HASH160). + AddData(scriptHash). + AddOp(txscript.OP_EQUAL). + Script() + if err != nil { + return err + } + + if !bytes.Equal(scriptHashScript, scriptPubKey) { + return ErrInvalidSignatureForInput + } + + script = pInput.RedeemScript + } else { + script = scriptPubKey + } + + // If a witnessScript field is present, this is a P2WSH, + // whether nested or not (that is handled by the assignment to + // `script` above); in that case, sanity check that `script` is + // the p2wsh of witnessScript. Contrariwise, if no + // witnessScript field is present, this will be signed as + // p2wkh. + if pInput.WitnessScript != nil { + witnessScriptHash := sha256.Sum256(pInput.WitnessScript) + witnessScriptHashScript, err := txscript.NewScriptBuilder(). + AddOp(txscript.OP_0). + AddData(witnessScriptHash[:]). + Script() + if err != nil { + return err + } + + if !bytes.Equal(script, witnessScriptHashScript[:]) { + return ErrInvalidSignatureForInput + } + } else { + // Otherwise, this is a p2wkh input. + pubkeyHash := btcutil.Hash160(pubkey) + pubkeyHashScript, err := txscript.NewScriptBuilder(). + AddOp(txscript.OP_0). + AddData(pubkeyHash). + Script() + if err != nil { + return err + } + + // Validate that we're able to properly reconstruct the + // witness program. + if !bytes.Equal(pubkeyHashScript, script) { + return ErrInvalidSignatureForInput + } + } + } + + u.Upsbt.Inputs[inIndex].PartialSigs = append( + u.Upsbt.Inputs[inIndex].PartialSigs, &partialSig, + ) + + if err := u.Upsbt.SanityCheck(); err != nil { + return err + } + + // Addition of a non-duplicate-key partial signature cannot violate + // sanity-check rules. + return nil +} + +// AddInSighashType adds the sighash type information for an input. The +// sighash type is passed as a 32 bit unsigned integer, along with the index +// for the input. An error is returned if addition of this key-value pair to +// the Psbt fails. +func (u *Updater) AddInSighashType(sighashType txscript.SigHashType, + inIndex int) error { + + u.Upsbt.Inputs[inIndex].SighashType = sighashType + + if err := u.Upsbt.SanityCheck(); err != nil { + return err + } + return nil +} + +// AddInRedeemScript adds the redeem script information for an input. The +// redeem script is passed serialized, as a byte slice, along with the index of +// the input. An error is returned if addition of this key-value pair to the +// Psbt fails. +func (u *Updater) AddInRedeemScript(redeemScript []byte, + inIndex int) error { + + u.Upsbt.Inputs[inIndex].RedeemScript = redeemScript + + if err := u.Upsbt.SanityCheck(); err != nil { + return ErrInvalidPsbtFormat + } + + return nil +} + +// AddInWitnessScript adds the witness script information for an input. The +// witness script is passed serialized, as a byte slice, along with the index +// of the input. An error is returned if addition of this key-value pair to the +// Psbt fails. +func (u *Updater) AddInWitnessScript(witnessScript []byte, + inIndex int) error { + + u.Upsbt.Inputs[inIndex].WitnessScript = witnessScript + + if err := u.Upsbt.SanityCheck(); err != nil { + return err + } + + return nil +} + +// AddInBip32Derivation takes a master key fingerprint as defined in BIP32, a +// BIP32 path as a slice of uint32 values, and a serialized pubkey as a byte +// slice, along with the integer index of the input, and inserts this data into +// that input. +// +// NOTE: This can be called multiple times for the same input. An error is +// returned if addition of this key-value pair to the Psbt fails. +func (u *Updater) AddInBip32Derivation(masterKeyFingerprint uint32, + bip32Path []uint32, pubKeyData []byte, inIndex int) error { + + bip32Derivation := Bip32Derivation{ + PubKey: pubKeyData, + MasterKeyFingerprint: masterKeyFingerprint, + Bip32Path: bip32Path, + } + + if !bip32Derivation.checkValid() { + return ErrInvalidPsbtFormat + } + + // Don't allow duplicate keys + for _, x := range u.Upsbt.Inputs[inIndex].Bip32Derivation { + if bytes.Equal(x.PubKey, bip32Derivation.PubKey) { + return ErrDuplicateKey + } + } + + u.Upsbt.Inputs[inIndex].Bip32Derivation = append( + u.Upsbt.Inputs[inIndex].Bip32Derivation, &bip32Derivation, + ) + + if err := u.Upsbt.SanityCheck(); err != nil { + return err + } + + return nil +} + +// AddOutBip32Derivation takes a master key fingerprint as defined in BIP32, a +// BIP32 path as a slice of uint32 values, and a serialized pubkey as a byte +// slice, along with the integer index of the output, and inserts this data +// into that output. +// +// NOTE: That this can be called multiple times for the same output. An error +// is returned if addition of this key-value pair to the Psbt fails. +func (u *Updater) AddOutBip32Derivation(masterKeyFingerprint uint32, + bip32Path []uint32, pubKeyData []byte, outIndex int) error { + + bip32Derivation := Bip32Derivation{ + PubKey: pubKeyData, + MasterKeyFingerprint: masterKeyFingerprint, + Bip32Path: bip32Path, + } + + if !bip32Derivation.checkValid() { + return ErrInvalidPsbtFormat + } + + // Don't allow duplicate keys + for _, x := range u.Upsbt.Outputs[outIndex].Bip32Derivation { + if bytes.Equal(x.PubKey, bip32Derivation.PubKey) { + return ErrDuplicateKey + } + } + + u.Upsbt.Outputs[outIndex].Bip32Derivation = append( + u.Upsbt.Outputs[outIndex].Bip32Derivation, &bip32Derivation, + ) + + if err := u.Upsbt.SanityCheck(); err != nil { + return err + } + + return nil +} + +// AddOutRedeemScript takes a redeem script as a byte slice and appends it to +// the output at index outIndex. +func (u *Updater) AddOutRedeemScript(redeemScript []byte, + outIndex int) error { + + u.Upsbt.Outputs[outIndex].RedeemScript = redeemScript + + if err := u.Upsbt.SanityCheck(); err != nil { + return ErrInvalidPsbtFormat + } + + return nil +} + +// AddOutWitnessScript takes a witness script as a byte slice and appends it to +// the output at index outIndex. +func (u *Updater) AddOutWitnessScript(witnessScript []byte, + outIndex int) error { + + u.Upsbt.Outputs[outIndex].WitnessScript = witnessScript + + if err := u.Upsbt.SanityCheck(); err != nil { + return err + } + + return nil +} diff --git a/btcutil/psbt/utils.go b/btcutil/psbt/utils.go new file mode 100644 index 0000000000..94a5546a55 --- /dev/null +++ b/btcutil/psbt/utils.go @@ -0,0 +1,447 @@ +// Copyright (c) 2018 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package psbt + +import ( + "bytes" + "encoding/binary" + "errors" + "fmt" + "io" + "sort" + + "github.com/btcsuite/btcd/txscript" + "github.com/btcsuite/btcd/wire" +) + +// WriteTxWitness is a utility function due to non-exported witness +// serialization (writeTxWitness encodes the bitcoin protocol encoding for a +// transaction input's witness into w). +func WriteTxWitness(w io.Writer, wit [][]byte) error { + if err := wire.WriteVarInt(w, 0, uint64(len(wit))); err != nil { + return err + } + + for _, item := range wit { + err := wire.WriteVarBytes(w, 0, item) + if err != nil { + return err + } + } + return nil +} + +// writePKHWitness writes a witness for a p2wkh spending input +func writePKHWitness(sig []byte, pub []byte) ([]byte, error) { + return writeWitness(sig, pub) +} + +// writeWitness serializes a witness stack from the given items. +func writeWitness(stackElements ...[]byte) ([]byte, error) { + var ( + buf bytes.Buffer + witnessItems = append([][]byte{}, stackElements...) + ) + + if err := WriteTxWitness(&buf, witnessItems); err != nil { + return nil, err + } + + return buf.Bytes(), nil +} + +// checkIsMultisigScript is a utility function to check whether a given +// redeemscript fits the standard multisig template used in all P2SH based +// multisig, given a set of pubkeys for redemption. +func checkIsMultiSigScript(pubKeys [][]byte, sigs [][]byte, + script []byte) bool { + + // First insist that the script type is multisig. + if txscript.GetScriptClass(script) != txscript.MultiSigTy { + return false + } + + // Inspect the script to ensure that the number of sigs and pubkeys is + // correct + _, numSigs, err := txscript.CalcMultiSigStats(script) + if err != nil { + return false + } + + // If the number of sigs provided, doesn't match the number of required + // pubkeys, then we can't proceed as we're not yet final. + if numSigs != len(pubKeys) || numSigs != len(sigs) { + return false + } + + return true +} + +// extractKeyOrderFromScript is a utility function to extract an ordered list +// of signatures, given a serialized script (redeemscript or witness script), a +// list of pubkeys and the signatures corresponding to those pubkeys. This +// function is used to ensure that the signatures will be embedded in the final +// scriptSig or scriptWitness in the correct order. +func extractKeyOrderFromScript(script []byte, expectedPubkeys [][]byte, + sigs [][]byte) ([][]byte, error) { + + // If this isn't a proper finalized multi-sig script, then we can't + // proceed. + if !checkIsMultiSigScript(expectedPubkeys, sigs, script) { + return nil, ErrUnsupportedScriptType + } + + // Arrange the pubkeys and sigs into a slice of format: + // * [[pub,sig], [pub,sig],..] + type sigWithPub struct { + pubKey []byte + sig []byte + } + var pubsSigs []sigWithPub + for i, pub := range expectedPubkeys { + pubsSigs = append(pubsSigs, sigWithPub{ + pubKey: pub, + sig: sigs[i], + }) + } + + // Now that we have the set of (pubkey, sig) pairs, we'll construct a + // position map that we can use to swap the order in the slice above to + // match how things are laid out in the script. + type positionEntry struct { + index int + value sigWithPub + } + var positionMap []positionEntry + + // For each pubkey in our pubsSigs slice, we'll now construct a proper + // positionMap entry, based on _where_ in the script the pubkey first + // appears. + for _, p := range pubsSigs { + pos := bytes.Index(script, p.pubKey) + if pos < 0 { + return nil, errors.New("script does not contain pubkeys") + } + + positionMap = append(positionMap, positionEntry{ + index: pos, + value: p, + }) + } + + // Now that we have the position map full populated, we'll use the + // index data to properly sort the entries in the map based on where + // they appear in the script. + sort.Slice(positionMap, func(i, j int) bool { + return positionMap[i].index < positionMap[j].index + }) + + // Finally, we can simply iterate through the position map in order to + // extract the proper signature ordering. + sortedSigs := make([][]byte, 0, len(positionMap)) + for _, x := range positionMap { + sortedSigs = append(sortedSigs, x.value.sig) + } + + return sortedSigs, nil +} + +// getMultisigScriptWitness creates a full psbt serialized Witness field for +// the transaction, given the public keys and signatures to be appended. This +// function will only accept witnessScripts of the type M of N multisig. This +// is used for both p2wsh and nested p2wsh multisig cases. +func getMultisigScriptWitness(witnessScript []byte, pubKeys [][]byte, + sigs [][]byte) ([]byte, error) { + + // First using the script as a guide, we'll properly order the sigs + // according to how their corresponding pubkeys appear in the + // witnessScript. + orderedSigs, err := extractKeyOrderFromScript( + witnessScript, pubKeys, sigs, + ) + if err != nil { + return nil, err + } + + // Now that we know the proper order, we'll append each of the + // signatures into a new witness stack, then top it off with the + // witness script at the end, prepending the nil as we need the extra + // pop.. + witnessElements := make(wire.TxWitness, 0, len(sigs)+2) + witnessElements = append(witnessElements, nil) + for _, os := range orderedSigs { + witnessElements = append(witnessElements, os) + } + witnessElements = append(witnessElements, witnessScript) + + // Now that we have the full witness stack, we'll serialize it in the + // expected format, and return the final bytes. + var buf bytes.Buffer + if err = WriteTxWitness(&buf, witnessElements); err != nil { + return nil, err + } + return buf.Bytes(), nil +} + +// checkSigHashFlags compares the sighash flag byte on a signature with the +// value expected according to any PsbtInSighashType field in this section of +// the PSBT, and returns true if they match, false otherwise. +// If no SighashType field exists, it is assumed to be SIGHASH_ALL. +// +// TODO(waxwing): sighash type not restricted to one byte in future? +func checkSigHashFlags(sig []byte, input *PInput) bool { + expectedSighashType := txscript.SigHashAll + if input.SighashType != 0 { + expectedSighashType = input.SighashType + } + + return expectedSighashType == txscript.SigHashType(sig[len(sig)-1]) +} + +// serializeKVpair writes out a kv pair using a varbyte prefix for each. +func serializeKVpair(w io.Writer, key []byte, value []byte) error { + if err := wire.WriteVarBytes(w, 0, key); err != nil { + return err + } + + return wire.WriteVarBytes(w, 0, value) +} + +// serializeKVPairWithType writes out to the passed writer a type coupled with +// a key. +func serializeKVPairWithType(w io.Writer, kt uint8, keydata []byte, + value []byte) error { + + // If the key has no data, then we write a blank slice. + if keydata == nil { + keydata = []byte{} + } + + // The final key to be written is: {type} || {keyData} + serializedKey := append([]byte{kt}, keydata...) + return serializeKVpair(w, serializedKey, value) +} + +// getKey retrieves a single key - both the key type and the keydata (if +// present) from the stream and returns the key type as an integer, or -1 if +// the key was of zero length. This integer is is used to indicate the presence +// of a separator byte which indicates the end of a given key-value pair list, +// and the keydata as a byte slice or nil if none is present. +func getKey(r io.Reader) (int, []byte, error) { + + // For the key, we read the varint separately, instead of using the + // available ReadVarBytes, because we have a specific treatment of 0x00 + // here: + count, err := wire.ReadVarInt(r, 0) + if err != nil { + return -1, nil, ErrInvalidPsbtFormat + } + if count == 0 { + // A separator indicates end of key-value pair list. + return -1, nil, nil + } + + // Check that we don't attempt to decode a dangerously large key. + if count > MaxPsbtKeyLength { + return -1, nil, ErrInvalidKeydata + } + + // Next, we ready out the designated number of bytes, which may include + // a type, key, and optional data. + keyTypeAndData := make([]byte, count) + if _, err := io.ReadFull(r, keyTypeAndData[:]); err != nil { + return -1, nil, err + } + + keyType := int(string(keyTypeAndData)[0]) + + // Note that the second return value will usually be empty, since most + // keys contain no more than the key type byte. + if len(keyTypeAndData) == 1 { + return keyType, nil, nil + } + + // Otherwise, we return the key, along with any data that it may + // contain. + return keyType, keyTypeAndData[1:], nil + +} + +// readTxOut is a limited version of wire.ReadTxOut, because the latter is not +// exported. +func readTxOut(txout []byte) (*wire.TxOut, error) { + if len(txout) < 10 { + return nil, ErrInvalidPsbtFormat + } + + valueSer := binary.LittleEndian.Uint64(txout[:8]) + scriptPubKey := txout[9:] + + return wire.NewTxOut(int64(valueSer), scriptPubKey), nil +} + +// SumUtxoInputValues tries to extract the sum of all inputs specified in the +// UTXO fields of the PSBT. An error is returned if an input is specified that +// does not contain any UTXO information. +func SumUtxoInputValues(packet *Packet) (int64, error) { + // We take the TX ins of the unsigned TX as the truth for how many + // inputs there should be, as the fields in the extra data part of the + // PSBT can be empty. + if len(packet.UnsignedTx.TxIn) != len(packet.Inputs) { + return 0, fmt.Errorf("TX input length doesn't match PSBT " + + "input length") + } + + inputSum := int64(0) + for idx, in := range packet.Inputs { + switch { + case in.WitnessUtxo != nil: + // Witness UTXOs only need to reference the TxOut. + inputSum += in.WitnessUtxo.Value + + case in.NonWitnessUtxo != nil: + // Non-witness UTXOs reference to the whole transaction + // the UTXO resides in. + utxOuts := in.NonWitnessUtxo.TxOut + txIn := packet.UnsignedTx.TxIn[idx] + + // Check that utxOuts actually has enough space to + // contain the previous outpoint's index. + opIdx := txIn.PreviousOutPoint.Index + if opIdx >= uint32(len(utxOuts)) { + return 0, fmt.Errorf("input %d has malformed "+ + "TxOut field", idx) + } + + inputSum += utxOuts[txIn.PreviousOutPoint.Index].Value + + default: + return 0, fmt.Errorf("input %d has no UTXO information", + idx) + } + } + return inputSum, nil +} + +// TxOutsEqual returns true if two transaction outputs are equal. +func TxOutsEqual(out1, out2 *wire.TxOut) bool { + if out1 == nil || out2 == nil { + return out1 == out2 + } + return out1.Value == out2.Value && + bytes.Equal(out1.PkScript, out2.PkScript) +} + +// VerifyOutputsEqual verifies that the two slices of transaction outputs are +// deep equal to each other. We do the length check and manual loop to provide +// better error messages to the user than just returning "not equal". +func VerifyOutputsEqual(outs1, outs2 []*wire.TxOut) error { + if len(outs1) != len(outs2) { + return fmt.Errorf("number of outputs are different") + } + for idx, out := range outs1 { + // There is a byte slice in the output so we can't use the + // equality operator. + if !TxOutsEqual(out, outs2[idx]) { + return fmt.Errorf("output %d is different", idx) + } + } + return nil +} + +// VerifyInputPrevOutpointsEqual verifies that the previous outpoints of the +// two slices of transaction inputs are deep equal to each other. We do the +// length check and manual loop to provide better error messages to the user +// than just returning "not equal". +func VerifyInputPrevOutpointsEqual(ins1, ins2 []*wire.TxIn) error { + if len(ins1) != len(ins2) { + return fmt.Errorf("number of inputs are different") + } + for idx, in := range ins1 { + if in.PreviousOutPoint != ins2[idx].PreviousOutPoint { + return fmt.Errorf("previous outpoint of input %d is "+ + "different", idx) + } + } + return nil +} + +// VerifyInputOutputLen makes sure a packet is non-nil, contains a non-nil wire +// transaction and that the wire input/output lengths match the partial input/ +// output lengths. A caller also can specify if they expect any inputs and/or +// outputs to be contained in the packet. +func VerifyInputOutputLen(packet *Packet, needInputs, needOutputs bool) error { + if packet == nil || packet.UnsignedTx == nil { + return fmt.Errorf("PSBT packet cannot be nil") + } + + if len(packet.UnsignedTx.TxIn) != len(packet.Inputs) { + return fmt.Errorf("invalid PSBT, wire inputs don't match " + + "partial inputs") + } + if len(packet.UnsignedTx.TxOut) != len(packet.Outputs) { + return fmt.Errorf("invalid PSBT, wire outputs don't match " + + "partial outputs") + } + + if needInputs && len(packet.UnsignedTx.TxIn) == 0 { + return fmt.Errorf("PSBT packet must contain at least one " + + "input") + } + if needOutputs && len(packet.UnsignedTx.TxOut) == 0 { + return fmt.Errorf("PSBT packet must contain at least one " + + "output") + } + + return nil +} + +// NewFromSignedTx is a utility function to create a packet from an +// already-signed transaction. Returned are: an unsigned transaction +// serialization, a list of scriptSigs, one per input, and a list of witnesses, +// one per input. +func NewFromSignedTx(tx *wire.MsgTx) (*Packet, [][]byte, + []wire.TxWitness, error) { + + scriptSigs := make([][]byte, 0, len(tx.TxIn)) + witnesses := make([]wire.TxWitness, 0, len(tx.TxIn)) + tx2 := tx.Copy() + + // Blank out signature info in inputs + for i, tin := range tx2.TxIn { + tin.SignatureScript = nil + scriptSigs = append(scriptSigs, tx.TxIn[i].SignatureScript) + tin.Witness = nil + witnesses = append(witnesses, tx.TxIn[i].Witness) + } + + // Outputs always contain: (value, scriptPubkey) so don't need + // amending. Now tx2 is tx with all signing data stripped out + unsignedPsbt, err := NewFromUnsignedTx(tx2) + if err != nil { + return nil, nil, nil, err + } + return unsignedPsbt, scriptSigs, witnesses, nil +} + +// FindLeafScript attempts to locate the leaf script of a given target Tap Leaf +// hash in the list of leaf scripts of the given input. +func FindLeafScript(pInput *PInput, + targetLeafHash []byte) (*TaprootTapLeafScript, error) { + + for _, leaf := range pInput.TaprootLeafScript { + leafHash := txscript.TapLeaf{ + LeafVersion: leaf.LeafVersion, + Script: leaf.Script, + }.TapHash() + + if bytes.Equal(targetLeafHash, leafHash[:]) { + return leaf, nil + } + } + + return nil, fmt.Errorf("leaf script for target leaf hash %x not "+ + "found in input", targetLeafHash) +} diff --git a/btcutil/psbt/utils_test.go b/btcutil/psbt/utils_test.go new file mode 100644 index 0000000000..90593ffca5 --- /dev/null +++ b/btcutil/psbt/utils_test.go @@ -0,0 +1,370 @@ +package psbt + +import ( + "bytes" + "reflect" + "testing" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +func TestSumUtxoInputValues(t *testing.T) { + // Expect sum to fail for packet with non-matching txIn and PInputs. + tx := wire.NewMsgTx(2) + badPacket, err := NewFromUnsignedTx(tx) + if err != nil { + t.Fatalf("could not create packet from TX: %v", err) + } + badPacket.Inputs = append(badPacket.Inputs, PInput{}) + + _, err = SumUtxoInputValues(badPacket) + if err == nil { + t.Fatalf("expected sum of bad packet to fail") + } + + // Expect sum to fail if any inputs don't have UTXO information added. + op := []*wire.OutPoint{{}, {}} + noUtxoInfoPacket, err := New(op, nil, 2, 0, []uint32{0, 0}) + if err != nil { + t.Fatalf("could not create new packet: %v", err) + } + + _, err = SumUtxoInputValues(noUtxoInfoPacket) + if err == nil { + t.Fatalf("expected sum of missing UTXO info to fail") + } + + // Create a packet that is OK and contains both witness and non-witness + // UTXO information. + okPacket, err := New(op, nil, 2, 0, []uint32{0, 0}) + if err != nil { + t.Fatalf("could not create new packet: %v", err) + } + okPacket.Inputs[0].WitnessUtxo = &wire.TxOut{Value: 1234} + okPacket.Inputs[1].NonWitnessUtxo = &wire.MsgTx{ + TxOut: []*wire.TxOut{{Value: 6543}}, + } + + sum, err := SumUtxoInputValues(okPacket) + if err != nil { + t.Fatalf("could not sum input: %v", err) + } + if sum != (1234 + 6543) { + t.Fatalf("unexpected sum, got %d wanted %d", sum, 1234+6543) + } + + // Create a malformed packet where NonWitnessUtxo.TxOut does not + // contain the index specified by the PreviousOutPoint in the + // packet's Unsigned.TxIn field. + badOp := []*wire.OutPoint{{}, {Index: 500}} + malformedPacket, err := New(badOp, nil, 2, 0, []uint32{0, 0}) + if err != nil { + t.Fatalf("could not create malformed packet: %v", err) + } + malformedPacket.Inputs[0].WitnessUtxo = &wire.TxOut{Value: 1234} + malformedPacket.Inputs[1].NonWitnessUtxo = &wire.MsgTx{ + TxOut: []*wire.TxOut{{Value: 6543}}, + } + + _, err = SumUtxoInputValues(malformedPacket) + if err == nil { + t.Fatalf("expected sum of malformed packet to fail") + } +} + +func TestTxOutsEqual(t *testing.T) { + testCases := []struct { + name string + out1 *wire.TxOut + out2 *wire.TxOut + expectEqual bool + }{{ + name: "both nil", + out1: nil, + out2: nil, + expectEqual: true, + }, { + name: "one nil", + out1: nil, + out2: &wire.TxOut{}, + expectEqual: false, + }, { + name: "both empty", + out1: &wire.TxOut{}, + out2: &wire.TxOut{}, + expectEqual: true, + }, { + name: "one pk script set", + out1: &wire.TxOut{}, + out2: &wire.TxOut{ + PkScript: []byte("foo"), + }, + expectEqual: false, + }, { + name: "both fully set", + out1: &wire.TxOut{ + Value: 1234, + PkScript: []byte("bar"), + }, + out2: &wire.TxOut{ + Value: 1234, + PkScript: []byte("bar"), + }, + expectEqual: true, + }} + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + result := TxOutsEqual(tc.out1, tc.out2) + if result != tc.expectEqual { + t.Fatalf("unexpected result, got %v wanted %v", + result, tc.expectEqual) + } + }) + } +} + +func TestVerifyOutputsEqual(t *testing.T) { + testCases := []struct { + name string + outs1 []*wire.TxOut + outs2 []*wire.TxOut + expectErr bool + }{{ + name: "both nil", + outs1: nil, + outs2: nil, + expectErr: false, + }, { + name: "one nil", + outs1: nil, + outs2: []*wire.TxOut{{}}, + expectErr: true, + }, { + name: "both empty", + outs1: []*wire.TxOut{{}}, + outs2: []*wire.TxOut{{}}, + expectErr: false, + }, { + name: "one pk script set", + outs1: []*wire.TxOut{{}}, + outs2: []*wire.TxOut{{ + PkScript: []byte("foo"), + }}, + expectErr: true, + }, { + name: "both fully set", + outs1: []*wire.TxOut{{ + Value: 1234, + PkScript: []byte("bar"), + }, {}}, + outs2: []*wire.TxOut{{ + Value: 1234, + PkScript: []byte("bar"), + }, {}}, + expectErr: false, + }} + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + err := VerifyOutputsEqual(tc.outs1, tc.outs2) + if (tc.expectErr && err == nil) || + (!tc.expectErr && err != nil) { + + t.Fatalf("got error '%v' but wanted it to be "+ + "nil: %v", err, tc.expectErr) + } + }) + } +} + +func TestVerifyInputPrevOutpointsEqual(t *testing.T) { + testCases := []struct { + name string + ins1 []*wire.TxIn + ins2 []*wire.TxIn + expectErr bool + }{{ + name: "both nil", + ins1: nil, + ins2: nil, + expectErr: false, + }, { + name: "one nil", + ins1: nil, + ins2: []*wire.TxIn{{}}, + expectErr: true, + }, { + name: "both empty", + ins1: []*wire.TxIn{{}}, + ins2: []*wire.TxIn{{}}, + expectErr: false, + }, { + name: "one previous output set", + ins1: []*wire.TxIn{{}}, + ins2: []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{11, 22, 33}, + Index: 7, + }, + }}, + expectErr: true, + }, { + name: "both fully set", + ins1: []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{11, 22, 33}, + Index: 7, + }, + }, {}}, + ins2: []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{ + Hash: chainhash.Hash{11, 22, 33}, + Index: 7, + }, + }, {}}, + expectErr: false, + }} + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + err := VerifyInputPrevOutpointsEqual(tc.ins1, tc.ins2) + if (tc.expectErr && err == nil) || + (!tc.expectErr && err != nil) { + + t.Fatalf("got error '%v' but wanted it to be "+ + "nil: %v", err, tc.expectErr) + } + }) + } +} + +func TestVerifyInputOutputLen(t *testing.T) { + testCases := []struct { + name string + packet *Packet + needInputs bool + needOutputs bool + expectErr bool + }{{ + name: "packet nil", + packet: nil, + expectErr: true, + }, { + name: "wire tx nil", + packet: &Packet{}, + expectErr: true, + }, { + name: "both empty don't need outputs", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{}, + }, + expectErr: false, + }, { + name: "both empty but need outputs", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{}, + }, + needOutputs: true, + expectErr: true, + }, { + name: "both empty but need inputs", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{}, + }, + needInputs: true, + expectErr: true, + }, { + name: "input len mismatch", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{ + TxIn: []*wire.TxIn{{}}, + }, + }, + needInputs: true, + expectErr: true, + }, { + name: "output len mismatch", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{ + TxOut: []*wire.TxOut{{}}, + }, + }, + needOutputs: true, + expectErr: true, + }, { + name: "all fully set", + packet: &Packet{ + UnsignedTx: &wire.MsgTx{ + TxIn: []*wire.TxIn{{}}, + TxOut: []*wire.TxOut{{}}, + }, + Inputs: []PInput{{}}, + Outputs: []POutput{{}}, + }, + needInputs: true, + needOutputs: true, + expectErr: false, + }} + + for _, tc := range testCases { + tc := tc + t.Run(tc.name, func(t *testing.T) { + err := VerifyInputOutputLen( + tc.packet, tc.needInputs, tc.needOutputs, + ) + if (tc.expectErr && err == nil) || + (!tc.expectErr && err != nil) { + + t.Fatalf("got error '%v' but wanted it to be "+ + "nil: %v", err, tc.expectErr) + } + }) + } +} + +func TestNewFromSignedTx(t *testing.T) { + orig := &wire.MsgTx{ + TxIn: []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{}, + SignatureScript: []byte("script"), + Witness: [][]byte{[]byte("witness")}, + Sequence: 1234, + }}, + TxOut: []*wire.TxOut{{ + PkScript: []byte{77, 88}, + Value: 99, + }}, + } + + packet, scripts, witnesses, err := NewFromSignedTx(orig) + if err != nil { + t.Fatalf("could not create packet from signed TX: %v", err) + } + + tx := packet.UnsignedTx + expectedTxIn := []*wire.TxIn{{ + PreviousOutPoint: wire.OutPoint{}, + Sequence: 1234, + }} + if !reflect.DeepEqual(tx.TxIn, expectedTxIn) { + t.Fatalf("unexpected txin, got %#v wanted %#v", + tx.TxIn, expectedTxIn) + } + if !reflect.DeepEqual(tx.TxOut, orig.TxOut) { + t.Fatalf("unexpected txout, got %#v wanted %#v", + tx.TxOut, orig.TxOut) + } + if len(scripts) != 1 || !bytes.Equal(scripts[0], []byte("script")) { + t.Fatalf("script not extracted correctly") + } + if len(witnesses) != 1 || + !bytes.Equal(witnesses[0][0], []byte("witness")) { + + t.Fatalf("witness not extracted correctly") + } +} diff --git a/btcutil/tx.go b/btcutil/tx.go new file mode 100644 index 0000000000..5633fef90e --- /dev/null +++ b/btcutil/tx.go @@ -0,0 +1,124 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "bytes" + "io" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// TxIndexUnknown is the value returned for a transaction index that is unknown. +// This is typically because the transaction has not been inserted into a block +// yet. +const TxIndexUnknown = -1 + +// Tx defines a bitcoin transaction that provides easier and more efficient +// manipulation of raw transactions. It also memoizes the hash for the +// transaction on its first access so subsequent accesses don't have to repeat +// the relatively expensive hashing operations. +type Tx struct { + msgTx *wire.MsgTx // Underlying MsgTx + txHash *chainhash.Hash // Cached transaction hash + txHashWitness *chainhash.Hash // Cached transaction witness hash + txHasWitness *bool // If the transaction has witness data + txIndex int // Position within a block or TxIndexUnknown +} + +// MsgTx returns the underlying wire.MsgTx for the transaction. +func (t *Tx) MsgTx() *wire.MsgTx { + // Return the cached transaction. + return t.msgTx +} + +// Hash returns the hash of the transaction. This is equivalent to +// calling TxHash on the underlying wire.MsgTx, however it caches the +// result so subsequent calls are more efficient. +func (t *Tx) Hash() *chainhash.Hash { + // Return the cached hash if it has already been generated. + if t.txHash != nil { + return t.txHash + } + + // Cache the hash and return it. + hash := t.msgTx.TxHash() + t.txHash = &hash + return &hash +} + +// WitnessHash returns the witness hash (wtxid) of the transaction. This is +// equivalent to calling WitnessHash on the underlying wire.MsgTx, however it +// caches the result so subsequent calls are more efficient. +func (t *Tx) WitnessHash() *chainhash.Hash { + // Return the cached hash if it has already been generated. + if t.txHashWitness != nil { + return t.txHashWitness + } + + // Cache the hash and return it. + hash := t.msgTx.WitnessHash() + t.txHashWitness = &hash + return &hash +} + +// HasWitness returns false if none of the inputs within the transaction +// contain witness data, true false otherwise. This equivalent to calling +// HasWitness on the underlying wire.MsgTx, however it caches the result so +// subsequent calls are more efficient. +func (t *Tx) HasWitness() bool { + if t.txHasWitness != nil { + return *t.txHasWitness + } + + hasWitness := t.msgTx.HasWitness() + t.txHasWitness = &hasWitness + return hasWitness +} + +// Index returns the saved index of the transaction within a block. This value +// will be TxIndexUnknown if it hasn't already explicitly been set. +func (t *Tx) Index() int { + return t.txIndex +} + +// SetIndex sets the index of the transaction in within a block. +func (t *Tx) SetIndex(index int) { + t.txIndex = index +} + +// NewTx returns a new instance of a bitcoin transaction given an underlying +// wire.MsgTx. See Tx. +func NewTx(msgTx *wire.MsgTx) *Tx { + return &Tx{ + msgTx: msgTx, + txIndex: TxIndexUnknown, + } +} + +// NewTxFromBytes returns a new instance of a bitcoin transaction given the +// serialized bytes. See Tx. +func NewTxFromBytes(serializedTx []byte) (*Tx, error) { + br := bytes.NewReader(serializedTx) + return NewTxFromReader(br) +} + +// NewTxFromReader returns a new instance of a bitcoin transaction given a +// Reader to deserialize the transaction. See Tx. +func NewTxFromReader(r io.Reader) (*Tx, error) { + // Deserialize the bytes into a MsgTx. + var msgTx wire.MsgTx + err := msgTx.Deserialize(r) + if err != nil { + return nil, err + } + + t := Tx{ + msgTx: &msgTx, + txIndex: TxIndexUnknown, + } + return &t, nil +} diff --git a/btcutil/tx_test.go b/btcutil/tx_test.go new file mode 100644 index 0000000000..828fc065b1 --- /dev/null +++ b/btcutil/tx_test.go @@ -0,0 +1,136 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil_test + +import ( + "bytes" + "io" + "reflect" + "testing" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/btcutil" + "github.com/davecgh/go-spew/spew" +) + +// TestTx tests the API for Tx. +func TestTx(t *testing.T) { + testTx := Block100000.Transactions[0] + tx := btcutil.NewTx(testTx) + + // Ensure we get the same data back out. + if msgTx := tx.MsgTx(); !reflect.DeepEqual(msgTx, testTx) { + t.Errorf("MsgTx: mismatched MsgTx - got %v, want %v", + spew.Sdump(msgTx), spew.Sdump(testTx)) + } + + // Ensure transaction index set and get work properly. + wantIndex := 0 + tx.SetIndex(0) + if gotIndex := tx.Index(); gotIndex != wantIndex { + t.Errorf("Index: mismatched index - got %v, want %v", + gotIndex, wantIndex) + } + + // Hash for block 100,000 transaction 0. + wantHashStr := "8c14f0db3df150123e6f3dbbf30f8b955a8249b62ac1d1ff16284aefa3d06d87" + wantHash, err := chainhash.NewHashFromStr(wantHashStr) + if err != nil { + t.Errorf("NewHashFromStr: %v", err) + } + + // Request the hash multiple times to test generation and caching. + for i := 0; i < 2; i++ { + hash := tx.Hash() + if !hash.IsEqual(wantHash) { + t.Errorf("Hash #%d mismatched hash - got %v, want %v", i, + hash, wantHash) + } + } +} + +// TestNewTxFromBytes tests creation of a Tx from serialized bytes. +func TestNewTxFromBytes(t *testing.T) { + // Serialize the test transaction. + testTx := Block100000.Transactions[0] + var testTxBuf bytes.Buffer + err := testTx.Serialize(&testTxBuf) + if err != nil { + t.Errorf("Serialize: %v", err) + } + testTxBytes := testTxBuf.Bytes() + + // Create a new transaction from the serialized bytes. + tx, err := btcutil.NewTxFromBytes(testTxBytes) + if err != nil { + t.Errorf("NewTxFromBytes: %v", err) + return + } + + // Ensure the generated MsgTx is correct. + if msgTx := tx.MsgTx(); !reflect.DeepEqual(msgTx, testTx) { + t.Errorf("MsgTx: mismatched MsgTx - got %v, want %v", + spew.Sdump(msgTx), spew.Sdump(testTx)) + } +} + +// TestTxErrors tests the error paths for the Tx API. +func TestTxErrors(t *testing.T) { + // Serialize the test transaction. + testTx := Block100000.Transactions[0] + var testTxBuf bytes.Buffer + err := testTx.Serialize(&testTxBuf) + if err != nil { + t.Errorf("Serialize: %v", err) + } + testTxBytes := testTxBuf.Bytes() + + // Truncate the transaction byte buffer to force errors. + shortBytes := testTxBytes[:4] + _, err = btcutil.NewTxFromBytes(shortBytes) + if err != io.EOF { + t.Errorf("NewTxFromBytes: did not get expected error - "+ + "got %v, want %v", err, io.EOF) + } +} + +// TestTxHasWitness tests the HasWitness() method. +func TestTxHasWitness(t *testing.T) { + msgTx := Block100000.Transactions[0] // contains witness data + tx := btcutil.NewTx(msgTx) + + tx.WitnessHash() // Populate the witness hash cache + tx.HasWitness() // Should not fail (see btcsuite/btcd#1543) + + if !tx.HasWitness() { + t.Errorf("HasWitness: got false, want true") + } + + for _, msgTxWithoutWitness := range Block100000.Transactions[1:] { + txWithoutWitness := btcutil.NewTx(msgTxWithoutWitness) + if txWithoutWitness.HasWitness() { + t.Errorf("HasWitness: got false, want true") + } + } +} + +// TestTxWitnessHash tests the WitnessHash() method. +func TestTxWitnessHash(t *testing.T) { + msgTx := Block100000.Transactions[0] // contains witness data + tx := btcutil.NewTx(msgTx) + + if tx.WitnessHash().IsEqual(tx.Hash()) { + t.Errorf("WitnessHash: witness hash and tx id must NOT be same - "+ + "got %v, want %v", tx.WitnessHash(), tx.Hash()) + } + + for _, msgTxWithoutWitness := range Block100000.Transactions[1:] { + txWithoutWitness := btcutil.NewTx(msgTxWithoutWitness) + if !txWithoutWitness.WitnessHash().IsEqual(txWithoutWitness.Hash()) { + t.Errorf("WitnessHash: witness hash and tx id must be same - "+ + "got %v, want %v", txWithoutWitness.WitnessHash(), txWithoutWitness.Hash()) + } + } +} diff --git a/btcutil/txsort/README.md b/btcutil/txsort/README.md new file mode 100644 index 0000000000..cb8e4130d1 --- /dev/null +++ b/btcutil/txsort/README.md @@ -0,0 +1,31 @@ +txsort +====== + +[![Build Status](http://img.shields.io/travis/btcsuite/btcutil.svg)](https://travis-ci.org/btcsuite/btcutil) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](http://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/btcutil/txsort) + +Package txsort provides the transaction sorting according to [BIP 69](https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki). + +BIP 69 defines a standard lexicographical sort order of transaction inputs and +outputs. This is useful to standardize transactions for faster multi-party +agreement as well as preventing information leaks in a single-party use case. + +The BIP goes into more detail, but for a quick and simplistic overview, the +order for inputs is defined as first sorting on the previous output hash and +then on the index as a tie breaker. The order for outputs is defined as first +sorting on the amount and then on the raw public key script bytes as a tie +breaker. + +A comprehensive suite of tests is provided to ensure proper functionality. + +## Installation and Updating + +```bash +$ go get -u github.com/btcsuite/btcd/btcutil/txsort +``` + +## License + +Package txsort is licensed under the [copyfree](http://copyfree.org) ISC +License. diff --git a/btcutil/txsort/doc.go b/btcutil/txsort/doc.go new file mode 100644 index 0000000000..e89c4d23d3 --- /dev/null +++ b/btcutil/txsort/doc.go @@ -0,0 +1,20 @@ +// Copyright (c) 2015 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +/* +Package txsort provides the transaction sorting according to BIP 69. + +Overview + +BIP 69 defines a standard lexicographical sort order of transaction inputs and +outputs. This is useful to standardize transactions for faster multi-party +agreement as well as preventing information leaks in a single-party use case. + +The BIP goes into more detail, but for a quick and simplistic overview, the +order for inputs is defined as first sorting on the previous output hash and +then on the index as a tie breaker. The order for outputs is defined as first +sorting on the amount and then on the raw public key script bytes as a tie +breaker. +*/ +package txsort diff --git a/btcutil/txsort/testdata/bip69-1.hex b/btcutil/txsort/testdata/bip69-1.hex new file mode 100644 index 0000000000..dbd18422b7 --- /dev/null +++ b/btcutil/txsort/testdata/bip69-1.hex @@ -0,0 +1 @@ +0100000011aad553bb1650007e9982a8ac79d227cd8c831e1573b11f25573a37664e5f3e64000000006a47304402205438cedd30ee828b0938a863e08d810526123746c1f4abee5b7bc2312373450c02207f26914f4275f8f0040ab3375bacc8c5d610c095db8ed0785de5dc57456591a601210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffffc26f3eb7932f7acddc5ddd26602b77e7516079b03090a16e2c2f5485d1fde028000000006b483045022100f81d98c1de9bb61063a5e6671d191b400fda3a07d886e663799760393405439d0220234303c9af4bad3d665f00277fe70cdd26cd56679f114a40d9107249d29c979401210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff456a9e597129f5df2e11b842833fc19a94c563f57449281d3cd01249a830a1f0000000006a47304402202310b00924794ef68a8f09564fd0bb128838c66bc45d1a3f95c5cab52680f166022039fc99138c29f6c434012b14aca651b1c02d97324d6bd9dd0ffced0782c7e3bd01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff571fb3e02278217852dd5d299947e2b7354a639adc32ec1fa7b82cfb5dec530e000000006b483045022100d276251f1f4479d8521269ec8b1b45c6f0e779fcf1658ec627689fa8a55a9ca50220212a1e307e6182479818c543e1b47d62e4fc3ce6cc7fc78183c7071d245839df01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff5d8de50362ff33d3526ac3602e9ee25c1a349def086a7fc1d9941aaeb9e91d38010000006b4830450221008768eeb1240451c127b88d89047dd387d13357ce5496726fc7813edc6acd55ac022015187451c3fb66629af38fdb061dfb39899244b15c45e4a7ccc31064a059730d01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff60ad3408b89ea19caf3abd5e74e7a084344987c64b1563af52242e9d2a8320f3000000006b4830450221009be4261ec050ebf33fa3d47248c7086e4c247cafbb100ea7cee4aa81cd1383f5022008a70d6402b153560096c849d7da6fe61c771a60e41ff457aac30673ceceafee01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffffe9b483a8ac4129780c88d1babe41e89dc10a26dedbf14f80a28474e9a11104de010000006b4830450221009bc40eee321b39b5dc26883f79cd1f5a226fc6eed9e79e21d828f4c23190c57e022078182fd6086e265589105023d9efa4cba83f38c674a499481bd54eee196b033f01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffffe28db9462d3004e21e765e03a45ecb147f136a20ba8bca78ba60ebfc8e2f8b3b000000006a47304402200fb572b7c6916515452e370c2b6f97fcae54abe0793d804a5a53e419983fae1602205191984b6928bf4a1e25b00e5b5569a0ce1ecb82db2dea75fe4378673b53b9e801210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff7a1ef65ff1b7b7740c662ab6c9735ace4a16279c23a1db5709ed652918ffff54010000006a47304402206bc218a925f7280d615c8ea4f0131a9f26e7fc64cff6eeeb44edb88aba14f1910220779d5d67231bc2d2d93c3c5ab74dcd193dd3d04023e58709ad7ffbf95161be6201210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff850cecf958468ca7ffa6a490afe13b8c271b1326b0ddc1fdfdf9f3c7e365fdba000000006a473044022047df98cc26bd2bfdc5b2b97c27aead78a214810ff023e721339292d5ce50823d02205fe99dc5f667908974dae40cc7a9475af7fa6671ba44f64a00fcd01fa12ab523012102ca46fa75454650afba1784bc7b079d687e808634411e4beff1f70e44596308a1ffffffff8640e312040e476cf6727c60ca3f4a3ad51623500aacdda96e7728dbdd99e8a5000000006a47304402205566aa84d3d84226d5ab93e6f253b57b3ef37eb09bb73441dae35de86271352a02206ee0b7f800f73695a2073a2967c9ad99e19f6ddf18ce877adf822e408ba9291e01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff91c1889c5c24b93b56e643121f7a05a34c10c5495c450504c7b5afcb37e11d7a000000006b483045022100df61d45bbaa4571cdd6c5c822cba458cdc55285cdf7ba9cd5bb9fc18096deb9102201caf8c771204df7fd7c920c4489da7bc3a60e1d23c1a97e237c63afe53250b4a01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff2470947216eb81ea0eeeb4fe19362ec05767db01c3aa3006bb499e8b6d6eaa26010000006a473044022031501a0b2846b8822a32b9947b058d89d32fc758e009fc2130c2e5effc925af70220574ef3c9e350cef726c75114f0701fd8b188c6ec5f84adce0ed5c393828a5ae001210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff0abcd77d65cc14363f8262898335f184d6da5ad060ff9e40bf201741022c2b40010000006b483045022100a6ac110802b699f9a2bff0eea252d32e3d572b19214d49d8bb7405efa2af28f1022033b7563eb595f6d7ed7ec01734e17b505214fe0851352ed9c3c8120d53268e9a01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffffa43bebbebf07452a893a95bfea1d5db338d23579be172fe803dce02eeb7c037d010000006b483045022100ebc77ed0f11d15fe630fe533dc350c2ddc1c81cfeb81d5a27d0587163f58a28c02200983b2a32a1014bab633bfc9258083ac282b79566b6b3fa45c1e6758610444f401210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffffb102113fa46ce949616d9cda00f6b10231336b3928eaaac6bfe42d1bf3561d6c010000006a473044022010f8731929a55c1c49610722e965635529ed895b2292d781b183d465799906b20220098359adcbc669cd4b294cc129b110fe035d2f76517248f4b7129f3bf793d07f01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffffb861fab2cde188499758346be46b5fbec635addfc4e7b0c8a07c0a908f2b11b4000000006a47304402207328142bb02ef5d6496a210300f4aea71f67683b842fa3df32cae6c88b49a9bb022020f56ddff5042260cfda2c9f39b7dec858cc2f4a76a987cd2dc25945b04e15fe01210391064d5b2d1c70f264969046fcff853a7e2bfde5d121d38dc5ebd7bc37c2b210ffffffff027064d817000000001976a9144a5fba237213a062f6f57978f796390bdcf8d01588ac00902f50090000001976a9145be32612930b8323add2212a4ec03c1562084f8488ac00000000 \ No newline at end of file diff --git a/btcutil/txsort/testdata/bip69-2.hex b/btcutil/txsort/testdata/bip69-2.hex new file mode 100644 index 0000000000..c42d0d2dc1 --- /dev/null +++ b/btcutil/txsort/testdata/bip69-2.hex @@ -0,0 +1 @@ +010000000255605dc6f5c3dc148b6da58442b0b2cd422be385eab2ebea4119ee9c268d28350000000049483045022100aa46504baa86df8a33b1192b1b9367b4d729dc41e389f2c04f3e5c7f0559aae702205e82253a54bf5c4f65b7428551554b2045167d6d206dfe6a2e198127d3f7df1501ffffffff55605dc6f5c3dc148b6da58442b0b2cd422be385eab2ebea4119ee9c268d2835010000004847304402202329484c35fa9d6bb32a55a70c0982f606ce0e3634b69006138683bcd12cbb6602200c28feb1e2555c3210f1dddb299738b4ff8bbe9667b68cb8764b5ac17b7adf0001ffffffff0200e1f505000000004341046a0765b5865641ce08dd39690aade26dfbf5511430ca428a3089261361cef170e3929a68aee3d8d4848b0c5111b0a37b82b86ad559fd2a745b44d8e8d9dfdc0cac00180d8f000000004341044a656f065871a353f216ca26cef8dde2f03e8c16202d2e8ad769f02032cb86a5eb5e56842e92e19141d60a01928f8dd2c875a390f67c1f6c94cfc617c0ea45afac00000000 \ No newline at end of file diff --git a/btcutil/txsort/testdata/bip69-3.hex b/btcutil/txsort/testdata/bip69-3.hex new file mode 100644 index 0000000000..6fd859a9cf --- /dev/null +++ b/btcutil/txsort/testdata/bip69-3.hex @@ -0,0 +1 @@ +0100000001d992e5a888a86d4c7a6a69167a4728ee69497509740fc5f456a24528c340219a000000008b483045022100f0519bdc9282ff476da1323b8ef7ffe33f495c1a8d52cc522b437022d83f6a230220159b61d197fbae01b4a66622a23bc3f1def65d5fa24efd5c26fa872f3a246b8e014104839f9023296a1fabb133140128ca2709f6818c7d099491690bd8ac0fd55279def6a2ceb6ab7b5e4a71889b6e739f09509565eec789e86886f6f936fa42097adeffffffff02000fe208010000001976a914948c765a6914d43f2a7ac177da2c2f6b52de3d7c88ac00e32321000000001976a9140c34f4e29ab5a615d5ea28d4817f12b137d62ed588ac00000000 \ No newline at end of file diff --git a/btcutil/txsort/testdata/bip69-4.hex b/btcutil/txsort/testdata/bip69-4.hex new file mode 100644 index 0000000000..f41d23f8b2 --- /dev/null +++ b/btcutil/txsort/testdata/bip69-4.hex @@ -0,0 +1 @@ +01000000059daf0abe7a92618546a9dbcfd65869b6178c66ec21ccfda878c1175979cfd9ef000000004a493046022100c2f7f25be5de6ce88ac3c1a519514379e91f39b31ddff279a3db0b1a229b708b022100b29efbdbd9837cc6a6c7318aa4900ed7e4d65662c34d1622a2035a3a5534a99a01ffffffffd516330ebdf075948da56db13d22632a4fb941122df2884397dda45d451acefb0000000048473044022051243debe6d4f2b433bee0cee78c5c4073ead0e3bde54296dbed6176e128659c022044417bfe16f44eb7b6eb0cdf077b9ce972a332e15395c09ca5e4f602958d266101ffffffffe1f5aa33961227b3c344e57179417ce01b7ccd421117fe2336289b70489883f900000000484730440220593252bb992ce3c85baf28d6e3aa32065816271d2c822398fe7ee28a856bc943022066d429dd5025d3c86fd8fd8a58e183a844bd94aa312cefe00388f57c85b0ca3201ffffffffe207e83718129505e6a7484831442f668164ae659fddb82e9e5421a081fb90d50000000049483045022067cf27eb733e5bcae412a586b25a74417c237161a084167c2a0b439abfebdcb2022100efcc6baa6824b4c5205aa967e0b76d31abf89e738d4b6b014e788c9a8cccaf0c01ffffffffe23b8d9d80a9e9d977fab3c94dbe37befee63822443c3ec5ae5a713ede66c3940000000049483045022020f2eb35036666b1debe0d1d2e77a36d5d9c4e96c1dba23f5100f193dbf524790221008ce79bc1321fb4357c6daee818038d41544749127751726e46b2b320c8b565a201ffffffff0200ba1dd2050000001976a914366a27645806e817a6cd40bc869bdad92fe5509188ac40420f00000000001976a914ee8bd501094a7d5ca318da2506de35e1cb025ddc88ac00000000 \ No newline at end of file diff --git a/btcutil/txsort/testdata/bip69-5.hex b/btcutil/txsort/testdata/bip69-5.hex new file mode 100644 index 0000000000..e1cb4d6131 --- /dev/null +++ b/btcutil/txsort/testdata/bip69-5.hex @@ -0,0 +1 @@ +01000000011f636d0003f673b3aeea4971daef16b8eed784cf6e8019a5ae7da4985fbb06e5000000008a47304402205103941e2b11e746dfa817888d422f6e7f4d16dbbfb8ffa61d15ffb924a84b8802202fe861b0f23f17139d15a3374bfc6c7196d371f3d1a324e31cc0aadbba87e53c0141049e7e1b251a7e26cae9ee7553b278ef58ef3c28b4b20134d51b747d9b18b0a19b94b66cef320e2549dec0ea3d725cb4c742f368928b1fb74b4603e24a1e262c80ffffffff0240420f00000000001976a914bcfa0e27218a7c97257b351b03a9eac95c25a23988ac40420f00000000001976a9140c6a68f20bafc678164d171ee4f077adfa9b091688ac00000000 \ No newline at end of file diff --git a/btcutil/txsort/txsort.go b/btcutil/txsort/txsort.go new file mode 100644 index 0000000000..f72a7db970 --- /dev/null +++ b/btcutil/txsort/txsort.go @@ -0,0 +1,95 @@ +// Copyright (c) 2015-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +// Provides functions for sorting tx inputs and outputs according to BIP 69 +// (https://github.com/bitcoin/bips/blob/master/bip-0069.mediawiki) + +package txsort + +import ( + "bytes" + "sort" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// InPlaceSort modifies the passed transaction inputs and outputs to be sorted +// based on BIP 69. +// +// WARNING: This function must NOT be called with published transactions since +// it will mutate the transaction if it's not already sorted. This can cause +// issues if you mutate a tx in a block, for example, which would invalidate the +// block. It could also cause cached hashes, such as in a btcutil.Tx to become +// invalidated. +// +// The function should only be used if the caller is creating the transaction or +// is otherwise 100% positive mutating will not cause adverse affects due to +// other dependencies. +func InPlaceSort(tx *wire.MsgTx) { + sort.Sort(sortableInputSlice(tx.TxIn)) + sort.Sort(sortableOutputSlice(tx.TxOut)) +} + +// Sort returns a new transaction with the inputs and outputs sorted based on +// BIP 69. The passed transaction is not modified and the new transaction +// might have a different hash if any sorting was done. +func Sort(tx *wire.MsgTx) *wire.MsgTx { + txCopy := tx.Copy() + sort.Sort(sortableInputSlice(txCopy.TxIn)) + sort.Sort(sortableOutputSlice(txCopy.TxOut)) + return txCopy +} + +// IsSorted checks whether tx has inputs and outputs sorted according to BIP +// 69. +func IsSorted(tx *wire.MsgTx) bool { + if !sort.IsSorted(sortableInputSlice(tx.TxIn)) { + return false + } + if !sort.IsSorted(sortableOutputSlice(tx.TxOut)) { + return false + } + return true +} + +type sortableInputSlice []*wire.TxIn +type sortableOutputSlice []*wire.TxOut + +// For SortableInputSlice and SortableOutputSlice, three functions are needed +// to make it sortable with sort.Sort() -- Len, Less, and Swap +// Len and Swap are trivial. Less is BIP 69 specific. +func (s sortableInputSlice) Len() int { return len(s) } +func (s sortableOutputSlice) Len() int { return len(s) } +func (s sortableOutputSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s sortableInputSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } + +// Input comparison function. +// First sort based on input hash (reversed / rpc-style), then index. +func (s sortableInputSlice) Less(i, j int) bool { + // Input hashes are the same, so compare the index. + ihash := s[i].PreviousOutPoint.Hash + jhash := s[j].PreviousOutPoint.Hash + if ihash == jhash { + return s[i].PreviousOutPoint.Index < s[j].PreviousOutPoint.Index + } + + // At this point, the hashes are not equal, so reverse them to + // big-endian and return the result of the comparison. + const hashSize = chainhash.HashSize + for b := 0; b < hashSize/2; b++ { + ihash[b], ihash[hashSize-1-b] = ihash[hashSize-1-b], ihash[b] + jhash[b], jhash[hashSize-1-b] = jhash[hashSize-1-b], jhash[b] + } + return bytes.Compare(ihash[:], jhash[:]) == -1 +} + +// Output comparison function. +// First sort based on amount (smallest first), then PkScript. +func (s sortableOutputSlice) Less(i, j int) bool { + if s[i].Value == s[j].Value { + return bytes.Compare(s[i].PkScript, s[j].PkScript) < 0 + } + return s[i].Value < s[j].Value +} diff --git a/btcutil/txsort/txsort_test.go b/btcutil/txsort/txsort_test.go new file mode 100644 index 0000000000..7d5c2d3eaf --- /dev/null +++ b/btcutil/txsort/txsort_test.go @@ -0,0 +1,124 @@ +// Copyright (c) 2015-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txsort_test + +import ( + "bytes" + "encoding/hex" + "io/ioutil" + "path/filepath" + "testing" + + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil/txsort" +) + +// TestSort ensures the transaction sorting works according to the BIP. +func TestSort(t *testing.T) { + tests := []struct { + name string + hexFile string + isSorted bool + unsortedHash string + sortedHash string + }{ + { + name: "first test case from BIP 69 - sorts inputs only, based on hash", + hexFile: "bip69-1.hex", + isSorted: false, + unsortedHash: "0a6a357e2f7796444e02638749d9611c008b253fb55f5dc88b739b230ed0c4c3", + sortedHash: "839503cb611a3e3734bd521c608f881be2293ff77b7384057ab994c794fce623", + }, + { + name: "second test case from BIP 69 - already sorted", + hexFile: "bip69-2.hex", + isSorted: true, + unsortedHash: "28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f", + sortedHash: "28204cad1d7fc1d199e8ef4fa22f182de6258a3eaafe1bbe56ebdcacd3069a5f", + }, + { + name: "block 100001 tx[1] - sorts outputs only, based on amount", + hexFile: "bip69-3.hex", + isSorted: false, + unsortedHash: "fbde5d03b027d2b9ba4cf5d4fecab9a99864df2637b25ea4cbcb1796ff6550ca", + sortedHash: "0a8c246c55f6b82f094d211f4f57167bf2ea4898741d218b09bdb2536fd8d13f", + }, + { + name: "block 100001 tx[2] - sorts both inputs and outputs", + hexFile: "bip69-4.hex", + isSorted: false, + unsortedHash: "8131ffb0a2c945ecaf9b9063e59558784f9c3a74741ce6ae2a18d0571dac15bb", + sortedHash: "a3196553b928b0b6154b002fa9a1ce875adabc486fedaaaf4c17430fd4486329", + }, + { + name: "block 100998 tx[6] - sorts outputs only, based on output script", + hexFile: "bip69-5.hex", + isSorted: false, + unsortedHash: "ff85e8fc92e71bbc217e3ea9a3bacb86b435e52b6df0b089d67302c293a2b81d", + sortedHash: "9a6c24746de024f77cac9b2138694f11101d1c66289261224ca52a25155a7c94", + }, + } + + for _, test := range tests { + // Load and deserialize the test transaction. + filePath := filepath.Join("testdata", test.hexFile) + txHexBytes, err := ioutil.ReadFile(filePath) + if err != nil { + t.Errorf("ReadFile (%s): failed to read test file: %v", + test.name, err) + continue + } + txBytes, err := hex.DecodeString(string(txHexBytes)) + if err != nil { + t.Errorf("DecodeString (%s): failed to decode tx: %v", + test.name, err) + continue + } + var tx wire.MsgTx + err = tx.Deserialize(bytes.NewReader(txBytes)) + if err != nil { + t.Errorf("Deserialize (%s): unexpected error %v", + test.name, err) + continue + } + + // Ensure the sort order of the original transaction matches the + // expected value. + if got := txsort.IsSorted(&tx); got != test.isSorted { + t.Errorf("IsSorted (%s): sort does not match "+ + "expected - got %v, want %v", test.name, got, + test.isSorted) + continue + } + + // Sort the transaction and ensure the resulting hash is the + // expected value. + sortedTx := txsort.Sort(&tx) + if got := sortedTx.TxHash().String(); got != test.sortedHash { + t.Errorf("Sort (%s): sorted hash does not match "+ + "expected - got %v, want %v", test.name, got, + test.sortedHash) + continue + } + + // Ensure the original transaction is not modified. + if got := tx.TxHash().String(); got != test.unsortedHash { + t.Errorf("Sort (%s): unsorted hash does not match "+ + "expected - got %v, want %v", test.name, got, + test.unsortedHash) + continue + } + + // Now sort the transaction using the mutable version and ensure + // the resulting hash is the expected value. + txsort.InPlaceSort(&tx) + if got := tx.TxHash().String(); got != test.sortedHash { + t.Errorf("SortMutate (%s): sorted hash does not match "+ + "expected - got %v, want %v", test.name, got, + test.sortedHash) + continue + } + } +} diff --git a/btcutil/wif.go b/btcutil/wif.go new file mode 100644 index 0000000000..a28cc8ba8d --- /dev/null +++ b/btcutil/wif.go @@ -0,0 +1,157 @@ +// Copyright (c) 2013-2016 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil + +import ( + "bytes" + "errors" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil/base58" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/chaincfg/chainhash" +) + +// ErrMalformedPrivateKey describes an error where a WIF-encoded private +// key cannot be decoded due to being improperly formatted. This may occur +// if the byte length is incorrect or an unexpected magic number was +// encountered. +var ErrMalformedPrivateKey = errors.New("malformed private key") + +// compressMagic is the magic byte used to identify a WIF encoding for +// an address created from a compressed serialized public key. +const compressMagic byte = 0x01 + +// WIF contains the individual components described by the Wallet Import Format +// (WIF). A WIF string is typically used to represent a private key and its +// associated address in a way that may be easily copied and imported into or +// exported from wallet software. WIF strings may be decoded into this +// structure by calling DecodeWIF or created with a user-provided private key +// by calling NewWIF. +type WIF struct { + // PrivKey is the private key being imported or exported. + PrivKey *btcec.PrivateKey + + // CompressPubKey specifies whether the address controlled by the + // imported or exported private key was created by hashing a + // compressed (33-byte) serialized public key, rather than an + // uncompressed (65-byte) one. + CompressPubKey bool + + // netID is the bitcoin network identifier byte used when + // WIF encoding the private key. + netID byte +} + +// NewWIF creates a new WIF structure to export an address and its private key +// as a string encoded in the Wallet Import Format. The compress argument +// specifies whether the address intended to be imported or exported was created +// by serializing the public key compressed rather than uncompressed. +func NewWIF(privKey *btcec.PrivateKey, net *chaincfg.Params, compress bool) (*WIF, error) { + if net == nil { + return nil, errors.New("no network") + } + return &WIF{privKey, compress, net.PrivateKeyID}, nil +} + +// IsForNet returns whether or not the decoded WIF structure is associated +// with the passed bitcoin network. +func (w *WIF) IsForNet(net *chaincfg.Params) bool { + return w.netID == net.PrivateKeyID +} + +// DecodeWIF creates a new WIF structure by decoding the string encoding of +// the import format. +// +// The WIF string must be a base58-encoded string of the following byte +// sequence: +// +// * 1 byte to identify the network, must be 0x80 for mainnet or 0xef for +// either testnet3 or the regression test network +// * 32 bytes of a binary-encoded, big-endian, zero-padded private key +// * Optional 1 byte (equal to 0x01) if the address being imported or exported +// was created by taking the RIPEMD160 after SHA256 hash of a serialized +// compressed (33-byte) public key +// * 4 bytes of checksum, must equal the first four bytes of the double SHA256 +// of every byte before the checksum in this sequence +// +// If the base58-decoded byte sequence does not match this, DecodeWIF will +// return a non-nil error. ErrMalformedPrivateKey is returned when the WIF +// is of an impossible length or the expected compressed pubkey magic number +// does not equal the expected value of 0x01. ErrChecksumMismatch is returned +// if the expected WIF checksum does not match the calculated checksum. +func DecodeWIF(wif string) (*WIF, error) { + decoded := base58.Decode(wif) + decodedLen := len(decoded) + var compress bool + + // Length of base58 decoded WIF must be 32 bytes + an optional 1 byte + // (0x01) if compressed, plus 1 byte for netID + 4 bytes of checksum. + switch decodedLen { + case 1 + btcec.PrivKeyBytesLen + 1 + 4: + if decoded[33] != compressMagic { + return nil, ErrMalformedPrivateKey + } + compress = true + case 1 + btcec.PrivKeyBytesLen + 4: + compress = false + default: + return nil, ErrMalformedPrivateKey + } + + // Checksum is first four bytes of double SHA256 of the identifier byte + // and privKey. Verify this matches the final 4 bytes of the decoded + // private key. + var tosum []byte + if compress { + tosum = decoded[:1+btcec.PrivKeyBytesLen+1] + } else { + tosum = decoded[:1+btcec.PrivKeyBytesLen] + } + cksum := chainhash.DoubleHashB(tosum)[:4] + if !bytes.Equal(cksum, decoded[decodedLen-4:]) { + return nil, ErrChecksumMismatch + } + + netID := decoded[0] + privKeyBytes := decoded[1 : 1+btcec.PrivKeyBytesLen] + privKey, _ := btcec.PrivKeyFromBytes(privKeyBytes) + return &WIF{privKey, compress, netID}, nil +} + +// String creates the Wallet Import Format string encoding of a WIF structure. +// See DecodeWIF for a detailed breakdown of the format and requirements of +// a valid WIF string. +func (w *WIF) String() string { + // Precalculate size. Maximum number of bytes before base58 encoding + // is one byte for the network, 32 bytes of private key, possibly one + // extra byte if the pubkey is to be compressed, and finally four + // bytes of checksum. + encodeLen := 1 + btcec.PrivKeyBytesLen + 4 + if w.CompressPubKey { + encodeLen++ + } + + a := make([]byte, 0, encodeLen) + a = append(a, w.netID) + a = append(a, w.PrivKey.Serialize()...) + if w.CompressPubKey { + a = append(a, compressMagic) + } + cksum := chainhash.DoubleHashB(a)[:4] + a = append(a, cksum...) + return base58.Encode(a) +} + +// SerializePubKey serializes the associated public key of the imported or +// exported private key in either a compressed or uncompressed format. The +// serialization format chosen depends on the value of w.CompressPubKey. +func (w *WIF) SerializePubKey() []byte { + pk := w.PrivKey.PubKey() + if w.CompressPubKey { + return pk.SerializeCompressed() + } + return pk.SerializeUncompressed() +} diff --git a/btcutil/wif_test.go b/btcutil/wif_test.go new file mode 100644 index 0000000000..c255c1b54f --- /dev/null +++ b/btcutil/wif_test.go @@ -0,0 +1,160 @@ +// Copyright (c) 2013 - 2020 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package btcutil_test + +import ( + "bytes" + "encoding/hex" + "testing" + + "github.com/btcsuite/btcd/btcec/v2" + . "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/chaincfg" +) + +func TestEncodeDecodeWIF(t *testing.T) { + validEncodeCases := []struct { + privateKey []byte // input + net *chaincfg.Params // input + compress bool // input + wif string // output + publicKey []byte // output + name string // name of subtest + }{ + { + privateKey: []byte{ + 0x0c, 0x28, 0xfc, 0xa3, 0x86, 0xc7, 0xa2, 0x27, + 0x60, 0x0b, 0x2f, 0xe5, 0x0b, 0x7c, 0xae, 0x11, + 0xec, 0x86, 0xd3, 0xbf, 0x1f, 0xbe, 0x47, 0x1b, + 0xe8, 0x98, 0x27, 0xe1, 0x9d, 0x72, 0xaa, 0x1d}, + net: &chaincfg.MainNetParams, + compress: false, + wif: "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTJ", + publicKey: []byte{ + 0x04, 0xd0, 0xde, 0x0a, 0xae, 0xae, 0xfa, 0xd0, + 0x2b, 0x8b, 0xdc, 0x8a, 0x01, 0xa1, 0xb8, 0xb1, + 0x1c, 0x69, 0x6b, 0xd3, 0xd6, 0x6a, 0x2c, 0x5f, + 0x10, 0x78, 0x0d, 0x95, 0xb7, 0xdf, 0x42, 0x64, + 0x5c, 0xd8, 0x52, 0x28, 0xa6, 0xfb, 0x29, 0x94, + 0x0e, 0x85, 0x8e, 0x7e, 0x55, 0x84, 0x2a, 0xe2, + 0xbd, 0x11, 0x5d, 0x1e, 0xd7, 0xcc, 0x0e, 0x82, + 0xd9, 0x34, 0xe9, 0x29, 0xc9, 0x76, 0x48, 0xcb, + 0x0a}, + name: "encodeValidUncompressedMainNetWif", + }, + { + privateKey: []byte{ + 0xdd, 0xa3, 0x5a, 0x14, 0x88, 0xfb, 0x97, 0xb6, + 0xeb, 0x3f, 0xe6, 0xe9, 0xef, 0x2a, 0x25, 0x81, + 0x4e, 0x39, 0x6f, 0xb5, 0xdc, 0x29, 0x5f, 0xe9, + 0x94, 0xb9, 0x67, 0x89, 0xb2, 0x1a, 0x03, 0x98}, + net: &chaincfg.TestNet3Params, + compress: true, + wif: "cV1Y7ARUr9Yx7BR55nTdnR7ZXNJphZtCCMBTEZBJe1hXt2kB684q", + publicKey: []byte{ + 0x02, 0xee, 0xc2, 0x54, 0x06, 0x61, 0xb0, 0xc3, + 0x9d, 0x27, 0x15, 0x70, 0x74, 0x24, 0x13, 0xbd, + 0x02, 0x93, 0x2d, 0xd0, 0x09, 0x34, 0x93, 0xfd, + 0x0b, 0xec, 0xed, 0x0b, 0x7f, 0x93, 0xad, 0xde, + 0xc4}, + name: "encodeValidCompressedTestNet3Wif", + }, + } + + for _, validCase := range validEncodeCases { + validCase := validCase + + t.Run(validCase.name, func(t *testing.T) { + priv, _ := btcec.PrivKeyFromBytes(validCase.privateKey) + wif, err := NewWIF(priv, validCase.net, validCase.compress) + if err != nil { + t.Fatalf("NewWIF failed: expected no error, got '%v'", err) + } + + if !wif.IsForNet(validCase.net) { + t.Fatal("IsForNet failed: got 'false', want 'true'") + } + + if gotPubKey := wif.SerializePubKey(); !bytes.Equal(gotPubKey, validCase.publicKey) { + t.Fatalf("SerializePubKey failed: got '%s', want '%s'", + hex.EncodeToString(gotPubKey), hex.EncodeToString(validCase.publicKey)) + } + + // Test that encoding the WIF structure matches the expected string. + got := wif.String() + if got != validCase.wif { + t.Fatalf("NewWIF failed: want '%s', got '%s'", + validCase.wif, got) + } + + // Test that decoding the expected string results in the original WIF + // structure. + decodedWif, err := DecodeWIF(got) + if err != nil { + t.Fatalf("DecodeWIF failed: expected no error, got '%v'", err) + } + if decodedWifString := decodedWif.String(); decodedWifString != validCase.wif { + t.Fatalf("NewWIF failed: want '%v', got '%v'", validCase.wif, decodedWifString) + } + }) + } + + invalidDecodeCases := []struct { + name string + wif string + err error + }{ + { + name: "decodeInvalidLengthWif", + wif: "deadbeef", + err: ErrMalformedPrivateKey, + }, + { + name: "decodeInvalidCompressMagicWif", + wif: "KwDiBf89QgGbjEhKnhXJuH7LrciVrZi3qYjgd9M7rFU73sfZr2ym", + err: ErrMalformedPrivateKey, + }, + { + name: "decodeInvalidChecksumWif", + wif: "5HueCGU8rMjxEXxiPuD5BDku4MkFqeZyd4dZ1jvhTVqvbTLvyTj", + err: ErrChecksumMismatch, + }, + } + + for _, invalidCase := range invalidDecodeCases { + invalidCase := invalidCase + + t.Run(invalidCase.name, func(t *testing.T) { + decodedWif, err := DecodeWIF(invalidCase.wif) + if decodedWif != nil { + t.Fatalf("DecodeWIF: unexpectedly succeeded - got '%v', want '%v'", + decodedWif, nil) + } + if err != invalidCase.err { + t.Fatalf("DecodeWIF: expected error '%v', got '%v'", + invalidCase.err, err) + } + }) + } + + t.Run("encodeInvalidNetworkWif", func(t *testing.T) { + privateKey := []byte{ + 0x0c, 0x28, 0xfc, 0xa3, 0x86, 0xc7, 0xa2, 0x27, + 0x60, 0x0b, 0x2f, 0xe5, 0x0b, 0x7c, 0xae, 0x11, + 0xec, 0x86, 0xd3, 0xbf, 0x1f, 0xbe, 0x47, 0x1b, + 0xe8, 0x98, 0x27, 0xe1, 0x9d, 0x72, 0xaa, 0x1d} + priv, _ := btcec.PrivKeyFromBytes(privateKey) + + wif, err := NewWIF(priv, nil, true) + + if wif != nil { + t.Fatalf("NewWIF: unexpectedly succeeded - got '%v', want '%v'", + wif, nil) + } + if err == nil || err.Error() != "no network" { + t.Fatalf("NewWIF: expected error 'no network', got '%v'", err) + } + }) +} diff --git a/chaincfg/README.md b/chaincfg/README.md index 880446fdc7..d1a534bafe 100644 --- a/chaincfg/README.md +++ b/chaincfg/README.md @@ -1,9 +1,9 @@ chaincfg ======== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/chaincfg) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/chaincfg) Package chaincfg defines chain configuration parameters for the three standard Bitcoin networks and provides the ability for callers to define their own custom @@ -24,7 +24,7 @@ import ( "fmt" "log" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" ) diff --git a/chaincfg/chainhash/README.md b/chaincfg/chainhash/README.md index fc49d9cd93..b7ddf19ef7 100644 --- a/chaincfg/chainhash/README.md +++ b/chaincfg/chainhash/README.md @@ -1,9 +1,9 @@ chainhash ========= -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/chaincfg/chainhash) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/chaincfg/chainhash) ======= chainhash provides a generic hash type and associated functions that allows the diff --git a/chaincfg/chainhash/go.mod b/chaincfg/chainhash/go.mod new file mode 100644 index 0000000000..1d865254dd --- /dev/null +++ b/chaincfg/chainhash/go.mod @@ -0,0 +1,3 @@ +module github.com/btcsuite/btcd/chaincfg/chainhash + +go 1.17 diff --git a/chaincfg/chainhash/hash.go b/chaincfg/chainhash/hash.go index 2b1cec022b..764ec3c40a 100644 --- a/chaincfg/chainhash/hash.go +++ b/chaincfg/chainhash/hash.go @@ -6,6 +6,7 @@ package chainhash import ( + "crypto/sha256" "encoding/hex" "fmt" ) @@ -16,6 +17,46 @@ const HashSize = 32 // MaxHashStringSize is the maximum length of a Hash hash string. const MaxHashStringSize = HashSize * 2 +var ( + // TagBIP0340Challenge is the BIP-0340 tag for challenges. + TagBIP0340Challenge = []byte("BIP0340/challenge") + + // TagBIP0340Aux is the BIP-0340 tag for aux data. + TagBIP0340Aux = []byte("BIP0340/aux") + + // TagBIP0340Nonce is the BIP-0340 tag for nonces. + TagBIP0340Nonce = []byte("BIP0340/nonce") + + // TagTapSighash is the tag used by BIP 341 to generate the sighash + // flags. + TagTapSighash = []byte("TapSighash") + + // TagTagTapLeaf is the message tag prefix used to compute the hash + // digest of a tapscript leaf. + TagTapLeaf = []byte("TapLeaf") + + // TagTapBranch is the message tag prefix used to compute the + // hash digest of two tap leaves into a taproot branch node. + TagTapBranch = []byte("TapBranch") + + // TagTapTweak is the message tag prefix used to compute the hash tweak + // used to enable a public key to commit to the taproot branch root + // for the witness program. + TagTapTweak = []byte("TapTweak") + + // precomputedTags is a map containing the SHA-256 hash of the BIP-0340 + // tags. + precomputedTags = map[string]Hash{ + string(TagBIP0340Challenge): sha256.Sum256(TagBIP0340Challenge), + string(TagBIP0340Aux): sha256.Sum256(TagBIP0340Aux), + string(TagBIP0340Nonce): sha256.Sum256(TagBIP0340Nonce), + string(TagTapSighash): sha256.Sum256(TagTapSighash), + string(TagTapLeaf): sha256.Sum256(TagTapLeaf), + string(TagTapBranch): sha256.Sum256(TagTapBranch), + string(TagTapTweak): sha256.Sum256(TagTapTweak), + } +) + // ErrHashStrSize describes an error that indicates the caller specified a hash // string that has too many characters. var ErrHashStrSize = fmt.Errorf("max hash string length is %v bytes", MaxHashStringSize) @@ -80,6 +121,35 @@ func NewHash(newHash []byte) (*Hash, error) { return &sh, err } +// TaggedHash implements the tagged hash scheme described in BIP-340. We use +// sha-256 to bind a message hash to a specific context using a tag: +// sha256(sha256(tag) || sha256(tag) || msg). +func TaggedHash(tag []byte, msgs ...[]byte) *Hash { + // Check to see if we've already pre-computed the hash of the tag. If + // so then this'll save us an extra sha256 hash. + shaTag, ok := precomputedTags[string(tag)] + if !ok { + shaTag = sha256.Sum256(tag) + } + + // h = sha256(sha256(tag) || sha256(tag) || msg) + h := sha256.New() + h.Write(shaTag[:]) + h.Write(shaTag[:]) + + for _, msg := range msgs { + h.Write(msg) + } + + taggedHash := h.Sum(nil) + + // The function can't error out since the above hash is guaranteed to + // be 32 bytes. + hash, _ := NewHash(taggedHash) + + return hash +} + // NewHashFromStr creates a Hash from a hash string. The string should be // the hexadecimal string of a byte-reversed hash, but any missing characters // result in zero padding at the end of the Hash. diff --git a/chaincfg/deployment_time_frame.go b/chaincfg/deployment_time_frame.go new file mode 100644 index 0000000000..f26d429090 --- /dev/null +++ b/chaincfg/deployment_time_frame.go @@ -0,0 +1,185 @@ +package chaincfg + +import ( + "fmt" + "time" + + "github.com/btcsuite/btcd/wire" +) + +var ( + // ErrNoBlockClock is returned when an operation fails due to lack of + // synchornization with the current up to date block clock. + ErrNoBlockClock = fmt.Errorf("no block clock synchronized") +) + +// BlockClock is an abstraction over the past median time computation. The past +// median time computation is used in several consensus checks such as CSV, and +// also BIP 9 version bits. This interface allows callers to abstract away the +// computation of the past median time from the perspective of a given block +// header. +type BlockClock interface { + // PastMedianTime returns the past median time from the PoV of the + // passed block header. The past median time is the median time of the + // 11 blocks prior to the passed block header. + PastMedianTime(*wire.BlockHeader) (time.Time, error) +} + +// ConsensusDeploymentStarter determines if a given consensus deployment has +// started. A deployment has started once according to the current "time", the +// deployment is eligible for activation once a perquisite condition has +// passed. +type ConsensusDeploymentStarter interface { + // HasStarted returns true if the consensus deployment has started. + HasStarted(*wire.BlockHeader) (bool, error) +} + +// ClockConsensusDeploymentStarter is a more specialized version of the +// ConsensusDeploymentStarter that uses a BlockClock in order to determine if a +// deployment has started or not. +// +// NOTE: Any calls to HasStarted will _fail_ with ErrNoBlockClock if they +// happen before SynchronizeClock is executed. +type ClockConsensusDeploymentStarter interface { + ConsensusDeploymentStarter + + // SynchronizeClock synchronizes the target ConsensusDeploymentStarter + // with the current up-to date BlockClock. + SynchronizeClock(clock BlockClock) +} + +// ConsensusDeploymentEnder determines if a given consensus deployment has +// ended. A deployment has ended once according got eh current "time", the +// deployment is no longer eligible for activation. +type ConsensusDeploymentEnder interface { + // HasEnded returns true if the consensus deployment has ended. + HasEnded(*wire.BlockHeader) (bool, error) +} + +// ClockConsensusDeploymentEnder is a more specialized version of the +// ConsensusDeploymentEnder that uses a BlockClock in order to determine if a +// deployment has started or not. +// +// NOTE: Any calls to HasEnded will _fail_ with ErrNoBlockClock if they +// happen before SynchronizeClock is executed. +type ClockConsensusDeploymentEnder interface { + ConsensusDeploymentEnder + + // SynchronizeClock synchronizes the target ConsensusDeploymentStarter + // with the current up-to date BlockClock. + SynchronizeClock(clock BlockClock) +} + +// MedianTimeDeploymentStarter is a ClockConsensusDeploymentStarter that uses +// the median time past of a target block node to determine if a deployment has +// started. +type MedianTimeDeploymentStarter struct { + blockClock BlockClock + + startTime time.Time +} + +// NewMedianTimeDeploymentStarter returns a new instance of a +// MedianTimeDeploymentStarter for a given start time. Using a time.Time +// instance where IsZero() is true, indicates that a deployment should be +// considered to always have been started. +func NewMedianTimeDeploymentStarter(startTime time.Time) *MedianTimeDeploymentStarter { + return &MedianTimeDeploymentStarter{ + startTime: startTime, + } +} + +// SynchronizeClock synchronizes the target ConsensusDeploymentStarter with the +// current up-to date BlockClock. +func (m *MedianTimeDeploymentStarter) SynchronizeClock(clock BlockClock) { + m.blockClock = clock +} + +// HasStarted returns true if the consensus deployment has started. +func (m *MedianTimeDeploymentStarter) HasStarted(blkHeader *wire.BlockHeader) (bool, error) { + switch { + // If we haven't yet been synchronized with a block clock, then we + // can't tell the time, so we'll fail. + case m.blockClock == nil: + return false, ErrNoBlockClock + + // If the time is "zero", then the deployment has always started. + case m.startTime.IsZero(): + return true, nil + } + + medianTime, err := m.blockClock.PastMedianTime(blkHeader) + if err != nil { + return false, err + } + + // We check both after and equal here as after will fail for equivalent + // times, and we want to be inclusive. + return medianTime.After(m.startTime) || medianTime.Equal(m.startTime), nil +} + +// StartTime returns the raw start time of the deployment. +func (m *MedianTimeDeploymentStarter) StartTime() time.Time { + return m.startTime +} + +// A compile-time assertion to ensure MedianTimeDeploymentStarter implements +// the ClockConsensusDeploymentStarter interface. +var _ ClockConsensusDeploymentStarter = (*MedianTimeDeploymentStarter)(nil) + +// MedianTimeDeploymentEnder is a ClockConsensusDeploymentEnder that uses the +// median time past of a target block to determine if a deployment has ended. +type MedianTimeDeploymentEnder struct { + blockClock BlockClock + + endTime time.Time +} + +// NewMedianTimeDeploymentEnder returns a new instance of the +// MedianTimeDeploymentEnder anchored around the passed endTime. Using a +// time.Time instance where IsZero() is true, indicates that a deployment +// should be considered to never end. +func NewMedianTimeDeploymentEnder(endTime time.Time) *MedianTimeDeploymentEnder { + return &MedianTimeDeploymentEnder{ + endTime: endTime, + } +} + +// HasEnded returns true if the deployment has ended. +func (m *MedianTimeDeploymentEnder) HasEnded(blkHeader *wire.BlockHeader) (bool, error) { + switch { + // If we haven't yet been synchronized with a block clock, then we can't tell + // the time, so we'll we haven't yet been synchronized with a block + // clock, then w can't tell the time, so we'll fail. + case m.blockClock == nil: + return false, ErrNoBlockClock + + // If the time is "zero", then the deployment never ends. + case m.endTime.IsZero(): + return false, nil + } + + medianTime, err := m.blockClock.PastMedianTime(blkHeader) + if err != nil { + return false, err + } + + // We check both after and equal here as after will fail for equivalent + // times, and we want to be inclusive. + return medianTime.After(m.endTime) || medianTime.Equal(m.endTime), nil +} + +// MedianTimeDeploymentEnder returns the raw end time of the deployment. +func (m *MedianTimeDeploymentEnder) EndTime() time.Time { + return m.endTime +} + +// SynchronizeClock synchronizes the target ConsensusDeploymentEnder with the +// current up-to date BlockClock. +func (m *MedianTimeDeploymentEnder) SynchronizeClock(clock BlockClock) { + m.blockClock = clock +} + +// A compile-time assertion to ensure MedianTimeDeploymentEnder implements the +// ClockConsensusDeploymentStarter interface. +var _ ClockConsensusDeploymentEnder = (*MedianTimeDeploymentEnder)(nil) diff --git a/chaincfg/doc.go b/chaincfg/doc.go index 3659adbf46..1595b2769f 100644 --- a/chaincfg/doc.go +++ b/chaincfg/doc.go @@ -25,7 +25,7 @@ // "fmt" // "log" // -// "github.com/btcsuite/btcutil" +// "github.com/btcsuite/btcd/btcutil" // "github.com/btcsuite/btcd/chaincfg" // ) // diff --git a/chaincfg/genesis.go b/chaincfg/genesis.go index ee47b84ce4..73d286102b 100644 --- a/chaincfg/genesis.go +++ b/chaincfg/genesis.go @@ -170,3 +170,31 @@ var simNetGenesisBlock = wire.MsgBlock{ }, Transactions: []*wire.MsgTx{&genesisCoinbaseTx}, } + +// sigNetGenesisHash is the hash of the first block in the block chain for the +// signet test network. +var sigNetGenesisHash = chainhash.Hash{ + 0xf6, 0x1e, 0xee, 0x3b, 0x63, 0xa3, 0x80, 0xa4, + 0x77, 0xa0, 0x63, 0xaf, 0x32, 0xb2, 0xbb, 0xc9, + 0x7c, 0x9f, 0xf9, 0xf0, 0x1f, 0x2c, 0x42, 0x25, + 0xe9, 0x73, 0x98, 0x81, 0x08, 0x00, 0x00, 0x00, +} + +// sigNetGenesisMerkleRoot is the hash of the first transaction in the genesis +// block for the signet test network. It is the same as the merkle root for +// the main network. +var sigNetGenesisMerkleRoot = genesisMerkleRoot + +// sigNetGenesisBlock defines the genesis block of the block chain which serves +// as the public transaction ledger for the signet test network. +var sigNetGenesisBlock = wire.MsgBlock{ + Header: wire.BlockHeader{ + Version: 1, + PrevBlock: chainhash.Hash{}, // 0000000000000000000000000000000000000000000000000000000000000000 + MerkleRoot: sigNetGenesisMerkleRoot, // 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b + Timestamp: time.Unix(1598918400, 0), // 2020-09-01 00:00:00 +0000 UTC + Bits: 0x1e0377ae, // 503543726 [00000377ae000000000000000000000000000000000000000000000000000000] + Nonce: 52613770, + }, + Transactions: []*wire.MsgTx{&genesisCoinbaseTx}, +} diff --git a/chaincfg/genesis_test.go b/chaincfg/genesis_test.go index d04a72f758..1daf847916 100644 --- a/chaincfg/genesis_test.go +++ b/chaincfg/genesis_test.go @@ -118,6 +118,33 @@ func TestSimNetGenesisBlock(t *testing.T) { } } +// TestSigNetGenesisBlock tests the genesis block of the signet test network for +// validity by checking the encoded bytes and hashes. +func TestSigNetGenesisBlock(t *testing.T) { + // Encode the genesis block to raw bytes. + var buf bytes.Buffer + err := SigNetParams.GenesisBlock.Serialize(&buf) + if err != nil { + t.Fatalf("TestSigNetGenesisBlock: %v", err) + } + + // Ensure the encoded block matches the expected bytes. + if !bytes.Equal(buf.Bytes(), sigNetGenesisBlockBytes) { + t.Fatalf("TestSigNetGenesisBlock: Genesis block does not "+ + "appear valid - got %v, want %v", + spew.Sdump(buf.Bytes()), + spew.Sdump(sigNetGenesisBlockBytes)) + } + + // Check hash of the block against expected hash. + hash := SigNetParams.GenesisBlock.BlockHash() + if !SigNetParams.GenesisHash.IsEqual(&hash) { + t.Fatalf("TestSigNetGenesisBlock: Genesis block hash does "+ + "not appear valid - got %v, want %v", spew.Sdump(hash), + spew.Sdump(SigNetParams.GenesisHash)) + } +} + // genesisBlockBytes are the wire encoded bytes for the genesis block of the // main network as of protocol version 60002. var genesisBlockBytes = []byte{ @@ -281,3 +308,44 @@ var simNetGenesisBlockBytes = []byte{ 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d, 0x5f, /* |.Lp+k.._|*/ 0xac, 0x00, 0x00, 0x00, 0x00, /* |.....| */ } + +// sigNetGenesisBlockBytes are the wire encoded bytes for the genesis block of +// the signet test network as of protocol version 70002. +var sigNetGenesisBlockBytes = []byte{ + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* |...@....| */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* |........| */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* |........| */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* |........| */ + 0x00, 0x00, 0x00, 0x00, 0x3b, 0xa3, 0xed, 0xfd, /* |........| */ + 0x7a, 0x7b, 0x12, 0xb2, 0x7a, 0xc7, 0x2c, 0x3e, /* |....;...| */ + 0x67, 0x76, 0x8f, 0x61, 0x7f, 0xc8, 0x1b, 0xc3, /* |z{..z.,>| */ + 0x88, 0x8a, 0x51, 0x32, 0x3a, 0x9f, 0xb8, 0xaa, /* |gv.a....| */ + 0x4b, 0x1e, 0x5e, 0x4a, 0x00, 0x8f, 0x4d, 0x5f, /* |..Q2:...| */ + 0xae, 0x77, 0x03, 0x1e, 0x8a, 0xd2, 0x22, 0x03, /* |K.^J..M_| */ + 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, /* |.w....".| */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* |........| */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* |........| */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* |........| */ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* |........| */ + 0xff, 0xff, 0x4d, 0x04, 0xff, 0xff, 0x00, 0x1d, /* |........| */ + 0x01, 0x04, 0x45, 0x54, 0x68, 0x65, 0x20, 0x54, /* |..M.....| */ + 0x69, 0x6d, 0x65, 0x73, 0x20, 0x30, 0x33, 0x2f, /* |..EThe T| */ + 0x4a, 0x61, 0x6e, 0x2f, 0x32, 0x30, 0x30, 0x39, /* |imes 03/| */ + 0x20, 0x43, 0x68, 0x61, 0x6e, 0x63, 0x65, 0x6c, /* |Jan/2009| */ + 0x6c, 0x6f, 0x72, 0x20, 0x6f, 0x6e, 0x20, 0x62, /* | Chancel| */ + 0x72, 0x69, 0x6e, 0x6b, 0x20, 0x6f, 0x66, 0x20, /* |lor on b| */ + 0x73, 0x65, 0x63, 0x6f, 0x6e, 0x64, 0x20, 0x62, /* |rink of| */ + 0x61, 0x69, 0x6c, 0x6f, 0x75, 0x74, 0x20, 0x66, /* |second b| */ + 0x6f, 0x72, 0x20, 0x62, 0x61, 0x6e, 0x6b, 0x73, /* |ailout f| */ + 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, 0xf2, 0x05, /* |or banks| */ + 0x2a, 0x01, 0x00, 0x00, 0x00, 0x43, 0x41, 0x04, /* |........| */ + 0x67, 0x8a, 0xfd, 0xb0, 0xfe, 0x55, 0x48, 0x27, /* |*....CA.| */ + 0x19, 0x67, 0xf1, 0xa6, 0x71, 0x30, 0xb7, 0x10, /* |g....UH'| */ + 0x5c, 0xd6, 0xa8, 0x28, 0xe0, 0x39, 0x09, 0xa6, /* |.g..q0..| */ + 0x79, 0x62, 0xe0, 0xea, 0x1f, 0x61, 0xde, 0xb6, /* |\..(.9..| */ + 0x49, 0xf6, 0xbc, 0x3f, 0x4c, 0xef, 0x38, 0xc4, /* |yb...a..| */ + 0xf3, 0x55, 0x04, 0xe5, 0x1e, 0xc1, 0x12, 0xde, /* |I..?L.8.| */ + 0x5c, 0x38, 0x4d, 0xf7, 0xba, 0x0b, 0x8d, 0x57, /* |.U......| */ + 0x8a, 0x4c, 0x70, 0x2b, 0x6b, 0xf1, 0x1d, 0x5f, /* |\8M....W| */ + 0xac, 0x00, 0x00, 0x00, 0x00, /* |.....| */ +} diff --git a/chaincfg/params.go b/chaincfg/params.go index 54117b8713..2387c203ae 100644 --- a/chaincfg/params.go +++ b/chaincfg/params.go @@ -5,8 +5,9 @@ package chaincfg import ( + "encoding/binary" + "encoding/hex" "errors" - "math" "math/big" "strings" "time" @@ -38,6 +39,30 @@ var ( // simNetPowLimit is the highest proof of work value a Bitcoin block // can have for the simulation test network. It is the value 2^255 - 1. simNetPowLimit = new(big.Int).Sub(new(big.Int).Lsh(bigOne, 255), bigOne) + + // sigNetPowLimit is the highest proof of work value a bitcoin block can + // have for the signet test network. It is the value 0x0377ae << 216. + sigNetPowLimit = new(big.Int).Lsh(new(big.Int).SetInt64(0x0377ae), 216) + + // DefaultSignetChallenge is the byte representation of the signet + // challenge for the default (public, Taproot enabled) signet network. + // This is the binary equivalent of the bitcoin script + // 1 03ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d1e086be430 + // 0359ef5021964fe22d6f8e05b2463c9540ce96883fe3b278760f048f5189f2e6c4 2 + // OP_CHECKMULTISIG + DefaultSignetChallenge, _ = hex.DecodeString( + "512103ad5e0edad18cb1f0fc0d28a3d4f1f3e445640337489abb10404f2d" + + "1e086be430210359ef5021964fe22d6f8e05b2463c9540ce9688" + + "3fe3b278760f048f5189f2e6c452ae", + ) + + // DefaultSignetDNSSeeds is the list of seed nodes for the default + // (public, Taproot enabled) signet network. + DefaultSignetDNSSeeds = []DNSSeed{ + {"178.128.221.177", false}, + {"2a01:7c8:d005:390::5", false}, + {"v7ajjeirttkbnt32wpy3c6w3emwnfr3fkla7hpxcfokr3ysd3kqtzmqd.onion:38333", false}, + } ) // Checkpoint identifies a known good point in the block chain. Using @@ -69,13 +94,26 @@ type ConsensusDeployment struct { // this particular soft-fork deployment refers to. BitNumber uint8 - // StartTime is the median block time after which voting on the - // deployment starts. - StartTime uint64 - - // ExpireTime is the median block time after which the attempted - // deployment expires. - ExpireTime uint64 + // MinActivationHeight is an optional field that when set (default + // value being zero), modifies the traditional BIP 9 state machine by + // only transitioning from LockedIn to Active once the block height is + // greater than (or equal to) thus specified height. + MinActivationHeight uint32 + + // CustomActivationThreshold if set (non-zero), will _override_ the + // existing RuleChangeActivationThreshold value set at the + // network/chain level. This value divided by the active + // MinerConfirmationWindow denotes the threshold required for + // activation. A value of 1815 block denotes a 90% threshold. + CustomActivationThreshold uint32 + + // DeploymentStarter is used to determine if the given + // ConsensusDeployment has started or not. + DeploymentStarter ConsensusDeploymentStarter + + // DeploymentEnder is used to determine if the given + // ConsensusDeployment has ended or not. + DeploymentEnder ConsensusDeploymentEnder } // Constants that define the deployment offset in the deployments field of the @@ -86,6 +124,12 @@ const ( // purposes. DeploymentTestDummy = iota + // DeploymentTestDummyMinActivation defines the rule change deployment + // ID for testing purposes. This differs from the DeploymentTestDummy + // in that it specifies the newer params the taproot fork used for + // activation: a custom threshold and a min activation height. + DeploymentTestDummyMinActivation + // DeploymentCSV defines the rule change deployment ID for the CSV // soft-fork package. The CSV package includes the deployment of BIPS // 68, 112, and 113. @@ -96,6 +140,11 @@ const ( // includes the deployment of BIPS 141, 142, 144, 145, 147 and 173. DeploymentSegwit + // DeploymentTaproot defines the rule change deployment ID for the + // Taproot (+Schnorr) soft-fork package. The taproot package includes + // the deployment of BIPS 340, 341 and 342. + DeploymentTaproot + // NOTE: DefinedDeployments must always come last since it is used to // determine how many defined deployments there currently are. @@ -289,19 +338,53 @@ var MainNetParams = Params{ MinerConfirmationWindow: 2016, // Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 1199145601, // January 1, 2008 UTC - ExpireTime: 1230767999, // December 31, 2008 UTC + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(11991456010, 0), // January 1, 2008 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1230767999, 0), // December 31, 2008 UTC + ), + }, + DeploymentTestDummyMinActivation: { + BitNumber: 22, + CustomActivationThreshold: 1815, // Only needs 90% hash rate. + MinActivationHeight: 10_0000, // Can only activate after height 10k. + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 1462060800, // May 1st, 2016 - ExpireTime: 1493596800, // May 1st, 2017 + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1462060800, 0), // May 1st, 2016 + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1493596800, 0), // May 1st, 2017 + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 1479168000, // November 15, 2016 UTC - ExpireTime: 1510704000, // November 15, 2017 UTC. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1479168000, 0), // November 15, 2016 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1510704000, 0), // November 15, 2017 UTC. + ), + }, + DeploymentTaproot: { + BitNumber: 2, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1619222400, 0), // April 24th, 2021 UTC. + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1628640000, 0), // August 11th, 2021 UTC. + ), + CustomActivationThreshold: 1815, // 90% + MinActivationHeight: 709_632, }, }, @@ -365,19 +448,52 @@ var RegressionNetParams = Params{ MinerConfirmationWindow: 144, Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), + }, + DeploymentTestDummyMinActivation: { + BitNumber: 22, + CustomActivationThreshold: 72, // Only needs 50% hash rate. + MinActivationHeight: 600, // Can only activate after height 600. + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), + }, + DeploymentTaproot: { + BitNumber: 2, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), + CustomActivationThreshold: 108, // Only needs 75% hash rate. }, }, @@ -459,19 +575,52 @@ var TestNet3Params = Params{ MinerConfirmationWindow: 2016, Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 1199145601, // January 1, 2008 UTC - ExpireTime: 1230767999, // December 31, 2008 UTC + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1199145601, 0), // January 1, 2008 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1230767999, 0), // December 31, 2008 UTC + ), + }, + DeploymentTestDummyMinActivation: { + BitNumber: 22, + CustomActivationThreshold: 1815, // Only needs 90% hash rate. + MinActivationHeight: 10_0000, // Can only activate after height 10k. + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 1456790400, // March 1st, 2016 - ExpireTime: 1493596800, // May 1st, 2017 + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1456790400, 0), // March 1st, 2016 + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1493596800, 0), // May 1st, 2017 + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 1462060800, // May 1, 2016 UTC - ExpireTime: 1493596800, // May 1, 2017 UTC. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1462060800, 0), // May 1, 2016 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1493596800, 0), // May 1, 2017 UTC. + ), + }, + DeploymentTaproot: { + BitNumber: 2, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1619222400, 0), // April 24th, 2021 UTC. + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1628640000, 0), // August 11th, 2021 UTC + ), + CustomActivationThreshold: 1512, // 75% }, }, @@ -539,19 +688,52 @@ var SimNetParams = Params{ MinerConfirmationWindow: 100, Deployments: [DefinedDeployments]ConsensusDeployment{ DeploymentTestDummy: { - BitNumber: 28, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), + }, + DeploymentTestDummyMinActivation: { + BitNumber: 22, + CustomActivationThreshold: 50, // Only needs 50% hash rate. + MinActivationHeight: 600, // Can only activate after height 600. + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentCSV: { - BitNumber: 0, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires + BitNumber: 0, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), }, DeploymentSegwit: { - BitNumber: 1, - StartTime: 0, // Always available for vote - ExpireTime: math.MaxInt64, // Never expires. + BitNumber: 1, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), + }, + DeploymentTaproot: { + BitNumber: 2, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires. + ), + CustomActivationThreshold: 75, // Only needs 75% hash rate. }, }, @@ -578,6 +760,134 @@ var SimNetParams = Params{ HDCoinType: 115, // ASCII for s } +// SigNetParams defines the network parameters for the default public signet +// Bitcoin network. Not to be confused with the regression test network, this +// network is sometimes simply called "signet" or "taproot signet". +var SigNetParams = CustomSignetParams( + DefaultSignetChallenge, DefaultSignetDNSSeeds, +) + +// CustomSignetParams creates network parameters for a custom signet network +// from a challenge. The challenge is the binary compiled version of the block +// challenge script. +func CustomSignetParams(challenge []byte, dnsSeeds []DNSSeed) Params { + // The message start is defined as the first four bytes of the sha256d + // of the challenge script, as a single push (i.e. prefixed with the + // challenge script length). + challengeLength := byte(len(challenge)) + hashDouble := chainhash.DoubleHashB( + append([]byte{challengeLength}, challenge...), + ) + + // We use little endian encoding of the hash prefix to be in line with + // the other wire network identities. + net := binary.LittleEndian.Uint32(hashDouble[0:4]) + return Params{ + Name: "signet", + Net: wire.BitcoinNet(net), + DefaultPort: "38333", + DNSSeeds: dnsSeeds, + + // Chain parameters + GenesisBlock: &sigNetGenesisBlock, + GenesisHash: &sigNetGenesisHash, + PowLimit: sigNetPowLimit, + PowLimitBits: 0x1e0377ae, + BIP0034Height: 1, + BIP0065Height: 1, + BIP0066Height: 1, + CoinbaseMaturity: 100, + SubsidyReductionInterval: 210000, + TargetTimespan: time.Hour * 24 * 14, // 14 days + TargetTimePerBlock: time.Minute * 10, // 10 minutes + RetargetAdjustmentFactor: 4, // 25% less, 400% more + ReduceMinDifficulty: false, + MinDiffReductionTime: time.Minute * 20, // TargetTimePerBlock * 2 + GenerateSupported: false, + + // Checkpoints ordered from oldest to newest. + Checkpoints: nil, + + // Consensus rule change deployments. + // + // The miner confirmation window is defined as: + // target proof of work timespan / target proof of work spacing + RuleChangeActivationThreshold: 1916, // 95% of 2016 + MinerConfirmationWindow: 2016, + Deployments: [DefinedDeployments]ConsensusDeployment{ + DeploymentTestDummy: { + BitNumber: 28, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Unix(1199145601, 0), // January 1, 2008 UTC + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Unix(1230767999, 0), // December 31, 2008 UTC + ), + }, + DeploymentTestDummyMinActivation: { + BitNumber: 22, + CustomActivationThreshold: 1815, // Only needs 90% hash rate. + MinActivationHeight: 10_0000, // Can only activate after height 10k. + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), + }, + DeploymentCSV: { + BitNumber: 29, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), + }, + DeploymentSegwit: { + BitNumber: 29, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), + }, + DeploymentTaproot: { + BitNumber: 29, + DeploymentStarter: NewMedianTimeDeploymentStarter( + time.Time{}, // Always available for vote + ), + DeploymentEnder: NewMedianTimeDeploymentEnder( + time.Time{}, // Never expires + ), + }, + }, + + // Mempool parameters + RelayNonStdTxs: false, + + // Human-readable part for Bech32 encoded segwit addresses, as defined in + // BIP 173. + Bech32HRPSegwit: "tb", // always tb for test net + + // Address encoding magics + PubKeyHashAddrID: 0x6f, // starts with m or n + ScriptHashAddrID: 0xc4, // starts with 2 + WitnessPubKeyHashAddrID: 0x03, // starts with QW + WitnessScriptHashAddrID: 0x28, // starts with T7n + PrivateKeyID: 0xef, // starts with 9 (uncompressed) or c (compressed) + + // BIP32 hierarchical deterministic extended key magics + HDPrivateKeyID: [4]byte{0x04, 0x35, 0x83, 0x94}, // starts with tprv + HDPublicKeyID: [4]byte{0x04, 0x35, 0x87, 0xcf}, // starts with tpub + + // BIP44 coin type used in the hierarchical deterministic path for + // address generation. + HDCoinType: 1, + } +} + var ( // ErrDuplicateNet describes an error where the parameters for a Bitcoin // network could not be set due to the network already being a standard @@ -588,6 +898,10 @@ var ( // is intended to identify the network for a hierarchical deterministic // private extended key is not registered. ErrUnknownHDKeyID = errors.New("unknown hd private extended key bytes") + + // ErrInvalidHDKeyID describes an error where the provided hierarchical + // deterministic version bytes, or hd key id, is malformed. + ErrInvalidHDKeyID = errors.New("invalid hd extended key version bytes") ) var ( @@ -619,7 +933,11 @@ func Register(params *Params) error { registeredNets[params.Net] = struct{}{} pubKeyHashAddrIDs[params.PubKeyHashAddrID] = struct{}{} scriptHashAddrIDs[params.ScriptHashAddrID] = struct{}{} - hdPrivToPubKeyIDs[params.HDPrivateKeyID] = params.HDPublicKeyID[:] + + err := RegisterHDKeyID(params.HDPublicKeyID[:], params.HDPrivateKeyID[:]) + if err != nil { + return err + } // A valid Bech32 encoded segwit address always has as prefix the // human-readable part for the given net followed by '1'. @@ -666,6 +984,29 @@ func IsBech32SegwitPrefix(prefix string) bool { return ok } +// RegisterHDKeyID registers a public and private hierarchical deterministic +// extended key ID pair. +// +// Non-standard HD version bytes, such as the ones documented in SLIP-0132, +// should be registered using this method for library packages to lookup key +// IDs (aka HD version bytes). When the provided key IDs are invalid, the +// ErrInvalidHDKeyID error will be returned. +// +// Reference: +// SLIP-0132 : Registered HD version bytes for BIP-0032 +// https://github.com/satoshilabs/slips/blob/master/slip-0132.md +func RegisterHDKeyID(hdPublicKeyID []byte, hdPrivateKeyID []byte) error { + if len(hdPublicKeyID) != 4 || len(hdPrivateKeyID) != 4 { + return ErrInvalidHDKeyID + } + + var keyID [4]byte + copy(keyID[:], hdPrivateKeyID) + hdPrivToPubKeyIDs[keyID] = hdPublicKeyID + + return nil +} + // HDPrivateKeyToPublicKeyID accepts a private hierarchical deterministic // extended key id and returns the associated public key id. When the provided // id is not registered, the ErrUnknownHDKeyID error will be returned. diff --git a/chaincfg/params_test.go b/chaincfg/params_test.go index 277a56bdd5..4166ce0a23 100644 --- a/chaincfg/params_test.go +++ b/chaincfg/params_test.go @@ -4,7 +4,12 @@ package chaincfg -import "testing" +import ( + "bytes" + "encoding/hex" + "math/big" + "testing" +) // TestInvalidHashStr ensures the newShaHashFromStr function panics when used to // with an invalid hash string. @@ -33,3 +38,98 @@ func TestMustRegisterPanic(t *testing.T) { // Intentionally try to register duplicate params to force a panic. mustRegister(&MainNetParams) } + +func TestRegisterHDKeyID(t *testing.T) { + t.Parallel() + + // Ref: https://github.com/satoshilabs/slips/blob/master/slip-0132.md + hdKeyIDZprv := []byte{0x02, 0xaa, 0x7a, 0x99} + hdKeyIDZpub := []byte{0x02, 0xaa, 0x7e, 0xd3} + + if err := RegisterHDKeyID(hdKeyIDZpub, hdKeyIDZprv); err != nil { + t.Fatalf("RegisterHDKeyID: expected no error, got %v", err) + } + + got, err := HDPrivateKeyToPublicKeyID(hdKeyIDZprv) + if err != nil { + t.Fatalf("HDPrivateKeyToPublicKeyID: expected no error, got %v", err) + } + + if !bytes.Equal(got, hdKeyIDZpub) { + t.Fatalf("HDPrivateKeyToPublicKeyID: expected result %v, got %v", + hdKeyIDZpub, got) + } +} + +func TestInvalidHDKeyID(t *testing.T) { + t.Parallel() + + prvValid := []byte{0x02, 0xaa, 0x7a, 0x99} + pubValid := []byte{0x02, 0xaa, 0x7e, 0xd3} + prvInvalid := []byte{0x00} + pubInvalid := []byte{0x00} + + if err := RegisterHDKeyID(pubInvalid, prvValid); err != ErrInvalidHDKeyID { + t.Fatalf("RegisterHDKeyID: want err ErrInvalidHDKeyID, got %v", err) + } + + if err := RegisterHDKeyID(pubValid, prvInvalid); err != ErrInvalidHDKeyID { + t.Fatalf("RegisterHDKeyID: want err ErrInvalidHDKeyID, got %v", err) + } + + if err := RegisterHDKeyID(pubInvalid, prvInvalid); err != ErrInvalidHDKeyID { + t.Fatalf("RegisterHDKeyID: want err ErrInvalidHDKeyID, got %v", err) + } + + // FIXME: The error type should be changed to ErrInvalidHDKeyID. + if _, err := HDPrivateKeyToPublicKeyID(prvInvalid); err != ErrUnknownHDKeyID { + t.Fatalf("HDPrivateKeyToPublicKeyID: want err ErrUnknownHDKeyID, got %v", err) + } +} + +func TestSigNetPowLimit(t *testing.T) { + sigNetPowLimitHex, _ := hex.DecodeString( + "00000377ae000000000000000000000000000000000000000000000000000000", + ) + powLimit := new(big.Int).SetBytes(sigNetPowLimitHex) + if sigNetPowLimit.Cmp(powLimit) != 0 { + t.Fatalf("Signet PoW limit bits (%s) not equal to big int (%s)", + sigNetPowLimit.Text(16), powLimit.Text(16)) + } + + if compactToBig(sigNetGenesisBlock.Header.Bits).Cmp(powLimit) != 0 { + t.Fatalf("Signet PoW limit header bits (%d) not equal to big "+ + "int (%s)", sigNetGenesisBlock.Header.Bits, + powLimit.Text(16)) + } +} + +// compactToBig is a copy of the blockchain.CompactToBig function. We copy it +// here so we don't run into a circular dependency just because of a test. +func compactToBig(compact uint32) *big.Int { + // Extract the mantissa, sign bit, and exponent. + mantissa := compact & 0x007fffff + isNegative := compact&0x00800000 != 0 + exponent := uint(compact >> 24) + + // Since the base for the exponent is 256, the exponent can be treated + // as the number of bytes to represent the full 256-bit number. So, + // treat the exponent as the number of bytes and shift the mantissa + // right or left accordingly. This is equivalent to: + // N = mantissa * 256^(exponent-3) + var bn *big.Int + if exponent <= 3 { + mantissa >>= 8 * (3 - exponent) + bn = big.NewInt(int64(mantissa)) + } else { + bn = big.NewInt(int64(mantissa)) + bn.Lsh(bn, 8*(exponent-3)) + } + + // Make it negative if the sign bit is set. + if isNegative { + bn = bn.Neg(bn) + } + + return bn +} diff --git a/cmd/addblock/addblock.go b/cmd/addblock/addblock.go index 15b61b6880..8b44f307e4 100644 --- a/cmd/addblock/addblock.go +++ b/cmd/addblock/addblock.go @@ -7,7 +7,6 @@ package main import ( "os" "path/filepath" - "runtime" "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/blockchain/indexers" @@ -119,8 +118,7 @@ func realMain() error { } func main() { - // Use all processor cores and up some limits. - runtime.GOMAXPROCS(runtime.NumCPU()) + // up some limits. if err := limits.SetLimits(); err != nil { os.Exit(1) } diff --git a/cmd/addblock/config.go b/cmd/addblock/config.go index ae7a52fd2e..c638196534 100644 --- a/cmd/addblock/config.go +++ b/cmd/addblock/config.go @@ -13,7 +13,7 @@ import ( "github.com/btcsuite/btcd/database" _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" flags "github.com/jessevdk/go-flags" ) @@ -34,15 +34,15 @@ var ( // // See loadConfig for details on the configuration load process. type config struct { + AddrIndex bool `long:"addrindex" description:"Build a full address-based transaction index which makes the searchrawtransactions RPC available"` DataDir string `short:"b" long:"datadir" description:"Location of the btcd data directory"` DbType string `long:"dbtype" description:"Database backend to use for the Block Chain"` - TestNet3 bool `long:"testnet" description:"Use the test network"` + InFile string `short:"i" long:"infile" description:"File containing the block(s)"` + Progress int `short:"p" long:"progress" description:"Show a progress message each time this number of seconds have passed -- Use 0 to disable progress announcements"` RegressionTest bool `long:"regtest" description:"Use the regression test network"` SimNet bool `long:"simnet" description:"Use the simulation test network"` - InFile string `short:"i" long:"infile" description:"File containing the block(s)"` + TestNet3 bool `long:"testnet" description:"Use the test network"` TxIndex bool `long:"txindex" description:"Build a full hash-based transaction index which makes all transactions available via the getrawtransaction RPC"` - AddrIndex bool `long:"addrindex" description:"Build a full address-based transaction index which makes the searchrawtransactions RPC available"` - Progress int `short:"p" long:"progress" description:"Show a progress message each time this number of seconds have passed -- Use 0 to disable progress announcements"` } // filesExists reports whether the named file or directory exists. diff --git a/cmd/addblock/import.go b/cmd/addblock/import.go index b7a30369ec..4875ce11cb 100644 --- a/cmd/addblock/import.go +++ b/cmd/addblock/import.go @@ -16,7 +16,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) var zeroHash = chainhash.Hash{} diff --git a/cmd/btcctl/btcctl.go b/cmd/btcctl/btcctl.go index 5c412f867f..771d5f7ed7 100644 --- a/cmd/btcctl/btcctl.go +++ b/cmd/btcctl/btcctl.go @@ -127,7 +127,7 @@ func main() { // Marshal the command into a JSON-RPC byte slice in preparation for // sending it to the RPC server. - marshalledJSON, err := btcjson.MarshalCmd(1, cmd) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, 1, cmd) if err != nil { fmt.Fprintln(os.Stderr, err) os.Exit(1) diff --git a/cmd/btcctl/config.go b/cmd/btcctl/config.go index cd232a9e0a..3db735c5d8 100644 --- a/cmd/btcctl/config.go +++ b/cmd/btcctl/config.go @@ -14,7 +14,8 @@ import ( "strings" "github.com/btcsuite/btcd/btcjson" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/btcutil" flags "github.com/jessevdk/go-flags" ) @@ -92,42 +93,58 @@ func listCommands() { // // See loadConfig for details on the configuration load process. type config struct { - ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"` - ListCommands bool `short:"l" long:"listcommands" description:"List all of the supported commands and exit"` - ConfigFile string `short:"C" long:"configfile" description:"Path to configuration file"` - RPCUser string `short:"u" long:"rpcuser" description:"RPC username"` - RPCPassword string `short:"P" long:"rpcpass" default-mask:"-" description:"RPC password"` - RPCServer string `short:"s" long:"rpcserver" description:"RPC server to connect to"` - RPCCert string `short:"c" long:"rpccert" description:"RPC server certificate chain for validation"` - NoTLS bool `long:"notls" description:"Disable TLS"` - Proxy string `long:"proxy" description:"Connect via SOCKS5 proxy (eg. 127.0.0.1:9050)"` - ProxyUser string `long:"proxyuser" description:"Username for proxy server"` - ProxyPass string `long:"proxypass" default-mask:"-" description:"Password for proxy server"` - TestNet3 bool `long:"testnet" description:"Connect to testnet"` - SimNet bool `long:"simnet" description:"Connect to the simulation test network"` - TLSSkipVerify bool `long:"skipverify" description:"Do not verify tls certificates (not recommended!)"` - Wallet bool `long:"wallet" description:"Connect to wallet"` + ConfigFile string `short:"C" long:"configfile" description:"Path to configuration file"` + ListCommands bool `short:"l" long:"listcommands" description:"List all of the supported commands and exit"` + NoTLS bool `long:"notls" description:"Disable TLS"` + Proxy string `long:"proxy" description:"Connect via SOCKS5 proxy (eg. 127.0.0.1:9050)"` + ProxyPass string `long:"proxypass" default-mask:"-" description:"Password for proxy server"` + ProxyUser string `long:"proxyuser" description:"Username for proxy server"` + RegressionTest bool `long:"regtest" description:"Connect to the regression test network"` + RPCCert string `short:"c" long:"rpccert" description:"RPC server certificate chain for validation"` + RPCPassword string `short:"P" long:"rpcpass" default-mask:"-" description:"RPC password"` + RPCServer string `short:"s" long:"rpcserver" description:"RPC server to connect to"` + RPCUser string `short:"u" long:"rpcuser" description:"RPC username"` + SimNet bool `long:"simnet" description:"Connect to the simulation test network"` + TLSSkipVerify bool `long:"skipverify" description:"Do not verify tls certificates (not recommended!)"` + TestNet3 bool `long:"testnet" description:"Connect to testnet"` + SigNet bool `long:"signet" description:"Connect to signet"` + ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"` + Wallet bool `long:"wallet" description:"Connect to wallet"` } // normalizeAddress returns addr with the passed default port appended if // there is not already a port specified. -func normalizeAddress(addr string, useTestNet3, useSimNet, useWallet bool) string { +func normalizeAddress(addr string, chain *chaincfg.Params, useWallet bool) (string, error) { _, _, err := net.SplitHostPort(addr) if err != nil { var defaultPort string - switch { - case useTestNet3: + switch chain { + case &chaincfg.TestNet3Params: if useWallet { defaultPort = "18332" } else { defaultPort = "18334" } - case useSimNet: + case &chaincfg.SimNetParams: if useWallet { defaultPort = "18554" } else { defaultPort = "18556" } + case &chaincfg.RegressionNetParams: + if useWallet { + // TODO: add port once regtest is supported in btcwallet + paramErr := fmt.Errorf("cannot use -wallet with -regtest, btcwallet not yet compatible with regtest") + return "", paramErr + } else { + defaultPort = "18334" + } + case &chaincfg.SigNetParams: + if useWallet { + defaultPort = "38332" + } else { + defaultPort = "38332" + } default: if useWallet { defaultPort = "8332" @@ -136,9 +153,9 @@ func normalizeAddress(addr string, useTestNet3, useSimNet, useWallet bool) strin } } - return net.JoinHostPort(addr, defaultPort) + return net.JoinHostPort(addr, defaultPort), nil } - return addr + return addr, nil } // cleanAndExpandPath expands environement variables and leading ~ in the @@ -246,17 +263,31 @@ func loadConfig() (*config, []string, error) { return nil, nil, err } + // default network is mainnet + network := &chaincfg.MainNetParams + // Multiple networks can't be selected simultaneously. numNets := 0 if cfg.TestNet3 { numNets++ + network = &chaincfg.TestNet3Params } if cfg.SimNet { numNets++ + network = &chaincfg.SimNetParams + } + if cfg.RegressionTest { + numNets++ + network = &chaincfg.RegressionNetParams } + if cfg.SigNet { + numNets++ + network = &chaincfg.SigNetParams + } + if numNets > 1 { - str := "%s: The testnet and simnet params can't be used " + - "together -- choose one of the two" + str := "%s: Multiple network params can't be used " + + "together -- choose one" err := fmt.Errorf(str, "loadConfig") fmt.Fprintln(os.Stderr, err) return nil, nil, err @@ -273,8 +304,10 @@ func loadConfig() (*config, []string, error) { // Add default port to RPC server based on --testnet and --wallet flags // if needed. - cfg.RPCServer = normalizeAddress(cfg.RPCServer, cfg.TestNet3, - cfg.SimNet, cfg.Wallet) + cfg.RPCServer, err = normalizeAddress(cfg.RPCServer, network, cfg.Wallet) + if err != nil { + return nil, nil, err + } return &cfg, remainingArgs, nil } @@ -295,10 +328,7 @@ func createDefaultConfigFile(destinationPath, serverConfigPath string) error { } // Extract the rpcuser - rpcUserRegexp, err := regexp.Compile(`(?m)^\s*rpcuser=([^\s]+)`) - if err != nil { - return err - } + rpcUserRegexp := regexp.MustCompile(`(?m)^\s*rpcuser=([^\s]+)`) userSubmatches := rpcUserRegexp.FindSubmatch(content) if userSubmatches == nil { // No user found, nothing to do @@ -306,10 +336,7 @@ func createDefaultConfigFile(destinationPath, serverConfigPath string) error { } // Extract the rpcpass - rpcPassRegexp, err := regexp.Compile(`(?m)^\s*rpcpass=([^\s]+)`) - if err != nil { - return err - } + rpcPassRegexp := regexp.MustCompile(`(?m)^\s*rpcpass=([^\s]+)`) passSubmatches := rpcPassRegexp.FindSubmatch(content) if passSubmatches == nil { // No password found, nothing to do @@ -317,10 +344,7 @@ func createDefaultConfigFile(destinationPath, serverConfigPath string) error { } // Extract the notls - noTLSRegexp, err := regexp.Compile(`(?m)^\s*notls=(0|1)(?:\s|$)`) - if err != nil { - return err - } + noTLSRegexp := regexp.MustCompile(`(?m)^\s*notls=(0|1)(?:\s|$)`) noTLSSubmatches := noTLSRegexp.FindSubmatch(content) // Create the destination directory if it does not exists diff --git a/cmd/btcctl/version.go b/cmd/btcctl/version.go index f65cacef7e..42f3f7d024 100644 --- a/cmd/btcctl/version.go +++ b/cmd/btcctl/version.go @@ -17,7 +17,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr // versioning 2.0.0 spec (http://semver.org/). const ( appMajor uint = 0 - appMinor uint = 20 + appMinor uint = 23 appPatch uint = 1 // appPreRelease MUST only contain characters from semanticAlphabet diff --git a/cmd/findcheckpoint/config.go b/cmd/findcheckpoint/config.go index 1539db334c..5671b5b186 100644 --- a/cmd/findcheckpoint/config.go +++ b/cmd/findcheckpoint/config.go @@ -13,7 +13,7 @@ import ( "github.com/btcsuite/btcd/database" _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" flags "github.com/jessevdk/go-flags" ) @@ -37,11 +37,11 @@ var ( type config struct { DataDir string `short:"b" long:"datadir" description:"Location of the btcd data directory"` DbType string `long:"dbtype" description:"Database backend to use for the Block Chain"` - TestNet3 bool `long:"testnet" description:"Use the test network"` + UseGoOutput bool `short:"g" long:"gooutput" description:"Display the candidates using Go syntax that is ready to insert into the btcchain checkpoint list"` + NumCandidates int `short:"n" long:"numcandidates" description:"Max num of checkpoint candidates to show {1-20}"` RegressionTest bool `long:"regtest" description:"Use the regression test network"` SimNet bool `long:"simnet" description:"Use the simulation test network"` - NumCandidates int `short:"n" long:"numcandidates" description:"Max num of checkpoint candidates to show {1-20}"` - UseGoOutput bool `short:"g" long:"gooutput" description:"Display the candidates using Go syntax that is ready to insert into the btcchain checkpoint list"` + TestNet3 bool `long:"testnet" description:"Use the test network"` } // validDbType returns whether or not dbType is a supported database type. diff --git a/cmd/gencerts/gencerts.go b/cmd/gencerts/gencerts.go index a3a506363a..c0a27ad37b 100644 --- a/cmd/gencerts/gencerts.go +++ b/cmd/gencerts/gencerts.go @@ -12,16 +12,16 @@ import ( "strings" "time" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" flags "github.com/jessevdk/go-flags" ) type config struct { Directory string `short:"d" long:"directory" description:"Directory to write certificate pair"` - Years int `short:"y" long:"years" description:"How many years a certificate is valid for"` - Organization string `short:"o" long:"org" description:"Organization in certificate"` - ExtraHosts []string `short:"H" long:"host" description:"Additional hosts/IPs to create certificate for"` Force bool `short:"f" long:"force" description:"Force overwriting of any old certs and keys"` + ExtraHosts []string `short:"H" long:"host" description:"Additional hosts/IPs to create certificate for"` + Organization string `short:"o" long:"org" description:"Organization in certificate"` + Years int `short:"y" long:"years" description:"How many years a certificate is valid for"` } func main() { diff --git a/config.go b/config.go index 3bcc65dacd..5eca3f2174 100644 --- a/config.go +++ b/config.go @@ -8,6 +8,7 @@ import ( "bufio" "crypto/rand" "encoding/base64" + "encoding/hex" "errors" "fmt" "io" @@ -28,7 +29,8 @@ import ( _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/mempool" "github.com/btcsuite/btcd/peer" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/wire" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/go-socks/socks" flags "github.com/jessevdk/go-flags" ) @@ -93,79 +95,84 @@ func minUint32(a, b uint32) uint32 { // // See loadConfig for details on the configuration load process. type config struct { - ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"` - ConfigFile string `short:"C" long:"configfile" description:"Path to configuration file"` - DataDir string `short:"b" long:"datadir" description:"Directory to store data"` - LogDir string `long:"logdir" description:"Directory to log output."` + AddCheckpoints []string `long:"addcheckpoint" description:"Add a custom checkpoint. Format: ':'"` AddPeers []string `short:"a" long:"addpeer" description:"Add a peer to connect with at startup"` + AddrIndex bool `long:"addrindex" description:"Maintain a full address-based transaction index which makes the searchrawtransactions RPC available"` + AgentBlacklist []string `long:"agentblacklist" description:"A comma separated list of user-agent substrings which will cause btcd to reject any peers whose user-agent contains any of the blacklisted substrings."` + AgentWhitelist []string `long:"agentwhitelist" description:"A comma separated list of user-agent substrings which will cause btcd to require all peers' user-agents to contain one of the whitelisted substrings. The blacklist is applied before the blacklist, and an empty whitelist will allow all agents that do not fail the blacklist."` + BanDuration time.Duration `long:"banduration" description:"How long to ban misbehaving peers. Valid time units are {s, m, h}. Minimum 1 second"` + BanThreshold uint32 `long:"banthreshold" description:"Maximum allowed ban score before disconnecting and banning misbehaving peers."` + BlockMaxSize uint32 `long:"blockmaxsize" description:"Maximum block size in bytes to be used when creating a block"` + BlockMinSize uint32 `long:"blockminsize" description:"Mininum block size in bytes to be used when creating a block"` + BlockMaxWeight uint32 `long:"blockmaxweight" description:"Maximum block weight to be used when creating a block"` + BlockMinWeight uint32 `long:"blockminweight" description:"Mininum block weight to be used when creating a block"` + BlockPrioritySize uint32 `long:"blockprioritysize" description:"Size in bytes for high-priority/low-fee transactions when creating a block"` + BlocksOnly bool `long:"blocksonly" description:"Do not accept transactions from remote peers."` + ConfigFile string `short:"C" long:"configfile" description:"Path to configuration file"` ConnectPeers []string `long:"connect" description:"Connect only to the specified peers at startup"` - DisableListen bool `long:"nolisten" description:"Disable listening for incoming connections -- NOTE: Listening is automatically disabled if the --connect or --proxy options are used without also specifying listen interfaces via --listen"` + CPUProfile string `long:"cpuprofile" description:"Write CPU profile to the specified file"` + DataDir string `short:"b" long:"datadir" description:"Directory to store data"` + DbType string `long:"dbtype" description:"Database backend to use for the Block Chain"` + DebugLevel string `short:"d" long:"debuglevel" description:"Logging level for all subsystems {trace, debug, info, warn, error, critical} -- You may also specify =,=,... to set the log level for individual subsystems -- Use show to list available subsystems"` + DropAddrIndex bool `long:"dropaddrindex" description:"Deletes the address-based transaction index from the database on start up and then exits."` + DropCfIndex bool `long:"dropcfindex" description:"Deletes the index used for committed filtering (CF) support from the database on start up and then exits."` + DropTxIndex bool `long:"droptxindex" description:"Deletes the hash-based transaction index from the database on start up and then exits."` + ExternalIPs []string `long:"externalip" description:"Add an ip to the list of local addresses we claim to listen on to peers"` + Generate bool `long:"generate" description:"Generate (mine) bitcoins using the CPU"` + FreeTxRelayLimit float64 `long:"limitfreerelay" description:"Limit relay of transactions with no transaction fee to the given amount in thousands of bytes per minute"` Listeners []string `long:"listen" description:"Add an interface/port to listen for connections (default all interfaces port: 8333, testnet: 18333)"` + LogDir string `long:"logdir" description:"Directory to log output."` + MaxOrphanTxs int `long:"maxorphantx" description:"Max number of orphan transactions to keep in memory"` MaxPeers int `long:"maxpeers" description:"Max number of inbound and outbound peers"` + MiningAddrs []string `long:"miningaddr" description:"Add the specified payment address to the list of addresses to use for generated blocks -- At least one address is required if the generate option is set"` + MinRelayTxFee float64 `long:"minrelaytxfee" description:"The minimum transaction fee in BTC/kB to be considered a non-zero fee."` DisableBanning bool `long:"nobanning" description:"Disable banning of misbehaving peers"` - BanDuration time.Duration `long:"banduration" description:"How long to ban misbehaving peers. Valid time units are {s, m, h}. Minimum 1 second"` - BanThreshold uint32 `long:"banthreshold" description:"Maximum allowed ban score before disconnecting and banning misbehaving peers."` - Whitelists []string `long:"whitelist" description:"Add an IP network or IP that will not be banned. (eg. 192.168.1.0/24 or ::1)"` - AgentBlacklist []string `long:"agentblacklist" description:"A comma separated list of user-agent substrings which will cause btcd to reject any peers whose user-agent contains any of the blacklisted substrings."` - AgentWhitelist []string `long:"agentwhitelist" description:"A comma separated list of user-agent substrings which will cause btcd to require all peers' user-agents to contain one of the whitelisted substrings. The blacklist is applied before the blacklist, and an empty whitelist will allow all agents that do not fail the blacklist."` - RPCUser string `short:"u" long:"rpcuser" description:"Username for RPC connections"` - RPCPass string `short:"P" long:"rpcpass" default-mask:"-" description:"Password for RPC connections"` - RPCLimitUser string `long:"rpclimituser" description:"Username for limited RPC connections"` - RPCLimitPass string `long:"rpclimitpass" default-mask:"-" description:"Password for limited RPC connections"` - RPCListeners []string `long:"rpclisten" description:"Add an interface/port to listen for RPC connections (default port: 8334, testnet: 18334)"` - RPCCert string `long:"rpccert" description:"File containing the certificate file"` - RPCKey string `long:"rpckey" description:"File containing the certificate key"` - RPCMaxClients int `long:"rpcmaxclients" description:"Max number of RPC clients for standard connections"` - RPCMaxWebsockets int `long:"rpcmaxwebsockets" description:"Max number of RPC websocket connections"` - RPCMaxConcurrentReqs int `long:"rpcmaxconcurrentreqs" description:"Max number of concurrent RPC requests that may be processed concurrently"` - RPCQuirks bool `long:"rpcquirks" description:"Mirror some JSON-RPC quirks of Bitcoin Core -- NOTE: Discouraged unless interoperability issues need to be worked around"` + NoCFilters bool `long:"nocfilters" description:"Disable committed filtering (CF) support"` + DisableCheckpoints bool `long:"nocheckpoints" description:"Disable built-in checkpoints. Don't do this unless you know what you're doing."` + DisableDNSSeed bool `long:"nodnsseed" description:"Disable DNS seeding for peers"` + DisableListen bool `long:"nolisten" description:"Disable listening for incoming connections -- NOTE: Listening is automatically disabled if the --connect or --proxy options are used without also specifying listen interfaces via --listen"` + NoOnion bool `long:"noonion" description:"Disable connecting to tor hidden services"` + NoPeerBloomFilters bool `long:"nopeerbloomfilters" description:"Disable bloom filtering support"` + NoRelayPriority bool `long:"norelaypriority" description:"Do not require free or low-fee transactions to have high priority for relaying"` + NoWinService bool `long:"nowinservice" description:"Do not start as a background service on Windows -- NOTE: This flag only works on the command line, not in the config file"` DisableRPC bool `long:"norpc" description:"Disable built-in RPC server -- NOTE: The RPC server is disabled by default if no rpcuser/rpcpass or rpclimituser/rpclimitpass is specified"` + DisableStallHandler bool `long:"nostalldetect" description:"Disables the stall handler system for each peer, useful in simnet/regtest integration tests frameworks"` DisableTLS bool `long:"notls" description:"Disable TLS for the RPC server -- NOTE: This is only allowed if the RPC server is bound to localhost"` - DisableDNSSeed bool `long:"nodnsseed" description:"Disable DNS seeding for peers"` - ExternalIPs []string `long:"externalip" description:"Add an ip to the list of local addresses we claim to listen on to peers"` - Proxy string `long:"proxy" description:"Connect via SOCKS5 proxy (eg. 127.0.0.1:9050)"` - ProxyUser string `long:"proxyuser" description:"Username for proxy server"` - ProxyPass string `long:"proxypass" default-mask:"-" description:"Password for proxy server"` OnionProxy string `long:"onion" description:"Connect to tor hidden services via SOCKS5 proxy (eg. 127.0.0.1:9050)"` - OnionProxyUser string `long:"onionuser" description:"Username for onion proxy server"` OnionProxyPass string `long:"onionpass" default-mask:"-" description:"Password for onion proxy server"` - NoOnion bool `long:"noonion" description:"Disable connecting to tor hidden services"` - TorIsolation bool `long:"torisolation" description:"Enable Tor stream isolation by randomizing user credentials for each connection."` - TestNet3 bool `long:"testnet" description:"Use the test network"` + OnionProxyUser string `long:"onionuser" description:"Username for onion proxy server"` + Profile string `long:"profile" description:"Enable HTTP profiling on given port -- NOTE port must be between 1024 and 65536"` + Proxy string `long:"proxy" description:"Connect via SOCKS5 proxy (eg. 127.0.0.1:9050)"` + ProxyPass string `long:"proxypass" default-mask:"-" description:"Password for proxy server"` + ProxyUser string `long:"proxyuser" description:"Username for proxy server"` RegressionTest bool `long:"regtest" description:"Use the regression test network"` + RejectNonStd bool `long:"rejectnonstd" description:"Reject non-standard transactions regardless of the default settings for the active network."` + RejectReplacement bool `long:"rejectreplacement" description:"Reject transactions that attempt to replace existing transactions within the mempool through the Replace-By-Fee (RBF) signaling policy."` + RelayNonStd bool `long:"relaynonstd" description:"Relay non-standard transactions regardless of the default settings for the active network."` + RPCCert string `long:"rpccert" description:"File containing the certificate file"` + RPCKey string `long:"rpckey" description:"File containing the certificate key"` + RPCLimitPass string `long:"rpclimitpass" default-mask:"-" description:"Password for limited RPC connections"` + RPCLimitUser string `long:"rpclimituser" description:"Username for limited RPC connections"` + RPCListeners []string `long:"rpclisten" description:"Add an interface/port to listen for RPC connections (default port: 8334, testnet: 18334)"` + RPCMaxClients int `long:"rpcmaxclients" description:"Max number of RPC clients for standard connections"` + RPCMaxConcurrentReqs int `long:"rpcmaxconcurrentreqs" description:"Max number of concurrent RPC requests that may be processed concurrently"` + RPCMaxWebsockets int `long:"rpcmaxwebsockets" description:"Max number of RPC websocket connections"` + RPCQuirks bool `long:"rpcquirks" description:"Mirror some JSON-RPC quirks of Bitcoin Core -- NOTE: Discouraged unless interoperability issues need to be worked around"` + RPCPass string `short:"P" long:"rpcpass" default-mask:"-" description:"Password for RPC connections"` + RPCUser string `short:"u" long:"rpcuser" description:"Username for RPC connections"` + SigCacheMaxSize uint `long:"sigcachemaxsize" description:"The maximum number of entries in the signature verification cache"` SimNet bool `long:"simnet" description:"Use the simulation test network"` - AddCheckpoints []string `long:"addcheckpoint" description:"Add a custom checkpoint. Format: ':'"` - DisableCheckpoints bool `long:"nocheckpoints" description:"Disable built-in checkpoints. Don't do this unless you know what you're doing."` - DbType string `long:"dbtype" description:"Database backend to use for the Block Chain"` - Profile string `long:"profile" description:"Enable HTTP profiling on given port -- NOTE port must be between 1024 and 65536"` - CPUProfile string `long:"cpuprofile" description:"Write CPU profile to the specified file"` - DebugLevel string `short:"d" long:"debuglevel" description:"Logging level for all subsystems {trace, debug, info, warn, error, critical} -- You may also specify =,=,... to set the log level for individual subsystems -- Use show to list available subsystems"` - Upnp bool `long:"upnp" description:"Use UPnP to map our listening port outside of NAT"` - MinRelayTxFee float64 `long:"minrelaytxfee" description:"The minimum transaction fee in BTC/kB to be considered a non-zero fee."` - FreeTxRelayLimit float64 `long:"limitfreerelay" description:"Limit relay of transactions with no transaction fee to the given amount in thousands of bytes per minute"` - NoRelayPriority bool `long:"norelaypriority" description:"Do not require free or low-fee transactions to have high priority for relaying"` + SigNet bool `long:"signet" description:"Use the signet test network"` + SigNetChallenge string `long:"signetchallenge" description:"Connect to a custom signet network defined by this challenge instead of using the global default signet test network -- Can be specified multiple times"` + SigNetSeedNode []string `long:"signetseednode" description:"Specify a seed node for the signet network instead of using the global default signet network seed nodes"` + TestNet3 bool `long:"testnet" description:"Use the test network"` + TorIsolation bool `long:"torisolation" description:"Enable Tor stream isolation by randomizing user credentials for each connection."` TrickleInterval time.Duration `long:"trickleinterval" description:"Minimum time between attempts to send new inventory to a connected peer"` - MaxOrphanTxs int `long:"maxorphantx" description:"Max number of orphan transactions to keep in memory"` - Generate bool `long:"generate" description:"Generate (mine) bitcoins using the CPU"` - MiningAddrs []string `long:"miningaddr" description:"Add the specified payment address to the list of addresses to use for generated blocks -- At least one address is required if the generate option is set"` - BlockMinSize uint32 `long:"blockminsize" description:"Mininum block size in bytes to be used when creating a block"` - BlockMaxSize uint32 `long:"blockmaxsize" description:"Maximum block size in bytes to be used when creating a block"` - BlockMinWeight uint32 `long:"blockminweight" description:"Mininum block weight to be used when creating a block"` - BlockMaxWeight uint32 `long:"blockmaxweight" description:"Maximum block weight to be used when creating a block"` - BlockPrioritySize uint32 `long:"blockprioritysize" description:"Size in bytes for high-priority/low-fee transactions when creating a block"` - UserAgentComments []string `long:"uacomment" description:"Comment to add to the user agent -- See BIP 14 for more information."` - NoPeerBloomFilters bool `long:"nopeerbloomfilters" description:"Disable bloom filtering support"` - NoCFilters bool `long:"nocfilters" description:"Disable committed filtering (CF) support"` - DropCfIndex bool `long:"dropcfindex" description:"Deletes the index used for committed filtering (CF) support from the database on start up and then exits."` - SigCacheMaxSize uint `long:"sigcachemaxsize" description:"The maximum number of entries in the signature verification cache"` - BlocksOnly bool `long:"blocksonly" description:"Do not accept transactions from remote peers."` TxIndex bool `long:"txindex" description:"Maintain a full hash-based transaction index which makes all transactions available via the getrawtransaction RPC"` - DropTxIndex bool `long:"droptxindex" description:"Deletes the hash-based transaction index from the database on start up and then exits."` - AddrIndex bool `long:"addrindex" description:"Maintain a full address-based transaction index which makes the searchrawtransactions RPC available"` - DropAddrIndex bool `long:"dropaddrindex" description:"Deletes the address-based transaction index from the database on start up and then exits."` - RelayNonStd bool `long:"relaynonstd" description:"Relay non-standard transactions regardless of the default settings for the active network."` - RejectNonStd bool `long:"rejectnonstd" description:"Reject non-standard transactions regardless of the default settings for the active network."` - RejectReplacement bool `long:"rejectreplacement" description:"Reject transactions that attempt to replace existing transactions within the mempool through the Replace-By-Fee (RBF) signaling policy."` + UserAgentComments []string `long:"uacomment" description:"Comment to add to the user agent -- See BIP 14 for more information."` + Upnp bool `long:"upnp" description:"Use UPnP to map our listening port outside of NAT"` + ShowVersion bool `short:"V" long:"version" description:"Display version information and exit"` + Whitelists []string `long:"whitelist" description:"Add an IP network or IP that will not be banned. (eg. 192.168.1.0/24 or ::1)"` lookup func(string) ([]net.IP, error) oniondial func(string, string, time.Duration) (net.Conn, error) dial func(string, string, time.Duration) (net.Conn, error) @@ -474,8 +481,8 @@ func loadConfig() (*config, []string, error) { // Load additional config from file. var configFileError error parser := newConfigParser(&cfg, &serviceOpts, flags.Default) - if !(preCfg.RegressionTest || preCfg.SimNet) || preCfg.ConfigFile != - defaultConfigFile { + if !(preCfg.RegressionTest || preCfg.SimNet || preCfg.SigNet) || + preCfg.ConfigFile != defaultConfigFile { if _, err := os.Stat(preCfg.ConfigFile); os.IsNotExist(err) { err := createDefaultConfigFile(preCfg.ConfigFile) @@ -549,9 +556,59 @@ func loadConfig() (*config, []string, error) { activeNetParams = &simNetParams cfg.DisableDNSSeed = true } + if cfg.SigNet { + numNets++ + activeNetParams = &sigNetParams + + // Let the user overwrite the default signet parameters. The + // challenge defines the actual signet network to join and the + // seed nodes are needed for network discovery. + sigNetChallenge := chaincfg.DefaultSignetChallenge + sigNetSeeds := chaincfg.DefaultSignetDNSSeeds + if cfg.SigNetChallenge != "" { + challenge, err := hex.DecodeString(cfg.SigNetChallenge) + if err != nil { + str := "%s: Invalid signet challenge, hex " + + "decode failed: %v" + err := fmt.Errorf(str, funcName, err) + fmt.Fprintln(os.Stderr, err) + fmt.Fprintln(os.Stderr, usageMessage) + return nil, nil, err + } + sigNetChallenge = challenge + } + + if len(cfg.SigNetSeedNode) > 0 { + sigNetSeeds = make( + []chaincfg.DNSSeed, len(cfg.SigNetSeedNode), + ) + for idx, seed := range cfg.SigNetSeedNode { + sigNetSeeds[idx] = chaincfg.DNSSeed{ + Host: seed, + HasFiltering: false, + } + } + } + + chainParams := chaincfg.CustomSignetParams( + sigNetChallenge, sigNetSeeds, + ) + activeNetParams.Params = &chainParams + } if numNets > 1 { - str := "%s: The testnet, regtest, segnet, and simnet params " + - "can't be used together -- choose one of the four" + str := "%s: The testnet, regtest, segnet, signet and simnet " + + "params can't be used together -- choose one of the " + + "five" + err := fmt.Errorf(str, funcName) + fmt.Fprintln(os.Stderr, err) + fmt.Fprintln(os.Stderr, usageMessage) + return nil, nil, err + } + + // If mainnet is active, then we won't allow the stall handler to be + // disabled. + if activeNetParams.Params.Net == wire.MainNet && cfg.DisableStallHandler { + str := "%s: stall handler cannot be disabled on mainnet" err := fmt.Errorf(str, funcName) fmt.Fprintln(os.Stderr, err) fmt.Fprintln(os.Stderr, usageMessage) diff --git a/connmgr/README.md b/connmgr/README.md index 6f3968cecb..b1aa3cc7d0 100644 --- a/connmgr/README.md +++ b/connmgr/README.md @@ -1,9 +1,9 @@ connmgr ======= -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/connmgr) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/connmgr) Package connmgr implements a generic Bitcoin network connection manager. diff --git a/connmgr/connmanager_test.go b/connmgr/connmanager_test.go index 67769deb96..94cb65ff2a 100644 --- a/connmgr/connmanager_test.go +++ b/connmgr/connmanager_test.go @@ -464,7 +464,7 @@ func TestRemovePendingConnection(t *testing.T) { time.Sleep(10 * time.Millisecond) // Now examine the status of the connection request, it should read a - // status of failed. + // status of ConnCanceled. if cr.State() != ConnCanceled { t.Fatalf("request wasn't canceled, status is: %v", cr.State()) } diff --git a/connmgr/dynamicbanscore.go b/connmgr/dynamicbanscore.go index bc3c2a4581..38180bac12 100644 --- a/connmgr/dynamicbanscore.go +++ b/connmgr/dynamicbanscore.go @@ -71,7 +71,7 @@ type DynamicBanScore struct { func (s *DynamicBanScore) String() string { s.mtx.Lock() r := fmt.Sprintf("persistent %v + transient %v at %v = %v as of now", - s.persistent, s.transient, s.lastUnix, s.Int()) + s.persistent, s.transient, s.lastUnix, s.int(time.Now())) s.mtx.Unlock() return r } diff --git a/connmgr/dynamicbanscore_test.go b/connmgr/dynamicbanscore_test.go index 6dcd64d476..c6d67b4910 100644 --- a/connmgr/dynamicbanscore_test.go +++ b/connmgr/dynamicbanscore_test.go @@ -66,3 +66,15 @@ func TestDynamicBanScoreReset(t *testing.T) { t.Errorf("Failed to reset ban score.") } } + +// TestDynamicBanScoreString +func TestDynamicBanScoreString(t *testing.T) { + var bs DynamicBanScore + base := time.Now() + + r := bs.increase(100, 50, base) + if r != 150 { + t.Errorf("Unexpected result %d after ban score increase.", r) + } + t.Log(bs.String()) +} diff --git a/connmgr/seed.go b/connmgr/seed.go index 063b546ab8..4c26160d8f 100644 --- a/connmgr/seed.go +++ b/connmgr/seed.go @@ -24,7 +24,7 @@ const ( // OnSeed is the signature of the callback function which is invoked when DNS // seeding is succesfull. -type OnSeed func(addrs []*wire.NetAddress) +type OnSeed func(addrs []*wire.NetAddressV2) // LookupFunc is the signature of the DNS lookup function. type LookupFunc func(string) ([]net.IP, error) @@ -56,11 +56,11 @@ func SeedFromDNS(chainParams *chaincfg.Params, reqServices wire.ServiceFlag, if numPeers == 0 { return } - addresses := make([]*wire.NetAddress, len(seedpeers)) + addresses := make([]*wire.NetAddressV2, len(seedpeers)) // if this errors then we have *real* problems intPort, _ := strconv.Atoi(chainParams.DefaultPort) for i, peer := range seedpeers { - addresses[i] = wire.NewNetAddressTimestamp( + addresses[i] = wire.NetAddressV2FromBytes( // bitcoind seeds with addresses from // a time randomly selected between 3 // and 7 days ago. diff --git a/database/README.md b/database/README.md index c51c9cc66b..21563d1af8 100644 --- a/database/README.md +++ b/database/README.md @@ -1,9 +1,9 @@ database ======== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/database) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/database) Package database provides a block and metadata storage database. @@ -42,11 +42,11 @@ $ go get -u github.com/btcsuite/btcd/database ## Examples -* [Basic Usage Example](http://godoc.org/github.com/btcsuite/btcd/database#example-package--BasicUsage) +* [Basic Usage Example](https://pkg.go.dev/github.com/btcsuite/btcd/database#example-package--BasicUsage) Demonstrates creating a new database and using a managed read-write transaction to store and retrieve metadata. -* [Block Storage and Retrieval Example](http://godoc.org/github.com/btcsuite/btcd/database#example-package--BlockStorageAndRetrieval) +* [Block Storage and Retrieval Example](https://pkg.go.dev/github.com/btcsuite/btcd/database#example-package--BlockStorageAndRetrieval) Demonstrates creating a new database, using a managed read-write transaction to store a block, and then using a managed read-only transaction to fetch the block. diff --git a/database/cmd/dbtool/globalconfig.go b/database/cmd/dbtool/globalconfig.go index 5cbd9b3af9..2ec746a43d 100644 --- a/database/cmd/dbtool/globalconfig.go +++ b/database/cmd/dbtool/globalconfig.go @@ -14,7 +14,7 @@ import ( "github.com/btcsuite/btcd/database" _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) var ( @@ -33,9 +33,9 @@ var ( type config struct { DataDir string `short:"b" long:"datadir" description:"Location of the btcd data directory"` DbType string `long:"dbtype" description:"Database backend to use for the Block Chain"` - TestNet3 bool `long:"testnet" description:"Use the test network"` RegressionTest bool `long:"regtest" description:"Use the regression test network"` SimNet bool `long:"simnet" description:"Use the simulation test network"` + TestNet3 bool `long:"testnet" description:"Use the test network"` } // fileExists reports whether the named file or directory exists. diff --git a/database/cmd/dbtool/insecureimport.go b/database/cmd/dbtool/insecureimport.go index 7564eb68ad..a01c74bb55 100644 --- a/database/cmd/dbtool/insecureimport.go +++ b/database/cmd/dbtool/insecureimport.go @@ -15,7 +15,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // importCmd defines the configuration options for the insecureimport command. diff --git a/database/cmd/dbtool/main.go b/database/cmd/dbtool/main.go index 9eccd5989b..73c59a6e7d 100644 --- a/database/cmd/dbtool/main.go +++ b/database/cmd/dbtool/main.go @@ -7,7 +7,6 @@ package main import ( "os" "path/filepath" - "runtime" "strings" "github.com/btcsuite/btcd/database" @@ -106,9 +105,6 @@ func realMain() error { } func main() { - // Use all processor cores. - runtime.GOMAXPROCS(runtime.NumCPU()) - // Work around defer not working after os.Exit() if err := realMain(); err != nil { os.Exit(1) diff --git a/database/example_test.go b/database/example_test.go index 8b6fe7bce4..b64baf2c8e 100644 --- a/database/example_test.go +++ b/database/example_test.go @@ -7,14 +7,15 @@ package database_test import ( "bytes" "fmt" + "io/ioutil" "os" "path/filepath" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/database" _ "github.com/btcsuite/btcd/database/ffldb" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // This example demonstrates creating a new database. @@ -122,9 +123,14 @@ func Example_blockStorageAndRetrieval() { // Typically you wouldn't want to remove the database right away like // this, nor put it in the temp directory, but it's done here to ensure // the example cleans up after itself. - dbPath := filepath.Join(os.TempDir(), "exampleblkstorage") + dbPath, err := ioutil.TempDir("", "exampleblkstorage") + if err != nil { + fmt.Println(err) + return + } db, err := database.Create("ffldb", dbPath, wire.MainNet) if err != nil { + fmt.Println("fail here") fmt.Println(err) return } diff --git a/database/ffldb/README.md b/database/ffldb/README.md index ebaa5a7e01..5b855faa55 100644 --- a/database/ffldb/README.md +++ b/database/ffldb/README.md @@ -1,9 +1,9 @@ ffldb ===== -[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/database/ffldb?status.png)](http://godoc.org/github.com/btcsuite/btcd/database/ffldb) +[![GoDoc](https://pkg.go.dev/github.com/btcsuite/btcd/database/ffldb?status.png)](https://pkg.go.dev/github.com/btcsuite/btcd/database/ffldb) ======= Package ffldb implements a driver for the database package that uses leveldb for diff --git a/database/ffldb/bench_test.go b/database/ffldb/bench_test.go index 8d020313d8..f4a0eb32e5 100644 --- a/database/ffldb/bench_test.go +++ b/database/ffldb/bench_test.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/database" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // BenchmarkBlockHeader benchmarks how long it takes to load the mainnet genesis diff --git a/database/ffldb/blockio.go b/database/ffldb/blockio.go index 3d7782f93c..8fb27ab283 100644 --- a/database/ffldb/blockio.go +++ b/database/ffldb/blockio.go @@ -474,7 +474,7 @@ func (s *blockStore) writeBlock(rawBlock []byte) (blockLocation, error) { _, _ = hasher.Write(scratch[:]) // Serialized block. - if err := s.writeData(rawBlock[:], "block"); err != nil { + if err := s.writeData(rawBlock, "block"); err != nil { return blockLocation{}, err } _, _ = hasher.Write(rawBlock) diff --git a/database/ffldb/db.go b/database/ffldb/db.go index fd1ff895c3..f571d3889b 100644 --- a/database/ffldb/db.go +++ b/database/ffldb/db.go @@ -18,14 +18,14 @@ import ( "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/database/internal/treap" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/goleveldb/leveldb" - "github.com/btcsuite/goleveldb/leveldb/comparer" - ldberrors "github.com/btcsuite/goleveldb/leveldb/errors" - "github.com/btcsuite/goleveldb/leveldb/filter" - "github.com/btcsuite/goleveldb/leveldb/iterator" - "github.com/btcsuite/goleveldb/leveldb/opt" - "github.com/btcsuite/goleveldb/leveldb/util" + "github.com/btcsuite/btcd/btcutil" + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/comparer" + ldberrors "github.com/syndtr/goleveldb/leveldb/errors" + "github.com/syndtr/goleveldb/leveldb/filter" + "github.com/syndtr/goleveldb/leveldb/iterator" + "github.com/syndtr/goleveldb/leveldb/opt" + "github.com/syndtr/goleveldb/leveldb/util" ) const ( @@ -950,7 +950,7 @@ type pendingBlock struct { } // transaction represents a database transaction. It can either be read-only or -// read-write and implements the database.Bucket interface. The transaction +// read-write and implements the database.Tx interface. The transaction // provides a root bucket against which all read and writes occur. type transaction struct { managed bool // Is the transaction managed? diff --git a/database/ffldb/dbcache.go b/database/ffldb/dbcache.go index a2346b58df..ec42ee969e 100644 --- a/database/ffldb/dbcache.go +++ b/database/ffldb/dbcache.go @@ -11,9 +11,9 @@ import ( "time" "github.com/btcsuite/btcd/database/internal/treap" - "github.com/btcsuite/goleveldb/leveldb" - "github.com/btcsuite/goleveldb/leveldb/iterator" - "github.com/btcsuite/goleveldb/leveldb/util" + "github.com/syndtr/goleveldb/leveldb" + "github.com/syndtr/goleveldb/leveldb/iterator" + "github.com/syndtr/goleveldb/leveldb/util" ) const ( diff --git a/database/ffldb/driver_test.go b/database/ffldb/driver_test.go index 8ba6691af3..ef35f07840 100644 --- a/database/ffldb/driver_test.go +++ b/database/ffldb/driver_test.go @@ -9,13 +9,12 @@ import ( "os" "path/filepath" "reflect" - "runtime" "testing" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/database/ffldb" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // dbType is the database type name for this driver. @@ -278,7 +277,6 @@ func TestInterface(t *testing.T) { } // Run all of the interface tests against the database. - runtime.GOMAXPROCS(runtime.NumCPU()) // Change the maximum file size to a small value to force multiple flat // files with the test data set. diff --git a/database/ffldb/interface_test.go b/database/ffldb/interface_test.go index 4989913de9..af26faccab 100644 --- a/database/ffldb/interface_test.go +++ b/database/ffldb/interface_test.go @@ -29,7 +29,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) var ( @@ -1299,8 +1299,7 @@ func testFetchBlockIO(tc *testContext, tx database.Tx) bool { return false } - // Ensure the block header fetched from the database matches the - // expected bytes. + // Ensure block hash exists as expected. hasBlock, err := tx.HasBlock(blockHash) if err != nil { tc.t.Errorf("HasBlock(%s): unexpected error: %v", diff --git a/database/ffldb/ldbtreapiter.go b/database/ffldb/ldbtreapiter.go index b3d6b6bd58..10ce207c7f 100644 --- a/database/ffldb/ldbtreapiter.go +++ b/database/ffldb/ldbtreapiter.go @@ -6,8 +6,8 @@ package ffldb import ( "github.com/btcsuite/btcd/database/internal/treap" - "github.com/btcsuite/goleveldb/leveldb/iterator" - "github.com/btcsuite/goleveldb/leveldb/util" + "github.com/syndtr/goleveldb/leveldb/iterator" + "github.com/syndtr/goleveldb/leveldb/util" ) // ldbTreapIter wraps a treap iterator to provide the additional functionality diff --git a/database/ffldb/whitebox_test.go b/database/ffldb/whitebox_test.go index 4e529363dc..f2eae8ce09 100644 --- a/database/ffldb/whitebox_test.go +++ b/database/ffldb/whitebox_test.go @@ -20,9 +20,9 @@ import ( "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/goleveldb/leveldb" - ldberrors "github.com/btcsuite/goleveldb/leveldb/errors" + "github.com/btcsuite/btcd/btcutil" + "github.com/syndtr/goleveldb/leveldb" + ldberrors "github.com/syndtr/goleveldb/leveldb/errors" ) var ( @@ -643,9 +643,9 @@ func TestFailureScenarios(t *testing.T) { // context. maxSize := int64(-1) if maxFileSize, ok := tc.maxFileSizes[fileNum]; ok { - maxSize = int64(maxFileSize) + maxSize = maxFileSize } - file := &mockFile{maxSize: int64(maxSize)} + file := &mockFile{maxSize: maxSize} tc.files[fileNum] = &lockableFile{file: file} return file, nil } diff --git a/database/interface.go b/database/interface.go index 435a8ff581..aa88cc3723 100644 --- a/database/interface.go +++ b/database/interface.go @@ -9,7 +9,7 @@ package database import ( "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // Cursor represents a cursor over key/value pairs and nested buckets of a diff --git a/database/internal/treap/README.md b/database/internal/treap/README.md index ee49ef9bf6..14c3159a50 100644 --- a/database/internal/treap/README.md +++ b/database/internal/treap/README.md @@ -1,14 +1,14 @@ treap ===== -[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/database/internal/treap?status.png)](http://godoc.org/github.com/btcsuite/btcd/database/internal/treap) +[![GoDoc](https://pkg.go.dev/github.com/btcsuite/btcd/database/internal/treap?status.png)](https://pkg.go.dev/github.com/btcsuite/btcd/database/internal/treap) Package treap implements a treap data structure that is used to hold ordered key/value pairs using a combination of binary search tree and heap semantics. It is a self-organizing and randomized data structure that doesn't require -complex operations to to maintain balance. Search, insert, and delete +complex operations to maintain balance. Search, insert, and delete operations are all O(log n). Both mutable and immutable variants are provided. The mutable variant is typically faster since it is able to simply update the diff --git a/doc.go b/doc.go index ace26b0f99..70d0d9e45c 100644 --- a/doc.go +++ b/doc.go @@ -21,105 +21,137 @@ Usage: btcd [OPTIONS] Application Options: - -V, --version Display version information and exit - -C, --configfile= Path to configuration file - -b, --datadir= Directory to store data - --logdir= Directory to log output. - -a, --addpeer= Add a peer to connect with at startup - --connect= Connect only to the specified peers at startup - --nolisten Disable listening for incoming connections -- NOTE: - Listening is automatically disabled if the --connect - or --proxy options are used without also specifying - listen interfaces via --listen - --listen= Add an interface/port to listen for connections - (default all interfaces port: 8333, testnet: 18333) - --maxpeers= Max number of inbound and outbound peers (125) - --nobanning Disable banning of misbehaving peers - --banduration= How long to ban misbehaving peers. Valid time units - are {s, m, h}. Minimum 1 second (24h0m0s) - --banthreshold= Maximum allowed ban score before disconnecting and - banning misbehaving peers. - --whitelist= Add an IP network or IP that will not be banned. - (eg. 192.168.1.0/24 or ::1) - -u, --rpcuser= Username for RPC connections - -P, --rpcpass= Password for RPC connections - --rpclimituser= Username for limited RPC connections - --rpclimitpass= Password for limited RPC connections - --rpclisten= Add an interface/port to listen for RPC connections - (default port: 8334, testnet: 18334) - --rpccert= File containing the certificate file - --rpckey= File containing the certificate key - --rpcmaxclients= Max number of RPC clients for standard connections - (10) - --rpcmaxwebsockets= Max number of RPC websocket connections (25) - --rpcquirks Mirror some JSON-RPC quirks of Bitcoin Core -- NOTE: - Discouraged unless interoperability issues need to - be worked around - --norpc Disable built-in RPC server -- NOTE: The RPC server - is disabled by default if no rpcuser/rpcpass or - rpclimituser/rpclimitpass is specified - --notls Disable TLS for the RPC server -- NOTE: This is only - allowed if the RPC server is bound to localhost - --nodnsseed Disable DNS seeding for peers - --externalip= Add an ip to the list of local addresses we claim to - listen on to peers - --proxy= Connect via SOCKS5 proxy (eg. 127.0.0.1:9050) - --proxyuser= Username for proxy server - --proxypass= Password for proxy server - --onion= Connect to tor hidden services via SOCKS5 proxy - (eg. 127.0.0.1:9050) - --onionuser= Username for onion proxy server - --onionpass= Password for onion proxy server - --noonion Disable connecting to tor hidden services - --torisolation Enable Tor stream isolation by randomizing user - credentials for each connection. - --testnet Use the test network - --regtest Use the regression test network - --simnet Use the simulation test network - --addcheckpoint= Add a custom checkpoint. Format: ':' - --nocheckpoints Disable built-in checkpoints. Don't do this unless - you know what you're doing. - --uacomment= Comment to add to the user agent -- - See BIP 14 for more information. - --dbtype= Database backend to use for the Block Chain (ffldb) - --profile= Enable HTTP profiling on given port -- NOTE port - must be between 1024 and 65536 - --cpuprofile= Write CPU profile to the specified file - -d, --debuglevel= Logging level for all subsystems {trace, debug, - info, warn, error, critical} -- You may also specify - =,=,... to set - the log level for individual subsystems -- Use show - to list available subsystems (info) - --upnp Use UPnP to map our listening port outside of NAT - --minrelaytxfee= The minimum transaction fee in BTC/kB to be - considered a non-zero fee. - --limitfreerelay= Limit relay of transactions with no transaction fee - to the given amount in thousands of bytes per - minute (15) - --norelaypriority Do not require free or low-fee transactions to have - high priority for relaying - --maxorphantx= Max number of orphan transactions to keep in memory - (100) - --generate Generate (mine) bitcoins using the CPU - --miningaddr= Add the specified payment address to the list of - addresses to use for generated blocks -- At least - one address is required if the generate option is - set - --blockminsize= Mininum block size in bytes to be used when creating - a block - --blockmaxsize= Maximum block size in bytes to be used when creating - a block (750000) - --blockprioritysize= Size in bytes for high-priority/low-fee transactions - when creating a block (50000) - --nopeerbloomfilters Disable bloom filtering support. - --nocfilters Disable committed filtering (CF) support. - --sigcachemaxsize= The maximum number of entries in the signature - verification cache. - --blocksonly Do not accept transactions from remote peers. - --relaynonstd Relay non-standard transactions regardless of the - default settings for the active network. - --rejectnonstd Reject non-standard transactions regardless of the - default settings for the active network. + --addcheckpoint= Add a custom checkpoint. Format: + ':' + -a, --addpeer= Add a peer to connect with at startup + --addrindex Maintain a full address-based transaction index + which makes the searchrawtransactions RPC + available + --banduration= How long to ban misbehaving peers. Valid time + units are {s, m, h}. Minimum 1 second (default: + 24h0m0s) + --banthreshold= Maximum allowed ban score before disconnecting + and banning misbehaving peers. (default: 100) + --blockmaxsize= Maximum block size in bytes to be used when + creating a block (default: 750000) + --blockminsize= Mininum block size in bytes to be used when + creating a block + --blockmaxweight= Maximum block weight to be used when creating a + block (default: 3000000) + --blockminweight= Mininum block weight to be used when creating a + block + --blockprioritysize= Size in bytes for high-priority/low-fee + transactions when creating a block (default: + 50000) + --blocksonly Do not accept transactions from remote peers. + -C, --configfile= Path to configuration file + --connect= Connect only to the specified peers at startup + --cpuprofile= Write CPU profile to the specified file + -b, --datadir= Directory to store data + --dbtype= Database backend to use for the Block Chain + (default: ffldb) + -d, --debuglevel= Logging level for all subsystems {trace, debug, + info, warn, error, critical} -- You may also + specify + =,=,... to + set the log level for individual subsystems -- + Use show to list available subsystems (default: + info) + --dropaddrindex Deletes the address-based transaction index from + the database on start up and then exits. + --dropcfindex Deletes the index used for committed filtering + (CF) support from the database on start up and + then exits. + --droptxindex Deletes the hash-based transaction index from the + database on start up and then exits. + --externalip= Add an ip to the list of local addresses we claim + to listen on to peers + --generate Generate (mine) bitcoins using the CPU + --limitfreerelay= Limit relay of transactions with no transaction + fee to the given amount in thousands of bytes per + minute (default: 15) + --listen= Add an interface/port to listen for connections + (default all interfaces port: 8333, testnet: + 18333, signet: 38333) + --logdir= Directory to log output + --maxorphantx= Max number of orphan transactions to keep in + memory (default: 100) + --maxpeers= Max number of inbound and outbound peers + (default: 125) + --miningaddr= Add the specified payment address to the list of + addresses to use for generated blocks -- At least + one address is required if the generate option is + set + --minrelaytxfee= The minimum transaction fee in BTC/kB to be + considered a non-zero fee. (default: 1e-05) + --nobanning Disable banning of misbehaving peers + --nocfilters Disable committed filtering (CF) support + --nocheckpoints Disable built-in checkpoints. Don't do this + unless you know what you're doing. + --nodnsseed Disable DNS seeding for peers + --nolisten Disable listening for incoming connections -- + NOTE: Listening is automatically disabled if the + --connect or --proxy options are used without + also specifying listen interfaces via --listen + --noonion Disable connecting to tor hidden services + --nopeerbloomfilters Disable bloom filtering support + --norelaypriority Do not require free or low-fee transactions to + have high priority for relaying + --norpc Disable built-in RPC server -- NOTE: The RPC + server is disabled by default if no + rpcuser/rpcpass or rpclimituser/rpclimitpass is + specified + --notls Disable TLS for the RPC server -- NOTE: This is + only allowed if the RPC server is bound to + localhost + --onion= Connect to tor hidden services via SOCKS5 proxy + (eg. 127.0.0.1:9050) + --onionpass= Password for onion proxy server + --onionuser= Username for onion proxy server + --profile= Enable HTTP profiling on given port -- NOTE port + must be between 1024 and 65536 + --proxy= Connect via SOCKS5 proxy (eg. 127.0.0.1:9050) + --proxypass= Password for proxy server + --proxyuser= Username for proxy server + --regtest Use the regression test network + --rejectnonstd Reject non-standard transactions regardless of + the default settings for the active network. + --relaynonstd Relay non-standard transactions regardless of the + default settings for the active network. + --rpccert= File containing the certificate file + --rpckey= File containing the certificate key + --rpclimitpass= Password for limited RPC connections + --rpclimituser= Username for limited RPC connections + --rpclisten= Add an interface/port to listen for RPC + connections (default port: 8334, testnet: 18334) + --rpcmaxclients= Max number of RPC clients for standard + connections (default: 10) + --rpcmaxconcurrentreqs= Max number of concurrent RPC requests that may be + processed concurrently (default: 20) + --rpcmaxwebsockets= Max number of RPC websocket connections (default: + 25) + --rpcquirks Mirror some JSON-RPC quirks of Bitcoin Core -- + NOTE: Discouraged unless interoperability issues + need to be worked around + -P, --rpcpass= Password for RPC connections + -u, --rpcuser= Username for RPC connections + --sigcachemaxsize= The maximum number of entries in the signature + verification cache (default: 100000) + --simnet Use the simulation test network + --testnet Use the test network + --torisolation Enable Tor stream isolation by randomizing user + credentials for each connection. + --trickleinterval= Minimum time between attempts to send new + inventory to a connected peer (default: 10s) + --txindex Maintain a full hash-based transaction index + which makes all transactions available via the + getrawtransaction RPC + --uacomment= Comment to add to the user agent -- See BIP 14 + for more information. + --upnp Use UPnP to map our listening port outside of NAT + -V, --version Display version information and exit + --whitelist= Add an IP network or IP that will not be banned. + (eg. 192.168.1.0/24 or ::1) Help Options: -h, --help Show this help message diff --git a/docs/.gitignore b/docs/.gitignore new file mode 100644 index 0000000000..a485625d42 --- /dev/null +++ b/docs/.gitignore @@ -0,0 +1 @@ +/_build diff --git a/docs/Makefile b/docs/Makefile new file mode 100644 index 0000000000..d4bb2cbb9e --- /dev/null +++ b/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/docs/README.md b/docs/README.md deleted file mode 100644 index afc58a631e..0000000000 --- a/docs/README.md +++ /dev/null @@ -1,296 +0,0 @@ -### Table of Contents -1. [About](#About) -2. [Getting Started](#GettingStarted) - 1. [Installation](#Installation) - 1. [Windows](#WindowsInstallation) - 2. [Linux/BSD/MacOSX/POSIX](#PosixInstallation) - 1. [Gentoo Linux](#GentooInstallation) - 2. [Configuration](#Configuration) - 3. [Controlling and Querying btcd via btcctl](#BtcctlConfig) - 4. [Mining](#Mining) -3. [Help](#Help) - 1. [Startup](#Startup) - 1. [Using bootstrap.dat](#BootstrapDat) - 2. [Network Configuration](#NetworkConfig) - 3. [Wallet](#Wallet) -4. [Contact](#Contact) - 1. [IRC](#ContactIRC) - 2. [Mailing Lists](#MailingLists) -5. [Developer Resources](#DeveloperResources) - 1. [Code Contribution Guidelines](#ContributionGuidelines) - 2. [JSON-RPC Reference](#JSONRPCReference) - 3. [The btcsuite Bitcoin-related Go Packages](#GoPackages) - - - -### 1. About - -btcd is a full node bitcoin implementation written in [Go](http://golang.org), -licensed under the [copyfree](http://www.copyfree.org) ISC License. - -This project is currently under active development and is in a Beta state. It -is extremely stable and has been in production use since October 2013. - -It properly downloads, validates, and serves the block chain using the exact -rules (including consensus bugs) for block acceptance as Bitcoin Core. We have -taken great care to avoid btcd causing a fork to the block chain. It includes a -full block validation testing framework which contains all of the 'official' -block acceptance tests (and some additional ones) that is run on every pull -request to help ensure it properly follows consensus. Also, it passes all of -the JSON test data in the Bitcoin Core code. - -It also properly relays newly mined blocks, maintains a transaction pool, and -relays individual transactions that have not yet made it into a block. It -ensures all individual transactions admitted to the pool follow the rules -required by the block chain and also includes more strict checks which filter -transactions based on miner requirements ("standard" transactions). - -One key difference between btcd and Bitcoin Core is that btcd does *NOT* include -wallet functionality and this was a very intentional design decision. See the -blog entry [here](https://web.archive.org/web/20171125143919/https://blog.conformal.com/btcd-not-your-moms-bitcoin-daemon) -for more details. This means you can't actually make or receive payments -directly with btcd. That functionality is provided by the -[btcwallet](https://github.com/btcsuite/btcwallet) and -[Paymetheus](https://github.com/btcsuite/Paymetheus) (Windows-only) projects -which are both under active development. - - - -### 2. Getting Started - - - -**2.1 Installation** - -The first step is to install btcd. See one of the following sections for -details on how to install on the supported operating systems. - - - -**2.1.1 Windows Installation**
- -* Install the MSI available at: https://github.com/btcsuite/btcd/releases -* Launch btcd from the Start Menu - -
- -**2.1.2 Linux/BSD/MacOSX/POSIX Installation** - - -- Install Go according to the installation instructions here: - http://golang.org/doc/install - -- Ensure Go was installed properly and is a supported version: - -```bash -$ go version -$ go env GOROOT GOPATH -``` - -NOTE: The `GOROOT` and `GOPATH` above must not be the same path. It is -recommended that `GOPATH` is set to a directory in your home directory such as -`~/goprojects` to avoid write permission issues. It is also recommended to add -`$GOPATH/bin` to your `PATH` at this point. - -- Run the following commands to obtain btcd, all dependencies, and install it: - -```bash -$ git clone https://github.com/btcsuite/btcd $GOPATH/src/github.com/btcsuite/btcd -$ cd $GOPATH/src/github.com/btcsuite/btcd -$ GO111MODULE=on go install -v . ./cmd/... -``` - -- btcd (and utilities) will now be installed in ```$GOPATH/bin```. If you did - not already add the bin directory to your system path during Go installation, - we recommend you do so now. - -**Updating** - -- Run the following commands to update btcd, all dependencies, and install it: - -```bash -$ cd $GOPATH/src/github.com/btcsuite/btcd -$ git pull && GO111MODULE=on go install -v . ./cmd/... -``` - - - -**2.1.2.1 Gentoo Linux Installation** - -* Install Layman and enable the Bitcoin overlay. - * https://gitlab.com/bitcoin/gentoo -* Copy or symlink `/var/lib/layman/bitcoin/Documentation/package.keywords/btcd-live` to `/etc/portage/package.keywords/` -* Install btcd: `$ emerge net-p2p/btcd` - - - -**2.2 Configuration** - -btcd has a number of [configuration](http://godoc.org/github.com/btcsuite/btcd) -options, which can be viewed by running: `$ btcd --help`. - - - -**2.3 Controlling and Querying btcd via btcctl** - -btcctl is a command line utility that can be used to both control and query btcd -via [RPC](http://www.wikipedia.org/wiki/Remote_procedure_call). btcd does -**not** enable its RPC server by default; You must configure at minimum both an -RPC username and password or both an RPC limited username and password: - -* btcd.conf configuration file -``` -[Application Options] -rpcuser=myuser -rpcpass=SomeDecentp4ssw0rd -rpclimituser=mylimituser -rpclimitpass=Limitedp4ssw0rd -``` -* btcctl.conf configuration file -``` -[Application Options] -rpcuser=myuser -rpcpass=SomeDecentp4ssw0rd -``` -OR -``` -[Application Options] -rpclimituser=mylimituser -rpclimitpass=Limitedp4ssw0rd -``` -For a list of available options, run: `$ btcctl --help` - - - -**2.4 Mining** - -btcd supports the `getblocktemplate` RPC. -The limited user cannot access this RPC. - - -**1. Add the payment addresses with the `miningaddr` option.** - -``` -[Application Options] -rpcuser=myuser -rpcpass=SomeDecentp4ssw0rd -miningaddr=12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX -miningaddr=1M83ju3EChKYyysmM2FXtLNftbacagd8FR -``` - -**2. Add btcd's RPC TLS certificate to system Certificate Authority list.** - -`cgminer` uses [curl](http://curl.haxx.se/) to fetch data from the RPC server. -Since curl validates the certificate by default, we must install the `btcd` RPC -certificate into the default system Certificate Authority list. - -**Ubuntu** - -1. Copy rpc.cert to /usr/share/ca-certificates: `# cp /home/user/.btcd/rpc.cert /usr/share/ca-certificates/btcd.crt` -2. Add btcd.crt to /etc/ca-certificates.conf: `# echo btcd.crt >> /etc/ca-certificates.conf` -3. Update the CA certificate list: `# update-ca-certificates` - -**3. Set your mining software url to use https.** - -`$ cgminer -o https://127.0.0.1:8334 -u rpcuser -p rpcpassword` - - - -### 3. Help - - - -**3.1 Startup** - -Typically btcd will run and start downloading the block chain with no extra -configuration necessary, however, there is an optional method to use a -`bootstrap.dat` file that may speed up the initial block chain download process. - - - -**3.1.1 bootstrap.dat** - -* [Using bootstrap.dat](https://github.com/btcsuite/btcd/tree/master/docs/using_bootstrap_dat.md) - - - -**3.1.2 Network Configuration** - -* [What Ports Are Used by Default?](https://github.com/btcsuite/btcd/tree/master/docs/default_ports.md) -* [How To Listen on Specific Interfaces](https://github.com/btcsuite/btcd/tree/master/docs/configure_peer_server_listen_interfaces.md) -* [How To Configure RPC Server to Listen on Specific Interfaces](https://github.com/btcsuite/btcd/tree/master/docs/configure_rpc_server_listen_interfaces.md) -* [Configuring btcd with Tor](https://github.com/btcsuite/btcd/tree/master/docs/configuring_tor.md) - - - -**3.1 Wallet** - -btcd was intentionally developed without an integrated wallet for security -reasons. Please see [btcwallet](https://github.com/btcsuite/btcwallet) for more -information. - - - - -### 4. Contact - - - -**4.1 IRC** - -* [irc.freenode.net](irc://irc.freenode.net), channel `#btcd` - - - -**4.2 Mailing Lists** - -* btcd: discussion - of btcd and its packages. -* btcd-commits: - readonly mail-out of source code changes. - - - -### 5. Developer Resources - - - -* [Code Contribution Guidelines](https://github.com/btcsuite/btcd/tree/master/docs/code_contribution_guidelines.md) - - - -* [JSON-RPC Reference](https://github.com/btcsuite/btcd/tree/master/docs/json_rpc_api.md) - * [RPC Examples](https://github.com/btcsuite/btcd/tree/master/docs/json_rpc_api.md#ExampleCode) - - - -* The btcsuite Bitcoin-related Go Packages: - * [btcrpcclient](https://github.com/btcsuite/btcd/tree/master/rpcclient) - Implements a - robust and easy to use Websocket-enabled Bitcoin JSON-RPC client - * [btcjson](https://github.com/btcsuite/btcd/tree/master/btcjson) - Provides an extensive API - for the underlying JSON-RPC command and return values - * [wire](https://github.com/btcsuite/btcd/tree/master/wire) - Implements the - Bitcoin wire protocol - * [peer](https://github.com/btcsuite/btcd/tree/master/peer) - - Provides a common base for creating and managing Bitcoin network peers. - * [blockchain](https://github.com/btcsuite/btcd/tree/master/blockchain) - - Implements Bitcoin block handling and chain selection rules - * [blockchain/fullblocktests](https://github.com/btcsuite/btcd/tree/master/blockchain/fullblocktests) - - Provides a set of block tests for testing the consensus validation rules - * [txscript](https://github.com/btcsuite/btcd/tree/master/txscript) - - Implements the Bitcoin transaction scripting language - * [btcec](https://github.com/btcsuite/btcd/tree/master/btcec) - Implements - support for the elliptic curve cryptographic functions needed for the - Bitcoin scripts - * [database](https://github.com/btcsuite/btcd/tree/master/database) - - Provides a database interface for the Bitcoin block chain - * [mempool](https://github.com/btcsuite/btcd/tree/master/mempool) - - Package mempool provides a policy-enforced pool of unmined bitcoin - transactions. - * [btcutil](https://github.com/btcsuite/btcutil) - Provides Bitcoin-specific - convenience functions and types - * [chainhash](https://github.com/btcsuite/btcd/tree/master/chaincfg/chainhash) - - Provides a generic hash type and associated functions that allows the - specific hash algorithm to be abstracted. - * [connmgr](https://github.com/btcsuite/btcd/tree/master/connmgr) - - Package connmgr implements a generic Bitcoin network connection manager. diff --git a/docs/README.md b/docs/README.md new file mode 120000 index 0000000000..dd0ea36c8e --- /dev/null +++ b/docs/README.md @@ -0,0 +1 @@ +index.md \ No newline at end of file diff --git a/docs/code_contribution_guidelines.md b/docs/code_contribution_guidelines.md index b643e911a3..c0a7eecc5f 100644 --- a/docs/code_contribution_guidelines.md +++ b/docs/code_contribution_guidelines.md @@ -1,23 +1,4 @@ -### Table of Contents -1. [Overview](#Overview)
-2. [Minimum Recommended Skillset](#MinSkillset)
-3. [Required Reading](#ReqReading)
-4. [Development Practices](#DevelopmentPractices)
-4.1. [Share Early, Share Often](#ShareEarly)
-4.2. [Testing](#Testing)
-4.3. [Code Documentation and Commenting](#CodeDocumentation)
-4.4. [Model Git Commit Messages](#ModelGitCommitMessages)
-5. [Code Approval Process](#CodeApproval)
-5.1 [Code Review](#CodeReview)
-5.2 [Rework Code (if needed)](#CodeRework)
-5.3 [Acceptance](#CodeAcceptance)
-6. [Contribution Standards](#Standards)
-6.1. [Contribution Checklist](#Checklist)
-6.2. [Licensing of Contributions](#Licensing)
- -
- -### 1. Overview +# Code contribution guidelines Developing cryptocurrencies is an exciting endeavor that touches a wide variety of areas such as wire protocols, peer-to-peer networking, databases, @@ -38,9 +19,7 @@ is outlined on this page. We highly encourage code contributions, however it is imperative that you adhere to the guidelines established on this page. - - -### 2. Minimum Recommended Skillset +## Minimum Recommended Skillset The following list is a set of core competencies that we recommend you possess before you really start attempting to contribute code to the project. These are @@ -64,9 +43,7 @@ if you wish to contribute to the cryptography code, you should have a good understanding of the various aspects involved with cryptography such as the security and performance implications. - - -### 3. Required Reading +## Required Reading - [Effective Go](http://golang.org/doc/effective_go.html) - The entire btcd suite follows the guidelines in this document. For your code to be accepted, @@ -74,17 +51,13 @@ security and performance implications. - [Original Satoshi Whitepaper](http://www.google.com/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&ved=0CCkQFjAA&url=http%3A%2F%2Fbitcoin.org%2Fbitcoin.pdf&ei=os3VUuH8G4SlsASV74GoAg&usg=AFQjCNEipPLigou_1MfB7DQjXCNdlylrBg&sig2=FaHDuT5z36GMWDEnybDJLg&bvm=bv.59378465,d.b2I) - This is the white paper that started it all. Having a solid foundation to build on will make the code much more comprehensible. - - -### 4. Development Practices +## Development Practices Developers are expected to work in their own trees and submit pull requests when they feel their feature or bug fix is ready for integration into the master branch. - - -### 4.1 Share Early, Share Often +## Share Early, Share Often We firmly believe in the share early, share often approach. The basic premise of the approach is to announce your plans **before** you start work, and once @@ -105,9 +78,7 @@ This approach has several benefits: - The quicker your changes are merged to master, the less time you will need to spend rebasing and otherwise trying to keep up with the main code base - - -### 4.2 Testing +## Testing One of the major design goals of all core btcd packages is to aim for complete test coverage. This is financial software so bugs and regressions can cost @@ -126,34 +97,37 @@ checking coverage statistics straight forward. For more information about the test coverage tools, see the [golang cover blog post](http://blog.golang.org/cover). A quick summary of test practices follows: + - All new code should be accompanied by tests that ensure the code behaves correctly when given expected values, and, perhaps even more importantly, that it handles errors gracefully - When you fix a bug, it should be accompanied by tests which exercise the bug to both prove it has been resolved and to prevent future regressions - - -### 4.3 Code Documentation and Commenting +## Code Documentation and Commenting - At a minimum every function must be commented with its intended purpose and any assumptions that it makes - Function comments must always begin with the name of the function per [Effective Go](http://golang.org/doc/effective_go.html) - Function comments should be complete sentences since they allow a wide - variety of automated presentations such as [godoc.org](https://godoc.org) + variety of automated presentations such as [go.dev](https://go.dev) - The general rule of thumb is to look at it as if you were completely unfamiliar with the code and ask yourself, would this give me enough - information to understand what this function does and how I'd probably want - to use it? + information to understand what this function does and how I'd probably want + to use it? - Exported functions should also include detailed information the caller of the - function will likely need to know and/or understand:

+ function will likely need to know and/or understand: + **WRONG** + ```Go // convert a compact uint32 to big.Int func CompactToBig(compact uint32) *big.Int { ``` + **RIGHT** + ```Go // CompactToBig converts a compact representation of a whole number N to a // big integer. The representation is similar to IEEE754 floating point @@ -180,31 +154,35 @@ func CompactToBig(compact uint32) *big.Int { // sign bit, but it is implemented here to stay consistent with bitcoind. func CompactToBig(compact uint32) *big.Int { ``` + - Comments in the body of the code are highly encouraged, but they should explain the intention of the code as opposed to just calling out the - obvious

+ obvious + **WRONG** + ```Go // return err if amt is less than 5460 if amt < 5460 { - return err + return err } ``` + **RIGHT** + ```Go // Treat transactions with amounts less than the amount which is considered dust // as non-standard. if amt < 5460 { - return err + return err } ``` + **NOTE:** The above should really use a constant as opposed to a magic number, but it was left as a magic number to show how much of a difference a good comment can make. -
- -### 4.4 Model Git Commit Messages +## Model Git Commit Messages This project prefers to keep a clean commit history with well-formed commit messages. This section illustrates a model commit message and provides a bit @@ -214,7 +192,7 @@ being provided here. Here’s a model Git commit message: -``` +```text Short (50 chars or less) summary of changes More detailed explanatory text, if necessary. Wrap it to about 72 @@ -255,22 +233,18 @@ a good thing. wrap our plain text emails such that there’s room for a few levels of nested reply indicators without overflow in an 80 column terminal. - - -### 5. Code Approval Process +## Code Approval Process This section describes the code approval process that is used for code contributions. This is how to get your changes into btcd. - - -### 5.1 Code Review +## Code Review All code which is submitted will need to be reviewed before inclusion into the master branch. This process is performed by the project maintainers and usually other committers who are interested in the area you are working in as well. -##### Code Review Timeframe +## Code Review Timeframe The timeframe for a code review will vary greatly depending on factors such as the number of other pull requests which need to be reviewed, the size and @@ -286,7 +260,7 @@ days, while large or far reaching changes may take weeks. This is a good reason to stick with the [Share Early, Share Often](#ShareOften) development practice outlined above. -##### What is the review looking for? +## What is the review looking for? The review is mainly ensuring the code follows the [Development Practices](#DevelopmentPractices) and [Code Contribution Standards](#Standards). However, there are a few other @@ -298,9 +272,7 @@ checks which are generally performed as follows: - The change is not something which is deemed inappropriate by community consensus - - -### 5.2 Rework Code (if needed) +## Rework Code (if needed) After the code review, the change will be accepted immediately if no issues are found. If there are any concerns or questions, you will be provided with @@ -311,9 +283,7 @@ make the necessary changes. This process will continue until the code is finally accepted. - - -### 5.3 Acceptance +## Acceptance Once your code is accepted, it will be integrated with the master branch. Typically it will be rebased and fast-forward merged to master as we prefer to @@ -323,13 +293,9 @@ the master branch and the pull request will be closed. Rejoice as you will now be listed as a [contributor](https://github.com/btcsuite/btcd/graphs/contributors)! - +## Contribution Standards -### 6. Contribution Standards - - - -### 6.1. Contribution Checklist +## Contribution Checklist - [  ] All changes are Go version 1.3 compliant - [  ] The code being submitted is commented according to the @@ -346,9 +312,7 @@ Rejoice as you will now be listed as a [contributor](https://github.com/btcsuite - [  ] Running [golint](https://github.com/golang/lint) does not report any **new** issues that did not already exist - - -### 6.2. Licensing of Contributions +## Licensing of Contributions All contributions must be licensed with the [ISC license](https://github.com/btcsuite/btcd/blob/master/LICENSE). This is diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000000..3db163052b --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,77 @@ +# Configuration file for the Sphinx documentation builder. +# +# This file only contains a selection of the most common options. For a full +# list see the documentation: +# https://www.sphinx-doc.org/en/master/usage/configuration.html + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +# import os +# import sys +# sys.path.insert(0, os.path.abspath('.')) +import recommonmark +from recommonmark.transform import AutoStructify + +# -- Project information ----------------------------------------------------- + +project = 'btcd' +copyright = '2020, btcd' +author = 'btcsuite developers' + +# The full version, including alpha/beta/rc tags +release = 'beta' + +source_suffix = ['.md'] + +# The master toctree document. +master_doc = 'index' + +# -- General configuration --------------------------------------------------- + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.napoleon', + 'sphinx.ext.mathjax', + 'sphinx_markdown_tables', + 'recommonmark', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path. +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'sphinx_rtd_theme' + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# app setup hook +def setup(app): + app.add_config_value('recommonmark_config', { + #'url_resolver': lambda url: github_doc_root + url, + 'auto_toc_tree_section': 'Contents', + 'enable_math': False, + 'enable_inline_math': False, + 'enable_eval_rst': True, + 'enable_auto_doc_ref': True, + }, True) + app.add_transform(AutoStructify) diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000000..c6f95b274c --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,190 @@ +# Configuration + +btcd has a number of [configuration](https://pkg.go.dev/github.com/btcsuite/btcd) +options, which can be viewed by running: `$ btcd --help`. + +## Peer server listen interface + +btcd allows you to bind to specific interfaces which enables you to setup +configurations with varying levels of complexity. The listen parameter can be +specified on the command line as shown below with the -- prefix or in the +configuration file without the -- prefix (as can all long command line options). +The configuration file takes one entry per line. + +**NOTE:** The listen flag can be specified multiple times to listen on multiple +interfaces as a couple of the examples below illustrate. + +Command Line Examples: + +|Flags|Comment| +|----------|------------| +|--listen=|all interfaces on default port which is changed by `--testnet` and `--regtest` (**default**)| +|--listen=0.0.0.0|all IPv4 interfaces on default port which is changed by `--testnet` and `--regtest`| +|--listen=::|all IPv6 interfaces on default port which is changed by `--testnet` and `--regtest`| +|--listen=:8333|all interfaces on port 8333| +|--listen=0.0.0.0:8333|all IPv4 interfaces on port 8333| +|--listen=[::]:8333|all IPv6 interfaces on port 8333| +|--listen=127.0.0.1:8333|only IPv4 localhost on port 8333| +|--listen=[::1]:8333|only IPv6 localhost on port 8333| +|--listen=:8336|all interfaces on non-standard port 8336| +|--listen=0.0.0.0:8336|all IPv4 interfaces on non-standard port 8336| +|--listen=[::]:8336|all IPv6 interfaces on non-standard port 8336| +|--listen=127.0.0.1:8337 --listen=[::1]:8333|IPv4 localhost on port 8337 and IPv6 localhost on port 8333| +|--listen=:8333 --listen=:8337|all interfaces on ports 8333 and 8337| + +The following config file would configure btcd to only listen on localhost for both IPv4 and IPv6: + +```text +[Application Options] + +listen=127.0.0.1:8333 +listen=[::1]:8333 +``` + +In addition, if you are starting btcd with TLS and want to make it +available via a hostname, then you will need to generate the TLS +certificates for that host. For example, + +``` +gencerts --host=myhostname.example.com --directory=/home/me/.btcd/ +``` + +## RPC server listen interface + +btcd allows you to bind the RPC server to specific interfaces which enables you +to setup configurations with varying levels of complexity. The `rpclisten` +parameter can be specified on the command line as shown below with the -- prefix +or in the configuration file without the -- prefix (as can all long command line +options). The configuration file takes one entry per line. + +A few things to note regarding the RPC server: + +* The RPC server will **not** be enabled unless the `rpcuser` and `rpcpass` + options are specified. +* When the `rpcuser` and `rpcpass` and/or `rpclimituser` and `rpclimitpass` + options are specified, the RPC server will only listen on localhost IPv4 and + IPv6 interfaces by default. You will need to override the RPC listen + interfaces to include external interfaces if you want to connect from a remote + machine. +* The RPC server has TLS enabled by default, even for localhost. You may use + the `--notls` option to disable it, but only when all listeners are on + localhost interfaces. +* The `--rpclisten` flag can be specified multiple times to listen on multiple + interfaces as a couple of the examples below illustrate. +* The RPC server is disabled by default when using the `--regtest` and + `--simnet` networks. You can override this by specifying listen interfaces. + +Command Line Examples: + +|Flags|Comment| +|----------|------------| +|--rpclisten=|all interfaces on default port which is changed by `--testnet`| +|--rpclisten=0.0.0.0|all IPv4 interfaces on default port which is changed by `--testnet`| +|--rpclisten=::|all IPv6 interfaces on default port which is changed by `--testnet`| +|--rpclisten=:8334|all interfaces on port 8334| +|--rpclisten=0.0.0.0:8334|all IPv4 interfaces on port 8334| +|--rpclisten=[::]:8334|all IPv6 interfaces on port 8334| +|--rpclisten=127.0.0.1:8334|only IPv4 localhost on port 8334| +|--rpclisten=[::1]:8334|only IPv6 localhost on port 8334| +|--rpclisten=:8336|all interfaces on non-standard port 8336| +|--rpclisten=0.0.0.0:8336|all IPv4 interfaces on non-standard port 8336| +|--rpclisten=[::]:8336|all IPv6 interfaces on non-standard port 8336| +|--rpclisten=127.0.0.1:8337 --listen=[::1]:8334|IPv4 localhost on port 8337 and IPv6 localhost on port 8334| +|--rpclisten=:8334 --listen=:8337|all interfaces on ports 8334 and 8337| + +The following config file would configure the btcd RPC server to listen to all interfaces on the default port, including external interfaces, for both IPv4 and IPv6: + +```text +[Application Options] + +rpclisten= +``` + +## Default ports + +While btcd is highly configurable when it comes to the network configuration, +the following is intended to be a quick reference for the default ports used so +port forwarding can be configured as required. + +btcd provides a `--upnp` flag which can be used to automatically map the bitcoin +peer-to-peer listening port if your router supports UPnP. If your router does +not support UPnP, or you don't wish to use it, please note that only the bitcoin +peer-to-peer port should be forwarded unless you specifically want to allow RPC +access to your btcd from external sources such as in more advanced network +configurations. + +|Name|Port| +|----|----| +|Default Bitcoin peer-to-peer port|TCP 8333| +|Default RPC port|TCP 8334| + +## Using bootstrap.dat + +### What is bootstrap.dat? + +It is a flat, binary file containing bitcoin blockchain data starting from the +genesis block and continuing through a relatively recent block height depending +on the last time it was updated. + +See [this](https://bitcointalk.org/index.php?topic=145386.0) thread on +bitcointalk for more details. + +**NOTE:** Using bootstrap.dat is entirely optional. Btcd will download the +block chain from other peers through the Bitcoin protocol with no extra +configuration needed. + +### What are the pros and cons of using bootstrap.dat? + +Pros: + +* Typically accelerates the initial process of bringing up a new node as it + downloads from public P2P nodes and generally is able to achieve faster + download speeds +* It is particularly beneficial when bringing up multiple nodes as you only need + to download the data once + +Cons: + +* Requires you to setup and configure a torrent client if you don't already have + one available +* Requires roughly twice as much disk space since you'll need the flat file as + well as the imported database + +### Where do I get bootstrap.dat? + +The bootstrap.dat file is made available via a torrent. See +[this](https://bitcointalk.org/index.php?topic=145386.0) thread on bitcointalk +for the torrent download details. + +### How do I know I can trust the bootstrap.dat I downloaded? + +You don't need to trust the file as the `addblock` utility verifies every block +using the same rules that are used when downloading the block chain normally +through the Bitcoin protocol. Additionally, the chain rules contain hard-coded +checkpoints for the known-good block chain at periodic intervals. This ensures +that not only is it a valid chain, but it is the same chain that everyone else +is using. + +### How do I use bootstrap.dat with btcd? + +btcd comes with a separate utility named `addblock` which can be used to import +`bootstrap.dat`. This approach is used since the import is a one-time operation +and we prefer to keep the daemon itself as lightweight as possible. + +1. Stop btcd if it is already running. This is required since addblock needs to + access the database used by btcd and it will be locked if btcd is using it. +2. Note the path to the downloaded bootstrap.dat file. +3. Run the addblock utility with the `-i` argument pointing to the location of + boostrap.dat: + +**Windows:** + +```bat +"%PROGRAMFILES%\Btcd Suite\Btcd\addblock" -i C:\Path\To\bootstrap.dat +``` + +**Linux/Unix/BSD/POSIX:** + +```bash +$GOPATH/bin/addblock -i /path/to/bootstrap.dat +``` diff --git a/docs/configure_peer_server_listen_interfaces.md b/docs/configure_peer_server_listen_interfaces.md deleted file mode 100644 index 26f5ec72a1..0000000000 --- a/docs/configure_peer_server_listen_interfaces.md +++ /dev/null @@ -1,35 +0,0 @@ -btcd allows you to bind to specific interfaces which enables you to setup -configurations with varying levels of complexity. The listen parameter can be -specified on the command line as shown below with the -- prefix or in the -configuration file without the -- prefix (as can all long command line options). -The configuration file takes one entry per line. - -**NOTE:** The listen flag can be specified multiple times to listen on multiple -interfaces as a couple of the examples below illustrate. - -Command Line Examples: - -|Flags|Comment| -|----------|------------| -|--listen=|all interfaces on default port which is changed by `--testnet` and `--regtest` (**default**)| -|--listen=0.0.0.0|all IPv4 interfaces on default port which is changed by `--testnet` and `--regtest`| -|--listen=::|all IPv6 interfaces on default port which is changed by `--testnet` and `--regtest`| -|--listen=:8333|all interfaces on port 8333| -|--listen=0.0.0.0:8333|all IPv4 interfaces on port 8333| -|--listen=[::]:8333|all IPv6 interfaces on port 8333| -|--listen=127.0.0.1:8333|only IPv4 localhost on port 8333| -|--listen=[::1]:8333|only IPv6 localhost on port 8333| -|--listen=:8336|all interfaces on non-standard port 8336| -|--listen=0.0.0.0:8336|all IPv4 interfaces on non-standard port 8336| -|--listen=[::]:8336|all IPv6 interfaces on non-standard port 8336| -|--listen=127.0.0.1:8337 --listen=[::1]:8333|IPv4 localhost on port 8337 and IPv6 localhost on port 8333| -|--listen=:8333 --listen=:8337|all interfaces on ports 8333 and 8337| - -The following config file would configure btcd to only listen on localhost for both IPv4 and IPv6: - -```text -[Application Options] - -listen=127.0.0.1:8333 -listen=[::1]:8333 -``` diff --git a/docs/configure_rpc_server_listen_interfaces.md b/docs/configure_rpc_server_listen_interfaces.md deleted file mode 100644 index 3115d6a16f..0000000000 --- a/docs/configure_rpc_server_listen_interfaces.md +++ /dev/null @@ -1,47 +0,0 @@ -btcd allows you to bind the RPC server to specific interfaces which enables you -to setup configurations with varying levels of complexity. The `rpclisten` -parameter can be specified on the command line as shown below with the -- prefix -or in the configuration file without the -- prefix (as can all long command line -options). The configuration file takes one entry per line. - -A few things to note regarding the RPC server: -* The RPC server will **not** be enabled unless the `rpcuser` and `rpcpass` - options are specified. -* When the `rpcuser` and `rpcpass` and/or `rpclimituser` and `rpclimitpass` - options are specified, the RPC server will only listen on localhost IPv4 and - IPv6 interfaces by default. You will need to override the RPC listen - interfaces to include external interfaces if you want to connect from a remote - machine. -* The RPC server has TLS enabled by default, even for localhost. You may use - the `--notls` option to disable it, but only when all listeners are on - localhost interfaces. -* The `--rpclisten` flag can be specified multiple times to listen on multiple - interfaces as a couple of the examples below illustrate. -* The RPC server is disabled by default when using the `--regtest` and - `--simnet` networks. You can override this by specifying listen interfaces. - -Command Line Examples: - -|Flags|Comment| -|----------|------------| -|--rpclisten=|all interfaces on default port which is changed by `--testnet`| -|--rpclisten=0.0.0.0|all IPv4 interfaces on default port which is changed by `--testnet`| -|--rpclisten=::|all IPv6 interfaces on default port which is changed by `--testnet`| -|--rpclisten=:8334|all interfaces on port 8334| -|--rpclisten=0.0.0.0:8334|all IPv4 interfaces on port 8334| -|--rpclisten=[::]:8334|all IPv6 interfaces on port 8334| -|--rpclisten=127.0.0.1:8334|only IPv4 localhost on port 8334| -|--rpclisten=[::1]:8334|only IPv6 localhost on port 8334| -|--rpclisten=:8336|all interfaces on non-standard port 8336| -|--rpclisten=0.0.0.0:8336|all IPv4 interfaces on non-standard port 8336| -|--rpclisten=[::]:8336|all IPv6 interfaces on non-standard port 8336| -|--rpclisten=127.0.0.1:8337 --listen=[::1]:8334|IPv4 localhost on port 8337 and IPv6 localhost on port 8334| -|--rpclisten=:8334 --listen=:8337|all interfaces on ports 8334 and 8337| - -The following config file would configure the btcd RPC server to listen to all interfaces on the default port, including external interfaces, for both IPv4 and IPv6: - -```text -[Application Options] - -rpclisten= -``` diff --git a/docs/configuring_tor.md b/docs/configuring_tor.md index 442930d6e3..3225b9b541 100644 --- a/docs/configuring_tor.md +++ b/docs/configuring_tor.md @@ -1,25 +1,4 @@ -### Table of Contents -1. [Overview](#Overview)
-2. [Client-Only](#Client)
-2.1 [Description](#ClientDescription)
-2.2 [Command Line Example](#ClientCLIExample)
-2.3 [Config File Example](#ClientConfigFileExample)
-3. [Client-Server via Tor Hidden Service](#HiddenService)
-3.1 [Description](#HiddenServiceDescription)
-3.2 [Command Line Example](#HiddenServiceCLIExample)
-3.3 [Config File Example](#HiddenServiceConfigFileExample)
-4. [Bridge Mode (Not Anonymous)](#Bridge)
-4.1 [Description](#BridgeDescription)
-4.2 [Command Line Example](#BridgeCLIExample)
-4.3 [Config File Example](#BridgeConfigFileExample)
-5. [Tor Stream Isolation](#TorStreamIsolation)
-5.1 [Description](#TorStreamIsolationDescription)
-5.2 [Command Line Example](#TorStreamIsolationCLIExample)
-5.3 [Config File Example](#TorStreamIsolationFileExample)
- -
- -### 1. Overview +# Configuring TOR btcd provides full support for anonymous networking via the [Tor Project](https://www.torproject.org/), including [client-only](#Client) @@ -34,13 +13,7 @@ network to run as both a client and a server so others may connect to you to as you are connecting to them. We recommend you take the time to setup a Tor hidden service for this reason. - - -### 2. Client-Only - - - -**2.1 Description**
+## Client-only Configuring btcd as a Tor client is straightforward. The first step is obviously to install Tor and ensure it is working. Once that is done, all that @@ -58,17 +31,13 @@ NOTE: Specifying the `--proxy` flag disables listening by default since you will not be reachable for inbound connections unless you also configure a Tor [hidden service](#HiddenService). -
- -**2.2 Command Line Example**
+### Command line example ```bash -$ ./btcd --proxy=127.0.0.1:9050 +./btcd --proxy=127.0.0.1:9050 ``` -
- -**2.3 Config File Example**
+### Config file example ```text [Application Options] @@ -76,17 +45,11 @@ $ ./btcd --proxy=127.0.0.1:9050 proxy=127.0.0.1:9050 ``` -
- -### 3. Client-Server via Tor Hidden Service - - - -**3.1 Description**
+## Client-server via Tor hidden service The first step is to configure Tor to provide a hidden service. Documentation for this can be found on the Tor project website -[here](https://www.torproject.org/docs/tor-hidden-service.html.en). However, +[here](https://community.torproject.org/onion-services/setup/). However, there is no need to install a web server locally as the linked instructions discuss since btcd will act as the server. @@ -103,23 +66,20 @@ HiddenServicePort 8333 127.0.0.1:8333 Once Tor is configured to provide the hidden service and you have obtained your generated .onion address, configuring btcd as a Tor hidden service requires three flags: + * `--proxy` to identify the Tor (SOCKS 5) proxy to use for outgoing traffic. This is typically 127.0.0.1:9050. * `--listen` to enable listening for inbound connections since `--proxy` disables listening by default * `--externalip` to set the .onion address that is advertised to other peers -
- -**3.2 Command Line Example**
+### Command line example ```bash -$ ./btcd --proxy=127.0.0.1:9050 --listen=127.0.0.1 --externalip=fooanon.onion +./btcd --proxy=127.0.0.1:9050 --listen=127.0.0.1 --externalip=fooanon.onion ``` -
- -**3.3 Config File Example**
+### Config file example ```text [Application Options] @@ -129,13 +89,7 @@ listen=127.0.0.1 externalip=fooanon.onion ``` -
- -### 4. Bridge Mode (Not Anonymous) - - - -**4.1 Description**
+## Bridge mode (not anonymous) btcd provides support for operating as a bridge between regular nodes and hidden service nodes. In particular this means only traffic which is directed to or @@ -154,17 +108,13 @@ mode, you only need to specify your hidden service's .onion address via the `--externalip` flag since traffic to and from .onion addresses are already routed via Tor due to the `--onion` flag. -
- -**4.2 Command Line Example**
+### Command line example ```bash -$ ./btcd --onion=127.0.0.1:9050 --externalip=fooanon.onion +./btcd --onion=127.0.0.1:9050 --externalip=fooanon.onion ``` -
- -**4.3 Config File Example**
+### Config file example ```text [Application Options] @@ -173,13 +123,7 @@ onion=127.0.0.1:9050 externalip=fooanon.onion ``` -
- -### 5. Tor Stream Isolation - - - -**5.1 Description**
+## Tor stream isolation Tor stream isolation forces Tor to build a new circuit for each connection making it harder to correlate connections. @@ -187,17 +131,13 @@ making it harder to correlate connections. btcd provides support for Tor stream isolation by using the `--torisolation` flag. This option requires --proxy or --onionproxy to be set. -
- -**5.2 Command Line Example**
+### Command line example ```bash -$ ./btcd --proxy=127.0.0.1:9050 --torisolation +./btcd --proxy=127.0.0.1:9050 --torisolation ``` -
- -**5.3 Config File Example**
+### Config file example ```text [Application Options] diff --git a/docs/contact.md b/docs/contact.md new file mode 100644 index 0000000000..1ed9fc0b3a --- /dev/null +++ b/docs/contact.md @@ -0,0 +1,15 @@ +# Contact + +## IRC + +* [irc.libera.chat](irc://irc.libera.chat), channel `#btcd` + +## Mailing Lists + +* [btcd](mailto:btcd+subscribe@opensource.conformal.com): discussion of btcd and its packages. +* [btcd-commits](mailto:btcd-commits+subscribe@opensource.conformal.com): readonly mail-out of source code changes. + +## Issue Tracker + +The [integrated github issue tracker](https://github.com/btcsuite/btcd/issues) +is used for this project. diff --git a/docs/controlling.md b/docs/controlling.md new file mode 100644 index 0000000000..93ab403b2e --- /dev/null +++ b/docs/controlling.md @@ -0,0 +1,34 @@ +# Controlling and querying btcd via btcctl + +btcctl is a command line utility that can be used to both control and query btcd +via [RPC](http://www.wikipedia.org/wiki/Remote_procedure_call). btcd does +**not** enable its RPC server by default; You must configure at minimum both an +RPC username and password or both an RPC limited username and password: + +* btcd.conf configuration file + +```bash +[Application Options] +rpcuser=myuser +rpcpass=SomeDecentp4ssw0rd +rpclimituser=mylimituser +rpclimitpass=Limitedp4ssw0rd +``` + +* btcctl.conf configuration file + +```bash +[Application Options] +rpcuser=myuser +rpcpass=SomeDecentp4ssw0rd +``` + +OR + +```bash +[Application Options] +rpclimituser=mylimituser +rpclimitpass=Limitedp4ssw0rd +``` + +For a list of available options, run: `$ btcctl --help` diff --git a/docs/default_ports.md b/docs/default_ports.md deleted file mode 100644 index 14e4eea2a7..0000000000 --- a/docs/default_ports.md +++ /dev/null @@ -1,15 +0,0 @@ -While btcd is highly configurable when it comes to the network configuration, -the following is intended to be a quick reference for the default ports used so -port forwarding can be configured as required. - -btcd provides a `--upnp` flag which can be used to automatically map the bitcoin -peer-to-peer listening port if your router supports UPnP. If your router does -not support UPnP, or you don't wish to use it, please note that only the bitcoin -peer-to-peer port should be forwarded unless you specifically want to allow RPC -access to your btcd from external sources such as in more advanced network -configurations. - -|Name|Port| -|----|----| -|Default Bitcoin peer-to-peer port|TCP 8333| -|Default RPC port|TCP 8334| diff --git a/docs/developer_resources.md b/docs/developer_resources.md new file mode 100644 index 0000000000..c595c8330e --- /dev/null +++ b/docs/developer_resources.md @@ -0,0 +1,37 @@ +# Developer Resources + +* [Code Contribution Guidelines](https://github.com/btcsuite/btcd/tree/master/docs/code_contribution_guidelines.md) + +* [JSON-RPC Reference](https://github.com/btcsuite/btcd/tree/master/docs/json_rpc_api.md) + * [RPC Examples](https://github.com/btcsuite/btcd/tree/master/docs/json_rpc_api.md#ExampleCode) + +* The btcsuite Bitcoin-related Go Packages: + * [btcrpcclient](https://github.com/btcsuite/btcd/tree/master/rpcclient) - Implements a + robust and easy to use Websocket-enabled Bitcoin JSON-RPC client + * [btcjson](https://github.com/btcsuite/btcd/tree/master/btcjson) - Provides an extensive API + for the underlying JSON-RPC command and return values + * [wire](https://github.com/btcsuite/btcd/tree/master/wire) - Implements the + Bitcoin wire protocol + * [peer](https://github.com/btcsuite/btcd/tree/master/peer) - + Provides a common base for creating and managing Bitcoin network peers. + * [blockchain](https://github.com/btcsuite/btcd/tree/master/blockchain) - + Implements Bitcoin block handling and chain selection rules + * [blockchain/fullblocktests](https://github.com/btcsuite/btcd/tree/master/blockchain/fullblocktests) - + Provides a set of block tests for testing the consensus validation rules + * [txscript](https://github.com/btcsuite/btcd/tree/master/txscript) - + Implements the Bitcoin transaction scripting language + * [btcec](https://github.com/btcsuite/btcd/tree/master/btcec) - Implements + support for the elliptic curve cryptographic functions needed for the + Bitcoin scripts + * [database](https://github.com/btcsuite/btcd/tree/master/database) - + Provides a database interface for the Bitcoin block chain + * [mempool](https://github.com/btcsuite/btcd/tree/master/mempool) - + Package mempool provides a policy-enforced pool of unmined bitcoin + transactions. + * [btcutil](https://github.com/btcsuite/btcd/btcutil) - Provides Bitcoin-specific + convenience functions and types + * [chainhash](https://github.com/btcsuite/btcd/tree/master/chaincfg/chainhash) - + Provides a generic hash type and associated functions that allows the + specific hash algorithm to be abstracted. + * [connmgr](https://github.com/btcsuite/btcd/tree/master/connmgr) - + Package connmgr implements a generic Bitcoin network connection manager. diff --git a/docs/index.md b/docs/index.md new file mode 100644 index 0000000000..9d980626d4 --- /dev/null +++ b/docs/index.md @@ -0,0 +1,57 @@ +# btcd + +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) +[![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd) + +btcd is an alternative full node bitcoin implementation written in Go (golang). + +This project is currently under active development and is in a Beta state. It +is extremely stable and has been in production use since October 2013. + +It properly downloads, validates, and serves the block chain using the exact +rules (including consensus bugs) for block acceptance as Bitcoin Core. We have +taken great care to avoid btcd causing a fork to the block chain. It includes a +full block validation testing framework which contains all of the 'official' +block acceptance tests (and some additional ones) that is run on every pull +request to help ensure it properly follows consensus. Also, it passes all of +the JSON test data in the Bitcoin Core code. + +It also properly relays newly mined blocks, maintains a transaction pool, and +relays individual transactions that have not yet made it into a block. It +ensures all individual transactions admitted to the pool follow the rules +required by the block chain and also includes more strict checks which filter +transactions based on miner requirements ("standard" transactions). + +One key difference between btcd and Bitcoin Core is that btcd does *NOT* include +wallet functionality and this was a very intentional design decision. See the +blog entry [here](https://web.archive.org/web/20171125143919/https://blog.conformal.com/btcd-not-your-moms-bitcoin-daemon) +for more details. This means you can't actually make or receive payments +directly with btcd. That functionality is provided by the +[btcwallet](https://github.com/btcsuite/btcwallet) and +[Paymetheus](https://github.com/btcsuite/Paymetheus) (Windows-only) projects +which are both under active development. + +## Documentation + +Documentation is a work-in-progress. It is available at [btcd.readthedocs.io](https://btcd.readthedocs.io). + +## Contents + +* [Installation](installation.md) +* [Update](update.md) +* [Configuration](configuration.md) +* [Configuring TOR](configuring_tor.md) +* [Docker](using_docker.md) +* [Controlling](controlling.md) +* [Mining](mining.md) +* [Wallet](wallet.md) +* [Developer resources](developer_resources.md) +* [JSON RPC API](json_rpc_api.md) +* [Code contribution guidelines](code_contribution_guidelines.md) +* [Contact](contact.md) + +## License + +btcd is licensed under the [copyfree](http://copyfree.org) ISC License. + diff --git a/docs/installation.md b/docs/installation.md new file mode 100644 index 0000000000..a74db56022 --- /dev/null +++ b/docs/installation.md @@ -0,0 +1,76 @@ +# Installation + +The first step is to install btcd. See one of the following sections for +details on how to install on the supported operating systems. + +## Requirements + +[Go](http://golang.org) 1.16 or newer. + +## GPG Verification Key + +All official release tags are signed by Conformal so users can ensure the code +has not been tampered with and is coming from the btcsuite developers. To +verify the signature perform the following: + +* Download the Conformal public key: + https://raw.githubusercontent.com/btcsuite/btcd/master/release/GIT-GPG-KEY-conformal.txt + +* Import the public key into your GPG keyring: + + ```bash + gpg --import GIT-GPG-KEY-conformal.txt + ``` + +* Verify the release tag with the following command where `TAG_NAME` is a + placeholder for the specific tag: + + ```bash + git tag -v TAG_NAME + ``` + +## Windows Installation + +* Install the MSI available at: [btcd windows installer](https://github.com/btcsuite/btcd/releases) +* Launch btcd from the Start Menu + +## Linux/BSD/MacOSX/POSIX Installation + +* Install Go according to the [installation instructions](http://golang.org/doc/install) +* Ensure Go was installed properly and is a supported version: + +```bash +go version +go env GOROOT GOPATH +``` + +NOTE: The `GOROOT` and `GOPATH` above must not be the same path. It is +recommended that `GOPATH` is set to a directory in your home directory such as +`~/goprojects` to avoid write permission issues. It is also recommended to add +`$GOPATH/bin` to your `PATH` at this point. + +* Run the following commands to obtain btcd, all dependencies, and install it: + +```bash +git clone https://github.com/btcsuite/btcd $GOPATH/src/github.com/btcsuite/btcd +cd $GOPATH/src/github.com/btcsuite/btcd +GO111MODULE=on go install -v . ./cmd/... +``` + +* btcd (and utilities) will now be installed in ```$GOPATH/bin```. If you did + not already add the bin directory to your system path during Go installation, + we recommend you do so now. + +## Gentoo Linux Installation + +* [Install Layman](https://gitlab.com/bitcoin/gentoo) and enable the Bitcoin overlay. +* Copy or symlink `/var/lib/layman/bitcoin/Documentation/package.keywords/btcd-live` to `/etc/portage/package.keywords/` +* Install btcd: `$ emerge net-p2p/btcd` + +## Startup + +Typically btcd will run and start downloading the block chain with no extra +configuration necessary, however, there is an optional method to use a +`bootstrap.dat` file that may speed up the initial block chain download process. + +* [Using bootstrap.dat](https://github.com/btcsuite/btcd/blob/master/docs/configuration.md#using-bootstrapdat) diff --git a/docs/json_rpc_api.md b/docs/json_rpc_api.md index 51d4c82c3f..d1b43ce8c4 100644 --- a/docs/json_rpc_api.md +++ b/docs/json_rpc_api.md @@ -1,4 +1,5 @@ -### Table of Contents +# JSON RPC API + 1. [Overview](#Overview)
2. [HTTP POST Versus Websockets](#HttpPostVsWebsockets)
3. [Authentication](#Authentication)
@@ -271,13 +272,13 @@ the method name for further details such as parameter and return information. | | | |---|---| |Method|getblock| -|Parameters|1. block hash (string, required) - the hash of the block
2. verbose (boolean, optional, default=true) - specifies the block is returned as a JSON object instead of hex-encoded string
3. verbosetx (boolean, optional, default=false) - specifies that each transaction is returned as a JSON object and only applies if the `verbose` flag is true.**This parameter is a btcd extension**| +|Parameters|1. block hash (string, required) - the hash of the block
2. verbosity (int, optional, default=1) - Specifies whether the block data should be returned as a hex-encoded string (0), as parsed data with a slice of TXIDs (1), or as parsed data with parsed transaction data (2). |Description|Returns information about a block given its hash.| -|Returns (verbose=false)|`"data" (string) hex-encoded bytes of the serialized block`| -|Returns (verbose=true, verbosetx=false)|`{ (json object)`
  `"hash": "blockhash", (string) the hash of the block (same as provided)`
  `"confirmations": n, (numeric) the number of confirmations`
  `"strippedsize", n (numeric) the size of the block without witness data`
  `"size": n, (numeric) the size of the block`
  `"weight": n, (numeric) value of the weight metric`
  `"height": n, (numeric) the height of the block in the block chain`
  `"version": n, (numeric) the block version`
  `"merkleroot": "hash", (string) root hash of the merkle tree`
  `"tx": [ (json array of string) the transaction hashes`
    `"transactionhash", (string) hash of the parent transaction`
    `...`
  `]`
  `"time": n, (numeric) the block time in seconds since 1 Jan 1970 GMT`
  `"nonce": n, (numeric) the block nonce`
  `"bits", n, (numeric) the bits which represent the block difficulty`
  `difficulty: n.nn, (numeric) the proof-of-work difficulty as a multiple of the minimum difficulty`
  `"previousblockhash": "hash", (string) the hash of the previous block`
  `"nextblockhash": "hash", (string) the hash of the next block (only if there is one)`
`}`| -|Returns (verbose=true, verbosetx=true)|`{ (json object)`
  `"hash": "blockhash", (string) the hash of the block (same as provided)`
  `"confirmations": n, (numeric) the number of confirmations`
  `"strippedsize", n (numeric) the size of the block without witness data`
  `"size": n, (numeric) the size of the block`
  `"weight": n, (numeric) value of the weight metric`
  `"height": n, (numeric) the height of the block in the block chain`
  `"version": n, (numeric) the block version`
  `"merkleroot": "hash", (string) root hash of the merkle tree`
  `"rawtx": [ (array of json objects) the transactions as json objects`
    `(see getrawtransaction json object details)`
  `]`
  `"time": n, (numeric) the block time in seconds since 1 Jan 1970 GMT`
  `"nonce": n, (numeric) the block nonce`
  `"bits", n, (numeric) the bits which represent the block difficulty`
  `difficulty: n.nn, (numeric) the proof-of-work difficulty as a multiple of the minimum difficulty`
  `"previousblockhash": "hash", (string) the hash of the previous block`
  `"nextblockhash": "hash", (string) the hash of the next block`
`}`| -|Example Return (verbose=false)|`"010000000000000000000000000000000000000000000000000000000000000000000000`
`3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49`
`ffff001d1dac2b7c01010000000100000000000000000000000000000000000000000000`
`00000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f`
`4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f`
`6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104`
`678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f`
`4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000"`
**Newlines added for display purposes. The actual return does not contain newlines.**| -|Example Return (verbose=true, verbosetx=false)|`{`
  `"hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",`
  `"confirmations": 277113,`
  `"size": 285,`
  `"height": 0,`
  `"version": 1,`
  `"merkleroot": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",`
  `"tx": [`
    `"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"`
  `],`
  `"time": 1231006505,`
  `"nonce": 2083236893,`
  `"bits": "1d00ffff",`
  `"difficulty": 1,`
  `"previousblockhash": "0000000000000000000000000000000000000000000000000000000000000000",`
  `"nextblockhash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"`
`}`| +|Returns (verbosity=0)|`"data" (string) hex-encoded bytes of the serialized block`| +|Returns (verbosity=1)|`{ (json object)`
  `"hash": "blockhash", (string) the hash of the block (same as provided)`
  `"confirmations": n, (numeric) the number of confirmations`
  `"strippedsize", n (numeric) the size of the block without witness data`
  `"size": n, (numeric) the size of the block`
  `"weight": n, (numeric) value of the weight metric`
  `"height": n, (numeric) the height of the block in the block chain`
  `"version": n, (numeric) the block version`
  `"merkleroot": "hash", (string) root hash of the merkle tree`
  `"tx": [ (json array of string) the transaction hashes`
    `"transactionhash", (string) hash of the parent transaction`
    `...`
  `]`
  `"time": n, (numeric) the block time in seconds since 1 Jan 1970 GMT`
  `"nonce": n, (numeric) the block nonce`
  `"bits", n, (numeric) the bits which represent the block difficulty`
  `difficulty: n.nn, (numeric) the proof-of-work difficulty as a multiple of the minimum difficulty`
  `"previousblockhash": "hash", (string) the hash of the previous block`
  `"nextblockhash": "hash", (string) the hash of the next block (only if there is one)`
`}`| +|Returns (verbosity=2)|`{ (json object)`
  `"hash": "blockhash", (string) the hash of the block (same as provided)`
  `"confirmations": n, (numeric) the number of confirmations`
  `"strippedsize", n (numeric) the size of the block without witness data`
  `"size": n, (numeric) the size of the block`
  `"weight": n, (numeric) value of the weight metric`
  `"height": n, (numeric) the height of the block in the block chain`
  `"version": n, (numeric) the block version`
  `"merkleroot": "hash", (string) root hash of the merkle tree`
  `"rawtx": [ (array of json objects) the transactions as json objects`
    `(see getrawtransaction json object details)`
  `]`
  `"time": n, (numeric) the block time in seconds since 1 Jan 1970 GMT`
  `"nonce": n, (numeric) the block nonce`
  `"bits", n, (numeric) the bits which represent the block difficulty`
  `difficulty: n.nn, (numeric) the proof-of-work difficulty as a multiple of the minimum difficulty`
  `"previousblockhash": "hash", (string) the hash of the previous block`
  `"nextblockhash": "hash", (string) the hash of the next block`
`}`| +|Example Return (verbosity=0)|`"010000000000000000000000000000000000000000000000000000000000000000000000`
`3ba3edfd7a7b12b27ac72c3e67768f617fc81bc3888a51323a9fb8aa4b1e5e4a29ab5f49`
`ffff001d1dac2b7c01010000000100000000000000000000000000000000000000000000`
`00000000000000000000ffffffff4d04ffff001d0104455468652054696d65732030332f`
`4a616e2f32303039204368616e63656c6c6f72206f6e206272696e6b206f66207365636f`
`6e64206261696c6f757420666f722062616e6b73ffffffff0100f2052a01000000434104`
`678afdb0fe5548271967f1a67130b7105cd6a828e03909a67962e0ea1f61deb649f6bc3f`
`4cef38c4f35504e51ec112de5c384df7ba0b8d578a4c702b6bf11d5fac00000000"`
**Newlines added for display purposes. The actual return does not contain newlines.**| +|Example Return (verbosity=1)|`{`
  `"hash": "000000000019d6689c085ae165831e934ff763ae46a2a6c172b3f1b60a8ce26f",`
  `"confirmations": 277113,`
  `"size": 285,`
  `"height": 0,`
  `"version": 1,`
  `"merkleroot": "4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b",`
  `"tx": [`
    `"4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b"`
  `],`
  `"time": 1231006505,`
  `"nonce": 2083236893,`
  `"bits": "1d00ffff",`
  `"difficulty": 1,`
  `"previousblockhash": "0000000000000000000000000000000000000000000000000000000000000000",`
  `"nextblockhash": "00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048"`
`}`| [Return to Overview](#MethodOverview)
*** @@ -1074,7 +1075,7 @@ various languages. **9.1 Go** This section provides examples of using the RPC interface using Go and the -[btcrpcclient](https://github.com/btcsuite/btcrpcclient) package. +[rpcclient](https://github.com/btcsuite/btcd/tree/master/rpcclient) package. * [Using getblockcount to Retrieve the Current Block Height](#ExampleGetBlockCount) * [Using getblock to Retrieve the Genesis Block](#ExampleGetBlock) @@ -1086,7 +1087,7 @@ This section provides examples of using the RPC interface using Go and the **9.1.1 Using getblockcount to Retrieve the Current Block Height**
The following is an example Go application which uses the -[btcrpcclient](https://github.com/btcsuite/btcrpcclient) package to connect with +[rpcclient](https://github.com/btcsuite/btcd/tree/master/rpcclient) package to connect with a btcd instance via Websockets, issues [getblockcount](#getblockcount) to retrieve the current block height, and displays it. @@ -1094,11 +1095,12 @@ retrieve the current block height, and displays it. package main import ( - "github.com/btcsuite/btcrpcclient" - "github.com/btcsuite/btcutil" "io/ioutil" "log" "path/filepath" + + "github.com/btcsuite/btcd/rpcclient" + "github.com/btcsuite/btcd/btcutil" ) func main() { @@ -1114,14 +1116,14 @@ func main() { // Create a new RPC client using websockets. Since this example is // not long-lived, the connection will be closed as soon as the program // exits. - connCfg := &btcrpcclient.ConnConfig{ + connCfg := &rpcclient.ConnConfig{ Host: "localhost:8334", Endpoint: "ws", User: "yourrpcuser", Pass: "yourrpcpass", Certificates: certs, } - client, err := btcrpcclient.New(connCfg, nil) + client, err := rpcclient.New(connCfg, nil) if err != nil { log.Fatal(err) } @@ -1139,7 +1141,7 @@ func main() { Which results in: ```bash -Block count: 276978 +2018/08/27 11:17:27 Block count: 536027 ```
@@ -1147,7 +1149,7 @@ Block count: 276978 **9.1.2 Using getblock to Retrieve the Genesis Block**
The following is an example Go application which uses the -[btcrpcclient](https://github.com/btcsuite/btcrpcclient) package to connect with +[rpcclient](https://github.com/btcsuite/btcd/tree/master/rpcclient) package to connect with a btcd instance via Websockets, issues [getblock](#getblock) to retrieve information about the Genesis block, and display a few details about it. @@ -1155,14 +1157,14 @@ information about the Genesis block, and display a few details about it. package main import ( - "github.com/btcsuite/btcrpcclient" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/wire" "io/ioutil" "log" "path/filepath" "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/rpcclient" + "github.com/btcsuite/btcd/btcutil" ) func main() { @@ -1178,14 +1180,14 @@ func main() { // Create a new RPC client using websockets. Since this example is // not long-lived, the connection will be closed as soon as the program // exits. - connCfg := &btcrpcclient.ConnConfig{ + connCfg := &rpcclient.ConnConfig{ Host: "localhost:18334", Endpoint: "ws", User: "yourrpcuser", Pass: "yourrpcpass", Certificates: certs, } - client, err := btcrpcclient.New(connCfg, nil) + client, err := rpcclient.New(connCfg, nil) if err != nil { log.Fatal(err) } @@ -1199,7 +1201,7 @@ func main() { if err != nil { log.Fatal(err) } - block, err := client.GetBlockVerbose(blockHash, false) + block, err := client.GetBlockVerbose(blockHash) if err != nil { log.Fatal(err) } @@ -1225,7 +1227,7 @@ Previous Block: 0000000000000000000000000000000000000000000000000000000000000000 Next Block: 00000000839a8e6886ab5951d76f411475428afc90947ee320161bbf18eb6048 Merkle root: 4a5e1e4baab89f3a32518a88c31bc87f618f76673e2cc77ab2127b7afdeda33b Timestamp: 2009-01-03 18:15:05 +0000 UTC -Confirmations: 277290 +Confirmations: 534323 Difficulty: 1.000000 Size (in bytes): 285 Num transactions: 1 @@ -1237,7 +1239,7 @@ Num transactions: 1 Notifications (Websocket-specific)**
The following is an example Go application which uses the -[btcrpcclient](https://github.com/btcsuite/btcrpcclient) package to connect with +[rpcclient](https://github.com/btcsuite/btcd/tree/master/rpcclient) package to connect with a btcd instance via Websockets and registers for [blockconnected](#blockconnected) and [blockdisconnected](#blockdisconnected) notifications with [notifyblocks](#notifyblocks). It also sets up handlers for @@ -1247,25 +1249,25 @@ the notifications. package main import ( - "github.com/btcsuite/btcrpcclient" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/wire" "io/ioutil" "log" "path/filepath" "time" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/rpcclient" + "github.com/btcsuite/btcd/btcutil" ) func main() { // Setup handlers for blockconnected and blockdisconnected // notifications. - ntfnHandlers := btcrpcclient.NotificationHandlers{ - OnBlockConnected: func(hash *chainhash.Hash, height int32) { - log.Printf("Block connected: %v (%d)", hash, height) + ntfnHandlers := rpcclient.NotificationHandlers{ + OnBlockConnected: func(hash *chainhash.Hash, height int32, t time.Time) { + log.Printf("Block connected: %v (%d) %s", hash, height, t) }, - OnBlockDisconnected: func(hash *chainhash.Hash, height int32) { - log.Printf("Block disconnected: %v", hash, height) + OnBlockDisconnected: func(hash *chainhash.Hash, height int32, t time.Time) { + log.Printf("Block disconnected: %v (%d) %s", hash, height, t) }, } @@ -1279,14 +1281,14 @@ func main() { } // Create a new RPC client using websockets. - connCfg := &btcrpcclient.ConnConfig{ + connCfg := &rpcclient.ConnConfig{ Host: "localhost:8334", Endpoint: "ws", User: "yourrpcuser", Pass: "yourrpcpass", Certificates: certs, } - client, err := btcrpcclient.New(connCfg, &ntfnHandlers) + client, err := rpcclient.New(connCfg, &ntfnHandlers) if err != nil { log.Fatal(err) } @@ -1316,10 +1318,14 @@ func main() { Example output: ``` -2014/05/12 20:33:17 Client shutdown in 10 seconds... -2014/05/12 20:33:19 Block connected: 000000000000000007dff1f95f7b3f5eac2892a4123069517caf34e2c417650d (300461) -2014/05/12 20:33:27 Client shutting down... -2014/05/12 20:31:27 Client shutdown complete. +2018/08/27 10:35:43 Client shutdown in 10 seconds... +2018/08/27 10:35:44 Block connected: 00000000000000000003321723557df58914658dc6fd963d547292a0a4797454 (534747) 2018-08-02 06:37:52 +0800 CST +2018/08/27 10:35:47 Block connected: 0000000000000000002e12773b798fc61dffe00ed5c3e89d3c306f8058c51e13 (534748) 2018-08-02 06:39:54 +0800 CST +2018/08/27 10:35:49 Block connected: 0000000000000000001bb311cd849839ce88499b91a201922f55a1cfafabe267 (534749) 2018-08-02 06:44:22 +0800 CST +2018/08/27 10:35:50 Block connected: 00000000000000000019d7296c9b5c175369ad337ec44b76bd4728021a09b864 (534750) 2018-08-02 06:55:44 +0800 CST +2018/08/27 10:35:53 Block connected: 00000000000000000022db98cf47e944ed58ca450c819e8fef8f8c71ca5d9901 (534751) 2018-08-02 06:57:39 +0800 CST +2018/08/27 10:35:53 Client shutting down... +2018/08/27 10:35:53 Client shutdown complete. ```
diff --git a/docs/make.bat b/docs/make.bat new file mode 100644 index 0000000000..922152e96a --- /dev/null +++ b/docs/make.bat @@ -0,0 +1,35 @@ +@ECHO OFF + +pushd %~dp0 + +REM Command file for Sphinx documentation + +if "%SPHINXBUILD%" == "" ( + set SPHINXBUILD=sphinx-build +) +set SOURCEDIR=. +set BUILDDIR=_build + +if "%1" == "" goto help + +%SPHINXBUILD% >NUL 2>NUL +if errorlevel 9009 ( + echo. + echo.The 'sphinx-build' command was not found. Make sure you have Sphinx + echo.installed, then set the SPHINXBUILD environment variable to point + echo.to the full path of the 'sphinx-build' executable. Alternatively you + echo.may add the Sphinx directory to PATH. + echo. + echo.If you don't have Sphinx installed, grab it from + echo.http://sphinx-doc.org/ + exit /b 1 +) + +%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% +goto end + +:help +%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS% %O% + +:end +popd diff --git a/docs/mining.md b/docs/mining.md new file mode 100644 index 0000000000..29a3e89858 --- /dev/null +++ b/docs/mining.md @@ -0,0 +1,30 @@ +# Mining + +btcd supports the `getblocktemplate` RPC. +The limited user cannot access this RPC. + +## Add the payment addresses with the `miningaddr` option + +```bash +[Application Options] +rpcuser=myuser +rpcpass=SomeDecentp4ssw0rd +miningaddr=12c6DSiU4Rq3P4ZxziKxzrL5LmMBrzjrJX +miningaddr=1M83ju3EChKYyysmM2FXtLNftbacagd8FR +``` + +## Add btcd's RPC TLS certificate to system Certificate Authority list + +`cgminer` uses [curl](http://curl.haxx.se/) to fetch data from the RPC server. +Since curl validates the certificate by default, we must install the `btcd` RPC +certificate into the default system Certificate Authority list. + +## Ubuntu + +1. Copy rpc.cert to /usr/share/ca-certificates: `# cp /home/user/.btcd/rpc.cert /usr/share/ca-certificates/btcd.crt` +2. Add btcd.crt to /etc/ca-certificates.conf: `# echo btcd.crt >> /etc/ca-certificates.conf` +3. Update the CA certificate list: `# update-ca-certificates` + +## Set your mining software url to use https + +`cgminer -o https://127.0.0.1:8334 -u rpcuser -p rpcpassword` diff --git a/docs/requirements.txt b/docs/requirements.txt new file mode 100644 index 0000000000..e16dd4b38f --- /dev/null +++ b/docs/requirements.txt @@ -0,0 +1 @@ +sphinx_markdown_tables diff --git a/docs/table_of_content.md b/docs/table_of_content.md new file mode 100644 index 0000000000..85f08a97b3 --- /dev/null +++ b/docs/table_of_content.md @@ -0,0 +1,13 @@ +# Contents + +* [Installation](installation.md) +* [Update](update.md) +* [Configuration](configuration.md) +* [Configuring TOR](configuring_tor.md) +* [Controlling](controlling.md) +* [Mining](mining.md) +* [Wallet](wallet.md) +* [Developer resources](developer_resources.md) +* [JSON RPC API](json_rpc_api.md) +* [Code contribution guidelines](code_contribution_guidelines.md) +* [Contact](contact.md) diff --git a/docs/update.md b/docs/update.md new file mode 100644 index 0000000000..1fb847cf9f --- /dev/null +++ b/docs/update.md @@ -0,0 +1,8 @@ +# Update + +* Run the following commands to update btcd, all dependencies, and install it: + +```bash +cd $GOPATH/src/github.com/btcsuite/btcd +git pull && GO111MODULE=on go install -v . ./cmd/... +``` diff --git a/docs/using_bootstrap_dat.md b/docs/using_bootstrap_dat.md deleted file mode 100644 index de7e08c0ce..0000000000 --- a/docs/using_bootstrap_dat.md +++ /dev/null @@ -1,79 +0,0 @@ -### Table of Contents -1. [What is bootstrap.dat?](#What)
-2. [What are the pros and cons of using bootstrap.dat?](#ProsCons) -3. [Where do I get bootstrap.dat?](#Obtaining) -4. [How do I know I can trust the bootstrap.dat I downloaded?](#Trust) -5. [How do I use bootstrap.dat with btcd?](#Importing) - -
- -### 1. What is bootstrap.dat? - -It is a flat, binary file containing bitcoin blockchain data starting from the -genesis block and continuing through a relatively recent block height depending -on the last time it was updated. - -See [this](https://bitcointalk.org/index.php?topic=145386.0) thread on -bitcointalk for more details. - -**NOTE:** Using bootstrap.dat is entirely optional. Btcd will download the -block chain from other peers through the Bitcoin protocol with no extra -configuration needed. - - - -### 2. What are the pros and cons of using bootstrap.dat? - -Pros: -- Typically accelerates the initial process of bringing up a new node as it - downloads from public P2P nodes and generally is able to achieve faster - download speeds -- It is particularly beneficial when bringing up multiple nodes as you only need - to download the data once - -Cons: -- Requires you to setup and configure a torrent client if you don't already have - one available -- Requires roughly twice as much disk space since you'll need the flat file as - well as the imported database - - - -### 3. Where do I get bootstrap.dat? - -The bootstrap.dat file is made available via a torrent. See -[this](https://bitcointalk.org/index.php?topic=145386.0) thread on bitcointalk -for the torrent download details. - - - -### 4. How do I know I can trust the bootstrap.dat I downloaded? - -You don't need to trust the file as the `addblock` utility verifies every block -using the same rules that are used when downloading the block chain normally -through the Bitcoin protocol. Additionally, the chain rules contain hard-coded -checkpoints for the known-good block chain at periodic intervals. This ensures -that not only is it a valid chain, but it is the same chain that everyone else -is using. - - - -### 5. How do I use bootstrap.dat with btcd? - -btcd comes with a separate utility named `addblock` which can be used to import -`bootstrap.dat`. This approach is used since the import is a one-time operation -and we prefer to keep the daemon itself as lightweight as possible. - -1. Stop btcd if it is already running. This is required since addblock needs to - access the database used by btcd and it will be locked if btcd is using it. -2. Note the path to the downloaded bootstrap.dat file. -3. Run the addblock utility with the `-i` argument pointing to the location of - boostrap.dat:

-**Windows:** -```bat -C:\> "%PROGRAMFILES%\Btcd Suite\Btcd\addblock" -i C:\Path\To\bootstrap.dat -``` -**Linux/Unix/BSD/POSIX:** -```bash -$ $GOPATH/bin/addblock -i /path/to/bootstrap.dat -``` diff --git a/docs/using_docker.md b/docs/using_docker.md new file mode 100644 index 0000000000..0809abc1c8 --- /dev/null +++ b/docs/using_docker.md @@ -0,0 +1,160 @@ +# Using Docker + +- [Using Docker](#using-docker) + - [Introduction](#introduction) + - [Docker volumes](#docker-volumes) + - [Known error messages when starting the btcd container](#known-error-messages-when-starting-the-btcd-container) + - [Examples](#examples) + - [Preamble](#preamble) + - [Full node without RPC port](#full-node-without-rpc-port) + - [Full node with RPC port](#full-node-with-rpc-port) + - [Full node with RPC port running on TESTNET](#full-node-with-rpc-port-running-on-testnet) + +## Introduction + +With Docker you can easily set up *btcd* to run your Bitcoin full node. You can find the official *btcd* Docker images on Docker Hub [btcsuite/btcd](https://hub.docker.com/r/btcsuite/btcd). The Docker source file of this image is located at [Dockerfile](https://github.com/btcsuite/btcd/blob/master/Dockerfile). + +This documentation focuses on running Docker container with *docker-compose.yml* files. These files are better to read and you can use them as a template for your own use. For more information about Docker and Docker compose visit the official [Docker documentation](https://docs.docker.com/). + +## Docker volumes + +**Special diskspace hint**: The following examples are using a Docker managed volume. The volume is named *btcd-data* This will use a lot of disk space, because it contains the full Bitcoin blockchain. Please make yourself familiar with [Docker volumes](https://docs.docker.com/storage/volumes/). + +The *btcd-data* volume will be reused, if you upgrade your *docker-compose.yml* file. Keep in mind, that it is not automatically removed by Docker, if you delete the btcd container. If you don't need the volume anymore, please delete it manually with the command: + +```bash +docker volume ls +docker volume rm btcd-data +``` + +For binding a local folder to your *btcd* container please read the [Docker documentation](https://docs.docker.com/). The preferred way is to use a Docker managed volume. + +## Known error messages when starting the btcd container + +We pass all needed arguments to *btcd* as command line parameters in our *docker-compose.yml* file. It doesn't make sense to create a *btcd.conf* file. This would make things too complicated. Anyhow *btcd* will complain with following log messages when starting. These messages can be ignored: + +```bash +Error creating a default config file: open /sample-btcd.conf: no such file or directory +... +[WRN] BTCD: open /root/.btcd/btcd.conf: no such file or directory +``` + +## Examples + +### Preamble + +All following examples uses some defaults: + +- container_name: btcd + Name of the docker container that is be shown by e.g. ```docker ps -a``` + +- hostname: btcd **(very important to set a fixed name before first start)** + The internal hostname in the docker container. By default, docker is recreating the hostname every time you change the *docker-compose.yml* file. The default hostnames look like *ef00548d4fa5*. This is a problem when using the *btcd* RPC port. The RPC port is using a certificate to validate the hostname. If the hostname changes you need to recreate the certificate. To avoid this, you should set a fixed hostname before the first start. This ensures, that the docker volume is created with a certificate with this hostname. + +- restart: unless-stopped + Starts the *btcd* container when Docker starts, except that when the container is stopped (manually or otherwise), it is not restarted even after Docker restarts. + +To use the following examples create an empty directory. In this directory create a file named *docker-compose.yml*, copy and paste the example into the *docker-compose.yml* file and run it. + +```bash +mkdir ~/btcd-docker +cd ~/btcd-docker +touch docker-compose.yaml +nano docker-compose.yaml (use your favourite editor to edit the compose file) +docker-compose up (creates and starts a new btcd container) +``` + +With the following commands you can control *docker-compose*: + +```docker-compose up -d``` (creates and starts the container in background) + +```docker-compose down``` (stops and delete the container. **The docker volume btcd-data will not be deleted**) + +```docker-compose stop``` (stops the container) + +```docker-compose start``` (starts the container) + +```docker ps -a``` (list all running and stopped container) + +```docker volume ls``` (lists all docker volumes) + +```docker logs btcd``` (shows the log ) + +```docker-compose help``` (brings up some helpful information) + +### Full node without RPC port + +Let's start with an easy example. If you just want to create a full node without the need of using the RPC port, you can use the following example. This example will launch *btcd* and exposes only the default p2p port 8333 to the outside world: + +```yaml +version: "2" + +services: + btcd: + container_name: btcd + hostname: btcd + image: btcsuite/btcd:latest + restart: unless-stopped + volumes: + - btcd-data:/root/.btcd + ports: + - 8333:8333 + +volumes: + btcd-data: +``` + +### Full node with RPC port + +To use the RPC port of *btcd* you need to specify a *username* and a very strong *password*. If you want to connect to the RPC port from the internet, you need to expose port 8334(RPC) as well. + +```yaml +version: "2" + +services: + btcd: + container_name: btcd + hostname: btcd + image: btcsuite/btcd:latest + restart: unless-stopped + volumes: + - btcd-data:/root/.btcd + ports: + - 8333:8333 + - 8334:8334 + command: [ + "--rpcuser=[CHOOSE_A_USERNAME]", + "--rpcpass=[CREATE_A_VERY_HARD_PASSWORD]" + ] + +volumes: + btcd-data: +``` + +### Full node with RPC port running on TESTNET + +To run a node on testnet, you need to provide the *--testnet* argument. The ports for testnet are 18333 (p2p) and 18334 (RPC): + +```yaml +version: "2" + +services: + btcd: + container_name: btcd + hostname: btcd + image: btcsuite/btcd:latest + restart: unless-stopped + volumes: + - btcd-data:/root/.btcd + ports: + - 18333:18333 + - 18334:18334 + command: [ + "--testnet", + "--rpcuser=[CHOOSE_A_USERNAME]", + "--rpcpass=[CREATE_A_VERY_HARD_PASSWORD]" + ] + +volumes: + btcd-data: +``` diff --git a/docs/wallet.md b/docs/wallet.md new file mode 100644 index 0000000000..cc123aa7d5 --- /dev/null +++ b/docs/wallet.md @@ -0,0 +1,5 @@ +# Wallet + +btcd was intentionally developed without an integrated wallet for security +reasons. Please see [btcwallet](https://github.com/btcsuite/btcwallet) for more +information. diff --git a/go.mod b/go.mod index 606399481f..2e3333acc1 100644 --- a/go.mod +++ b/go.mod @@ -1,21 +1,65 @@ module github.com/btcsuite/btcd require ( - github.com/aead/siphash v1.0.1 // indirect + github.com/btcsuite/btcd/btcec/v2 v2.1.3 + github.com/btcsuite/btcd/btcutil v1.1.0 + github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f - github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd - github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd - github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723 // indirect github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 github.com/btcsuite/winsvc v1.0.0 - github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495 - github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89 + github.com/davecgh/go-spew v1.1.1 + github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 + github.com/decred/dcrd/lru v1.0.0 + github.com/jessevdk/go-flags v1.4.0 github.com/jrick/logrotate v1.0.0 + github.com/stretchr/testify v1.7.0 + github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 + golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 + golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed +) + +require ( + github.com/aead/siphash v1.0.1 // indirect + github.com/decred/dcrd/crypto/blake256 v1.0.0 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 // indirect - github.com/onsi/ginkgo v1.7.0 // indirect - github.com/onsi/gomega v1.4.3 // indirect - golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44 + github.com/pmezard/go-difflib v1.0.0 // indirect + gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c // indirect +) + +replace github.com/btcsuite/btcd/btcutil => ./btcutil + +// The retract statements below fixes an accidental push of the tags of a btcd +// fork. +retract ( + v0.18.1 + v0.18.0 + v0.17.1 + v0.17.0 + v0.16.5 + v0.16.4 + v0.16.3 + v0.16.2 + v0.16.1 + v0.16.0 + + v0.15.2 + v0.15.1 + v0.15.0 + + v0.14.7 + v0.14.6 + v0.14.6 + v0.14.5 + v0.14.4 + v0.14.3 + v0.14.2 + v0.14.1 + + v0.14.0 + v0.13.0-beta2 + v0.13.0-beta ) -go 1.12 +go 1.17 diff --git a/go.sum b/go.sum index dc773d4775..1e39ef3263 100644 --- a/go.sum +++ b/go.sum @@ -1,53 +1,106 @@ github.com/aead/siphash v1.0.1 h1:FwHfE/T45KPKYuuSAKyyvE+oPWcaQ+CUmFW0bPlM+kg= github.com/aead/siphash v1.0.1/go.mod h1:Nywa3cDsYNNK3gaciGTWPwHt0wlpNV15vwmswBAUSII= +github.com/btcsuite/btcd v0.23.0/go.mod h1:0QJIIN1wwIXF/3G/m87gIwGniDMDQqjVn4SZgnFpsYY= +github.com/btcsuite/btcd/btcec/v2 v2.1.3 h1:xM/n3yIhHAhHy04z4i43C8p4ehixJZMsnrVJkgl+MTE= +github.com/btcsuite/btcd/btcec/v2 v2.1.3/go.mod h1:ctjw4H1kknNJmRN4iP1R7bTQ+v3GJkZBd6mui8ZsAZE= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.0/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= +github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1/go.mod h1:7SFka0XMvUgj3hfZtydOrQY2mwhPclbT2snogU7SQQc= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f h1:bAs4lUbRJpnnkd9VhRV3jjAVU7DJVjMaK+IsvSeZvFo= github.com/btcsuite/btclog v0.0.0-20170628155309-84c8d2346e9f/go.mod h1:TdznJufoqS23FtqVCzL0ZqgP5MqXbb4fg/WgDys70nA= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d h1:yJzD/yFppdVCf6ApMkVy8cUxV0XrxdP9rVf6D87/Mng= -github.com/btcsuite/btcutil v0.0.0-20190425235716-9e5f4b9a998d/go.mod h1:+5NJ2+qvTyV9exUAL/rxXi3DcLg2Ts+ymUAY5y4NvMg= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd h1:R/opQEbFEy9JGkIguV40SvRY1uliPX8ifOvi6ICsFCw= github.com/btcsuite/go-socks v0.0.0-20170105172521-4720035b7bfd/go.mod h1:HHNXQzUsZCxOoE+CPiyCTO6x34Zs86zZUiwtpXoGdtg= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd h1:qdGvebPBDuYDPGi1WCPjy1tGyMpmDK8IEapSsszn7HE= -github.com/btcsuite/goleveldb v0.0.0-20160330041536-7834afc9e8cd/go.mod h1:F+uVaaLLH7j4eDXPRvw78tMflu7Ie2bzYOH4Y8rRKBY= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723 h1:ZA/jbKoGcVAnER6pCHPEkGdZOV7U1oLUedErBHCUMs0= -github.com/btcsuite/snappy-go v0.0.0-20151229074030-0bdef8d06723/go.mod h1:8woku9dyThutzjeg+3xrA5iCpBRH8XEEg3lh6TiUghc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792 h1:R8vQdOQdZ9Y3SkEwmHoWBmX1DNXhXZqlTpq6s4tyJGc= github.com/btcsuite/websocket v0.0.0-20150119174127-31079b680792/go.mod h1:ghJtEyQwv5/p4Mg4C0fgbePVuGr935/5ddU9Z3TmDRY= github.com/btcsuite/winsvc v1.0.0 h1:J9B4L7e3oqhXOcm+2IuNApwzQec85lE+QaikUcCs+dk= github.com/btcsuite/winsvc v1.0.0/go.mod h1:jsenWakMcC0zFBFurPLEAyrnc/teJEM1O46fmI40EZs= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495 h1:6IyqGr3fnd0tM3YxipK27TUskaOVUjU2nG45yzwcQKY= -github.com/davecgh/go-spew v0.0.0-20171005155431-ecdeabc65495/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/decred/dcrd/crypto/blake256 v1.0.0 h1:/8DMNYp9SGi5f0w7uCm6d6M4OU2rGFK09Y2A4Xv7EE0= +github.com/decred/dcrd/crypto/blake256 v1.0.0/go.mod h1:sQl2p6Y26YV+ZOcSTP6thNdn47hh8kt6rqSlvmrXFAc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1 h1:YLtO71vCjJRCBcrPMtQ9nqBsqpA1m5sE92cU+pd5Mcc= +github.com/decred/dcrd/dcrec/secp256k1/v4 v4.0.1/go.mod h1:hyedUtir6IdtD/7lIxGeCxkaw7y45JueMRL4DIyJDKs= +github.com/decred/dcrd/lru v1.0.0 h1:Kbsb1SFDsIlaupWPwsPp+dkxiBY1frcS07PCPgotKz8= +github.com/decred/dcrd/lru v1.0.0/go.mod h1:mxKOwFd7lFjN2GZYsiz/ecgqR6kkYAl+0pz0tEMk218= github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM= +github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= +github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= +github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= +github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= +github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= +github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= +github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= +github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89 h1:12K8AlpT0/6QUXSfV0yi4Q0jkbq8NDtIKFtF61AoqV0= -github.com/jessevdk/go-flags v0.0.0-20141203071132-1679536dcc89/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.4.0 h1:4IU2WS7AumrZ/40jfhf4QVDMsQwqA7VEHozFRrGARJA= +github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jrick/logrotate v1.0.0 h1:lQ1bL/n9mBNeIXoTUoYRlK4dHuNJVofX9oWqBtPnSzI= github.com/jrick/logrotate v1.0.0/go.mod h1:LNinyqDIJnpAur+b8yyulnQw/wDuN1+BYKlTRt3OuAQ= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23 h1:FOOIBWrEkLgmlgGfMuZT83xIwfPDxEI2OHu6xUmJMFE= github.com/kkdai/bstream v0.0.0-20161212061736-f391b8402d23/go.mod h1:J+Gs4SYgM6CZQHDETBtE9HaSEkGmuNXF86RwHhHUvq4= +github.com/nxadm/tail v1.4.4 h1:DQuhQpB1tVlglWS2hLQ5OV6B5r8aGxSrPc5Qo6uTN78= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0 h1:WSHQ+IS43OoUrWtD1/bbclrwK8TTH5hzp+umCiuxHgs= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v1.4.3 h1:RE1xgDvH7imwFD45h+u2SgIfERHlS2yNG4DObb5BSKU= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44 h1:9lP3x0pW80sDI6t1UMSLA4to18W7R7imwAI/sWS9S8Q= -golang.org/x/crypto v0.0.0-20170930174604-9419663f5a44/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd h1:nTDtHvHSdCn1m6ITfMRqtOd/9+7a3s8RBNOZ3eYZzJA= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.10.1 h1:o0+MgICZLuZ7xjH7Vx6zS/zcu93/BEp1VwkIW1mEXCE= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= +github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7/go.mod h1:q4W45IWZaF22tdD+VEXcAWRA037jwmWEB5VWYORlTpc= +golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI= +golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f h1:wMNYb4v58l5UBM7MYRLPG6ZhfOqbKu7X5eyFl8ZhKvA= +golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc h1:zK/HqS5bZxDptfPJNq8v7vJfXtkU7r9TLIoSr1bXaP4= +golang.org/x/net v0.0.0-20200813134508-3edf25e44fcc/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e h1:o3PsSEY8E4eXWkXrIP9YJALUkVZqzHJT5DOasTyn8Vs= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg= +golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed h1:J22ig1FUekjjkmZUM7pTKixYm8DvrYsvrBZdunYeIuQ= +golang.org/x/sys v0.0.0-20200814200057-3d37ad5750ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= +golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= +golang.org/x/text v0.3.3 h1:cokOdA+Jmi5PJGXLlLllQSgYigAEfHXJAERHVMaCc2k= +golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= +golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= +golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE= +golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= +google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= +google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= +google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= +google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= +google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= -gopkg.in/yaml.v2 v2.2.1 h1:mUhvW9EsL+naU5Q3cakzfE91YhliOondGd6ZrsDBHQE= -gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v2 v2.3.0 h1:clyUAQHOM3G0M3f5vQj7LuJrETvjVot3Z5el9nffUtU= +gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/goclean.sh b/goclean.sh deleted file mode 100755 index 6d0e0ca104..0000000000 --- a/goclean.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/bash -# The script does automatic checking on a Go package and its sub-packages, including: -# 1. gofmt (http://golang.org/cmd/gofmt/) -# 2. golint (https://github.com/golang/lint) -# 3. go vet (http://golang.org/cmd/vet) -# 4. gosimple (https://github.com/dominikh/go-simple) -# 5. unconvert (https://github.com/mdempsky/unconvert) -# -# gometalinter (github.com/alecthomas/gometalinter) is used to run each static -# checker. - -set -ex - -# Make sure gometalinter is installed and $GOPATH/bin is in your path. -# $ go get -v github.com/alecthomas/gometalinter" -# $ gometalinter --install" -if [ ! -x "$(type -p gometalinter.v2)" ]; then - exit 1 -fi - -linter_targets=$(go list ./...) - -# Automatic checks -test -z "$(gometalinter.v2 -j 4 --disable-all \ ---enable=gofmt \ ---enable=golint \ ---enable=vet \ ---enable=gosimple \ ---enable=unconvert \ ---deadline=10m $linter_targets 2>&1 | grep -v 'ALL_CAPS\|OP_' 2>&1 | tee /dev/stderr)" -GO111MODULE=on go test -tags="rpctest" $linter_targets diff --git a/integration/README.md b/integration/README.md index 52bbf51167..5f6f14eace 100644 --- a/integration/README.md +++ b/integration/README.md @@ -1,7 +1,7 @@ integration =========== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) This contains integration tests which make use of the diff --git a/integration/bip0009_test.go b/integration/bip0009_test.go index df3721b1e6..67b15f3a5b 100644 --- a/integration/bip0009_test.go +++ b/integration/bip0009_test.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. // This file is ignored during the regular tests due to the following build tag. +//go:build rpctest // +build rpctest package integration @@ -33,7 +34,7 @@ const ( // ensures its version either has the provided bit set or unset per the set // flag. func assertVersionBit(r *rpctest.Harness, t *testing.T, hash *chainhash.Hash, bit uint8, set bool) { - block, err := r.Node.GetBlock(hash) + block, err := r.Client.GetBlock(hash) if err != nil { t.Fatalf("failed to retrieve block %v: %v", hash, err) } @@ -53,7 +54,7 @@ func assertVersionBit(r *rpctest.Harness, t *testing.T, hash *chainhash.Hash, bi // assertChainHeight retrieves the current chain height from the given test // harness and ensures it matches the provided expected height. func assertChainHeight(r *rpctest.Harness, t *testing.T, expectedHeight uint32) { - height, err := r.Node.GetBlockCount() + height, err := r.Client.GetBlockCount() if err != nil { t.Fatalf("failed to retrieve block height: %v", err) } @@ -96,7 +97,7 @@ func assertSoftForkStatus(r *rpctest.Harness, t *testing.T, forkKey string, stat "threshold state %v to string", line, state) } - info, err := r.Node.GetBlockChainInfo() + info, err := r.Client.GetBlockChainInfo() if err != nil { t.Fatalf("failed to retrieve chain info: %v", err) } @@ -129,7 +130,7 @@ func assertSoftForkStatus(r *rpctest.Harness, t *testing.T, forkKey string, stat // specific soft fork deployment to test. func testBIP0009(t *testing.T, forkKey string, deploymentID uint32) { // Initialize the primary mining node with only the genesis block. - r, err := rpctest.New(&chaincfg.RegressionNetParams, nil, nil) + r, err := rpctest.New(&chaincfg.RegressionNetParams, nil, nil, "") if err != nil { t.Fatalf("unable to create primary harness: %v", err) } @@ -196,6 +197,9 @@ func testBIP0009(t *testing.T, forkKey string, deploymentID uint32) { } deployment := &r.ActiveNet.Deployments[deploymentID] activationThreshold := r.ActiveNet.RuleChangeActivationThreshold + if deployment.CustomActivationThreshold != 0 { + activationThreshold = deployment.CustomActivationThreshold + } signalForkVersion := int32(1<= 0 { t.Fatal("transaction was accepted into the mempool " + "but should be rejected!") @@ -366,7 +367,7 @@ func spendCSVOutput(redeemScript []byte, csvUTXO *wire.OutPoint, func assertTxInBlock(r *rpctest.Harness, t *testing.T, blockHash *chainhash.Hash, txid *chainhash.Hash) { - block, err := r.Node.GetBlock(blockHash) + block, err := r.Client.GetBlock(blockHash) if err != nil { t.Fatalf("unable to get block: %v", err) } @@ -405,7 +406,7 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { // relative lock times. btcdCfg := []string{"--rejectnonstd"} - r, err := rpctest.New(&chaincfg.SimNetParams, nil, btcdCfg) + r, err := rpctest.New(&chaincfg.SimNetParams, nil, btcdCfg, "") if err != nil { t.Fatal("unable to create primary harness: ", err) } @@ -449,10 +450,10 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { // As the transaction is p2sh it should be accepted into the // mempool and found within the next generated block. - if _, err := r.Node.SendRawTransaction(tx, true); err != nil { + if _, err := r.Client.SendRawTransaction(tx, true); err != nil { t.Fatalf("unable to broadcast tx: %v", err) } - blocks, err := r.Node.Generate(1) + blocks, err := r.Client.Generate(1) if err != nil { t.Fatalf("unable to generate blocks: %v", err) } @@ -469,7 +470,7 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { // This transaction should be rejected from the mempool since // CSV validation is already mempool policy pre-fork. - _, err = r.Node.SendRawTransaction(spendingTx, true) + _, err = r.Client.SendRawTransaction(spendingTx, true) if err == nil { t.Fatalf("transaction should have been rejected, but was " + "instead accepted") @@ -496,7 +497,7 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { // height 299. The getblockchaininfo call checks the state for the // block AFTER the current height. numBlocks := (r.ActiveNet.MinerConfirmationWindow * 2) - 8 - if _, err := r.Node.Generate(numBlocks); err != nil { + if _, err := r.Client.Generate(numBlocks); err != nil { t.Fatalf("unable to generate blocks: %v", err) } @@ -530,7 +531,7 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { t.Fatalf("unable to create CSV output: %v", err) } - if _, err := r.Node.SendRawTransaction(tx, true); err != nil { + if _, err := r.Client.SendRawTransaction(tx, true); err != nil { t.Fatalf("unable to broadcast transaction: %v", err) } @@ -542,17 +543,17 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { } // Mine a single block including all the transactions generated above. - if _, err := r.Node.Generate(1); err != nil { + if _, err := r.Client.Generate(1); err != nil { t.Fatalf("unable to generate block: %v", err) } // Now mine 10 additional blocks giving the inputs generated above a // age of 11. Space out each block 10 minutes after the previous block. - prevBlockHash, err := r.Node.GetBestBlockHash() + prevBlockHash, err := r.Client.GetBestBlockHash() if err != nil { t.Fatalf("unable to get prior block hash: %v", err) } - prevBlock, err := r.Node.GetBlock(prevBlockHash) + prevBlock, err := r.Client.GetBlock(prevBlockHash) if err != nil { t.Fatalf("unable to get block: %v", err) } @@ -652,7 +653,7 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { } for i, test := range tests { - txid, err := r.Node.SendRawTransaction(test.tx, true) + txid, err := r.Client.SendRawTransaction(test.tx, true) switch { // Test case passes, nothing further to report. case test.accept && err == nil: @@ -686,7 +687,7 @@ func TestBIP0068AndBIP0112Activation(t *testing.T) { // Generate a block, the transaction should be included within // the newly mined block. - blockHashes, err := r.Node.Generate(1) + blockHashes, err := r.Client.Generate(1) if err != nil { t.Fatalf("unable to mine block: %v", err) } diff --git a/integration/rpcserver_test.go b/integration/rpcserver_test.go index df526442be..7e90a36b5c 100644 --- a/integration/rpcserver_test.go +++ b/integration/rpcserver_test.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. // This file is ignored during the regular tests due to the following build tag. +//go:build rpctest // +build rpctest package integration @@ -13,24 +14,28 @@ import ( "os" "runtime/debug" "testing" + "time" + "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/integration/rpctest" + "github.com/btcsuite/btcd/rpcclient" ) func testGetBestBlock(r *rpctest.Harness, t *testing.T) { - _, prevbestHeight, err := r.Node.GetBestBlock() + _, prevbestHeight, err := r.Client.GetBestBlock() if err != nil { t.Fatalf("Call to `getbestblock` failed: %v", err) } // Create a new block connecting to the current tip. - generatedBlockHashes, err := r.Node.Generate(1) + generatedBlockHashes, err := r.Client.Generate(1) if err != nil { t.Fatalf("Unable to generate block: %v", err) } - bestHash, bestHeight, err := r.Node.GetBestBlock() + bestHash, bestHeight, err := r.Client.GetBestBlock() if err != nil { t.Fatalf("Call to `getbestblock` failed: %v", err) } @@ -50,17 +55,17 @@ func testGetBestBlock(r *rpctest.Harness, t *testing.T) { func testGetBlockCount(r *rpctest.Harness, t *testing.T) { // Save the current count. - currentCount, err := r.Node.GetBlockCount() + currentCount, err := r.Client.GetBlockCount() if err != nil { t.Fatalf("Unable to get block count: %v", err) } - if _, err := r.Node.Generate(1); err != nil { + if _, err := r.Client.Generate(1); err != nil { t.Fatalf("Unable to generate block: %v", err) } // Count should have increased by one. - newCount, err := r.Node.GetBlockCount() + newCount, err := r.Client.GetBlockCount() if err != nil { t.Fatalf("Unable to get block count: %v", err) } @@ -72,17 +77,17 @@ func testGetBlockCount(r *rpctest.Harness, t *testing.T) { func testGetBlockHash(r *rpctest.Harness, t *testing.T) { // Create a new block connecting to the current tip. - generatedBlockHashes, err := r.Node.Generate(1) + generatedBlockHashes, err := r.Client.Generate(1) if err != nil { t.Fatalf("Unable to generate block: %v", err) } - info, err := r.Node.GetInfo() + info, err := r.Client.GetInfo() if err != nil { t.Fatalf("call to getinfo cailed: %v", err) } - blockHash, err := r.Node.GetBlockHash(int64(info.Blocks)) + blockHash, err := r.Client.GetBlockHash(int64(info.Blocks)) if err != nil { t.Fatalf("Call to `getblockhash` failed: %v", err) } @@ -94,10 +99,204 @@ func testGetBlockHash(r *rpctest.Harness, t *testing.T) { } } +func testBulkClient(r *rpctest.Harness, t *testing.T) { + // Create a new block connecting to the current tip. + generatedBlockHashes, err := r.Client.Generate(20) + if err != nil { + t.Fatalf("Unable to generate block: %v", err) + } + + var futureBlockResults []rpcclient.FutureGetBlockResult + for _, hash := range generatedBlockHashes { + futureBlockResults = append(futureBlockResults, r.BatchClient.GetBlockAsync(hash)) + } + + err = r.BatchClient.Send() + if err != nil { + t.Fatal(err) + } + + isKnownBlockHash := func(blockHash chainhash.Hash) bool { + for _, hash := range generatedBlockHashes { + if blockHash.IsEqual(hash) { + return true + } + } + return false + } + + for _, block := range futureBlockResults { + msgBlock, err := block.Receive() + if err != nil { + t.Fatal(err) + } + blockHash := msgBlock.Header.BlockHash() + if !isKnownBlockHash(blockHash) { + t.Fatalf("expected hash %s to be in generated hash list", blockHash) + } + } + +} + +func calculateHashesPerSecBetweenBlockHeights(r *rpctest.Harness, t *testing.T, startHeight, endHeight int64) float64 { + var totalWork int64 = 0 + var minTimestamp, maxTimestamp time.Time + + for curHeight := startHeight; curHeight <= endHeight; curHeight++ { + hash, err := r.Client.GetBlockHash(curHeight) + + if err != nil { + t.Fatal(err) + } + + blockHeader, err := r.Client.GetBlockHeader(hash) + + if err != nil { + t.Fatal(err) + } + + if curHeight == startHeight { + minTimestamp = blockHeader.Timestamp + continue + } + + totalWork += blockchain.CalcWork(blockHeader.Bits).Int64() + + if curHeight == endHeight { + maxTimestamp = blockHeader.Timestamp + } + } + + timeDiff := maxTimestamp.Sub(minTimestamp).Seconds() + + if timeDiff == 0 { + return 0 + } + + return float64(totalWork) / timeDiff +} + +func testGetNetworkHashPS(r *rpctest.Harness, t *testing.T) { + networkHashPS, err := r.Client.GetNetworkHashPS() + + if err != nil { + t.Fatal(err) + } + + expectedNetworkHashPS := calculateHashesPerSecBetweenBlockHeights(r, t, 28, 148) + + if networkHashPS != expectedNetworkHashPS { + t.Fatalf("Network hashes per second should be %f but received: %f", expectedNetworkHashPS, networkHashPS) + } +} + +func testGetNetworkHashPS2(r *rpctest.Harness, t *testing.T) { + networkHashPS2BlockTests := []struct { + blocks int + expectedStartHeight int64 + expectedEndHeight int64 + }{ + // Test receiving command for negative blocks + {blocks: -200, expectedStartHeight: 0, expectedEndHeight: 148}, + // Test receiving command for 0 blocks + {blocks: 0, expectedStartHeight: 0, expectedEndHeight: 148}, + // Test receiving command for less than total blocks -> expectedStartHeight = 148 - 100 = 48 + {blocks: 100, expectedStartHeight: 48, expectedEndHeight: 148}, + // Test receiving command for exact total blocks -> expectedStartHeight = 148 - 148 = 0 + {blocks: 148, expectedStartHeight: 0, expectedEndHeight: 148}, + // Test receiving command for greater than total blocks + {blocks: 200, expectedStartHeight: 0, expectedEndHeight: 148}, + } + + for _, networkHashPS2BlockTest := range networkHashPS2BlockTests { + blocks := networkHashPS2BlockTest.blocks + expectedStartHeight := networkHashPS2BlockTest.expectedStartHeight + expectedEndHeight := networkHashPS2BlockTest.expectedEndHeight + + networkHashPS, err := r.Client.GetNetworkHashPS2(blocks) + + if err != nil { + t.Fatal(err) + } + + expectedNetworkHashPS := calculateHashesPerSecBetweenBlockHeights(r, t, expectedStartHeight, expectedEndHeight) + + if networkHashPS != expectedNetworkHashPS { + t.Fatalf("Network hashes per second should be %f but received: %f", expectedNetworkHashPS, networkHashPS) + } + } +} + +func testGetNetworkHashPS3(r *rpctest.Harness, t *testing.T) { + networkHashPS3BlockTests := []struct { + height int + blocks int + expectedStartHeight int64 + expectedEndHeight int64 + }{ + // Test receiving command for negative height -> expectedEndHeight force to 148 + // - And negative blocks -> expectedStartHeight = 148 - ((148 % 2016) + 1) = -1 -> forced to 0 + {height: -200, blocks: -120, expectedStartHeight: 0, expectedEndHeight: 148}, + // - And zero blocks -> expectedStartHeight = 148 - ((148 % 2016) + 1) = -1 -> forced to 0 + {height: -200, blocks: 0, expectedStartHeight: 0, expectedEndHeight: 148}, + // - And positive blocks less than total blocks -> expectedStartHeight = 148 - 100 = 48 + {height: -200, blocks: 100, expectedStartHeight: 48, expectedEndHeight: 148}, + // - And positive blocks equal to total blocks + {height: -200, blocks: 148, expectedStartHeight: 0, expectedEndHeight: 148}, + // - And positive blocks greater than total blocks + {height: -200, blocks: 250, expectedStartHeight: 0, expectedEndHeight: 148}, + + // Test receiving command for zero height + // - Should return 0 similar to expected start height and expected end height both being 0 + // (blocks is irrelevant to output) + {height: 0, blocks: 120, expectedStartHeight: 0, expectedEndHeight: 0}, + + // Tests for valid block height -> expectedEndHeight set as height + // - And negative blocks -> expectedStartHeight = 148 - ((148 % 2016) + 1) = -1 -> forced to 0 + {height: 100, blocks: -120, expectedStartHeight: 0, expectedEndHeight: 100}, + // - And zero blocks -> expectedStartHeight = 148 - ((148 % 2016) + 1) = -1 -> forced to 0 + {height: 100, blocks: 0, expectedStartHeight: 0, expectedEndHeight: 100}, + // - And positive blocks less than command blocks -> expectedStartHeight = 100 - 70 = 30 + {height: 100, blocks: 70, expectedStartHeight: 30, expectedEndHeight: 100}, + // - And positive blocks equal to command blocks -> expectedStartHeight = 100 - 100 = 0 + {height: 100, blocks: 100, expectedStartHeight: 0, expectedEndHeight: 100}, + // - And positive blocks greater than command blocks -> expectedStartHeight = 100 - 200 = -100 -> forced to 0 + {height: 100, blocks: 200, expectedStartHeight: 0, expectedEndHeight: 100}, + + // Test receiving command for height greater than block height + // - Should return 0 similar to expected start height and expected end height both being 0 + // (blocks is irrelevant to output) + {height: 200, blocks: 120, expectedStartHeight: 0, expectedEndHeight: 0}, + } + + for _, networkHashPS3BlockTest := range networkHashPS3BlockTests { + blocks := networkHashPS3BlockTest.blocks + height := networkHashPS3BlockTest.height + expectedStartHeight := networkHashPS3BlockTest.expectedStartHeight + expectedEndHeight := networkHashPS3BlockTest.expectedEndHeight + + networkHashPS, err := r.Client.GetNetworkHashPS3(blocks, height) + + if err != nil { + t.Fatal(err) + } + + expectedNetworkHashPS := calculateHashesPerSecBetweenBlockHeights(r, t, expectedStartHeight, expectedEndHeight) + + if networkHashPS != expectedNetworkHashPS { + t.Fatalf("Network hashes per second should be %f but received: %f", expectedNetworkHashPS, networkHashPS) + } + } +} + var rpcTestCases = []rpctest.HarnessTestCase{ testGetBestBlock, testGetBlockCount, testGetBlockHash, + testBulkClient, + testGetNetworkHashPS, + testGetNetworkHashPS2, + testGetNetworkHashPS3, } var primaryHarness *rpctest.Harness @@ -109,7 +308,9 @@ func TestMain(m *testing.M) { // ensure that non-standard transactions aren't accepted into the // mempool or relayed. btcdCfg := []string{"--rejectnonstd"} - primaryHarness, err = rpctest.New(&chaincfg.SimNetParams, nil, btcdCfg) + primaryHarness, err = rpctest.New( + &chaincfg.SimNetParams, nil, btcdCfg, "", + ) if err != nil { fmt.Println("unable to create primary harness: ", err) os.Exit(1) diff --git a/integration/rpctest/README.md b/integration/rpctest/README.md index fceeed20a0..79f45bc857 100644 --- a/integration/rpctest/README.md +++ b/integration/rpctest/README.md @@ -1,9 +1,9 @@ rpctest ======= -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/integration/rpctest) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/integration/rpctest) Package rpctest provides a btcd-specific RPC testing harness crafting and executing integration tests by driving a `btcd` instance via the `RPC` diff --git a/integration/rpctest/blockgen.go b/integration/rpctest/blockgen.go index de5821b0c1..a35c66e6ac 100644 --- a/integration/rpctest/blockgen.go +++ b/integration/rpctest/blockgen.go @@ -14,9 +14,10 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/mining" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // solveBlock attempts to find a nonce which makes the passed block header hash @@ -181,6 +182,21 @@ func CreateBlock(prevBlock *btcutil.Block, inclusionTxs []*btcutil.Tx, if inclusionTxs != nil { blockTxns = append(blockTxns, inclusionTxs...) } + + // We must add the witness commitment to the coinbase if any + // transactions are segwit. + witnessIncluded := false + for i := 1; i < len(blockTxns); i++ { + if blockTxns[i].MsgTx().HasWitness() { + witnessIncluded = true + break + } + } + + if witnessIncluded { + _ = mining.AddWitnessCommitment(coinbaseTx, blockTxns) + } + merkles := blockchain.BuildMerkleTreeStore(blockTxns, false) var block wire.MsgBlock block.Header = wire.BlockHeader{ diff --git a/integration/rpctest/memwallet.go b/integration/rpctest/memwallet.go index f16130750a..d084e99feb 100644 --- a/integration/rpctest/memwallet.go +++ b/integration/rpctest/memwallet.go @@ -11,14 +11,14 @@ import ( "sync" "github.com/btcsuite/btcd/blockchain" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/hdkeychain" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/rpcclient" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/btcutil/hdkeychain" ) var ( @@ -125,7 +125,7 @@ func newMemWallet(net *chaincfg.Params, harnessID uint32) (*memWallet, error) { // The first child key from the hd root is reserved as the coinbase // generation address. - coinbaseChild, err := hdRoot.Child(0) + coinbaseChild, err := hdRoot.Derive(0) if err != nil { return nil, err } @@ -133,6 +133,7 @@ func newMemWallet(net *chaincfg.Params, harnessID uint32) (*memWallet, error) { if err != nil { return nil, err } + coinbaseAddr, err := keyToAddr(coinbaseKey, net) if err != nil { return nil, err @@ -337,7 +338,7 @@ func (m *memWallet) unwindBlock(update *chainUpdate) { func (m *memWallet) newAddress() (btcutil.Address, error) { index := m.hdIndex - childKey, err := m.hdRoot.Child(index) + childKey, err := m.hdRoot.Derive(index) if err != nil { return nil, err } @@ -509,16 +510,18 @@ func (m *memWallet) CreateTransaction(outputs []*wire.TxOut, outPoint := txIn.PreviousOutPoint utxo := m.utxos[outPoint] - extendedKey, err := m.hdRoot.Child(utxo.keyIndex) + extendedKey, err := m.hdRoot.Derive(utxo.keyIndex) if err != nil { return nil, err } - privKey, err := extendedKey.ECPrivKey() + privKeyOld, err := extendedKey.ECPrivKey() if err != nil { return nil, err } + privKey, _ := btcec.PrivKeyFromBytes(privKeyOld.Serialize()) + sigScript, err := txscript.SignatureScript(tx, i, utxo.pkScript, txscript.SigHashAll, privKey, true) if err != nil { diff --git a/integration/rpctest/node.go b/integration/rpctest/node.go index 6aec2b1168..be52a15404 100644 --- a/integration/rpctest/node.go +++ b/integration/rpctest/node.go @@ -15,7 +15,7 @@ import ( "time" rpc "github.com/btcsuite/btcd/rpcclient" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // nodeConfig contains all the args, and data required to launch a btcd process @@ -41,10 +41,18 @@ type nodeConfig struct { } // newConfig returns a newConfig with all default values. -func newConfig(prefix, certFile, keyFile string, extra []string) (*nodeConfig, error) { - btcdPath, err := btcdExecutablePath() - if err != nil { - btcdPath = "btcd" +func newConfig(prefix, certFile, keyFile string, extra []string, + customExePath string) (*nodeConfig, error) { + + var btcdPath string + if customExePath != "" { + btcdPath = customExePath + } else { + var err error + btcdPath, err = btcdExecutablePath() + if err != nil { + btcdPath = "btcd" + } } a := &nodeConfig{ diff --git a/integration/rpctest/rpc_harness.go b/integration/rpctest/rpc_harness.go index 1c2612e47b..2cb7e56d26 100644 --- a/integration/rpctest/rpc_harness.go +++ b/integration/rpctest/rpc_harness.go @@ -12,14 +12,15 @@ import ( "path/filepath" "strconv" "sync" + "sync/atomic" "testing" "time" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/rpcclient" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -34,22 +35,20 @@ const ( // BlockVersion is the default block version used when generating // blocks. BlockVersion = 4 + + // DefaultMaxConnectionRetries is the default number of times we re-try + // to connect to the node after starting it. + DefaultMaxConnectionRetries = 20 + + // DefaultConnectionRetryTimeout is the default duration we wait between + // two connection attempts. + DefaultConnectionRetryTimeout = 50 * time.Millisecond ) var ( // current number of active test nodes. numTestInstances = 0 - // processID is the process ID of the current running process. It is - // used to calculate ports based upon it when launching an rpc - // harnesses. The intent is to allow multiple process to run in - // parallel without port collisions. - // - // It should be noted however that there is still some small probability - // that there will be port collisions either due to other processes - // running or simply due to the stars aligning on the process IDs. - processID = os.Getpid() - // testInstances is a private package-level slice used to keep track of // all active test harnesses. This global can be used to perform // various "joins", shutdown several active harnesses after a test, @@ -58,6 +57,26 @@ var ( // Used to protest concurrent access to above declared variables. harnessStateMtx sync.RWMutex + + // ListenAddressGenerator is a function that is used to generate two + // listen addresses (host:port), one for the P2P listener and one for + // the RPC listener. This is exported to allow overwriting of the + // default behavior which isn't very concurrency safe (just selecting + // a random port can produce collisions and therefore flakes). + ListenAddressGenerator = generateListeningAddresses + + // defaultNodePort is the start of the range for listening ports of + // harness nodes. Ports are monotonically increasing starting from this + // number and are determined by the results of nextAvailablePort(). + defaultNodePort uint32 = 8333 + + // ListenerFormat is the format string that is used to generate local + // listener addresses. + ListenerFormat = "127.0.0.1:%d" + + // lastPort is the last port determined to be free for use by a new + // node. It should be used atomically. + lastPort uint32 = defaultNodePort ) // HarnessTestCase represents a test-case which utilizes an instance of the @@ -78,15 +97,23 @@ type Harness struct { // to. ActiveNet *chaincfg.Params - Node *rpcclient.Client - node *node - handlers *rpcclient.NotificationHandlers + // MaxConnRetries is the maximum number of times we re-try to connect to + // the node after starting it. + MaxConnRetries int + + // ConnectionRetryTimeout is the duration we wait between two connection + // attempts. + ConnectionRetryTimeout time.Duration + + Client *rpcclient.Client + BatchClient *rpcclient.Client + node *node + handlers *rpcclient.NotificationHandlers wallet *memWallet - testNodeDir string - maxConnRetries int - nodeNum int + testNodeDir string + nodeNum int sync.Mutex } @@ -94,11 +121,12 @@ type Harness struct { // New creates and initializes new instance of the rpc test harness. // Optionally, websocket handlers and a specified configuration may be passed. // In the case that a nil config is passed, a default configuration will be -// used. +// used. If a custom btcd executable is specified, it will be used to start the +// harness node. Otherwise a new binary is built on demand. // // NOTE: This function is safe for concurrent access. func New(activeNet *chaincfg.Params, handlers *rpcclient.NotificationHandlers, - extraArgs []string) (*Harness, error) { + extraArgs []string, customExePath string) (*Harness, error) { harnessStateMtx.Lock() defer harnessStateMtx.Unlock() @@ -144,13 +172,15 @@ func New(activeNet *chaincfg.Params, handlers *rpcclient.NotificationHandlers, miningAddr := fmt.Sprintf("--miningaddr=%s", wallet.coinbaseAddr) extraArgs = append(extraArgs, miningAddr) - config, err := newConfig("rpctest", certFile, keyFile, extraArgs) + config, err := newConfig( + "rpctest", certFile, keyFile, extraArgs, customExePath, + ) if err != nil { return nil, err } // Generate p2p+rpc listening addresses. - config.listen, config.rpcListen = generateListeningAddresses() + config.listen, config.rpcListen = ListenAddressGenerator() // Create the testing node bounded to the simnet. node, err := newNode(config, nodeTestData) @@ -190,13 +220,14 @@ func New(activeNet *chaincfg.Params, handlers *rpcclient.NotificationHandlers, } h := &Harness{ - handlers: handlers, - node: node, - maxConnRetries: 20, - testNodeDir: nodeTestData, - ActiveNet: activeNet, - nodeNum: nodeNum, - wallet: wallet, + handlers: handlers, + node: node, + MaxConnRetries: DefaultMaxConnectionRetries, + ConnectionRetryTimeout: DefaultConnectionRetryTimeout, + testNodeDir: nodeTestData, + ActiveNet: activeNet, + nodeNum: nodeNum, + wallet: wallet, } // Track this newly created test instance within the package level @@ -228,13 +259,13 @@ func (h *Harness) SetUp(createTestChain bool, numMatureOutputs uint32) error { // Filter transactions that pay to the coinbase associated with the // wallet. filterAddrs := []btcutil.Address{h.wallet.coinbaseAddr} - if err := h.Node.LoadTxFilter(true, filterAddrs, nil); err != nil { + if err := h.Client.LoadTxFilter(true, filterAddrs, nil); err != nil { return err } // Ensure btcd properly dispatches our registered call-back for each new // block. Otherwise, the memWallet won't function properly. - if err := h.Node.NotifyBlocks(); err != nil { + if err := h.Client.NotifyBlocks(); err != nil { return err } @@ -243,7 +274,7 @@ func (h *Harness) SetUp(createTestChain bool, numMatureOutputs uint32) error { if createTestChain && numMatureOutputs != 0 { numToGenerate := (uint32(h.ActiveNet.CoinbaseMaturity) + numMatureOutputs) - _, err := h.Node.Generate(numToGenerate) + _, err := h.Client.Generate(numToGenerate) if err != nil { return err } @@ -251,7 +282,7 @@ func (h *Harness) SetUp(createTestChain bool, numMatureOutputs uint32) error { // Block until the wallet has fully synced up to the tip of the main // chain. - _, height, err := h.Node.GetBestBlock() + _, height, err := h.Client.GetBestBlock() if err != nil { return err } @@ -272,8 +303,12 @@ func (h *Harness) SetUp(createTestChain bool, numMatureOutputs uint32) error { // // This function MUST be called with the harness state mutex held (for writes). func (h *Harness) tearDown() error { - if h.Node != nil { - h.Node.Shutdown() + if h.Client != nil { + h.Client.Shutdown() + } + + if h.BatchClient != nil { + h.BatchClient.Shutdown() } if err := h.node.shutdown(); err != nil { @@ -308,24 +343,38 @@ func (h *Harness) TearDown() error { // we're not able to establish a connection, this function returns with an // error. func (h *Harness) connectRPCClient() error { - var client *rpcclient.Client + var client, batchClient *rpcclient.Client var err error rpcConf := h.node.config.rpcConnConfig() - for i := 0; i < h.maxConnRetries; i++ { - if client, err = rpcclient.New(&rpcConf, h.handlers); err != nil { - time.Sleep(time.Duration(i) * 50 * time.Millisecond) - continue + batchConf := h.node.config.rpcConnConfig() + batchConf.HTTPPostMode = true + for i := 0; i < h.MaxConnRetries; i++ { + fail := false + if client == nil { + if client, err = rpcclient.New(&rpcConf, h.handlers); err != nil { + time.Sleep(time.Duration(i) * h.ConnectionRetryTimeout) + fail = true + } + } + if batchClient == nil { + if batchClient, err = rpcclient.NewBatch(&batchConf); err != nil { + time.Sleep(time.Duration(i) * h.ConnectionRetryTimeout) + fail = true + } + } + if !fail { + break } - break } - if client == nil { + if client == nil || batchClient == nil { return fmt.Errorf("connection timeout") } - h.Node = client + h.Client = client h.wallet.SetRPCClient(client) + h.BatchClient = batchClient return nil } @@ -447,11 +496,11 @@ func (h *Harness) GenerateAndSubmitBlockWithCustomCoinbaseOutputs( blockVersion = BlockVersion } - prevBlockHash, prevBlockHeight, err := h.Node.GetBestBlock() + prevBlockHash, prevBlockHeight, err := h.Client.GetBestBlock() if err != nil { return nil, err } - mBlock, err := h.Node.GetBlock(prevBlockHash) + mBlock, err := h.Client.GetBlock(prevBlockHash) if err != nil { return nil, err } @@ -466,30 +515,47 @@ func (h *Harness) GenerateAndSubmitBlockWithCustomCoinbaseOutputs( } // Submit the block to the simnet node. - if err := h.Node.SubmitBlock(newBlock, nil); err != nil { + if err := h.Client.SubmitBlock(newBlock, nil); err != nil { return nil, err } return newBlock, nil } -// generateListeningAddresses returns two strings representing listening -// addresses designated for the current rpc test. If there haven't been any -// test instances created, the default ports are used. Otherwise, in order to -// support multiple test nodes running at once, the p2p and rpc port are -// incremented after each initialization. +// generateListeningAddresses is a function that returns two listener +// addresses with unique ports and should be used to overwrite rpctest's +// default generator which is prone to use colliding ports. func generateListeningAddresses() (string, string) { - localhost := "127.0.0.1" + return fmt.Sprintf(ListenerFormat, NextAvailablePort()), + fmt.Sprintf(ListenerFormat, NextAvailablePort()) +} - portString := func(minPort, maxPort int) string { - port := minPort + numTestInstances + ((20 * processID) % - (maxPort - minPort)) - return strconv.Itoa(port) +// NextAvailablePort returns the first port that is available for listening by +// a new node. It panics if no port is found and the maximum available TCP port +// is reached. +func NextAvailablePort() int { + port := atomic.AddUint32(&lastPort, 1) + for port < 65535 { + // If there are no errors while attempting to listen on this + // port, close the socket and return it as available. While it + // could be the case that some other process picks up this port + // between the time the socket is closed and it's reopened in + // the harness node, in practice in CI servers this seems much + // less likely than simply some other process already being + // bound at the start of the tests. + addr := fmt.Sprintf(ListenerFormat, port) + l, err := net.Listen("tcp4", addr) + if err == nil { + err := l.Close() + if err == nil { + return int(port) + } + } + port = atomic.AddUint32(&lastPort, 1) } - p2p := net.JoinHostPort(localhost, portString(minPeerPort, maxPeerPort)) - rpc := net.JoinHostPort(localhost, portString(minRPCPort, maxRPCPort)) - return p2p, rpc + // No ports available? Must be a mistake. + panic("no ports available for listening") } // baseDir is the directory path of the temp directory for all rpctest files. diff --git a/integration/rpctest/rpc_harness_test.go b/integration/rpctest/rpc_harness_test.go index 717f8f45af..baadd35f5e 100644 --- a/integration/rpctest/rpc_harness_test.go +++ b/integration/rpctest/rpc_harness_test.go @@ -3,6 +3,7 @@ // license that can be found in the LICENSE file. // This file is ignored during the regular tests due to the following build tag. +//go:build rpctest // +build rpctest package rpctest @@ -17,7 +18,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) func testSendOutputs(r *Harness, t *testing.T) { @@ -43,7 +44,7 @@ func testSendOutputs(r *Harness, t *testing.T) { } assertTxMined := func(txid *chainhash.Hash, blockHash *chainhash.Hash) { - block, err := r.Node.GetBlock(blockHash) + block, err := r.Client.GetBlock(blockHash) if err != nil { t.Fatalf("unable to get block: %v", err) } @@ -67,7 +68,7 @@ func testSendOutputs(r *Harness, t *testing.T) { // Generate a single block, the transaction the wallet created should // be found in this block. - blockHashes, err := r.Node.Generate(1) + blockHashes, err := r.Client.Generate(1) if err != nil { t.Fatalf("unable to generate single block: %v", err) } @@ -76,7 +77,7 @@ func testSendOutputs(r *Harness, t *testing.T) { // Next, generate a spend much greater than the block reward. This // transaction should also have been mined properly. txid = genSpend(btcutil.Amount(500 * btcutil.SatoshiPerBitcoin)) - blockHashes, err = r.Node.Generate(1) + blockHashes, err = r.Client.Generate(1) if err != nil { t.Fatalf("unable to generate single block: %v", err) } @@ -84,7 +85,7 @@ func testSendOutputs(r *Harness, t *testing.T) { } func assertConnectedTo(t *testing.T, nodeA *Harness, nodeB *Harness) { - nodeAPeers, err := nodeA.Node.GetPeerInfo() + nodeAPeers, err := nodeA.Client.GetPeerInfo() if err != nil { t.Fatalf("unable to get nodeA's peer info") } @@ -105,7 +106,7 @@ func assertConnectedTo(t *testing.T, nodeA *Harness, nodeB *Harness) { func testConnectNode(r *Harness, t *testing.T) { // Create a fresh test harness. - harness, err := New(&chaincfg.SimNetParams, nil, nil) + harness, err := New(&chaincfg.SimNetParams, nil, nil, "") if err != nil { t.Fatal(err) } @@ -153,7 +154,7 @@ func testActiveHarnesses(r *Harness, t *testing.T) { numInitialHarnesses := len(ActiveHarnesses()) // Create a single test harness. - harness1, err := New(&chaincfg.SimNetParams, nil, nil) + harness1, err := New(&chaincfg.SimNetParams, nil, nil, "") if err != nil { t.Fatal(err) } @@ -170,7 +171,7 @@ func testActiveHarnesses(r *Harness, t *testing.T) { func testJoinMempools(r *Harness, t *testing.T) { // Assert main test harness has no transactions in its mempool. - pooledHashes, err := r.Node.GetRawMempool() + pooledHashes, err := r.Client.GetRawMempool() if err != nil { t.Fatalf("unable to get mempool for main test harness: %v", err) } @@ -181,7 +182,7 @@ func testJoinMempools(r *Harness, t *testing.T) { // Create a local test harness with only the genesis block. The nodes // will be synced below so the same transaction can be sent to both // nodes without it being an orphan. - harness, err := New(&chaincfg.SimNetParams, nil, nil) + harness, err := New(&chaincfg.SimNetParams, nil, nil, "") if err != nil { t.Fatal(err) } @@ -210,7 +211,7 @@ func testJoinMempools(r *Harness, t *testing.T) { if err != nil { t.Fatalf("coinbase spend failed: %v", err) } - if _, err := r.Node.SendRawTransaction(testTx, true); err != nil { + if _, err := r.Client.SendRawTransaction(testTx, true); err != nil { t.Fatalf("send transaction failed: %v", err) } @@ -219,7 +220,7 @@ func testJoinMempools(r *Harness, t *testing.T) { harnessSynced := make(chan struct{}) go func() { for { - poolHashes, err := r.Node.GetRawMempool() + poolHashes, err := r.Client.GetRawMempool() if err != nil { t.Fatalf("failed to retrieve harness mempool: %v", err) } @@ -262,7 +263,7 @@ func testJoinMempools(r *Harness, t *testing.T) { // Send the transaction to the local harness which will result in synced // mempools. - if _, err := harness.Node.SendRawTransaction(testTx, true); err != nil { + if _, err := harness.Client.SendRawTransaction(testTx, true); err != nil { t.Fatalf("send transaction failed: %v", err) } @@ -281,7 +282,7 @@ func testJoinMempools(r *Harness, t *testing.T) { func testJoinBlocks(r *Harness, t *testing.T) { // Create a second harness with only the genesis block so it is behind // the main harness. - harness, err := New(&chaincfg.SimNetParams, nil, nil) + harness, err := New(&chaincfg.SimNetParams, nil, nil, "") if err != nil { t.Fatal(err) } @@ -469,7 +470,7 @@ func testGenerateAndSubmitBlockWithCustomCoinbaseOutputs(r *Harness, func testMemWalletReorg(r *Harness, t *testing.T) { // Create a fresh harness, we'll be using the main harness to force a // re-org on this local harness. - harness, err := New(&chaincfg.SimNetParams, nil, nil) + harness, err := New(&chaincfg.SimNetParams, nil, nil, "") if err != nil { t.Fatal(err) } @@ -566,7 +567,7 @@ const ( func TestMain(m *testing.M) { var err error - mainHarness, err = New(&chaincfg.SimNetParams, nil, nil) + mainHarness, err = New(&chaincfg.SimNetParams, nil, nil, "") if err != nil { fmt.Println("unable to create main harness: ", err) os.Exit(1) @@ -612,7 +613,7 @@ func TestHarness(t *testing.T) { // Current tip should be at a height of numMatureOutputs plus the // required number of blocks for coinbase maturity. - nodeInfo, err := mainHarness.Node.GetInfo() + nodeInfo, err := mainHarness.Client.GetInfo() if err != nil { t.Fatalf("unable to execute getinfo on node: %v", err) } diff --git a/integration/rpctest/utils.go b/integration/rpctest/utils.go index fc7d938dcf..d4d76f2ee6 100644 --- a/integration/rpctest/utils.go +++ b/integration/rpctest/utils.go @@ -49,7 +49,7 @@ func syncMempools(nodes []*Harness) error { retry: for !poolsMatch { - firstPool, err := nodes[0].Node.GetRawMempool() + firstPool, err := nodes[0].Client.GetRawMempool() if err != nil { return err } @@ -58,7 +58,7 @@ retry: // first node, then we're done. Otherwise, drop back to the top // of the loop and retry after a short wait period. for _, node := range nodes[1:] { - nodePool, err := node.Node.GetRawMempool() + nodePool, err := node.Client.GetRawMempool() if err != nil { return err } @@ -84,7 +84,7 @@ retry: var prevHash *chainhash.Hash var prevHeight int32 for _, node := range nodes { - blockHash, blockHeight, err := node.Node.GetBestBlock() + blockHash, blockHeight, err := node.Client.GetBestBlock() if err != nil { return err } @@ -108,24 +108,24 @@ retry: // therefore in the case of disconnects, "from" will attempt to reestablish a // connection to the "to" harness. func ConnectNode(from *Harness, to *Harness) error { - peerInfo, err := from.Node.GetPeerInfo() + peerInfo, err := from.Client.GetPeerInfo() if err != nil { return err } numPeers := len(peerInfo) targetAddr := to.node.config.listen - if err := from.Node.AddNode(targetAddr, rpcclient.ANAdd); err != nil { + if err := from.Client.AddNode(targetAddr, rpcclient.ANAdd); err != nil { return err } // Block until a new connection has been established. - peerInfo, err = from.Node.GetPeerInfo() + peerInfo, err = from.Client.GetPeerInfo() if err != nil { return err } for len(peerInfo) <= numPeers { - peerInfo, err = from.Node.GetPeerInfo() + peerInfo, err = from.Client.GetPeerInfo() if err != nil { return err } diff --git a/mempool/README.md b/mempool/README.md index d9b8d73b5c..5f1e4a4cd1 100644 --- a/mempool/README.md +++ b/mempool/README.md @@ -1,9 +1,9 @@ mempool ======= -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/mempool) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/mempool) Package mempool provides a policy-enforced pool of unmined bitcoin transactions. diff --git a/mempool/estimatefee.go b/mempool/estimatefee.go index 53933469b6..a71ce42f12 100644 --- a/mempool/estimatefee.go +++ b/mempool/estimatefee.go @@ -18,7 +18,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/mining" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // TODO incorporate Alex Morcos' modifications to Gavin's initial model @@ -47,7 +47,7 @@ const ( bytePerKb = 1000 - btcPerSatoshi = 1E-8 + btcPerSatoshi = 1e-8 ) var ( @@ -275,7 +275,16 @@ func (ef *FeeEstimator) RegisterBlock(block *btcutil.Block) error { // This shouldn't happen but check just in case to avoid // an out-of-bounds array index later. - if blocksToConfirm >= estimateFeeDepth { + // + // Also check that blocksToConfirm is not negative as this causes + // the node to crash on reorgs. A tx that was observed at height X + // might be included in heights less than X because of chain reorgs. + // Refer to github.com/btcsuite/btcd/issues/1660 for more information. + // + // TODO(kcalvinalvin) a better design that doesn't just skip over the + // transaction would result in a more accurate fee estimator. Properly + // implement this later. + if blocksToConfirm >= estimateFeeDepth || blocksToConfirm < 0 { continue } @@ -563,7 +572,7 @@ func (ef *FeeEstimator) EstimateFee(numBlocks uint32) (BtcPerKilobyte, error) { if numBlocks > estimateFeeDepth { return -1, fmt.Errorf( "can only estimate fees for up to %d blocks from now", - estimateFeeBinSize) + estimateFeeDepth) } // If there are no cached results, generate them. diff --git a/mempool/estimatefee_test.go b/mempool/estimatefee_test.go index 16dcfadc95..c5ea85c635 100644 --- a/mempool/estimatefee_test.go +++ b/mempool/estimatefee_test.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/mining" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // newTestFeeEstimator creates a feeEstimator with some different parameters diff --git a/mempool/mempool.go b/mempool/mempool.go index 63a86a16f5..a80d8ee4f4 100644 --- a/mempool/mempool.go +++ b/mempool/mempool.go @@ -15,12 +15,12 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/blockchain/indexers" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/mining" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -927,7 +927,7 @@ func (mp *TxPool) validateReplacement(tx *btcutil.Tx, func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejectDupOrphans bool) ([]*chainhash.Hash, *TxDesc, error) { txHash := tx.Hash() - // If a transaction has iwtness data, and segwit isn't active yet, If + // If a transaction has witness data, and segwit isn't active yet, If // segwit isn't active yet, then we won't accept it into the mempool as // it can't be mined yet. if tx.MsgTx().HasWitness() { @@ -937,8 +937,14 @@ func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejec } if !segwitActive { + simnetHint := "" + if mp.cfg.ChainParams.Net == wire.SimNet { + bestHeight := mp.cfg.BestHeight() + simnetHint = fmt.Sprintf(" (The threshold for segwit activation is 300 blocks on simnet, "+ + "current best height is %d)", bestHeight) + } str := fmt.Sprintf("transaction %v has witness data, "+ - "but segwit isn't active yet", txHash) + "but segwit isn't active yet%s", txHash, simnetHint) return nil, nil, txRuleError(wire.RejectNonstandard, str) } } @@ -983,7 +989,7 @@ func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejec // Don't allow non-standard transactions if the network parameters // forbid their acceptance. if !mp.cfg.Policy.AcceptNonStd { - err = checkTransactionStandard(tx, nextBlockHeight, + err = CheckTransactionStandard(tx, nextBlockHeight, medianTimePast, mp.cfg.Policy.MinRelayTxFee, mp.cfg.Policy.MaxTxVersion) if err != nil { @@ -1026,8 +1032,8 @@ func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejec return nil, nil, err } - // Don't allow the transaction if it exists in the main chain and is not - // not already fully spent. + // Don't allow the transaction if it exists in the main chain and is + // already fully spent. prevOut := wire.OutPoint{Hash: *txHash} for txOutIdx := range tx.MsgTx().TxOut { prevOut.Index = uint32(txOutIdx) @@ -1048,7 +1054,7 @@ func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejec if entry == nil || entry.IsSpent() { // Must make a copy of the hash here since the iterator // is replaced and taking its address directly would - // result in all of the entries pointing to the same + // result in all the entries pointing to the same // memory location and thus all be the final hash. hashCopy := outpoint.Hash missingParents = append(missingParents, &hashCopy) @@ -1094,7 +1100,7 @@ func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejec if err != nil { // Attempt to extract a reject code from the error so // it can be retained. When not possible, fall back to - // a non standard error. + // a non-standard error. rejectCode, found := extractRejectCode(err) if !found { rejectCode = wire.RejectNonstandard @@ -1137,7 +1143,7 @@ func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejec // calculated below on its own would encourage several small // transactions to avoid fees rather than one single larger transaction // which is more desirable. Therefore, as long as the size of the - // transaction does not exceeed 1000 less than the reserved space for + // transaction does not exceed 1000 less than the reserved space for // high-priority transactions, don't require a fee for it. serializedSize := GetTxVirtualSize(tx) minFee := calcMinRequiredTxRelayFee(serializedSize, @@ -1188,7 +1194,7 @@ func (mp *TxPool) maybeAcceptTransaction(tx *btcutil.Tx, isNew, rateLimit, rejec mp.cfg.Policy.FreeTxRelayLimit*10*1000) } - // If the transaction has any conflicts and we've made it this far, then + // If the transaction has any conflicts, and we've made it this far, then // we're processing a potential replacement. var conflicts map[chainhash.Hash]*btcutil.Tx if isReplacement { @@ -1360,7 +1366,7 @@ func (mp *TxPool) ProcessOrphans(acceptedTx *btcutil.Tx) []*TxDesc { // // It returns a slice of transactions added to the mempool. When the // error is nil, the list will include the passed transaction itself along -// with any additional orphan transaactions that were added as a result of +// with any additional orphan transactions that were added as a result of // the passed one being accepted. // // This function is safe for concurrent access. @@ -1429,7 +1435,7 @@ func (mp *TxPool) Count() int { return count } -// TxHashes returns a slice of hashes for all of the transactions in the memory +// TxHashes returns a slice of hashes for all the transactions in the memory // pool. // // This function is safe for concurrent access. @@ -1482,7 +1488,7 @@ func (mp *TxPool) MiningDescs() []*mining.TxDesc { return descs } -// RawMempoolVerbose returns all of the entries in the mempool as a fully +// RawMempoolVerbose returns all the entries in the mempool as a fully // populated btcjson result. // // This function is safe for concurrent access. diff --git a/mempool/mempool_test.go b/mempool/mempool_test.go index 84aee10ab2..f0f8404cc7 100644 --- a/mempool/mempool_test.go +++ b/mempool/mempool_test.go @@ -13,12 +13,12 @@ import ( "time" "github.com/btcsuite/btcd/blockchain" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // fakeChain is used by the pool harness to provide generated test utxos and @@ -291,7 +291,7 @@ func newPoolHarness(chainParams *chaincfg.Params) (*poolHarness, []spendableOutp if err != nil { return nil, nil, err } - signKey, signPub := btcec.PrivKeyFromBytes(btcec.S256(), keyBytes) + signKey, signPub := btcec.PrivKeyFromBytes(keyBytes) // Generate associated pay-to-script-hash address and resulting payment // script. @@ -560,7 +560,7 @@ func TestOrphanReject(t *testing.T) { // Ensure no transactions were reported as accepted. if len(acceptedTxns) != 0 { - t.Fatal("ProcessTransaction: reported %d accepted "+ + t.Fatalf("ProcessTransaction: reported %d accepted "+ "transactions from failed orphan attempt", len(acceptedTxns)) } @@ -1418,8 +1418,8 @@ func TestAncestorsDescendants(t *testing.T) { // We'll be querying for the ancestors of E. We should expect to see all // of the transactions that it depends on. expectedAncestors := map[chainhash.Hash]struct{}{ - *a.Hash(): struct{}{}, *b.Hash(): struct{}{}, - *c.Hash(): struct{}{}, *d.Hash(): struct{}{}, + *a.Hash(): {}, *b.Hash(): {}, + *c.Hash(): {}, *d.Hash(): {}, } ancestors := ctx.harness.txPool.txAncestors(e, nil) if len(ancestors) != len(expectedAncestors) { @@ -1436,8 +1436,8 @@ func TestAncestorsDescendants(t *testing.T) { // Then, we'll query for the descendants of A. We should expect to see // all of the transactions that depend on it. expectedDescendants := map[chainhash.Hash]struct{}{ - *b.Hash(): struct{}{}, *c.Hash(): struct{}{}, - *d.Hash(): struct{}{}, *e.Hash(): struct{}{}, + *b.Hash(): {}, *c.Hash(): {}, + *d.Hash(): {}, *e.Hash(): {}, } descendants := ctx.harness.txPool.txDescendants(a, nil) if len(descendants) != len(expectedDescendants) { @@ -1749,6 +1749,47 @@ func TestRBF(t *testing.T) { }, err: "", }, + { + // A transaction that doesn't signal replacement, can + // be replaced if the parent signals replacement. + name: "inherited replacement", + setup: func(ctx *testContext) (*btcutil.Tx, []*btcutil.Tx) { + coinbase := ctx.addCoinbaseTx(1) + + // Create an initial parent transaction that + // marks replacement, we won't be replacing + // this directly however. + coinbaseOut := txOutToSpendableOut(coinbase, 0) + outs := []spendableOutput{coinbaseOut} + parent := ctx.addSignedTx( + outs, 1, defaultFee, true, false, + ) + + // Now create a transaction that spends that + // parent transaction, which is marked as NOT + // being RBF-able. + parentOut := txOutToSpendableOut(parent, 0) + parentOuts := []spendableOutput{parentOut} + childNoReplace := ctx.addSignedTx( + parentOuts, 1, defaultFee, false, false, + ) + + // Now we'll create another transaction that + // replaces the *child* only. This should work + // as the parent has been marked for RBF, even + // though the child hasn't. + respendOuts := []spendableOutput{parentOut} + childReplace, err := ctx.harness.CreateSignedTx( + respendOuts, 1, defaultFee*3, false, + ) + if err != nil { + ctx.t.Fatalf("unable to create child tx: %v", err) + } + + return childReplace, []*btcutil.Tx{childNoReplace} + }, + err: "", + }, } for _, testCase := range testCases { diff --git a/mempool/policy.go b/mempool/policy.go index f4e3b51ee7..758f7e06a9 100644 --- a/mempool/policy.go +++ b/mempool/policy.go @@ -9,9 +9,9 @@ import ( "time" "github.com/btcsuite/btcd/blockchain" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -61,7 +61,7 @@ const ( func calcMinRequiredTxRelayFee(serializedSize int64, minRelayTxFee btcutil.Amount) int64 { // Calculate the minimum fee for a transaction to be allowed into the // mempool and relayed by scaling the base fee (which is the minimum - // free transaction relay fee). minTxRelayFee is in Satoshi/kB so + // free transaction relay fee). minRelayTxFee is in Satoshi/kB so // multiply by serializedSize (which is in bytes) and divide by 1000 to // get minimum Satoshis. minFee := (serializedSize * int64(minRelayTxFee)) / 1000 @@ -172,17 +172,10 @@ func checkPkScriptStandard(pkScript []byte, scriptClass txscript.ScriptClass) er return nil } -// isDust returns whether or not the passed transaction output amount is -// considered dust or not based on the passed minimum transaction relay fee. -// Dust is defined in terms of the minimum transaction relay fee. In -// particular, if the cost to the network to spend coins is more than 1/3 of the -// minimum transaction relay fee, it is considered dust. -func isDust(txOut *wire.TxOut, minRelayTxFee btcutil.Amount) bool { - // Unspendable outputs are considered dust. - if txscript.IsUnspendable(txOut.PkScript) { - return true - } - +// GetDustThreshold calculates the dust limit for a *wire.TxOut by taking the +// size of a typical spending transaction and multiplying it by 3 to account +// for the minimum dust relay fee of 3000sat/kvb. +func GetDustThreshold(txOut *wire.TxOut) int64 { // The total serialized size consists of the output and the associated // input script to redeem it. Since there is no input script // to redeem it yet, use the minimum size of a typical input script. @@ -253,6 +246,20 @@ func isDust(txOut *wire.TxOut, minRelayTxFee btcutil.Amount) bool { totalSize += 107 } + return 3 * int64(totalSize) +} + +// IsDust returns whether or not the passed transaction output amount is +// considered dust or not based on the passed minimum transaction relay fee. +// Dust is defined in terms of the minimum transaction relay fee. In +// particular, if the cost to the network to spend coins is more than 1/3 of the +// minimum transaction relay fee, it is considered dust. +func IsDust(txOut *wire.TxOut, minRelayTxFee btcutil.Amount) bool { + // Unspendable outputs are considered dust. + if txscript.IsUnspendable(txOut.PkScript) { + return true + } + // The output is considered dust if the cost to the network to spend the // coins is more than 1/3 of the minimum free transaction relay fee. // minFreeTxRelayFee is in Satoshi/KB, so multiply by 1000 to @@ -265,17 +272,17 @@ func isDust(txOut *wire.TxOut, minRelayTxFee btcutil.Amount) bool { // // The following is equivalent to (value/totalSize) * (1/3) * 1000 // without needing to do floating point math. - return txOut.Value*1000/(3*int64(totalSize)) < int64(minRelayTxFee) + return txOut.Value*1000/GetDustThreshold(txOut) < int64(minRelayTxFee) } -// checkTransactionStandard performs a series of checks on a transaction to +// CheckTransactionStandard performs a series of checks on a transaction to // ensure it is a "standard" transaction. A standard transaction is one that // conforms to several additional limiting cases over what is considered a // "sane" transaction such as having a version in the supported range, being // finalized, conforming to more stringent size constraints, having scripts // of recognized forms, and not containing "dust" outputs (those that are // so small it costs more to process them than they are worth). -func checkTransactionStandard(tx *btcutil.Tx, height int32, +func CheckTransactionStandard(tx *btcutil.Tx, height int32, medianTimePast time.Time, minRelayTxFee btcutil.Amount, maxTxVersion int32) error { @@ -351,7 +358,7 @@ func checkTransactionStandard(tx *btcutil.Tx, height int32, // "dust". if scriptClass == txscript.NullDataTy { numNullDataOutputs++ - } else if isDust(txOut, minRelayTxFee) { + } else if IsDust(txOut, minRelayTxFee) { str := fmt.Sprintf("transaction output %d: payment "+ "of %d is dust", i, txOut.Value) return txRuleError(wire.RejectDust, str) diff --git a/mempool/policy_test.go b/mempool/policy_test.go index 9dd618ad6e..1b29d71f1f 100644 --- a/mempool/policy_test.go +++ b/mempool/policy_test.go @@ -9,12 +9,12 @@ import ( "testing" "time" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // TestCalcMinRequiredTxRelayFee tests the calcMinRequiredTxRelayFee API. @@ -98,7 +98,7 @@ func TestCalcMinRequiredTxRelayFee(t *testing.T) { func TestCheckPkScriptStandard(t *testing.T) { var pubKeys [][]byte for i := 0; i < 4; i++ { - pk, err := btcec.NewPrivateKey(btcec.S256()) + pk, err := btcec.NewPrivateKey() if err != nil { t.Fatalf("TestCheckPkScriptStandard NewPrivateKey failed: %v", err) @@ -204,7 +204,7 @@ func TestCheckPkScriptStandard(t *testing.T) { } } -// TestDust tests the isDust API. +// TestDust tests the IsDust API. func TestDust(t *testing.T) { pkScript := []byte{0x76, 0xa9, 0x21, 0x03, 0x2f, 0x7e, 0x43, 0x0a, 0xa4, 0xc9, 0xd1, 0x59, 0x43, 0x7e, 0x84, 0xb9, @@ -268,7 +268,7 @@ func TestDust(t *testing.T) { }, } for _, test := range tests { - res := isDust(&test.txOut, test.relayFee) + res := IsDust(&test.txOut, test.relayFee) if res != test.isDust { t.Fatalf("Dust test '%s' failed: want %v got %v", test.name, test.isDust, res) @@ -277,7 +277,7 @@ func TestDust(t *testing.T) { } } -// TestCheckTransactionStandard tests the checkTransactionStandard API. +// TestCheckTransactionStandard tests the CheckTransactionStandard API. func TestCheckTransactionStandard(t *testing.T) { // Create some dummy, but otherwise standard, data for transactions. prevOutHash, err := chainhash.NewHashFromStr("01") @@ -469,7 +469,7 @@ func TestCheckTransactionStandard(t *testing.T) { pastMedianTime := time.Now() for _, test := range tests { // Ensure standardness is as expected. - err := checkTransactionStandard(btcutil.NewTx(&test.tx), + err := CheckTransactionStandard(btcutil.NewTx(&test.tx), test.height, pastMedianTime, DefaultMinRelayTxFee, 1) if err == nil && test.isStandard { // Test passes since function returned standard for a @@ -477,12 +477,12 @@ func TestCheckTransactionStandard(t *testing.T) { continue } if err == nil && !test.isStandard { - t.Errorf("checkTransactionStandard (%s): standard when "+ + t.Errorf("CheckTransactionStandard (%s): standard when "+ "it should not be", test.name) continue } if err != nil && test.isStandard { - t.Errorf("checkTransactionStandard (%s): nonstandard "+ + t.Errorf("CheckTransactionStandard (%s): nonstandard "+ "when it should not be: %v", test.name, err) continue } @@ -490,20 +490,20 @@ func TestCheckTransactionStandard(t *testing.T) { // Ensure error type is a TxRuleError inside of a RuleError. rerr, ok := err.(RuleError) if !ok { - t.Errorf("checkTransactionStandard (%s): unexpected "+ + t.Errorf("CheckTransactionStandard (%s): unexpected "+ "error type - got %T", test.name, err) continue } txrerr, ok := rerr.Err.(TxRuleError) if !ok { - t.Errorf("checkTransactionStandard (%s): unexpected "+ + t.Errorf("CheckTransactionStandard (%s): unexpected "+ "error type - got %T", test.name, rerr.Err) continue } // Ensure the reject code is the expected one. if txrerr.RejectCode != test.code { - t.Errorf("checkTransactionStandard (%s): unexpected "+ + t.Errorf("CheckTransactionStandard (%s): unexpected "+ "error code - got %v, want %v", test.name, txrerr.RejectCode, test.code) continue diff --git a/mining/README.md b/mining/README.md index 5295215f8e..3abd195355 100644 --- a/mining/README.md +++ b/mining/README.md @@ -1,9 +1,9 @@ mining ====== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/mining) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/mining) ## Overview diff --git a/mining/cpuminer/README.md b/mining/cpuminer/README.md index 205b8f0360..47247be98f 100644 --- a/mining/cpuminer/README.md +++ b/mining/cpuminer/README.md @@ -1,9 +1,9 @@ cpuminer ======== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/mining/cpuminer) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/mining/cpuminer) ======= ## Overview diff --git a/mining/cpuminer/cpuminer.go b/mining/cpuminer/cpuminer.go index 3d5b3b1936..038e6645bb 100644 --- a/mining/cpuminer/cpuminer.go +++ b/mining/cpuminer/cpuminer.go @@ -17,7 +17,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/mining" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/mining/mining.go b/mining/mining.go index 44ec7dc761..4ed61f3f32 100644 --- a/mining/mining.go +++ b/mining/mining.go @@ -15,7 +15,7 @@ import ( "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( @@ -803,40 +803,7 @@ mempoolLoop: // OP_RETURN output within the coinbase transaction. var witnessCommitment []byte if witnessIncluded { - // The witness of the coinbase transaction MUST be exactly 32-bytes - // of all zeroes. - var witnessNonce [blockchain.CoinbaseWitnessDataLen]byte - coinbaseTx.MsgTx().TxIn[0].Witness = wire.TxWitness{witnessNonce[:]} - - // Next, obtain the merkle root of a tree which consists of the - // wtxid of all transactions in the block. The coinbase - // transaction will have a special wtxid of all zeroes. - witnessMerkleTree := blockchain.BuildMerkleTreeStore(blockTxns, - true) - witnessMerkleRoot := witnessMerkleTree[len(witnessMerkleTree)-1] - - // The preimage to the witness commitment is: - // witnessRoot || coinbaseWitness - var witnessPreimage [64]byte - copy(witnessPreimage[:32], witnessMerkleRoot[:]) - copy(witnessPreimage[32:], witnessNonce[:]) - - // The witness commitment itself is the double-sha256 of the - // witness preimage generated above. With the commitment - // generated, the witness script for the output is: OP_RETURN - // OP_DATA_36 {0xaa21a9ed || witnessCommitment}. The leading - // prefix is referred to as the "witness magic bytes". - witnessCommitment = chainhash.DoubleHashB(witnessPreimage[:]) - witnessScript := append(blockchain.WitnessMagicBytes, witnessCommitment...) - - // Finally, create the OP_RETURN carrying witness commitment - // output as an additional output within the coinbase. - commitmentOutput := &wire.TxOut{ - Value: 0, - PkScript: witnessScript, - } - coinbaseTx.MsgTx().TxOut = append(coinbaseTx.MsgTx().TxOut, - commitmentOutput) + witnessCommitment = AddWitnessCommitment(coinbaseTx, blockTxns) } // Calculate the required difficulty for the block. The timestamp @@ -895,6 +862,49 @@ mempoolLoop: }, nil } +// AddWitnessCommitment adds the witness commitment as an OP_RETURN outpout +// within the coinbase tx. The raw commitment is returned. +func AddWitnessCommitment(coinbaseTx *btcutil.Tx, + blockTxns []*btcutil.Tx) []byte { + + // The witness of the coinbase transaction MUST be exactly 32-bytes + // of all zeroes. + var witnessNonce [blockchain.CoinbaseWitnessDataLen]byte + coinbaseTx.MsgTx().TxIn[0].Witness = wire.TxWitness{witnessNonce[:]} + + // Next, obtain the merkle root of a tree which consists of the + // wtxid of all transactions in the block. The coinbase + // transaction will have a special wtxid of all zeroes. + witnessMerkleTree := blockchain.BuildMerkleTreeStore(blockTxns, + true) + witnessMerkleRoot := witnessMerkleTree[len(witnessMerkleTree)-1] + + // The preimage to the witness commitment is: + // witnessRoot || coinbaseWitness + var witnessPreimage [64]byte + copy(witnessPreimage[:32], witnessMerkleRoot[:]) + copy(witnessPreimage[32:], witnessNonce[:]) + + // The witness commitment itself is the double-sha256 of the + // witness preimage generated above. With the commitment + // generated, the witness script for the output is: OP_RETURN + // OP_DATA_36 {0xaa21a9ed || witnessCommitment}. The leading + // prefix is referred to as the "witness magic bytes". + witnessCommitment := chainhash.DoubleHashB(witnessPreimage[:]) + witnessScript := append(blockchain.WitnessMagicBytes, witnessCommitment...) + + // Finally, create the OP_RETURN carrying witness commitment + // output as an additional output within the coinbase. + commitmentOutput := &wire.TxOut{ + Value: 0, + PkScript: witnessScript, + } + coinbaseTx.MsgTx().TxOut = append(coinbaseTx.MsgTx().TxOut, + commitmentOutput) + + return witnessCommitment +} + // UpdateBlockTime updates the timestamp in the header of the passed block to // the current time while taking into account the median time of the last // several blocks to ensure the new time is after that time per the chain diff --git a/mining/mining_test.go b/mining/mining_test.go index 362253e5fe..ba1d97771c 100644 --- a/mining/mining_test.go +++ b/mining/mining_test.go @@ -9,7 +9,7 @@ import ( "math/rand" "testing" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // TestTxFeePrioHeap ensures the priority queue for transaction fees and diff --git a/mining/policy.go b/mining/policy.go index c3f059c521..f8ce411602 100644 --- a/mining/policy.go +++ b/mining/policy.go @@ -7,7 +7,7 @@ package mining import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( diff --git a/mining/policy_test.go b/mining/policy_test.go index f66a9c8dbd..0a362f5471 100644 --- a/mining/policy_test.go +++ b/mining/policy_test.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // newHashFromStr converts the passed big-endian hex string into a diff --git a/netsync/README.md b/netsync/README.md index d5e141151d..a4966815fd 100644 --- a/netsync/README.md +++ b/netsync/README.md @@ -1,9 +1,9 @@ netsync ======= -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/netsync) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/netsync) ## Overview diff --git a/netsync/blocklogger.go b/netsync/blocklogger.go index 18480e782a..788192ccb2 100644 --- a/netsync/blocklogger.go +++ b/netsync/blocklogger.go @@ -9,7 +9,7 @@ import ( "time" "github.com/btcsuite/btclog" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // blockProgressLogger provides periodic logging for other services in order diff --git a/netsync/interface.go b/netsync/interface.go index 3e6ca1c12d..2ce479bf2d 100644 --- a/netsync/interface.go +++ b/netsync/interface.go @@ -11,7 +11,7 @@ import ( "github.com/btcsuite/btcd/mempool" "github.com/btcsuite/btcd/peer" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // PeerNotifier exposes methods to notify peers of status changes to diff --git a/netsync/manager.go b/netsync/manager.go index 32715b8e1e..a297bb3f24 100644 --- a/netsync/manager.go +++ b/netsync/manager.go @@ -19,7 +19,7 @@ import ( "github.com/btcsuite/btcd/mempool" peerpkg "github.com/btcsuite/btcd/peer" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( @@ -79,6 +79,13 @@ type headersMsg struct { peer *peerpkg.Peer } +// notFoundMsg packages a bitcoin notfound message and the peer it came from +// together so the block handler has access to that information. +type notFoundMsg struct { + notFound *wire.MsgNotFound + peer *peerpkg.Peer +} + // donePeerMsg signifies a newly disconnected peer to the block handler. type donePeerMsg struct { peer *peerpkg.Peer @@ -147,6 +154,25 @@ type peerSyncState struct { requestedBlocks map[chainhash.Hash]struct{} } +// limitAdd is a helper function for maps that require a maximum limit by +// evicting a random value if adding the new value would cause it to +// overflow the maximum allowed. +func limitAdd(m map[chainhash.Hash]struct{}, hash chainhash.Hash, limit int) { + if len(m)+1 > limit { + // Remove a random entry from the map. For most compilers, Go's + // range statement iterates starting at a random item although + // that is not 100% guaranteed by the spec. The iteration order + // is not important here because an adversary would have to be + // able to pull off preimage attacks on the hashing function in + // order to target eviction of specific entries anyways. + for txHash := range m { + delete(m, txHash) + break + } + } + m[hash] = struct{}{} +} + // SyncManager is used to communicate block related messages with peers. The // SyncManager is started as by executing Start() in a goroutine. Once started, // it selects peers to sync from and starts the initial block download. Once the @@ -579,8 +605,7 @@ func (sm *SyncManager) handleTxMsg(tmsg *txMsg) { if err != nil { // Do not request this transaction again until a new block // has been processed. - sm.rejectedTxns[*txHash] = struct{}{} - sm.limitMap(sm.rejectedTxns, maxRejectedTxns) + limitAdd(sm.rejectedTxns, *txHash, maxRejectedTxns) // When the error is a rule error, it means the transaction was // simply rejected as opposed to something actually going wrong, @@ -994,6 +1019,37 @@ func (sm *SyncManager) handleHeadersMsg(hmsg *headersMsg) { } } +// handleNotFoundMsg handles notfound messages from all peers. +func (sm *SyncManager) handleNotFoundMsg(nfmsg *notFoundMsg) { + peer := nfmsg.peer + state, exists := sm.peerStates[peer] + if !exists { + log.Warnf("Received notfound message from unknown peer %s", peer) + return + } + for _, inv := range nfmsg.notFound.InvList { + // verify the hash was actually announced by the peer + // before deleting from the global requested maps. + switch inv.Type { + case wire.InvTypeWitnessBlock: + fallthrough + case wire.InvTypeBlock: + if _, exists := state.requestedBlocks[inv.Hash]; exists { + delete(state.requestedBlocks, inv.Hash) + delete(sm.requestedBlocks, inv.Hash) + } + + case wire.InvTypeWitnessTx: + fallthrough + case wire.InvTypeTx: + if _, exists := state.requestedTxns[inv.Hash]; exists { + delete(state.requestedTxns, inv.Hash) + delete(sm.requestedTxns, inv.Hash) + } + } + } +} + // haveInventory returns whether or not the inventory represented by the passed // inventory vector is known. This includes checking all of the various places // inventory can be when it is in different states such as blocks that are part @@ -1202,9 +1258,8 @@ func (sm *SyncManager) handleInvMsg(imsg *invMsg) { // Request the block if there is not already a pending // request. if _, exists := sm.requestedBlocks[iv.Hash]; !exists { - sm.requestedBlocks[iv.Hash] = struct{}{} - sm.limitMap(sm.requestedBlocks, maxRequestedBlocks) - state.requestedBlocks[iv.Hash] = struct{}{} + limitAdd(sm.requestedBlocks, iv.Hash, maxRequestedBlocks) + limitAdd(state.requestedBlocks, iv.Hash, maxRequestedBlocks) if peer.IsWitnessEnabled() { iv.Type = wire.InvTypeWitnessBlock @@ -1220,9 +1275,8 @@ func (sm *SyncManager) handleInvMsg(imsg *invMsg) { // Request the transaction if there is not already a // pending request. if _, exists := sm.requestedTxns[iv.Hash]; !exists { - sm.requestedTxns[iv.Hash] = struct{}{} - sm.limitMap(sm.requestedTxns, maxRequestedTxns) - state.requestedTxns[iv.Hash] = struct{}{} + limitAdd(sm.requestedTxns, iv.Hash, maxRequestedTxns) + limitAdd(state.requestedTxns, iv.Hash, maxRequestedTxns) // If the peer is capable, request the txn // including all witness data. @@ -1245,24 +1299,6 @@ func (sm *SyncManager) handleInvMsg(imsg *invMsg) { } } -// limitMap is a helper function for maps that require a maximum limit by -// evicting a random transaction if adding a new value would cause it to -// overflow the maximum allowed. -func (sm *SyncManager) limitMap(m map[chainhash.Hash]struct{}, limit int) { - if len(m)+1 > limit { - // Remove a random entry from the map. For most compilers, Go's - // range statement iterates starting at a random item although - // that is not 100% guaranteed by the spec. The iteration order - // is not important here because an adversary would have to be - // able to pull off preimage attacks on the hashing function in - // order to target eviction of specific entries anyways. - for txHash := range m { - delete(m, txHash) - return - } - } -} - // blockHandler is the main handler for the sync manager. It must be run as a // goroutine. It processes block and inv messages in a separate goroutine // from the peer handlers so the block (MsgBlock) messages are handled by a @@ -1295,6 +1331,9 @@ out: case *headersMsg: sm.handleHeadersMsg(msg) + case *notFoundMsg: + sm.handleNotFoundMsg(msg) + case *donePeerMsg: sm.handleDonePeerMsg(msg.peer) @@ -1492,6 +1531,18 @@ func (sm *SyncManager) QueueHeaders(headers *wire.MsgHeaders, peer *peerpkg.Peer sm.msgChan <- &headersMsg{headers: headers, peer: peer} } +// QueueNotFound adds the passed notfound message and peer to the block handling +// queue. +func (sm *SyncManager) QueueNotFound(notFound *wire.MsgNotFound, peer *peerpkg.Peer) { + // No channel handling here because peers do not need to block on + // reject messages. + if atomic.LoadInt32(&sm.shutdown) != 0 { + return + } + + sm.msgChan <- ¬FoundMsg{notFound: notFound, peer: peer} +} + // DonePeer informs the blockmanager that a peer has disconnected. func (sm *SyncManager) DonePeer(peer *peerpkg.Peer) { // Ignore if we are shutting down. diff --git a/ossec/ossec.go b/ossec/ossec.go new file mode 100644 index 0000000000..fc760ed9ea --- /dev/null +++ b/ossec/ossec.go @@ -0,0 +1,15 @@ +//go:build !openbsd + +package ossec + +func Unveil(path string, perms string) error { + return nil +} + +func Pledge(promises, execpromises string) error { + return nil +} + +func PledgePromises(promises string) error { + return nil +} diff --git a/ossec/ossec_openbsd.go b/ossec/ossec_openbsd.go new file mode 100644 index 0000000000..47aa2ae3ef --- /dev/null +++ b/ossec/ossec_openbsd.go @@ -0,0 +1,17 @@ +package ossec + +import ( + "golang.org/x/sys/unix" +) + +func Unveil(path string, perms string) error { + return unix.Unveil(path, perms) +} + +func Pledge(promises, execpromises string) error { + return unix.Pledge(promises, execpromises) +} + +func PledgePromises(promises string) error { + return unix.PledgePromises(promises) +} diff --git a/params.go b/params.go index 14eeff0717..b4d1453dfb 100644 --- a/params.go +++ b/params.go @@ -55,6 +55,13 @@ var simNetParams = params{ rpcPort: "18556", } +// sigNetParams contains parameters specific to the Signet network +// (wire.SigNet). +var sigNetParams = params{ + Params: &chaincfg.SigNetParams, + rpcPort: "38332", +} + // netName returns the name used when referring to a bitcoin network. At the // time of writing, btcd currently places blocks for testnet version 3 in the // data and log directory "testnet", which does not match the Name field of the diff --git a/peer/README.md b/peer/README.md index 1a0ba36e8d..217f5dc3dc 100644 --- a/peer/README.md +++ b/peer/README.md @@ -1,9 +1,9 @@ peer ==== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/peer) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/peer) Package peer provides a common base for creating and managing bitcoin network peers. @@ -63,7 +63,7 @@ $ go get -u github.com/btcsuite/btcd/peer ## Examples -* [New Outbound Peer Example](https://godoc.org/github.com/btcsuite/btcd/peer#example-package--NewOutboundPeer) +* [New Outbound Peer Example](https://pkg.go.dev/github.com/btcsuite/btcd/peer#example-package--NewOutboundPeer) Demonstrates the basic process for initializing and creating an outbound peer. Peers negotiate by exchanging version and verack messages. For demonstration, a simple handler for the version message is attached to the peer. diff --git a/peer/doc.go b/peer/doc.go index cd822fe1cf..88fae8e850 100644 --- a/peer/doc.go +++ b/peer/doc.go @@ -145,6 +145,6 @@ raw message bytes using a format similar to hexdump -C. Bitcoin Improvement Proposals This package supports all BIPS supported by the wire package. -(https://godoc.org/github.com/btcsuite/btcd/wire#hdr-Bitcoin_Improvement_Proposals) +(https://pkg.go.dev/github.com/btcsuite/btcd/wire#hdr-Bitcoin_Improvement_Proposals) */ package peer diff --git a/peer/example_test.go b/peer/example_test.go index cb67683bae..d4662a2b4c 100644 --- a/peer/example_test.go +++ b/peer/example_test.go @@ -25,6 +25,7 @@ func mockRemotePeer() error { UserAgentVersion: "1.0.0", // User agent version to advertise. ChainParams: &chaincfg.SimNetParams, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } // Accept connections on the simnet port. @@ -81,6 +82,7 @@ func Example_newOutboundPeer() { verack <- struct{}{} }, }, + AllowSelfConns: true, } p, err := peer.NewOutboundPeer(peerCfg, "127.0.0.1:18555") if err != nil { diff --git a/peer/export_test.go b/peer/export_test.go deleted file mode 100644 index 06ec78a1a5..0000000000 --- a/peer/export_test.go +++ /dev/null @@ -1,18 +0,0 @@ -// Copyright (c) 2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -/* -This test file is part of the peer package rather than than the peer_test -package so it can bridge access to the internals to properly test cases which -are either not possible or can't reliably be tested via the public interface. -The functions are only exported while the tests are being run. -*/ - -package peer - -// TstAllowSelfConns allows the test package to allow self connections by -// disabling the detection logic. -func TstAllowSelfConns() { - allowSelfConns = true -} diff --git a/peer/mruinvmap.go b/peer/mruinvmap.go deleted file mode 100644 index 0bf1b2b34a..0000000000 --- a/peer/mruinvmap.go +++ /dev/null @@ -1,127 +0,0 @@ -// Copyright (c) 2013-2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package peer - -import ( - "bytes" - "container/list" - "fmt" - "sync" - - "github.com/btcsuite/btcd/wire" -) - -// mruInventoryMap provides a concurrency safe map that is limited to a maximum -// number of items with eviction for the oldest entry when the limit is -// exceeded. -type mruInventoryMap struct { - invMtx sync.Mutex - invMap map[wire.InvVect]*list.Element // nearly O(1) lookups - invList *list.List // O(1) insert, update, delete - limit uint -} - -// String returns the map as a human-readable string. -// -// This function is safe for concurrent access. -func (m *mruInventoryMap) String() string { - m.invMtx.Lock() - defer m.invMtx.Unlock() - - lastEntryNum := len(m.invMap) - 1 - curEntry := 0 - buf := bytes.NewBufferString("[") - for iv := range m.invMap { - buf.WriteString(fmt.Sprintf("%v", iv)) - if curEntry < lastEntryNum { - buf.WriteString(", ") - } - curEntry++ - } - buf.WriteString("]") - - return fmt.Sprintf("<%d>%s", m.limit, buf.String()) -} - -// Exists returns whether or not the passed inventory item is in the map. -// -// This function is safe for concurrent access. -func (m *mruInventoryMap) Exists(iv *wire.InvVect) bool { - m.invMtx.Lock() - _, exists := m.invMap[*iv] - m.invMtx.Unlock() - - return exists -} - -// Add adds the passed inventory to the map and handles eviction of the oldest -// item if adding the new item would exceed the max limit. Adding an existing -// item makes it the most recently used item. -// -// This function is safe for concurrent access. -func (m *mruInventoryMap) Add(iv *wire.InvVect) { - m.invMtx.Lock() - defer m.invMtx.Unlock() - - // When the limit is zero, nothing can be added to the map, so just - // return. - if m.limit == 0 { - return - } - - // When the entry already exists move it to the front of the list - // thereby marking it most recently used. - if node, exists := m.invMap[*iv]; exists { - m.invList.MoveToFront(node) - return - } - - // Evict the least recently used entry (back of the list) if the the new - // entry would exceed the size limit for the map. Also reuse the list - // node so a new one doesn't have to be allocated. - if uint(len(m.invMap))+1 > m.limit { - node := m.invList.Back() - lru := node.Value.(*wire.InvVect) - - // Evict least recently used item. - delete(m.invMap, *lru) - - // Reuse the list node of the item that was just evicted for the - // new item. - node.Value = iv - m.invList.MoveToFront(node) - m.invMap[*iv] = node - return - } - - // The limit hasn't been reached yet, so just add the new item. - node := m.invList.PushFront(iv) - m.invMap[*iv] = node -} - -// Delete deletes the passed inventory item from the map (if it exists). -// -// This function is safe for concurrent access. -func (m *mruInventoryMap) Delete(iv *wire.InvVect) { - m.invMtx.Lock() - if node, exists := m.invMap[*iv]; exists { - m.invList.Remove(node) - delete(m.invMap, *iv) - } - m.invMtx.Unlock() -} - -// newMruInventoryMap returns a new inventory map that is limited to the number -// of entries specified by limit. When the number of entries exceeds the limit, -// the oldest (least recently used) entry will be removed to make room for the -// new entry. -func newMruInventoryMap(limit uint) *mruInventoryMap { - m := mruInventoryMap{ - invMap: make(map[wire.InvVect]*list.Element), - invList: list.New(), - limit: limit, - } - return &m -} diff --git a/peer/mruinvmap_test.go b/peer/mruinvmap_test.go deleted file mode 100644 index e55746010b..0000000000 --- a/peer/mruinvmap_test.go +++ /dev/null @@ -1,170 +0,0 @@ -// Copyright (c) 2013-2016 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package peer - -import ( - "crypto/rand" - "fmt" - "testing" - - "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcd/wire" -) - -// TestMruInventoryMap ensures the MruInventoryMap behaves as expected including -// limiting, eviction of least-recently used entries, specific entry removal, -// and existence tests. -func TestMruInventoryMap(t *testing.T) { - // Create a bunch of fake inventory vectors to use in testing the mru - // inventory code. - numInvVects := 10 - invVects := make([]*wire.InvVect, 0, numInvVects) - for i := 0; i < numInvVects; i++ { - hash := &chainhash.Hash{byte(i)} - iv := wire.NewInvVect(wire.InvTypeBlock, hash) - invVects = append(invVects, iv) - } - - tests := []struct { - name string - limit int - }{ - {name: "limit 0", limit: 0}, - {name: "limit 1", limit: 1}, - {name: "limit 5", limit: 5}, - {name: "limit 7", limit: 7}, - {name: "limit one less than available", limit: numInvVects - 1}, - {name: "limit all available", limit: numInvVects}, - } - -testLoop: - for i, test := range tests { - // Create a new mru inventory map limited by the specified test - // limit and add all of the test inventory vectors. This will - // cause evicition since there are more test inventory vectors - // than the limits. - mruInvMap := newMruInventoryMap(uint(test.limit)) - for j := 0; j < numInvVects; j++ { - mruInvMap.Add(invVects[j]) - } - - // Ensure the limited number of most recent entries in the - // inventory vector list exist. - for j := numInvVects - test.limit; j < numInvVects; j++ { - if !mruInvMap.Exists(invVects[j]) { - t.Errorf("Exists #%d (%s) entry %s does not "+ - "exist", i, test.name, *invVects[j]) - continue testLoop - } - } - - // Ensure the entries before the limited number of most recent - // entries in the inventory vector list do not exist. - for j := 0; j < numInvVects-test.limit; j++ { - if mruInvMap.Exists(invVects[j]) { - t.Errorf("Exists #%d (%s) entry %s exists", i, - test.name, *invVects[j]) - continue testLoop - } - } - - // Readd the entry that should currently be the least-recently - // used entry so it becomes the most-recently used entry, then - // force an eviction by adding an entry that doesn't exist and - // ensure the evicted entry is the new least-recently used - // entry. - // - // This check needs at least 2 entries. - if test.limit > 1 { - origLruIndex := numInvVects - test.limit - mruInvMap.Add(invVects[origLruIndex]) - - iv := wire.NewInvVect(wire.InvTypeBlock, - &chainhash.Hash{0x00, 0x01}) - mruInvMap.Add(iv) - - // Ensure the original lru entry still exists since it - // was updated and should've have become the mru entry. - if !mruInvMap.Exists(invVects[origLruIndex]) { - t.Errorf("MRU #%d (%s) entry %s does not exist", - i, test.name, *invVects[origLruIndex]) - continue testLoop - } - - // Ensure the entry that should've become the new lru - // entry was evicted. - newLruIndex := origLruIndex + 1 - if mruInvMap.Exists(invVects[newLruIndex]) { - t.Errorf("MRU #%d (%s) entry %s exists", i, - test.name, *invVects[newLruIndex]) - continue testLoop - } - } - - // Delete all of the entries in the inventory vector list, - // including those that don't exist in the map, and ensure they - // no longer exist. - for j := 0; j < numInvVects; j++ { - mruInvMap.Delete(invVects[j]) - if mruInvMap.Exists(invVects[j]) { - t.Errorf("Delete #%d (%s) entry %s exists", i, - test.name, *invVects[j]) - continue testLoop - } - } - } -} - -// TestMruInventoryMapStringer tests the stringized output for the -// MruInventoryMap type. -func TestMruInventoryMapStringer(t *testing.T) { - // Create a couple of fake inventory vectors to use in testing the mru - // inventory stringer code. - hash1 := &chainhash.Hash{0x01} - hash2 := &chainhash.Hash{0x02} - iv1 := wire.NewInvVect(wire.InvTypeBlock, hash1) - iv2 := wire.NewInvVect(wire.InvTypeBlock, hash2) - - // Create new mru inventory map and add the inventory vectors. - mruInvMap := newMruInventoryMap(uint(2)) - mruInvMap.Add(iv1) - mruInvMap.Add(iv2) - - // Ensure the stringer gives the expected result. Since map iteration - // is not ordered, either entry could be first, so account for both - // cases. - wantStr1 := fmt.Sprintf("<%d>[%s, %s]", 2, *iv1, *iv2) - wantStr2 := fmt.Sprintf("<%d>[%s, %s]", 2, *iv2, *iv1) - gotStr := mruInvMap.String() - if gotStr != wantStr1 && gotStr != wantStr2 { - t.Fatalf("unexpected string representation - got %q, want %q "+ - "or %q", gotStr, wantStr1, wantStr2) - } -} - -// BenchmarkMruInventoryList performs basic benchmarks on the most recently -// used inventory handling. -func BenchmarkMruInventoryList(b *testing.B) { - // Create a bunch of fake inventory vectors to use in benchmarking - // the mru inventory code. - b.StopTimer() - numInvVects := 100000 - invVects := make([]*wire.InvVect, 0, numInvVects) - for i := 0; i < numInvVects; i++ { - hashBytes := make([]byte, chainhash.HashSize) - rand.Read(hashBytes) - hash, _ := chainhash.NewHash(hashBytes) - iv := wire.NewInvVect(wire.InvTypeBlock, hash) - invVects = append(invVects, iv) - } - b.StartTimer() - - // Benchmark the add plus evicition code. - limit := 20000 - mruInvMap := newMruInventoryMap(uint(limit)) - for i := 0; i < b.N; i++ { - mruInvMap.Add(invVects[i%numInvVects]) - } -} diff --git a/peer/mrunoncemap.go b/peer/mrunoncemap.go deleted file mode 100644 index 5f7c798429..0000000000 --- a/peer/mrunoncemap.go +++ /dev/null @@ -1,125 +0,0 @@ -// Copyright (c) 2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package peer - -import ( - "bytes" - "container/list" - "fmt" - "sync" -) - -// mruNonceMap provides a concurrency safe map that is limited to a maximum -// number of items with eviction for the oldest entry when the limit is -// exceeded. -type mruNonceMap struct { - mtx sync.Mutex - nonceMap map[uint64]*list.Element // nearly O(1) lookups - nonceList *list.List // O(1) insert, update, delete - limit uint -} - -// String returns the map as a human-readable string. -// -// This function is safe for concurrent access. -func (m *mruNonceMap) String() string { - m.mtx.Lock() - defer m.mtx.Unlock() - - lastEntryNum := len(m.nonceMap) - 1 - curEntry := 0 - buf := bytes.NewBufferString("[") - for nonce := range m.nonceMap { - buf.WriteString(fmt.Sprintf("%d", nonce)) - if curEntry < lastEntryNum { - buf.WriteString(", ") - } - curEntry++ - } - buf.WriteString("]") - - return fmt.Sprintf("<%d>%s", m.limit, buf.String()) -} - -// Exists returns whether or not the passed nonce is in the map. -// -// This function is safe for concurrent access. -func (m *mruNonceMap) Exists(nonce uint64) bool { - m.mtx.Lock() - _, exists := m.nonceMap[nonce] - m.mtx.Unlock() - - return exists -} - -// Add adds the passed nonce to the map and handles eviction of the oldest item -// if adding the new item would exceed the max limit. Adding an existing item -// makes it the most recently used item. -// -// This function is safe for concurrent access. -func (m *mruNonceMap) Add(nonce uint64) { - m.mtx.Lock() - defer m.mtx.Unlock() - - // When the limit is zero, nothing can be added to the map, so just - // return. - if m.limit == 0 { - return - } - - // When the entry already exists move it to the front of the list - // thereby marking it most recently used. - if node, exists := m.nonceMap[nonce]; exists { - m.nonceList.MoveToFront(node) - return - } - - // Evict the least recently used entry (back of the list) if the the new - // entry would exceed the size limit for the map. Also reuse the list - // node so a new one doesn't have to be allocated. - if uint(len(m.nonceMap))+1 > m.limit { - node := m.nonceList.Back() - lru := node.Value.(uint64) - - // Evict least recently used item. - delete(m.nonceMap, lru) - - // Reuse the list node of the item that was just evicted for the - // new item. - node.Value = nonce - m.nonceList.MoveToFront(node) - m.nonceMap[nonce] = node - return - } - - // The limit hasn't been reached yet, so just add the new item. - node := m.nonceList.PushFront(nonce) - m.nonceMap[nonce] = node -} - -// Delete deletes the passed nonce from the map (if it exists). -// -// This function is safe for concurrent access. -func (m *mruNonceMap) Delete(nonce uint64) { - m.mtx.Lock() - if node, exists := m.nonceMap[nonce]; exists { - m.nonceList.Remove(node) - delete(m.nonceMap, nonce) - } - m.mtx.Unlock() -} - -// newMruNonceMap returns a new nonce map that is limited to the number of -// entries specified by limit. When the number of entries exceeds the limit, -// the oldest (least recently used) entry will be removed to make room for the -// new entry. -func newMruNonceMap(limit uint) *mruNonceMap { - m := mruNonceMap{ - nonceMap: make(map[uint64]*list.Element), - nonceList: list.New(), - limit: limit, - } - return &m -} diff --git a/peer/mrunoncemap_test.go b/peer/mrunoncemap_test.go deleted file mode 100644 index bd7fb1082e..0000000000 --- a/peer/mrunoncemap_test.go +++ /dev/null @@ -1,152 +0,0 @@ -// Copyright (c) 2015 The btcsuite developers -// Use of this source code is governed by an ISC -// license that can be found in the LICENSE file. - -package peer - -import ( - "fmt" - "testing" -) - -// TestMruNonceMap ensures the mruNonceMap behaves as expected including -// limiting, eviction of least-recently used entries, specific entry removal, -// and existence tests. -func TestMruNonceMap(t *testing.T) { - // Create a bunch of fake nonces to use in testing the mru nonce code. - numNonces := 10 - nonces := make([]uint64, 0, numNonces) - for i := 0; i < numNonces; i++ { - nonces = append(nonces, uint64(i)) - } - - tests := []struct { - name string - limit int - }{ - {name: "limit 0", limit: 0}, - {name: "limit 1", limit: 1}, - {name: "limit 5", limit: 5}, - {name: "limit 7", limit: 7}, - {name: "limit one less than available", limit: numNonces - 1}, - {name: "limit all available", limit: numNonces}, - } - -testLoop: - for i, test := range tests { - // Create a new mru nonce map limited by the specified test - // limit and add all of the test nonces. This will cause - // evicition since there are more test nonces than the limits. - mruNonceMap := newMruNonceMap(uint(test.limit)) - for j := 0; j < numNonces; j++ { - mruNonceMap.Add(nonces[j]) - } - - // Ensure the limited number of most recent entries in the list - // exist. - for j := numNonces - test.limit; j < numNonces; j++ { - if !mruNonceMap.Exists(nonces[j]) { - t.Errorf("Exists #%d (%s) entry %d does not "+ - "exist", i, test.name, nonces[j]) - continue testLoop - } - } - - // Ensure the entries before the limited number of most recent - // entries in the list do not exist. - for j := 0; j < numNonces-test.limit; j++ { - if mruNonceMap.Exists(nonces[j]) { - t.Errorf("Exists #%d (%s) entry %d exists", i, - test.name, nonces[j]) - continue testLoop - } - } - - // Readd the entry that should currently be the least-recently - // used entry so it becomes the most-recently used entry, then - // force an eviction by adding an entry that doesn't exist and - // ensure the evicted entry is the new least-recently used - // entry. - // - // This check needs at least 2 entries. - if test.limit > 1 { - origLruIndex := numNonces - test.limit - mruNonceMap.Add(nonces[origLruIndex]) - - mruNonceMap.Add(uint64(numNonces) + 1) - - // Ensure the original lru entry still exists since it - // was updated and should've have become the mru entry. - if !mruNonceMap.Exists(nonces[origLruIndex]) { - t.Errorf("MRU #%d (%s) entry %d does not exist", - i, test.name, nonces[origLruIndex]) - continue testLoop - } - - // Ensure the entry that should've become the new lru - // entry was evicted. - newLruIndex := origLruIndex + 1 - if mruNonceMap.Exists(nonces[newLruIndex]) { - t.Errorf("MRU #%d (%s) entry %d exists", i, - test.name, nonces[newLruIndex]) - continue testLoop - } - } - - // Delete all of the entries in the list, including those that - // don't exist in the map, and ensure they no longer exist. - for j := 0; j < numNonces; j++ { - mruNonceMap.Delete(nonces[j]) - if mruNonceMap.Exists(nonces[j]) { - t.Errorf("Delete #%d (%s) entry %d exists", i, - test.name, nonces[j]) - continue testLoop - } - } - } -} - -// TestMruNonceMapStringer tests the stringized output for the mruNonceMap type. -func TestMruNonceMapStringer(t *testing.T) { - // Create a couple of fake nonces to use in testing the mru nonce - // stringer code. - nonce1 := uint64(10) - nonce2 := uint64(20) - - // Create new mru nonce map and add the nonces. - mruNonceMap := newMruNonceMap(uint(2)) - mruNonceMap.Add(nonce1) - mruNonceMap.Add(nonce2) - - // Ensure the stringer gives the expected result. Since map iteration - // is not ordered, either entry could be first, so account for both - // cases. - wantStr1 := fmt.Sprintf("<%d>[%d, %d]", 2, nonce1, nonce2) - wantStr2 := fmt.Sprintf("<%d>[%d, %d]", 2, nonce2, nonce1) - gotStr := mruNonceMap.String() - if gotStr != wantStr1 && gotStr != wantStr2 { - t.Fatalf("unexpected string representation - got %q, want %q "+ - "or %q", gotStr, wantStr1, wantStr2) - } -} - -// BenchmarkMruNonceList performs basic benchmarks on the most recently used -// nonce handling. -func BenchmarkMruNonceList(b *testing.B) { - // Create a bunch of fake nonces to use in benchmarking the mru nonce - // code. - b.StopTimer() - numNonces := 100000 - nonces := make([]uint64, 0, numNonces) - for i := 0; i < numNonces; i++ { - nonces = append(nonces, uint64(i)) - } - b.StartTimer() - - // Benchmark the add plus evicition code. - limit := 20000 - mruNonceMap := newMruNonceMap(uint(limit)) - for i := 0; i < b.N; i++ { - mruNonceMap.Add(nonces[i%numNonces]) - } -} diff --git a/peer/peer.go b/peer/peer.go index 11306ace49..6d34c5f822 100644 --- a/peer/peer.go +++ b/peer/peer.go @@ -24,11 +24,12 @@ import ( "github.com/btcsuite/btcd/wire" "github.com/btcsuite/go-socks/socks" "github.com/davecgh/go-spew/spew" + "github.com/decred/dcrd/lru" ) const ( // MaxProtocolVersion is the max protocol version the peer supports. - MaxProtocolVersion = wire.FeeFilterVersion + MaxProtocolVersion = wire.AddrV2Version // DefaultTrickleInterval is the min time between attempts to send an // inv message to a peer. @@ -82,12 +83,7 @@ var ( // sentNonces houses the unique nonces that are generated when pushing // version messages that are used to detect self connections. - sentNonces = newMruNonceMap(50) - - // allowSelfConns is only used to allow the tests to bypass the self - // connection detecting and disconnect logic since they intentionally - // do so for testing purposes. - allowSelfConns bool + sentNonces = lru.NewCache(50) ) // MessageListeners defines callback function pointers to invoke with message @@ -106,6 +102,9 @@ type MessageListeners struct { // OnAddr is invoked when a peer receives an addr bitcoin message. OnAddr func(p *Peer, msg *wire.MsgAddr) + // OnAddrV2 is invoked when a peer receives an addrv2 bitcoin message. + OnAddrV2 func(p *Peer, msg *wire.MsgAddrV2) + // OnPing is invoked when a peer receives a ping bitcoin message. OnPing func(p *Peer, msg *wire.MsgPing) @@ -201,6 +200,9 @@ type MessageListeners struct { // message. OnSendHeaders func(p *Peer, msg *wire.MsgSendHeaders) + // OnSendAddrV2 is invoked when a peer receives a sendaddrv2 message. + OnSendAddrV2 func(p *Peer, msg *wire.MsgSendAddrV2) + // OnRead is invoked when a peer receives a bitcoin message. It // consists of the number of bytes read, the message, and whether or not // an error in the read occurred. Typically, callers will opt to use @@ -275,6 +277,18 @@ type Config struct { // TrickleInterval is the duration of the ticker which trickles down the // inventory to a peer. TrickleInterval time.Duration + + // AllowSelfConns is only used to allow the tests to bypass the self + // connection detecting and disconnect logic since they intentionally + // do so for testing purposes. + AllowSelfConns bool + + // DisableStallHandler if true, then the stall handler that attempts to + // disconnect from peers that appear to be taking too long to respond + // to requests won't be activated. This can be useful in certain simnet + // scenarios where the stall behavior isn't important to the system + // under test. + DisableStallHandler bool } // minUint32 is a helper function to return the minimum of two uint32s. @@ -391,7 +405,7 @@ type AddrFunc func(remoteAddr *wire.NetAddress) *wire.NetAddress // HostToNetAddrFunc is a func which takes a host, port, services and returns // the netaddress. type HostToNetAddrFunc func(host string, port uint16, - services wire.ServiceFlag) (*wire.NetAddress, error) + services wire.ServiceFlag) (*wire.NetAddressV2, error) // NOTE: The overall data flow of a peer is split into 3 goroutines. Inbound // messages are read via the inHandler goroutine and generally dispatched to @@ -437,7 +451,7 @@ type Peer struct { inbound bool flagsMtx sync.Mutex // protects the peer flags below - na *wire.NetAddress + na *wire.NetAddressV2 id int32 userAgent string services wire.ServiceFlag @@ -447,10 +461,11 @@ type Peer struct { sendHeadersPreferred bool // peer sent a sendheaders message verAckReceived bool witnessEnabled bool + sendAddrV2 bool wireEncoding wire.MessageEncoding - knownInventory *mruInventoryMap + knownInventory lru.Cache prevGetBlocksMtx sync.Mutex prevGetBlocksBegin *chainhash.Hash prevGetBlocksStop *chainhash.Hash @@ -494,6 +509,10 @@ func (p *Peer) String() string { // This function is safe for concurrent access. func (p *Peer) UpdateLastBlockHeight(newHeight int32) { p.statsMtx.Lock() + if newHeight <= p.lastBlock { + p.statsMtx.Unlock() + return + } log.Tracef("Updating last block height of peer %v from %v to %v", p.addr, p.lastBlock, newHeight) p.lastBlock = newHeight @@ -573,7 +592,7 @@ func (p *Peer) ID() int32 { // NA returns the peer network address. // // This function is safe for concurrent access. -func (p *Peer) NA() *wire.NetAddress { +func (p *Peer) NA() *wire.NetAddressV2 { p.flagsMtx.Lock() na := p.na p.flagsMtx.Unlock() @@ -808,6 +827,16 @@ func (p *Peer) IsWitnessEnabled() bool { return witnessEnabled } +// WantsAddrV2 returns if the peer supports addrv2 messages instead of the +// legacy addr messages. +func (p *Peer) WantsAddrV2() bool { + p.flagsMtx.Lock() + wantsAddrV2 := p.sendAddrV2 + p.flagsMtx.Unlock() + + return wantsAddrV2 +} + // PushAddrMsg sends an addr message to the connected peer using the provided // addresses. This function is useful over manually sending the message via // QueueMessage since it automatically limits the addresses to the maximum @@ -844,6 +873,38 @@ func (p *Peer) PushAddrMsg(addresses []*wire.NetAddress) ([]*wire.NetAddress, er return msg.AddrList, nil } +// PushAddrV2Msg is used to push an addrv2 message to the remote peer. +// +// This function is safe for concurrent access. +func (p *Peer) PushAddrV2Msg(addrs []*wire.NetAddressV2) ( + []*wire.NetAddressV2, error) { + + count := len(addrs) + + // Nothing to send. + if count == 0 { + return nil, nil + } + + m := wire.NewMsgAddrV2() + m.AddrList = make([]*wire.NetAddressV2, count) + copy(m.AddrList, addrs) + + // Randomize the addresses sent if there are more than the maximum. + if count > wire.MaxV2AddrPerMsg { + rand.Shuffle(count, func(i, j int) { + m.AddrList[i] = m.AddrList[j] + m.AddrList[j] = m.AddrList[i] + }) + + // Truncate it to the maximum size. + m.AddrList = m.AddrList[:wire.MaxV2AddrPerMsg] + } + + p.QueueMessage(m, nil) + return m.AddrList, nil +} + // PushGetBlocksMsg sends a getblocks message for the provided block locator // and stop hash. It will ignore back-to-back duplicate requests. // @@ -1197,6 +1258,10 @@ out: for { select { case msg := <-p.stallControl: + if p.cfg.DisableStallHandler { + continue + } + switch msg.command { case sccSendMessage: // Add a deadline for the expected response @@ -1259,6 +1324,10 @@ out: } case <-stallTicker.C: + if p.cfg.DisableStallHandler { + continue + } + // Calculate the offset to apply to the deadline based // on how long the handlers have taken to execute since // the last tick. @@ -1343,6 +1412,19 @@ out: continue } + // Since the protocol version is 70016 but we don't + // implement compact blocks, we have to ignore unknown + // messages after the version-verack handshake. This + // matches bitcoind's behavior and is necessary since + // compact blocks negotiation occurs after the + // handshake. + if err == wire.ErrUnknownMessage { + log.Debugf("Received unknown message from %s:"+ + " %v", p, err) + idleTimer.Reset(idleTimeout) + continue + } + // Only log the error and send reject message if the // local peer is not forcibly disconnecting and the // remote peer has not disconnected. @@ -1384,6 +1466,11 @@ out: ) break out + case *wire.MsgSendAddrV2: + // Disconnect if peer sends this after the handshake is + // completed. + break out + case *wire.MsgGetAddr: if p.cfg.Listeners.OnGetAddr != nil { p.cfg.Listeners.OnGetAddr(p, msg) @@ -1394,6 +1481,11 @@ out: p.cfg.Listeners.OnAddr(p, msg) } + case *wire.MsgAddrV2: + if p.cfg.Listeners.OnAddrV2 != nil { + p.cfg.Listeners.OnAddrV2(p, msg) + } + case *wire.MsgPing: p.handlePingMsg(msg) if p.cfg.Listeners.OnPing != nil { @@ -1626,7 +1718,7 @@ out: // Don't send inventory that became known after // the initial check. - if p.knownInventory.Exists(iv) { + if p.knownInventory.Contains(iv) { continue } @@ -1832,7 +1924,7 @@ func (p *Peer) QueueMessageWithEncoding(msg wire.Message, doneChan chan<- struct func (p *Peer) QueueInventory(invVect *wire.InvVect) { // Don't add the inventory to the send queue if the peer is already // known to have it. - if p.knownInventory.Exists(invVect) { + if p.knownInventory.Contains(invVect) { return } @@ -1891,7 +1983,7 @@ func (p *Peer) readRemoteVersionMsg() error { } // Detect self connections. - if !allowSelfConns && sentNonces.Exists(msg.Nonce) { + if !p.cfg.AllowSelfConns && sentNonces.Contains(msg.Nonce) { return errors.New("disconnecting peer connected to self") } @@ -1966,29 +2058,8 @@ func (p *Peer) readRemoteVersionMsg() error { return nil } -// readRemoteVerAckMsg waits for the next message to arrive from the remote -// peer. If this message is not a verack message, then an error is returned. -// This method is to be used as part of the version negotiation upon a new -// connection. -func (p *Peer) readRemoteVerAckMsg() error { - // Read the next message from the wire. - remoteMsg, _, err := p.readMessage(wire.LatestEncoding) - if err != nil { - return err - } - - // It should be a verack message, otherwise send a reject message to the - // peer explaining why. - msg, ok := remoteMsg.(*wire.MsgVerAck) - if !ok { - reason := "a verack message must follow version" - rejectMsg := wire.NewMsgReject( - msg.Command(), wire.RejectMalformed, reason, - ) - _ = p.writeMessage(rejectMsg, wire.LatestEncoding) - return errors.New(reason) - } - +// processRemoteVerAckMsg takes the verack from the remote peer and handles it. +func (p *Peer) processRemoteVerAckMsg(msg *wire.MsgVerAck) { p.flagsMtx.Lock() p.verAckReceived = true p.flagsMtx.Unlock() @@ -1996,8 +2067,6 @@ func (p *Peer) readRemoteVerAckMsg() error { if p.cfg.Listeners.OnVerAck != nil { p.cfg.Listeners.OnVerAck(p, msg) } - - return nil } // localVersionMsg creates a version message that can be used to send to the @@ -2012,7 +2081,15 @@ func (p *Peer) localVersionMsg() (*wire.MsgVersion, error) { } } - theirNA := p.na + theirNA := p.na.ToLegacy() + + // If p.na is a torv3 hidden service address, we'll need to send over + // an empty NetAddress for their address. + if p.na.IsTorV3() { + theirNA = wire.NewNetAddressIPPort( + net.IP([]byte{0, 0, 0, 0}), p.na.Port, p.na.Services, + ) + } // If we are behind a proxy and the connection comes from the proxy then // we return an unroutable address as their address. This is to prevent @@ -2020,7 +2097,7 @@ func (p *Peer) localVersionMsg() (*wire.MsgVersion, error) { if p.cfg.Proxy != "" { proxyaddress, _, err := net.SplitHostPort(p.cfg.Proxy) // invalid proxy means poorly configured, be on the safe side. - if err != nil || p.na.IP.String() == proxyaddress { + if err != nil || p.na.Addr.String() == proxyaddress { theirNA = wire.NewNetAddressIPPort(net.IP([]byte{0, 0, 0, 0}), 0, theirNA.Services) } @@ -2072,14 +2149,71 @@ func (p *Peer) writeLocalVersionMsg() error { return p.writeMessage(localVerMsg, wire.LatestEncoding) } +// writeSendAddrV2Msg writes our sendaddrv2 message to the remote peer if the +// peer supports protocol version 70016 and above. +func (p *Peer) writeSendAddrV2Msg(pver uint32) error { + if pver < wire.AddrV2Version { + return nil + } + + sendAddrMsg := wire.NewMsgSendAddrV2() + return p.writeMessage(sendAddrMsg, wire.LatestEncoding) +} + +// waitToFinishNegotiation waits until desired negotiation messages are +// received, recording the remote peer's preference for sendaddrv2 as an +// example. The list of negotiated features can be expanded in the future. If a +// verack is received, negotiation stops and the connection is live. +func (p *Peer) waitToFinishNegotiation(pver uint32) error { + // There are several possible messages that can be received here. We + // could immediately receive verack and be done with the handshake. We + // could receive sendaddrv2 and still have to wait for verack. Or we + // can receive unknown messages before and after sendaddrv2 and still + // have to wait for verack. + for { + remoteMsg, _, err := p.readMessage(wire.LatestEncoding) + if err == wire.ErrUnknownMessage { + continue + } else if err != nil { + return err + } + + switch m := remoteMsg.(type) { + case *wire.MsgSendAddrV2: + if pver >= wire.AddrV2Version { + p.flagsMtx.Lock() + p.sendAddrV2 = true + p.flagsMtx.Unlock() + + if p.cfg.Listeners.OnSendAddrV2 != nil { + p.cfg.Listeners.OnSendAddrV2(p, m) + } + } + case *wire.MsgVerAck: + // Receiving a verack means we are done with the + // handshake. + p.processRemoteVerAckMsg(m) + return nil + default: + // This is triggered if the peer sends, for example, a + // GETDATA message during this negotiation. + return wire.ErrInvalidHandshake + } + } +} + // negotiateInboundProtocol performs the negotiation protocol for an inbound // peer. The events should occur in the following order, otherwise an error is // returned: // // 1. Remote peer sends their version. // 2. We send our version. -// 3. We send our verack. -// 4. Remote peer sends their verack. +// 3. We send sendaddrv2 if their version is >= 70016. +// 4. We send our verack. +// 5. Wait until sendaddrv2 or verack is received. Unknown messages are +// skipped as it could be wtxidrelay or a different message in the future +// that btcd does not implement but bitcoind does. +// 6. If remote peer sent sendaddrv2 above, wait until receipt of verack. func (p *Peer) negotiateInboundProtocol() error { if err := p.readRemoteVersionMsg(); err != nil { return err @@ -2089,22 +2223,35 @@ func (p *Peer) negotiateInboundProtocol() error { return err } + var protoVersion uint32 + p.flagsMtx.Lock() + protoVersion = p.protocolVersion + p.flagsMtx.Unlock() + + if err := p.writeSendAddrV2Msg(protoVersion); err != nil { + return err + } + err := p.writeMessage(wire.NewMsgVerAck(), wire.LatestEncoding) if err != nil { return err } - return p.readRemoteVerAckMsg() + // Finish the negotiation by waiting for negotiable messages or verack. + return p.waitToFinishNegotiation(protoVersion) } -// negotiateOutoundProtocol performs the negotiation protocol for an outbound +// negotiateOutboundProtocol performs the negotiation protocol for an outbound // peer. The events should occur in the following order, otherwise an error is // returned: // // 1. We send our version. // 2. Remote peer sends their version. -// 3. Remote peer sends their verack. +// 3. We send sendaddrv2 if their version is >= 70016. // 4. We send our verack. +// 5. We wait to receive sendaddrv2 or verack, skipping unknown messages as +// in the inbound case. +// 6. If sendaddrv2 was received, wait for receipt of verack. func (p *Peer) negotiateOutboundProtocol() error { if err := p.writeLocalVersionMsg(); err != nil { return err @@ -2114,11 +2261,22 @@ func (p *Peer) negotiateOutboundProtocol() error { return err } - if err := p.readRemoteVerAckMsg(); err != nil { + var protoVersion uint32 + p.flagsMtx.Lock() + protoVersion = p.protocolVersion + p.flagsMtx.Unlock() + + if err := p.writeSendAddrV2Msg(protoVersion); err != nil { + return err + } + + err := p.writeMessage(wire.NewMsgVerAck(), wire.LatestEncoding) + if err != nil { return err } - return p.writeMessage(wire.NewMsgVerAck(), wire.LatestEncoding) + // Finish the negotiation by waiting for negotiable messages or verack. + return p.waitToFinishNegotiation(protoVersion) } // start begins processing input and output messages. @@ -2181,7 +2339,12 @@ func (p *Peer) AssociateConnection(conn net.Conn) { p.Disconnect() return } - p.na = na + + // Convert the NetAddress created above into NetAddressV2. + currentNa := wire.NetAddressV2FromBytes( + na.Timestamp, na.Services, na.IP, na.Port, + ) + p.na = currentNa } go func() { @@ -2224,7 +2387,7 @@ func newPeerBase(origCfg *Config, inbound bool) *Peer { p := Peer{ inbound: inbound, wireEncoding: wire.BaseEncoding, - knownInventory: newMruInventoryMap(maxKnownInventory), + knownInventory: lru.NewCache(maxKnownInventory), stallControl: make(chan stallControlMsg, 1), // nonblocking sync outputQueue: make(chan outMsg, outputBufferSize), sendQueue: make(chan outMsg, 1), // nonblocking sync @@ -2247,7 +2410,10 @@ func NewInboundPeer(cfg *Config) *Peer { return newPeerBase(cfg, true) } -// NewOutboundPeer returns a new outbound bitcoin peer. +// NewOutboundPeer returns a new outbound bitcoin peer. If the Config argument +// does not set HostToNetAddress, connecting to anything other than an ipv4 or +// ipv6 address will fail and may cause a nil-pointer-dereference. This +// includes hostnames and onion services. func NewOutboundPeer(cfg *Config, addr string) (*Peer, error) { p := newPeerBase(cfg, false) p.addr = addr @@ -2269,7 +2435,12 @@ func NewOutboundPeer(cfg *Config, addr string) (*Peer, error) { } p.na = na } else { - p.na = wire.NewNetAddressIPPort(net.ParseIP(host), uint16(port), 0) + // If host is an onion hidden service or a hostname, it is + // likely that a nil-pointer-dereference will occur. The caller + // should set HostToNetAddress if connecting to these. + p.na = wire.NetAddressV2FromBytes( + time.Now(), 0, net.ParseIP(host), uint16(port), + ) } return p, nil diff --git a/peer/peer_test.go b/peer/peer_test.go index fff0ce3fd8..9df90c233d 100644 --- a/peer/peer_test.go +++ b/peer/peer_test.go @@ -238,6 +238,7 @@ func TestPeerConnection(t *testing.T) { ProtocolVersion: wire.RejectVersion, // Configure with older version Services: 0, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } peer2Cfg := &peer.Config{ Listeners: peer1Cfg.Listeners, @@ -247,6 +248,7 @@ func TestPeerConnection(t *testing.T) { ChainParams: &chaincfg.MainNetParams, Services: wire.SFNodeNetwork | wire.SFNodeWitness, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } wantStats1 := peerStats{ @@ -287,18 +289,16 @@ func TestPeerConnection(t *testing.T) { { "basic handshake", func() (*peer.Peer, *peer.Peer, error) { - inConn, outConn := pipe( - &conn{raddr: "10.0.0.1:8333"}, - &conn{raddr: "10.0.0.2:8333"}, - ) inPeer := peer.NewInboundPeer(peer1Cfg) - inPeer.AssociateConnection(inConn) - outPeer, err := peer.NewOutboundPeer(peer2Cfg, "10.0.0.2:8333") if err != nil { return nil, nil, err } - outPeer.AssociateConnection(outConn) + + err = setupPeerConnection(inPeer, outPeer) + if err != nil { + return nil, nil, err + } for i := 0; i < 4; i++ { select { @@ -313,18 +313,16 @@ func TestPeerConnection(t *testing.T) { { "socks proxy", func() (*peer.Peer, *peer.Peer, error) { - inConn, outConn := pipe( - &conn{raddr: "10.0.0.1:8333", proxy: true}, - &conn{raddr: "10.0.0.2:8333"}, - ) inPeer := peer.NewInboundPeer(peer1Cfg) - inPeer.AssociateConnection(inConn) - outPeer, err := peer.NewOutboundPeer(peer2Cfg, "10.0.0.2:8333") if err != nil { return nil, nil, err } - outPeer.AssociateConnection(outConn) + + err = setupPeerConnection(inPeer, outPeer) + if err != nil { + return nil, nil, err + } for i := 0; i < 4; i++ { select { @@ -357,7 +355,7 @@ func TestPeerConnection(t *testing.T) { // TestPeerListeners tests that the peer listeners are called as expected. func TestPeerListeners(t *testing.T) { verack := make(chan struct{}, 1) - ok := make(chan wire.Message, 20) + ok := make(chan wire.Message, 22) peerCfg := &peer.Config{ Listeners: peer.MessageListeners{ OnGetAddr: func(p *peer.Peer, msg *wire.MsgGetAddr) { @@ -445,6 +443,12 @@ func TestPeerListeners(t *testing.T) { OnSendHeaders: func(p *peer.Peer, msg *wire.MsgSendHeaders) { ok <- msg }, + OnSendAddrV2: func(p *peer.Peer, msg *wire.MsgSendAddrV2) { + ok <- msg + }, + OnAddrV2: func(p *peer.Peer, msg *wire.MsgAddrV2) { + ok <- msg + }, }, UserAgentName: "peer", UserAgentVersion: "1.0", @@ -452,13 +456,9 @@ func TestPeerListeners(t *testing.T) { ChainParams: &chaincfg.MainNetParams, Services: wire.SFNodeBloom, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } - inConn, outConn := pipe( - &conn{raddr: "10.0.0.1:8333"}, - &conn{raddr: "10.0.0.2:8333"}, - ) inPeer := peer.NewInboundPeer(peerCfg) - inPeer.AssociateConnection(inConn) peerCfg.Listeners = peer.MessageListeners{ OnVerAck: func(p *peer.Peer, msg *wire.MsgVerAck) { @@ -470,7 +470,12 @@ func TestPeerListeners(t *testing.T) { t.Errorf("NewOutboundPeer: unexpected err %v\n", err) return } - outPeer.AssociateConnection(outConn) + + err = setupPeerConnection(inPeer, outPeer) + if err != nil { + t.Errorf("setupPeerConnection: failed: %v\n", err) + return + } for i := 0; i < 2; i++ { select { @@ -594,6 +599,14 @@ func TestPeerListeners(t *testing.T) { "OnSendHeaders", wire.NewMsgSendHeaders(), }, + { + "OnSendAddrV2", + wire.NewMsgSendAddrV2(), + }, + { + "OnAddrV2", + wire.NewMsgAddrV2(), + }, } t.Logf("Running %d tests", len(tests)) for _, test := range tests { @@ -623,6 +636,7 @@ func TestOutboundPeer(t *testing.T) { ChainParams: &chaincfg.MainNetParams, Services: 0, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } r, w := io.Pipe() @@ -764,6 +778,7 @@ func TestUnsupportedVersionPeer(t *testing.T) { ChainParams: &chaincfg.MainNetParams, Services: 0, TrickleInterval: time.Second * 10, + AllowSelfConns: true, } localNA := wire.NewNetAddressIPPort( @@ -874,18 +889,19 @@ func TestDuplicateVersionMsg(t *testing.T) { UserAgentVersion: "1.0", ChainParams: &chaincfg.MainNetParams, Services: 0, + AllowSelfConns: true, } - inConn, outConn := pipe( - &conn{laddr: "10.0.0.1:9108", raddr: "10.0.0.2:9108"}, - &conn{laddr: "10.0.0.2:9108", raddr: "10.0.0.1:9108"}, - ) - outPeer, err := peer.NewOutboundPeer(peerCfg, inConn.laddr) + outPeer, err := peer.NewOutboundPeer(peerCfg, "10.0.0.2:8333") if err != nil { t.Fatalf("NewOutboundPeer: unexpected err: %v\n", err) } - outPeer.AssociateConnection(outConn) inPeer := peer.NewInboundPeer(peerCfg) - inPeer.AssociateConnection(inConn) + + err = setupPeerConnection(inPeer, outPeer) + if err != nil { + t.Fatalf("setupPeerConnection failed to connect: %v\n", err) + } + // Wait for the veracks from the initial protocol version negotiation. for i := 0; i < 2; i++ { select { @@ -917,7 +933,279 @@ func TestDuplicateVersionMsg(t *testing.T) { } } -func init() { - // Allow self connection when running the tests. - peer.TstAllowSelfConns() +// TestUpdateLastBlockHeight ensures the last block height is set properly +// during the initial version negotiation and is only allowed to advance to +// higher values via the associated update function. +func TestUpdateLastBlockHeight(t *testing.T) { + // Create a pair of peers that are connected to each other using a fake + // connection and the remote peer starting at height 100. + const remotePeerHeight = 100 + verack := make(chan struct{}) + peerCfg := peer.Config{ + Listeners: peer.MessageListeners{ + OnVerAck: func(p *peer.Peer, msg *wire.MsgVerAck) { + verack <- struct{}{} + }, + }, + UserAgentName: "peer", + UserAgentVersion: "1.0", + ChainParams: &chaincfg.MainNetParams, + Services: 0, + AllowSelfConns: true, + } + remotePeerCfg := peerCfg + remotePeerCfg.NewestBlock = func() (*chainhash.Hash, int32, error) { + return &chainhash.Hash{}, remotePeerHeight, nil + } + localPeer, err := peer.NewOutboundPeer(&peerCfg, "10.0.0.2:8333") + if err != nil { + t.Fatalf("NewOutboundPeer: unexpected err: %v\n", err) + } + inPeer := peer.NewInboundPeer(&remotePeerCfg) + + err = setupPeerConnection(inPeer, localPeer) + if err != nil { + t.Fatalf("setupPeerConnection failed to connect: %v\n", err) + } + + // Wait for the veracks from the initial protocol version negotiation. + for i := 0; i < 2; i++ { + select { + case <-verack: + case <-time.After(time.Second): + t.Fatal("verack timeout") + } + } + + // Ensure the latest block height starts at the value reported by the remote + // peer via its version message. + if height := localPeer.LastBlock(); height != remotePeerHeight { + t.Fatalf("wrong starting height - got %d, want %d", height, + remotePeerHeight) + } + + // Ensure the latest block height is not allowed to go backwards. + localPeer.UpdateLastBlockHeight(remotePeerHeight - 1) + if height := localPeer.LastBlock(); height != remotePeerHeight { + t.Fatalf("height allowed to go backwards - got %d, want %d", height, + remotePeerHeight) + } + + // Ensure the latest block height is allowed to advance. + localPeer.UpdateLastBlockHeight(remotePeerHeight + 1) + if height := localPeer.LastBlock(); height != remotePeerHeight+1 { + t.Fatalf("height not allowed to advance - got %d, want %d", height, + remotePeerHeight+1) + } +} + +// setupPeerConnection initiates a tcp connection between two peers. +func setupPeerConnection(in, out *peer.Peer) error { + // listenFunc is a function closure that listens for a tcp connection. + // The tcp connection will be the one the inbound peer uses. This will + // be run as a goroutine. + listenFunc := func(l *net.TCPListener, errChan chan error, + listenChan chan struct{}) { + + listenChan <- struct{}{} + + conn, err := l.Accept() + if err != nil { + errChan <- err + return + } + + in.AssociateConnection(conn) + errChan <- nil + } + + // dialFunc is a function closure that initiates the tcp connection. + // The tcp connection will be the one the outbound peer uses. + dialFunc := func(addr *net.TCPAddr) error { + conn, err := net.Dial("tcp", addr.String()) + if err != nil { + return err + } + + out.AssociateConnection(conn) + return nil + } + + listenAddr := "localhost:0" + + addr, err := net.ResolveTCPAddr("tcp", listenAddr) + if err != nil { + return err + } + + l, err := net.ListenTCP("tcp", addr) + if err != nil { + return err + } + + errChan := make(chan error, 1) + listenChan := make(chan struct{}, 1) + + go listenFunc(l, errChan, listenChan) + <-listenChan + + if err := dialFunc(l.Addr().(*net.TCPAddr)); err != nil { + return err + } + + select { + case err = <-errChan: + return err + case <-time.After(time.Second * 2): + return errors.New("failed to create connection") + } +} + +// TestSendAddrV2Handshake tests that the version-verack handshake with the +// addition of the sendaddrv2 message works as expected. +func TestSendAddrV2Handshake(t *testing.T) { + verack := make(chan struct{}, 2) + sendaddr := make(chan struct{}, 2) + peer1Cfg := &peer.Config{ + Listeners: peer.MessageListeners{ + OnVerAck: func(p *peer.Peer, msg *wire.MsgVerAck) { + verack <- struct{}{} + }, + OnSendAddrV2: func(p *peer.Peer, + msg *wire.MsgSendAddrV2) { + + sendaddr <- struct{}{} + }, + }, + AllowSelfConns: true, + ChainParams: &chaincfg.MainNetParams, + } + + peer2Cfg := &peer.Config{ + Listeners: peer1Cfg.Listeners, + AllowSelfConns: true, + ChainParams: &chaincfg.MainNetParams, + } + + verackErr := errors.New("verack timeout") + + tests := []struct { + name string + expectsV2 bool + setup func() (*peer.Peer, *peer.Peer, error) + }{ + { + "successful sendaddrv2 handshake", + true, + func() (*peer.Peer, *peer.Peer, error) { + inPeer := peer.NewInboundPeer(peer1Cfg) + outPeer, err := peer.NewOutboundPeer( + peer2Cfg, "10.0.0.2:8333", + ) + if err != nil { + return nil, nil, err + } + + err = setupPeerConnection(inPeer, outPeer) + if err != nil { + return nil, nil, err + } + + for i := 0; i < 4; i++ { + select { + case <-sendaddr: + case <-verack: + case <-time.After(time.Second * 2): + return nil, nil, verackErr + } + } + + return inPeer, outPeer, nil + }, + }, + { + "handshake with legacy inbound peer", + false, + func() (*peer.Peer, *peer.Peer, error) { + legacyVersion := wire.AddrV2Version - 1 + peer1Cfg.ProtocolVersion = legacyVersion + inPeer := peer.NewInboundPeer(peer1Cfg) + outPeer, err := peer.NewOutboundPeer( + peer2Cfg, "10.0.0.2:8333", + ) + if err != nil { + return nil, nil, err + } + + err = setupPeerConnection(inPeer, outPeer) + if err != nil { + return nil, nil, err + } + + for i := 0; i < 2; i++ { + select { + case <-verack: + case <-time.After(time.Second * 2): + return nil, nil, verackErr + } + } + + return inPeer, outPeer, nil + }, + }, + { + "handshake with legacy outbound peer", + false, + func() (*peer.Peer, *peer.Peer, error) { + inPeer := peer.NewInboundPeer(peer1Cfg) + legacyVersion := wire.AddrV2Version - 1 + peer2Cfg.ProtocolVersion = legacyVersion + outPeer, err := peer.NewOutboundPeer( + peer2Cfg, "10.0.0.2:8333", + ) + if err != nil { + return nil, nil, err + } + + err = setupPeerConnection(inPeer, outPeer) + if err != nil { + return nil, nil, err + } + + for i := 0; i < 2; i++ { + select { + case <-verack: + case <-time.After(time.Second * 2): + return nil, nil, verackErr + } + } + + return inPeer, outPeer, nil + }, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + inPeer, outPeer, err := test.setup() + if err != nil { + t.Fatalf("TestSendAddrV2Handshake setup #%d: "+ + "unexpected err: %v", i, err) + } + + if inPeer.WantsAddrV2() != test.expectsV2 { + t.Fatalf("TestSendAddrV2Handshake #%d expected "+ + "wantsAddrV2 to be %v instead was %v", i, + test.expectsV2, inPeer.WantsAddrV2()) + } else if outPeer.WantsAddrV2() != test.expectsV2 { + t.Fatalf("TestSendAddrV2Handshake #%d expected "+ + "wantsAddrV2 to be %v instead was %v", i, + test.expectsV2, outPeer.WantsAddrV2()) + } + + inPeer.Disconnect() + outPeer.Disconnect() + inPeer.WaitForDisconnect() + outPeer.WaitForDisconnect() + } } diff --git a/release/README.md b/release/README.md index 10d1c80cc0..7128ef1f16 100644 --- a/release/README.md +++ b/release/README.md @@ -3,29 +3,139 @@ This package contains the build script that the `btcd` project uses in order to build binaries for each new release. As of `go1.13`, with some new build flags, binaries are now reproducible, allowing developers to build the binary on -distinct machines, and end up with a byte-for-byte identical binary. However, -this wasn't _fully_ solved in `go1.13`, as the build system still includes the -directory the binary is built into the binary itself. As a result, our scripts -utilize a work around needed until `go1.13.2`. +distinct machines, and end up with a byte-for-byte identical binary. +Every release should note which Go version was used to build the release, so +that version should be used for verifying the release. ## Building a New Release -### macOS/Linux/Windows (WSL) +### Tagging and pushing a new tag (for maintainers) + +Before running release scripts, a few things need to happen in order to finally +create a release and make sure there are no mistakes in the release process. + +First, make sure that before the tagged commit there are modifications to the +[CHANGES](../CHANGES) file committed. +The CHANGES file should be a changelog that roughly mirrors the release notes. +Generally, the PRs that have been merged since the last release have been +listed in the CHANGES file and categorized. +For example, these changes have had the following format in the past: +``` +Changes in X.YY.Z (Month Day Year): + - Protocol and Network-related changes: + - PR Title One (#PRNUM) + - PR Title Two (#PRNUMTWO) + ... + - RPC changes: + - Crypto changes: + ... + + - Contributors (alphabetical order): + - Contributor A + - Contributor B + - Contributor C + ... +``` + +If the previous tag is, for example, `vA.B.C`, then you can get the list of +contributors (from `vA.B.C` until the current `HEAD`) using the following command: +```bash +git log vA.B.C..HEAD --pretty="%an" | sort | uniq +``` +After committing changes to the CHANGES file, the tagged release commit +should be created. + +The tagged commit should be a commit that bumps version numbers in `version.go` +and `cmd/btcctl/version.go`. +For example (taken from [f3ec130](https://github.com/btcsuite/btcd/commit/f3ec13030e4e828869954472cbc51ac36bee5c1d)): +```diff +diff --git a/cmd/btcctl/version.go b/cmd/btcctl/version.go +index 2195175c71..f65cacef7e 100644 +--- a/cmd/btcctl/version.go ++++ b/cmd/btcctl/version.go +@@ -18,7 +18,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr + const ( + appMajor uint = 0 + appMinor uint = 20 +- appPatch uint = 0 ++ appPatch uint = 1 + + // appPreRelease MUST only contain characters from semanticAlphabet + // per the semantic versioning spec. +diff --git a/version.go b/version.go +index 92fd60fdd4..fba55b5a37 100644 +--- a/version.go ++++ b/version.go +@@ -18,7 +18,7 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr + const ( + appMajor uint = 0 + appMinor uint = 20 +- appPatch uint = 0 ++ appPatch uint = 1 + + // appPreRelease MUST only contain characters from semanticAlphabet + // per the semantic versioning spec. +``` + +Next, this commit should be signed by the maintainer using `git commit -S`. +The commit should be tagged and signed with `git tag -s`, and should be +pushed using `git push origin TAG`. + +### Building a release on macOS/Linux/Windows (WSL) No prior set up is needed on Linux or macOS is required in order to build the release binaries. However, on Windows, the only way to build the release binaries at the moment is by using the Windows Subsystem Linux. One can build the release binaries following these steps: -1. `git clone https://github.com/btcsuite/btcd.git +1. `git clone https://github.com/btcsuite/btcd.git` 2. `cd btcd` -3. `./build/release/release.sh # is the name of the next - release/tag` +3. `./release/release.sh # is the name of the next release/tag` This will then create a directory of the form `btcd-` containing archives of the release binaries for each supported operating system and architecture, and a manifest file containing the hash of each archive. +### Pushing a release (for maintainers) + +Now that the directory `btcd-` is created, the manifest file needs to be +signed by a maintainer and the release files need to be published to GitHub. + +Sign the `manifest-.txt` file like so: +```sh +gpg --sign --detach-sig manifest-.txt +``` +This will create a file named `manifest-.txt.sig`, which will must +be included in the release files later. + +#### Note before publishing +Before publishing, go through the reproducible build process that is outlined +in this document with the files created from `release/release.sh`. This includes +verifying commit and tag signatures using `git verify-commit` and git `verify-tag` +respectively. + +Now that we've double-checked everything and have all of the necessary files, +it's time to publish release files on GitHub. +Follow [this documentation](https://docs.github.com/en/github/administering-a-repository/managing-releases-in-a-repository) +to create a release using the GitHub UI, and make sure to write release notes +which roughly follow the format of [previous release notes](https://github.com/btcsuite/btcd/releases/tag/v0.20.1-beta). +This is different from the [CHANGES](../CHANGES) file, which should be before the +tagged commit in the git history. +Much of the information in the release notes will be the same as the CHANGES +file. +It's important to include the Go version used to produce the release files in +the release notes, so users know the correct version of Go to use to reproduce +and verify the build. +When following the GitHub documentation, include every file in the `btcd-` +directory. + +At this point, a signed commit and tag on that commit should be pushed to the main +branch. The directory created from running `release/release.sh` should be included +as release files in the GitHub release UI, and the `manifest-.txt` file +signature, called `manifest-.txt.sig`, should also be included. +A release notes document should be created and written in the GitHub release UI. +Once all of this is done, feel free to click `Publish Release`! + ## Verifying a Release With `go1.13`, it's now possible for third parties to verify release binaries. @@ -64,8 +174,8 @@ and `go` (matching the same version used in the release): release with `git checkout `. 7. Proceed to verify the tag with `git verify-tag ` and compile the binaries from source for the intended operating system and architecture with - `BTCDBUILDSYS=OS-ARCH ./build/release/release.sh `. + `BTCDBUILDSYS=OS-ARCH ./release/release.sh `. 8. Extract the archive found in the `btcd-` directory created by the release script and recompute the `SHA256` hash of the release binaries (btcd and btcctl) with `shasum -a 256 `. These should match __exactly__ - as the ones noted above. + as the ones noted above. \ No newline at end of file diff --git a/release/notes.sample b/release/notes.sample deleted file mode 100644 index 86a79a61f5..0000000000 --- a/release/notes.sample +++ /dev/null @@ -1,6 +0,0 @@ -- Each release note is preceded by a dash -- Each release note must not exceed 74 characters per line -- Release notes that require a longer explanation than will fit on a - single line should be wrapped with the text indented as in this line -- No periods at the end of each release note -- Other minor cleanup and bug fixes diff --git a/release/prep_release.sh b/release/prep_release.sh deleted file mode 100644 index c64824a644..0000000000 --- a/release/prep_release.sh +++ /dev/null @@ -1,205 +0,0 @@ -#!/bin/sh -# -# Copyright (c) 2013 Conformal Systems LLC -# -# Permission to use, copy, modify, and distribute this software for any -# purpose with or without fee is hereby granted, provided that the above -# copyright notice and this permission notice appear in all copies. -# -# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -# WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -# MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -# ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -# WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -# ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -# OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -# -# -# Prepares for a release: -# - Bumps version according to specified level (major, minor, or patch) -# - Updates all version files and package control files with new version -# - Performs some basic validation on specified release notes -# - Updates project changes file with release notes -# - -PROJECT=btcd -PROJECT_UC=$(echo $PROJECT | tr '[:lower:]' '[:upper:]') -SCRIPT=$(basename $0) -VERFILE=../version.go -VERFILES="$VERFILE ../cmd/btcctl/version.go" -PROJ_CHANGES=../CHANGES - -# verify params -if [ $# -lt 2 ]; then - echo "usage: $SCRIPT {major | minor | patch} release-notes-file" - exit 1 -fi - -CUR_DIR=$(pwd) -cd "$(dirname $0)" - -# verify version files exist -for verfile in $VERFILES; do - if [ ! -f "$verfile" ]; then - echo "$SCRIPT: error: $verfile does not exist" 1>&2 - exit 1 - fi -done - -# verify changes file exists -if [ ! -f "$PROJ_CHANGES" ]; then - echo "$SCRIPT: error: $PROJ_CHANGES does not exist" 1>&2 - exit 1 -fi - -RTYPE="$1" -RELEASE_NOTES="$2" -if [ $(echo $RELEASE_NOTES | cut -c1) != "/" ]; then - RELEASE_NOTES="$CUR_DIR/$RELEASE_NOTES" -fi - -# verify valid release type -if [ "$RTYPE" != "major" -a "$RTYPE" != "minor" -a "$RTYPE" != "patch" ]; then - echo "$SCRIPT: error: release type must be major, minor, or patch" - exit 1 -fi - -# verify release notes -if [ ! -e "$RELEASE_NOTES" ]; then - echo "$SCRIPT: error: specified release notes file does not exist" - exit 1 -fi - -if [ ! -s "$RELEASE_NOTES" ]; then - echo "$SCRIPT: error: specified release notes file is empty" - exit 1 -fi - -# verify release notes format -while IFS='' read line; do - if [ -z "$line" ]; then - echo "$SCRIPT: error: release notes must not have blank lines" - exit 1 - fi - if [ ${#line} -gt 74 ]; then - echo -n "$SCRIPT: error: release notes must not contain lines " - echo "with more than 74 characters" - exit 1 - fi - if expr "$line" : ".*\.$" >/dev/null 2>&1 ; then - echo -n "$SCRIPT: error: release notes must not contain lines " - echo "that end in a period" - exit 1 - fi - if ! expr "$line" : "\-" >/dev/null 2>&1; then - if ! expr "$line" : " " >/dev/null 2>&1; then - echo -n "$SCRIPT: error: release notes must not contain lines " - echo "that do not begin with a dash and are not indented" - exit 1 - fi - fi -done <"$RELEASE_NOTES" - -# verify git is available -if ! type git >/dev/null 2>&1; then - echo -n "$SCRIPT: error: Unable to find 'git' in the system path." - exit 1 -fi - -# verify the git repository is on the master branch -BRANCH=$(git branch | grep '\*' | cut -c3-) -if [ "$BRANCH" != "master" ]; then - echo "$SCRIPT: error: git repository must be on the master branch." - exit 1 -fi - -# verify there are no uncommitted modifications prior to release modifications -NUM_MODIFIED=$(git diff 2>/dev/null | wc -l | sed 's/^[ \t]*//') -NUM_STAGED=$(git diff --cached 2>/dev/null | wc -l | sed 's/^[ \t]*//') -if [ "$NUM_MODIFIED" != "0" -o "$NUM_STAGED" != "0" ]; then - echo -n "$SCRIPT: error: the working directory contains uncommitted " - echo "modifications" - exit 1 -fi - -# get version -PAT_PREFIX="(^[[:space:]]+app" -PAT_SUFFIX='[[:space:]]+uint[[:space:]]+=[[:space:]]+)[0-9]+$' -MAJOR=$(egrep "${PAT_PREFIX}Major${PAT_SUFFIX}" $VERFILE | awk '{print $4}') -MINOR=$(egrep "${PAT_PREFIX}Minor${PAT_SUFFIX}" $VERFILE | awk '{print $4}') -PATCH=$(egrep "${PAT_PREFIX}Patch${PAT_SUFFIX}" $VERFILE | awk '{print $4}') -if [ -z "$MAJOR" -o -z "$MINOR" -o -z "$PATCH" ]; then - echo "$SCRIPT: error: unable to get version from $VERFILE" 1>&2 - exit 1 -fi - -# bump version according to level -if [ "$RTYPE" = "major" ]; then - MAJOR=$(expr $MAJOR + 1) - MINOR=0 - PATCH=0 -elif [ "$RTYPE" = "minor" ]; then - MINOR=$(expr $MINOR + 1) - PATCH=0 -elif [ "$RTYPE" = "patch" ]; then - PATCH=$(expr $PATCH + 1) -fi -PROJ_VER="$MAJOR.$MINOR.$PATCH" - -# update project changes with release notes -DATE=$(date "+%a %b %d %Y") -awk -v D="$DATE" -v VER="$PROJ_VER" ' -/=======/ && first_line==0 { - first_line=1 - print $0 - next -} -/=======/ && first_line==1 { - print $0 - print "" - print "Changes in "VER" ("D")" - exit -} -{ print $0 } -' <"$PROJ_CHANGES" >"${PROJ_CHANGES}.tmp" -cat "$RELEASE_NOTES" | sed 's/^/ /' >>"${PROJ_CHANGES}.tmp" -awk ' -/=======/ && first_line==0 { - first_line=1 - next -} -/=======/ && first_line==1 { - second_line=1 - next -} -second_line==1 { print $0 } -' <"$PROJ_CHANGES" >>"${PROJ_CHANGES}.tmp" - -# update version filef with new version -for verfile in $VERFILES; do - sed -E " - s/${PAT_PREFIX}Major${PAT_SUFFIX}/\1${MAJOR}/; - s/${PAT_PREFIX}Minor${PAT_SUFFIX}/\1${MINOR}/; - s/${PAT_PREFIX}Patch${PAT_SUFFIX}/\1${PATCH}/; - " <"$verfile" >"${verfile}.tmp" -done - - -# Apply changes -mv "${PROJ_CHANGES}.tmp" "$PROJ_CHANGES" -for verfile in $VERFILES; do - mv "${verfile}.tmp" "$verfile" -done - -echo "All files have been prepared for release." -echo "Use the following commands to review the changes for accuracy:" -echo " git status" -echo " git diff" -echo "" -echo "If everything is accurate, use the following commands to commit, tag," -echo "and push the changes" -echo " git commit -am \"Prepare for release ${PROJ_VER}.\"" -echo -n " git tag -a \"${PROJECT_UC}_${MAJOR}_${MINOR}_${PATCH}\" -m " -echo "\"Release ${PROJ_VER}\"" -echo " git push" -echo " git push --tags" diff --git a/release/release.sh b/release/release.sh index 7b0885dac6..de49f64122 100755 --- a/release/release.sh +++ b/release/release.sh @@ -1,11 +1,12 @@ #!/bin/bash +# Copyright (c) 2016 Company 0, LLC. +# Copyright (c) 2016-2020 The btcsuite developers +# Use of this source code is governed by an ISC +# license that can be found in the LICENSE file. + # Simple bash script to build basic btcd tools for all the platforms we support # with the golang cross-compiler. -# -# Copyright (c) 2016 Company 0, LLC. -# Use of this source code is governed by the ISC -# license. set -e @@ -38,7 +39,6 @@ cd $MAINDIR # If BTCDBUILDSYS is set the default list is ignored. Useful to release # for a subset of systems/architectures. SYS=${BTCDBUILDSYS:-" - darwin-386 darwin-amd64 dragonfly-amd64 freebsd-386 diff --git a/rpcadapters.go b/rpcadapters.go index 7d2c3a14d0..487574a81c 100644 --- a/rpcadapters.go +++ b/rpcadapters.go @@ -13,7 +13,7 @@ import ( "github.com/btcsuite/btcd/netsync" "github.com/btcsuite/btcd/peer" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // rpcPeer provides a peer for use with the RPC server and implements the @@ -223,6 +223,15 @@ func (cm *rpcConnManager) RelayTransactions(txns []*mempool.TxDesc) { cm.server.relayTransactions(txns) } +// NodeAddresses returns an array consisting node addresses which can +// potentially be used to find new nodes in the network. +// +// This function is safe for concurrent access and is part of the +// rpcserverConnManager interface implementation. +func (cm *rpcConnManager) NodeAddresses() []*wire.NetAddressV2 { + return cm.server.addrManager.AddressCache() +} + // rpcSyncMgr provides a block manager for use with the RPC server and // implements the rpcserverSyncManager interface. type rpcSyncMgr struct { diff --git a/rpcclient/README.md b/rpcclient/README.md index 06be0d69e1..08b16f7560 100644 --- a/rpcclient/README.md +++ b/rpcclient/README.md @@ -1,9 +1,9 @@ rpcclient ========= -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/rpcclient) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/rpcclient) rpcclient implements a Websocket-enabled Bitcoin JSON-RPC client package written in [Go](http://golang.org/). It provides a robust and easy to use client for @@ -18,7 +18,7 @@ implement and the API is not stable yet. ## Documentation -* [API Reference](http://godoc.org/github.com/btcsuite/btcd/rpcclient) +* [API Reference](https://pkg.go.dev/github.com/btcsuite/btcd/rpcclient) * [btcd Websockets Example](https://github.com/btcsuite/btcd/tree/master/rpcclient/examples/btcdwebsockets) Connects to a btcd RPC server using TLS-secured websockets, registers for block connected and block disconnected notifications, and gets the current diff --git a/rpcclient/chain.go b/rpcclient/chain.go index 996d80458c..a97543fd3c 100644 --- a/rpcclient/chain.go +++ b/rpcclient/chain.go @@ -17,12 +17,12 @@ import ( // FutureGetBestBlockHashResult is a future promise to deliver the result of a // GetBestBlockAsync RPC invocation (or an applicable error). -type FutureGetBestBlockHashResult chan *response +type FutureGetBestBlockHashResult chan *Response -// Receive waits for the response promised by the future and returns the hash of +// Receive waits for the Response promised by the future and returns the hash of // the best block in the longest block chain. func (r FutureGetBestBlockHashResult) Receive() (*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -43,7 +43,7 @@ func (r FutureGetBestBlockHashResult) Receive() (*chainhash.Hash, error) { // See GetBestBlockHash for the blocking version and more details. func (c *Client) GetBestBlockHashAsync() FutureGetBestBlockHashResult { cmd := btcjson.NewGetBestBlockHashCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBestBlockHash returns the hash of the best block in the longest block @@ -52,14 +52,61 @@ func (c *Client) GetBestBlockHash() (*chainhash.Hash, error) { return c.GetBestBlockHashAsync().Receive() } +// legacyGetBlockRequest constructs and sends a legacy getblock request which +// contains two separate bools to denote verbosity, in contract to a single int +// parameter. +func (c *Client) legacyGetBlockRequest(hash string, verbose, + verboseTx bool) ([]byte, error) { + + hashJSON, err := json.Marshal(hash) + if err != nil { + return nil, err + } + verboseJSON, err := json.Marshal(btcjson.Bool(verbose)) + if err != nil { + return nil, err + } + verboseTxJSON, err := json.Marshal(btcjson.Bool(verboseTx)) + if err != nil { + return nil, err + } + return c.RawRequest("getblock", []json.RawMessage{ + hashJSON, verboseJSON, verboseTxJSON, + }) +} + +// waitForGetBlockRes waits for the Response of a getblock request. If the +// Response indicates an invalid parameter was provided, a legacy style of the +// request is resent and its Response is returned instead. +func (c *Client) waitForGetBlockRes(respChan chan *Response, hash string, + verbose, verboseTx bool) ([]byte, error) { + + res, err := ReceiveFuture(respChan) + + // If we receive an invalid parameter error, then we may be + // communicating with a btcd node which only understands the legacy + // request, so we'll try that. + if err, ok := err.(*btcjson.RPCError); ok && + err.Code == btcjson.ErrRPCInvalidParams.Code { + return c.legacyGetBlockRequest(hash, verbose, verboseTx) + } + + // Otherwise, we can return the Response as is. + return res, err +} + // FutureGetBlockResult is a future promise to deliver the result of a // GetBlockAsync RPC invocation (or an applicable error). -type FutureGetBlockResult chan *response +type FutureGetBlockResult struct { + client *Client + hash string + Response chan *Response +} -// Receive waits for the response promised by the future and returns the raw +// Receive waits for the Response promised by the future and returns the raw // block requested from the server given its hash. func (r FutureGetBlockResult) Receive() (*wire.MsgBlock, error) { - res, err := receiveFuture(r) + res, err := r.client.waitForGetBlockRes(r.Response, r.hash, false, false) if err != nil { return nil, err } @@ -97,8 +144,12 @@ func (c *Client) GetBlockAsync(blockHash *chainhash.Hash) FutureGetBlockResult { hash = blockHash.String() } - cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(false), nil) - return c.sendCmd(cmd) + cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(0)) + return FutureGetBlockResult{ + client: c, + hash: hash, + Response: c.SendCmd(cmd), + } } // GetBlock returns a raw block from the server given its hash. @@ -111,12 +162,16 @@ func (c *Client) GetBlock(blockHash *chainhash.Hash) (*wire.MsgBlock, error) { // FutureGetBlockVerboseResult is a future promise to deliver the result of a // GetBlockVerboseAsync RPC invocation (or an applicable error). -type FutureGetBlockVerboseResult chan *response +type FutureGetBlockVerboseResult struct { + client *Client + hash string + Response chan *Response +} -// Receive waits for the response promised by the future and returns the data +// Receive waits for the Response promised by the future and returns the data // structure from the server with information about the requested block. func (r FutureGetBlockVerboseResult) Receive() (*btcjson.GetBlockVerboseResult, error) { - res, err := receiveFuture(r) + res, err := r.client.waitForGetBlockRes(r.Response, r.hash, true, false) if err != nil { return nil, err } @@ -140,9 +195,14 @@ func (c *Client) GetBlockVerboseAsync(blockHash *chainhash.Hash) FutureGetBlockV if blockHash != nil { hash = blockHash.String() } - - cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), nil) - return c.sendCmd(cmd) + // From the bitcoin-cli getblock documentation: + // "If verbosity is 1, returns an Object with information about block ." + cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(1)) + return FutureGetBlockVerboseResult{ + client: c, + hash: hash, + Response: c.SendCmd(cmd), + } } // GetBlockVerbose returns a data structure from the server with information @@ -154,19 +214,52 @@ func (c *Client) GetBlockVerbose(blockHash *chainhash.Hash) (*btcjson.GetBlockVe return c.GetBlockVerboseAsync(blockHash).Receive() } +// FutureGetBlockVerboseTxResult is a future promise to deliver the result of a +// GetBlockVerboseTxResult RPC invocation (or an applicable error). +type FutureGetBlockVerboseTxResult struct { + client *Client + hash string + Response chan *Response +} + +// Receive waits for the Response promised by the future and returns a verbose +// version of the block including detailed information about its transactions. +func (r FutureGetBlockVerboseTxResult) Receive() (*btcjson.GetBlockVerboseTxResult, error) { + res, err := r.client.waitForGetBlockRes(r.Response, r.hash, true, true) + if err != nil { + return nil, err + } + + var blockResult btcjson.GetBlockVerboseTxResult + err = json.Unmarshal(res, &blockResult) + if err != nil { + return nil, err + } + + return &blockResult, nil +} + // GetBlockVerboseTxAsync returns an instance of a type that can be used to get // the result of the RPC at some future time by invoking the Receive function on // the returned instance. // // See GetBlockVerboseTx or the blocking version and more details. -func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBlockVerboseResult { +func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBlockVerboseTxResult { hash := "" if blockHash != nil { hash = blockHash.String() } - cmd := btcjson.NewGetBlockCmd(hash, btcjson.Bool(true), btcjson.Bool(true)) - return c.sendCmd(cmd) + // From the bitcoin-cli getblock documentation: + // + // If verbosity is 2, returns an Object with information about block + // and information about each transaction. + cmd := btcjson.NewGetBlockCmd(hash, btcjson.Int(2)) + return FutureGetBlockVerboseTxResult{ + client: c, + hash: hash, + Response: c.SendCmd(cmd), + } } // GetBlockVerboseTx returns a data structure from the server with information @@ -174,18 +267,18 @@ func (c *Client) GetBlockVerboseTxAsync(blockHash *chainhash.Hash) FutureGetBloc // // See GetBlockVerbose if only transaction hashes are preferred. // See GetBlock to retrieve a raw block instead. -func (c *Client) GetBlockVerboseTx(blockHash *chainhash.Hash) (*btcjson.GetBlockVerboseResult, error) { +func (c *Client) GetBlockVerboseTx(blockHash *chainhash.Hash) (*btcjson.GetBlockVerboseTxResult, error) { return c.GetBlockVerboseTxAsync(blockHash).Receive() } // FutureGetBlockCountResult is a future promise to deliver the result of a // GetBlockCountAsync RPC invocation (or an applicable error). -type FutureGetBlockCountResult chan *response +type FutureGetBlockCountResult chan *Response -// Receive waits for the response promised by the future and returns the number +// Receive waits for the Response promised by the future and returns the number // of blocks in the longest block chain. func (r FutureGetBlockCountResult) Receive() (int64, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -206,7 +299,7 @@ func (r FutureGetBlockCountResult) Receive() (int64, error) { // See GetBlockCount for the blocking version and more details. func (c *Client) GetBlockCountAsync() FutureGetBlockCountResult { cmd := btcjson.NewGetBlockCountCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBlockCount returns the number of blocks in the longest block chain. @@ -214,14 +307,87 @@ func (c *Client) GetBlockCount() (int64, error) { return c.GetBlockCountAsync().Receive() } +// FutureGetChainTxStatsResult is a future promise to deliver the result of a +// GetChainTxStatsAsync RPC invocation (or an applicable error). +type FutureGetChainTxStatsResult chan *Response + +// Receive waits for the Response promised by the future and returns transaction statistics +func (r FutureGetChainTxStatsResult) Receive() (*btcjson.GetChainTxStatsResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var chainTxStats btcjson.GetChainTxStatsResult + err = json.Unmarshal(res, &chainTxStats) + if err != nil { + return nil, err + } + + return &chainTxStats, nil +} + +// GetChainTxStatsAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetChainTxStats for the blocking version and more details. +func (c *Client) GetChainTxStatsAsync() FutureGetChainTxStatsResult { + cmd := btcjson.NewGetChainTxStatsCmd(nil, nil) + return c.SendCmd(cmd) +} + +// GetChainTxStatsNBlocksAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetChainTxStatsNBlocks for the blocking version and more details. +func (c *Client) GetChainTxStatsNBlocksAsync(nBlocks int32) FutureGetChainTxStatsResult { + cmd := btcjson.NewGetChainTxStatsCmd(&nBlocks, nil) + return c.SendCmd(cmd) +} + +// GetChainTxStatsNBlocksBlockHashAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetChainTxStatsNBlocksBlockHash for the blocking version and more details. +func (c *Client) GetChainTxStatsNBlocksBlockHashAsync(nBlocks int32, blockHash chainhash.Hash) FutureGetChainTxStatsResult { + hash := blockHash.String() + cmd := btcjson.NewGetChainTxStatsCmd(&nBlocks, &hash) + return c.SendCmd(cmd) +} + +// GetChainTxStats returns statistics about the total number and rate of transactions in the chain. +// +// Size of the window is one month and it ends at chain tip. +func (c *Client) GetChainTxStats() (*btcjson.GetChainTxStatsResult, error) { + return c.GetChainTxStatsAsync().Receive() +} + +// GetChainTxStatsNBlocks returns statistics about the total number and rate of transactions in the chain. +// +// The argument specifies size of the window in number of blocks. The window ends at chain tip. +func (c *Client) GetChainTxStatsNBlocks(nBlocks int32) (*btcjson.GetChainTxStatsResult, error) { + return c.GetChainTxStatsNBlocksAsync(nBlocks).Receive() +} + +// GetChainTxStatsNBlocksBlockHash returns statistics about the total number and rate of transactions in the chain. +// +// First argument specifies size of the window in number of blocks. +// Second argument is the hash of the block that ends the window. +func (c *Client) GetChainTxStatsNBlocksBlockHash(nBlocks int32, blockHash chainhash.Hash) (*btcjson.GetChainTxStatsResult, error) { + return c.GetChainTxStatsNBlocksBlockHashAsync(nBlocks, blockHash).Receive() +} + // FutureGetDifficultyResult is a future promise to deliver the result of a // GetDifficultyAsync RPC invocation (or an applicable error). -type FutureGetDifficultyResult chan *response +type FutureGetDifficultyResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // proof-of-work difficulty as a multiple of the minimum difficulty. func (r FutureGetDifficultyResult) Receive() (float64, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -242,7 +408,7 @@ func (r FutureGetDifficultyResult) Receive() (float64, error) { // See GetDifficulty for the blocking version and more details. func (c *Client) GetDifficultyAsync() FutureGetDifficultyResult { cmd := btcjson.NewGetDifficultyCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetDifficulty returns the proof-of-work difficulty as a multiple of the @@ -255,7 +421,7 @@ func (c *Client) GetDifficulty() (float64, error) { // GetBlockChainInfoAsync RPC invocation (or an applicable error). type FutureGetBlockChainInfoResult struct { client *Client - Response chan *response + Response chan *Response } // unmarshalPartialGetBlockChainInfoResult unmarshals the response into an @@ -295,10 +461,10 @@ func unmarshalGetBlockChainInfoResultSoftForks(chainInfo *btcjson.GetBlockChainI return nil } -// Receive waits for the response promised by the future and returns chain info +// Receive waits for the Response promised by the future and returns chain info // result provided by the server. func (r FutureGetBlockChainInfoResult) Receive() (*btcjson.GetBlockChainInfoResult, error) { - res, err := receiveFuture(r.Response) + res, err := ReceiveFuture(r.Response) if err != nil { return nil, err } @@ -331,7 +497,7 @@ func (c *Client) GetBlockChainInfoAsync() FutureGetBlockChainInfoResult { cmd := btcjson.NewGetBlockChainInfoCmd() return FutureGetBlockChainInfoResult{ client: c, - Response: c.sendCmd(cmd), + Response: c.SendCmd(cmd), } } @@ -342,14 +508,52 @@ func (c *Client) GetBlockChainInfo() (*btcjson.GetBlockChainInfoResult, error) { return c.GetBlockChainInfoAsync().Receive() } +// FutureGetBlockFilterResult is a future promise to deliver the result of a +// GetBlockFilterAsync RPC invocation (or an applicable error). +type FutureGetBlockFilterResult chan *Response + +// Receive waits for the Response promised by the future and returns block filter +// result provided by the server. +func (r FutureGetBlockFilterResult) Receive() (*btcjson.GetBlockFilterResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var blockFilter btcjson.GetBlockFilterResult + err = json.Unmarshal(res, &blockFilter) + if err != nil { + return nil, err + } + + return &blockFilter, nil +} + +// GetBlockFilterAsync returns an instance of a type that can be used to get the +// result of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See GetBlockFilter for the blocking version and more details. +func (c *Client) GetBlockFilterAsync(blockHash chainhash.Hash, filterType *btcjson.FilterTypeName) FutureGetBlockFilterResult { + hash := blockHash.String() + + cmd := btcjson.NewGetBlockFilterCmd(hash, filterType) + return c.SendCmd(cmd) +} + +// GetBlockFilter retrieves a BIP0157 content filter for a particular block. +func (c *Client) GetBlockFilter(blockHash chainhash.Hash, filterType *btcjson.FilterTypeName) (*btcjson.GetBlockFilterResult, error) { + return c.GetBlockFilterAsync(blockHash, filterType).Receive() +} + // FutureGetBlockHashResult is a future promise to deliver the result of a // GetBlockHashAsync RPC invocation (or an applicable error). -type FutureGetBlockHashResult chan *response +type FutureGetBlockHashResult chan *Response -// Receive waits for the response promised by the future and returns the hash of +// Receive waits for the Response promised by the future and returns the hash of // the block in the best block chain at the given height. func (r FutureGetBlockHashResult) Receive() (*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -370,7 +574,7 @@ func (r FutureGetBlockHashResult) Receive() (*chainhash.Hash, error) { // See GetBlockHash for the blocking version and more details. func (c *Client) GetBlockHashAsync(blockHeight int64) FutureGetBlockHashResult { cmd := btcjson.NewGetBlockHashCmd(blockHeight) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBlockHash returns the hash of the block in the best block chain at the @@ -381,12 +585,12 @@ func (c *Client) GetBlockHash(blockHeight int64) (*chainhash.Hash, error) { // FutureGetBlockHeaderResult is a future promise to deliver the result of a // GetBlockHeaderAsync RPC invocation (or an applicable error). -type FutureGetBlockHeaderResult chan *response +type FutureGetBlockHeaderResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // blockheader requested from the server given its hash. func (r FutureGetBlockHeaderResult) Receive() (*wire.BlockHeader, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -425,7 +629,7 @@ func (c *Client) GetBlockHeaderAsync(blockHash *chainhash.Hash) FutureGetBlockHe } cmd := btcjson.NewGetBlockHeaderCmd(hash, btcjson.Bool(false)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBlockHeader returns the blockheader from the server given its hash. @@ -438,12 +642,12 @@ func (c *Client) GetBlockHeader(blockHash *chainhash.Hash) (*wire.BlockHeader, e // FutureGetBlockHeaderVerboseResult is a future promise to deliver the result of a // GetBlockAsync RPC invocation (or an applicable error). -type FutureGetBlockHeaderVerboseResult chan *response +type FutureGetBlockHeaderVerboseResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // data structure of the blockheader requested from the server given its hash. func (r FutureGetBlockHeaderVerboseResult) Receive() (*btcjson.GetBlockHeaderVerboseResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -470,7 +674,7 @@ func (c *Client) GetBlockHeaderVerboseAsync(blockHash *chainhash.Hash) FutureGet } cmd := btcjson.NewGetBlockHeaderCmd(hash, btcjson.Bool(true)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBlockHeaderVerbose returns a data structure with information about the @@ -483,13 +687,13 @@ func (c *Client) GetBlockHeaderVerbose(blockHash *chainhash.Hash) (*btcjson.GetB // FutureGetMempoolEntryResult is a future promise to deliver the result of a // GetMempoolEntryAsync RPC invocation (or an applicable error). -type FutureGetMempoolEntryResult chan *response +type FutureGetMempoolEntryResult chan *Response -// Receive waits for the response promised by the future and returns a data +// Receive waits for the Response promised by the future and returns a data // structure with information about the transaction in the memory pool given // its hash. func (r FutureGetMempoolEntryResult) Receive() (*btcjson.GetMempoolEntryResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -511,7 +715,7 @@ func (r FutureGetMempoolEntryResult) Receive() (*btcjson.GetMempoolEntryResult, // See GetMempoolEntry for the blocking version and more details. func (c *Client) GetMempoolEntryAsync(txHash string) FutureGetMempoolEntryResult { cmd := btcjson.NewGetMempoolEntryCmd(txHash) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetMempoolEntry returns a data structure with information about the @@ -522,12 +726,12 @@ func (c *Client) GetMempoolEntry(txHash string) (*btcjson.GetMempoolEntryResult, // FutureGetRawMempoolResult is a future promise to deliver the result of a // GetRawMempoolAsync RPC invocation (or an applicable error). -type FutureGetRawMempoolResult chan *response +type FutureGetRawMempoolResult chan *Response -// Receive waits for the response promised by the future and returns the hashes +// Receive waits for the Response promised by the future and returns the hashes // of all transactions in the memory pool. func (r FutureGetRawMempoolResult) Receive() ([]*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -559,7 +763,7 @@ func (r FutureGetRawMempoolResult) Receive() ([]*chainhash.Hash, error) { // See GetRawMempool for the blocking version and more details. func (c *Client) GetRawMempoolAsync() FutureGetRawMempoolResult { cmd := btcjson.NewGetRawMempoolCmd(btcjson.Bool(false)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetRawMempool returns the hashes of all transactions in the memory pool. @@ -572,13 +776,13 @@ func (c *Client) GetRawMempool() ([]*chainhash.Hash, error) { // FutureGetRawMempoolVerboseResult is a future promise to deliver the result of // a GetRawMempoolVerboseAsync RPC invocation (or an applicable error). -type FutureGetRawMempoolVerboseResult chan *response +type FutureGetRawMempoolVerboseResult chan *Response -// Receive waits for the response promised by the future and returns a map of +// Receive waits for the Response promised by the future and returns a map of // transaction hashes to an associated data structure with information about the // transaction for all transactions in the memory pool. func (r FutureGetRawMempoolVerboseResult) Receive() (map[string]btcjson.GetRawMempoolVerboseResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -600,7 +804,7 @@ func (r FutureGetRawMempoolVerboseResult) Receive() (map[string]btcjson.GetRawMe // See GetRawMempoolVerbose for the blocking version and more details. func (c *Client) GetRawMempoolVerboseAsync() FutureGetRawMempoolVerboseResult { cmd := btcjson.NewGetRawMempoolCmd(btcjson.Bool(true)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetRawMempoolVerbose returns a map of transaction hashes to an associated @@ -614,12 +818,12 @@ func (c *Client) GetRawMempoolVerbose() (map[string]btcjson.GetRawMempoolVerbose // FutureEstimateFeeResult is a future promise to deliver the result of a // EstimateFeeAsync RPC invocation (or an applicable error). -type FutureEstimateFeeResult chan *response +type FutureEstimateFeeResult chan *Response -// Receive waits for the response promised by the future and returns the info +// Receive waits for the Response promised by the future and returns the info // provided by the server. func (r FutureEstimateFeeResult) Receive() (float64, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return -1, err } @@ -641,7 +845,7 @@ func (r FutureEstimateFeeResult) Receive() (float64, error) { // See EstimateFee for the blocking version and more details. func (c *Client) EstimateFeeAsync(numBlocks int64) FutureEstimateFeeResult { cmd := btcjson.NewEstimateFeeCmd(numBlocks) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // EstimateFee provides an estimated fee in bitcoins per kilobyte. @@ -649,16 +853,51 @@ func (c *Client) EstimateFee(numBlocks int64) (float64, error) { return c.EstimateFeeAsync(numBlocks).Receive() } +// FutureEstimateFeeResult is a future promise to deliver the result of a +// EstimateSmartFeeAsync RPC invocation (or an applicable error). +type FutureEstimateSmartFeeResult chan *Response + +// Receive waits for the Response promised by the future and returns the +// estimated fee. +func (r FutureEstimateSmartFeeResult) Receive() (*btcjson.EstimateSmartFeeResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var verified btcjson.EstimateSmartFeeResult + err = json.Unmarshal(res, &verified) + if err != nil { + return nil, err + } + return &verified, nil +} + +// EstimateSmartFeeAsync returns an instance of a type that can be used to get the +// result of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See EstimateSmartFee for the blocking version and more details. +func (c *Client) EstimateSmartFeeAsync(confTarget int64, mode *btcjson.EstimateSmartFeeMode) FutureEstimateSmartFeeResult { + cmd := btcjson.NewEstimateSmartFeeCmd(confTarget, mode) + return c.SendCmd(cmd) +} + +// EstimateSmartFee requests the server to estimate a fee level based on the given parameters. +func (c *Client) EstimateSmartFee(confTarget int64, mode *btcjson.EstimateSmartFeeMode) (*btcjson.EstimateSmartFeeResult, error) { + return c.EstimateSmartFeeAsync(confTarget, mode).Receive() +} + // FutureVerifyChainResult is a future promise to deliver the result of a // VerifyChainAsync, VerifyChainLevelAsyncRPC, or VerifyChainBlocksAsync // invocation (or an applicable error). -type FutureVerifyChainResult chan *response +type FutureVerifyChainResult chan *Response -// Receive waits for the response promised by the future and returns whether +// Receive waits for the Response promised by the future and returns whether // or not the chain verified based on the check level and number of blocks // to verify specified in the original call. func (r FutureVerifyChainResult) Receive() (bool, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return false, err } @@ -679,7 +918,7 @@ func (r FutureVerifyChainResult) Receive() (bool, error) { // See VerifyChain for the blocking version and more details. func (c *Client) VerifyChainAsync() FutureVerifyChainResult { cmd := btcjson.NewVerifyChainCmd(nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // VerifyChain requests the server to verify the block chain database using @@ -697,7 +936,7 @@ func (c *Client) VerifyChain() (bool, error) { // See VerifyChainLevel for the blocking version and more details. func (c *Client) VerifyChainLevelAsync(checkLevel int32) FutureVerifyChainResult { cmd := btcjson.NewVerifyChainCmd(&checkLevel, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // VerifyChainLevel requests the server to verify the block chain database using @@ -720,7 +959,7 @@ func (c *Client) VerifyChainLevel(checkLevel int32) (bool, error) { // See VerifyChainBlocks for the blocking version and more details. func (c *Client) VerifyChainBlocksAsync(checkLevel, numBlocks int32) FutureVerifyChainResult { cmd := btcjson.NewVerifyChainCmd(&checkLevel, &numBlocks) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // VerifyChainBlocks requests the server to verify the block chain database @@ -740,12 +979,12 @@ func (c *Client) VerifyChainBlocks(checkLevel, numBlocks int32) (bool, error) { // FutureGetTxOutResult is a future promise to deliver the result of a // GetTxOutAsync RPC invocation (or an applicable error). -type FutureGetTxOutResult chan *response +type FutureGetTxOutResult chan *Response -// Receive waits for the response promised by the future and returns a +// Receive waits for the Response promised by the future and returns a // transaction given its hash. func (r FutureGetTxOutResult) Receive() (*btcjson.GetTxOutResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -778,7 +1017,7 @@ func (c *Client) GetTxOutAsync(txHash *chainhash.Hash, index uint32, mempool boo } cmd := btcjson.NewGetTxOutCmd(hash, index, &mempool) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetTxOut returns the transaction output info if it's unspent and @@ -787,20 +1026,58 @@ func (c *Client) GetTxOut(txHash *chainhash.Hash, index uint32, mempool bool) (* return c.GetTxOutAsync(txHash, index, mempool).Receive() } +// FutureGetTxOutSetInfoResult is a future promise to deliver the result of a +// GetTxOutSetInfoAsync RPC invocation (or an applicable error). +type FutureGetTxOutSetInfoResult chan *Response + +// Receive waits for the Response promised by the future and returns the +// results of GetTxOutSetInfoAsync RPC invocation. +func (r FutureGetTxOutSetInfoResult) Receive() (*btcjson.GetTxOutSetInfoResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + // Unmarshal result as an gettxoutsetinfo result object. + var txOutSetInfo *btcjson.GetTxOutSetInfoResult + err = json.Unmarshal(res, &txOutSetInfo) + if err != nil { + return nil, err + } + + return txOutSetInfo, nil +} + +// GetTxOutSetInfoAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetTxOutSetInfo for the blocking version and more details. +func (c *Client) GetTxOutSetInfoAsync() FutureGetTxOutSetInfoResult { + cmd := btcjson.NewGetTxOutSetInfoCmd() + return c.SendCmd(cmd) +} + +// GetTxOutSetInfo returns the statistics about the unspent transaction output +// set. +func (c *Client) GetTxOutSetInfo() (*btcjson.GetTxOutSetInfoResult, error) { + return c.GetTxOutSetInfoAsync().Receive() +} + // FutureRescanBlocksResult is a future promise to deliver the result of a // RescanBlocksAsync RPC invocation (or an applicable error). // // NOTE: This is a btcsuite extension ported from // github.com/decred/dcrrpcclient. -type FutureRescanBlocksResult chan *response +type FutureRescanBlocksResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // discovered rescanblocks data. // // NOTE: This is a btcsuite extension ported from // github.com/decred/dcrrpcclient. func (r FutureRescanBlocksResult) Receive() ([]btcjson.RescannedBlock, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -829,7 +1106,7 @@ func (c *Client) RescanBlocksAsync(blockHashes []chainhash.Hash) FutureRescanBlo } cmd := btcjson.NewRescanBlocksCmd(strBlockHashes) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // RescanBlocks rescans the blocks identified by blockHashes, in order, using @@ -844,12 +1121,12 @@ func (c *Client) RescanBlocks(blockHashes []chainhash.Hash) ([]btcjson.Rescanned // FutureInvalidateBlockResult is a future promise to deliver the result of a // InvalidateBlockAsync RPC invocation (or an applicable error). -type FutureInvalidateBlockResult chan *response +type FutureInvalidateBlockResult chan *Response -// Receive waits for the response promised by the future and returns the raw +// Receive waits for the Response promised by the future and returns the raw // block requested from the server given its hash. func (r FutureInvalidateBlockResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -866,7 +1143,7 @@ func (c *Client) InvalidateBlockAsync(blockHash *chainhash.Hash) FutureInvalidat } cmd := btcjson.NewInvalidateBlockCmd(hash) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // InvalidateBlock invalidates a specific block. @@ -876,12 +1153,12 @@ func (c *Client) InvalidateBlock(blockHash *chainhash.Hash) error { // FutureGetCFilterResult is a future promise to deliver the result of a // GetCFilterAsync RPC invocation (or an applicable error). -type FutureGetCFilterResult chan *response +type FutureGetCFilterResult chan *Response -// Receive waits for the response promised by the future and returns the raw +// Receive waits for the Response promised by the future and returns the raw // filter requested from the server given its block hash. func (r FutureGetCFilterResult) Receive() (*wire.MsgCFilter, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -920,7 +1197,7 @@ func (c *Client) GetCFilterAsync(blockHash *chainhash.Hash, } cmd := btcjson.NewGetCFilterCmd(hash, filterType) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetCFilter returns a raw filter from the server given its block hash. @@ -931,12 +1208,12 @@ func (c *Client) GetCFilter(blockHash *chainhash.Hash, // FutureGetCFilterHeaderResult is a future promise to deliver the result of a // GetCFilterHeaderAsync RPC invocation (or an applicable error). -type FutureGetCFilterHeaderResult chan *response +type FutureGetCFilterHeaderResult chan *Response -// Receive waits for the response promised by the future and returns the raw +// Receive waits for the Response promised by the future and returns the raw // filter header requested from the server given its block hash. func (r FutureGetCFilterHeaderResult) Receive() (*wire.MsgCFHeaders, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -973,7 +1250,7 @@ func (c *Client) GetCFilterHeaderAsync(blockHash *chainhash.Hash, } cmd := btcjson.NewGetCFilterHeaderCmd(hash, filterType) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetCFilterHeader returns a raw filter header from the server given its block @@ -982,3 +1259,126 @@ func (c *Client) GetCFilterHeader(blockHash *chainhash.Hash, filterType wire.FilterType) (*wire.MsgCFHeaders, error) { return c.GetCFilterHeaderAsync(blockHash, filterType).Receive() } + +// FutureGetBlockStatsResult is a future promise to deliver the result of a +// GetBlockStatsAsync RPC invocation (or an applicable error). +type FutureGetBlockStatsResult chan *Response + +// Receive waits for the Response promised by the future and returns statistics +// of a block at a certain height. +func (r FutureGetBlockStatsResult) Receive() (*btcjson.GetBlockStatsResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var blockStats btcjson.GetBlockStatsResult + err = json.Unmarshal(res, &blockStats) + if err != nil { + return nil, err + } + + return &blockStats, nil +} + +// GetBlockStatsAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetBlockStats or the blocking version and more details. +func (c *Client) GetBlockStatsAsync(hashOrHeight interface{}, stats *[]string) FutureGetBlockStatsResult { + if hash, ok := hashOrHeight.(*chainhash.Hash); ok { + hashOrHeight = hash.String() + } + + cmd := btcjson.NewGetBlockStatsCmd(btcjson.HashOrHeight{Value: hashOrHeight}, stats) + return c.SendCmd(cmd) +} + +// GetBlockStats returns block statistics. First argument specifies height or hash of the target block. +// Second argument allows to select certain stats to return. +func (c *Client) GetBlockStats(hashOrHeight interface{}, stats *[]string) (*btcjson.GetBlockStatsResult, error) { + return c.GetBlockStatsAsync(hashOrHeight, stats).Receive() +} + +// FutureDeriveAddressesResult is a future promise to deliver the result of an +// DeriveAddressesAsync RPC invocation (or an applicable error). +type FutureDeriveAddressesResult chan *Response + +// Receive waits for the Response promised by the future and derives one or more addresses +// corresponding to the given output descriptor. +func (r FutureDeriveAddressesResult) Receive() (*btcjson.DeriveAddressesResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var deriveAddressesResult btcjson.DeriveAddressesResult + + err = json.Unmarshal(res, &deriveAddressesResult) + if err != nil { + return nil, err + } + + return &deriveAddressesResult, nil +} + +// DeriveAddressesAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See DeriveAddresses for the blocking version and more details. +func (c *Client) DeriveAddressesAsync(descriptor string, descriptorRange *btcjson.DescriptorRange) FutureDeriveAddressesResult { + cmd := btcjson.NewDeriveAddressesCmd(descriptor, descriptorRange) + return c.SendCmd(cmd) +} + +// DeriveAddresses derives one or more addresses corresponding to an output +// descriptor. If a ranged descriptor is used, the end or the range +// (in [begin,end] notation) to derive must be specified. +func (c *Client) DeriveAddresses(descriptor string, descriptorRange *btcjson.DescriptorRange) (*btcjson.DeriveAddressesResult, error) { + return c.DeriveAddressesAsync(descriptor, descriptorRange).Receive() +} + +// FutureGetDescriptorInfoResult is a future promise to deliver the result of a +// GetDescriptorInfoAsync RPC invocation (or an applicable error). +type FutureGetDescriptorInfoResult chan *Response + +// Receive waits for the Response promised by the future and returns the analysed +// info of the descriptor. +func (r FutureGetDescriptorInfoResult) Receive() (*btcjson.GetDescriptorInfoResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var descriptorInfo btcjson.GetDescriptorInfoResult + + err = json.Unmarshal(res, &descriptorInfo) + if err != nil { + return nil, err + } + + return &descriptorInfo, nil +} + +// GetDescriptorInfoAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetDescriptorInfo for the blocking version and more details. +func (c *Client) GetDescriptorInfoAsync(descriptor string) FutureGetDescriptorInfoResult { + cmd := btcjson.NewGetDescriptorInfoCmd(descriptor) + return c.SendCmd(cmd) +} + +// GetDescriptorInfo returns the analysed info of a descriptor string, by invoking the +// getdescriptorinfo RPC. +// +// Use this function to analyse a descriptor string, or compute the checksum +// for a descriptor without one. +// +// See btcjson.GetDescriptorInfoResult for details about the result. +func (c *Client) GetDescriptorInfo(descriptor string) (*btcjson.GetDescriptorInfoResult, error) { + return c.GetDescriptorInfoAsync(descriptor).Receive() +} diff --git a/rpcclient/cookiefile.go b/rpcclient/cookiefile.go new file mode 100644 index 0000000000..c3f7068b30 --- /dev/null +++ b/rpcclient/cookiefile.go @@ -0,0 +1,38 @@ +// Copyright (c) 2017 The Namecoin developers +// Copyright (c) 2019 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package rpcclient + +import ( + "bufio" + "fmt" + "os" + "strings" +) + +func readCookieFile(path string) (username, password string, err error) { + f, err := os.Open(path) + if err != nil { + return + } + defer f.Close() + + scanner := bufio.NewScanner(f) + scanner.Scan() + err = scanner.Err() + if err != nil { + return + } + s := scanner.Text() + + parts := strings.SplitN(s, ":", 2) + if len(parts) != 2 { + err = fmt.Errorf("malformed cookie file") + return + } + + username, password = parts[0], parts[1] + return +} diff --git a/rpcclient/doc.go b/rpcclient/doc.go index d4bbb64d65..b682ba10f2 100644 --- a/rpcclient/doc.go +++ b/rpcclient/doc.go @@ -106,7 +106,7 @@ Some of the commands are extensions specific to a particular RPC server. For example, the DebugLevel call is an extension only provided by btcd (and btcwallet passthrough). Therefore if you call one of these commands against an RPC server that doesn't provide them, you will get an unimplemented error -from the server. An effort has been made to call out which commmands are +from the server. An effort has been made to call out which commands are extensions in their documentation. Also, it is important to realize that btcd intentionally separates the wallet diff --git a/rpcclient/example_test.go b/rpcclient/example_test.go new file mode 100644 index 0000000000..9ba9adadef --- /dev/null +++ b/rpcclient/example_test.go @@ -0,0 +1,156 @@ +// Copyright (c) 2020 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package rpcclient + +import ( + "fmt" + "github.com/btcsuite/btcd/btcjson" +) + +var connCfg = &ConnConfig{ + Host: "localhost:8332", + User: "user", + Pass: "pass", + HTTPPostMode: true, + DisableTLS: true, +} + +func ExampleClient_GetDescriptorInfo() { + client, err := New(connCfg, nil) + if err != nil { + panic(err) + } + defer client.Shutdown() + + descriptorInfo, err := client.GetDescriptorInfo( + "wpkh([d34db33f/84h/0h/0h]0279be667ef9dcbbac55a06295Ce870b07029Bfcdb2dce28d959f2815b16f81798)") + if err != nil { + panic(err) + } + + fmt.Printf("%+v\n", descriptorInfo) + // &{Descriptor:wpkh([d34db33f/84'/0'/0']0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798)#n9g43y4k Checksum:qwlqgth7 IsRange:false IsSolvable:true HasPrivateKeys:false} +} + +func ExampleClient_ImportMulti() { + client, err := New(connCfg, nil) + if err != nil { + panic(err) + } + defer client.Shutdown() + + requests := []btcjson.ImportMultiRequest{ + { + Descriptor: btcjson.String( + "pkh([f34db33f/44'/0'/0']xpub6Cc939fyHvfB9pPLWd3bSyyQFvgKbwhidca49jGCM5Hz5ypEPGf9JVXB4NBuUfPgoHnMjN6oNgdC9KRqM11RZtL8QLW6rFKziNwHDYhZ6Kx/0/*)#ed7px9nu"), + Range: &btcjson.DescriptorRange{Value: []int{0, 100}}, + Timestamp: btcjson.TimestampOrNow{Value: 0}, // scan from genesis + WatchOnly: btcjson.Bool(true), + KeyPool: btcjson.Bool(false), + Internal: btcjson.Bool(false), + }, + } + opts := &btcjson.ImportMultiOptions{Rescan: true} + + resp, err := client.ImportMulti(requests, opts) + if err != nil { + panic(err) + } + + fmt.Println(resp[0].Success) + // true +} + +func ExampleClient_DeriveAddresses() { + client, err := New(connCfg, nil) + if err != nil { + panic(err) + } + defer client.Shutdown() + + addrs, err := client.DeriveAddresses( + "pkh([f34db33f/44'/0'/0']xpub6Cc939fyHvfB9pPLWd3bSyyQFvgKbwhidca49jGCM5Hz5ypEPGf9JVXB4NBuUfPgoHnMjN6oNgdC9KRqM11RZtL8QLW6rFKziNwHDYhZ6Kx/0/*)#ed7px9nu", + &btcjson.DescriptorRange{Value: []int{0, 2}}) + if err != nil { + panic(err) + } + + fmt.Printf("%+v\n", addrs) + // &[14NjenDKkGGq1McUgoSkeUHJpW3rrKLbPW 1Pn6i3cvdGhqbdgNjXHfbaYfiuviPiymXj 181x1NbgGYKLeMXkDdXEAqepG75EgU8XtG] +} + +func ExampleClient_GetAddressInfo() { + client, err := New(connCfg, nil) + if err != nil { + panic(err) + } + defer client.Shutdown() + + info, err := client.GetAddressInfo("2NF1FbxtUAsvdU4uW1UC2xkBVatp6cYQuJ3") + if err != nil { + panic(err) + } + + fmt.Println(info.Address) // 2NF1FbxtUAsvdU4uW1UC2xkBVatp6cYQuJ3 + fmt.Println(info.ScriptType.String()) // witness_v0_keyhash + fmt.Println(*info.HDKeyPath) // m/49'/1'/0'/0/4 + fmt.Println(info.Embedded.Address) // tb1q3x2h2kh57wzg7jz00jhwn0ycvqtdk2ane37j27 +} + +func ExampleClient_GetWalletInfo() { + client, err := New(connCfg, nil) + if err != nil { + panic(err) + } + defer client.Shutdown() + + info, err := client.GetWalletInfo() + if err != nil { + panic(err) + } + + fmt.Println(info.WalletVersion) // 169900 + fmt.Println(info.TransactionCount) // 22 + fmt.Println(*info.HDSeedID) // eb44e4e9b864ef17e7ba947da746375b000f5d94 + fmt.Println(info.Scanning.Value) // false +} + +func ExampleClient_GetTxOutSetInfo() { + client, err := New(connCfg, nil) + if err != nil { + panic(err) + } + defer client.Shutdown() + + r, err := client.GetTxOutSetInfo() + if err != nil { + panic(err) + } + + fmt.Println(r.TotalAmount.String()) // 20947654.56996054 BTC + fmt.Println(r.BestBlock.String()) // 000000000000005f94116250e2407310463c0a7cf950f1af9ebe935b1c0687ab + fmt.Println(r.TxOuts) // 24280607 + fmt.Println(r.Transactions) // 9285603 + fmt.Println(r.DiskSize) // 1320871611 +} + +func ExampleClient_CreateWallet() { + client, err := New(connCfg, nil) + if err != nil { + panic(err) + } + defer client.Shutdown() + + r, err := client.CreateWallet( + "mywallet", + WithCreateWalletBlank(), + WithCreateWalletPassphrase("secret"), + ) + if err != nil { + panic(err) + } + + fmt.Println(r.Name) // mywallet +} diff --git a/rpcclient/examples/bitcoincorehttpbulk/README.md b/rpcclient/examples/bitcoincorehttpbulk/README.md new file mode 100644 index 0000000000..ca900b6e79 --- /dev/null +++ b/rpcclient/examples/bitcoincorehttpbulk/README.md @@ -0,0 +1,31 @@ +Bitcoin Core Batch HTTP POST Example +============================== + +This example shows how to use the rpclient package to connect to a Bitcoin Core RPC server using HTTP POST and batch JSON-RPC mode with TLS disabled. + +## Running the Example + +The first step is to use `go get` to download and install the rpcclient package: + +```bash +$ go get github.com/btcsuite/btcd/rpcclient +``` + +Next, modify the `main.go` source to specify the correct RPC username and +password for the RPC server: + +```Go + User: "yourrpcuser", + Pass: "yourrpcpass", +``` + +Finally, navigate to the example's directory and run it with: + +```bash +$ cd $GOPATH/src/github.com/btcsuite/btcd/rpcclient/examples/bitcoincorehttp +$ go run *.go +``` + +## License + +This example is licensed under the [copyfree](http://copyfree.org) ISC License. diff --git a/rpcclient/examples/bitcoincorehttpbulk/main.go b/rpcclient/examples/bitcoincorehttpbulk/main.go new file mode 100644 index 0000000000..3dce058da0 --- /dev/null +++ b/rpcclient/examples/bitcoincorehttpbulk/main.go @@ -0,0 +1,46 @@ +// Copyright (c) 2014-2020 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package main + +import ( + "fmt" + "log" + + "github.com/btcsuite/btcd/rpcclient" +) + +func main() { + // Connect to local bitcoin core RPC server using HTTP POST mode. + connCfg := &rpcclient.ConnConfig{ + Host: "localhost:8332", + User: "yourrpcuser", + Pass: "yourrpcpass", + DisableConnectOnNew: true, + HTTPPostMode: true, // Bitcoin core only supports HTTP POST mode + DisableTLS: true, // Bitcoin core does not provide TLS by default + } + batchClient, err := rpcclient.NewBatch(connCfg) + defer batchClient.Shutdown() + + if err != nil { + log.Fatal(err) + } + + // batch mode requires async requests + blockCount := batchClient.GetBlockCountAsync() + block1 := batchClient.GetBlockHashAsync(1) + batchClient.GetBlockHashAsync(2) + batchClient.GetBlockHashAsync(3) + block4 := batchClient.GetBlockHashAsync(4) + difficulty := batchClient.GetDifficultyAsync() + + // sends all queued batch requests + batchClient.Send() + + fmt.Println(blockCount.Receive()) + fmt.Println(block1.Receive()) + fmt.Println(block4.Receive()) + fmt.Println(difficulty.Receive()) +} diff --git a/rpcclient/examples/btcdwebsockets/main.go b/rpcclient/examples/btcdwebsockets/main.go index 56d12d8274..1f18b9aab4 100644 --- a/rpcclient/examples/btcdwebsockets/main.go +++ b/rpcclient/examples/btcdwebsockets/main.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/rpcclient" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) func main() { diff --git a/rpcclient/examples/btcwalletwebsockets/main.go b/rpcclient/examples/btcwalletwebsockets/main.go index e803138d64..7f177e0b1f 100644 --- a/rpcclient/examples/btcwalletwebsockets/main.go +++ b/rpcclient/examples/btcwalletwebsockets/main.go @@ -11,7 +11,7 @@ import ( "time" "github.com/btcsuite/btcd/rpcclient" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" "github.com/davecgh/go-spew/spew" ) diff --git a/rpcclient/examples/customcommand/README.md b/rpcclient/examples/customcommand/README.md new file mode 100644 index 0000000000..0e36d649cc --- /dev/null +++ b/rpcclient/examples/customcommand/README.md @@ -0,0 +1,32 @@ +Custom Command Example +====================== + +This example shows how to use custom commands with the rpcclient package, by +implementing the `name_show` command from Namecoin Core. + +## Running the Example + +The first step is to use `go get` to download and install the rpcclient package: + +```bash +$ go get github.com/btcsuite/btcd/rpcclient +``` + +Next, modify the `main.go` source to specify the correct RPC username and +password for the RPC server of your Namecoin Core node: + +```Go + User: "yourrpcuser", + Pass: "yourrpcpass", +``` + +Finally, navigate to the example's directory and run it with: + +```bash +$ cd $GOPATH/src/github.com/btcsuite/btcd/rpcclient/examples/customcommand +$ go run *.go +``` + +## License + +This example is licensed under the [copyfree](http://copyfree.org) ISC License. diff --git a/rpcclient/examples/customcommand/main.go b/rpcclient/examples/customcommand/main.go new file mode 100644 index 0000000000..1e14c06fe4 --- /dev/null +++ b/rpcclient/examples/customcommand/main.go @@ -0,0 +1,110 @@ +// Copyright (c) 2014-2017 The btcsuite developers +// Copyright (c) 2019-2020 The Namecoin developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package main + +import ( + "encoding/json" + "log" + + "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/rpcclient" +) + +// NameShowCmd defines the name_show JSON-RPC command. +type NameShowCmd struct { + Name string +} + +// NameShowResult models the data from the name_show command. +type NameShowResult struct { + Name string `json:"name"` + NameEncoding string `json:"name_encoding"` + NameError string `json:"name_error"` + Value string `json:"value"` + ValueEncoding string `json:"value_encoding"` + ValueError string `json:"value_error"` + TxID string `json:"txid"` + Vout uint32 `json:"vout"` + Address string `json:"address"` + IsMine bool `json:"ismine"` + Height int32 `json:"height"` + ExpiresIn int32 `json:"expires_in"` + Expired bool `json:"expired"` +} + +// FutureNameShowResult is a future promise to deliver the result +// of a NameShowAsync RPC invocation (or an applicable error). +type FutureNameShowResult chan *rpcclient.Response + +// Receive waits for the Response promised by the future and returns detailed +// information about a name. +func (r FutureNameShowResult) Receive() (*NameShowResult, error) { + res, err := rpcclient.ReceiveFuture(r) + if err != nil { + return nil, err + } + + // Unmarshal result as a name_show result object + var nameShow NameShowResult + err = json.Unmarshal(res, &nameShow) + if err != nil { + return nil, err + } + + return &nameShow, nil +} + +// NameShowAsync returns an instance of a type that can be used to get the +// result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See NameShow for the blocking version and more details. +func NameShowAsync(c *rpcclient.Client, name string) FutureNameShowResult { + cmd := &NameShowCmd{ + Name: name, + } + return c.SendCmd(cmd) +} + +// NameShow returns detailed information about a name. +func NameShow(c *rpcclient.Client, name string) (*NameShowResult, error) { + return NameShowAsync(c, name).Receive() +} + +func init() { + // No special flags for commands in this file. + flags := btcjson.UsageFlag(0) + + btcjson.MustRegisterCmd("name_show", (*NameShowCmd)(nil), flags) +} + +func main() { + // Connect to local namecoin core RPC server using HTTP POST mode. + connCfg := &rpcclient.ConnConfig{ + Host: "localhost:8336", + User: "yourrpcuser", + Pass: "yourrpcpass", + HTTPPostMode: true, // Namecoin core only supports HTTP POST mode + DisableTLS: true, // Namecoin core does not provide TLS by default + } + // Notice the notification parameter is nil since notifications are + // not supported in HTTP POST mode. + client, err := rpcclient.New(connCfg, nil) + if err != nil { + log.Fatal(err) + } + defer client.Shutdown() + + // Get the current block count. + result, err := NameShow(client, "d/namecoin") + if err != nil { + log.Fatal(err) + } + + value := result.Value + + log.Printf("Value of d/namecoin: %s", value) +} diff --git a/rpcclient/extensions.go b/rpcclient/extensions.go index d16cd5252e..efb6c1c710 100644 --- a/rpcclient/extensions.go +++ b/rpcclient/extensions.go @@ -15,18 +15,18 @@ import ( "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // FutureDebugLevelResult is a future promise to deliver the result of a // DebugLevelAsync RPC invocation (or an applicable error). -type FutureDebugLevelResult chan *response +type FutureDebugLevelResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of setting the debug logging level to the passed level specification or the // list of of the available subsystems for the special keyword 'show'. func (r FutureDebugLevelResult) Receive() (string, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return "", err } @@ -49,7 +49,7 @@ func (r FutureDebugLevelResult) Receive() (string, error) { // NOTE: This is a btcd extension. func (c *Client) DebugLevelAsync(levelSpec string) FutureDebugLevelResult { cmd := btcjson.NewDebugLevelCmd(levelSpec) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // DebugLevel dynamically sets the debug logging level to the passed level @@ -68,11 +68,11 @@ func (c *Client) DebugLevel(levelSpec string) (string, error) { // FutureCreateEncryptedWalletResult is a future promise to deliver the error // result of a CreateEncryptedWalletAsync RPC invocation. -type FutureCreateEncryptedWalletResult chan *response +type FutureCreateEncryptedWalletResult chan *Response -// Receive waits for and returns the error response promised by the future. +// Receive waits for and returns the error Response promised by the future. func (r FutureCreateEncryptedWalletResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -85,7 +85,7 @@ func (r FutureCreateEncryptedWalletResult) Receive() error { // NOTE: This is a btcwallet extension. func (c *Client) CreateEncryptedWalletAsync(passphrase string) FutureCreateEncryptedWalletResult { cmd := btcjson.NewCreateEncryptedWalletCmd(passphrase) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // CreateEncryptedWallet requests the creation of an encrypted wallet. Wallets @@ -102,12 +102,12 @@ func (c *Client) CreateEncryptedWallet(passphrase string) error { // FutureListAddressTransactionsResult is a future promise to deliver the result // of a ListAddressTransactionsAsync RPC invocation (or an applicable error). -type FutureListAddressTransactionsResult chan *response +type FutureListAddressTransactionsResult chan *Response -// Receive waits for the response promised by the future and returns information +// Receive waits for the Response promised by the future and returns information // about all transactions associated with the provided addresses. func (r FutureListAddressTransactionsResult) Receive() ([]btcjson.ListTransactionsResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -135,7 +135,7 @@ func (c *Client) ListAddressTransactionsAsync(addresses []btcutil.Address, accou addrs = append(addrs, addr.EncodeAddress()) } cmd := btcjson.NewListAddressTransactionsCmd(addrs, &account) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListAddressTransactions returns information about all transactions associated @@ -148,12 +148,12 @@ func (c *Client) ListAddressTransactions(addresses []btcutil.Address, account st // FutureGetBestBlockResult is a future promise to deliver the result of a // GetBestBlockAsync RPC invocation (or an applicable error). -type FutureGetBestBlockResult chan *response +type FutureGetBestBlockResult chan *Response -// Receive waits for the response promised by the future and returns the hash +// Receive waits for the Response promised by the future and returns the hash // and height of the block in the longest (best) chain. func (r FutureGetBestBlockResult) Receive() (*chainhash.Hash, int32, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, 0, err } @@ -183,7 +183,7 @@ func (r FutureGetBestBlockResult) Receive() (*chainhash.Hash, int32, error) { // NOTE: This is a btcd extension. func (c *Client) GetBestBlockAsync() FutureGetBestBlockResult { cmd := btcjson.NewGetBestBlockCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBestBlock returns the hash and height of the block in the longest (best) @@ -196,12 +196,12 @@ func (c *Client) GetBestBlock() (*chainhash.Hash, int32, error) { // FutureGetCurrentNetResult is a future promise to deliver the result of a // GetCurrentNetAsync RPC invocation (or an applicable error). -type FutureGetCurrentNetResult chan *response +type FutureGetCurrentNetResult chan *Response -// Receive waits for the response promised by the future and returns the network +// Receive waits for the Response promised by the future and returns the network // the server is running on. func (r FutureGetCurrentNetResult) Receive() (wire.BitcoinNet, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -225,7 +225,7 @@ func (r FutureGetCurrentNetResult) Receive() (wire.BitcoinNet, error) { // NOTE: This is a btcd extension. func (c *Client) GetCurrentNetAsync() FutureGetCurrentNetResult { cmd := btcjson.NewGetCurrentNetCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetCurrentNet returns the network the server is running on. @@ -240,15 +240,15 @@ func (c *Client) GetCurrentNet() (wire.BitcoinNet, error) { // // NOTE: This is a btcsuite extension ported from // github.com/decred/dcrrpcclient. -type FutureGetHeadersResult chan *response +type FutureGetHeadersResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // getheaders result. // // NOTE: This is a btcsuite extension ported from // github.com/decred/dcrrpcclient. func (r FutureGetHeadersResult) Receive() ([]wire.BlockHeader, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -292,7 +292,7 @@ func (c *Client) GetHeadersAsync(blockLocators []chainhash.Hash, hashStop *chain hash = hashStop.String() } cmd := btcjson.NewGetHeadersCmd(locators, hash) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetHeaders mimics the wire protocol getheaders and headers messages by @@ -307,12 +307,12 @@ func (c *Client) GetHeaders(blockLocators []chainhash.Hash, hashStop *chainhash. // FutureExportWatchingWalletResult is a future promise to deliver the result of // an ExportWatchingWalletAsync RPC invocation (or an applicable error). -type FutureExportWatchingWalletResult chan *response +type FutureExportWatchingWalletResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // exported wallet. func (r FutureExportWatchingWalletResult) Receive() ([]byte, []byte, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, nil, err } @@ -361,7 +361,7 @@ func (r FutureExportWatchingWalletResult) Receive() ([]byte, []byte, error) { // NOTE: This is a btcwallet extension. func (c *Client) ExportWatchingWalletAsync(account string) FutureExportWatchingWalletResult { cmd := btcjson.NewExportWatchingWalletCmd(&account, btcjson.Bool(true)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ExportWatchingWallet returns the raw bytes for a watching-only version of @@ -376,12 +376,12 @@ func (c *Client) ExportWatchingWallet(account string) ([]byte, []byte, error) { // FutureSessionResult is a future promise to deliver the result of a // SessionAsync RPC invocation (or an applicable error). -type FutureSessionResult chan *response +type FutureSessionResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // session result. func (r FutureSessionResult) Receive() (*btcjson.SessionResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -410,7 +410,7 @@ func (c *Client) SessionAsync() FutureSessionResult { } cmd := btcjson.NewSessionCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // Session returns details regarding a websocket client's current connection. @@ -427,16 +427,16 @@ func (c *Client) Session() (*btcjson.SessionResult, error) { // // NOTE: This is a btcsuite extension ported from // github.com/decred/dcrrpcclient. -type FutureVersionResult chan *response +type FutureVersionResult chan *Response -// Receive waits for the response promised by the future and returns the version +// Receive waits for the Response promised by the future and returns the version // result. // // NOTE: This is a btcsuite extension ported from // github.com/decred/dcrrpcclient. func (r FutureVersionResult) Receive() (map[string]btcjson.VersionResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -461,7 +461,7 @@ func (r FutureVersionResult) Receive() (map[string]btcjson.VersionResult, // github.com/decred/dcrrpcclient. func (c *Client) VersionAsync() FutureVersionResult { cmd := btcjson.NewVersionCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // Version returns information about the server's JSON-RPC API versions. diff --git a/rpcclient/infrastructure.go b/rpcclient/infrastructure.go index 7a8f1885d1..fbc43a4568 100644 --- a/rpcclient/infrastructure.go +++ b/rpcclient/infrastructure.go @@ -19,12 +19,14 @@ import ( "net" "net/http" "net/url" + "os" "strings" "sync" "sync/atomic" "time" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/go-socks/socks" "github.com/btcsuite/websocket" ) @@ -84,15 +86,11 @@ const ( // connectionRetryInterval is the amount of time to wait in between // retries when automatically reconnecting to an RPC server. connectionRetryInterval = time.Second * 5 -) -// sendPostDetails houses an HTTP POST request to send to an RPC server as well -// as the original JSON-RPC command and a channel to reply on when the server -// responds with the result. -type sendPostDetails struct { - httpRequest *http.Request - jsonRequest *jsonRequest -} + // requestRetryInterval is the initial amount of time to wait in between + // retries when sending HTTP POST requests. + requestRetryInterval = time.Millisecond * 500 +) // jsonRequest holds information about a json request that is used to properly // detect, interpret, and deliver a reply to it. @@ -101,7 +99,7 @@ type jsonRequest struct { method string cmd interface{} marshalledJSON []byte - responseChan chan *response + responseChan chan *Response } // BackendVersion represents the version of the backend the client is currently @@ -138,6 +136,10 @@ type Client struct { // config holds the connection configuration assoiated with this client. config *ConnConfig + // chainParams holds the params for the chain that this client is using, + // and is used for many wallet methods. + chainParams *chaincfg.Params + // wsConn is the underlying websocket connection when not in HTTP POST // mode. wsConn *websocket.Conn @@ -157,6 +159,10 @@ type Client struct { // disconnected indicated whether or not the server is disconnected. disconnected bool + // whether or not to batch requests, false unless changed by Batch() + batch bool + batchList *list.List + // retryCount holds the number of times the client has tried to // reconnect to the RPC server. retryCount int64 @@ -173,7 +179,7 @@ type Client struct { // Networking infrastructure. sendChan chan []byte - sendPostChan chan *sendPostDetails + sendPostChan chan *jsonRequest connEstablished chan struct{} disconnect chan struct{} shutdown chan struct{} @@ -214,8 +220,13 @@ func (c *Client) addRequest(jReq *jsonRequest) error { default: } - element := c.requestList.PushBack(jReq) - c.requestMap[jReq.id] = element + if !c.batch { + element := c.requestList.PushBack(jReq) + c.requestMap[jReq.id] = element + } else { + element := c.batchList.PushBack(jReq) + c.requestMap[jReq.id] = element + } return nil } @@ -283,35 +294,68 @@ func (c *Client) trackRegisteredNtfns(cmd interface{}) { } } -type ( - // inMessage is the first type that an incoming message is unmarshaled - // into. It supports both requests (for notification support) and - // responses. The partially-unmarshaled message is a notification if - // the embedded ID (from the response) is nil. Otherwise, it is a - // response. - inMessage struct { - ID *float64 `json:"id"` - *rawNotification - *rawResponse - } +// FutureGetBulkResult waits for the responses promised by the future +// and returns them in a channel +type FutureGetBulkResult chan *Response - // rawNotification is a partially-unmarshaled JSON-RPC notification. - rawNotification struct { - Method string `json:"method"` - Params []json.RawMessage `json:"params"` +// Receive waits for the response promised by the future and returns an map +// of results by request id +func (r FutureGetBulkResult) Receive() (BulkResult, error) { + m := make(BulkResult) + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + var arr []IndividualBulkResult + err = json.Unmarshal(res, &arr) + if err != nil { + return nil, err } - // rawResponse is a partially-unmarshaled JSON-RPC response. For this - // to be valid (according to JSON-RPC 1.0 spec), ID may not be nil. - rawResponse struct { - Result json.RawMessage `json:"result"` - Error *btcjson.RPCError `json:"error"` + for _, results := range arr { + m[results.Id] = results } -) -// response is the raw bytes of a JSON-RPC result, or the error if the response + return m, nil +} + +// IndividualBulkResult represents one result +// from a bulk json rpc api +type IndividualBulkResult struct { + Result interface{} `json:"result"` + Error *btcjson.RPCError `json:"error"` + Id uint64 `json:"id"` +} + +type BulkResult = map[uint64]IndividualBulkResult + +// inMessage is the first type that an incoming message is unmarshaled +// into. It supports both requests (for notification support) and +// responses. The partially-unmarshaled message is a notification if +// the embedded ID (from the response) is nil. Otherwise, it is a +// response. +type inMessage struct { + ID *float64 `json:"id"` + *rawNotification + *rawResponse +} + +// rawNotification is a partially-unmarshaled JSON-RPC notification. +type rawNotification struct { + Method string `json:"method"` + Params []json.RawMessage `json:"params"` +} + +// rawResponse is a partially-unmarshaled JSON-RPC response. For this +// to be valid (according to JSON-RPC 1.0 spec), ID may not be nil. +type rawResponse struct { + Result json.RawMessage `json:"result"` + Error *btcjson.RPCError `json:"error"` +} + +// Response is the raw bytes of a JSON-RPC result, or the error if the response // error object was non-null. -type response struct { +type Response struct { result []byte err error } @@ -392,7 +436,7 @@ func (c *Client) handleMessage(msg []byte) { // Deliver the response. result, err := in.rawResponse.result() - request.responseChan <- &response{result: result, err: err} + request.responseChan <- &Response{result: result, err: err} } // shouldLogReadError returns whether or not the passed error, which is expected @@ -717,12 +761,87 @@ out: // handleSendPostMessage handles performing the passed HTTP request, reading the // result, unmarshalling it, and delivering the unmarshalled result to the // provided response channel. -func (c *Client) handleSendPostMessage(details *sendPostDetails) { - jReq := details.jsonRequest - log.Tracef("Sending command [%s] with id %d", jReq.method, jReq.id) - httpResponse, err := c.httpClient.Do(details.httpRequest) +func (c *Client) handleSendPostMessage(jReq *jsonRequest, + shutdown chan struct{}) { + + protocol := "http" + if !c.config.DisableTLS { + protocol = "https" + } + url := protocol + "://" + c.config.Host + + var ( + err, lastErr error + backoff time.Duration + httpResponse *http.Response + ) + + tries := 10 + for i := 0; i < tries; i++ { + var httpReq *http.Request + + bodyReader := bytes.NewReader(jReq.marshalledJSON) + httpReq, err = http.NewRequest("POST", url, bodyReader) + if err != nil { + jReq.responseChan <- &Response{result: nil, err: err} + return + } + httpReq.Close = true + httpReq.Header.Set("Content-Type", "application/json") + for key, value := range c.config.ExtraHeaders { + httpReq.Header.Set(key, value) + } + + // Configure basic access authorization. + user, pass, err := c.config.getAuth() + if err != nil { + jReq.responseChan <- &Response{result: nil, err: err} + return + } + httpReq.SetBasicAuth(user, pass) + + httpResponse, err = c.httpClient.Do(httpReq) + + // Quit the retry loop on success or if we can't retry anymore. + if err == nil || i == tries-1 { + break + } + + // Save the last error for the case where we backoff further, + // retry and get an invalid response but no error. If this + // happens the saved last error will be used to enrich the error + // message that we pass back to the caller. + lastErr = err + + // Backoff sleep otherwise. + backoff = requestRetryInterval * time.Duration(i+1) + if backoff > time.Minute { + backoff = time.Minute + } + log.Debugf("Failed command [%s] with id %d attempt %d."+ + " Retrying in %v... \n", jReq.method, jReq.id, + i, backoff) + + select { + case <-time.After(backoff): + + case <-shutdown: + return + } + } if err != nil { - jReq.responseChan <- &response{err: err} + jReq.responseChan <- &Response{err: err} + return + } + + // We still want to return an error if for any reason the respone + // remains empty. + if httpResponse == nil { + jReq.responseChan <- &Response{ + err: fmt.Errorf("invalid http POST response (nil), "+ + "method: %s, id: %d, last error=%v", + jReq.method, jReq.id, lastErr), + } return } @@ -731,25 +850,36 @@ func (c *Client) handleSendPostMessage(details *sendPostDetails) { httpResponse.Body.Close() if err != nil { err = fmt.Errorf("error reading json reply: %v", err) - jReq.responseChan <- &response{err: err} + jReq.responseChan <- &Response{err: err} return } // Try to unmarshal the response as a regular JSON-RPC response. var resp rawResponse - err = json.Unmarshal(respBytes, &resp) + var batchResponse json.RawMessage + if c.batch { + err = json.Unmarshal(respBytes, &batchResponse) + } else { + err = json.Unmarshal(respBytes, &resp) + } if err != nil { // When the response itself isn't a valid JSON-RPC response // return an error which includes the HTTP status code and raw // response bytes. err = fmt.Errorf("status code: %d, response: %q", httpResponse.StatusCode, string(respBytes)) - jReq.responseChan <- &response{err: err} + jReq.responseChan <- &Response{err: err} return } - - res, err := resp.result() - jReq.responseChan <- &response{result: res, err: err} + var res []byte + if c.batch { + // errors must be dealt with downstream since a whole request cannot + // "error out" other than through the status code error handled above + res, err = batchResponse, nil + } else { + res, err = resp.result() + } + jReq.responseChan <- &Response{result: res, err: err} } // sendPostHandler handles all outgoing messages when the client is running @@ -762,8 +892,8 @@ out: // Send any messages ready for send until the shutdown channel // is closed. select { - case details := <-c.sendPostChan: - c.handleSendPostMessage(details) + case jReq := <-c.sendPostChan: + c.handleSendPostMessage(jReq, c.shutdown) case <-c.shutdown: break out @@ -775,8 +905,8 @@ out: cleanup: for { select { - case details := <-c.sendPostChan: - details.jsonRequest.responseChan <- &response{ + case jReq := <-c.sendPostChan: + jReq.responseChan <- &Response{ result: nil, err: ErrClientShutdown, } @@ -793,67 +923,38 @@ cleanup: // sendPostRequest sends the passed HTTP request to the RPC server using the // HTTP client associated with the client. It is backed by a buffered channel, // so it will not block until the send channel is full. -func (c *Client) sendPostRequest(httpReq *http.Request, jReq *jsonRequest) { +func (c *Client) sendPostRequest(jReq *jsonRequest) { // Don't send the message if shutting down. select { case <-c.shutdown: - jReq.responseChan <- &response{result: nil, err: ErrClientShutdown} + jReq.responseChan <- &Response{result: nil, err: ErrClientShutdown} default: } - c.sendPostChan <- &sendPostDetails{ - jsonRequest: jReq, - httpRequest: httpReq, - } + log.Tracef("Sending command [%s] with id %d", jReq.method, jReq.id) + + c.sendPostChan <- jReq } // newFutureError returns a new future result channel that already has the // passed error waitin on the channel with the reply set to nil. This is useful // to easily return errors from the various Async functions. -func newFutureError(err error) chan *response { - responseChan := make(chan *response, 1) - responseChan <- &response{err: err} +func newFutureError(err error) chan *Response { + responseChan := make(chan *Response, 1) + responseChan <- &Response{err: err} return responseChan } -// receiveFuture receives from the passed futureResult channel to extract a +// ReceiveFuture receives from the passed futureResult channel to extract a // reply or any errors. The examined errors include an error in the // futureResult and the error in the reply from the server. This will block // until the result is available on the passed channel. -func receiveFuture(f chan *response) ([]byte, error) { +func ReceiveFuture(f chan *Response) ([]byte, error) { // Wait for a response on the returned channel. r := <-f return r.result, r.err } -// sendPost sends the passed request to the server by issuing an HTTP POST -// request using the provided response channel for the reply. Typically a new -// connection is opened and closed for each command when using this method, -// however, the underlying HTTP client might coalesce multiple commands -// depending on several factors including the remote server configuration. -func (c *Client) sendPost(jReq *jsonRequest) { - // Generate a request to the configured RPC server. - protocol := "http" - if !c.config.DisableTLS { - protocol = "https" - } - url := protocol + "://" + c.config.Host - bodyReader := bytes.NewReader(jReq.marshalledJSON) - httpReq, err := http.NewRequest("POST", url, bodyReader) - if err != nil { - jReq.responseChan <- &response{result: nil, err: err} - return - } - httpReq.Close = true - httpReq.Header.Set("Content-Type", "application/json") - - // Configure basic access authorization. - httpReq.SetBasicAuth(c.config.User, c.config.Pass) - - log.Tracef("Sending command [%s] with id %d", jReq.method, jReq.id) - c.sendPostRequest(httpReq, jReq) -} - // sendRequest sends the passed json request to the associated server using the // provided response channel for the reply. It handles both websocket and HTTP // POST mode depending on the configuration of the client. @@ -863,7 +964,13 @@ func (c *Client) sendRequest(jReq *jsonRequest) { // POST mode, the command is issued via an HTTP client. Otherwise, // the command is issued via the asynchronous websocket channels. if c.config.HTTPPostMode { - c.sendPost(jReq) + if c.batch { + if err := c.addRequest(jReq); err != nil { + log.Warn(err) + } + } else { + c.sendPostRequest(jReq) + } return } @@ -872,7 +979,7 @@ func (c *Client) sendRequest(jReq *jsonRequest) { select { case <-c.connEstablished: default: - jReq.responseChan <- &response{err: ErrClientNotConnected} + jReq.responseChan <- &Response{err: ErrClientNotConnected} return } @@ -881,18 +988,22 @@ func (c *Client) sendRequest(jReq *jsonRequest) { // channel. Then send the marshalled request via the websocket // connection. if err := c.addRequest(jReq); err != nil { - jReq.responseChan <- &response{err: err} + jReq.responseChan <- &Response{err: err} return } log.Tracef("Sending command [%s] with id %d", jReq.method, jReq.id) c.sendMessage(jReq.marshalledJSON) } -// sendCmd sends the passed command to the associated server and returns a +// SendCmd sends the passed command to the associated server and returns a // response channel on which the reply will be delivered at some point in the // future. It handles both websocket and HTTP POST mode depending on the // configuration of the client. -func (c *Client) sendCmd(cmd interface{}) chan *response { +func (c *Client) SendCmd(cmd interface{}) chan *Response { + rpcVersion := btcjson.RpcVersion1 + if c.batch { + rpcVersion = btcjson.RpcVersion2 + } // Get the method associated with the command. method, err := btcjson.CmdMethod(cmd) if err != nil { @@ -901,13 +1012,13 @@ func (c *Client) sendCmd(cmd interface{}) chan *response { // Marshal the command. id := c.NextID() - marshalledJSON, err := btcjson.MarshalCmd(id, cmd) + marshalledJSON, err := btcjson.MarshalCmd(rpcVersion, id, cmd) if err != nil { return newFutureError(err) } // Generate the request and send it along with a channel to respond on. - responseChan := make(chan *response, 1) + responseChan := make(chan *Response, 1) jReq := &jsonRequest{ id: id, method: method, @@ -915,6 +1026,7 @@ func (c *Client) sendCmd(cmd interface{}) chan *response { marshalledJSON: marshalledJSON, responseChan: responseChan, } + c.sendRequest(jReq) return responseChan @@ -926,7 +1038,7 @@ func (c *Client) sendCmd(cmd interface{}) chan *response { func (c *Client) sendCmdAndWait(cmd interface{}) (interface{}, error) { // Marshal the command to JSON-RPC, send it to the connected server, and // wait for a response on the returned channel. - return receiveFuture(c.sendCmd(cmd)) + return ReceiveFuture(c.SendCmd(cmd)) } // Disconnected returns whether or not the server is disconnected. If a @@ -1007,7 +1119,7 @@ func (c *Client) Disconnect() { if c.config.DisableAutoReconnect { for e := c.requestList.Front(); e != nil; e = e.Next() { req := e.Value.(*jsonRequest) - req.responseChan <- &response{ + req.responseChan <- &Response{ result: nil, err: ErrClientDisconnect, } @@ -1035,7 +1147,7 @@ func (c *Client) Shutdown() { // Send the ErrClientShutdown error to any pending requests. for e := c.requestList.Front(); e != nil; e = e.Next() { req := e.Value.(*jsonRequest) - req.responseChan <- &response{ + req.responseChan <- &Response{ result: nil, err: ErrClientShutdown, } @@ -1093,6 +1205,22 @@ type ConnConfig struct { // Pass is the passphrase to use to authenticate to the RPC server. Pass string + // CookiePath is the path to a cookie file containing the username and + // passphrase to use to authenticate to the RPC server. It is used + // instead of User and Pass if non-empty. + CookiePath string + + cookieLastCheckTime time.Time + cookieLastModTime time.Time + cookieLastUser string + cookieLastPass string + cookieLastErr error + + // Params is the string representing the network that the server + // is running. If there is no parameter set in the config, then + // mainnet will be used by default. + Params string + // DisableTLS specifies whether transport layer security should be // disabled. It is recommended to always use TLS if the RPC server // supports it as otherwise your username and password is sent across @@ -1136,11 +1264,52 @@ type ConnConfig struct { // flag can be set to true to use basic HTTP POST requests instead. HTTPPostMode bool + // ExtraHeaders specifies the extra headers when perform request. It's + // useful when RPC provider need customized headers. + ExtraHeaders map[string]string + // EnableBCInfoHacks is an option provided to enable compatibility hacks // when connecting to blockchain.info RPC server EnableBCInfoHacks bool } +// getAuth returns the username and passphrase that will actually be used for +// this connection. This will be the result of checking the cookie if a cookie +// path is configured; if not, it will be the user-configured username and +// passphrase. +func (config *ConnConfig) getAuth() (username, passphrase string, err error) { + // Try username+passphrase auth first. + if config.Pass != "" { + return config.User, config.Pass, nil + } + + // If no username or passphrase is set, try cookie auth. + return config.retrieveCookie() +} + +// retrieveCookie returns the cookie username and passphrase. +func (config *ConnConfig) retrieveCookie() (username, passphrase string, err error) { + if !config.cookieLastCheckTime.IsZero() && time.Now().Before(config.cookieLastCheckTime.Add(30*time.Second)) { + return config.cookieLastUser, config.cookieLastPass, config.cookieLastErr + } + + config.cookieLastCheckTime = time.Now() + + st, err := os.Stat(config.CookiePath) + if err != nil { + config.cookieLastErr = err + return config.cookieLastUser, config.cookieLastPass, config.cookieLastErr + } + + modTime := st.ModTime() + if !modTime.Equal(config.cookieLastModTime) { + config.cookieLastModTime = modTime + config.cookieLastUser, config.cookieLastPass, config.cookieLastErr = readCookieFile(config.CookiePath) + } + + return config.cookieLastUser, config.cookieLastPass, config.cookieLastErr +} + // newHTTPClient returns a new http client that is configured according to the // proxy and TLS settings in the associated connection configuration. func newHTTPClient(config *ConnConfig) (*http.Client, error) { @@ -1210,10 +1379,17 @@ func dial(config *ConnConfig) (*websocket.Conn, error) { // The RPC server requires basic authorization, so create a custom // request header with the Authorization header set. - login := config.User + ":" + config.Pass + user, pass, err := config.getAuth() + if err != nil { + return nil, err + } + login := user + ":" + pass auth := "Basic " + base64.StdEncoding.EncodeToString([]byte(login)) requestHeader := make(http.Header) requestHeader.Add("Authorization", auth) + for key, value := range config.ExtraHeaders { + requestHeader.Add(key, value) + } // Dial the connection. url := fmt.Sprintf("%s://%s/%s", scheme, config.Host, config.Endpoint) @@ -1281,15 +1457,34 @@ func New(config *ConnConfig, ntfnHandlers *NotificationHandlers) (*Client, error httpClient: httpClient, requestMap: make(map[uint64]*list.Element), requestList: list.New(), + batch: false, + batchList: list.New(), ntfnHandlers: ntfnHandlers, ntfnState: newNotificationState(), sendChan: make(chan []byte, sendBufferSize), - sendPostChan: make(chan *sendPostDetails, sendPostBufferSize), + sendPostChan: make(chan *jsonRequest, sendPostBufferSize), connEstablished: connEstablished, disconnect: make(chan struct{}), shutdown: make(chan struct{}), } + // Default network is mainnet, no parameters are necessary but if mainnet + // is specified it will be the param + switch config.Params { + case "": + fallthrough + case chaincfg.MainNetParams.Name: + client.chainParams = &chaincfg.MainNetParams + case chaincfg.TestNet3Params.Name: + client.chainParams = &chaincfg.TestNet3Params + case chaincfg.RegressionNetParams.Name: + client.chainParams = &chaincfg.RegressionNetParams + case chaincfg.SimNetParams.Name: + client.chainParams = &chaincfg.SimNetParams + default: + return nil, fmt.Errorf("rpcclient.New: Unknown chain %s", config.Params) + } + if start { log.Infof("Established connection to RPC server %s", config.Host) @@ -1304,6 +1499,24 @@ func New(config *ConnConfig, ntfnHandlers *NotificationHandlers) (*Client, error return client, nil } +// Batch is a factory that creates a client able to interact with the server using +// JSON-RPC 2.0. The client is capable of accepting an arbitrary number of requests +// and having the server process the all at the same time. It's compatible with both +// btcd and bitcoind +func NewBatch(config *ConnConfig) (*Client, error) { + if !config.HTTPPostMode { + return nil, errors.New("http post mode is required to use batch client") + } + // notification parameter is nil since notifications are not supported in POST mode. + client, err := New(config, nil) + if err != nil { + return nil, err + } + client.batch = true //copy the client with changed batch setting + client.start() + return client, nil +} + // Connect establishes the initial websocket connection. This is necessary when // a client was created after setting the DisableConnectOnNew field of the // Config struct. @@ -1441,3 +1654,69 @@ func (c *Client) BackendVersion() (BackendVersion, error) { return *c.backendVersion, nil } + +func (c *Client) sendAsync() FutureGetBulkResult { + // convert the array of marshalled json requests to a single request we can send + responseChan := make(chan *Response, 1) + marshalledRequest := []byte("[") + for iter := c.batchList.Front(); iter != nil; iter = iter.Next() { + request := iter.Value.(*jsonRequest) + marshalledRequest = append(marshalledRequest, request.marshalledJSON...) + marshalledRequest = append(marshalledRequest, []byte(",")...) + } + if len(marshalledRequest) > 0 { + // removes the trailing comma to process the request individually + marshalledRequest = marshalledRequest[:len(marshalledRequest)-1] + } + marshalledRequest = append(marshalledRequest, []byte("]")...) + request := jsonRequest{ + id: c.NextID(), + method: "", + cmd: nil, + marshalledJSON: marshalledRequest, + responseChan: responseChan, + } + c.sendPostRequest(&request) + return responseChan +} + +// Marshall's bulk requests and sends to the server +// creates a response channel to receive the response +func (c *Client) Send() error { + // if batchlist is empty, there's nothing to send + if c.batchList.Len() == 0 { + return nil + } + + // clear batchlist in case of an error + defer func() { + c.batchList = list.New() + }() + + result, err := c.sendAsync().Receive() + + if err != nil { + return err + } + + for iter := c.batchList.Front(); iter != nil; iter = iter.Next() { + var requestError error + request := iter.Value.(*jsonRequest) + individualResult := result[request.id] + fullResult, err := json.Marshal(individualResult.Result) + if err != nil { + return err + } + + if individualResult.Error != nil { + requestError = individualResult.Error + } + + result := Response{ + result: fullResult, + err: requestError, + } + request.responseChan <- &result + } + return nil +} diff --git a/rpcclient/mining.go b/rpcclient/mining.go index 76a9d30580..680a63b6d5 100644 --- a/rpcclient/mining.go +++ b/rpcclient/mining.go @@ -11,17 +11,17 @@ import ( "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/chaincfg/chainhash" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) // FutureGenerateResult is a future promise to deliver the result of a // GenerateAsync RPC invocation (or an applicable error). -type FutureGenerateResult chan *response +type FutureGenerateResult chan *Response -// Receive waits for the response promised by the future and returns a list of +// Receive waits for the Response promised by the future and returns a list of // block hashes generated by the call. func (r FutureGenerateResult) Receive() ([]*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -53,7 +53,7 @@ func (r FutureGenerateResult) Receive() ([]*chainhash.Hash, error) { // See Generate for the blocking version and more details. func (c *Client) GenerateAsync(numBlocks uint32) FutureGenerateResult { cmd := btcjson.NewGenerateCmd(numBlocks) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // Generate generates numBlocks blocks and returns their hashes. @@ -61,14 +61,61 @@ func (c *Client) Generate(numBlocks uint32) ([]*chainhash.Hash, error) { return c.GenerateAsync(numBlocks).Receive() } +// FutureGenerateToAddressResult is a future promise to deliver the result of a +// GenerateToAddressResult RPC invocation (or an applicable error). +type FutureGenerateToAddressResult chan *Response + +// Receive waits for the Response promised by the future and returns the hashes of +// of the generated blocks. +func (f FutureGenerateToAddressResult) Receive() ([]*chainhash.Hash, error) { + res, err := ReceiveFuture(f) + if err != nil { + return nil, err + } + + // Unmarshal result as a list of strings. + var result []string + err = json.Unmarshal(res, &result) + if err != nil { + return nil, err + } + + // Convert each block hash to a chainhash.Hash and store a pointer to + // each. + convertedResult := make([]*chainhash.Hash, len(result)) + for i, hashString := range result { + convertedResult[i], err = chainhash.NewHashFromStr(hashString) + if err != nil { + return nil, err + } + } + + return convertedResult, nil +} + +// GenerateToAddressAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GenerateToAddress for the blocking version and more details. +func (c *Client) GenerateToAddressAsync(numBlocks int64, address btcutil.Address, maxTries *int64) FutureGenerateToAddressResult { + cmd := btcjson.NewGenerateToAddressCmd(numBlocks, address.EncodeAddress(), maxTries) + return c.SendCmd(cmd) +} + +// GenerateToAddress generates numBlocks blocks to the given address and returns their hashes. +func (c *Client) GenerateToAddress(numBlocks int64, address btcutil.Address, maxTries *int64) ([]*chainhash.Hash, error) { + return c.GenerateToAddressAsync(numBlocks, address, maxTries).Receive() +} + // FutureGetGenerateResult is a future promise to deliver the result of a // GetGenerateAsync RPC invocation (or an applicable error). -type FutureGetGenerateResult chan *response +type FutureGetGenerateResult chan *Response -// Receive waits for the response promised by the future and returns true if the +// Receive waits for the Response promised by the future and returns true if the // server is set to mine, otherwise false. func (r FutureGetGenerateResult) Receive() (bool, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return false, err } @@ -90,7 +137,7 @@ func (r FutureGetGenerateResult) Receive() (bool, error) { // See GetGenerate for the blocking version and more details. func (c *Client) GetGenerateAsync() FutureGetGenerateResult { cmd := btcjson.NewGetGenerateCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetGenerate returns true if the server is set to mine, otherwise false. @@ -100,12 +147,12 @@ func (c *Client) GetGenerate() (bool, error) { // FutureSetGenerateResult is a future promise to deliver the result of a // SetGenerateAsync RPC invocation (or an applicable error). -type FutureSetGenerateResult chan *response +type FutureSetGenerateResult chan *Response -// Receive waits for the response promised by the future and returns an error if +// Receive waits for the Response promised by the future and returns an error if // any occurred when setting the server to generate coins (mine) or not. func (r FutureSetGenerateResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -116,7 +163,7 @@ func (r FutureSetGenerateResult) Receive() error { // See SetGenerate for the blocking version and more details. func (c *Client) SetGenerateAsync(enable bool, numCPUs int) FutureSetGenerateResult { cmd := btcjson.NewSetGenerateCmd(enable, &numCPUs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SetGenerate sets the server to generate coins (mine) or not. @@ -126,13 +173,13 @@ func (c *Client) SetGenerate(enable bool, numCPUs int) error { // FutureGetHashesPerSecResult is a future promise to deliver the result of a // GetHashesPerSecAsync RPC invocation (or an applicable error). -type FutureGetHashesPerSecResult chan *response +type FutureGetHashesPerSecResult chan *Response -// Receive waits for the response promised by the future and returns a recent +// Receive waits for the Response promised by the future and returns a recent // hashes per second performance measurement while generating coins (mining). // Zero is returned if the server is not mining. func (r FutureGetHashesPerSecResult) Receive() (int64, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return -1, err } @@ -154,7 +201,7 @@ func (r FutureGetHashesPerSecResult) Receive() (int64, error) { // See GetHashesPerSec for the blocking version and more details. func (c *Client) GetHashesPerSecAsync() FutureGetHashesPerSecResult { cmd := btcjson.NewGetHashesPerSecCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetHashesPerSec returns a recent hashes per second performance measurement @@ -166,12 +213,12 @@ func (c *Client) GetHashesPerSec() (int64, error) { // FutureGetMiningInfoResult is a future promise to deliver the result of a // GetMiningInfoAsync RPC invocation (or an applicable error). -type FutureGetMiningInfoResult chan *response +type FutureGetMiningInfoResult chan *Response -// Receive waits for the response promised by the future and returns the mining +// Receive waits for the Response promised by the future and returns the mining // information. func (r FutureGetMiningInfoResult) Receive() (*btcjson.GetMiningInfoResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -193,7 +240,7 @@ func (r FutureGetMiningInfoResult) Receive() (*btcjson.GetMiningInfoResult, erro // See GetMiningInfo for the blocking version and more details. func (c *Client) GetMiningInfoAsync() FutureGetMiningInfoResult { cmd := btcjson.NewGetMiningInfoCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetMiningInfo returns mining information. @@ -203,19 +250,19 @@ func (c *Client) GetMiningInfo() (*btcjson.GetMiningInfoResult, error) { // FutureGetNetworkHashPS is a future promise to deliver the result of a // GetNetworkHashPSAsync RPC invocation (or an applicable error). -type FutureGetNetworkHashPS chan *response +type FutureGetNetworkHashPS chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // estimated network hashes per second for the block heights provided by the // parameters. -func (r FutureGetNetworkHashPS) Receive() (int64, error) { - res, err := receiveFuture(r) +func (r FutureGetNetworkHashPS) Receive() (float64, error) { + res, err := ReceiveFuture(r) if err != nil { return -1, err } - // Unmarshal result as an int64. - var result int64 + // Unmarshal result as an float64. + var result float64 err = json.Unmarshal(res, &result) if err != nil { return 0, err @@ -231,7 +278,7 @@ func (r FutureGetNetworkHashPS) Receive() (int64, error) { // See GetNetworkHashPS for the blocking version and more details. func (c *Client) GetNetworkHashPSAsync() FutureGetNetworkHashPS { cmd := btcjson.NewGetNetworkHashPSCmd(nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetNetworkHashPS returns the estimated network hashes per second using the @@ -239,7 +286,7 @@ func (c *Client) GetNetworkHashPSAsync() FutureGetNetworkHashPS { // // See GetNetworkHashPS2 to override the number of blocks to use and // GetNetworkHashPS3 to override the height at which to calculate the estimate. -func (c *Client) GetNetworkHashPS() (int64, error) { +func (c *Client) GetNetworkHashPS() (float64, error) { return c.GetNetworkHashPSAsync().Receive() } @@ -250,7 +297,7 @@ func (c *Client) GetNetworkHashPS() (int64, error) { // See GetNetworkHashPS2 for the blocking version and more details. func (c *Client) GetNetworkHashPS2Async(blocks int) FutureGetNetworkHashPS { cmd := btcjson.NewGetNetworkHashPSCmd(&blocks, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetNetworkHashPS2 returns the estimated network hashes per second for the @@ -260,7 +307,7 @@ func (c *Client) GetNetworkHashPS2Async(blocks int) FutureGetNetworkHashPS { // // See GetNetworkHashPS to use defaults and GetNetworkHashPS3 to override the // height at which to calculate the estimate. -func (c *Client) GetNetworkHashPS2(blocks int) (int64, error) { +func (c *Client) GetNetworkHashPS2(blocks int) (float64, error) { return c.GetNetworkHashPS2Async(blocks).Receive() } @@ -271,7 +318,7 @@ func (c *Client) GetNetworkHashPS2(blocks int) (int64, error) { // See GetNetworkHashPS3 for the blocking version and more details. func (c *Client) GetNetworkHashPS3Async(blocks, height int) FutureGetNetworkHashPS { cmd := btcjson.NewGetNetworkHashPSCmd(&blocks, &height) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetNetworkHashPS3 returns the estimated network hashes per second for the @@ -280,18 +327,18 @@ func (c *Client) GetNetworkHashPS3Async(blocks, height int) FutureGetNetworkHash // of blocks since the last difficulty change will be used. // // See GetNetworkHashPS and GetNetworkHashPS2 to use defaults. -func (c *Client) GetNetworkHashPS3(blocks, height int) (int64, error) { +func (c *Client) GetNetworkHashPS3(blocks, height int) (float64, error) { return c.GetNetworkHashPS3Async(blocks, height).Receive() } // FutureGetWork is a future promise to deliver the result of a // GetWorkAsync RPC invocation (or an applicable error). -type FutureGetWork chan *response +type FutureGetWork chan *Response -// Receive waits for the response promised by the future and returns the hash +// Receive waits for the Response promised by the future and returns the hash // data to work on. func (r FutureGetWork) Receive() (*btcjson.GetWorkResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -313,7 +360,7 @@ func (r FutureGetWork) Receive() (*btcjson.GetWorkResult, error) { // See GetWork for the blocking version and more details. func (c *Client) GetWorkAsync() FutureGetWork { cmd := btcjson.NewGetWorkCmd(nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetWork returns hash data to work on. @@ -325,12 +372,12 @@ func (c *Client) GetWork() (*btcjson.GetWorkResult, error) { // FutureGetWorkSubmit is a future promise to deliver the result of a // GetWorkSubmitAsync RPC invocation (or an applicable error). -type FutureGetWorkSubmit chan *response +type FutureGetWorkSubmit chan *Response -// Receive waits for the response promised by the future and returns whether +// Receive waits for the Response promised by the future and returns whether // or not the submitted block header was accepted. func (r FutureGetWorkSubmit) Receive() (bool, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return false, err } @@ -352,7 +399,7 @@ func (r FutureGetWorkSubmit) Receive() (bool, error) { // See GetWorkSubmit for the blocking version and more details. func (c *Client) GetWorkSubmitAsync(data string) FutureGetWorkSubmit { cmd := btcjson.NewGetWorkCmd(&data) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetWorkSubmit submits a block header which is a solution to previously @@ -365,12 +412,12 @@ func (c *Client) GetWorkSubmit(data string) (bool, error) { // FutureSubmitBlockResult is a future promise to deliver the result of a // SubmitBlockAsync RPC invocation (or an applicable error). -type FutureSubmitBlockResult chan *response +type FutureSubmitBlockResult chan *Response -// Receive waits for the response promised by the future and returns an error if +// Receive waits for the Response promised by the future and returns an error if // any occurred when submitting the block. func (r FutureSubmitBlockResult) Receive() error { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return err } @@ -406,7 +453,7 @@ func (c *Client) SubmitBlockAsync(block *btcutil.Block, options *btcjson.SubmitB } cmd := btcjson.NewSubmitBlockCmd(blockHex, options) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SubmitBlock attempts to submit a new block into the bitcoin network. @@ -414,4 +461,39 @@ func (c *Client) SubmitBlock(block *btcutil.Block, options *btcjson.SubmitBlockO return c.SubmitBlockAsync(block, options).Receive() } -// TODO(davec): Implement GetBlockTemplate +// FutureGetBlockTemplateResponse is a future promise to deliver the result of a +// GetBlockTemplateAsync RPC invocation (or an applicable error). +type FutureGetBlockTemplateResponse chan *Response + +// Receive waits for the Response promised by the future and returns an error if +// any occurred when retrieving the block template. +func (r FutureGetBlockTemplateResponse) Receive() (*btcjson.GetBlockTemplateResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + // Unmarshal result as a getwork result object. + var result btcjson.GetBlockTemplateResult + err = json.Unmarshal(res, &result) + if err != nil { + return nil, err + } + + return &result, nil +} + +// GetBlockTemplateAsync returns an instance of a type that can be used to get the +// result of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See GetBlockTemplate for the blocking version and more details. +func (c *Client) GetBlockTemplateAsync(req *btcjson.TemplateRequest) FutureGetBlockTemplateResponse { + cmd := btcjson.NewGetBlockTemplateCmd(req) + return c.SendCmd(cmd) +} + +// GetBlockTemplate returns a new block template for mining. +func (c *Client) GetBlockTemplate(req *btcjson.TemplateRequest) (*btcjson.GetBlockTemplateResult, error) { + return c.GetBlockTemplateAsync(req).Receive() +} diff --git a/rpcclient/net.go b/rpcclient/net.go index 6eb7362541..da2006c224 100644 --- a/rpcclient/net.go +++ b/rpcclient/net.go @@ -35,12 +35,12 @@ func (cmd AddNodeCommand) String() string { // FutureAddNodeResult is a future promise to deliver the result of an // AddNodeAsync RPC invocation (or an applicable error). -type FutureAddNodeResult chan *response +type FutureAddNodeResult chan *Response -// Receive waits for the response promised by the future and returns an error if +// Receive waits for the Response promised by the future and returns an error if // any occurred when performing the specified command. func (r FutureAddNodeResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -51,7 +51,7 @@ func (r FutureAddNodeResult) Receive() error { // See AddNode for the blocking version and more details. func (c *Client) AddNodeAsync(host string, command AddNodeCommand) FutureAddNodeResult { cmd := btcjson.NewAddNodeCmd(host, btcjson.AddNodeSubCmd(command)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // AddNode attempts to perform the passed command on the passed persistent peer. @@ -65,12 +65,12 @@ func (c *Client) AddNode(host string, command AddNodeCommand) error { // FutureNodeResult is a future promise to deliver the result of a NodeAsync // RPC invocation (or an applicable error). -type FutureNodeResult chan *response +type FutureNodeResult chan *Response -// Receive waits for the response promised by the future and returns an error if +// Receive waits for the Response promised by the future and returns an error if // any occurred when performing the specified command. func (r FutureNodeResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -82,7 +82,7 @@ func (r FutureNodeResult) Receive() error { func (c *Client) NodeAsync(command btcjson.NodeSubCmd, host string, connectSubCmd *string) FutureNodeResult { cmd := btcjson.NewNodeCmd(command, host, connectSubCmd) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // Node attempts to perform the passed node command on the host. @@ -90,7 +90,7 @@ func (c *Client) NodeAsync(command btcjson.NodeSubCmd, host string, // connect or diconnect a non-persistent one. // // The connectSubCmd should be set either "perm" or "temp", depending on -// whether we are targetting a persistent or non-persistent peer. Passing nil +// whether we are targeting a persistent or non-persistent peer. Passing nil // will cause the default value to be used, which currently is "temp". func (c *Client) Node(command btcjson.NodeSubCmd, host string, connectSubCmd *string) error { @@ -99,12 +99,12 @@ func (c *Client) Node(command btcjson.NodeSubCmd, host string, // FutureGetAddedNodeInfoResult is a future promise to deliver the result of a // GetAddedNodeInfoAsync RPC invocation (or an applicable error). -type FutureGetAddedNodeInfoResult chan *response +type FutureGetAddedNodeInfoResult chan *Response -// Receive waits for the response promised by the future and returns information +// Receive waits for the Response promised by the future and returns information // about manually added (persistent) peers. func (r FutureGetAddedNodeInfoResult) Receive() ([]btcjson.GetAddedNodeInfoResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -126,7 +126,7 @@ func (r FutureGetAddedNodeInfoResult) Receive() ([]btcjson.GetAddedNodeInfoResul // See GetAddedNodeInfo for the blocking version and more details. func (c *Client) GetAddedNodeInfoAsync(peer string) FutureGetAddedNodeInfoResult { cmd := btcjson.NewGetAddedNodeInfoCmd(true, &peer) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetAddedNodeInfo returns information about manually added (persistent) peers. @@ -139,12 +139,12 @@ func (c *Client) GetAddedNodeInfo(peer string) ([]btcjson.GetAddedNodeInfoResult // FutureGetAddedNodeInfoNoDNSResult is a future promise to deliver the result // of a GetAddedNodeInfoNoDNSAsync RPC invocation (or an applicable error). -type FutureGetAddedNodeInfoNoDNSResult chan *response +type FutureGetAddedNodeInfoNoDNSResult chan *Response -// Receive waits for the response promised by the future and returns a list of +// Receive waits for the Response promised by the future and returns a list of // manually added (persistent) peers. func (r FutureGetAddedNodeInfoNoDNSResult) Receive() ([]string, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -166,7 +166,7 @@ func (r FutureGetAddedNodeInfoNoDNSResult) Receive() ([]string, error) { // See GetAddedNodeInfoNoDNS for the blocking version and more details. func (c *Client) GetAddedNodeInfoNoDNSAsync(peer string) FutureGetAddedNodeInfoNoDNSResult { cmd := btcjson.NewGetAddedNodeInfoCmd(false, &peer) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetAddedNodeInfoNoDNS returns a list of manually added (persistent) peers. @@ -180,12 +180,12 @@ func (c *Client) GetAddedNodeInfoNoDNS(peer string) ([]string, error) { // FutureGetConnectionCountResult is a future promise to deliver the result // of a GetConnectionCountAsync RPC invocation (or an applicable error). -type FutureGetConnectionCountResult chan *response +type FutureGetConnectionCountResult chan *Response -// Receive waits for the response promised by the future and returns the number +// Receive waits for the Response promised by the future and returns the number // of active connections to other peers. func (r FutureGetConnectionCountResult) Receive() (int64, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -207,7 +207,7 @@ func (r FutureGetConnectionCountResult) Receive() (int64, error) { // See GetConnectionCount for the blocking version and more details. func (c *Client) GetConnectionCountAsync() FutureGetConnectionCountResult { cmd := btcjson.NewGetConnectionCountCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetConnectionCount returns the number of active connections to other peers. @@ -217,12 +217,12 @@ func (c *Client) GetConnectionCount() (int64, error) { // FuturePingResult is a future promise to deliver the result of a PingAsync RPC // invocation (or an applicable error). -type FuturePingResult chan *response +type FuturePingResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of queueing a ping to be sent to each connected peer. func (r FuturePingResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -233,7 +233,7 @@ func (r FuturePingResult) Receive() error { // See Ping for the blocking version and more details. func (c *Client) PingAsync() FuturePingResult { cmd := btcjson.NewPingCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // Ping queues a ping to be sent to each connected peer. @@ -246,12 +246,12 @@ func (c *Client) Ping() error { // FutureGetNetworkInfoResult is a future promise to deliver the result of a // GetNetworkInfoAsync RPC invocation (or an applicable error). -type FutureGetNetworkInfoResult chan *response +type FutureGetNetworkInfoResult chan *Response -// Receive waits for the response promised by the future and returns data about +// Receive waits for the Response promised by the future and returns data about // the current network. func (r FutureGetNetworkInfoResult) Receive() (*btcjson.GetNetworkInfoResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -273,7 +273,7 @@ func (r FutureGetNetworkInfoResult) Receive() (*btcjson.GetNetworkInfoResult, er // See GetNetworkInfo for the blocking version and more details. func (c *Client) GetNetworkInfoAsync() FutureGetNetworkInfoResult { cmd := btcjson.NewGetNetworkInfoCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetNetworkInfo returns data about the current network. @@ -281,14 +281,51 @@ func (c *Client) GetNetworkInfo() (*btcjson.GetNetworkInfoResult, error) { return c.GetNetworkInfoAsync().Receive() } +// FutureGetNodeAddressesResult is a future promise to deliver the result of a +// GetNodeAddressesAsync RPC invocation (or an applicable error). +type FutureGetNodeAddressesResult chan *Response + +// Receive waits for the Response promised by the future and returns data about +// known node addresses. +func (r FutureGetNodeAddressesResult) Receive() ([]btcjson.GetNodeAddressesResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + // Unmarshal result as an array of getnodeaddresses result objects. + var nodeAddresses []btcjson.GetNodeAddressesResult + err = json.Unmarshal(res, &nodeAddresses) + if err != nil { + return nil, err + } + + return nodeAddresses, nil +} + +// GetNodeAddressesAsync returns an instance of a type that can be used to get the +// result of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See GetNodeAddresses for the blocking version and more details. +func (c *Client) GetNodeAddressesAsync(count *int32) FutureGetNodeAddressesResult { + cmd := btcjson.NewGetNodeAddressesCmd(count) + return c.SendCmd(cmd) +} + +// GetNodeAddresses returns data about known node addresses. +func (c *Client) GetNodeAddresses(count *int32) ([]btcjson.GetNodeAddressesResult, error) { + return c.GetNodeAddressesAsync(count).Receive() +} + // FutureGetPeerInfoResult is a future promise to deliver the result of a // GetPeerInfoAsync RPC invocation (or an applicable error). -type FutureGetPeerInfoResult chan *response +type FutureGetPeerInfoResult chan *Response -// Receive waits for the response promised by the future and returns data about +// Receive waits for the Response promised by the future and returns data about // each connected network peer. func (r FutureGetPeerInfoResult) Receive() ([]btcjson.GetPeerInfoResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -310,7 +347,7 @@ func (r FutureGetPeerInfoResult) Receive() ([]btcjson.GetPeerInfoResult, error) // See GetPeerInfo for the blocking version and more details. func (c *Client) GetPeerInfoAsync() FutureGetPeerInfoResult { cmd := btcjson.NewGetPeerInfoCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetPeerInfo returns data about each connected network peer. @@ -320,12 +357,12 @@ func (c *Client) GetPeerInfo() ([]btcjson.GetPeerInfoResult, error) { // FutureGetNetTotalsResult is a future promise to deliver the result of a // GetNetTotalsAsync RPC invocation (or an applicable error). -type FutureGetNetTotalsResult chan *response +type FutureGetNetTotalsResult chan *Response -// Receive waits for the response promised by the future and returns network +// Receive waits for the Response promised by the future and returns network // traffic statistics. func (r FutureGetNetTotalsResult) Receive() (*btcjson.GetNetTotalsResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -347,7 +384,7 @@ func (r FutureGetNetTotalsResult) Receive() (*btcjson.GetNetTotalsResult, error) // See GetNetTotals for the blocking version and more details. func (c *Client) GetNetTotalsAsync() FutureGetNetTotalsResult { cmd := btcjson.NewGetNetTotalsCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetNetTotals returns network traffic statistics. diff --git a/rpcclient/notify.go b/rpcclient/notify.go index 2454a94696..225af281cf 100644 --- a/rpcclient/notify.go +++ b/rpcclient/notify.go @@ -16,7 +16,7 @@ import ( "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) var ( @@ -69,9 +69,9 @@ func newNotificationState() *notificationState { // result waiting on the channel with the reply set to nil. This is useful // to ignore things such as notifications when the caller didn't specify any // notification handlers. -func newNilFutureResult() chan *response { - responseChan := make(chan *response, 1) - responseChan <- &response{result: nil, err: nil} +func newNilFutureResult() chan *Response { + responseChan := make(chan *Response, 1) + responseChan <- &Response{result: nil, err: nil} return responseChan } @@ -95,7 +95,7 @@ type NotificationHandlers struct { // NotifyBlocks has been made to register for the notification and the // function is non-nil. // - // NOTE: Deprecated. Use OnFilteredBlockConnected instead. + // Deprecated: Use OnFilteredBlockConnected instead. OnBlockConnected func(hash *chainhash.Hash, height int32, t time.Time) // OnFilteredBlockConnected is invoked when a block is connected to the @@ -111,7 +111,7 @@ type NotificationHandlers struct { // NotifyBlocks has been made to register for the notification and the // function is non-nil. // - // NOTE: Deprecated. Use OnFilteredBlockDisconnected instead. + // Deprecated: Use OnFilteredBlockDisconnected instead. OnBlockDisconnected func(hash *chainhash.Hash, height int32, t time.Time) // OnFilteredBlockDisconnected is invoked when a block is disconnected @@ -127,7 +127,7 @@ type NotificationHandlers struct { // preceding call to NotifyReceived, Rescan, or RescanEndHeight has been // made to register for the notification and the function is non-nil. // - // NOTE: Deprecated. Use OnRelevantTxAccepted instead. + // Deprecated: Use OnRelevantTxAccepted instead. OnRecvTx func(transaction *btcutil.Tx, details *btcjson.BlockDetails) // OnRedeemingTx is invoked when a transaction that spends a registered @@ -141,7 +141,7 @@ type NotificationHandlers struct { // funds to the registered addresses. This means it is possible for // this to invoked indirectly as the result of a NotifyReceived call. // - // NOTE: Deprecated. Use OnRelevantTxAccepted instead. + // Deprecated: Use OnRelevantTxAccepted instead. OnRedeemingTx func(transaction *btcutil.Tx, details *btcjson.BlockDetails) // OnRelevantTxAccepted is invoked when an unmined transaction passes @@ -157,14 +157,14 @@ type NotificationHandlers struct { // result of a rescan request, due to how btcd may send various rescan // notifications after the rescan request has already returned. // - // NOTE: Deprecated. Not used with RescanBlocks. + // Deprecated: Not used with RescanBlocks. OnRescanFinished func(hash *chainhash.Hash, height int32, blkTime time.Time) // OnRescanProgress is invoked periodically when a rescan is underway. // It will only be invoked if a preceding call to Rescan or // RescanEndHeight has been made and the function is non-nil. // - // NOTE: Deprecated. Not used with RescanBlocks. + // Deprecated: Not used with RescanBlocks. OnRescanProgress func(hash *chainhash.Hash, height int32, blkTime time.Time) // OnTxAccepted is invoked when a transaction is accepted into the @@ -856,12 +856,12 @@ func parseWalletLockStateNtfnParams(params []json.RawMessage) (account string, // FutureNotifyBlocksResult is a future promise to deliver the result of a // NotifyBlocksAsync RPC invocation (or an applicable error). -type FutureNotifyBlocksResult chan *response +type FutureNotifyBlocksResult chan *Response -// Receive waits for the response promised by the future and returns an error +// Receive waits for the Response promised by the future and returns an error // if the registration was not successful. func (r FutureNotifyBlocksResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -885,7 +885,7 @@ func (c *Client) NotifyBlocksAsync() FutureNotifyBlocksResult { } cmd := btcjson.NewNotifyBlocksCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // NotifyBlocks registers the client to receive notifications when blocks are @@ -905,13 +905,13 @@ func (c *Client) NotifyBlocks() error { // FutureNotifySpentResult is a future promise to deliver the result of a // NotifySpentAsync RPC invocation (or an applicable error). // -// NOTE: Deprecated. Use FutureLoadTxFilterResult instead. -type FutureNotifySpentResult chan *response +// Deprecated: Use FutureLoadTxFilterResult instead. +type FutureNotifySpentResult chan *Response -// Receive waits for the response promised by the future and returns an error +// Receive waits for the Response promised by the future and returns an error // if the registration was not successful. func (r FutureNotifySpentResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -931,7 +931,7 @@ func (c *Client) notifySpentInternal(outpoints []btcjson.OutPoint) FutureNotifyS } cmd := btcjson.NewNotifySpentCmd(outpoints) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // newOutPointFromWire constructs the btcjson representation of a transaction @@ -951,7 +951,7 @@ func newOutPointFromWire(op *wire.OutPoint) btcjson.OutPoint { // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use LoadTxFilterAsync instead. +// Deprecated: Use LoadTxFilterAsync instead. func (c *Client) NotifySpentAsync(outpoints []*wire.OutPoint) FutureNotifySpentResult { // Not supported in HTTP POST mode. if c.config.HTTPPostMode { @@ -969,7 +969,7 @@ func (c *Client) NotifySpentAsync(outpoints []*wire.OutPoint) FutureNotifySpentR ops = append(ops, newOutPointFromWire(outpoint)) } cmd := btcjson.NewNotifySpentCmd(ops) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // NotifySpent registers the client to receive notifications when the passed @@ -983,19 +983,19 @@ func (c *Client) NotifySpentAsync(outpoints []*wire.OutPoint) FutureNotifySpentR // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use LoadTxFilter instead. +// Deprecated: Use LoadTxFilter instead. func (c *Client) NotifySpent(outpoints []*wire.OutPoint) error { return c.NotifySpentAsync(outpoints).Receive() } // FutureNotifyNewTransactionsResult is a future promise to deliver the result // of a NotifyNewTransactionsAsync RPC invocation (or an applicable error). -type FutureNotifyNewTransactionsResult chan *response +type FutureNotifyNewTransactionsResult chan *Response -// Receive waits for the response promised by the future and returns an error +// Receive waits for the Response promised by the future and returns an error // if the registration was not successful. func (r FutureNotifyNewTransactionsResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1019,7 +1019,7 @@ func (c *Client) NotifyNewTransactionsAsync(verbose bool) FutureNotifyNewTransac } cmd := btcjson.NewNotifyNewTransactionsCmd(&verbose) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // NotifyNewTransactions registers the client to receive notifications every @@ -1040,13 +1040,13 @@ func (c *Client) NotifyNewTransactions(verbose bool) error { // FutureNotifyReceivedResult is a future promise to deliver the result of a // NotifyReceivedAsync RPC invocation (or an applicable error). // -// NOTE: Deprecated. Use FutureLoadTxFilterResult instead. -type FutureNotifyReceivedResult chan *response +// Deprecated: Use FutureLoadTxFilterResult instead. +type FutureNotifyReceivedResult chan *Response -// Receive waits for the response promised by the future and returns an error +// Receive waits for the Response promised by the future and returns an error // if the registration was not successful. func (r FutureNotifyReceivedResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1067,7 +1067,7 @@ func (c *Client) notifyReceivedInternal(addresses []string) FutureNotifyReceived // Convert addresses to strings. cmd := btcjson.NewNotifyReceivedCmd(addresses) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // NotifyReceivedAsync returns an instance of a type that can be used to get the @@ -1078,7 +1078,7 @@ func (c *Client) notifyReceivedInternal(addresses []string) FutureNotifyReceived // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use LoadTxFilterAsync instead. +// Deprecated: Use LoadTxFilterAsync instead. func (c *Client) NotifyReceivedAsync(addresses []btcutil.Address) FutureNotifyReceivedResult { // Not supported in HTTP POST mode. if c.config.HTTPPostMode { @@ -1097,7 +1097,7 @@ func (c *Client) NotifyReceivedAsync(addresses []btcutil.Address) FutureNotifyRe addrs = append(addrs, addr.String()) } cmd := btcjson.NewNotifyReceivedCmd(addrs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // NotifyReceived registers the client to receive notifications every time a @@ -1118,7 +1118,7 @@ func (c *Client) NotifyReceivedAsync(addresses []btcutil.Address) FutureNotifyRe // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use LoadTxFilter instead. +// Deprecated: Use LoadTxFilter instead. func (c *Client) NotifyReceived(addresses []btcutil.Address) error { return c.NotifyReceivedAsync(addresses).Receive() } @@ -1126,13 +1126,13 @@ func (c *Client) NotifyReceived(addresses []btcutil.Address) error { // FutureRescanResult is a future promise to deliver the result of a RescanAsync // or RescanEndHeightAsync RPC invocation (or an applicable error). // -// NOTE: Deprecated. Use FutureRescanBlocksResult instead. -type FutureRescanResult chan *response +// Deprecated: Use FutureRescanBlocksResult instead. +type FutureRescanResult chan *Response -// Receive waits for the response promised by the future and returns an error +// Receive waits for the Response promised by the future and returns an error // if the rescan was not successful. func (r FutureRescanResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1150,7 +1150,7 @@ func (r FutureRescanResult) Receive() error { // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use RescanBlocksAsync instead. +// Deprecated: Use RescanBlocksAsync instead. func (c *Client) RescanAsync(startBlock *chainhash.Hash, addresses []btcutil.Address, outpoints []*wire.OutPoint) FutureRescanResult { @@ -1185,7 +1185,7 @@ func (c *Client) RescanAsync(startBlock *chainhash.Hash, } cmd := btcjson.NewRescanCmd(startBlockHashStr, addrs, ops, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // Rescan rescans the block chain starting from the provided starting block to @@ -1215,7 +1215,7 @@ func (c *Client) RescanAsync(startBlock *chainhash.Hash, // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use RescanBlocks instead. +// Deprecated: Use RescanBlocks instead. func (c *Client) Rescan(startBlock *chainhash.Hash, addresses []btcutil.Address, outpoints []*wire.OutPoint) error { @@ -1231,7 +1231,7 @@ func (c *Client) Rescan(startBlock *chainhash.Hash, // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use RescanBlocksAsync instead. +// Deprecated: Use RescanBlocksAsync instead. func (c *Client) RescanEndBlockAsync(startBlock *chainhash.Hash, addresses []btcutil.Address, outpoints []*wire.OutPoint, endBlock *chainhash.Hash) FutureRescanResult { @@ -1270,7 +1270,7 @@ func (c *Client) RescanEndBlockAsync(startBlock *chainhash.Hash, cmd := btcjson.NewRescanCmd(startBlockHashStr, addrs, ops, &endBlockHashStr) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // RescanEndHeight rescans the block chain starting from the provided starting @@ -1293,7 +1293,7 @@ func (c *Client) RescanEndBlockAsync(startBlock *chainhash.Hash, // // NOTE: This is a btcd extension and requires a websocket connection. // -// NOTE: Deprecated. Use RescanBlocks instead. +// Deprecated: Use RescanBlocks instead. func (c *Client) RescanEndHeight(startBlock *chainhash.Hash, addresses []btcutil.Address, outpoints []*wire.OutPoint, endBlock *chainhash.Hash) error { @@ -1307,15 +1307,15 @@ func (c *Client) RescanEndHeight(startBlock *chainhash.Hash, // // NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient // and requires a websocket connection. -type FutureLoadTxFilterResult chan *response +type FutureLoadTxFilterResult chan *Response -// Receive waits for the response promised by the future and returns an error +// Receive waits for the Response promised by the future and returns an error // if the registration was not successful. // // NOTE: This is a btcd extension ported from github.com/decred/dcrrpcclient // and requires a websocket connection. func (r FutureLoadTxFilterResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1343,7 +1343,7 @@ func (c *Client) LoadTxFilterAsync(reload bool, addresses []btcutil.Address, } cmd := btcjson.NewLoadTxFilterCmd(reload, addrStrs, outPointObjects) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // LoadTxFilter loads, reloads, or adds data to a websocket client's transaction diff --git a/rpcclient/rawrequest.go b/rpcclient/rawrequest.go index dd16fd049e..f446b0082b 100644 --- a/rpcclient/rawrequest.go +++ b/rpcclient/rawrequest.go @@ -13,12 +13,12 @@ import ( // FutureRawResult is a future promise to deliver the result of a RawRequest RPC // invocation (or an applicable error). -type FutureRawResult chan *response +type FutureRawResult chan *Response -// Receive waits for the response promised by the future and returns the raw +// Receive waits for the Response promised by the future and returns the raw // response, or an error if the request was unsuccessful. func (r FutureRawResult) Receive() (json.RawMessage, error) { - return receiveFuture(r) + return ReceiveFuture(r) } // RawRequestAsync returns an instance of a type that can be used to get the @@ -39,12 +39,12 @@ func (c *Client) RawRequestAsync(method string, params []json.RawMessage) Future } // Create a raw JSON-RPC request using the provided method and params - // and marshal it. This is done rather than using the sendCmd function + // and marshal it. This is done rather than using the SendCmd function // since that relies on marshalling registered btcjson commands rather // than custom commands. id := c.NextID() rawRequest := &btcjson.Request{ - Jsonrpc: "1.0", + Jsonrpc: btcjson.RpcVersion1, ID: id, Method: method, Params: params, @@ -55,7 +55,7 @@ func (c *Client) RawRequestAsync(method string, params []json.RawMessage) Future } // Generate the request and send it along with a channel to respond on. - responseChan := make(chan *response, 1) + responseChan := make(chan *Response, 1) jReq := &jsonRequest{ id: id, method: method, diff --git a/rpcclient/rawtransactions.go b/rpcclient/rawtransactions.go index 4bf4ee57fc..3643f2b0ca 100644 --- a/rpcclient/rawtransactions.go +++ b/rpcclient/rawtransactions.go @@ -12,7 +12,7 @@ import ( "github.com/btcsuite/btcd/btcjson" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" ) const ( @@ -66,12 +66,12 @@ func (s SigHashType) String() string { // FutureGetRawTransactionResult is a future promise to deliver the result of a // GetRawTransactionAsync RPC invocation (or an applicable error). -type FutureGetRawTransactionResult chan *response +type FutureGetRawTransactionResult chan *Response -// Receive waits for the response promised by the future and returns a +// Receive waits for the Response promised by the future and returns a // transaction given its hash. func (r FutureGetRawTransactionResult) Receive() (*btcutil.Tx, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -109,7 +109,7 @@ func (c *Client) GetRawTransactionAsync(txHash *chainhash.Hash) FutureGetRawTran } cmd := btcjson.NewGetRawTransactionCmd(hash, btcjson.Int(0)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetRawTransaction returns a transaction given its hash. @@ -123,12 +123,12 @@ func (c *Client) GetRawTransaction(txHash *chainhash.Hash) (*btcutil.Tx, error) // FutureGetRawTransactionVerboseResult is a future promise to deliver the // result of a GetRawTransactionVerboseAsync RPC invocation (or an applicable // error). -type FutureGetRawTransactionVerboseResult chan *response +type FutureGetRawTransactionVerboseResult chan *Response -// Receive waits for the response promised by the future and returns information +// Receive waits for the Response promised by the future and returns information // about a transaction given its hash. func (r FutureGetRawTransactionVerboseResult) Receive() (*btcjson.TxRawResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -155,7 +155,7 @@ func (c *Client) GetRawTransactionVerboseAsync(txHash *chainhash.Hash) FutureGet } cmd := btcjson.NewGetRawTransactionCmd(hash, btcjson.Int(1)) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetRawTransactionVerbose returns information about a transaction given @@ -168,12 +168,12 @@ func (c *Client) GetRawTransactionVerbose(txHash *chainhash.Hash) (*btcjson.TxRa // FutureDecodeRawTransactionResult is a future promise to deliver the result // of a DecodeRawTransactionAsync RPC invocation (or an applicable error). -type FutureDecodeRawTransactionResult chan *response +type FutureDecodeRawTransactionResult chan *Response -// Receive waits for the response promised by the future and returns information +// Receive waits for the Response promised by the future and returns information // about a transaction given its serialized bytes. func (r FutureDecodeRawTransactionResult) Receive() (*btcjson.TxRawResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -196,7 +196,7 @@ func (r FutureDecodeRawTransactionResult) Receive() (*btcjson.TxRawResult, error func (c *Client) DecodeRawTransactionAsync(serializedTx []byte) FutureDecodeRawTransactionResult { txHex := hex.EncodeToString(serializedTx) cmd := btcjson.NewDecodeRawTransactionCmd(txHex) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // DecodeRawTransaction returns information about a transaction given its @@ -205,15 +205,56 @@ func (c *Client) DecodeRawTransaction(serializedTx []byte) (*btcjson.TxRawResult return c.DecodeRawTransactionAsync(serializedTx).Receive() } +// FutureFundRawTransactionResult is a future promise to deliver the result +// of a FutureFundRawTransactionAsync RPC invocation (or an applicable error). +type FutureFundRawTransactionResult chan *Response + +// Receive waits for the Response promised by the future and returns information +// about a funding attempt +func (r FutureFundRawTransactionResult) Receive() (*btcjson.FundRawTransactionResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var marshalled btcjson.FundRawTransactionResult + if err := json.Unmarshal(res, &marshalled); err != nil { + return nil, err + } + + return &marshalled, nil +} + +// FundRawTransactionAsync returns an instance of a type that can be used to +// get the result of the RPC at some future time by invoking the Receive +// function on the returned instance. +// +// See FundRawTransaction for the blocking version and more details. +func (c *Client) FundRawTransactionAsync(tx *wire.MsgTx, opts btcjson.FundRawTransactionOpts, isWitness *bool) FutureFundRawTransactionResult { + var txBuf bytes.Buffer + if err := tx.Serialize(&txBuf); err != nil { + return newFutureError(err) + } + + cmd := btcjson.NewFundRawTransactionCmd(txBuf.Bytes(), opts, isWitness) + return c.SendCmd(cmd) +} + +// FundRawTransaction returns the result of trying to fund the given transaction with +// funds from the node wallet +func (c *Client) FundRawTransaction(tx *wire.MsgTx, opts btcjson.FundRawTransactionOpts, isWitness *bool) (*btcjson.FundRawTransactionResult, error) { + return c.FundRawTransactionAsync(tx, opts, isWitness).Receive() +} + // FutureCreateRawTransactionResult is a future promise to deliver the result // of a CreateRawTransactionAsync RPC invocation (or an applicable error). -type FutureCreateRawTransactionResult chan *response +type FutureCreateRawTransactionResult chan *Response -// Receive waits for the response promised by the future and returns a new +// Receive waits for the Response promised by the future and returns a new // transaction spending the provided inputs and sending to the provided // addresses. func (r FutureCreateRawTransactionResult) Receive() (*wire.MsgTx, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -233,8 +274,13 @@ func (r FutureCreateRawTransactionResult) Receive() (*wire.MsgTx, error) { // Deserialize the transaction and return it. var msgTx wire.MsgTx - if err := msgTx.Deserialize(bytes.NewReader(serializedTx)); err != nil { - return nil, err + // we try both the new and old encoding format + witnessErr := msgTx.Deserialize(bytes.NewReader(serializedTx)) + if witnessErr != nil { + legacyErr := msgTx.DeserializeNoWitness(bytes.NewReader(serializedTx)) + if legacyErr != nil { + return nil, legacyErr + } } return &msgTx, nil } @@ -252,11 +298,12 @@ func (c *Client) CreateRawTransactionAsync(inputs []btcjson.TransactionInput, convertedAmts[addr.String()] = amount.ToBTC() } cmd := btcjson.NewCreateRawTransactionCmd(inputs, convertedAmts, lockTime) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // CreateRawTransaction returns a new transaction spending the provided inputs -// and sending to the provided addresses. +// and sending to the provided addresses. If the inputs are either nil or an +// empty slice, it is interpreted as an empty slice. func (c *Client) CreateRawTransaction(inputs []btcjson.TransactionInput, amounts map[btcutil.Address]btcutil.Amount, lockTime *int64) (*wire.MsgTx, error) { @@ -265,13 +312,13 @@ func (c *Client) CreateRawTransaction(inputs []btcjson.TransactionInput, // FutureSendRawTransactionResult is a future promise to deliver the result // of a SendRawTransactionAsync RPC invocation (or an applicable error). -type FutureSendRawTransactionResult chan *response +type FutureSendRawTransactionResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of submitting the encoded transaction to the server which then relays it to // the network. func (r FutureSendRawTransactionResult) Receive() (*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -327,7 +374,7 @@ func (c *Client) SendRawTransactionAsync(tx *wire.MsgTx, allowHighFees bool) Fut cmd = btcjson.NewSendRawTransactionCmd(txHex, &allowHighFees) } - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendRawTransaction submits the encoded transaction to the server which will @@ -339,12 +386,12 @@ func (c *Client) SendRawTransaction(tx *wire.MsgTx, allowHighFees bool) (*chainh // FutureSignRawTransactionResult is a future promise to deliver the result // of one of the SignRawTransactionAsync family of RPC invocations (or an // applicable error). -type FutureSignRawTransactionResult chan *response +type FutureSignRawTransactionResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // signed transaction as well as whether or not all inputs are now signed. func (r FutureSignRawTransactionResult) Receive() (*wire.MsgTx, bool, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, false, err } @@ -388,7 +435,7 @@ func (c *Client) SignRawTransactionAsync(tx *wire.MsgTx) FutureSignRawTransactio } cmd := btcjson.NewSignRawTransactionCmd(txHex, nil, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SignRawTransaction signs inputs for the passed transaction and returns the @@ -419,7 +466,7 @@ func (c *Client) SignRawTransaction2Async(tx *wire.MsgTx, inputs []btcjson.RawTx } cmd := btcjson.NewSignRawTransactionCmd(txHex, &inputs, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SignRawTransaction2 signs inputs for the passed transaction given the list @@ -457,7 +504,7 @@ func (c *Client) SignRawTransaction3Async(tx *wire.MsgTx, cmd := btcjson.NewSignRawTransactionCmd(txHex, &inputs, &privKeysWIF, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SignRawTransaction3 signs inputs for the passed transaction given the list @@ -505,10 +552,10 @@ func (c *Client) SignRawTransaction4Async(tx *wire.MsgTx, cmd := btcjson.NewSignRawTransactionCmd(txHex, &inputs, &privKeysWIF, btcjson.String(string(hashType))) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } -// SignRawTransaction4 signs inputs for the passed transaction using the +// SignRawTransaction4 signs inputs for the passed transaction using // the specified signature hash type given the list of information about extra // input transactions and a potential list of private keys needed to perform // the signing process. The private keys, if specified, must be in wallet @@ -535,14 +582,157 @@ func (c *Client) SignRawTransaction4(tx *wire.MsgTx, hashType).Receive() } +// FutureSignRawTransactionWithWalletResult is a future promise to deliver +// the result of the SignRawTransactionWithWalletAsync RPC invocation (or +// an applicable error). +type FutureSignRawTransactionWithWalletResult chan *Response + +// Receive waits for the Response promised by the future and returns the +// signed transaction as well as whether or not all inputs are now signed. +func (r FutureSignRawTransactionWithWalletResult) Receive() (*wire.MsgTx, bool, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, false, err + } + + // Unmarshal as a signtransactionwithwallet result. + var signRawTxWithWalletResult btcjson.SignRawTransactionWithWalletResult + err = json.Unmarshal(res, &signRawTxWithWalletResult) + if err != nil { + return nil, false, err + } + + // Decode the serialized transaction hex to raw bytes. + serializedTx, err := hex.DecodeString(signRawTxWithWalletResult.Hex) + if err != nil { + return nil, false, err + } + + // Deserialize the transaction and return it. + var msgTx wire.MsgTx + if err := msgTx.Deserialize(bytes.NewReader(serializedTx)); err != nil { + return nil, false, err + } + + return &msgTx, signRawTxWithWalletResult.Complete, nil +} + +// SignRawTransactionWithWalletAsync returns an instance of a type that can be used +// to get the result of the RPC at some future time by invoking the Receive function +// on the returned instance. +// +// See SignRawTransactionWithWallet for the blocking version and more details. +func (c *Client) SignRawTransactionWithWalletAsync(tx *wire.MsgTx) FutureSignRawTransactionWithWalletResult { + txHex := "" + if tx != nil { + // Serialize the transaction and convert to hex string. + buf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize())) + if err := tx.Serialize(buf); err != nil { + return newFutureError(err) + } + txHex = hex.EncodeToString(buf.Bytes()) + } + + cmd := btcjson.NewSignRawTransactionWithWalletCmd(txHex, nil, nil) + return c.SendCmd(cmd) +} + +// SignRawTransactionWithWallet signs inputs for the passed transaction and returns +// the signed transaction as well as whether or not all inputs are now signed. +// +// This function assumes the RPC server already knows the input transactions for the +// passed transaction which needs to be signed and uses the default signature hash +// type. Use one of the SignRawTransactionWithWallet# variants to specify that +// information if needed. +func (c *Client) SignRawTransactionWithWallet(tx *wire.MsgTx) (*wire.MsgTx, bool, error) { + return c.SignRawTransactionWithWalletAsync(tx).Receive() +} + +// SignRawTransactionWithWallet2Async returns an instance of a type that can be +// used to get the result of the RPC at some future time by invoking the Receive +// function on the returned instance. +// +// See SignRawTransactionWithWallet2 for the blocking version and more details. +func (c *Client) SignRawTransactionWithWallet2Async(tx *wire.MsgTx, + inputs []btcjson.RawTxWitnessInput) FutureSignRawTransactionWithWalletResult { + + txHex := "" + if tx != nil { + // Serialize the transaction and convert to hex string. + buf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize())) + if err := tx.Serialize(buf); err != nil { + return newFutureError(err) + } + txHex = hex.EncodeToString(buf.Bytes()) + } + + cmd := btcjson.NewSignRawTransactionWithWalletCmd(txHex, &inputs, nil) + return c.SendCmd(cmd) +} + +// SignRawTransactionWithWallet2 signs inputs for the passed transaction given the +// list of information about the input transactions needed to perform the signing +// process. +// +// This only input transactions that need to be specified are ones the +// RPC server does not already know. Already known input transactions will be +// merged with the specified transactions. +// +// See SignRawTransactionWithWallet if the RPC server already knows the input +// transactions. +func (c *Client) SignRawTransactionWithWallet2(tx *wire.MsgTx, + inputs []btcjson.RawTxWitnessInput) (*wire.MsgTx, bool, error) { + + return c.SignRawTransactionWithWallet2Async(tx, inputs).Receive() +} + +// SignRawTransactionWithWallet3Async returns an instance of a type that can +// be used to get the result of the RPC at some future time by invoking the +// Receive function on the returned instance. +// +// See SignRawTransactionWithWallet3 for the blocking version and more details. +func (c *Client) SignRawTransactionWithWallet3Async(tx *wire.MsgTx, + inputs []btcjson.RawTxWitnessInput, hashType SigHashType) FutureSignRawTransactionWithWalletResult { + + txHex := "" + if tx != nil { + // Serialize the transaction and convert to hex string. + buf := bytes.NewBuffer(make([]byte, 0, tx.SerializeSize())) + if err := tx.Serialize(buf); err != nil { + return newFutureError(err) + } + txHex = hex.EncodeToString(buf.Bytes()) + } + + cmd := btcjson.NewSignRawTransactionWithWalletCmd(txHex, &inputs, btcjson.String(string(hashType))) + return c.SendCmd(cmd) +} + +// SignRawTransactionWithWallet3 signs inputs for the passed transaction using +// the specified signature hash type given the list of information about extra +// input transactions. +// +// The only input transactions that need to be specified are ones the RPC server +// does not already know. This means the list of transaction inputs can be nil +// if the RPC server already knows them all. +// +// This function should only used if a non-default signature hash type is +// desired. Otherwise, see SignRawTransactionWithWallet if the RPC server already +// knows the input transactions, or SignRawTransactionWihWallet2 if it does not. +func (c *Client) SignRawTransactionWithWallet3(tx *wire.MsgTx, + inputs []btcjson.RawTxWitnessInput, hashType SigHashType) (*wire.MsgTx, bool, error) { + + return c.SignRawTransactionWithWallet3Async(tx, inputs, hashType).Receive() +} + // FutureSearchRawTransactionsResult is a future promise to deliver the result // of the SearchRawTransactionsAsync RPC invocation (or an applicable error). -type FutureSearchRawTransactionsResult chan *response +type FutureSearchRawTransactionsResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // found raw transactions. func (r FutureSearchRawTransactionsResult) Receive() ([]*wire.MsgTx, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -585,7 +775,7 @@ func (c *Client) SearchRawTransactionsAsync(address btcutil.Address, skip, count verbose := btcjson.Int(0) cmd := btcjson.NewSearchRawTransactionsCmd(addr, verbose, &skip, &count, nil, &reverse, &filterAddrs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SearchRawTransactions returns transactions that involve the passed address. @@ -602,12 +792,12 @@ func (c *Client) SearchRawTransactions(address btcutil.Address, skip, count int, // FutureSearchRawTransactionsVerboseResult is a future promise to deliver the // result of the SearchRawTransactionsVerboseAsync RPC invocation (or an // applicable error). -type FutureSearchRawTransactionsVerboseResult chan *response +type FutureSearchRawTransactionsVerboseResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // found raw transactions. func (r FutureSearchRawTransactionsVerboseResult) Receive() ([]*btcjson.SearchRawTransactionsResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -638,7 +828,7 @@ func (c *Client) SearchRawTransactionsVerboseAsync(address btcutil.Address, skip } cmd := btcjson.NewSearchRawTransactionsCmd(addr, verbose, &skip, &count, prevOut, &reverse, filterAddrs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SearchRawTransactionsVerbose returns a list of data structures that describe @@ -657,12 +847,12 @@ func (c *Client) SearchRawTransactionsVerbose(address btcutil.Address, skip, // FutureDecodeScriptResult is a future promise to deliver the result // of a DecodeScriptAsync RPC invocation (or an applicable error). -type FutureDecodeScriptResult chan *response +type FutureDecodeScriptResult chan *Response -// Receive waits for the response promised by the future and returns information +// Receive waits for the Response promised by the future and returns information // about a script given its serialized bytes. func (r FutureDecodeScriptResult) Receive() (*btcjson.DecodeScriptResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -685,7 +875,7 @@ func (r FutureDecodeScriptResult) Receive() (*btcjson.DecodeScriptResult, error) func (c *Client) DecodeScriptAsync(serializedScript []byte) FutureDecodeScriptResult { scriptHex := hex.EncodeToString(serializedScript) cmd := btcjson.NewDecodeScriptCmd(scriptHex) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // DecodeScript returns information about a script given its serialized bytes. diff --git a/rpcclient/wallet.go b/rpcclient/wallet.go index 27546f5de0..64f1e40afa 100644 --- a/rpcclient/wallet.go +++ b/rpcclient/wallet.go @@ -1,4 +1,4 @@ -// Copyright (c) 2014-2017 The btcsuite developers +// Copyright (c) 2014-2020 The btcsuite developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -9,10 +9,10 @@ import ( "strconv" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // ***************************** @@ -20,13 +20,14 @@ import ( // ***************************** // FutureGetTransactionResult is a future promise to deliver the result -// of a GetTransactionAsync RPC invocation (or an applicable error). -type FutureGetTransactionResult chan *response +// of a GetTransactionAsync or GetTransactionWatchOnlyAsync RPC invocation +// (or an applicable error). +type FutureGetTransactionResult chan *Response -// Receive waits for the response promised by the future and returns detailed +// Receive waits for the Response promised by the future and returns detailed // information about a wallet transaction. func (r FutureGetTransactionResult) Receive() (*btcjson.GetTransactionResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -53,7 +54,7 @@ func (c *Client) GetTransactionAsync(txHash *chainhash.Hash) FutureGetTransactio } cmd := btcjson.NewGetTransactionCmd(hash, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetTransaction returns detailed information about a wallet transaction. @@ -63,15 +64,37 @@ func (c *Client) GetTransaction(txHash *chainhash.Hash) (*btcjson.GetTransaction return c.GetTransactionAsync(txHash).Receive() } +// GetTransactionWatchOnlyAsync returns an instance of a type that can be used +// to get the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetTransactionWatchOnly for the blocking version and more details. +func (c *Client) GetTransactionWatchOnlyAsync(txHash *chainhash.Hash, watchOnly bool) FutureGetTransactionResult { + hash := "" + if txHash != nil { + hash = txHash.String() + } + + cmd := btcjson.NewGetTransactionCmd(hash, &watchOnly) + return c.SendCmd(cmd) +} + +// GetTransactionWatchOnly returns detailed information about a wallet +// transaction, and allow including watch-only addresses in balance +// calculation and details. +func (c *Client) GetTransactionWatchOnly(txHash *chainhash.Hash, watchOnly bool) (*btcjson.GetTransactionResult, error) { + return c.GetTransactionWatchOnlyAsync(txHash, watchOnly).Receive() +} + // FutureListTransactionsResult is a future promise to deliver the result of a // ListTransactionsAsync, ListTransactionsCountAsync, or // ListTransactionsCountFromAsync RPC invocation (or an applicable error). -type FutureListTransactionsResult chan *response +type FutureListTransactionsResult chan *Response -// Receive waits for the response promised by the future and returns a list of +// Receive waits for the Response promised by the future and returns a list of // the most recent transactions. func (r FutureListTransactionsResult) Receive() ([]btcjson.ListTransactionsResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -93,7 +116,7 @@ func (r FutureListTransactionsResult) Receive() ([]btcjson.ListTransactionsResul // See ListTransactions for the blocking version and more details. func (c *Client) ListTransactionsAsync(account string) FutureListTransactionsResult { cmd := btcjson.NewListTransactionsCmd(&account, nil, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListTransactions returns a list of the most recent transactions. @@ -111,7 +134,7 @@ func (c *Client) ListTransactions(account string) ([]btcjson.ListTransactionsRes // See ListTransactionsCount for the blocking version and more details. func (c *Client) ListTransactionsCountAsync(account string, count int) FutureListTransactionsResult { cmd := btcjson.NewListTransactionsCmd(&account, &count, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListTransactionsCount returns a list of the most recent transactions up @@ -130,7 +153,7 @@ func (c *Client) ListTransactionsCount(account string, count int) ([]btcjson.Lis // See ListTransactionsCountFrom for the blocking version and more details. func (c *Client) ListTransactionsCountFromAsync(account string, count, from int) FutureListTransactionsResult { cmd := btcjson.NewListTransactionsCmd(&account, &count, &from, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListTransactionsCountFrom returns a list of the most recent transactions up @@ -141,18 +164,37 @@ func (c *Client) ListTransactionsCountFrom(account string, count, from int) ([]b return c.ListTransactionsCountFromAsync(account, count, from).Receive() } +// ListTransactionsCountFromWatchOnlyAsync returns an instance of a type that can be used +// to get the result of the RPC at some future time by invoking the Receive +// function on the returned instance. +// +// See ListTransactionsCountFromWatchOnly for the blocking version and more details. +func (c *Client) ListTransactionsCountFromWatchOnlyAsync(account string, count, from int, watchOnly bool) FutureListTransactionsResult { + cmd := btcjson.NewListTransactionsCmd(&account, &count, &from, &watchOnly) + return c.SendCmd(cmd) +} + +// ListTransactionsCountFromWatchOnly returns a list of the most recent transactions up +// to the passed count while skipping the first 'from' transactions. It will include or +// exclude transactions from watch-only addresses based on the passed value for the watchOnly parameter +// +// See the ListTransactions and ListTransactionsCount functions to use defaults. +func (c *Client) ListTransactionsCountFromWatchOnly(account string, count, from int, watchOnly bool) ([]btcjson.ListTransactionsResult, error) { + return c.ListTransactionsCountFromWatchOnlyAsync(account, count, from, watchOnly).Receive() +} + // FutureListUnspentResult is a future promise to deliver the result of a // ListUnspentAsync, ListUnspentMinAsync, ListUnspentMinMaxAsync, or // ListUnspentMinMaxAddressesAsync RPC invocation (or an applicable error). -type FutureListUnspentResult chan *response +type FutureListUnspentResult chan *Response -// Receive waits for the response promised by the future and returns all +// Receive waits for the Response promised by the future and returns all // unspent wallet transaction outputs returned by the RPC call. If the // future wac returned by a call to ListUnspentMinAsync, ListUnspentMinMaxAsync, // or ListUnspentMinMaxAddressesAsync, the range may be limited by the // parameters of the RPC invocation. func (r FutureListUnspentResult) Receive() ([]btcjson.ListUnspentResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -174,7 +216,7 @@ func (r FutureListUnspentResult) Receive() ([]btcjson.ListUnspentResult, error) // See ListUnspent for the blocking version and more details. func (c *Client) ListUnspentAsync() FutureListUnspentResult { cmd := btcjson.NewListUnspentCmd(nil, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListUnspentMinAsync returns an instance of a type that can be used to get @@ -184,7 +226,7 @@ func (c *Client) ListUnspentAsync() FutureListUnspentResult { // See ListUnspentMin for the blocking version and more details. func (c *Client) ListUnspentMinAsync(minConf int) FutureListUnspentResult { cmd := btcjson.NewListUnspentCmd(&minConf, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListUnspentMinMaxAsync returns an instance of a type that can be used to get @@ -194,7 +236,7 @@ func (c *Client) ListUnspentMinAsync(minConf int) FutureListUnspentResult { // See ListUnspentMinMax for the blocking version and more details. func (c *Client) ListUnspentMinMaxAsync(minConf, maxConf int) FutureListUnspentResult { cmd := btcjson.NewListUnspentCmd(&minConf, &maxConf, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListUnspentMinMaxAddressesAsync returns an instance of a type that can be @@ -209,7 +251,7 @@ func (c *Client) ListUnspentMinMaxAddressesAsync(minConf, maxConf int, addrs []b } cmd := btcjson.NewListUnspentCmd(&minConf, &maxConf, &addrStrs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListUnspent returns all unspent transaction outputs known to a wallet, using @@ -220,8 +262,8 @@ func (c *Client) ListUnspent() ([]btcjson.ListUnspentResult, error) { } // ListUnspentMin returns all unspent transaction outputs known to a wallet, -// using the specified number of minimum conformations and default number of -// maximum confiramtions (999999) as a filter. +// using the specified number of minimum confirmations and default number of +// maximum confirmations (999999) as a filter. func (c *Client) ListUnspentMin(minConf int) ([]btcjson.ListUnspentResult, error) { return c.ListUnspentMinAsync(minConf).Receive() } @@ -243,13 +285,13 @@ func (c *Client) ListUnspentMinMaxAddresses(minConf, maxConf int, addrs []btcuti // FutureListSinceBlockResult is a future promise to deliver the result of a // ListSinceBlockAsync or ListSinceBlockMinConfAsync RPC invocation (or an // applicable error). -type FutureListSinceBlockResult chan *response +type FutureListSinceBlockResult chan *Response -// Receive waits for the response promised by the future and returns all +// Receive waits for the Response promised by the future and returns all // transactions added in blocks since the specified block hash, or all // transactions if it is nil. func (r FutureListSinceBlockResult) Receive() (*btcjson.ListSinceBlockResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -276,7 +318,7 @@ func (c *Client) ListSinceBlockAsync(blockHash *chainhash.Hash) FutureListSinceB } cmd := btcjson.NewListSinceBlockCmd(hash, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListSinceBlock returns all transactions added in blocks since the specified @@ -284,6 +326,7 @@ func (c *Client) ListSinceBlockAsync(blockHash *chainhash.Hash) FutureListSinceB // minimum confirmations as a filter. // // See ListSinceBlockMinConf to override the minimum number of confirmations. +// See ListSinceBlockMinConfWatchOnly to override the minimum number of confirmations and watch only parameter. func (c *Client) ListSinceBlock(blockHash *chainhash.Hash) (*btcjson.ListSinceBlockResult, error) { return c.ListSinceBlockAsync(blockHash).Receive() } @@ -300,7 +343,7 @@ func (c *Client) ListSinceBlockMinConfAsync(blockHash *chainhash.Hash, minConfir } cmd := btcjson.NewListSinceBlockCmd(hash, &minConfirms, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListSinceBlockMinConf returns all transactions added in blocks since the @@ -312,18 +355,42 @@ func (c *Client) ListSinceBlockMinConf(blockHash *chainhash.Hash, minConfirms in return c.ListSinceBlockMinConfAsync(blockHash, minConfirms).Receive() } +// ListSinceBlockMinConfWatchOnlyAsync returns an instance of a type that can be used to +// get the result of the RPC at some future time by invoking the Receive +// function on the returned instance. +// +// See ListSinceBlockMinConfWatchOnly for the blocking version and more details. +func (c *Client) ListSinceBlockMinConfWatchOnlyAsync(blockHash *chainhash.Hash, minConfirms int, watchOnly bool) FutureListSinceBlockResult { + var hash *string + if blockHash != nil { + hash = btcjson.String(blockHash.String()) + } + + cmd := btcjson.NewListSinceBlockCmd(hash, &minConfirms, &watchOnly) + return c.SendCmd(cmd) +} + +// ListSinceBlockMinConfWatchOnly returns all transactions added in blocks since the +// specified block hash, or all transactions if it is nil, using the specified +// number of minimum confirmations as a filter. +// +// See ListSinceBlock to use the default minimum number of confirmations and default watch only parameter. +func (c *Client) ListSinceBlockMinConfWatchOnly(blockHash *chainhash.Hash, minConfirms int, watchOnly bool) (*btcjson.ListSinceBlockResult, error) { + return c.ListSinceBlockMinConfWatchOnlyAsync(blockHash, minConfirms, watchOnly).Receive() +} + // ************************** // Transaction Send Functions // ************************** // FutureLockUnspentResult is a future promise to deliver the error result of a // LockUnspentAsync RPC invocation. -type FutureLockUnspentResult chan *response +type FutureLockUnspentResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of locking or unlocking the unspent output(s). func (r FutureLockUnspentResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -341,7 +408,7 @@ func (c *Client) LockUnspentAsync(unlock bool, ops []*wire.OutPoint) FutureLockU } } cmd := btcjson.NewLockUnspentCmd(unlock, outputs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // LockUnspent marks outputs as locked or unlocked, depending on the value of @@ -367,12 +434,12 @@ func (c *Client) LockUnspent(unlock bool, ops []*wire.OutPoint) error { // FutureListLockUnspentResult is a future promise to deliver the result of a // ListLockUnspentAsync RPC invocation (or an applicable error). -type FutureListLockUnspentResult chan *response +type FutureListLockUnspentResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of all currently locked unspent outputs. func (r FutureListLockUnspentResult) Receive() ([]*wire.OutPoint, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -404,7 +471,7 @@ func (r FutureListLockUnspentResult) Receive() ([]*wire.OutPoint, error) { // See ListLockUnspent for the blocking version and more details. func (c *Client) ListLockUnspentAsync() FutureListLockUnspentResult { cmd := btcjson.NewListLockUnspentCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListLockUnspent returns a slice of outpoints for all unspent outputs marked @@ -416,13 +483,13 @@ func (c *Client) ListLockUnspent() ([]*wire.OutPoint, error) { // FutureSetTxFeeResult is a future promise to deliver the result of a // SetTxFeeAsync RPC invocation (or an applicable error). -type FutureSetTxFeeResult chan *response +type FutureSetTxFeeResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of setting an optional transaction fee per KB that helps ensure transactions // are processed quickly. Most transaction are 1KB. func (r FutureSetTxFeeResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -433,7 +500,7 @@ func (r FutureSetTxFeeResult) Receive() error { // See SetTxFee for the blocking version and more details. func (c *Client) SetTxFeeAsync(fee btcutil.Amount) FutureSetTxFeeResult { cmd := btcjson.NewSetTxFeeCmd(fee.ToBTC()) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SetTxFee sets an optional transaction fee per KB that helps ensure @@ -444,12 +511,12 @@ func (c *Client) SetTxFee(fee btcutil.Amount) error { // FutureSendToAddressResult is a future promise to deliver the result of a // SendToAddressAsync RPC invocation (or an applicable error). -type FutureSendToAddressResult chan *response +type FutureSendToAddressResult chan *Response -// Receive waits for the response promised by the future and returns the hash +// Receive waits for the Response promised by the future and returns the hash // of the transaction sending the passed amount to the given address. func (r FutureSendToAddressResult) Receive() (*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -472,7 +539,7 @@ func (r FutureSendToAddressResult) Receive() (*chainhash.Hash, error) { func (c *Client) SendToAddressAsync(address btcutil.Address, amount btcutil.Amount) FutureSendToAddressResult { addr := address.EncodeAddress() cmd := btcjson.NewSendToAddressCmd(addr, amount.ToBTC(), nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendToAddress sends the passed amount to the given address. @@ -499,13 +566,13 @@ func (c *Client) SendToAddressCommentAsync(address btcutil.Address, addr := address.EncodeAddress() cmd := btcjson.NewSendToAddressCmd(addr, amount.ToBTC(), &comment, &commentTo) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendToAddressComment sends the passed amount to the given address and stores // the provided comment and comment to in the wallet. The comment parameter is // intended to be used for the purpose of the transaction while the commentTo -// parameter is indended to be used for who the transaction is being sent to. +// parameter is intended to be used for who the transaction is being sent to. // // The comments are not part of the transaction and are only internal // to the wallet. @@ -522,13 +589,13 @@ func (c *Client) SendToAddressComment(address btcutil.Address, amount btcutil.Am // FutureSendFromResult is a future promise to deliver the result of a // SendFromAsync, SendFromMinConfAsync, or SendFromCommentAsync RPC invocation // (or an applicable error). -type FutureSendFromResult chan *response +type FutureSendFromResult chan *Response -// Receive waits for the response promised by the future and returns the hash +// Receive waits for the Response promised by the future and returns the hash // of the transaction sending amount to the given address using the provided // account as a source of funds. func (r FutureSendFromResult) Receive() (*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -552,7 +619,7 @@ func (c *Client) SendFromAsync(fromAccount string, toAddress btcutil.Address, am addr := toAddress.EncodeAddress() cmd := btcjson.NewSendFromCmd(fromAccount, addr, amount.ToBTC(), nil, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendFrom sends the passed amount to the given address using the provided @@ -576,7 +643,7 @@ func (c *Client) SendFromMinConfAsync(fromAccount string, toAddress btcutil.Addr addr := toAddress.EncodeAddress() cmd := btcjson.NewSendFromCmd(fromAccount, addr, amount.ToBTC(), &minConfirms, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendFromMinConf sends the passed amount to the given address using the @@ -605,13 +672,13 @@ func (c *Client) SendFromCommentAsync(fromAccount string, addr := toAddress.EncodeAddress() cmd := btcjson.NewSendFromCmd(fromAccount, addr, amount.ToBTC(), &minConfirms, &comment, &commentTo) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendFromComment sends the passed amount to the given address using the // provided account as a source of funds and stores the provided comment and // comment to in the wallet. The comment parameter is intended to be used for -// the purpose of the transaction while the commentTo parameter is indended to +// the purpose of the transaction while the commentTo parameter is intended to // be used for who the transaction is being sent to. Only funds with the passed // number of minimum confirmations will be used. // @@ -630,13 +697,13 @@ func (c *Client) SendFromComment(fromAccount string, toAddress btcutil.Address, // FutureSendManyResult is a future promise to deliver the result of a // SendManyAsync, SendManyMinConfAsync, or SendManyCommentAsync RPC invocation // (or an applicable error). -type FutureSendManyResult chan *response +type FutureSendManyResult chan *Response -// Receive waits for the response promised by the future and returns the hash +// Receive waits for the Response promised by the future and returns the hash // of the transaction sending multiple amounts to multiple addresses using the // provided account as a source of funds. func (r FutureSendManyResult) Receive() (*chainhash.Hash, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -662,7 +729,7 @@ func (c *Client) SendManyAsync(fromAccount string, amounts map[btcutil.Address]b convertedAmounts[addr.EncodeAddress()] = amount.ToBTC() } cmd := btcjson.NewSendManyCmd(fromAccount, convertedAmounts, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendMany sends multiple amounts to multiple addresses using the provided @@ -692,7 +759,7 @@ func (c *Client) SendManyMinConfAsync(fromAccount string, } cmd := btcjson.NewSendManyCmd(fromAccount, convertedAmounts, &minConfirms, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendManyMinConf sends multiple amounts to multiple addresses using the @@ -726,7 +793,7 @@ func (c *Client) SendManyCommentAsync(fromAccount string, } cmd := btcjson.NewSendManyCmd(fromAccount, convertedAmounts, &minConfirms, &comment) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SendManyComment sends multiple amounts to multiple addresses using the @@ -753,13 +820,16 @@ func (c *Client) SendManyComment(fromAccount string, // FutureAddMultisigAddressResult is a future promise to deliver the result of a // AddMultisigAddressAsync RPC invocation (or an applicable error). -type FutureAddMultisigAddressResult chan *response +type FutureAddMultisigAddressResult struct { + responseChannel chan *Response + network *chaincfg.Params +} -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // multisignature address that requires the specified number of signatures for // the provided addresses. func (r FutureAddMultisigAddressResult) Receive() (btcutil.Address, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -771,7 +841,7 @@ func (r FutureAddMultisigAddressResult) Receive() (btcutil.Address, error) { return nil, err } - return btcutil.DecodeAddress(addr, &chaincfg.MainNetParams) + return btcutil.DecodeAddress(addr, r.network) } // AddMultisigAddressAsync returns an instance of a type that can be used to get @@ -786,24 +856,27 @@ func (c *Client) AddMultisigAddressAsync(requiredSigs int, addresses []btcutil.A } cmd := btcjson.NewAddMultisigAddressCmd(requiredSigs, addrs, &account) - return c.sendCmd(cmd) + result := FutureAddMultisigAddressResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return result } // AddMultisigAddress adds a multisignature address that requires the specified // number of signatures for the provided addresses to the wallet. func (c *Client) AddMultisigAddress(requiredSigs int, addresses []btcutil.Address, account string) (btcutil.Address, error) { - return c.AddMultisigAddressAsync(requiredSigs, addresses, - account).Receive() + return c.AddMultisigAddressAsync(requiredSigs, addresses, account).Receive() } // FutureCreateMultisigResult is a future promise to deliver the result of a // CreateMultisigAsync RPC invocation (or an applicable error). -type FutureCreateMultisigResult chan *response +type FutureCreateMultisigResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // multisignature address and script needed to redeem it. func (r FutureCreateMultisigResult) Receive() (*btcjson.CreateMultiSigResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -830,7 +903,7 @@ func (c *Client) CreateMultisigAsync(requiredSigs int, addresses []btcutil.Addre } cmd := btcjson.NewCreateMultisigCmd(requiredSigs, addrs) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // CreateMultisig creates a multisignature address that requires the specified @@ -842,12 +915,12 @@ func (c *Client) CreateMultisig(requiredSigs int, addresses []btcutil.Address) ( // FutureCreateNewAccountResult is a future promise to deliver the result of a // CreateNewAccountAsync RPC invocation (or an applicable error). -type FutureCreateNewAccountResult chan *response +type FutureCreateNewAccountResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // result of creating new account. func (r FutureCreateNewAccountResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -858,7 +931,7 @@ func (r FutureCreateNewAccountResult) Receive() error { // See CreateNewAccount for the blocking version and more details. func (c *Client) CreateNewAccountAsync(account string) FutureCreateNewAccountResult { cmd := btcjson.NewCreateNewAccountCmd(account) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // CreateNewAccount creates a new wallet account. @@ -866,14 +939,137 @@ func (c *Client) CreateNewAccount(account string) error { return c.CreateNewAccountAsync(account).Receive() } +// FutureCreateWalletResult is a future promise to deliver the result of a +// CreateWalletAsync RPC invocation (or an applicable error). +type FutureCreateWalletResult chan *Response + +// Receive waits for the Response promised by the future and returns the +// result of creating a new wallet. +func (r FutureCreateWalletResult) Receive() (*btcjson.CreateWalletResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var createWalletResult btcjson.CreateWalletResult + err = json.Unmarshal(res, &createWalletResult) + if err != nil { + return nil, err + } + return &createWalletResult, nil +} + +// CreateWalletOpt defines a functional-option to be used with CreateWallet +// method. +type CreateWalletOpt func(*btcjson.CreateWalletCmd) + +// WithCreateWalletDisablePrivateKeys disables the possibility of private keys +// to be used with a wallet created using the CreateWallet method. Using this +// option will make the wallet watch-only. +func WithCreateWalletDisablePrivateKeys() CreateWalletOpt { + return func(c *btcjson.CreateWalletCmd) { + c.DisablePrivateKeys = btcjson.Bool(true) + } +} + +// WithCreateWalletBlank specifies creation of a blank wallet. +func WithCreateWalletBlank() CreateWalletOpt { + return func(c *btcjson.CreateWalletCmd) { + c.Blank = btcjson.Bool(true) + } +} + +// WithCreateWalletPassphrase specifies a passphrase to encrypt the wallet +// with. +func WithCreateWalletPassphrase(value string) CreateWalletOpt { + return func(c *btcjson.CreateWalletCmd) { + c.Passphrase = btcjson.String(value) + } +} + +// WithCreateWalletAvoidReuse specifies keeping track of coin reuse, and +// treat dirty and clean coins differently with privacy considerations in mind. +func WithCreateWalletAvoidReuse() CreateWalletOpt { + return func(c *btcjson.CreateWalletCmd) { + c.AvoidReuse = btcjson.Bool(true) + } +} + +// CreateWalletAsync returns an instance of a type that can be used to get the +// result of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See CreateWallet for the blocking version and more details. +func (c *Client) CreateWalletAsync(name string, opts ...CreateWalletOpt) FutureCreateWalletResult { + cmd := btcjson.NewCreateWalletCmd(name, nil, nil, nil, nil) + + // Apply each specified option to mutate the default command. + for _, opt := range opts { + opt(cmd) + } + + return c.SendCmd(cmd) +} + +// CreateWallet creates a new wallet account, with the possibility to use +// private keys. +// +// Optional parameters can be specified using functional-options pattern. The +// following functions are available: +// * WithCreateWalletDisablePrivateKeys +// * WithCreateWalletBlank +// * WithCreateWalletPassphrase +// * WithCreateWalletAvoidReuse +func (c *Client) CreateWallet(name string, opts ...CreateWalletOpt) (*btcjson.CreateWalletResult, error) { + return c.CreateWalletAsync(name, opts...).Receive() +} + +// FutureGetAddressInfoResult is a future promise to deliver the result of an +// GetAddressInfoAsync RPC invocation (or an applicable error). +type FutureGetAddressInfoResult chan *Response + +// Receive waits for the Response promised by the future and returns the information +// about the given bitcoin address. +func (r FutureGetAddressInfoResult) Receive() (*btcjson.GetAddressInfoResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var getAddressInfoResult btcjson.GetAddressInfoResult + err = json.Unmarshal(res, &getAddressInfoResult) + if err != nil { + return nil, err + } + return &getAddressInfoResult, nil +} + +// GetAddressInfoAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See GetAddressInfo for the blocking version and more details. +func (c *Client) GetAddressInfoAsync(address string) FutureGetAddressInfoResult { + cmd := btcjson.NewGetAddressInfoCmd(address) + return c.SendCmd(cmd) +} + +// GetAddressInfo returns information about the given bitcoin address. +func (c *Client) GetAddressInfo(address string) (*btcjson.GetAddressInfoResult, error) { + return c.GetAddressInfoAsync(address).Receive() +} + // FutureGetNewAddressResult is a future promise to deliver the result of a // GetNewAddressAsync RPC invocation (or an applicable error). -type FutureGetNewAddressResult chan *response +type FutureGetNewAddressResult struct { + responseChannel chan *Response + network *chaincfg.Params +} -// Receive waits for the response promised by the future and returns a new +// Receive waits for the Response promised by the future and returns a new // address. func (r FutureGetNewAddressResult) Receive() (btcutil.Address, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -885,7 +1081,7 @@ func (r FutureGetNewAddressResult) Receive() (btcutil.Address, error) { return nil, err } - return btcutil.DecodeAddress(addr, &chaincfg.MainNetParams) + return btcutil.DecodeAddress(addr, r.network) } // GetNewAddressAsync returns an instance of a type that can be used to get the @@ -894,24 +1090,52 @@ func (r FutureGetNewAddressResult) Receive() (btcutil.Address, error) { // // See GetNewAddress for the blocking version and more details. func (c *Client) GetNewAddressAsync(account string) FutureGetNewAddressResult { - cmd := btcjson.NewGetNewAddressCmd(&account) - return c.sendCmd(cmd) + cmd := btcjson.NewGetNewAddressCmd(&account, nil) + result := FutureGetNewAddressResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return result } -// GetNewAddress returns a new address. +// GetNewAddress returns a new address, and decodes based on the client's +// chain params. func (c *Client) GetNewAddress(account string) (btcutil.Address, error) { return c.GetNewAddressAsync(account).Receive() } +// GetNewAddressTypeAsync returns an instance of a type that can be used to get +// the result of the RPC at some future time by invoking the Receive function on +// the returned instance. +// +// See GetNewAddressType for the blocking version and more details. +func (c *Client) GetNewAddressTypeAsync(account, addrType string) FutureGetNewAddressResult { + cmd := btcjson.NewGetNewAddressCmd(&account, &addrType) + result := FutureGetNewAddressResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return result +} + +// GetNewAddressType returns a new address, and decodes based on the client's +// chain params. +func (c *Client) GetNewAddressType(account, addrType string) (btcutil.Address, error) { + return c.GetNewAddressTypeAsync(account, addrType).Receive() +} + // FutureGetRawChangeAddressResult is a future promise to deliver the result of // a GetRawChangeAddressAsync RPC invocation (or an applicable error). -type FutureGetRawChangeAddressResult chan *response +type FutureGetRawChangeAddressResult struct { + responseChannel chan *Response + network *chaincfg.Params +} -// Receive waits for the response promised by the future and returns a new +// Receive waits for the Response promised by the future and returns a new // address for receiving change that will be associated with the provided // account. Note that this is only for raw transactions and NOT for normal use. func (r FutureGetRawChangeAddressResult) Receive() (btcutil.Address, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -923,7 +1147,7 @@ func (r FutureGetRawChangeAddressResult) Receive() (btcutil.Address, error) { return nil, err } - return btcutil.DecodeAddress(addr, &chaincfg.MainNetParams) + return btcutil.DecodeAddress(addr, r.network) } // GetRawChangeAddressAsync returns an instance of a type that can be used to @@ -932,8 +1156,12 @@ func (r FutureGetRawChangeAddressResult) Receive() (btcutil.Address, error) { // // See GetRawChangeAddress for the blocking version and more details. func (c *Client) GetRawChangeAddressAsync(account string) FutureGetRawChangeAddressResult { - cmd := btcjson.NewGetRawChangeAddressCmd(&account) - return c.sendCmd(cmd) + cmd := btcjson.NewGetRawChangeAddressCmd(&account, nil) + result := FutureGetRawChangeAddressResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return result } // GetRawChangeAddress returns a new address for receiving change that will be @@ -943,14 +1171,38 @@ func (c *Client) GetRawChangeAddress(account string) (btcutil.Address, error) { return c.GetRawChangeAddressAsync(account).Receive() } +// GetRawChangeAddressTypeAsync returns an instance of a type that can be used +// to get the result of the RPC at some future time by invoking the Receive +// function on the returned instance. +// +// See GetRawChangeAddressType for the blocking version and more details. +func (c *Client) GetRawChangeAddressTypeAsync(account, addrType string) FutureGetRawChangeAddressResult { + cmd := btcjson.NewGetRawChangeAddressCmd(&account, &addrType) + result := FutureGetRawChangeAddressResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return result +} + +// GetRawChangeAddressType returns a new address for receiving change that will +// be associated with the provided account. Note that this is only for raw +// transactions and NOT for normal use. +func (c *Client) GetRawChangeAddressType(account, addrType string) (btcutil.Address, error) { + return c.GetRawChangeAddressTypeAsync(account, addrType).Receive() +} + // FutureAddWitnessAddressResult is a future promise to deliver the result of // a AddWitnessAddressAsync RPC invocation (or an applicable error). -type FutureAddWitnessAddressResult chan *response +type FutureAddWitnessAddressResult struct { + responseChannel chan *Response + network *chaincfg.Params +} -// Receive waits for the response promised by the future and returns the new +// Receive waits for the Response promised by the future and returns the new // address. func (r FutureAddWitnessAddressResult) Receive() (btcutil.Address, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -962,7 +1214,7 @@ func (r FutureAddWitnessAddressResult) Receive() (btcutil.Address, error) { return nil, err } - return btcutil.DecodeAddress(addr, &chaincfg.MainNetParams) + return btcutil.DecodeAddress(addr, r.network) } // AddWitnessAddressAsync returns an instance of a type that can be used to get @@ -972,7 +1224,11 @@ func (r FutureAddWitnessAddressResult) Receive() (btcutil.Address, error) { // See AddWitnessAddress for the blocking version and more details. func (c *Client) AddWitnessAddressAsync(address string) FutureAddWitnessAddressResult { cmd := btcjson.NewAddWitnessAddressCmd(address) - return c.sendCmd(cmd) + response := FutureAddWitnessAddressResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return response } // AddWitnessAddress adds a witness address for a script and returns the new @@ -983,12 +1239,15 @@ func (c *Client) AddWitnessAddress(address string) (btcutil.Address, error) { // FutureGetAccountAddressResult is a future promise to deliver the result of a // GetAccountAddressAsync RPC invocation (or an applicable error). -type FutureGetAccountAddressResult chan *response +type FutureGetAccountAddressResult struct { + responseChannel chan *Response + network *chaincfg.Params +} -// Receive waits for the response promised by the future and returns the current +// Receive waits for the Response promised by the future and returns the current // Bitcoin address for receiving payments to the specified account. func (r FutureGetAccountAddressResult) Receive() (btcutil.Address, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -1000,7 +1259,7 @@ func (r FutureGetAccountAddressResult) Receive() (btcutil.Address, error) { return nil, err } - return btcutil.DecodeAddress(addr, &chaincfg.MainNetParams) + return btcutil.DecodeAddress(addr, r.network) } // GetAccountAddressAsync returns an instance of a type that can be used to get @@ -1010,7 +1269,11 @@ func (r FutureGetAccountAddressResult) Receive() (btcutil.Address, error) { // See GetAccountAddress for the blocking version and more details. func (c *Client) GetAccountAddressAsync(account string) FutureGetAccountAddressResult { cmd := btcjson.NewGetAccountAddressCmd(account) - return c.sendCmd(cmd) + result := FutureGetAccountAddressResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return result } // GetAccountAddress returns the current Bitcoin address for receiving payments @@ -1021,12 +1284,12 @@ func (c *Client) GetAccountAddress(account string) (btcutil.Address, error) { // FutureGetAccountResult is a future promise to deliver the result of a // GetAccountAsync RPC invocation (or an applicable error). -type FutureGetAccountResult chan *response +type FutureGetAccountResult chan *Response -// Receive waits for the response promised by the future and returns the account +// Receive waits for the Response promised by the future and returns the account // associated with the passed address. func (r FutureGetAccountResult) Receive() (string, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return "", err } @@ -1049,7 +1312,7 @@ func (r FutureGetAccountResult) Receive() (string, error) { func (c *Client) GetAccountAsync(address btcutil.Address) FutureGetAccountResult { addr := address.EncodeAddress() cmd := btcjson.NewGetAccountCmd(addr) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetAccount returns the account associated with the passed address. @@ -1059,12 +1322,12 @@ func (c *Client) GetAccount(address btcutil.Address) (string, error) { // FutureSetAccountResult is a future promise to deliver the result of a // SetAccountAsync RPC invocation (or an applicable error). -type FutureSetAccountResult chan *response +type FutureSetAccountResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of setting the account to be associated with the passed address. func (r FutureSetAccountResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1076,7 +1339,7 @@ func (r FutureSetAccountResult) Receive() error { func (c *Client) SetAccountAsync(address btcutil.Address, account string) FutureSetAccountResult { addr := address.EncodeAddress() cmd := btcjson.NewSetAccountCmd(addr, account) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SetAccount sets the account associated with the passed address. @@ -1086,12 +1349,15 @@ func (c *Client) SetAccount(address btcutil.Address, account string) error { // FutureGetAddressesByAccountResult is a future promise to deliver the result // of a GetAddressesByAccountAsync RPC invocation (or an applicable error). -type FutureGetAddressesByAccountResult chan *response +type FutureGetAddressesByAccountResult struct { + responseChannel chan *Response + network *chaincfg.Params +} -// Receive waits for the response promised by the future and returns the list of +// Receive waits for the Response promised by the future and returns the list of // addresses associated with the passed account. func (r FutureGetAddressesByAccountResult) Receive() ([]btcutil.Address, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r.responseChannel) if err != nil { return nil, err } @@ -1103,17 +1369,15 @@ func (r FutureGetAddressesByAccountResult) Receive() ([]btcutil.Address, error) return nil, err } - addrs := make([]btcutil.Address, 0, len(addrStrings)) - for _, addrStr := range addrStrings { - addr, err := btcutil.DecodeAddress(addrStr, - &chaincfg.MainNetParams) + addresses := make([]btcutil.Address, len(addrStrings)) + for i, addrString := range addrStrings { + addresses[i], err = btcutil.DecodeAddress(addrString, r.network) if err != nil { return nil, err } - addrs = append(addrs, addr) } - return addrs, nil + return addresses, nil } // GetAddressesByAccountAsync returns an instance of a type that can be used to @@ -1123,7 +1387,11 @@ func (r FutureGetAddressesByAccountResult) Receive() ([]btcutil.Address, error) // See GetAddressesByAccount for the blocking version and more details. func (c *Client) GetAddressesByAccountAsync(account string) FutureGetAddressesByAccountResult { cmd := btcjson.NewGetAddressesByAccountCmd(account) - return c.sendCmd(cmd) + result := FutureGetAddressesByAccountResult{ + network: c.chainParams, + responseChannel: c.SendCmd(cmd), + } + return result } // GetAddressesByAccount returns the list of addresses associated with the @@ -1135,12 +1403,12 @@ func (c *Client) GetAddressesByAccount(account string) ([]btcutil.Address, error // FutureMoveResult is a future promise to deliver the result of a MoveAsync, // MoveMinConfAsync, or MoveCommentAsync RPC invocation (or an applicable // error). -type FutureMoveResult chan *response +type FutureMoveResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of the move operation. func (r FutureMoveResult) Receive() (bool, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return false, err } @@ -1163,7 +1431,7 @@ func (r FutureMoveResult) Receive() (bool, error) { func (c *Client) MoveAsync(fromAccount, toAccount string, amount btcutil.Amount) FutureMoveResult { cmd := btcjson.NewMoveCmd(fromAccount, toAccount, amount.ToBTC(), nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // Move moves specified amount from one account in your wallet to another. Only @@ -1184,7 +1452,7 @@ func (c *Client) MoveMinConfAsync(fromAccount, toAccount string, cmd := btcjson.NewMoveCmd(fromAccount, toAccount, amount.ToBTC(), &minConfirms, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // MoveMinConf moves specified amount from one account in your wallet to @@ -1207,7 +1475,7 @@ func (c *Client) MoveCommentAsync(fromAccount, toAccount string, cmd := btcjson.NewMoveCmd(fromAccount, toAccount, amount.ToBTC(), &minConfirms, &comment) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // MoveComment moves specified amount from one account in your wallet to @@ -1225,12 +1493,12 @@ func (c *Client) MoveComment(fromAccount, toAccount string, amount btcutil.Amoun // FutureRenameAccountResult is a future promise to deliver the result of a // RenameAccountAsync RPC invocation (or an applicable error). -type FutureRenameAccountResult chan *response +type FutureRenameAccountResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // result of creating new account. func (r FutureRenameAccountResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1241,7 +1509,7 @@ func (r FutureRenameAccountResult) Receive() error { // See RenameAccount for the blocking version and more details. func (c *Client) RenameAccountAsync(oldAccount, newAccount string) FutureRenameAccountResult { cmd := btcjson.NewRenameAccountCmd(oldAccount, newAccount) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // RenameAccount creates a new wallet account. @@ -1251,12 +1519,12 @@ func (c *Client) RenameAccount(oldAccount, newAccount string) error { // FutureValidateAddressResult is a future promise to deliver the result of a // ValidateAddressAsync RPC invocation (or an applicable error). -type FutureValidateAddressResult chan *response +type FutureValidateAddressResult chan *Response -// Receive waits for the response promised by the future and returns information +// Receive waits for the Response promised by the future and returns information // about the given bitcoin address. func (r FutureValidateAddressResult) Receive() (*btcjson.ValidateAddressWalletResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1279,7 +1547,7 @@ func (r FutureValidateAddressResult) Receive() (*btcjson.ValidateAddressWalletRe func (c *Client) ValidateAddressAsync(address btcutil.Address) FutureValidateAddressResult { addr := address.EncodeAddress() cmd := btcjson.NewValidateAddressCmd(addr) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ValidateAddress returns information about the given bitcoin address. @@ -1289,12 +1557,12 @@ func (c *Client) ValidateAddress(address btcutil.Address) (*btcjson.ValidateAddr // FutureKeyPoolRefillResult is a future promise to deliver the result of a // KeyPoolRefillAsync RPC invocation (or an applicable error). -type FutureKeyPoolRefillResult chan *response +type FutureKeyPoolRefillResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of refilling the key pool. func (r FutureKeyPoolRefillResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1305,7 +1573,7 @@ func (r FutureKeyPoolRefillResult) Receive() error { // See KeyPoolRefill for the blocking version and more details. func (c *Client) KeyPoolRefillAsync() FutureKeyPoolRefillResult { cmd := btcjson.NewKeyPoolRefillCmd(nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // KeyPoolRefill fills the key pool as necessary to reach the default size. @@ -1322,7 +1590,7 @@ func (c *Client) KeyPoolRefill() error { // See KeyPoolRefillSize for the blocking version and more details. func (c *Client) KeyPoolRefillSizeAsync(newSize uint) FutureKeyPoolRefillResult { cmd := btcjson.NewKeyPoolRefillCmd(&newSize) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // KeyPoolRefillSize fills the key pool as necessary to reach the specified @@ -1338,12 +1606,12 @@ func (c *Client) KeyPoolRefillSize(newSize uint) error { // FutureListAccountsResult is a future promise to deliver the result of a // ListAccountsAsync or ListAccountsMinConfAsync RPC invocation (or an // applicable error). -type FutureListAccountsResult chan *response +type FutureListAccountsResult chan *Response -// Receive waits for the response promised by the future and returns returns a +// Receive waits for the Response promised by the future and returns returns a // map of account names and their associated balances. func (r FutureListAccountsResult) Receive() (map[string]btcutil.Amount, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1375,7 +1643,7 @@ func (r FutureListAccountsResult) Receive() (map[string]btcutil.Amount, error) { // See ListAccounts for the blocking version and more details. func (c *Client) ListAccountsAsync() FutureListAccountsResult { cmd := btcjson.NewListAccountsCmd(nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListAccounts returns a map of account names and their associated balances @@ -1393,7 +1661,7 @@ func (c *Client) ListAccounts() (map[string]btcutil.Amount, error) { // See ListAccountsMinConf for the blocking version and more details. func (c *Client) ListAccountsMinConfAsync(minConfirms int) FutureListAccountsResult { cmd := btcjson.NewListAccountsCmd(&minConfirms) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListAccountsMinConf returns a map of account names and their associated @@ -1407,12 +1675,12 @@ func (c *Client) ListAccountsMinConf(minConfirms int) (map[string]btcutil.Amount // FutureGetBalanceResult is a future promise to deliver the result of a // GetBalanceAsync or GetBalanceMinConfAsync RPC invocation (or an applicable // error). -type FutureGetBalanceResult chan *response +type FutureGetBalanceResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // available balance from the server for the specified account. func (r FutureGetBalanceResult) Receive() (btcutil.Amount, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -1436,12 +1704,12 @@ func (r FutureGetBalanceResult) Receive() (btcutil.Amount, error) { // that the result is expected to be a string which is then parsed into // a float64 value // This is required for compatibility with servers like blockchain.info -type FutureGetBalanceParseResult chan *response +type FutureGetBalanceParseResult chan *Response -// Receive waits for the response promised by the future and returns the +// Receive waits for the Response promised by the future and returns the // available balance from the server for the specified account. func (r FutureGetBalanceParseResult) Receive() (btcutil.Amount, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -1472,7 +1740,7 @@ func (r FutureGetBalanceParseResult) Receive() (btcutil.Amount, error) { // See GetBalance for the blocking version and more details. func (c *Client) GetBalanceAsync(account string) FutureGetBalanceResult { cmd := btcjson.NewGetBalanceCmd(&account, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBalance returns the available balance from the server for the specified @@ -1491,7 +1759,7 @@ func (c *Client) GetBalance(account string) (btcutil.Amount, error) { // See GetBalanceMinConf for the blocking version and more details. func (c *Client) GetBalanceMinConfAsync(account string, minConfirms int) FutureGetBalanceResult { cmd := btcjson.NewGetBalanceCmd(&account, &minConfirms) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetBalanceMinConf returns the available balance from the server for the @@ -1507,15 +1775,52 @@ func (c *Client) GetBalanceMinConf(account string, minConfirms int) (btcutil.Amo return c.GetBalanceMinConfAsync(account, minConfirms).Receive() } +// FutureGetBalancesResult is a future promise to deliver the result of a +// GetBalancesAsync RPC invocation (or an applicable error). +type FutureGetBalancesResult chan *Response + +// Receive waits for the Response promised by the future and returns the +// available balances from the server. +func (r FutureGetBalancesResult) Receive() (*btcjson.GetBalancesResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + // Unmarshal result as a floating point number. + var balances btcjson.GetBalancesResult + err = json.Unmarshal(res, &balances) + if err != nil { + return nil, err + } + + return &balances, nil +} + +// GetBalancesAsync returns an instance of a type that can be used to get the +// result of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See GetBalances for the blocking version and more details. +func (c *Client) GetBalancesAsync() FutureGetBalancesResult { + cmd := btcjson.NewGetBalancesCmd() + return c.SendCmd(cmd) +} + +// GetBalances returns the available balances from the server. +func (c *Client) GetBalances() (*btcjson.GetBalancesResult, error) { + return c.GetBalancesAsync().Receive() +} + // FutureGetReceivedByAccountResult is a future promise to deliver the result of // a GetReceivedByAccountAsync or GetReceivedByAccountMinConfAsync RPC // invocation (or an applicable error). -type FutureGetReceivedByAccountResult chan *response +type FutureGetReceivedByAccountResult chan *Response -// Receive waits for the response promised by the future and returns the total +// Receive waits for the Response promised by the future and returns the total // amount received with the specified account. func (r FutureGetReceivedByAccountResult) Receive() (btcutil.Amount, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -1542,7 +1847,7 @@ func (r FutureGetReceivedByAccountResult) Receive() (btcutil.Amount, error) { // See GetReceivedByAccount for the blocking version and more details. func (c *Client) GetReceivedByAccountAsync(account string) FutureGetReceivedByAccountResult { cmd := btcjson.NewGetReceivedByAccountCmd(account, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetReceivedByAccount returns the total amount received with the specified @@ -1561,7 +1866,7 @@ func (c *Client) GetReceivedByAccount(account string) (btcutil.Amount, error) { // See GetReceivedByAccountMinConf for the blocking version and more details. func (c *Client) GetReceivedByAccountMinConfAsync(account string, minConfirms int) FutureGetReceivedByAccountResult { cmd := btcjson.NewGetReceivedByAccountCmd(account, &minConfirms) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetReceivedByAccountMinConf returns the total amount received with the @@ -1575,12 +1880,12 @@ func (c *Client) GetReceivedByAccountMinConf(account string, minConfirms int) (b // FutureGetUnconfirmedBalanceResult is a future promise to deliver the result // of a GetUnconfirmedBalanceAsync RPC invocation (or an applicable error). -type FutureGetUnconfirmedBalanceResult chan *response +type FutureGetUnconfirmedBalanceResult chan *Response -// Receive waits for the response promised by the future and returns returns the +// Receive waits for the Response promised by the future and returns returns the // unconfirmed balance from the server for the specified account. func (r FutureGetUnconfirmedBalanceResult) Receive() (btcutil.Amount, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -1607,7 +1912,7 @@ func (r FutureGetUnconfirmedBalanceResult) Receive() (btcutil.Amount, error) { // See GetUnconfirmedBalance for the blocking version and more details. func (c *Client) GetUnconfirmedBalanceAsync(account string) FutureGetUnconfirmedBalanceResult { cmd := btcjson.NewGetUnconfirmedBalanceCmd(&account) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetUnconfirmedBalance returns the unconfirmed balance from the server for @@ -1619,12 +1924,12 @@ func (c *Client) GetUnconfirmedBalance(account string) (btcutil.Amount, error) { // FutureGetReceivedByAddressResult is a future promise to deliver the result of // a GetReceivedByAddressAsync or GetReceivedByAddressMinConfAsync RPC // invocation (or an applicable error). -type FutureGetReceivedByAddressResult chan *response +type FutureGetReceivedByAddressResult chan *Response -// Receive waits for the response promised by the future and returns the total +// Receive waits for the Response promised by the future and returns the total // amount received by the specified address. func (r FutureGetReceivedByAddressResult) Receive() (btcutil.Amount, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return 0, err } @@ -1652,7 +1957,7 @@ func (r FutureGetReceivedByAddressResult) Receive() (btcutil.Amount, error) { func (c *Client) GetReceivedByAddressAsync(address btcutil.Address) FutureGetReceivedByAddressResult { addr := address.EncodeAddress() cmd := btcjson.NewGetReceivedByAddressCmd(addr, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } @@ -1673,7 +1978,7 @@ func (c *Client) GetReceivedByAddress(address btcutil.Address) (btcutil.Amount, func (c *Client) GetReceivedByAddressMinConfAsync(address btcutil.Address, minConfirms int) FutureGetReceivedByAddressResult { addr := address.EncodeAddress() cmd := btcjson.NewGetReceivedByAddressCmd(addr, &minConfirms) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetReceivedByAddressMinConf returns the total amount received by the specified @@ -1688,12 +1993,12 @@ func (c *Client) GetReceivedByAddressMinConf(address btcutil.Address, minConfirm // of a ListReceivedByAccountAsync, ListReceivedByAccountMinConfAsync, or // ListReceivedByAccountIncludeEmptyAsync RPC invocation (or an applicable // error). -type FutureListReceivedByAccountResult chan *response +type FutureListReceivedByAccountResult chan *Response -// Receive waits for the response promised by the future and returns a list of +// Receive waits for the Response promised by the future and returns a list of // balances by account. func (r FutureListReceivedByAccountResult) Receive() ([]btcjson.ListReceivedByAccountResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1715,7 +2020,7 @@ func (r FutureListReceivedByAccountResult) Receive() ([]btcjson.ListReceivedByAc // See ListReceivedByAccount for the blocking version and more details. func (c *Client) ListReceivedByAccountAsync() FutureListReceivedByAccountResult { cmd := btcjson.NewListReceivedByAccountCmd(nil, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListReceivedByAccount lists balances by account using the default number @@ -1736,7 +2041,7 @@ func (c *Client) ListReceivedByAccount() ([]btcjson.ListReceivedByAccountResult, // See ListReceivedByAccountMinConf for the blocking version and more details. func (c *Client) ListReceivedByAccountMinConfAsync(minConfirms int) FutureListReceivedByAccountResult { cmd := btcjson.NewListReceivedByAccountCmd(&minConfirms, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListReceivedByAccountMinConf lists balances by account using the specified @@ -1758,7 +2063,7 @@ func (c *Client) ListReceivedByAccountMinConf(minConfirms int) ([]btcjson.ListRe func (c *Client) ListReceivedByAccountIncludeEmptyAsync(minConfirms int, includeEmpty bool) FutureListReceivedByAccountResult { cmd := btcjson.NewListReceivedByAccountCmd(&minConfirms, &includeEmpty, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListReceivedByAccountIncludeEmpty lists balances by account using the @@ -1775,12 +2080,12 @@ func (c *Client) ListReceivedByAccountIncludeEmpty(minConfirms int, includeEmpty // of a ListReceivedByAddressAsync, ListReceivedByAddressMinConfAsync, or // ListReceivedByAddressIncludeEmptyAsync RPC invocation (or an applicable // error). -type FutureListReceivedByAddressResult chan *response +type FutureListReceivedByAddressResult chan *Response -// Receive waits for the response promised by the future and returns a list of +// Receive waits for the Response promised by the future and returns a list of // balances by address. func (r FutureListReceivedByAddressResult) Receive() ([]btcjson.ListReceivedByAddressResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -1802,7 +2107,7 @@ func (r FutureListReceivedByAddressResult) Receive() ([]btcjson.ListReceivedByAd // See ListReceivedByAddress for the blocking version and more details. func (c *Client) ListReceivedByAddressAsync() FutureListReceivedByAddressResult { cmd := btcjson.NewListReceivedByAddressCmd(nil, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListReceivedByAddress lists balances by address using the default number @@ -1823,7 +2128,7 @@ func (c *Client) ListReceivedByAddress() ([]btcjson.ListReceivedByAddressResult, // See ListReceivedByAddressMinConf for the blocking version and more details. func (c *Client) ListReceivedByAddressMinConfAsync(minConfirms int) FutureListReceivedByAddressResult { cmd := btcjson.NewListReceivedByAddressCmd(&minConfirms, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListReceivedByAddressMinConf lists balances by address using the specified @@ -1845,7 +2150,7 @@ func (c *Client) ListReceivedByAddressMinConf(minConfirms int) ([]btcjson.ListRe func (c *Client) ListReceivedByAddressIncludeEmptyAsync(minConfirms int, includeEmpty bool) FutureListReceivedByAddressResult { cmd := btcjson.NewListReceivedByAddressCmd(&minConfirms, &includeEmpty, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ListReceivedByAddressIncludeEmpty lists balances by address using the @@ -1864,12 +2169,12 @@ func (c *Client) ListReceivedByAddressIncludeEmpty(minConfirms int, includeEmpty // FutureWalletLockResult is a future promise to deliver the result of a // WalletLockAsync RPC invocation (or an applicable error). -type FutureWalletLockResult chan *response +type FutureWalletLockResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of locking the wallet. func (r FutureWalletLockResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1880,7 +2185,7 @@ func (r FutureWalletLockResult) Receive() error { // See WalletLock for the blocking version and more details. func (c *Client) WalletLockAsync() FutureWalletLockResult { cmd := btcjson.NewWalletLockCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // WalletLock locks the wallet by removing the encryption key from memory. @@ -1903,12 +2208,12 @@ func (c *Client) WalletPassphrase(passphrase string, timeoutSecs int64) error { // FutureWalletPassphraseChangeResult is a future promise to deliver the result // of a WalletPassphraseChangeAsync RPC invocation (or an applicable error). -type FutureWalletPassphraseChangeResult chan *response +type FutureWalletPassphraseChangeResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of changing the wallet passphrase. func (r FutureWalletPassphraseChangeResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -1919,7 +2224,7 @@ func (r FutureWalletPassphraseChangeResult) Receive() error { // See WalletPassphraseChange for the blocking version and more details. func (c *Client) WalletPassphraseChangeAsync(old, new string) FutureWalletPassphraseChangeResult { cmd := btcjson.NewWalletPassphraseChangeCmd(old, new) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // WalletPassphraseChange changes the wallet passphrase from the specified old @@ -1934,12 +2239,12 @@ func (c *Client) WalletPassphraseChange(old, new string) error { // FutureSignMessageResult is a future promise to deliver the result of a // SignMessageAsync RPC invocation (or an applicable error). -type FutureSignMessageResult chan *response +type FutureSignMessageResult chan *Response -// Receive waits for the response promised by the future and returns the message +// Receive waits for the Response promised by the future and returns the message // signed with the private key of the specified address. func (r FutureSignMessageResult) Receive() (string, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return "", err } @@ -1962,7 +2267,7 @@ func (r FutureSignMessageResult) Receive() (string, error) { func (c *Client) SignMessageAsync(address btcutil.Address, message string) FutureSignMessageResult { addr := address.EncodeAddress() cmd := btcjson.NewSignMessageCmd(addr, message) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // SignMessage signs a message with the private key of the specified address. @@ -1975,12 +2280,12 @@ func (c *Client) SignMessage(address btcutil.Address, message string) (string, e // FutureVerifyMessageResult is a future promise to deliver the result of a // VerifyMessageAsync RPC invocation (or an applicable error). -type FutureVerifyMessageResult chan *response +type FutureVerifyMessageResult chan *Response -// Receive waits for the response promised by the future and returns whether or +// Receive waits for the Response promised by the future and returns whether or // not the message was successfully verified. func (r FutureVerifyMessageResult) Receive() (bool, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return false, err } @@ -2003,7 +2308,7 @@ func (r FutureVerifyMessageResult) Receive() (bool, error) { func (c *Client) VerifyMessageAsync(address btcutil.Address, signature, message string) FutureVerifyMessageResult { addr := address.EncodeAddress() cmd := btcjson.NewVerifyMessageCmd(addr, signature, message) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // VerifyMessage verifies a signed message. @@ -2020,13 +2325,13 @@ func (c *Client) VerifyMessage(address btcutil.Address, signature, message strin // FutureDumpPrivKeyResult is a future promise to deliver the result of a // DumpPrivKeyAsync RPC invocation (or an applicable error). -type FutureDumpPrivKeyResult chan *response +type FutureDumpPrivKeyResult chan *Response -// Receive waits for the response promised by the future and returns the private +// Receive waits for the Response promised by the future and returns the private // key corresponding to the passed address encoded in the wallet import format // (WIF) func (r FutureDumpPrivKeyResult) Receive() (*btcutil.WIF, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2049,7 +2354,7 @@ func (r FutureDumpPrivKeyResult) Receive() (*btcutil.WIF, error) { func (c *Client) DumpPrivKeyAsync(address btcutil.Address) FutureDumpPrivKeyResult { addr := address.EncodeAddress() cmd := btcjson.NewDumpPrivKeyCmd(addr) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // DumpPrivKey gets the private key corresponding to the passed address encoded @@ -2063,12 +2368,12 @@ func (c *Client) DumpPrivKey(address btcutil.Address) (*btcutil.WIF, error) { // FutureImportAddressResult is a future promise to deliver the result of an // ImportAddressAsync RPC invocation (or an applicable error). -type FutureImportAddressResult chan *response +type FutureImportAddressResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of importing the passed public address. func (r FutureImportAddressResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -2079,7 +2384,7 @@ func (r FutureImportAddressResult) Receive() error { // See ImportAddress for the blocking version and more details. func (c *Client) ImportAddressAsync(address string) FutureImportAddressResult { cmd := btcjson.NewImportAddressCmd(address, "", nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ImportAddress imports the passed public address. @@ -2094,7 +2399,7 @@ func (c *Client) ImportAddress(address string) error { // See ImportAddress for the blocking version and more details. func (c *Client) ImportAddressRescanAsync(address string, account string, rescan bool) FutureImportAddressResult { cmd := btcjson.NewImportAddressCmd(address, account, &rescan) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ImportAddressRescan imports the passed public address. When rescan is true, @@ -2103,15 +2408,53 @@ func (c *Client) ImportAddressRescan(address string, account string, rescan bool return c.ImportAddressRescanAsync(address, account, rescan).Receive() } +// FutureImportMultiResult is a future promise to deliver the result of an +// ImportMultiAsync RPC invocation (or an applicable error). +type FutureImportMultiResult chan *Response + +// Receive waits for the Response promised by the future and returns the result +// of importing multiple addresses/scripts. +func (r FutureImportMultiResult) Receive() (btcjson.ImportMultiResults, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var importMultiResults btcjson.ImportMultiResults + err = json.Unmarshal(res, &importMultiResults) + if err != nil { + return nil, err + } + return importMultiResults, nil +} + +// ImportMultiAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See ImportMulti for the blocking version and more details. +func (c *Client) ImportMultiAsync(requests []btcjson.ImportMultiRequest, options *btcjson.ImportMultiOptions) FutureImportMultiResult { + cmd := btcjson.NewImportMultiCmd(requests, options) + return c.SendCmd(cmd) +} + +// ImportMulti imports addresses/scripts, optionally rescanning the blockchain +// from the earliest creation time of the imported scripts. +// +// See btcjson.ImportMultiRequest for details on the requests parameter. +func (c *Client) ImportMulti(requests []btcjson.ImportMultiRequest, options *btcjson.ImportMultiOptions) (btcjson.ImportMultiResults, error) { + return c.ImportMultiAsync(requests, options).Receive() +} + // FutureImportPrivKeyResult is a future promise to deliver the result of an // ImportPrivKeyAsync RPC invocation (or an applicable error). -type FutureImportPrivKeyResult chan *response +type FutureImportPrivKeyResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of importing the passed private key which must be the wallet import format // (WIF). func (r FutureImportPrivKeyResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -2127,7 +2470,7 @@ func (c *Client) ImportPrivKeyAsync(privKeyWIF *btcutil.WIF) FutureImportPrivKey } cmd := btcjson.NewImportPrivKeyCmd(wif, nil, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ImportPrivKey imports the passed private key which must be the wallet import @@ -2148,7 +2491,7 @@ func (c *Client) ImportPrivKeyLabelAsync(privKeyWIF *btcutil.WIF, label string) } cmd := btcjson.NewImportPrivKeyCmd(wif, &label, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ImportPrivKeyLabel imports the passed private key which must be the wallet import @@ -2169,7 +2512,7 @@ func (c *Client) ImportPrivKeyRescanAsync(privKeyWIF *btcutil.WIF, label string, } cmd := btcjson.NewImportPrivKeyCmd(wif, &label, &rescan) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ImportPrivKeyRescan imports the passed private key which must be the wallet import @@ -2181,12 +2524,12 @@ func (c *Client) ImportPrivKeyRescan(privKeyWIF *btcutil.WIF, label string, resc // FutureImportPubKeyResult is a future promise to deliver the result of an // ImportPubKeyAsync RPC invocation (or an applicable error). -type FutureImportPubKeyResult chan *response +type FutureImportPubKeyResult chan *Response -// Receive waits for the response promised by the future and returns the result +// Receive waits for the Response promised by the future and returns the result // of importing the passed public key. func (r FutureImportPubKeyResult) Receive() error { - _, err := receiveFuture(r) + _, err := ReceiveFuture(r) return err } @@ -2197,7 +2540,7 @@ func (r FutureImportPubKeyResult) Receive() error { // See ImportPubKey for the blocking version and more details. func (c *Client) ImportPubKeyAsync(pubKey string) FutureImportPubKeyResult { cmd := btcjson.NewImportPubKeyCmd(pubKey, nil) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ImportPubKey imports the passed public key. @@ -2212,7 +2555,7 @@ func (c *Client) ImportPubKey(pubKey string) error { // See ImportPubKey for the blocking version and more details. func (c *Client) ImportPubKeyRescanAsync(pubKey string, rescan bool) FutureImportPubKeyResult { cmd := btcjson.NewImportPubKeyCmd(pubKey, &rescan) - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // ImportPubKeyRescan imports the passed public key. When rescan is true, the @@ -2230,12 +2573,12 @@ func (c *Client) ImportPubKeyRescan(pubKey string, rescan bool) error { // FutureGetInfoResult is a future promise to deliver the result of a // GetInfoAsync RPC invocation (or an applicable error). -type FutureGetInfoResult chan *response +type FutureGetInfoResult chan *Response -// Receive waits for the response promised by the future and returns the info +// Receive waits for the Response promised by the future and returns the info // provided by the server. func (r FutureGetInfoResult) Receive() (*btcjson.InfoWalletResult, error) { - res, err := receiveFuture(r) + res, err := ReceiveFuture(r) if err != nil { return nil, err } @@ -2257,7 +2600,7 @@ func (r FutureGetInfoResult) Receive() (*btcjson.InfoWalletResult, error) { // See GetInfo for the blocking version and more details. func (c *Client) GetInfoAsync() FutureGetInfoResult { cmd := btcjson.NewGetInfoCmd() - return c.sendCmd(cmd) + return c.SendCmd(cmd) } // GetInfo returns miscellaneous info regarding the RPC server. The returned @@ -2267,13 +2610,265 @@ func (c *Client) GetInfo() (*btcjson.InfoWalletResult, error) { return c.GetInfoAsync().Receive() } +// FutureImportPubKeyResult is a future promise to deliver the result of an +// WalletCreateFundedPsbt RPC invocation (or an applicable error). +type FutureWalletCreateFundedPsbtResult chan *Response + +// Receive waits for the Response promised by the future and returns the +// partially signed transaction in PSBT format along with the resulting fee +// and change output index. +func (r FutureWalletCreateFundedPsbtResult) Receive() (*btcjson.WalletCreateFundedPsbtResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + // Unmarshal result as a getinfo result object. + var psbtRes btcjson.WalletCreateFundedPsbtResult + err = json.Unmarshal(res, &psbtRes) + if err != nil { + return nil, err + } + + return &psbtRes, nil +} + +// WalletCreateFundedPsbtAsync returns an instance of a type that can be used +// to get the result of the RPC at some future time by invoking the Receive +// function on the returned instance. +// +// See WalletCreateFundedPsbt for the blocking version and more details. +func (c *Client) WalletCreateFundedPsbtAsync( + inputs []btcjson.PsbtInput, outputs []btcjson.PsbtOutput, locktime *uint32, + options *btcjson.WalletCreateFundedPsbtOpts, bip32Derivs *bool, +) FutureWalletCreateFundedPsbtResult { + cmd := btcjson.NewWalletCreateFundedPsbtCmd(inputs, outputs, locktime, options, bip32Derivs) + return c.SendCmd(cmd) +} + +// WalletCreateFundedPsbt creates and funds a transaction in the Partially +// Signed Transaction format. Inputs will be added if supplied inputs are not +// enough. +func (c *Client) WalletCreateFundedPsbt( + inputs []btcjson.PsbtInput, outputs []btcjson.PsbtOutput, locktime *uint32, + options *btcjson.WalletCreateFundedPsbtOpts, bip32Derivs *bool, +) (*btcjson.WalletCreateFundedPsbtResult, error) { + return c.WalletCreateFundedPsbtAsync(inputs, outputs, locktime, options, bip32Derivs).Receive() +} + +// FutureWalletProcessPsbtResult is a future promise to deliver the result of a +// WalletCreateFundedPsb RPC invocation (or an applicable error). +type FutureWalletProcessPsbtResult chan *Response + +// Receive waits for the Response promised by the future and returns an updated +// PSBT with signed inputs from the wallet and a boolen indicating if the the +// transaction has a complete set of signatures. +func (r FutureWalletProcessPsbtResult) Receive() (*btcjson.WalletProcessPsbtResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + // Unmarshal result as a getinfo result object. + var psbtRes btcjson.WalletProcessPsbtResult + err = json.Unmarshal(res, &psbtRes) + if err != nil { + return nil, err + } + + return &psbtRes, nil +} + +// WalletProcessPsbtAsync returns an instance of a type that can be used +// to get the result of the RPC at some future time by invoking the Receive +// function on the returned instance. +// +// See WalletProcessPsbt for the blocking version and more details. +func (c *Client) WalletProcessPsbtAsync( + psbt string, sign *bool, sighashType SigHashType, bip32Derivs *bool, +) FutureWalletProcessPsbtResult { + cmd := btcjson.NewWalletProcessPsbtCmd(psbt, sign, btcjson.String(sighashType.String()), bip32Derivs) + return c.SendCmd(cmd) +} + +// WalletProcessPsbt updates a PSBT with input information from our wallet and +// then signs inputs. +func (c *Client) WalletProcessPsbt( + psbt string, sign *bool, sighashType SigHashType, bip32Derivs *bool, +) (*btcjson.WalletProcessPsbtResult, error) { + return c.WalletProcessPsbtAsync(psbt, sign, sighashType, bip32Derivs).Receive() +} + +// FutureGetWalletInfoResult is a future promise to deliver the result of an +// GetWalletInfoAsync RPC invocation (or an applicable error). +type FutureGetWalletInfoResult chan *Response + +// Receive waits for the Response promised by the future and returns the result +// of wallet state info. +func (r FutureGetWalletInfoResult) Receive() (*btcjson.GetWalletInfoResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var getWalletInfoResult btcjson.GetWalletInfoResult + err = json.Unmarshal(res, &getWalletInfoResult) + if err != nil { + return nil, err + } + return &getWalletInfoResult, nil +} + +// GetWalletInfoAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See GetWalletInfo for the blocking version and more details. +func (c *Client) GetWalletInfoAsync() FutureGetWalletInfoResult { + cmd := btcjson.NewGetWalletInfoCmd() + return c.SendCmd(cmd) +} + +// GetWalletInfo returns various wallet state info. +func (c *Client) GetWalletInfo() (*btcjson.GetWalletInfoResult, error) { + return c.GetWalletInfoAsync().Receive() +} + +// FutureBackupWalletResult is a future promise to deliver the result of an +// BackupWalletAsync RPC invocation (or an applicable error) +type FutureBackupWalletResult chan *Response + +// Receive waits for the Response promised by the future +func (r FutureBackupWalletResult) Receive() error { + _, err := ReceiveFuture(r) + return err +} + +// BackupWalletAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See BackupWallet for the blocking version and more details. +func (c *Client) BackupWalletAsync(destination string) FutureBackupWalletResult { + return c.SendCmd(btcjson.NewBackupWalletCmd(destination)) +} + +// BackupWallet safely copies current wallet file to destination, which can +// be a directory or a path with filename +func (c *Client) BackupWallet(destination string) error { + return c.BackupWalletAsync(destination).Receive() +} + +// FutureDumpWalletResult is a future promise to deliver the result of an +// DumpWallet RPC invocation (or an applicable error) +type FutureDumpWalletResult chan *Response + +// Receive waits for the Response promised by the future +func (r FutureDumpWalletResult) Receive() (*btcjson.DumpWalletResult, error) { + bytes, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + + var res btcjson.DumpWalletResult + err = json.Unmarshal(bytes, &res) + return &res, err +} + +// DumpWalletAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See DumpWalletAsync for the blocking version and more details. +func (c *Client) DumpWalletAsync(destination string) FutureDumpWalletResult { + return c.SendCmd(btcjson.NewDumpWalletCmd(destination)) +} + +// DumpWallet dumps all wallet keys in a human-readable format to a server-side file. +func (c *Client) DumpWallet(destination string) (*btcjson.DumpWalletResult, error) { + return c.DumpWalletAsync(destination).Receive() +} + +// FutureImportWalletResult is a future promise to deliver the result of an +// ImportWalletAsync RPC invocation (or an applicable error) +type FutureImportWalletResult chan *Response + +// Receive waits for the Response promised by the future +func (r FutureImportWalletResult) Receive() error { + _, err := ReceiveFuture(r) + return err +} + +// ImportWalletAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See ImportWallet for the blocking version and more details. +func (c *Client) ImportWalletAsync(filename string) FutureImportWalletResult { + return c.SendCmd(btcjson.NewImportWalletCmd(filename)) +} + +// ImportWallet imports keys from a wallet dump file (see DumpWallet). +func (c *Client) ImportWallet(filename string) error { + return c.ImportWalletAsync(filename).Receive() +} + +// FutureUnloadWalletResult is a future promise to deliver the result of an +// UnloadWalletAsync RPC invocation (or an applicable error) +type FutureUnloadWalletResult chan *Response + +// Receive waits for the Response promised by the future +func (r FutureUnloadWalletResult) Receive() error { + _, err := ReceiveFuture(r) + return err +} + +// UnloadWalletAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See UnloadWallet for the blocking version and more details. +func (c *Client) UnloadWalletAsync(walletName *string) FutureUnloadWalletResult { + return c.SendCmd(btcjson.NewUnloadWalletCmd(walletName)) +} + +// UnloadWallet unloads the referenced wallet. If the RPC server URL already +// contains the name of the wallet, like http://127.0.0.1:8332/wallet/, +// the parameter must be nil, or it'll return an error. +func (c *Client) UnloadWallet(walletName *string) error { + return c.UnloadWalletAsync(walletName).Receive() +} + +// FutureLoadWalletResult is a future promise to deliver the result of an +// LoadWalletAsync RPC invocation (or an applicable error) +type FutureLoadWalletResult chan *Response + +// Receive waits for the Response promised by the future +func (r FutureLoadWalletResult) Receive() (*btcjson.LoadWalletResult, error) { + bytes, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + var result btcjson.LoadWalletResult + err = json.Unmarshal(bytes, &result) + return &result, err +} + +// LoadWalletAsync returns an instance of a type that can be used to get the result +// of the RPC at some future time by invoking the Receive function on the +// returned instance. +// +// See LoadWallet for the blocking version and more details. +func (c *Client) LoadWalletAsync(walletName string) FutureLoadWalletResult { + return c.SendCmd(btcjson.NewLoadWalletCmd(walletName)) +} + +// LoadWallet loads a wallet from a wallet file or directory. +func (c *Client) LoadWallet(walletName string) (*btcjson.LoadWalletResult, error) { + return c.LoadWalletAsync(walletName).Receive() +} + // TODO(davec): Implement -// backupwallet (NYI in btcwallet) // encryptwallet (Won't be supported by btcwallet since it's always encrypted) -// getwalletinfo (NYI in btcwallet or btcjson) // listaddressgroupings (NYI in btcwallet) // listreceivedbyaccount (NYI in btcwallet) - -// DUMP -// importwallet (NYI in btcwallet) -// dumpwallet (NYI in btcwallet) diff --git a/rpcclient/zmq.go b/rpcclient/zmq.go new file mode 100644 index 0000000000..1a5405eb77 --- /dev/null +++ b/rpcclient/zmq.go @@ -0,0 +1,39 @@ +package rpcclient + +import ( + "encoding/json" + + "github.com/btcsuite/btcd/btcjson" +) + +// FutureGetZmqNotificationsResult is a future promise to deliver the result of +// a GetZmqNotifications RPC invocation +type FutureGetZmqNotificationsResult chan *Response + +// Receive waits for the response promised by the future and returns the unmarshalled +// response, or an error if the request was unsuccessful. +func (r FutureGetZmqNotificationsResult) Receive() (btcjson.GetZmqNotificationResult, error) { + res, err := ReceiveFuture(r) + if err != nil { + return nil, err + } + var notifications btcjson.GetZmqNotificationResult + if err := json.Unmarshal(res, ¬ifications); err != nil { + return nil, err + } + return notifications, nil +} + +// GetZmqNotificationsAsync returns an instance ofa type that can be used to get +// the result of a custom RPC request at some future time by invoking the Receive +// function on the returned instance. +// +// See GetZmqNotifications for the blocking version and more details. +func (c *Client) GetZmqNotificationsAsync() FutureGetZmqNotificationsResult { + return c.SendCmd(btcjson.NewGetZmqNotificationsCmd()) +} + +// GetZmqNotifications returns information about the active ZeroMQ notifications. +func (c *Client) GetZmqNotifications() (btcjson.GetZmqNotificationResult, error) { + return c.GetZmqNotificationsAsync().Receive() +} diff --git a/rpcserver.go b/rpcserver.go index e762cc1a9d..b917263df5 100644 --- a/rpcserver.go +++ b/rpcserver.go @@ -29,8 +29,9 @@ import ( "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/blockchain/indexers" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/btcjson" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/database" @@ -40,7 +41,6 @@ import ( "github.com/btcsuite/btcd/peer" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" "github.com/btcsuite/websocket" ) @@ -101,6 +101,9 @@ var ( // declared here to avoid the overhead of creating the slice on every // invocation for constant data. gbtCapabilities = []string{"proposal"} + + // JSON 2.0 batched request prefix + batchedRequestPrefix = []byte("[") ) // Errors @@ -127,52 +130,54 @@ type commandHandler func(*rpcServer, interface{}, <-chan struct{}) (interface{}, // a dependency loop. var rpcHandlers map[string]commandHandler var rpcHandlersBeforeInit = map[string]commandHandler{ - "addnode": handleAddNode, - "createrawtransaction": handleCreateRawTransaction, - "debuglevel": handleDebugLevel, - "decoderawtransaction": handleDecodeRawTransaction, - "decodescript": handleDecodeScript, - "estimatefee": handleEstimateFee, - "generate": handleGenerate, - "getaddednodeinfo": handleGetAddedNodeInfo, - "getbestblock": handleGetBestBlock, - "getbestblockhash": handleGetBestBlockHash, - "getblock": handleGetBlock, - "getblockchaininfo": handleGetBlockChainInfo, - "getblockcount": handleGetBlockCount, - "getblockhash": handleGetBlockHash, - "getblockheader": handleGetBlockHeader, - "getblocktemplate": handleGetBlockTemplate, - "getcfilter": handleGetCFilter, - "getcfilterheader": handleGetCFilterHeader, - "getconnectioncount": handleGetConnectionCount, - "getcurrentnet": handleGetCurrentNet, - "getdifficulty": handleGetDifficulty, - "getgenerate": handleGetGenerate, - "gethashespersec": handleGetHashesPerSec, - "getheaders": handleGetHeaders, - "getinfo": handleGetInfo, - "getmempoolinfo": handleGetMempoolInfo, - "getmininginfo": handleGetMiningInfo, - "getnettotals": handleGetNetTotals, - "getnetworkhashps": handleGetNetworkHashPS, - "getpeerinfo": handleGetPeerInfo, - "getrawmempool": handleGetRawMempool, - "getrawtransaction": handleGetRawTransaction, - "gettxout": handleGetTxOut, - "help": handleHelp, - "node": handleNode, - "ping": handlePing, - "searchrawtransactions": handleSearchRawTransactions, - "sendrawtransaction": handleSendRawTransaction, - "setgenerate": handleSetGenerate, - "stop": handleStop, - "submitblock": handleSubmitBlock, - "uptime": handleUptime, - "validateaddress": handleValidateAddress, - "verifychain": handleVerifyChain, - "verifymessage": handleVerifyMessage, - "version": handleVersion, + "addnode": handleAddNode, + "createrawtransaction": handleCreateRawTransaction, + "debuglevel": handleDebugLevel, + "decoderawtransaction": handleDecodeRawTransaction, + "decodescript": handleDecodeScript, + "estimatefee": handleEstimateFee, + "generate": handleGenerate, + "getaddednodeinfo": handleGetAddedNodeInfo, + "getbestblock": handleGetBestBlock, + "getbestblockhash": handleGetBestBlockHash, + "getblock": handleGetBlock, + "getblockchaininfo": handleGetBlockChainInfo, + "getblockcount": handleGetBlockCount, + "getblockhash": handleGetBlockHash, + "getblockheader": handleGetBlockHeader, + "getblocktemplate": handleGetBlockTemplate, + "getcfilter": handleGetCFilter, + "getcfilterheader": handleGetCFilterHeader, + "getconnectioncount": handleGetConnectionCount, + "getcurrentnet": handleGetCurrentNet, + "getdifficulty": handleGetDifficulty, + "getgenerate": handleGetGenerate, + "gethashespersec": handleGetHashesPerSec, + "getheaders": handleGetHeaders, + "getinfo": handleGetInfo, + "getmempoolinfo": handleGetMempoolInfo, + "getmininginfo": handleGetMiningInfo, + "getnettotals": handleGetNetTotals, + "getnetworkhashps": handleGetNetworkHashPS, + "getnodeaddresses": handleGetNodeAddresses, + "getpeerinfo": handleGetPeerInfo, + "getrawmempool": handleGetRawMempool, + "getrawtransaction": handleGetRawTransaction, + "gettxout": handleGetTxOut, + "help": handleHelp, + "node": handleNode, + "ping": handlePing, + "searchrawtransactions": handleSearchRawTransactions, + "sendrawtransaction": handleSendRawTransaction, + "setgenerate": handleSetGenerate, + "signmessagewithprivkey": handleSignMessageWithPrivKey, + "stop": handleStop, + "submitblock": handleSubmitBlock, + "uptime": handleUptime, + "validateaddress": handleValidateAddress, + "verifychain": handleVerifyChain, + "verifymessage": handleVerifyMessage, + "version": handleVersion, } // list of commands that we recognize, but for which btcd has no support because @@ -543,7 +548,7 @@ func handleCreateRawTransaction(s *rpcServer, cmd interface{}, closeChan <-chan params := s.cfg.ChainParams for encodedAddr, amount := range c.Amounts { // Ensure amount is in the valid range for monetary amounts. - if amount <= 0 || amount > btcutil.MaxSatoshi { + if amount <= 0 || amount*btcutil.SatoshiPerBitcoin > btcutil.MaxSatoshi { return nil, &btcjson.RPCError{ Code: btcjson.ErrRPCType, Message: "Invalid amount", @@ -759,7 +764,7 @@ func createTxRawResult(chainParams *chaincfg.Params, mtx *wire.MsgTx, Weight: int32(blockchain.GetTransactionWeight(btcutil.NewTx(mtx))), Vin: createVinList(mtx), Vout: createVoutList(mtx, chainParams, nil), - Version: mtx.Version, + Version: uint32(mtx.Version), LockTime: mtx.LockTime, } @@ -1081,14 +1086,12 @@ func handleGetBlock(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (i Message: "Block not found", } } - - // When the verbose flag isn't set, simply return the serialized block - // as a hex-encoded string. - if c.Verbose != nil && !*c.Verbose { + // If verbosity is 0, return the serialized block as a hex encoded string. + if c.Verbosity != nil && *c.Verbosity == 0 { return hex.EncodeToString(blkBytes), nil } - // The verbose flag is set, so generate the JSON object and return it. + // Otherwise, generate the JSON object and return it. // Deserialize the block. blk, err := btcutil.NewBlockFromBytes(blkBytes) @@ -1137,7 +1140,7 @@ func handleGetBlock(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (i NextHash: nextHashString, } - if c.VerboseTx == nil || !*c.VerboseTx { + if *c.Verbosity == 1 { transactions := blk.Transactions() txNames := make([]string, len(transactions)) for i, tx := range transactions { @@ -1247,12 +1250,18 @@ func handleGetBlockChainInfo(s *rpcServer, cmd interface{}, closeChan <-chan str case chaincfg.DeploymentTestDummy: forkName = "dummy" + case chaincfg.DeploymentTestDummyMinActivation: + forkName = "dummy-min-activation" + case chaincfg.DeploymentCSV: forkName = "csv" case chaincfg.DeploymentSegwit: forkName = "segwit" + case chaincfg.DeploymentTaproot: + forkName = "taproot" + default: return nil, &btcjson.RPCError{ Code: btcjson.ErrRPCInternal.Code, @@ -1283,11 +1292,19 @@ func handleGetBlockChainInfo(s *rpcServer, cmd interface{}, closeChan <-chan str // Finally, populate the soft-fork description with all the // information gathered above. + var startTime, endTime int64 + if starter, ok := deploymentDetails.DeploymentStarter.(*chaincfg.MedianTimeDeploymentStarter); ok { + startTime = starter.StartTime().Unix() + } + if ender, ok := deploymentDetails.DeploymentEnder.(*chaincfg.MedianTimeDeploymentEnder); ok { + endTime = ender.EndTime().Unix() + } chainInfo.SoftForks.Bip9SoftForks[forkName] = &btcjson.Bip9SoftForkDescription{ - Status: strings.ToLower(statusString), - Bit: deploymentDetails.BitNumber, - StartTime2: int64(deploymentDetails.StartTime), - Timeout: int64(deploymentDetails.ExpireTime), + Status: strings.ToLower(statusString), + Bit: deploymentDetails.BitNumber, + StartTime2: startTime, + Timeout: endTime, + MinActivationHeight: int32(deploymentDetails.MinActivationHeight), } } @@ -1689,8 +1706,8 @@ func (state *gbtWorkState) blockTemplateResult(useCoinbaseValue bool, submitOld transactions := make([]btcjson.GetBlockTemplateResultTx, 0, numTx-1) txIndex := make(map[chainhash.Hash]int64, numTx) for i, tx := range msgBlock.Transactions { - txHash := tx.TxHash() - txIndex[txHash] = int64(i) + txID := tx.TxHash() + txIndex[txID] = int64(i) // Skip the coinbase transaction. if i == 0 { @@ -1724,7 +1741,8 @@ func (state *gbtWorkState) blockTemplateResult(useCoinbaseValue bool, submitOld bTx := btcutil.NewTx(tx) resultTx := btcjson.GetBlockTemplateResultTx{ Data: hex.EncodeToString(txBuf.Bytes()), - Hash: txHash.String(), + TxID: txID.String(), + Hash: tx.WitnessHash().String(), Depends: depends, Fee: template.Fees[i], SigOps: template.SigOpCosts[i], @@ -2348,11 +2366,11 @@ func handleGetMiningInfo(s *rpcServer, cmd interface{}, closeChan <-chan struct{ if err != nil { return nil, err } - networkHashesPerSec, ok := networkHashesPerSecIface.(int64) + networkHashesPerSec, ok := networkHashesPerSecIface.(float64) if !ok { return nil, &btcjson.RPCError{ Code: btcjson.ErrRPCInternal.Code, - Message: "networkHashesPerSec is not an int64", + Message: "networkHashesPerSec is not a float64", } } @@ -2365,7 +2383,7 @@ func handleGetMiningInfo(s *rpcServer, cmd interface{}, closeChan <-chan struct{ Difficulty: getDifficultyRatio(best.Bits, s.cfg.ChainParams), Generate: s.cfg.CPUMiner.IsMining(), GenProcLimit: s.cfg.CPUMiner.NumWorkers(), - HashesPerSec: int64(s.cfg.CPUMiner.HashesPerSecond()), + HashesPerSec: s.cfg.CPUMiner.HashesPerSecond(), NetworkHashPS: networkHashesPerSec, PooledTx: uint64(s.cfg.TxMemPool.Count()), TestNet: cfg.TestNet3, @@ -2386,8 +2404,8 @@ func handleGetNetTotals(s *rpcServer, cmd interface{}, closeChan <-chan struct{} // handleGetNetworkHashPS implements the getnetworkhashps command. func handleGetNetworkHashPS(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) { - // Note: All valid error return paths should return an int64. - // Literal zeros are inferred as int, and won't coerce to int64 + // Note: All valid error return paths should return a float64. + // Literal zeros are inferred as int, and won't coerce to float64 // because the return value is an interface{}. c := cmd.(*btcjson.GetNetworkHashPSCmd) @@ -2402,7 +2420,7 @@ func handleGetNetworkHashPS(s *rpcServer, cmd interface{}, closeChan <-chan stru endHeight = int32(*c.Height) } if endHeight > best.Height || endHeight == 0 { - return int64(0), nil + return float64(0), nil } if endHeight < 0 { endHeight = best.Height @@ -2469,13 +2487,47 @@ func handleGetNetworkHashPS(s *rpcServer, cmd interface{}, closeChan <-chan stru // Calculate the difference in seconds between the min and max block // timestamps and avoid division by zero in the case where there is no // time difference. - timeDiff := int64(maxTimestamp.Sub(minTimestamp) / time.Second) + timeDiff := maxTimestamp.Sub(minTimestamp).Seconds() if timeDiff == 0 { - return int64(0), nil + return timeDiff, nil } - hashesPerSec := new(big.Int).Div(totalWork, big.NewInt(timeDiff)) - return hashesPerSec.Int64(), nil + hashesPerSec, _ := new(big.Float).Quo(new(big.Float).SetInt(totalWork), new(big.Float).SetFloat64(timeDiff)).Float64() + return hashesPerSec, nil +} + +// handleGetNodeAddresses implements the getnodeaddresses command. +func handleGetNodeAddresses(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) { + c := cmd.(*btcjson.GetNodeAddressesCmd) + + count := int32(1) + if c.Count != nil { + count = *c.Count + if count <= 0 { + return nil, &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidParameter, + Message: "Address count out of range", + } + } + } + + nodes := s.cfg.ConnMgr.NodeAddresses() + if n := int32(len(nodes)); n < count { + count = n + } + + addresses := make([]*btcjson.GetNodeAddressesResult, 0, count) + for _, node := range nodes[:count] { + address := &btcjson.GetNodeAddressesResult{ + Time: node.Timestamp.Unix(), + Services: uint64(node.Services), + Address: node.Addr.String(), + Port: node.Port, + } + addresses = append(addresses, address) + } + + return addresses, nil } // handleGetPeerInfo implements the getpeerinfo command. @@ -3437,6 +3489,52 @@ func handleSetGenerate(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) return nil, nil } +// Text used to signify that a signed message follows and to prevent +// inadvertently signing a transaction. +const messageSignatureHeader = "Bitcoin Signed Message:\n" + +// handleSignMessageWithPrivKey implements the signmessagewithprivkey command. +func handleSignMessageWithPrivKey(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) { + c := cmd.(*btcjson.SignMessageWithPrivKeyCmd) + + wif, err := btcutil.DecodeWIF(c.PrivKey) + if err != nil { + message := "Invalid private key" + switch err { + case btcutil.ErrMalformedPrivateKey: + message = "Malformed private key" + case btcutil.ErrChecksumMismatch: + message = "Private key checksum mismatch" + } + return nil, &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidAddressOrKey, + Message: message, + } + } + if !wif.IsForNet(s.cfg.ChainParams) { + return nil, &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidAddressOrKey, + Message: "Private key for wrong network", + } + } + + var buf bytes.Buffer + wire.WriteVarString(&buf, 0, messageSignatureHeader) + wire.WriteVarString(&buf, 0, c.Message) + messageHash := chainhash.DoubleHashB(buf.Bytes()) + + sig, err := ecdsa.SignCompact(wif.PrivKey, + messageHash, wif.CompressPubKey) + if err != nil { + return nil, &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidAddressOrKey, + Message: "Sign failed", + } + } + + return base64.StdEncoding.EncodeToString(sig), nil +} + // handleStop implements the stop command. func handleStop(s *rpcServer, cmd interface{}, closeChan <-chan struct{}) (interface{}, error) { select { @@ -3495,6 +3593,37 @@ func handleValidateAddress(s *rpcServer, cmd interface{}, closeChan <-chan struc return result, nil } + switch addr := addr.(type) { + case *btcutil.AddressPubKeyHash: + result.IsScript = btcjson.Bool(false) + result.IsWitness = btcjson.Bool(false) + + case *btcutil.AddressScriptHash: + result.IsScript = btcjson.Bool(true) + result.IsWitness = btcjson.Bool(false) + + case *btcutil.AddressPubKey: + result.IsScript = btcjson.Bool(false) + result.IsWitness = btcjson.Bool(false) + + case *btcutil.AddressWitnessPubKeyHash: + result.IsScript = btcjson.Bool(false) + result.IsWitness = btcjson.Bool(true) + result.WitnessVersion = btcjson.Int32(int32(addr.WitnessVersion())) + result.WitnessProgram = btcjson.String(hex.EncodeToString(addr.WitnessProgram())) + + case *btcutil.AddressWitnessScriptHash: + result.IsScript = btcjson.Bool(true) + result.IsWitness = btcjson.Bool(true) + result.WitnessVersion = btcjson.Int32(int32(addr.WitnessVersion())) + result.WitnessProgram = btcjson.String(hex.EncodeToString(addr.WitnessProgram())) + + default: + // Handle the case when a new Address is supported by btcutil, but none + // of the cases were matched in the switch block. The current behaviour + // is to do nothing, and only populate the Address and IsValid fields. + } + result.Address = addr.EncodeAddress() result.IsValid = true @@ -3586,10 +3715,10 @@ func handleVerifyMessage(s *rpcServer, cmd interface{}, closeChan <-chan struct{ // Validate the signature - this just shows that it was valid at all. // we will compare it with the key next. var buf bytes.Buffer - wire.WriteVarString(&buf, 0, "Bitcoin Signed Message:\n") + wire.WriteVarString(&buf, 0, messageSignatureHeader) wire.WriteVarString(&buf, 0, c.Message) expectedMessageHash := chainhash.DoubleHashB(buf.Bytes()) - pk, wasCompressed, err := btcec.RecoverCompact(btcec.S256(), sig, + pk, wasCompressed, err := ecdsa.RecoverCompact(sig, expectedMessageHash) if err != nil { // Mirror Bitcoin Core behavior, which treats error in @@ -3827,10 +3956,11 @@ func (s *rpcServer) checkAuth(r *http.Request, require bool) (bool, bool, error) // a known concrete command along with any error that might have happened while // parsing it. type parsedRPCCmd struct { - id interface{} - method string - cmd interface{} - err *btcjson.RPCError + jsonrpc btcjson.RPCVersion + id interface{} + method string + cmd interface{} + err *btcjson.RPCError } // standardCmdResult checks that a parsed command is a standard Bitcoin JSON-RPC @@ -3863,9 +3993,11 @@ handled: // is suitable for use in replies if the command is invalid in some way such as // an unregistered command or invalid parameters. func parseCmd(request *btcjson.Request) *parsedRPCCmd { - var parsedCmd parsedRPCCmd - parsedCmd.id = request.ID - parsedCmd.method = request.Method + parsedCmd := parsedRPCCmd{ + jsonrpc: request.Jsonrpc, + id: request.ID, + method: request.Method, + } cmd, err := btcjson.UnmarshalCmd(request) if err != nil { @@ -3892,7 +4024,7 @@ func parseCmd(request *btcjson.Request) *parsedRPCCmd { // createMarshalledReply returns a new marshalled JSON-RPC response given the // passed parameters. It will automatically convert errors that are not of // the type *btcjson.RPCError to the appropriate type as needed. -func createMarshalledReply(id, result interface{}, replyErr error) ([]byte, error) { +func createMarshalledReply(rpcVersion btcjson.RPCVersion, id interface{}, result interface{}, replyErr error) ([]byte, error) { var jsonErr *btcjson.RPCError if replyErr != nil { if jErr, ok := replyErr.(*btcjson.RPCError); ok { @@ -3902,7 +4034,71 @@ func createMarshalledReply(id, result interface{}, replyErr error) ([]byte, erro } } - return btcjson.MarshalResponse(id, result, jsonErr) + return btcjson.MarshalResponse(rpcVersion, id, result, jsonErr) +} + +// processRequest determines the incoming request type (single or batched), +// parses it and returns a marshalled response. +func (s *rpcServer) processRequest(request *btcjson.Request, isAdmin bool, closeChan <-chan struct{}) []byte { + var result interface{} + var err error + var jsonErr *btcjson.RPCError + + if !isAdmin { + if _, ok := rpcLimited[request.Method]; !ok { + jsonErr = internalRPCError("limited user not "+ + "authorized for this method", "") + } + } + + if jsonErr == nil { + if request.Method == "" || request.Params == nil { + jsonErr = &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: "Invalid request: malformed", + } + msg, err := createMarshalledReply(request.Jsonrpc, request.ID, result, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + return nil + } + return msg + } + + // Valid requests with no ID (notifications) must not have a response + // per the JSON-RPC spec. + if request.ID == nil { + return nil + } + + // Attempt to parse the JSON-RPC request into a known + // concrete command. + parsedCmd := parseCmd(request) + if parsedCmd.err != nil { + jsonErr = parsedCmd.err + } else { + result, err = s.standardCmdResult(parsedCmd, + closeChan) + if err != nil { + if rpcErr, ok := err.(*btcjson.RPCError); ok { + jsonErr = rpcErr + } else { + jsonErr = &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: "Invalid request: malformed", + } + } + } + } + } + + // Marshal the response. + msg, err := createMarshalledReply(request.Jsonrpc, request.ID, result, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + return nil + } + return msg } // jsonRPCRead handles reading and responding to RPC messages. @@ -3947,80 +4143,186 @@ func (s *rpcServer) jsonRPCRead(w http.ResponseWriter, r *http.Request, isAdmin conn.SetReadDeadline(timeZeroVal) // Attempt to parse the raw body into a JSON-RPC request. - var responseID interface{} - var jsonErr error - var result interface{} - var request btcjson.Request - if err := json.Unmarshal(body, &request); err != nil { - jsonErr = &btcjson.RPCError{ - Code: btcjson.ErrRPCParse.Code, - Message: "Failed to parse request: " + err.Error(), + // Setup a close notifier. Since the connection is hijacked, + // the CloseNotifer on the ResponseWriter is not available. + closeChan := make(chan struct{}, 1) + go func() { + _, err = conn.Read(make([]byte, 1)) + if err != nil { + close(closeChan) } + }() + + var results []json.RawMessage + var batchSize int + var batchedRequest bool + + // Determine request type + if bytes.HasPrefix(body, batchedRequestPrefix) { + batchedRequest = true } - if jsonErr == nil { - // The JSON-RPC 1.0 spec defines that notifications must have their "id" - // set to null and states that notifications do not have a response. - // - // A JSON-RPC 2.0 notification is a request with "json-rpc":"2.0", and - // without an "id" member. The specification states that notifications - // must not be responded to. JSON-RPC 2.0 permits the null value as a - // valid request id, therefore such requests are not notifications. - // - // Bitcoin Core serves requests with "id":null or even an absent "id", - // and responds to such requests with "id":null in the response. - // - // Btcd does not respond to any request without and "id" or "id":null, - // regardless the indicated JSON-RPC protocol version unless RPC quirks - // are enabled. With RPC quirks enabled, such requests will be responded - // to if the reqeust does not indicate JSON-RPC version. - // - // RPC quirks can be enabled by the user to avoid compatibility issues - // with software relying on Core's behavior. - if request.ID == nil && !(cfg.RPCQuirks && request.Jsonrpc == "") { - return + + // Process a single request + if !batchedRequest { + var req btcjson.Request + var resp json.RawMessage + err = json.Unmarshal(body, &req) + if err != nil { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCParse.Code, + Message: fmt.Sprintf("Failed to parse request: %v", + err), + } + resp, err = btcjson.MarshalResponse(btcjson.RpcVersion1, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to create reply: %v", err) + } + } + + if err == nil { + // The JSON-RPC 1.0 spec defines that notifications must have their "id" + // set to null and states that notifications do not have a response. + // + // A JSON-RPC 2.0 notification is a request with "json-rpc":"2.0", and + // without an "id" member. The specification states that notifications + // must not be responded to. JSON-RPC 2.0 permits the null value as a + // valid request id, therefore such requests are not notifications. + // + // Bitcoin Core serves requests with "id":null or even an absent "id", + // and responds to such requests with "id":null in the response. + // + // Btcd does not respond to any request without and "id" or "id":null, + // regardless the indicated JSON-RPC protocol version unless RPC quirks + // are enabled. With RPC quirks enabled, such requests will be responded + // to if the reqeust does not indicate JSON-RPC version. + // + // RPC quirks can be enabled by the user to avoid compatibility issues + // with software relying on Core's behavior. + if req.ID == nil && !(cfg.RPCQuirks && req.Jsonrpc == "") { + return + } + resp = s.processRequest(&req, isAdmin, closeChan) } - // The parse was at least successful enough to have an ID so - // set it for the response. - responseID = request.ID + if resp != nil { + results = append(results, resp) + } + } - // Setup a close notifier. Since the connection is hijacked, - // the CloseNotifer on the ResponseWriter is not available. - closeChan := make(chan struct{}, 1) - go func() { - _, err := conn.Read(make([]byte, 1)) + // Process a batched request + if batchedRequest { + var batchedRequests []interface{} + var resp json.RawMessage + err = json.Unmarshal(body, &batchedRequests) + if err != nil { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCParse.Code, + Message: fmt.Sprintf("Failed to parse request: %v", + err), + } + resp, err = btcjson.MarshalResponse(btcjson.RpcVersion2, nil, nil, jsonErr) if err != nil { - close(closeChan) + rpcsLog.Errorf("Failed to create reply: %v", err) + } + + if resp != nil { + results = append(results, resp) + } + } + + if err == nil { + // Response with an empty batch error if the batch size is zero + if len(batchedRequests) == 0 { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: "Invalid request: empty batch", + } + resp, err = btcjson.MarshalResponse(btcjson.RpcVersion2, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + } + + if resp != nil { + results = append(results, resp) + } } - }() - - // Check if the user is limited and set error if method unauthorized - if !isAdmin { - if _, ok := rpcLimited[request.Method]; !ok { - jsonErr = &btcjson.RPCError{ - Code: btcjson.ErrRPCInvalidParams.Code, - Message: "limited user not authorized for this method", + + // Process each batch entry individually + if len(batchedRequests) > 0 { + batchSize = len(batchedRequests) + + for _, entry := range batchedRequests { + var reqBytes []byte + reqBytes, err = json.Marshal(entry) + if err != nil { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: fmt.Sprintf("Invalid request: %v", + err), + } + resp, err = btcjson.MarshalResponse(btcjson.RpcVersion2, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to create reply: %v", err) + } + + if resp != nil { + results = append(results, resp) + } + continue + } + + var req btcjson.Request + err := json.Unmarshal(reqBytes, &req) + if err != nil { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: fmt.Sprintf("Invalid request: %v", + err), + } + resp, err = btcjson.MarshalResponse("", nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to create reply: %v", err) + } + + if resp != nil { + results = append(results, resp) + } + continue + } + + resp = s.processRequest(&req, isAdmin, closeChan) + if resp != nil { + results = append(results, resp) + } } } } + } - if jsonErr == nil { - // Attempt to parse the JSON-RPC request into a known concrete - // command. - parsedCmd := parseCmd(&request) - if parsedCmd.err != nil { - jsonErr = parsedCmd.err - } else { - result, jsonErr = s.standardCmdResult(parsedCmd, closeChan) + var msg = []byte{} + if batchedRequest && batchSize > 0 { + if len(results) > 0 { + // Form the batched response json + var buffer bytes.Buffer + buffer.WriteByte('[') + for idx, reply := range results { + if idx == len(results)-1 { + buffer.Write(reply) + buffer.WriteByte(']') + break + } + buffer.Write(reply) + buffer.WriteByte(',') } + msg = buffer.Bytes() } } - // Marshal the response. - msg, err := createMarshalledReply(responseID, result, jsonErr) - if err != nil { - rpcsLog.Errorf("Failed to marshal reply: %v", err) - return + if !batchedRequest || batchSize == 0 { + // Respond with the first results entry for single requests + if len(results) > 0 { + msg = results[0] + } } // Write the response. @@ -4222,6 +4524,10 @@ type rpcserverConnManager interface { // RelayTransactions generates and relays inventory vectors for all of // the passed transactions to all connected peers. RelayTransactions(txns []*mempool.TxDesc) + + // NodeAddresses returns an array consisting node addresses which can + // potentially be used to find new nodes in the network. + NodeAddresses() []*wire.NetAddressV2 } // rpcserverSyncManager represents a sync manager for use with the RPC server. diff --git a/rpcserverhelp.go b/rpcserverhelp.go index cc6935b512..16bbb62a2b 100644 --- a/rpcserverhelp.go +++ b/rpcserverhelp.go @@ -162,10 +162,9 @@ var helpDescsEnUS = map[string]string{ // GetBlockCmd help. "getblock--synopsis": "Returns information about a block given its hash.", "getblock-hash": "The hash of the block", - "getblock-verbose": "Specifies the block is returned as a JSON object instead of hex-encoded string", - "getblock-verbosetx": "Specifies that each transaction is returned as a JSON object and only applies if the verbose flag is true (btcd extension)", - "getblock--condition0": "verbose=false", - "getblock--condition1": "verbose=true", + "getblock-verbosity": "Specifies whether the block data should be returned as a hex-encoded string (0), as parsed data with a slice of TXIDs (1), or as parsed data with parsed transaction data (2) ", + "getblock--condition0": "verbosity=0", + "getblock--condition1": "verbosity=1", "getblock--result0": "Hex-encoded bytes of the serialized block", // GetBlockChainInfoCmd help. @@ -182,6 +181,8 @@ var helpDescsEnUS = map[string]string{ "getblockchaininforesult-pruned": "A bool that indicates if the node is pruned or not", "getblockchaininforesult-pruneheight": "The lowest block retained in the current pruned chain", "getblockchaininforesult-chainwork": "The total cumulative work in the best chain", + "getblockchaininforesult-size_on_disk": "The estimated size of the block and undo files on disk", + "getblockchaininforesult-initialblockdownload": "Estimate of whether this node is in Initial Block Download mode", "getblockchaininforesult-softforks": "The status of the super-majority soft-forks", "getblockchaininforesult-unifiedsoftforks": "The status of the super-majority soft-forks used by bitcoind on or after v0.19.0", @@ -244,8 +245,8 @@ var helpDescsEnUS = map[string]string{ "getblockverboseresult-version": "The block version", "getblockverboseresult-versionHex": "The block version in hexadecimal", "getblockverboseresult-merkleroot": "Root hash of the merkle tree", - "getblockverboseresult-tx": "The transaction hashes (only when verbosetx=false)", - "getblockverboseresult-rawtx": "The transactions as JSON objects (only when verbosetx=true)", + "getblockverboseresult-tx": "The transaction hashes (only when verbosity=1)", + "getblockverboseresult-rawtx": "The transactions as JSON objects (only when verbosity=2)", "getblockverboseresult-time": "The block time in seconds since 1 Jan 1970 GMT", "getblockverboseresult-nonce": "The block nonce", "getblockverboseresult-bits": "The bits which represent the block difficulty", @@ -296,6 +297,7 @@ var helpDescsEnUS = map[string]string{ "templaterequest-target": "The desired target for the block template (this parameter is ignored)", "templaterequest-data": "Hex-encoded block data (only for mode=proposal)", "templaterequest-workid": "The server provided workid if provided in block template (not applicable)", + "templaterequest-rules": "Specific block rules that are to be enforced e.g. '[\"segwit\"]", // GetBlockTemplateResultTx help. "getblocktemplateresulttx-data": "Hex-encoded transaction data (byte-for-byte)", @@ -303,6 +305,7 @@ var helpDescsEnUS = map[string]string{ "getblocktemplateresulttx-depends": "Other transactions before this one (by 1-based index in the 'transactions' list) that must be present in the final block if this one is", "getblocktemplateresulttx-fee": "Difference in value between transaction inputs and outputs (in Satoshi)", "getblocktemplateresulttx-sigops": "Total number of signature operations as counted for purposes of block limits", + "getblocktemplateresulttx-txid": "The transaction id, can be different from hash.", "getblocktemplateresulttx-weight": "The weight of the transaction", // GetBlockTemplateResultAux help. @@ -453,6 +456,17 @@ var helpDescsEnUS = map[string]string{ "getnettotalsresult-totalbytessent": "Total bytes sent", "getnettotalsresult-timemillis": "Number of milliseconds since 1 Jan 1970 GMT", + // GetNodeAddressesResult help. + "getnodeaddressesresult-time": "Timestamp in seconds since epoch (Jan 1 1970 GMT) keeping track of when the node was last seen", + "getnodeaddressesresult-services": "The services offered", + "getnodeaddressesresult-address": "The address of the node", + "getnodeaddressesresult-port": "The port of the node", + + // GetNodeAddressesCmd help. + "getnodeaddresses--synopsis": "Return known addresses which can potentially be used to find new nodes in the network", + "getnodeaddresses-count": "How many addresses to return. Limited to the smaller of 2500 or 23% of all known addresses", + "getnodeaddresses--result0": "List of node addresses", + // GetPeerInfoResult help. "getpeerinforesult-id": "A unique node ID", "getpeerinforesult-addr": "The ip address and port of the peer", @@ -514,7 +528,7 @@ var helpDescsEnUS = map[string]string{ "gettxoutresult-coinbase": "Whether or not the transaction is a coinbase", // GetTxOutCmd help. - "gettxout--synopsis": "Returns information about an unspent transaction output..", + "gettxout--synopsis": "Returns information about an unspent transaction output.", "gettxout-txid": "The hash of the transaction", "gettxout-vout": "The index of the output", "gettxout-includemempool": "Include the mempool when true", @@ -549,17 +563,23 @@ var helpDescsEnUS = map[string]string{ "searchrawtransactions--result0": "Hex-encoded serialized transaction", // SendRawTransactionCmd help. - "sendrawtransaction--synopsis": "Submits the serialized, hex-encoded transaction to the local peer and relays it to the network.", - "sendrawtransaction-hextx": "Serialized, hex-encoded signed transaction", - "sendrawtransaction-allowhighfees": "Whether or not to allow insanely high fees (btcd does not yet implement this parameter, so it has no effect)", - "sendrawtransaction-maxfeerate": "Used by bitcoind on or after v0.19.0", - "sendrawtransaction--result0": "The hash of the transaction", + "sendrawtransaction--synopsis": "Submits the serialized, hex-encoded transaction to the local peer and relays it to the network.", + "sendrawtransaction-hextx": "Serialized, hex-encoded signed transaction", + "sendrawtransaction-feesetting": "Whether or not to allow insanely high fees in bitcoind < v0.19.0 or the max fee rate for bitcoind v0.19.0 and later (btcd does not yet implement this parameter, so it has no effect)", + "sendrawtransaction--result0": "The hash of the transaction", + "allowhighfeesormaxfeerate-value": "Either the boolean value for the allowhighfees parameter in bitcoind < v0.19.0 or the numerical value for the maxfeerate field in bitcoind v0.19.0 and later", // SetGenerateCmd help. "setgenerate--synopsis": "Set the server to generate coins (mine) or not.", "setgenerate-generate": "Use true to enable generation, false to disable it", "setgenerate-genproclimit": "The number of processors (cores) to limit generation to or -1 for default", + // SignMessageWithPrivKeyCmd help. + "signmessagewithprivkey--synopsis": "Sign a message with the private key of an address", + "signmessagewithprivkey-privkey": "The private key to sign the message with", + "signmessagewithprivkey-message": "The message to create a signature of", + "signmessagewithprivkey--result0": "The signature of the message encoded in base 64", + // StopCmd help. "stop--synopsis": "Shutdown btcd.", "stop--result0": "The string 'btcd stopping.'", @@ -576,8 +596,12 @@ var helpDescsEnUS = map[string]string{ "submitblock--result1": "The reason the block was rejected", // ValidateAddressResult help. - "validateaddresschainresult-isvalid": "Whether or not the address is valid", - "validateaddresschainresult-address": "The bitcoin address (only when isvalid is true)", + "validateaddresschainresult-isvalid": "Whether or not the address is valid", + "validateaddresschainresult-address": "The bitcoin address (only when isvalid is true)", + "validateaddresschainresult-isscript": "If the key is a script", + "validateaddresschainresult-iswitness": "If the address is a witness address", + "validateaddresschainresult-witness_version": "The version number of the witness program", + "validateaddresschainresult-witness_program": "The hex value of the witness program", // ValidateAddressCmd help. "validateaddress--synopsis": "Verify an address is valid.", @@ -688,52 +712,54 @@ var helpDescsEnUS = map[string]string{ // This information is used to generate the help. Each result type must be a // pointer to the type (or nil to indicate no return value). var rpcResultTypes = map[string][]interface{}{ - "addnode": nil, - "createrawtransaction": {(*string)(nil)}, - "debuglevel": {(*string)(nil), (*string)(nil)}, - "decoderawtransaction": {(*btcjson.TxRawDecodeResult)(nil)}, - "decodescript": {(*btcjson.DecodeScriptResult)(nil)}, - "estimatefee": {(*float64)(nil)}, - "generate": {(*[]string)(nil)}, - "getaddednodeinfo": {(*[]string)(nil), (*[]btcjson.GetAddedNodeInfoResult)(nil)}, - "getbestblock": {(*btcjson.GetBestBlockResult)(nil)}, - "getbestblockhash": {(*string)(nil)}, - "getblock": {(*string)(nil), (*btcjson.GetBlockVerboseResult)(nil)}, - "getblockcount": {(*int64)(nil)}, - "getblockhash": {(*string)(nil)}, - "getblockheader": {(*string)(nil), (*btcjson.GetBlockHeaderVerboseResult)(nil)}, - "getblocktemplate": {(*btcjson.GetBlockTemplateResult)(nil), (*string)(nil), nil}, - "getblockchaininfo": {(*btcjson.GetBlockChainInfoResult)(nil)}, - "getcfilter": {(*string)(nil)}, - "getcfilterheader": {(*string)(nil)}, - "getconnectioncount": {(*int32)(nil)}, - "getcurrentnet": {(*uint32)(nil)}, - "getdifficulty": {(*float64)(nil)}, - "getgenerate": {(*bool)(nil)}, - "gethashespersec": {(*float64)(nil)}, - "getheaders": {(*[]string)(nil)}, - "getinfo": {(*btcjson.InfoChainResult)(nil)}, - "getmempoolinfo": {(*btcjson.GetMempoolInfoResult)(nil)}, - "getmininginfo": {(*btcjson.GetMiningInfoResult)(nil)}, - "getnettotals": {(*btcjson.GetNetTotalsResult)(nil)}, - "getnetworkhashps": {(*int64)(nil)}, - "getpeerinfo": {(*[]btcjson.GetPeerInfoResult)(nil)}, - "getrawmempool": {(*[]string)(nil), (*btcjson.GetRawMempoolVerboseResult)(nil)}, - "getrawtransaction": {(*string)(nil), (*btcjson.TxRawResult)(nil)}, - "gettxout": {(*btcjson.GetTxOutResult)(nil)}, - "node": nil, - "help": {(*string)(nil), (*string)(nil)}, - "ping": nil, - "searchrawtransactions": {(*string)(nil), (*[]btcjson.SearchRawTransactionsResult)(nil)}, - "sendrawtransaction": {(*string)(nil)}, - "setgenerate": nil, - "stop": {(*string)(nil)}, - "submitblock": {nil, (*string)(nil)}, - "uptime": {(*int64)(nil)}, - "validateaddress": {(*btcjson.ValidateAddressChainResult)(nil)}, - "verifychain": {(*bool)(nil)}, - "verifymessage": {(*bool)(nil)}, - "version": {(*map[string]btcjson.VersionResult)(nil)}, + "addnode": nil, + "createrawtransaction": {(*string)(nil)}, + "debuglevel": {(*string)(nil), (*string)(nil)}, + "decoderawtransaction": {(*btcjson.TxRawDecodeResult)(nil)}, + "decodescript": {(*btcjson.DecodeScriptResult)(nil)}, + "estimatefee": {(*float64)(nil)}, + "generate": {(*[]string)(nil)}, + "getaddednodeinfo": {(*[]string)(nil), (*[]btcjson.GetAddedNodeInfoResult)(nil)}, + "getbestblock": {(*btcjson.GetBestBlockResult)(nil)}, + "getbestblockhash": {(*string)(nil)}, + "getblock": {(*string)(nil), (*btcjson.GetBlockVerboseResult)(nil)}, + "getblockcount": {(*int64)(nil)}, + "getblockhash": {(*string)(nil)}, + "getblockheader": {(*string)(nil), (*btcjson.GetBlockHeaderVerboseResult)(nil)}, + "getblocktemplate": {(*btcjson.GetBlockTemplateResult)(nil), (*string)(nil), nil}, + "getblockchaininfo": {(*btcjson.GetBlockChainInfoResult)(nil)}, + "getcfilter": {(*string)(nil)}, + "getcfilterheader": {(*string)(nil)}, + "getconnectioncount": {(*int32)(nil)}, + "getcurrentnet": {(*uint32)(nil)}, + "getdifficulty": {(*float64)(nil)}, + "getgenerate": {(*bool)(nil)}, + "gethashespersec": {(*float64)(nil)}, + "getheaders": {(*[]string)(nil)}, + "getinfo": {(*btcjson.InfoChainResult)(nil)}, + "getmempoolinfo": {(*btcjson.GetMempoolInfoResult)(nil)}, + "getmininginfo": {(*btcjson.GetMiningInfoResult)(nil)}, + "getnettotals": {(*btcjson.GetNetTotalsResult)(nil)}, + "getnetworkhashps": {(*float64)(nil)}, + "getnodeaddresses": {(*[]btcjson.GetNodeAddressesResult)(nil)}, + "getpeerinfo": {(*[]btcjson.GetPeerInfoResult)(nil)}, + "getrawmempool": {(*[]string)(nil), (*btcjson.GetRawMempoolVerboseResult)(nil)}, + "getrawtransaction": {(*string)(nil), (*btcjson.TxRawResult)(nil)}, + "gettxout": {(*btcjson.GetTxOutResult)(nil)}, + "node": nil, + "help": {(*string)(nil), (*string)(nil)}, + "ping": nil, + "searchrawtransactions": {(*string)(nil), (*[]btcjson.SearchRawTransactionsResult)(nil)}, + "sendrawtransaction": {(*string)(nil)}, + "setgenerate": nil, + "signmessagewithprivkey": {(*string)(nil)}, + "stop": {(*string)(nil)}, + "submitblock": {nil, (*string)(nil)}, + "uptime": {(*int64)(nil)}, + "validateaddress": {(*btcjson.ValidateAddressChainResult)(nil)}, + "verifychain": {(*bool)(nil)}, + "verifymessage": {(*bool)(nil)}, + "version": {(*map[string]btcjson.VersionResult)(nil)}, // Websocket commands. "loadtxfilter": nil, @@ -819,7 +845,7 @@ func (c *helpCacher) rpcUsage(includeWebsockets bool) (string, error) { } } - sort.Sort(sort.StringSlice(usageTexts)) + sort.Strings(usageTexts) c.usage = strings.Join(usageTexts, "\n") return c.usage, nil } diff --git a/rpcwebsocket.go b/rpcwebsocket.go index 32e466d115..4d140b4825 100644 --- a/rpcwebsocket.go +++ b/rpcwebsocket.go @@ -27,7 +27,7 @@ import ( "github.com/btcsuite/btcd/database" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/websocket" "golang.org/x/crypto/ripemd160" ) @@ -695,7 +695,7 @@ func (*wsNotificationManager) notifyBlockConnected(clients map[chan struct{}]*ws // Notify interested websocket clients about the connected block. ntfn := btcjson.NewBlockConnectedNtfn(block.Hash().String(), block.Height(), block.MsgBlock().Header.Timestamp.Unix()) - marshalledJSON, err := btcjson.MarshalCmd(nil, ntfn) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) if err != nil { rpcsLog.Errorf("Failed to marshal block connected notification: "+ "%v", err) @@ -719,7 +719,7 @@ func (*wsNotificationManager) notifyBlockDisconnected(clients map[chan struct{}] // Notify interested websocket clients about the disconnected block. ntfn := btcjson.NewBlockDisconnectedNtfn(block.Hash().String(), block.Height(), block.MsgBlock().Header.Timestamp.Unix()) - marshalledJSON, err := btcjson.MarshalCmd(nil, ntfn) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) if err != nil { rpcsLog.Errorf("Failed to marshal block disconnected "+ "notification: %v", err) @@ -765,7 +765,7 @@ func (m *wsNotificationManager) notifyFilteredBlockConnected(clients map[chan st ntfn.SubscribedTxs = subscribedTxs[quitChan] // Marshal and queue notification. - marshalledJSON, err := btcjson.MarshalCmd(nil, ntfn) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) if err != nil { rpcsLog.Errorf("Failed to marshal filtered block "+ "connected notification: %v", err) @@ -796,7 +796,7 @@ func (*wsNotificationManager) notifyFilteredBlockDisconnected(clients map[chan s } ntfn := btcjson.NewFilteredBlockDisconnectedNtfn(block.Height(), hex.EncodeToString(w.Bytes())) - marshalledJSON, err := btcjson.MarshalCmd(nil, ntfn) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) if err != nil { rpcsLog.Errorf("Failed to marshal filtered block disconnected "+ "notification: %v", err) @@ -831,7 +831,7 @@ func (m *wsNotificationManager) notifyForNewTx(clients map[chan struct{}]*wsClie } ntfn := btcjson.NewTxAcceptedNtfn(txHashStr, btcutil.Amount(amount).ToBTC()) - marshalledJSON, err := btcjson.MarshalCmd(nil, ntfn) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) if err != nil { rpcsLog.Errorf("Failed to marshal tx notification: %s", err.Error()) return @@ -854,7 +854,7 @@ func (m *wsNotificationManager) notifyForNewTx(clients map[chan struct{}]*wsClie } verboseNtfn = btcjson.NewTxAcceptedVerboseNtfn(*rawTx) - marshalledJSONVerbose, err = btcjson.MarshalCmd(nil, + marshalledJSONVerbose, err = btcjson.MarshalCmd(btcjson.RpcVersion1, nil, verboseNtfn) if err != nil { rpcsLog.Errorf("Failed to marshal verbose tx "+ @@ -980,7 +980,7 @@ func blockDetails(block *btcutil.Block, txIndex int) *btcjson.BlockDetails { func newRedeemingTxNotification(txHex string, index int, block *btcutil.Block) ([]byte, error) { // Create and marshal the notification. ntfn := btcjson.NewRedeemingTxNtfn(txHex, blockDetails(block, index)) - return btcjson.MarshalCmd(nil, ntfn) + return btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) } // notifyForTxOuts examines each transaction output, notifying interested @@ -1016,7 +1016,7 @@ func (m *wsNotificationManager) notifyForTxOuts(ops map[wire.OutPoint]map[chan s ntfn := btcjson.NewRecvTxNtfn(txHex, blockDetails(block, tx.Index())) - marshalledJSON, err := btcjson.MarshalCmd(nil, ntfn) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) if err != nil { rpcsLog.Errorf("Failed to marshal processedtx notification: %v", err) continue @@ -1047,7 +1047,7 @@ func (m *wsNotificationManager) notifyRelevantTxAccepted(tx *btcutil.Tx, if len(clientsToNotify) != 0 { n := btcjson.NewRelevantTxAcceptedNtfn(txHexString(tx.MsgTx())) - marshalled, err := btcjson.MarshalCmd(nil, n) + marshalled, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, n) if err != nil { rpcsLog.Errorf("Failed to marshal notification: %v", err) return @@ -1323,153 +1323,435 @@ out: break out } - var request btcjson.Request - err = json.Unmarshal(msg, &request) - if err != nil { - if !c.authenticated { - break out - } + var batchedRequest bool - jsonErr := &btcjson.RPCError{ - Code: btcjson.ErrRPCParse.Code, - Message: "Failed to parse request: " + err.Error(), - } - reply, err := createMarshalledReply(nil, nil, jsonErr) - if err != nil { - rpcsLog.Errorf("Failed to marshal parse failure "+ - "reply: %v", err) - continue - } - c.SendMessage(reply, nil) - continue + // Determine request type + if bytes.HasPrefix(msg, batchedRequestPrefix) { + batchedRequest = true } - // The JSON-RPC 1.0 spec defines that notifications must have their "id" - // set to null and states that notifications do not have a response. - // - // A JSON-RPC 2.0 notification is a request with "json-rpc":"2.0", and - // without an "id" member. The specification states that notifications - // must not be responded to. JSON-RPC 2.0 permits the null value as a - // valid request id, therefore such requests are not notifications. - // - // Bitcoin Core serves requests with "id":null or even an absent "id", - // and responds to such requests with "id":null in the response. - // - // Btcd does not respond to any request without and "id" or "id":null, - // regardless the indicated JSON-RPC protocol version unless RPC quirks - // are enabled. With RPC quirks enabled, such requests will be responded - // to if the reqeust does not indicate JSON-RPC version. - // - // RPC quirks can be enabled by the user to avoid compatibility issues - // with software relying on Core's behavior. - if request.ID == nil && !(cfg.RPCQuirks && request.Jsonrpc == "") { - if !c.authenticated { - break out - } - continue - } + if !batchedRequest { + var req btcjson.Request + var reply json.RawMessage + err = json.Unmarshal(msg, &req) + if err != nil { + // only process requests from authenticated clients + if !c.authenticated { + break out + } - cmd := parseCmd(&request) - if cmd.err != nil { - if !c.authenticated { - break out + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCParse.Code, + Message: "Failed to parse request: " + err.Error(), + } + reply, err = createMarshalledReply(btcjson.RpcVersion1, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + continue + } + c.SendMessage(reply, nil) + continue } - reply, err := createMarshalledReply(cmd.id, nil, cmd.err) - if err != nil { - rpcsLog.Errorf("Failed to marshal parse failure "+ - "reply: %v", err) + if req.Method == "" || req.Params == nil { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: "Invalid request: malformed", + } + reply, err := createMarshalledReply(req.Jsonrpc, req.ID, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + continue + } + c.SendMessage(reply, nil) continue } - c.SendMessage(reply, nil) - continue - } - rpcsLog.Debugf("Received command <%s> from %s", cmd.method, c.addr) - - // Check auth. The client is immediately disconnected if the - // first request of an unauthentiated websocket client is not - // the authenticate request, an authenticate request is received - // when the client is already authenticated, or incorrect - // authentication credentials are provided in the request. - switch authCmd, ok := cmd.cmd.(*btcjson.AuthenticateCmd); { - case c.authenticated && ok: - rpcsLog.Warnf("Websocket client %s is already authenticated", - c.addr) - break out - case !c.authenticated && !ok: - rpcsLog.Warnf("Unauthenticated websocket message " + - "received") - break out - case !c.authenticated: - // Check credentials. - login := authCmd.Username + ":" + authCmd.Passphrase - auth := "Basic " + base64.StdEncoding.EncodeToString([]byte(login)) - authSha := sha256.Sum256([]byte(auth)) - cmp := subtle.ConstantTimeCompare(authSha[:], c.server.authsha[:]) - limitcmp := subtle.ConstantTimeCompare(authSha[:], c.server.limitauthsha[:]) - if cmp != 1 && limitcmp != 1 { - rpcsLog.Warnf("Auth failure.") - break out + + // Valid requests with no ID (notifications) must not have a response + // per the JSON-RPC spec. + if req.ID == nil { + if !c.authenticated { + break out + } + continue } - c.authenticated = true - c.isAdmin = cmp == 1 - // Marshal and send response. - reply, err := createMarshalledReply(cmd.id, nil, nil) - if err != nil { - rpcsLog.Errorf("Failed to marshal authenticate reply: "+ - "%v", err.Error()) + cmd := parseCmd(&req) + if cmd.err != nil { + // Only process requests from authenticated clients + if !c.authenticated { + break out + } + + reply, err = createMarshalledReply(cmd.jsonrpc, cmd.id, nil, cmd.err) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + continue + } + c.SendMessage(reply, nil) continue } - c.SendMessage(reply, nil) - continue - } - // Check if the client is using limited RPC credentials and - // error when not authorized to call this RPC. - if !c.isAdmin { - if _, ok := rpcLimited[request.Method]; !ok { - jsonErr := &btcjson.RPCError{ - Code: btcjson.ErrRPCInvalidParams.Code, - Message: "limited user not authorized for this method", + rpcsLog.Debugf("Received command <%s> from %s", cmd.method, c.addr) + + // Check auth. The client is immediately disconnected if the + // first request of an unauthentiated websocket client is not + // the authenticate request, an authenticate request is received + // when the client is already authenticated, or incorrect + // authentication credentials are provided in the request. + switch authCmd, ok := cmd.cmd.(*btcjson.AuthenticateCmd); { + case c.authenticated && ok: + rpcsLog.Warnf("Websocket client %s is already authenticated", + c.addr) + break out + case !c.authenticated && !ok: + rpcsLog.Warnf("Unauthenticated websocket message " + + "received") + break out + case !c.authenticated: + // Check credentials. + login := authCmd.Username + ":" + authCmd.Passphrase + auth := "Basic " + base64.StdEncoding.EncodeToString([]byte(login)) + authSha := sha256.Sum256([]byte(auth)) + cmp := subtle.ConstantTimeCompare(authSha[:], c.server.authsha[:]) + limitcmp := subtle.ConstantTimeCompare(authSha[:], c.server.limitauthsha[:]) + if cmp != 1 && limitcmp != 1 { + rpcsLog.Warnf("Auth failure.") + break out } + c.authenticated = true + c.isAdmin = cmp == 1 + // Marshal and send response. - reply, err := createMarshalledReply(request.ID, nil, jsonErr) + reply, err = createMarshalledReply(cmd.jsonrpc, cmd.id, nil, nil) if err != nil { - rpcsLog.Errorf("Failed to marshal parse failure "+ - "reply: %v", err) + rpcsLog.Errorf("Failed to marshal authenticate reply: "+ + "%v", err.Error()) continue } c.SendMessage(reply, nil) continue } + + // Check if the client is using limited RPC credentials and + // error when not authorized to call the supplied RPC. + if !c.isAdmin { + if _, ok := rpcLimited[req.Method]; !ok { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidParams.Code, + Message: "limited user not authorized for this method", + } + // Marshal and send response. + reply, err = createMarshalledReply("", req.ID, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal parse failure "+ + "reply: %v", err) + continue + } + c.SendMessage(reply, nil) + continue + } + } + + // Asynchronously handle the request. A semaphore is used to + // limit the number of concurrent requests currently being + // serviced. If the semaphore can not be acquired, simply wait + // until a request finished before reading the next RPC request + // from the websocket client. + // + // This could be a little fancier by timing out and erroring + // when it takes too long to service the request, but if that is + // done, the read of the next request should not be blocked by + // this semaphore, otherwise the next request will be read and + // will probably sit here for another few seconds before timing + // out as well. This will cause the total timeout duration for + // later requests to be much longer than the check here would + // imply. + // + // If a timeout is added, the semaphore acquiring should be + // moved inside of the new goroutine with a select statement + // that also reads a time.After channel. This will unblock the + // read of the next request from the websocket client and allow + // many requests to be waited on concurrently. + c.serviceRequestSem.acquire() + go func() { + c.serviceRequest(cmd) + c.serviceRequestSem.release() + }() } - // Asynchronously handle the request. A semaphore is used to - // limit the number of concurrent requests currently being - // serviced. If the semaphore can not be acquired, simply wait - // until a request finished before reading the next RPC request - // from the websocket client. - // - // This could be a little fancier by timing out and erroring - // when it takes too long to service the request, but if that is - // done, the read of the next request should not be blocked by - // this semaphore, otherwise the next request will be read and - // will probably sit here for another few seconds before timing - // out as well. This will cause the total timeout duration for - // later requests to be much longer than the check here would - // imply. - // - // If a timeout is added, the semaphore acquiring should be - // moved inside of the new goroutine with a select statement - // that also reads a time.After channel. This will unblock the - // read of the next request from the websocket client and allow - // many requests to be waited on concurrently. - c.serviceRequestSem.acquire() - go func() { - c.serviceRequest(cmd) + // Process a batched request + if batchedRequest { + var batchedRequests []interface{} + var results []json.RawMessage + var batchSize int + var reply json.RawMessage + c.serviceRequestSem.acquire() + err = json.Unmarshal(msg, &batchedRequests) + if err != nil { + // Only process requests from authenticated clients + if !c.authenticated { + break out + } + + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCParse.Code, + Message: fmt.Sprintf("Failed to parse request: %v", + err), + } + reply, err = btcjson.MarshalResponse(btcjson.RpcVersion2, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to create reply: %v", err) + } + + if reply != nil { + results = append(results, reply) + } + } + + if err == nil { + // Response with an empty batch error if the batch size is zero + if len(batchedRequests) == 0 { + if !c.authenticated { + break out + } + + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: "Invalid request: empty batch", + } + reply, err = btcjson.MarshalResponse(btcjson.RpcVersion2, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + } + + if reply != nil { + results = append(results, reply) + } + } + + // Process each batch entry individually + if len(batchedRequests) > 0 { + batchSize = len(batchedRequests) + for _, entry := range batchedRequests { + var reqBytes []byte + reqBytes, err = json.Marshal(entry) + if err != nil { + // Only process requests from authenticated clients + if !c.authenticated { + break out + } + + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: fmt.Sprintf("Invalid request: %v", + err), + } + reply, err = btcjson.MarshalResponse(btcjson.RpcVersion2, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to create reply: %v", err) + continue + } + + if reply != nil { + results = append(results, reply) + } + continue + } + + var req btcjson.Request + err := json.Unmarshal(reqBytes, &req) + if err != nil { + // Only process requests from authenticated clients + if !c.authenticated { + break out + } + + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: fmt.Sprintf("Invalid request: %v", + err), + } + reply, err = btcjson.MarshalResponse(btcjson.RpcVersion2, nil, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to create reply: %v", err) + continue + } + + if reply != nil { + results = append(results, reply) + } + continue + } + + if req.Method == "" || req.Params == nil { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidRequest.Code, + Message: "Invalid request: malformed", + } + reply, err := createMarshalledReply(req.Jsonrpc, req.ID, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + continue + } + + if reply != nil { + results = append(results, reply) + } + continue + } + + // Valid requests with no ID (notifications) must not have a response + // per the JSON-RPC spec. + if req.ID == nil { + if !c.authenticated { + break out + } + continue + } + + cmd := parseCmd(&req) + if cmd.err != nil { + // Only process requests from authenticated clients + if !c.authenticated { + break out + } + + reply, err = createMarshalledReply(cmd.jsonrpc, cmd.id, nil, cmd.err) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply: %v", err) + continue + } + + if reply != nil { + results = append(results, reply) + } + continue + } + + rpcsLog.Debugf("Received command <%s> from %s", cmd.method, c.addr) + + // Check auth. The client is immediately disconnected if the + // first request of an unauthentiated websocket client is not + // the authenticate request, an authenticate request is received + // when the client is already authenticated, or incorrect + // authentication credentials are provided in the request. + switch authCmd, ok := cmd.cmd.(*btcjson.AuthenticateCmd); { + case c.authenticated && ok: + rpcsLog.Warnf("Websocket client %s is already authenticated", + c.addr) + break out + case !c.authenticated && !ok: + rpcsLog.Warnf("Unauthenticated websocket message " + + "received") + break out + case !c.authenticated: + // Check credentials. + login := authCmd.Username + ":" + authCmd.Passphrase + auth := "Basic " + base64.StdEncoding.EncodeToString([]byte(login)) + authSha := sha256.Sum256([]byte(auth)) + cmp := subtle.ConstantTimeCompare(authSha[:], c.server.authsha[:]) + limitcmp := subtle.ConstantTimeCompare(authSha[:], c.server.limitauthsha[:]) + if cmp != 1 && limitcmp != 1 { + rpcsLog.Warnf("Auth failure.") + break out + } + + c.authenticated = true + c.isAdmin = cmp == 1 + + // Marshal and send response. + reply, err = createMarshalledReply(cmd.jsonrpc, cmd.id, nil, nil) + if err != nil { + rpcsLog.Errorf("Failed to marshal authenticate reply: "+ + "%v", err.Error()) + continue + } + + if reply != nil { + results = append(results, reply) + } + continue + } + + // Check if the client is using limited RPC credentials and + // error when not authorized to call the supplied RPC. + if !c.isAdmin { + if _, ok := rpcLimited[req.Method]; !ok { + jsonErr := &btcjson.RPCError{ + Code: btcjson.ErrRPCInvalidParams.Code, + Message: "limited user not authorized for this method", + } + // Marshal and send response. + reply, err = createMarshalledReply(req.Jsonrpc, req.ID, nil, jsonErr) + if err != nil { + rpcsLog.Errorf("Failed to marshal parse failure "+ + "reply: %v", err) + continue + } + + if reply != nil { + results = append(results, reply) + } + continue + } + } + + // Lookup the websocket extension for the command, if it doesn't + // exist fallback to handling the command as a standard command. + var resp interface{} + wsHandler, ok := wsHandlers[cmd.method] + if ok { + resp, err = wsHandler(c, cmd.cmd) + } else { + resp, err = c.server.standardCmdResult(cmd, nil) + } + + // Marshal request output. + reply, err := createMarshalledReply(cmd.jsonrpc, cmd.id, resp, err) + if err != nil { + rpcsLog.Errorf("Failed to marshal reply for <%s> "+ + "command: %v", cmd.method, err) + return + } + + if reply != nil { + results = append(results, reply) + } + } + } + } + + // generate reply + var payload = []byte{} + if batchedRequest && batchSize > 0 { + if len(results) > 0 { + // Form the batched response json + var buffer bytes.Buffer + buffer.WriteByte('[') + for idx, marshalledReply := range results { + if idx == len(results)-1 { + buffer.Write(marshalledReply) + buffer.WriteByte(']') + break + } + buffer.Write(marshalledReply) + buffer.WriteByte(',') + } + payload = buffer.Bytes() + } + } + + if !batchedRequest || batchSize == 0 { + // Respond with the first results entry for single requests + if len(results) > 0 { + payload = results[0] + } + } + + c.SendMessage(payload, nil) c.serviceRequestSem.release() - }() + } } // Ensure the connection is closed. @@ -1495,7 +1777,7 @@ func (c *wsClient) serviceRequest(r *parsedRPCCmd) { } else { result, err = c.server.standardCmdResult(r, nil) } - reply, err := createMarshalledReply(r.id, result, err) + reply, err := createMarshalledReply(r.jsonrpc, r.id, result, err) if err != nil { rpcsLog.Errorf("Failed to marshal reply for <%s> "+ "command: %v", r.method, err) @@ -2125,7 +2407,7 @@ func rescanBlock(wsc *wsClient, lookups *rescanKeys, blk *btcutil.Block) { ntfn := btcjson.NewRecvTxNtfn(txHex, blockDetails(blk, tx.Index())) - marshalledJSON, err := btcjson.MarshalCmd(nil, ntfn) + marshalledJSON, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, ntfn) if err != nil { rpcsLog.Errorf("Failed to marshal recvtx notification: %v", err) return @@ -2492,7 +2774,7 @@ fetchRange: hashList[i].String(), blk.Height(), blk.MsgBlock().Header.Timestamp.Unix(), ) - mn, err := btcjson.MarshalCmd(nil, n) + mn, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, n) if err != nil { rpcsLog.Errorf("Failed to marshal rescan "+ "progress notification: %v", err) @@ -2637,7 +2919,7 @@ func handleRescan(wsc *wsClient, icmd interface{}) (interface{}, error) { lastBlockHash.String(), lastBlock.Height(), lastBlock.MsgBlock().Header.Timestamp.Unix(), ) - if mn, err := btcjson.MarshalCmd(nil, n); err != nil { + if mn, err := btcjson.MarshalCmd(btcjson.RpcVersion1, nil, n); err != nil { rpcsLog.Errorf("Failed to marshal rescan finished "+ "notification: %v", err) } else { diff --git a/sample-btcd.conf b/sample-btcd.conf index e2beb99cf8..0a765fcabe 100644 --- a/sample-btcd.conf +++ b/sample-btcd.conf @@ -324,7 +324,7 @@ ; sizes have the highest priority. One consequence of this is that as low-fee ; or free transactions age, they raise in priority thereby making them more ; likely to be included in this section of a new block. This value is limited -; by the blackmaxsize option and will be limited as needed. +; by the blockmaxsize option and will be limited as needed. ; blockprioritysize=50000 diff --git a/server.go b/server.go index edbc1c036e..5ef2e31942 100644 --- a/server.go +++ b/server.go @@ -25,6 +25,8 @@ import ( "github.com/btcsuite/btcd/addrmgr" "github.com/btcsuite/btcd/blockchain" "github.com/btcsuite/btcd/blockchain/indexers" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/bloom" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/connmgr" @@ -36,8 +38,7 @@ import ( "github.com/btcsuite/btcd/peer" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" - "github.com/btcsuite/btcutil/bloom" + "github.com/decred/dcrd/lru" ) const ( @@ -274,7 +275,7 @@ type serverPeer struct { isWhitelisted bool filter *bloom.Filter addressesMtx sync.RWMutex - knownAddresses map[string]struct{} + knownAddresses lru.Cache banScore connmgr.DynamicBanScore quit chan struct{} // The following chans are used to sync blockmanager and server. @@ -289,7 +290,7 @@ func newServerPeer(s *server, isPersistent bool) *serverPeer { server: s, persistent: isPersistent, filter: bloom.LoadFilter(nil), - knownAddresses: make(map[string]struct{}), + knownAddresses: lru.NewCache(5000), quit: make(chan struct{}), txProcessed: make(chan struct{}, 1), blockProcessed: make(chan struct{}, 1), @@ -305,18 +306,18 @@ func (sp *serverPeer) newestBlock() (*chainhash.Hash, int32, error) { // addKnownAddresses adds the given addresses to the set of known addresses to // the peer to prevent sending duplicate addresses. -func (sp *serverPeer) addKnownAddresses(addresses []*wire.NetAddress) { +func (sp *serverPeer) addKnownAddresses(addresses []*wire.NetAddressV2) { sp.addressesMtx.Lock() for _, na := range addresses { - sp.knownAddresses[addrmgr.NetAddressKey(na)] = struct{}{} + sp.knownAddresses.Add(addrmgr.NetAddressKey(na)) } sp.addressesMtx.Unlock() } // addressKnown true if the given address is already known to the peer. -func (sp *serverPeer) addressKnown(na *wire.NetAddress) bool { +func (sp *serverPeer) addressKnown(na *wire.NetAddressV2) bool { sp.addressesMtx.RLock() - _, exists := sp.knownAddresses[addrmgr.NetAddressKey(na)] + exists := sp.knownAddresses.Contains(addrmgr.NetAddressKey(na)) sp.addressesMtx.RUnlock() return exists } @@ -340,23 +341,73 @@ func (sp *serverPeer) relayTxDisabled() bool { return isDisabled } -// pushAddrMsg sends an addr message to the connected peer using the provided -// addresses. -func (sp *serverPeer) pushAddrMsg(addresses []*wire.NetAddress) { - // Filter addresses already known to the peer. +// pushAddrMsg sends a legacy addr message to the connected peer using the +// provided addresses. +func (sp *serverPeer) pushAddrMsg(addresses []*wire.NetAddressV2) { + if sp.WantsAddrV2() { + // If the peer supports addrv2, we'll be pushing an addrv2 + // message instead. The logic is otherwise identical to the + // addr case below. + addrs := make([]*wire.NetAddressV2, 0, len(addresses)) + for _, addr := range addresses { + // Filter addresses already known to the peer. + if sp.addressKnown(addr) { + continue + } + + addrs = append(addrs, addr) + } + + known, err := sp.PushAddrV2Msg(addrs) + if err != nil { + peerLog.Errorf("Can't push addrv2 message to %s: %v", + sp.Peer, err) + sp.Disconnect() + return + } + + // Add the final set of addresses sent to the set the peer + // knows of. + sp.addKnownAddresses(known) + return + } + addrs := make([]*wire.NetAddress, 0, len(addresses)) for _, addr := range addresses { - if !sp.addressKnown(addr) { - addrs = append(addrs, addr) + // Filter addresses already known to the peer. + if sp.addressKnown(addr) { + continue } + + // Must skip the V3 addresses for legacy ADDR messages. + if addr.IsTorV3() { + continue + } + + // Convert the NetAddressV2 to a legacy address. + addrs = append(addrs, addr.ToLegacy()) } + known, err := sp.PushAddrMsg(addrs) if err != nil { - peerLog.Errorf("Can't push address message to %s: %v", sp.Peer, err) + peerLog.Errorf( + "Can't push address message to %s: %v", sp.Peer, err, + ) sp.Disconnect() return } - sp.addKnownAddresses(known) + + // Convert all of the known addresses to NetAddressV2 to add them to + // the set of known addresses. + knownAddrs := make([]*wire.NetAddressV2, 0, len(known)) + for _, knownAddr := range known { + currentKna := wire.NetAddressV2FromBytes( + knownAddr.Timestamp, knownAddr.Services, + knownAddr.IP, knownAddr.Port, + ) + knownAddrs = append(knownAddrs, currentKna) + } + sp.addKnownAddresses(knownAddrs) } // addBanScore increases the persistent and decaying ban score fields by the @@ -364,14 +415,14 @@ func (sp *serverPeer) pushAddrMsg(addresses []*wire.NetAddress) { // threshold, a warning is logged including the reason provided. Further, if // the score is above the ban threshold, the peer will be banned and // disconnected. -func (sp *serverPeer) addBanScore(persistent, transient uint32, reason string) { +func (sp *serverPeer) addBanScore(persistent, transient uint32, reason string) bool { // No warning is logged and no score is calculated if banning is disabled. if cfg.DisableBanning { - return + return false } if sp.isWhitelisted { peerLog.Debugf("Misbehaving whitelisted peer %s: %s", sp, reason) - return + return false } warnThreshold := cfg.BanThreshold >> 1 @@ -383,7 +434,7 @@ func (sp *serverPeer) addBanScore(persistent, transient uint32, reason string) { peerLog.Warnf("Misbehaving peer %s: %s -- ban score is %d, "+ "it was not increased this time", sp, reason, score) } - return + return false } score := sp.banScore.Increase(persistent, transient) if score > warnThreshold { @@ -394,8 +445,10 @@ func (sp *serverPeer) addBanScore(persistent, transient uint32, reason string) { sp) sp.server.BanPeer(sp) sp.Disconnect() + return true } } + return false } // hasServices returns whether or not the provided advertised service flags have @@ -498,7 +551,9 @@ func (sp *serverPeer) OnMemPool(_ *peer.Peer, msg *wire.MsgMemPool) { // The ban score accumulates and passes the ban threshold if a burst of // mempool messages comes from a peer. The score decays each minute to // half of its value. - sp.addBanScore(0, 33, "mempool") + if sp.addBanScore(0, 33, "mempool") { + return + } // Generate inventory message with the available transactions in the // transaction memory pool. Limit it to the max allowed inventory @@ -638,7 +693,9 @@ func (sp *serverPeer) OnGetData(_ *peer.Peer, msg *wire.MsgGetData) { // bursts of small requests are not penalized as that would potentially ban // peers performing IBD. // This incremental score decays each minute to half of its value. - sp.addBanScore(0, uint32(length)*99/wire.MaxInvPerMsg, "getdata") + if sp.addBanScore(0, uint32(length)*99/wire.MaxInvPerMsg, "getdata") { + return + } // We wait on this wait channel periodically to prevent queuing // far more data than we can send in a reasonable time, wasting memory. @@ -1221,7 +1278,7 @@ func (sp *serverPeer) OnGetAddr(_ *peer.Peer, msg *wire.MsgGetAddr) { // Do not accept getaddr requests from outbound peers. This reduces // fingerprinting attacks. if !sp.Inbound() { - peerLog.Debugf("Ignoring getaddr request from outbound peer ", + peerLog.Debugf("Ignoring getaddr request from outbound peer "+ "%v", sp) return } @@ -1229,7 +1286,7 @@ func (sp *serverPeer) OnGetAddr(_ *peer.Peer, msg *wire.MsgGetAddr) { // Only allow one getaddr request per connection to discourage // address stamping of inv announcements. if sp.sentAddrs { - peerLog.Debugf("Ignoring repeated getaddr request from peer ", + peerLog.Debugf("Ignoring repeated getaddr request from peer "+ "%v", sp) return } @@ -1266,6 +1323,7 @@ func (sp *serverPeer) OnAddr(_ *peer.Peer, msg *wire.MsgAddr) { return } + addrs := make([]*wire.NetAddressV2, 0, len(msg.AddrList)) for _, na := range msg.AddrList { // Don't add more address if we're disconnecting. if !sp.Connected() { @@ -1280,8 +1338,14 @@ func (sp *serverPeer) OnAddr(_ *peer.Peer, msg *wire.MsgAddr) { na.Timestamp = now.Add(-1 * time.Hour * 24 * 5) } - // Add address to known addresses for this peer. - sp.addKnownAddresses([]*wire.NetAddress{na}) + // Add address to known addresses for this peer. This is + // converted to NetAddressV2 since that's what the address + // manager uses. + currentNa := wire.NetAddressV2FromBytes( + na.Timestamp, na.Services, na.IP, na.Port, + ) + addrs = append(addrs, currentNa) + sp.addKnownAddresses([]*wire.NetAddressV2{currentNa}) } // Add addresses to server address manager. The address manager handles @@ -1289,6 +1353,45 @@ func (sp *serverPeer) OnAddr(_ *peer.Peer, msg *wire.MsgAddr) { // addresses, and last seen updates. // XXX bitcoind gives a 2 hour time penalty here, do we want to do the // same? + sp.server.addrManager.AddAddresses(addrs, sp.NA()) +} + +// OnAddrV2 is invoked when a peer receives an addrv2 bitcoin message and is +// used to notify the server about advertised addresses. +func (sp *serverPeer) OnAddrV2(_ *peer.Peer, msg *wire.MsgAddrV2) { + // Ignore if simnet for the same reasons as the regular addr message. + if cfg.SimNet { + return + } + + // An empty AddrV2 message is invalid. + if len(msg.AddrList) == 0 { + peerLog.Errorf("Command [%s] from %s does not contain any "+ + "addresses", msg.Command(), sp.Peer) + sp.Disconnect() + return + } + + for _, na := range msg.AddrList { + // Don't add more to the set of known addresses if we're + // disconnecting. + if !sp.Connected() { + return + } + + // Set the timestamp to 5 days ago if the timestamp received is + // more than 10 minutes in the future so this address is one of + // the first to be removed. + now := time.Now() + if na.Timestamp.After(now.Add(time.Minute * 10)) { + na.Timestamp = now.Add(-1 * time.Hour * 24 * 5) + } + + // Add to the set of known addresses. + sp.addKnownAddresses([]*wire.NetAddressV2{na}) + } + + // Add the addresses to the addrmanager. sp.server.addrManager.AddAddresses(msg.AddrList, sp.NA()) } @@ -1304,6 +1407,48 @@ func (sp *serverPeer) OnWrite(_ *peer.Peer, bytesWritten int, msg wire.Message, sp.server.AddBytesSent(uint64(bytesWritten)) } +// OnNotFound is invoked when a peer sends a notfound message. +func (sp *serverPeer) OnNotFound(p *peer.Peer, msg *wire.MsgNotFound) { + if !sp.Connected() { + return + } + + var numBlocks, numTxns uint32 + for _, inv := range msg.InvList { + switch inv.Type { + case wire.InvTypeBlock: + numBlocks++ + case wire.InvTypeWitnessBlock: + numBlocks++ + case wire.InvTypeTx: + numTxns++ + case wire.InvTypeWitnessTx: + numTxns++ + default: + peerLog.Debugf("Invalid inv type '%d' in notfound message from %s", + inv.Type, sp) + sp.Disconnect() + return + } + } + if numBlocks > 0 { + blockStr := pickNoun(uint64(numBlocks), "block", "blocks") + reason := fmt.Sprintf("%d %v not found", numBlocks, blockStr) + if sp.addBanScore(20*numBlocks, 0, reason) { + return + } + } + if numTxns > 0 { + txStr := pickNoun(uint64(numTxns), "transaction", "transactions") + reason := fmt.Sprintf("%d %v not found", numTxns, txStr) + if sp.addBanScore(0, 10*numTxns, reason) { + return + } + } + + sp.server.syncManager.QueueNotFound(msg, p) +} + // randomUint16Number returns a random uint16 in a specified input range. Note // that the range is in zeroth ordering; if you pass it 1800, you will get // values from 0 to 1800. @@ -1652,7 +1797,7 @@ func (s *server) handleAddPeerMsg(state *peerState, sp *serverPeer) bool { lna := s.addrManager.GetBestLocalAddress(sp.NA()) if addrmgr.IsRoutable(lna) { // Filter addresses the peer already knows about. - addresses := []*wire.NetAddress{lna} + addresses := []*wire.NetAddressV2{lna} sp.pushAddrMsg(addresses) } } @@ -1996,8 +2141,10 @@ func newPeerConfig(sp *serverPeer) *peer.Config { OnFilterLoad: sp.OnFilterLoad, OnGetAddr: sp.OnGetAddr, OnAddr: sp.OnAddr, + OnAddrV2: sp.OnAddrV2, OnRead: sp.OnRead, OnWrite: sp.OnWrite, + OnNotFound: sp.OnNotFound, // Note: The reference client currently bans peers that send alerts // not signed with its key. We could verify against their key, but @@ -2005,17 +2152,18 @@ func newPeerConfig(sp *serverPeer) *peer.Config { // other implementations' alert messages, we will not relay theirs. OnAlert: nil, }, - NewestBlock: sp.newestBlock, - HostToNetAddress: sp.server.addrManager.HostToNetAddress, - Proxy: cfg.Proxy, - UserAgentName: userAgentName, - UserAgentVersion: userAgentVersion, - UserAgentComments: cfg.UserAgentComments, - ChainParams: sp.server.chainParams, - Services: sp.server.services, - DisableRelayTx: cfg.BlocksOnly, - ProtocolVersion: peer.MaxProtocolVersion, - TrickleInterval: cfg.TrickleInterval, + NewestBlock: sp.newestBlock, + HostToNetAddress: sp.server.addrManager.HostToNetAddress, + Proxy: cfg.Proxy, + UserAgentName: userAgentName, + UserAgentVersion: userAgentVersion, + UserAgentComments: cfg.UserAgentComments, + ChainParams: sp.server.chainParams, + Services: sp.server.services, + DisableRelayTx: cfg.BlocksOnly, + ProtocolVersion: peer.MaxProtocolVersion, + TrickleInterval: cfg.TrickleInterval, + DisableStallHandler: cfg.DisableStallHandler, } } @@ -2102,7 +2250,7 @@ func (s *server) peerHandler() { if !cfg.DisableDNSSeed { // Add peers discovered through DNS to the address manager. connmgr.SeedFromDNS(activeNetParams.Params, defaultRequiredServices, - btcdLookup, func(addrs []*wire.NetAddress) { + btcdLookup, func(addrs []*wire.NetAddressV2) { // Bitcoind uses a lookup of the dns seeder here. This // is rather strange since the values looked up by the // DNS seed lookups will vary quite a lot. @@ -2270,9 +2418,7 @@ out: // When an InvVect has been added to a block, we can // now remove it, if it was present. case broadcastInventoryDel: - if _, ok := pendingInvs[*msg]; ok { - delete(pendingInvs, *msg) - } + delete(pendingInvs, *msg) } case <-timer.C: @@ -2495,8 +2641,8 @@ out: srvrLog.Warnf("UPnP can't get external address: %v", err) continue out } - na := wire.NewNetAddressIPPort(externalip, uint16(listenPort), - s.services) + na := wire.NetAddressV2FromBytes(time.Now(), s.services, + externalip, uint16(listenPort)) err = s.addrManager.AddLocalAddress(na, addrmgr.UpnpPrio) if err != nil { // XXX DeletePortMapping? @@ -3069,7 +3215,9 @@ func addLocalAddress(addrMgr *addrmgr.AddrManager, addr string, services wire.Se continue } - netAddr := wire.NewNetAddressIPPort(ifaceIP, uint16(port), services) + netAddr := wire.NetAddressV2FromBytes( + time.Now(), services, ifaceIP, uint16(port), + ) addrMgr.AddLocalAddress(netAddr, addrmgr.BoundPrio) } } else { diff --git a/service_windows.go b/service_windows.go index 8101ae6514..378c9204f8 100644 --- a/service_windows.go +++ b/service_windows.go @@ -275,6 +275,22 @@ func performServiceCommand(command string) error { // returned to the caller so the application can determine whether to exit (when // running as a service) or launch in normal interactive mode. func serviceMain() (bool, error) { + // Don't run as a service if the user explicitly requested it. This is + // needed to run btcd on Windows in CI environments like Travis. + // We can't use the config struct to access the value because that's not + // parsed yet. But we add the flag to the struct anyway so the parser + // won't complain about it later. + noService := false + for _, arg := range os.Args { + if arg == "--nowinservice" { + noService = true + break + } + } + if noService { + return false, nil + } + // Don't run as a service if we're running interactively (or that can't // be determined due to an error). isInteractive, err := svc.IsAnInteractiveSession() diff --git a/txscript/README.md b/txscript/README.md index 5793173451..f0abb51884 100644 --- a/txscript/README.md +++ b/txscript/README.md @@ -1,9 +1,9 @@ txscript ======== -[![Build Status](https://travis-ci.org/btcsuite/btcd.png?branch=master)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://godoc.org/github.com/btcsuite/btcd/txscript?status.png)](http://godoc.org/github.com/btcsuite/btcd/txscript) +[![GoDoc](https://pkg.go.dev/github.com/btcsuite/btcd/txscript?status.png)](https://pkg.go.dev/github.com/btcsuite/btcd/txscript) Package txscript implements the bitcoin transaction script language. There is a comprehensive test suite. @@ -26,17 +26,21 @@ $ go get -u github.com/btcsuite/btcd/txscript ## Examples -* [Standard Pay-to-pubkey-hash Script](http://godoc.org/github.com/btcsuite/btcd/txscript#example-PayToAddrScript) +* [Standard Pay-to-pubkey-hash Script](https://pkg.go.dev/github.com/btcsuite/btcd/txscript#example-PayToAddrScript) Demonstrates creating a script which pays to a bitcoin address. It also prints the created script hex and uses the DisasmString function to display the disassembled script. -* [Extracting Details from Standard Scripts](http://godoc.org/github.com/btcsuite/btcd/txscript#example-ExtractPkScriptAddrs) +* [Extracting Details from Standard Scripts](https://pkg.go.dev/github.com/btcsuite/btcd/txscript#example-ExtractPkScriptAddrs) Demonstrates extracting information from a standard public key script. -* [Manually Signing a Transaction Output](http://godoc.org/github.com/btcsuite/btcd/txscript#example-SignTxOutput) +* [Manually Signing a Transaction Output](https://pkg.go.dev/github.com/btcsuite/btcd/txscript#example-SignTxOutput) Demonstrates manually creating and signing a redeem transaction. +* [Counting Opcodes in Scripts](http://godoc.org/github.com/decred/dcrd/txscript#example-ScriptTokenizer) + Demonstrates creating a script tokenizer instance and using it to count the + number of opcodes a script contains. + ## GPG Verification Key All official release tags are signed by Conformal so users can ensure the code diff --git a/txscript/bench_test.go b/txscript/bench_test.go new file mode 100644 index 0000000000..0d1aa91468 --- /dev/null +++ b/txscript/bench_test.go @@ -0,0 +1,538 @@ +// Copyright (c) 2018-2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txscript + +import ( + "bytes" + "fmt" + "io/ioutil" + "testing" + + "github.com/btcsuite/btcd/chaincfg" + "github.com/btcsuite/btcd/wire" +) + +var ( + // manyInputsBenchTx is a transaction that contains a lot of inputs which is + // useful for benchmarking signature hash calculation. + manyInputsBenchTx wire.MsgTx + + // A mock previous output script to use in the signing benchmark. + prevOutScript = hexToBytes("a914f5916158e3e2c4551c1796708db8367207ed13bb87") +) + +func init() { + // tx 620f57c92cf05a7f7e7f7d28255d5f7089437bc48e34dcfebf7751d08b7fb8f5 + txHex, err := ioutil.ReadFile("data/many_inputs_tx.hex") + if err != nil { + panic(fmt.Sprintf("unable to read benchmark tx file: %v", err)) + } + + txBytes := hexToBytes(string(txHex)) + err = manyInputsBenchTx.Deserialize(bytes.NewReader(txBytes)) + if err != nil { + panic(err) + } +} + +// BenchmarkCalcSigHash benchmarks how long it takes to calculate the signature +// hashes for all inputs of a transaction with many inputs. +func BenchmarkCalcSigHash(b *testing.B) { + b.ReportAllocs() + for i := 0; i < b.N; i++ { + for j := 0; j < len(manyInputsBenchTx.TxIn); j++ { + _, err := CalcSignatureHash(prevOutScript, SigHashAll, + &manyInputsBenchTx, j) + if err != nil { + b.Fatalf("failed to calc signature hash: %v", err) + } + } + } +} + +// BenchmarkCalcWitnessSigHash benchmarks how long it takes to calculate the +// witness signature hashes for all inputs of a transaction with many inputs. +func BenchmarkCalcWitnessSigHash(b *testing.B) { + prevOutFetcher := NewCannedPrevOutputFetcher(prevOutScript, 5) + sigHashes := NewTxSigHashes(&manyInputsBenchTx, prevOutFetcher) + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + for j := 0; j < len(manyInputsBenchTx.TxIn); j++ { + _, err := CalcWitnessSigHash( + prevOutScript, sigHashes, SigHashAll, + &manyInputsBenchTx, j, 5, + ) + if err != nil { + b.Fatalf("failed to calc signature hash: %v", err) + } + } + } +} + +// genComplexScript returns a script comprised of half as many opcodes as the +// maximum allowed followed by as many max size data pushes fit without +// exceeding the max allowed script size. +func genComplexScript() ([]byte, error) { + var scriptLen int + builder := NewScriptBuilder() + for i := 0; i < MaxOpsPerScript/2; i++ { + builder.AddOp(OP_TRUE) + scriptLen++ + } + maxData := bytes.Repeat([]byte{0x02}, MaxScriptElementSize) + for i := 0; i < (MaxScriptSize-scriptLen)/(MaxScriptElementSize+3); i++ { + builder.AddData(maxData) + } + return builder.Script() +} + +// BenchmarkScriptParsing benchmarks how long it takes to parse a very large +// script. +func BenchmarkScriptParsing(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + const scriptVersion = 0 + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + _ = tokenizer.Opcode() + _ = tokenizer.Data() + _ = tokenizer.ByteIndex() + } + if err := tokenizer.Err(); err != nil { + b.Fatalf("failed to parse script: %v", err) + } + } +} + +// BenchmarkDisasmString benchmarks how long it takes to disassemble a very +// large script. +func BenchmarkDisasmString(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, err := DisasmString(script) + if err != nil { + b.Fatalf("failed to disasm script: %v", err) + } + } +} + +// BenchmarkIsPubKeyScript benchmarks how long it takes to analyze a very large +// script to determine if it is a standard pay-to-pubkey script. +func BenchmarkIsPubKeyScript(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsPayToPubKey(script) + } +} + +// BenchmarkIsPubKeyHashScript benchmarks how long it takes to analyze a very +// large script to determine if it is a standard pay-to-pubkey-hash script. +func BenchmarkIsPubKeyHashScript(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsPayToPubKeyHash(script) + } +} + +// BenchmarkIsPayToScriptHash benchmarks how long it takes IsPayToScriptHash to +// analyze a very large script. +func BenchmarkIsPayToScriptHash(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsPayToScriptHash(script) + } +} + +// BenchmarkIsMultisigScriptLarge benchmarks how long it takes IsMultisigScript +// to analyze a very large script. +func BenchmarkIsMultisigScriptLarge(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + isMultisig, err := IsMultisigScript(script) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + if isMultisig { + b.Fatalf("script should NOT be reported as mutisig script") + } + } +} + +// BenchmarkIsMultisigScript benchmarks how long it takes IsMultisigScript to +// analyze a 1-of-2 multisig public key script. +func BenchmarkIsMultisigScript(b *testing.B) { + multisigShortForm := "1 " + + "DATA_33 " + + "0x030478aaaa2be30772f1e69e581610f1840b3cf2fe7228ee0281cd599e5746f81e " + + "DATA_33 " + + "0x0284f4d078b236a9ff91661f8ffbe012737cd3507566f30fd97d25f2b23539f3cd " + + "2 CHECKMULTISIG" + pkScript := mustParseShortForm(multisigShortForm) + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + isMultisig, err := IsMultisigScript(pkScript) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + if !isMultisig { + b.Fatalf("script should be reported as a mutisig script") + } + } +} + +// BenchmarkIsMultisigSigScript benchmarks how long it takes IsMultisigSigScript +// to analyze a very large script. +func BenchmarkIsMultisigSigScriptLarge(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + if IsMultisigSigScript(script) { + b.Fatalf("script should NOT be reported as mutisig sig script") + } + } +} + +// BenchmarkIsMultisigSigScript benchmarks how long it takes IsMultisigSigScript +// to analyze both a 1-of-2 multisig public key script (which should be false) +// and a signature script comprised of a pay-to-script-hash 1-of-2 multisig +// redeem script (which should be true). +func BenchmarkIsMultisigSigScript(b *testing.B) { + multisigShortForm := "1 " + + "DATA_33 " + + "0x030478aaaa2be30772f1e69e581610f1840b3cf2fe7228ee0281cd599e5746f81e " + + "DATA_33 " + + "0x0284f4d078b236a9ff91661f8ffbe012737cd3507566f30fd97d25f2b23539f3cd " + + "2 CHECKMULTISIG" + pkScript := mustParseShortForm(multisigShortForm) + + sigHex := "0x304402205795c3ab6ba11331eeac757bf1fc9c34bef0c7e1a9c8bd5eebb8" + + "82f3b79c5838022001e0ab7b4c7662e4522dc5fa479e4b4133fa88c6a53d895dc1d5" + + "2eddc7bbcf2801 " + sigScript := mustParseShortForm("DATA_71 " + sigHex + "DATA_71 " + + multisigShortForm) + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + if IsMultisigSigScript(pkScript) { + b.Fatalf("script should NOT be reported as mutisig sig script") + } + if !IsMultisigSigScript(sigScript) { + b.Fatalf("script should be reported as a mutisig sig script") + } + } +} + +// BenchmarkIsPushOnlyScript benchmarks how long it takes IsPushOnlyScript to +// analyze a very large script. +func BenchmarkIsPushOnlyScript(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsPushOnlyScript(script) + } +} + +// BenchmarkIsWitnessPubKeyHash benchmarks how long it takes to analyze a very +// large script to determine if it is a standard witness pubkey hash script. +func BenchmarkIsWitnessPubKeyHash(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsPayToWitnessPubKeyHash(script) + } +} + +// BenchmarkIsWitnessScriptHash benchmarks how long it takes to analyze a very +// large script to determine if it is a standard witness script hash script. +func BenchmarkIsWitnessScriptHash(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsPayToWitnessScriptHash(script) + } +} + +// BenchmarkIsNullDataScript benchmarks how long it takes to analyze a very +// large script to determine if it is a standard nulldata script. +func BenchmarkIsNullDataScript(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsNullData(script) + } +} + +// BenchmarkIsUnspendable benchmarks how long it takes IsUnspendable to analyze +// a very large script. +func BenchmarkIsUnspendable(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = IsUnspendable(script) + } +} + +// BenchmarkGetSigOpCount benchmarks how long it takes to count the signature +// operations of a very large script. +func BenchmarkGetSigOpCount(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = GetSigOpCount(script) + } +} + +// BenchmarkGetPreciseSigOpCount benchmarks how long it takes to count the +// signature operations of a very large script using the more precise counting +// method. +func BenchmarkGetPreciseSigOpCount(b *testing.B) { + redeemScript, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + // Create a fake pay-to-script-hash to pass the necessary checks and create + // the signature script accordingly by pushing the generated "redeem" script + // as the final data push so the benchmark will cover the p2sh path. + scriptHash := "0x0000000000000000000000000000000000000001" + pkScript := mustParseShortForm("HASH160 DATA_20 " + scriptHash + " EQUAL") + sigScript, err := NewScriptBuilder().AddFullData(redeemScript).Script() + if err != nil { + b.Fatalf("failed to create signature script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = GetPreciseSigOpCount(sigScript, pkScript, true) + } +} + +// BenchmarkGetWitnessSigOpCount benchmarks how long it takes to count the +// witness signature operations of a very large script. +func BenchmarkGetWitnessSigOpCountP2WKH(b *testing.B) { + pkScript := mustParseShortForm("OP_0 DATA_20 0x0000000000000000000000000000000000000000") + redeemScript, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + witness := wire.TxWitness{ + redeemScript, + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = GetWitnessSigOpCount(nil, pkScript, witness) + } +} + +// BenchmarkGetWitnessSigOpCount benchmarks how long it takes to count the +// witness signature operations of a very large script. +func BenchmarkGetWitnessSigOpCountNested(b *testing.B) { + pkScript := mustParseShortForm("HASH160 DATA_20 0x0000000000000000000000000000000000000000 OP_EQUAL") + sigScript := mustParseShortForm("DATA_22 0x001600000000000000000000000000000000000000000000") + redeemScript, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + witness := wire.TxWitness{ + redeemScript, + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = GetWitnessSigOpCount(sigScript, pkScript, witness) + } +} + +// BenchmarkGetScriptClass benchmarks how long it takes GetScriptClass to +// analyze a very large script. +func BenchmarkGetScriptClass(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _ = GetScriptClass(script) + } +} + +// BenchmarkPushedData benchmarks how long it takes to extract the pushed data +// from a very large script. +func BenchmarkPushedData(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, err := PushedData(script) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + } +} + +// BenchmarkExtractAtomicSwapDataPushesLarge benchmarks how long it takes +// ExtractAtomicSwapDataPushes to analyze a very large script. +func BenchmarkExtractAtomicSwapDataPushesLarge(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + const scriptVersion = 0 + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, err := ExtractAtomicSwapDataPushes(scriptVersion, script) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + } +} + +// BenchmarkExtractAtomicSwapDataPushesLarge benchmarks how long it takes +// ExtractAtomicSwapDataPushes to analyze a standard atomic swap script. +func BenchmarkExtractAtomicSwapDataPushes(b *testing.B) { + secret := "9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08" + recipient := "0000000000000000000000000000000000000001" + refund := "0000000000000000000000000000000000000002" + script := mustParseShortForm(fmt.Sprintf("IF SIZE 32 EQUALVERIFY SHA256 "+ + "DATA_32 0x%s EQUALVERIFY DUP HASH160 DATA_20 0x%s ELSE 300000 "+ + "CHECKLOCKTIMEVERIFY DROP DUP HASH160 DATA_20 0x%s ENDIF "+ + "EQUALVERIFY CHECKSIG", secret, recipient, refund)) + + const scriptVersion = 0 + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, err := ExtractAtomicSwapDataPushes(scriptVersion, script) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + } +} + +// BenchmarkExtractPkScriptAddrsLarge benchmarks how long it takes to analyze +// and potentially extract addresses from a very large non-standard script. +func BenchmarkExtractPkScriptAddrsLarge(b *testing.B) { + script, err := genComplexScript() + if err != nil { + b.Fatalf("failed to create benchmark script: %v", err) + } + + params := &chaincfg.MainNetParams + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, _, _, err := ExtractPkScriptAddrs(script, params) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + } +} + +// BenchmarkExtractPkScriptAddrs benchmarks how long it takes to analyze and +// potentially extract addresses from a typical script. +func BenchmarkExtractPkScriptAddrs(b *testing.B) { + script := mustParseShortForm("OP_DUP HASH160 " + + "DATA_20 0x0102030405060708090a0b0c0d0e0f1011121314 " + + "EQUAL") + + params := &chaincfg.MainNetParams + b.ResetTimer() + b.ReportAllocs() + for i := 0; i < b.N; i++ { + _, _, _, err := ExtractPkScriptAddrs(script, params) + if err != nil { + b.Fatalf("unexpected err: %v", err) + } + } +} diff --git a/txscript/data/many_inputs_tx.hex b/txscript/data/many_inputs_tx.hex new file mode 100644 index 0000000000..2f9833de02 --- /dev/null +++ b/txscript/data/many_inputs_tx.hex @@ -0,0 +1 @@ +010000005901fa054079e69a46e5aacd8b57f94c3c99744d68c6097957eaa9021c344141a90000000000ffffffff020706fa6444e4c9d110274488a4641161165370cd11a208ad3a3a00178e1d9c0000000000ffffffff0210805cd4cceae0873daaf8b81d2eb7122cdcdf2dfae5a90569378f847e293c0000000000ffffffff021d93a6970f13f10f6b8b1b5763f772f1f37350f893cb305005319a76069f5a0000000000ffffffff021fa71c8d5f8c455820e6d83c6fca218ed2e70391c7dfba4119168c7ebc68c30000000000ffffffff0227b4b9041f1c8ac86ea16f48909c94adac7081b26a36ed5863e4c53175262b0000000000ffffffff0228a49d6e91275b9d0d8aa5f6e81d4e1e9cd957ecfdabd6df68fe6f4970a0b60000000000ffffffff022db9dd2128b6d1f1eba30a681f062f6eaad362e58b23e6cadcd2cb8d65d6880000000000ffffffff0243411baa5b4b3357849e505310dbd29a8a50e6324c4655e403043ac07ce9d10000000000ffffffff024b630ce631441c527d555c237bb68b694d50010b7723957ef4537185eef6c40000000000ffffffff025312b6a2f95a25a109b4f0b46fb35abd74b15a39241291dd3673f1dd58fd3b0000000000ffffffff02554f0d7fe6df9454c8152c6f46429596abc08b57d7cfbc7f5f22db8a0787e00000000000ffffffff025793409101621f48c0f9ebdef0867088c015c5e412ccbdd1d32a5de62ae1b80000000000ffffffff025b53aa8359a7a3fd92d69ef96be30dfed1ea99fa03db0050f3f6d3b9e2b7320000000000ffffffff025cfc35711a57b373b807bbfaadf0950b81a74d0215a0508f2e62989bdbb4aa0000000000ffffffff025ddd8921db66b54f1ad8ef2eae70913d22e5579e2781a1e485fc6a555f6e410000000000ffffffff026466da9b3ebf93b07e7de704789d5ae04f584fa39043716a9830edf5bf99140000000000ffffffff027904d29d4cb521d7c884325b1d42434bc99b6d712681e5e254597821a944550000000000ffffffff027c662f67150bca47a7b23f0fb7c50956b21a4f46b9f4c4a304d51ce9c5900f0000000000ffffffff027ef5afdeab2ec6515a739dc00c2ef8994303c19a74fd0512f8306fb601d10f0000000000ffffffff0284cdef7bdd0c45efdecb2a3a68079d7e01ccc8e229a3e72160ec93218b1ad90000000000ffffffff028885c672656acd03755167361be6ccd94ad72c5e3890773f11a5c627f046890000000000ffffffff028b372c55109471551db0aa772aa66321862fb3a11e4cd7a31cdc4ed989436d0000000000ffffffff0290198f3a73a8febae55d559676303ae495acbad11dde304c21483a951078270000000000ffffffff0298dc5698fb1823ee1ec7469936e0b9b71e69e843d993b2c0096ac3c1d86bb20000000000ffffffff029c5d6da641328e356368383951c5dad56398f29f58a922eb54afaf888e41430000000000ffffffff02d702320af97f4f498aedf0886cd6123692f6d7b6f0b1da3910703648bc80c40000000000ffffffff02d90670fc2d34b7fcfce03ecb3a3650a4cd384eca645c2b05263721e9a5c19f0000000000ffffffff02de1f9e03b532c0bd6a28a7066c81b7abf0f9dc7e40003f638b9a872fa9a74c0000000000ffffffff02ded955aaf74a935a479fb08d4e8ded2a99664cb2235bc617627616e0e313630000000000ffffffff02e3f8ded8a0d2716817259e4144faa83facd27a5c9550c7c65835cc2c93738a0000000000ffffffff03012cf75972966f2c7abb609b43c7e85dd65cada0ee20118c80d92d766a32400000000000ffffffff0307efdd04c2f3e033a0294aaa894b4245695876fc76c12b8523d448ef05e6620000000000ffffffff030db2a3d8afa67b68f0ae663cc88bee0af0a8900e88f099d2ee648603e7b0e30000000000ffffffff03133fb852424925f55c8a660fdec8a10dce9bb9b500bf07bc73e2641f1a55310000000000ffffffff0313954647c73d9c63e4e83d36e337b17797be10eb0d641deaff0c768aa6db060000000000ffffffff031bfd6a0bfc310e204fc0eb5e1c83b9d21dab82847b909db111a371ffdcb5a20000000000ffffffff032588268e35fbd648c621638633ef8188e8b946ebd3d5833a18d9bae556ee5c0000000000ffffffff03378677fc365f67102c2559a2a4300344d41a63920e7450951fc6d8d63fb0110000000000ffffffff033c9955351d351b4f5ac398adce94b2a7ed3ab14a1c790c8e4742b1558c6b200000000000ffffffff034061cfcca9fb77d28d2411f4502c3696e0aa28b040f6780a4bd00c3fa8a02b0000000000ffffffff034b063b587eb75409e56b5ff2f9cc24a994e3ecbf9de56bd46983443067e81b0000000000ffffffff034cb2f8a145b3a55bb07dcdb904859808b29a5f53a01ba3a3cd707211afb7190000000000ffffffff034f96fa5e134b5310731b23fa9235aad58008c7c61f1b8128542b51622a52250000000000ffffffff0357236d19aef1428f117c3067a89adbecfe234ef32d744acdd6b6a5107a95e90000000000ffffffff0362504fcc65272e50ba6cc4583b4b1486592b59d943ab375ea7d6f44ba8038c0000000000ffffffff0369b02dad4259759408f8a3b1fad3c24df0873b767a9d0f1d50bd68f18c789d0000000000ffffffff036e080ba3f983e5bd7d8700dfd4b510a502231d0112c38e804b59d8a84026230000000000ffffffff038298149c290f73c535c3a184d181316ef695146a58d3bb3d2e61ed993cc11c0000000000ffffffff038538c9d6b8200609e4ca2443910daa6d9bbe772b2793e11fcf1763202c998b0000000000ffffffff038aad027dade93191c546648f7125bda82c895f1d80bf174d9637e533e12a1a0000000000ffffffff03960708a37a5654abd75755d1b8f49a84cdbde4676e14fd4863b125a94e9fc40000000000ffffffff03b0e09c55ecabf221c30a086c812e35bc9b586547cde8a83961a7ffa9067cb20000000000ffffffff03b28e682c13e7ada60cb905f8070109ec5a7800a0424c5f7afb6bd3039d48cd0000000000ffffffff03b7e8adc6174ca369ec31b4f944a6b74231d09254fde6b2bfe3416f3c6096ad0000000000ffffffff03c4f1eef6176ce6a2114dce78dd292f6db20fdae7c534d22cbada58befad6cf0000000000ffffffff03c7b5bf7fef69ae11c467f68fb551d58424e8723d05ce3ccf88385187898a710000000000ffffffff03d5150f5295b1e817f44fa34cade950c13789c4129e98eb32634aaad2abe13e0000000000ffffffff03d8250c9557188c7672009c4b14f37f96528e3f9c6889607b2e25299efe08720000000000ffffffff03de1dc49d0146dcc0cdbeb84c68a14ecb7075aba67d6494a5c8d098147843640000000000ffffffff03df8c8392bc17eddab688530697c2c221420464eb643ca8edfd30d7371ed5460000000000ffffffff03ea1dbbe72e20229648695a9b01e09b6080fb1c4632931fb810c5bfbe4b4eed0000000000ffffffff03ebf599f34a7d2cfe7bda1722f76e3df5c7fe299fd5c6e4099cfec4f551f46b0000000000ffffffff03edf95bb2c93c07d734ee8b3b1de4d4085c6b65cdbc3ca23eceec0c4d2b29a00000000000ffffffff03fe259ab7c4c03447011200d7d5236f4b1eeffd075926b78650cf1a59d570590000000000ffffffff040f71baef9c5273ac67fcba44ab29456a820274654624255c27e53ff62fdf8e0000000000ffffffff042938cae95e712592060f872cca771dfcd0218562928311c81127c3170a57bc0000000000ffffffff043a09d788547db3d1bfd8512000f9ad8bb3caab6fc24fd186663542c9f06d750000000000ffffffff043fe8a5586d0309c8dad9277bfba04fb27e7a39d279c0c9a2232e2927874d470000000000ffffffff04426f1fb4981529c32ba5756f59a2211ee9d2b9cab2c5de06a07680e833c33c0000000000ffffffff04454fa62f2c03d785307982ae406224025343f19f183e0fdff83d8e1d4cc1500000000000ffffffff04496141484d641e3b0a661210b225df50221b13bcbcb3cb8c86786890c745db0000000000ffffffff045731a8be6bfab1f9d62d2b2158591029cae655fbde8c8bdee80f183e72ca4e0000000000ffffffff04610a21533b98d3360a6f2c65be5685a1bb3a43f67da08dc1674a0f517618990000000000ffffffff0471b7883558587879bd53e13694069d95acc0d809fd0a65125ba3acdcfd66900000000000ffffffff04729b78d9b706fcb20c9cbb49ec1baf5fa782ff44d45d9a23868bcbdcbca1330000000000ffffffff04747b056b7cdd34c9891845220c2b7227a7c7c4f90e1ced6f36fd2197b26af90000000000ffffffff047a37d63a2a17986896072c77fa2e068f6e593dc64bf2ad8e180fde729fe3250000000000ffffffff04875cf5c94486e6596beaffbd7d08cf5e3111df06a89f59d65989d1485949190000000000ffffffff048944d4aa4d42ae9e864bea755a4c934713c63ce1c61d177a1ef03fd679ee330000000000ffffffff0489d5c9638a3f689c232fc1b9b59e5f82bd2e720744c4405d6537d7931edb030000000000ffffffff04a206bfdb054b041ddca180111aad2abf7b31813e4551da3a29bfb16c03534c0000000000ffffffff04a5feab7629e0cd9569aa62ea70f7ab3fdd58d3aa9bf73e8f76ac32a949d31a0000000000ffffffff04a70237d798a0b48b5abf682b806f31ff425406d93e74cde1ab4b9939ce9bc20000000000ffffffff04acd550baa26049b3dc52fb9efef1cca0b8dfa228c64482440d7217a81e587a0000000000ffffffff04b1caf936f5746da6d683eb00ae36b885fd031a8928df91e3172b1ca17f4e520000000000ffffffff04c45bd25f17cc765d8a67ca80a801c1f1c2131eb51b7b8ceb71eb898582b0380000000000ffffffff04c99a8ab69a640f9891aff371876a9d0c9043cda0430cbd436145c5574c124b0000000000ffffffff04cc0c4723cf9952c0a51db275c9d11370a95f478de98dce603d09de8e3d8e680000000000ffffffff02c6afbe970400000000001976a914c055f905fe8d14a2766801307a418f1e03ba566e88ac5ee85e0d00000000000017a914f5916158e3e2c4551c1796708db8367207ed13bb8700000000000000005923aaa80d0000000018f6020000000000fd4301473044022044e60dc7ff9d720bdc8329f97c5b321a84e0846fed248b23d399d222a074bff402204aaab1ed5df1e4b94d627d8b06171df51140e65eb056536e91103b75d032cacf0147304402200fcc38b7bff890fbd390f4bd1057c72df74c2487a3cd20edee80a20d6b2ce02902200b7893fa29f24e09358b6777a946d40166bc71c25f8e5f850059a1914e25959401473044022006430580bc312023db40b6928ba0c39141a8a59bb0613c5f6feca1c1f9b2bce90220055ffd441357bc34c246024281a7b394c7ee6a2a3c013689d95a3b9dbbb98d9e014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000009503030000000000fd4501473044022059a8f1680e80b50cb8a9180c1fabe8a66e84b34fb6c10912715fa71a5bc0f9770220531c0836d4de61d8e291c517cda25919a8b822b80b5737068120411976e5577e01483045022100a48b720930c142235cc5585a97a11d20e73a81049791526cdcee34d36f92fcef02204d2523393dfc4ba21451fa563b08f53df7c7115b65a9f2f01fd578474d308eaa01483045022100a73d3ebefadefc6dd9c7041b32bf7a3a25e49afd41bb3251c502ae6fef89316102201652f9ee39ef09335f5c8e83b3fc7591b592ff0651c5e8c4786875710cb9d1bb014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000006113030000000000fd4501483045022100a5af3c72e2e15539caf81189fa020cd4b3ac5432c512dc48772d825dfca7c60802203ad5f3caaf54593b8068ce50db67111ac166c2efb73b52b30dfb7884682faadc0147304402207796a265903387a8a612cf47a8df0aae7c251a339590b24b6d813fb4cfb2dacc022076df8e67ec560d8fb74ec7ed0cd368a4da09c98846635c662e5484f5ac5b862101483045022100eb3318b340dd14f8fb797af81d8c1784668f082e54e58cd59c1224890d7f6c19022064ce22ff6bb93806930dd34dcbc846d38028db4d4d4b9c5527b6d493dba01cbd014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000099f2020000000000fd460148304502210081e68619898e8b0f9eadf2b5a324fdd7a684f935bf2cb72eef221e4310631ebc02206c7d5f1067d2980a95bfdf3b8530898ee94138dd99715c44e30b0894a5a6031b01483045022100f675ced0b828f2bae7a8046b41869ff865c081a79e32cbd400baa8ad99a975cb022075f347b57272df25c5d49c810af71fd1ba515b27166e61ad0c2bcbbd746a818101483045022100f271a0a0a8c5cfd149bf99411c4504d9905e6f9ce9f9787744c9593cab7f1c1b0220527057676ffcdd60caf0812b20b08b94ee1f935b44614b29bb9ab59e5bc0080c014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000001b02030000000000fd4401483045022100d068f2da5ba187b9d16b06dc87f1ff241063efaa786e07668abd06f8c2bea77e02206c541479ba49347104b386c36df7e14bc087bff7a17bd9c4096356a8c780fb2701473044022027336ad739d3ae08d1d136a9b7002a97873199d82abdd4bfd0531d62294116a9022001925305ccab8a328b873126baf7977b51154b4f0436685fc21f483ad347fb8b01473044022031a20fbdd66cf2a0d59ed37eda8ac50772c25adc62035b53ea675200fc85cc1c02204c1ab7d35c53ab9a5086fbcb669452367d68c8a3f07e47843c8fc2e2dbbbccc2014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000c7f9020000000000fd4301473044022022bfa36e676571479c3dff1d1a5a5c0cee3677b5ac45c14314d242bee32664270220736875bcd0807c93c3a542dbf98c753c7164ad6830acec833cc43e157eb665180147304402203c2d6ce11bff536cd9bd4f58a930649f708a5735a26971dfd8d4efa7748c48b302201e4c69309d99c41d1c19ee200fe23547f1972173f0954e8833b8ba8ecedb6aca0147304402200e9ac49f352071840f13104f247d1a506a637d898495ffcc4aec7743ca56a2e702203e279aea8208e3128dc27173a6cfbab2bd8c2bc8f273794028ac77a129d5cab7014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000005210030000000000fd4401483045022100d8e2743e7051807e428574f9c881781b40daf0ec572dcc30357350c48683fd84022032a131a11df9571b53284a2cdceb7668e7b6442897fbfd54dfc7e26f8a3a19130147304402207798db2d9031f37eca9788b63869a91b100abfff8ba9966c91c42636e43c56bc0220499af71936bfae1579f6ae8d88dd6ff980ae1dc4fa8d1c5585d08a6461ce1e1301473044022062d193f3c5f74685fbccdd8795515f67b88c8a9aac089591fdc07a8238cbf5390220200f0d61cf48c33f7800150c8af578107c20875846b4a0f2af2a4aff9d2b172e014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000dcfb020000000000fd4501483045022100e4711a4de4d6cb64e8cdaae2a4a5033c1ae87549c8d419b42b8170ee5217e04602202784ec57a6591083dbabaabd49dea7cddd3f8a32d9497e23d4b4219a56a9395f01483045022100fd776ca1d482c1d39e3a414bd0e6d353637ef626929ca5ee37db62e3dbe3501802202abe2e1279e5a354745fc5c8f8dcf367c616d82f91052925b1e2880f3906e7670147304402201976bceee0c3bb19da53e80a10a92dd6d135c86e581f349268f58b7d6b387bb5022042616ed8eee7f19ba7bee1fd5ae5415b521615aae99c45d56f9bde39d2577b9c014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000008f00030000000000fd4501483045022100fda77866c51a7ded28a6e12d3459e32b33401b1c0426f3c727ba4542ded40d1302205981be0eafc9b2c702038844769765df04bef8e17c80d1fef65c2bdba0a8e6ca01473044022018343c7eb59ef103fe102361f9ab8c789dadcfb3e60dc9b25b429165a9625af10220367f3f95f988ae6bc29c8a400687ffd70d009fe0b650994f48c1875620440fe501483045022100ac63791400e4ab5fee7f8c8ac602017409764dd7ef7ffc07d793298277661a2202200c3de5c22cad718ae83c101e987b66f31f62cc3364e8c8505407ebf11b392b66014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000006211030000000000fd4501473044022029a09ec85ea2c7741cdab03fb1185d94029a5511bbe830d11ac22dfa7f21f452022060d4039356c9cf06be106dc81390025735cde670de5c0a5a38e3946cca95211e01483045022100ca82755fa0c2a23e207c665099d102d13a393ace8cfabee79b1a6f97ffb001a2022014e2ef964e3fb5e90743c54e620d40d79ef111be1299d917f762c442d40c2f770148304502210094e9d5926748124f8c215fb006ec2bec55e4cf469a7f8579a339c08a267ed2540220323b0224d9964cd55b9ccc3f1dd919073d83edb293d022b00497b8681624bec3014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000b009030000000000fd4501483045022100a308d49610b603e9ff378fb40620f255216f3325aedc8d9a909f9c5e8983cd4e02205c93d14a43aa5d4cf7a3d4d483c6d47ccb8c2c4b78647e6cbe490ca6e03cfad601473044022004b8e60724ecba532e2677411e2617cbc49ba42cd4843423d724797aed8ba60f0220198d033cf732b5451d5ef00666ecd19bf4ea8a08f6c5fc16f4e153f1759021ba01483045022100e6217183d6869b431befccd5f4b12372028e7975640cebaeefd5f5172b871ad10220152db2015f3a8c16129f34e2488a4cf19a85f26956e3818f2cf76fdc9c43fd35014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000005805030000000000fd4401473044022011d6116b37d985ed52d59aa4fee1c67a44668f55d2db37fcecc3cf89245994a002202ecb47c384e42351995cfac7ee0fa8f55053dbaa11784a1890be84c164a5cdfd01483045022100922746c881c2becbadee3859902d93c9f623d1ccf3cdc0231d31e3ee806a1db90220715d1689faa159f4abe4959063e4dd8f108b4dae79167367843dc31e0fd46e97014730440220280556147f23f8cad1907869154a98b025baae29367cc80c6d23a3a0d3b6443e02207a62c31f1331459885ee236245d3e122013b77b304ed512914b05acd1886ce79014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d000000004bff020000000000fd45014730440220053f5cb6b633930fc7ccd1abd012292cee5b64d6d5c25220f9d9f22ab16d1df40220430e464f5823ee503616dfbfca55fdd01949cca336c8586f4e1de72ec3f3063201483045022100e16f4708245ca99bb01ab257f495d6a33b2db4ee9ee5089a6a2074ea9070d8f602201d3302d14c85f11b2f42af10e2ac31739f085036f26aa1723c3cfd2d4b35b2b501483045022100a0be245e53ce42f783481e3ff658c13ac850eda7ad21b8206bb48fa20fa2bc5d022072963db0ace1449652a083be585dc75574490248d1069c0a48f7f7a6902fddc2014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000001703030000000000fd4401473044022029960cfa720d3818d4d2d7a55fb1a68323e34678a2a8fa3e68505cd78184cf9d0220723861ca8cee7eaed1f503a9668d9866ccae44f15a3e9da77e4dd23679715e4201483045022100f3054837f1aa88101e983b28466b679fc43fac26c48d0359c4b881ed3cf8e73b02204f4579fffdb2a96fc82b0ede6bb5eab53a86b0bc04e1ea0fc1bae9953ff5a7f90147304402207e3132303406ca2924ad934d49e4027f52083638f08d73bed7138b6d267948ea022018720dc7f47cb13d3d37555c0abeca90cb00060ce1308a3de317d63da5d1f4f1014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000002f3020000000000fd4301473044022012cdbabc4d98705db72c8a6448d8b5e5483b404ce0ff26fad16b3751ccd667be022044bda8f743f51515281b41e7b7a0347e8d52e9aff07ad0c4c84486034b2257a201473044022021e2029bd87c699931a5eb4f997e56f1efe1dcc26a7fb8c8147a762bbea389ac02202ff5feed06720f5bba0c12107dca3d83c349a35c43256429b8f12eacc6b5df16014730440220269980cf3256b87c9ff83b29e3005b6af9c85c5a8fb7a501055b486bb51fe3e0022073196474be83c9cc24a843777835b97c4eca0ddf7956547f6cdc48a1cb42ddb3014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000030f9020000000000fd450147304402204442fa3cbc6d9ca9a217069f984e8fa1bda35a825d6bf39804c92faed97f2b8d02200976a8fa7653918fa23dc3adf15408d09a8069b033f4addb723a028f9928fbda01483045022100a36c038f7e49fea33c9f2a26a4d8e510095d42912ba1cabdd7da19ceccd2466802203b78e02c86e2fec18eea2ae2b94f1e6736dfa7a3453be9ee571c90832978509901483045022100af4a52bf94e8618d387c8f54feccdf0ef49b6b5503102cd405ab28c48c6597ea022031053ae17323c0fb24dc2cbd3107ca374279cac0b54c4a6633747effec83fc9c014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000006508030000000000fd440147304402206391486dc686a643c26e9b43038b2cb1b465ee6ba81ba9203d0d82f9550bd26602202ca9ebd53b20a6238c3d8abd4236b10d9ca304f5e5808db4d5004ab9ede10ad101483045022100e419233679a71a3380b662425657eca9ad26cb425a8aaaceb10de1847b3957ae02206780b4b428765f9bcee90443aaa497ade22fb813951205fd53c999f7ae27c168014730440220656dd7808be7db3a7e448608ccd3b8696cdefb687de8a4e37a58a2a0db8c714b022044683a0d0299b6eaed1ef4162d85f563aced9306d3e4a84961a301604234649d014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000cb13030000000000fd440147304402200ec0afc3a6b07063c61400fdd53e5419bb755bfcc99b1d6d2cf275b3f6848c75022036fa64742979454ce0c6b2e16963dca1d4509360cd35cb85fe533982a2ad9e690147304402206ca03acffd0198c7ea1d78e713eb45812dd0a296929bd679137dfe56f3f0601702201b9d6b25d85e86bc747b8c9d19a1a2329b02ca9de22a914419cec25bcd68e6fe01483045022100d22e473e19fda86e31314fedde03e1710f5de93efa284dab5f86817c99c9417602200bc43a59bee8a46bbc813ce52cdc76066903820af43d4caf173000543f672c6d014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d000000005efd020000000000fd440147304402205b7ef22035cfb0b11b62354d91f97910937de864369708e3e35376d4f620a1780220496aa95cdab061367e571568269afdc2d0a8fbb83b1bfd08c062d057041fada001483045022100db48444eda15deaab63bc6f3f5f31546d3b44a5a9412323445eb3e0853b440c80220201d7c95c47b5beed4a1139c27a79dbcd30f288ac106a208f43c61a0989f3e0801473044022040693ca2c95a33d5e8e7218b99a6df8507e9b8bf72014d19cae77d489b57b76102201883ef3c9df0b017e8fcf5b0af1bfbd61556d5bf347d77544e3bd263641fcd1c014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000046fb020000000000fd4301473044022005b50050f39f996b5f91e8e2c297e66521d5f72f2f4bec9993dbc44908f662be022001734f6df9a192f00e131fd8627b37b2afdbac8afafc38513b02c52ff305efad014730440220749ef2b72f235127bcc7c949f171ccfcc1ee87a9979543df9b568b323d9707260220440ae76846f8691bc471aa479e876a5fe01ce0e1f8311045cd8de1e7e58e4f890147304402201f5d4ea7f8fe9f08dac2020f4a2242645b27541b3cc591235fe927bfeed375a8022077627f400a799de27063ca0f2ea2d3ba5b8398bbac368a0501066097ad649e3a014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000009a09030000000000fd4501483045022100b83b84be0a0e613dd5e9dd7c6bec573a81bf95f83b546a4a717e3b708cc18bc802204bf97f877e03608103e30aeb9aab39c8f8d6e22cd9e89e66e7be74277bd7b7e201483045022100a9fe153e507bdebaf820f73e016ca8c7c61e3a07cfe7c79d74d674219c3aeb94022030abb047356650b8bb79d9eee45a9030c5cc55466568285e6d6f97cd6be577830147304402203da91297cb8e456b0089bbae43ad02d636f3f3777017c5b0224da4cf31ac5e5c022002a0ab0167395ee04f8e0f37fa261a80bff532c118a6f9fef229c5a9315115bb014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000cd0e030000000000fd4401473044022002012e7841bfd2dca62a5667f9bda8cc9b9e4ef86f8d0d6cca322b5bdb06a9b702206d5428e45ed0e18cb980b385cebc86eb6dcac59ee19f84afdc0c95ef0e782bfd01473044022073c34e5025fda812d8990f1f8cb16fbd4665554e8c467527b2c5c21132fbdf0b02206c22e854f2b704932e8134c46c40c738fc65939b2a516cceeafadd0c80f85efe01483045022100d808f0812a4a124c074166d87084bb3a38a6c632846a8ab4be7c69bda49b880702201a3625f5641c6a3a414196dc3b356f59b9bb8a44cd7623d601f28cb03691cd39014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000007fb020000000000fd4401483045022100e5357e2b20252b028d10d746c386959ba296630f08d94906a36251bf331073b102202c55e9e3a482e27326731821d25fa4c09103ec60c4cdced3f6774e6f1bc929970147304402202e58674ad455a4172f87439beaee82f59842d0c4565a88a358ebe8db35e2204702203cbffea9df59094f823f598cdb252927b1af451f522c8ca24d52274baa2c5f440147304402201a078f0959625258d4ef1bf7918b852bcf1629f8e79e2a95c1e6ffca017b7417022071dfe182e18f1debf0163e85ece438f1f3326e2eae39eab8d9c7a6cd8f179bd6014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000043fc020000000000fd450147304402201d697bdcd56006044872b398bac35b2c736f6bc22080ba7c81f5038de6a87a3702204c832224547a5bd89dbc5639e763dba74e3b35e77234078b425b7157b67f401e01483045022100bd54f0d2fdb584b15215e1eb8af08a2094f9ebabe0db8b01e107d0d6ca7c55f402204b1c9e9d368361903fe3cc99e48d045672818ae5ee15b3fc46e1c84049ed1c7a01483045022100e62ff90682934ec550ea89646de3a8d8bad4919bfd7d04a343aa490ca380d49d022046b3c4d8354661d6061798201cdec35744471b61bc55d83fa403d1aa6aa3b2b0014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d000000000cf6020000000000fd450147304402202d47018ec27c8d18a170cf22fa9f16df5da26c9ec85b5e7ab1220d7619d3bfb80220391bce1206a19b54496101317aa853f59fe8685f4ef1080525ec13149bfbe0e801483045022100ebab59d9714232e70788b14713364d8fa9c6284e0c2f173a3376521fffcdc80e0220624b5b801a7127e41c4378582026262e917a35c69ddb6fdf0de7ecaa26017904014830450221008905e07026703b5c1f6793fa9d749981369235d540fe0127be7b5d8cd18e401f022017b7e658adf3ad47487dc49c6aa8e88cc4d3b97f87ed0771299ef4026a8d8995014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453aea4a2d10a00000000c506030000000000fd4401483045022100c73924d67aaa9977d5b85fbad560b5315d36a657a402913be2aa90a1d12300e2022048b79577559462b4fd8c348a0b4d98caa20cff2c8a0363eda46037fd11782432014730440220345499c9d88b6989f158f7f980fa6f78f0a4b57d70f159739bf631b788fdbd3702207340e0fb636061cd9b7de0723d196b5f406d24120cb84f1236e3873f6e2fd6540147304402203332474e7a96938334a32052a802abb131d7a5000fb8fe1b903ca2474217d514022022533f3d58829d55689671efa27901878cfb75b20f5c696bb00ef4fcabde125f014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d000000002afd020000000000fd4601483045022100e7e10b3fa44e3bac1a8a5baa89ee3f34f437a37572a111d75ebc323007220956022007332c4fa0a81b99711a87342f7e13e720d09122f6f8d91ba093346d17cacbbf01483045022100d8f075435a1f1e6b3352beb482e899b95ee611551a499539c0004d703588a4cc02201b339915bf5cc5b1f4ca95d507576e58dfe20b2a2a3f9e97adc37c8f1f2921b301483045022100a25df71a3f33e602652db2a3ea88a65522edaf1e05c0900c87ef7149dafa9ed80220300d23d4abf09c979ad36916da78de09656f4c38a4fdac72454a888babc3f22b014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000b90f030000000000fd4501483045022100b6240b6c0f35b38bfc074939789eb53550f6c570487245666cdb825c13b95fe002200789f35de73db6342d1a3fd381ae55f5e801e1d170e7c9672c8179ddb7c9738101483045022100fb1a47917fef805908d2e02ff317a685a9550e5edc0aa8ef8568282575d4f6c802204a6b7a54338332ccff52ba21310cb0dca6a6b97370f1a621566c9214e03b49d20147304402203ef5647f608b1e921ed139dc54bfaf5e5ac3d959b88f3dc7a2ade0729f62818002205df3b44fab36a105bcecbe1f6b2794f692e0fe65eaa6d78126279c52db2a438e014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000004b10030000000000fd450147304402204cdd0d63816bd37ceaf959d323788b35a629d6b167cb2337ac81c0adae1366450220271435beb70cd8a18ddbcf98356de296ec16847a7a3e1a7c36d400f332374af601483045022100842dbb08884f9834eae867feedfa0ed158175348ee671aca1b470a9c5a723ee202201b9c8ffb52dc70fde054f18ab5a0419b603880bba4c9dec47d46bafb25c061dc01483045022100848c18295767444c5e0670930a0e0436fad251964bd4884ff5671db1a3f19d76022016edbdb3e65f99cdede5e957a941f3f35889342818f6805e0126e715a335aefe014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000001402030000000000fd430147304402202b7fe153e0a3f19123f677cfde86578aa546f8a46550806758b053d0b45b89710220792803175b29dab2c6e8c751436b30213a3b409c8d7cb0299f29a69522b120880147304402204e67807d8a30c8358cec44173c7a0727f542b4dc131f9701f2555a27cc17b628022044487b404d9edc2e2e8f553ac874c5dc549d9b261694752759d101ec00cc44c10147304402206d537d0aa88752db936ee48e986afd68338411ff68797ee2f80ce537bbf41d9002201d276c24365b68d18ce4020792c5d9558c7134495af96bcc55721d795c7662c2014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453aee854ed0a00000000f1fe020000000000fd4501483045022100a53176fb86d2190592abe80725917bfd5ab910b942d6f9648510e91730f3986b02205db19b272d2a2be3e315f2c9526a02c23f043c7b643128284faf734ce1d8930401483045022100be116b856b1f0ecac3c621c21a09d484a4bb86468a93e37f7c6d684c74c9031202205bcb65f89495e4575a1e5babb08cbd2aa21b200bbb9af1bd789b2a5b68c804f50147304402202a0dffdd955e6a5764e06113b5b712e789e956e7b6bcfaa225da8ef66e446c1b0220455f54d546976dd492b94f1693aa9d7e76dfffe3a7e861cec5f809fd5ac18caa014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000b305030000000000fd450148304502210098e4071de0540dd5d502e71a962803452695d3033ae1df83855e238197e2073e02202b825fb2190c784c050c375e1f520c0a2a85f9925fb43ffe58cdd25708e2877701483045022100892cb91af82982c870671e956805fa7aec721b82962311f4c51f959889ca8efc022051766e50a95d2ac480851b98f129889a4dd566c69b6ecda9654b3d4064aa40760147304402206ad1b9cd9af3c1e69ce32f42f1eb9ceab84e99b9f04cd14ab8842ad065a5589e022020b98e515e17d59e415d11b1be3e4fc34783d547200960ec96a4f67b6741aa58014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000018f8020000000000fd4501483045022100e500b89edaca4c2408069dd40b9645eec796f536ed10811016aceaaeba48b9b102201bc364c56b9647a7c6c53b235418a78c8d8faddf793bf3ffdbba41818b9a401601483045022100a9695d1776c81442dfc4931a960188be256f58c46ff546d1e872015c8ddf56a2022012443c230d3257b64bc8ee05d18269c211becf4b9ed3a5c7a3b63e2e216dabd8014730440220073a21f37e0d3cf9d706dde6e4fc2232395f4bf1982785ed04c61b1144f7c00f02202c7b18f4893413590bb4fb139896826bba6fc3e1205fa43fae30d8e7cce48edc014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000fe08030000000000fd4401483045022100ed3f9d7fedec8c9f8bbf1afb2b7b1edb3e4e8b9dfaf789f1effe19a32dea4728022046cba3fe18f0c1107d3fe2436d037aa8fee47e830cef788fa86541c84ac02a490147304402207326ffc63de54f4554f56a7da2072cb4bf89479bbdcf22d00169f4c3d7054a5c0220717c3c86a5470ad7f7a4900cc13e05a0a929ecc00e3ad58ac5850508ebcf7a6a01473044022052cfcc5fcd981d38c150af8897bbad4541a8aa2742d31369bf0c37c4670ec5eb02206031643bea000d5d33e180a75627cfa7bacd9eedc0926eaec773e529255c6262014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453aea4a2d10a00000000e001030000000000fd450147304402206c7e38bf498a7ff831513413e5bf283b93fa456993162fb698a88933e1451fa60220669d5f75d9817f3ec08607f4b3b0ffc3f4190b5f7cbfa3336f1b64dac28178f001483045022100d8a58946dc73974ead5766e023a11eb2f32d3b7d7e482ff92255137fa6aede21022040c02e902a208a25b10296ee0a5466c6a8ce211ae2a6e2b7a541d2ea69fa4fbb014830450221009bafaf344ef873797281daf907d4e1171d8220e47bac5888e5cc72f3e219ef85022029773c52b7785abb77d72c22fbda1f9cc2a8536ccca43ec756bc9655ce6a9a84014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000980a030000000000fd45014830450221009be858cd5d4a8bce15d433d040be529a38cf38d9358919a9c04a1ca26127e3e402203de44aed9159f37e4b04ca449621d82040eab2528e2cdb7539708574899175c80147304402207271dd94d087a7b2174f3c3ccea7b92e29c84c6471224269f30faea34f2b77bb022000c9e94e92ea9f311d7a6260a2283f879115eb84d319d0da3cdb724b2b66da890148304502210093397c395481625411641fec29b5f8c37b4163e6bf886843080082f14dc716c402202f1b776d07f69ac148ec36a257ed43a2a016cc3257b091f1180bdffe9fb8fd39014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453aee854ed0a0000000047f3020000000000fd4401483045022100e59a2bba52457cd3a884568aefb50a2500309e0262243553b31da735cd281d1402201c238950f19cff6cecb3e75a7308c6a0e9addb39001b36e12454575dd695ef07014730440220679cb79f57fdabea76ea42e3f145aea59f3cfd4401c4c5b1693b2ba03a2054b202205e3e2accd4d889e6fe4ce0a4ee8d6618dc79aa1f3b2d3bfb664d83d25d6562b501473044022043b80b0e55ea34ff22377a57c4633c1c5fdb57d53d04176c1673cc67e56d63a802207081bacf923edaa05c4848a11fbac160eaf3a33bb495c26361f85f3ff1fc482b014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000be08030000000000fd4601483045022100ebac21191cfac6123e0a66e7c6af7febc1a1ce2e63c4e6fa1e4f75d6d2f39dab02203d592a16f40f8c8c88817d0788457d66bdb35dde14b02b90c7c353d040d4af9101483045022100827b7e2ef669a5d1407b98562a4cd45f302f6e2489c1bef3b8bdc6a0592bd922022036fd1961511848f84c9e8c633044033501091c5e756e28a4787846156cb00f9201483045022100e330508c7b1072b3644bdaab4a6219a7cd7ddd364ec0729534385e2e6e7fdf5502200dfa2bc091014c8cc134728c60c40f21f737203e5c5c04740fbea54bba8eed04014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000f5f2020000000000fd45014830450221009db0475dc62ee80b8b49bac4d0138de52f985642f5ac40b75f46b643e4115767022042a464c53ebf57bfcefa05634ceb14e7669b86e94bea517c68e2264d676c70f80147304402205e563709bdcb24975892a67eddf3958a31d3a58471c6c0e0cb6891be80b9eeb802203c69bdf9042af7429f1555cba2180108834b3d3b139514274fe5c30aeb9f054901483045022100f792db494bef64ca96ec49891434bd33f511db09d214a3ac323343d758e2d3c702203a86fd817a81cb84610fb948d6b3ec7f4d4fed24da15ae9ee245606c4f5c42ab014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000bef8020000000000fd4501483045022100ca7a5b358614ba7615381667ed1d6ee7b2332d520caa6c5c6c1b4aab12fc4bd9022062990a8aef2fa44dc073cafaa2f3e95c3534ee075ba998beb716756f985b8f4601483045022100eb982763c3fdacf7bb59642df124f090cc5e55287b28c206a47c8a3ec8f08add0220668510362e0da663f117235f3aacdfa7fce13abfdd2c54425cf63d1b32c0b56d014730440220447bb198dc7466bfcf815e6b91e2431b970f6eba34a02260c224e503622e126902207c8fd1e1bdd32def46f7442df011f58a561b04477b372da26888c2a38d2bbb53014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000580a030000000000fd45014730440220702dd862dda92c7b3b214909a1f9dab7653a2f9103b7a62d6646d02c651b34e7022022e3c90cbf41c1fa2a5aa89ee139eee2e656a640947e8431c63c54e1e944763501483045022100f0781151a884d97b3de74df629265914f8d0253581e789a2eb511ef76568a4d602200f33782718c74ed75c25d66426f2037690d0ef3734fd06017bbd65d992b68bbe014830450221009d56003be4df82e009e4584088807d5f4a4322151865681dd04645c63b7a5a010220584ade2f5b18756f6c3cec7dd391cd174fa9103c747c8ea0d0fdf6877a4fc882014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000006407030000000000fd440147304402205d00ab5aa7656681bcde46fb484802c2a304249dddee6555e680067577805f2b02207541b235dbef5e123e7b392c63497ea074c26f08d004e766a7711dca4e2696ec01483045022100fed3c2fa5de22702bfb31075897e03b433fa593ae0fb80794103566c490a595102203f5b01c8e7296be4e2f1a836b9be4d073bd2378816ed09baf416188d9b25c3b00147304402202cc6e2988cf32e02b25b2a2d853a507857ff6eac50427c4def421f20aa36e9cc02201313060f0fedb86d1dc00b41b437705fae3e5e3df23b254a2343afde89e17ee9014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000074f3020000000000fd44014730440220681a9e9bcbffa35a8328fbbdb173d803042ab1a858c4ca9ed0e4f5a67d453c8e02205820f9fcbb4414d41c28e3509806443a869168cd1e17b428549ec2495161f5180147304402201339021529c4f6eb6dd22b56752ad5b2df7e1e8d978439c9578f0e907974711002202c63c6b1386bea4536364610c38ac0994ae863f9f35bef25850d6173901f794701483045022100bb021e7846352c38f3fd4fd21179b448a8d34295de73fa41c57a5f972e91c355022008f06f8bd66571e4027556cfa9124b4e1e518a9e82470261db3f0a3972efbcb6014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000e1f8020000000000fd4601483045022100f30681d06bbe18241bfeeb7cdd484bfb44efcd579f2c2e2ae53cdb68fa5032e202200d96812f571f9d8e8fa0756e351c7a779c46cf4ac62a6825f14a5020b771988c01483045022100996344d3a16c60b94789cd5ae4d3cfd8f0b660520c8e7602e0f8a7aae705b127022008d6d5577a2b90e2462bbccb88c79cfa2936d001e1b14ea530261235460c0778014830450221009a64402bdfdaaa64d429576b0c77601e8da643dab7437e8cfd27db5a56c05d2002202d263058b96116381e1879ad483c664341174f341537665c1ba7b8a33e378e75014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000086f9020000000000fd46014830450221009b8535b0fbf8f854787cd30b5109010183dae5807fa34e66e15cd6066dcb6b2502200783da464daec7780b546c0b6a4c274afe5f4698987820d36d6f9d5798ba2b7b01483045022100ccf647bcc6a89c6cca668aa5d4cb8577b8b1ebde8caf476c4270d96c631f6b8b022072e9d434ae2130352841477494a39168fda21ba51af04f372416a12b2a3eeb3601483045022100b71cf0b31f05baf22586a01f0e1869e8a37c9fb50e1470c6d82f0e8c7e709bff022050bb9d7638620264be1f8d69a477be454dd753beaf0ad6dd92f3d996f62910ac014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000007e08030000000000fd44014730440220563b7ed04dfec4aa05efd0911b384ae4995b1ec21be2572013f924268db89c9902205b3c939ecf522cfcd9d4678bcbfe23a31a3fab94043725be1d1e0c2a1ac6faf001483045022100bcfa16f8de773f97dbf9dcab27ead17ac1b3bfaeb16733d1bc355380595730a7022000d0125f418f48606a41c8b6f3e7dbcc21fd45f8c64be25513d58f56a0cbb0bc01473044022038b52dabadc8e617c7efaea42019fb8732a1bec5fa7a696c4c050b36968b637f02205b0bb3befba6a9fad35b34b99280523ebc37c20ba2eb9996d91c3f25a8d2a933014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000001c0b030000000000fd4601483045022100df6c07633b6669c8a73e33a004924e1a1e488329a165bf73871a6153cd222b9b0220240131a2687dcb6ce091ddb241d9e533362b29e351a7e181180b09a6c395a3e301483045022100884e519da7405180a348e67a6f9065d6a28520168924cebdc291f00aa28901e402204ff72a4d9bdb0f4fe667eeb0ef658a0414fe978c71193649235251ec99e0ea1d01483045022100c54d7fc08cca52150fe97c943e8d174306f125a459f3e71b489e7d497cea63270220101d71cd023d9131e98a1630a1566ba445b8e006aed4171d09f859aedbfb010a014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000befa020000000000fd4401483045022100e1c1a88390bc698025e6e40d1005a028e02f48f4708a2d8adb6b388e8ff83c33022013afc0b581e7b70d7f515d32bb1c7da68ff84dd741dbfb35855213467fc04cd30147304402205775454f05bf5fdd98df0d27b91eeb68955477768b9f50015f41a79b6f55b67002206861d59d11023c98d3a8df4edbc30a6008f615624fb18bc7d09c76d91f3abace01473044022055e4148ace2edcef6fd14e2aa7524ba7cdc397eaa025d2decfe8dff9ef93cfd402203cbdf55e08018990bcea1255149f31661fd568f1542c3c34ad9865161382a845014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000005507030000000000fd4501483045022100db1d65c4c10c62a9a727e8702730347528a810c18734666efbb8a9fb372d553c02205e3c8dee1c43ada5aab36e5e91291129dc06bca5dbcb2f72b143e98bbf8b506a01483045022100c824496528cf45264250c975ad4926e216c51a757aafe4d374b43d20fc3f108802205f3555d6c1c819be780e0fdb0b73e90727a9ffd86620c2eae6e71dba4bbb696001473044022045e218224cb0e51b36a8fedba5309d4bd0e0f3b3c89eaca58c1100a658f5370702202aefbb0c45f6044af9e8f873909e122f317c0d70872374308b6a4506ca4918fe014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000ba10030000000000fd4501483045022100a5ad7fa4026ee61e4c1e390a9d7cad33e7a23c8e84eac552ed5bd226350f2cec0220053a68add02401a90cbe70dd3ca95e02f7f3fa9c7554c9b85eb2ef9dbd7570d3014730440220458d2a918740dd329e7d3cfdb2035251503a472138b9ab19f18361ba1c05c40e0220523a8a265bbab021a019d54934bbccf0d7070342acf3ddbfb4c4d85671b34fcb01483045022100f8a7da4ff094abe375185b727847cbcf4dfb9edc7aa2c7d067153c6e4f59a479022001e0b4d4b71c818e3790accac1fcc7ab94c7949c9942224ab8146f31fe5b1fd8014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000003d0b030000000000fd44014830450221009ff8642e68b10e870a62eef426786fd90385f27ad7aeb2ed86313ef5572cf69202206ae5e31a87ee7537329c5a791ad06666797542d0d53e5e803565c46e850fdbe10147304402206477af187868ba99a2fd16ef32c5718e0710e497cf3b63c8d0451fc91aa2973e0220756a79e9d3c7ab5478caaa194c620ef6c5cb051105cd8d5906d2234226bf17420147304402200b6bec9b2956c32bdc2d39dd77790ee8469253cbed7ae4b1006eea6786bff7ab02207fde3b16eb595c5cbe2c022907f157a64a5d8dde2ce2a354228f6bf447a7b874014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453aea4a2d10a00000000f301030000000000fd4601483045022100b927e3f030945624fb57a1c78083dd5ecbd16bee095f1427fee2dcd8fe3571b4022059fae4cbe0bea4848e4d1e398f4d2aa4b2a17614fdbad4f1448a920cf73e189001483045022100f7fff756ed604f5239b0312d195e67880242c4090d92df66c2ee925c88acad9e02201aa1785336c8bdb7c604ba39809d889fcf5ee8eb63c90f4a04fe2726c58418fa01483045022100bda45c1641278939fa116163fbefbe1977628506882f873768a3c478739727d802200498f9e44d1e820ebc8e5d77e961aaf889bb72935b9274085fed3fa15f77e2f2014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000078f7020000000000fd440147304402207d4a786eaf1b2a169916850e5452c4e220b790fb3f2ad669a75aa54aed1a469c02205bce95b79ea705713d6c78fed676d2f0a0af31e4716b3d91f4f3722ac571357a01483045022100e5aa71c4430cc8acbec03d7a666c90e675df226bfd9e64f36e72da3fa3615a1c022038b8e99f6a16de52780723ee3f2b72ecd193002222df75db1035629ecce2a03b014730440220097f37a7c2996aa2e49aa2f36dc1669912a4cf2e5dd092751ed9df53188e078c0220676faaa01133f821bb044cf2d6f50a459c25c4b19eaf0145b4430967db73b01d014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453aee854ed0a00000000dcfd020000000000fd4501483045022100e60da48ef5ba5b29ab98cbe2ef99ff0a2bc92cd85024e49e5ca3597f12bcf300022048e6b0090e5c8057477dd7eb3789ae0b8fbdf5362421eda08c76d859ad7b544b01483045022100b4cdbbd212bbda1f70d6793d9956039d7edaa8fd70bfea7fb6a04bed7319e3780220425f48e5b29e7452107e19fddaec28e5846e04a2df14b80fc143bfd71e6266df014730440220279c65bad108d0007d821385aaad55ecad775a436de2b4e32988815020764847022067a86c7c33ece430d743102f84a9c48b29b9de9da821b6666929b13fb34e96e0014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000000f8020000000000fd4501483045022100e0d21364935dc638b62cc87e9a198a47afaa348143c28c35e3c1d4424bdf4121022008bd790132b5f6192ea6187f5cb5a9ffc6435eff720357382739d1a961fd9d890147304402203aab999b99e7753f39e2ef8d450241b911f6ffc4d9e858ca6743b2a5b7ff236802206344c728587b60b56672c4ada3fa58778cf4905697d46d026e1019eba70d1e3d014830450221009525cca77d25075ea465237b5259c3227c2924507e74851db33a71d6434a90fa02207fad277b64c89ade6a42a682f049b462e8257be13ee27cd16145b52bf60847ec014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d000000004ef5020000000000fd430147304402205879477cf645049300fbcb532853fd3672c4f00ebe8866df4479feec600e4217022021e95feaf3015d9d03fe78b3a0b5b61003e4182709aa7db198a050d9ca6d54be0147304402202df5b7711a3ca99433ca9a6bc6894e95ee4f1c5c94811f771e22fc7eba8514ed02206a2763d0ccd7a641d2bbca36110a4d0972bf5ab2e4660306bf8af866117759670147304402202a22e0d36d9f55d479414abfdba71a933083f44704997d0eeafca51a3dd8d37802201a4ec8031ee9325834f31805fa8bd50e5f9fa165b965f2027500ef0ee0b8138d014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453aea4a2d10a000000004412030000000000fd43014730440220221ca9f2149986b521ded423d8bf044b33502c128d5820c7ef6ea240a5bac8cb0220567cfd17e603a28a961f2a2ee88443ae709f5fab0d3cea9aa6232f5ea2570e000147304402202e38267764d91a348d25b328c11ad05323228bb3769334527418cc83df6815b7022072d856c6d2d45b1947f99e9c8e695da78c97e956eec9d75e2ac2f7cb450ae4240147304402202baa2f128838ad113ebdd95bd16db144ccd1f29be98fe435f145e7ca954c44b40220279934a60ff066f77c05031d6624cd1c7de4e120835162a2d43021526ad84bd1014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000006c0a030000000000fd4601483045022100c858877b7ebab9df2f7b0681239c92e6c03e95d963e42a075fad8c452e045b3a02202e04bbef330e7fbec49a7ba9859a6cadfd61830ab858362a2a695ad4db84ec8c014830450221009139aef771bb21f6ccd0b357d5e62f0991f98e67039b4ef146ca74c7a95883a00220268ea8e98573e4199ddaa75d2bb08f6b694af8bd383614f59e8699eacd7850be014830450221009694018de0f453d6732941e22309064ef42127d412ad135808acd9031e058fbd02202b4d893c63a553fe2401c983d4ab5a2f1ae9d411c195470be7d895ea4284b86f014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000ed10030000000000fd450147304402204a295e4d135f4f6421bea46bdd97d452b23b262408d77fe38c1f090f5f88651f02206f79e3a47f198091c92cf5733f9ab0acb3347e21f1d66ebc53e01db3dbd6845701483045022100a606efb31d0eb4cc4112721878cc3bf2fd0fa2b2cd3337a98cd3304e0cd2e38c02204b6117547daae39c06d7477c8f5e9e0e0d767007326df7b027cf80ec36282af1014830450221009d3a3360ead284b47ccc8a13eb1ad8de55563dbc5ff0a98744fde8947ff5484202203c350ab88bd4650aaa762bb1379022abedfd9316e9771e3c516190d07fce0349014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000be09030000000000fd4501483045022100bc76c0450c83c1a704cebf734d36f64e1ecdc76fdc1cd6e5f7986caab2d1dea902206bd1907f48bde52c8761bea4b7cbb848b2331ea58e6fbe683ecf2d60990001400147304402203287582617de76c70e8f73fba20100471cd40b4d6cff4b883a9ed88922c96dde02206e36f90628e7822206d93fb668e759ed62d6b73d3ecde935187d239c84d296a401483045022100957d7302576e215c6e97eeab33854a139f88839377eaf10edd1f80d7567ed5e102204452ec2dd7f273d586d7ca83f80c554c73531ec689bd961b524c2d0f2b16049e014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000fa10030000000000fd4501483045022100abeb8758b4ccf148e91c24c43b46c34330210bfa56eda2afa91c64f496215b21022046c5ac2cdb04ff964369cc6137b8c6b1133422640769d9f7bcd66cc45bea71b501483045022100901da0b92045f0c0195447fd2ef83b9cd6944e75e685e38a6ebafb16a03087a0022031f2261fa0f6486d000daa590875596ddd40fe99e943ee9d6bb8bd9129b0f90801473044022021e942e7c2e562631492f4c7bdab659af69efec054e5cf8432b9cca6e2b35579022051ce1c6da198abca7414783ef73e9119d6a345a0f0f989c53d74fb506c5c8fc8014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000850a030000000000fd44014730440220132a4fcc7f1a8f6f3fe4cd9ccb32fe3433a4e450f8594424e2389368f6a7203b0220075d01f8b9ed12b416d1d04cb9e95ceccfeeb420fb49720b4a3f0d1404be2f390147304402203707b8551104cac7c862aab1a2f730208f8ecee7180ac474b409be4c6af73fe0022023e293d0368a43397a93928d61586bc41c6c7bb1793b2bd2639ba8520014783a01483045022100d4504304bfa64c675045ffedf26e9b85a3ab839df273d93e2b1b9ff12338c7c50220080f395e7663fb9539181eee186a6960d69319333cbeb4fd5d596226c7cafa34014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000066f7020000000000fd44014730440220048efe6d5dd87a48a1deba890723e0e568ba8fe0112d29537237e0a1ea1c38070220197fda66031d9df627b79538eb4de824b9b49d94fab8aed185674ea4beac7bb901473044022006bc3ef529905db1a6729c0c8755267f63b3de05a0e1df68f9a2a983596e780e0220017582ffba0935ae9c8739bd6be3d21f9aec531ebe36e12073a5ee985df0110a01483045022100ef338afebdcddc9f46ac98ae9d9f936e44241cc46584096980690174b223da3b022062e0cbe00bc6ee9588ddf92e3c9c74f55632743d3d43dba4e43747fb380a4727014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000003901030000000000fd4601483045022100b21b940e774245ff2cbd5e797973a36ae61bd59c5a24081e73894f5823150d4202207c90190110b9607b151db47b81e7008b3fbf18ab952f83cae3189e4324a21709014830450221008949ea570a61d78294fbe8c2453a211e152b0b2190078b3cb085ef58fa2d47de02206dcede7043213254f01ed0e4b73d1f5d4550ac5fdcb815972b788edd1dc626b901483045022100f8b59f01836c28cbde52114bc8bebf8ece08f45ffe1660266e0dcdc187687bed02200b59ef8ca9b9a4d8d9c937014ac9bf66b7638101c89f10549cb28ee2bd7ce63f014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000004313030000000000fd440147304402205cfc98a5c55837d45207a22a7e20b646d0805a4d35e4bd10b2bbf3fff6ec0f1502207df92aa9d79c5eca866ddc95c446c774947a824e0901361dd42073f277212b66014830450221008845063e4b5c6387f1333d76010493b23d79d47f19b227b659daf8c12369e87a02203b7002cdd2ebf3974be41a5c0dd6ed267cad19b2fdd0526260e52a738bba2de4014730440220575a271b955e464d335bb32cece0813fc730be1c98f3b41d70739e9457c8b6d602206dba0e5fb0f0b3465736cfed2bab04e8f7defbb9f11c35cf1601b95fdaaa8829014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000a8f6020000000000fd45014830450221009cb6793416713945a3b6b08e10139d5c58f3ad21ba52f45913bbeb33d8ce1f5d02202e550c9d430adfaa81b4c9f6f27c2de234dfdf3936c5ad8a3beead34a8a62fde01483045022100807dfe6e8df9e514b6850f94c04efae0e927466c88bae4985d1f5a8014a5504302205265e75bb3d7b2ecbed322b35e998d904a2e4f2a44d5906807ed06566dbf14320147304402204a629c423c8ddb65ebfd05dccc9510aa3e8119b02d73e5997d559b7f9ad6a87d022029190b7200278ad005bf2f1a7aed9c864f9733ac3ec5bd7102ab18de6f44cd17014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000a6f5020000000000fd450148304502210094ef0e131bead508301ecf03a7ffa18ec9263bc3666450d2bddcfa752107310002207b8cac555f7a132aa98e41d2feff833fed68752601d0f84031eb870307630a480147304402203dffac6f1e5b22325cf2ff59a98665a827852a36225bb7db58c013022ce037cf0220502c495cfae8edbd53ca9e8b6b9bb4efbd1278966fd9156297959696d445c06f01483045022100f9d9f9b2058abc9aeb02bcebf6f5b22faaa6356ca640550b3c20744cbdee77fb022051c28736be4150081d5aef3e2253a5ce9d3ab9c4578beb398561029be530ebf3014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000003307030000000000fd44014730440220521bdce46b83ae123bcc4f0a008d2bd5cf76e76e0f98f21e029cdb2d0a4f868d02201d3abecb1216d4b41e6c6b23ad87feb8f7ba7735508a4f33d701289f736f366d0147304402203d15fd7c4c578a8acc93a1ec867199efec7f3cd532adf75e9a689af0a2b9399d0220598e77fbdb195843a2699c3464bbb5ccc55e608ec06fb2723c449469766d212c01483045022100e82cc5d9dde9a9086518ec2c18fa867ebb46112e37d65d9f34d88ac741996c95022053e900ac59bb0a391677ea209611b858a89540e59d66056852f8bf23fe5670d6014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d000000007eff020000000000fd4401483045022100d71d8a50ea69c55f7fd08defa76bf1b4da053e3575544b0471c461bf5aef137902207fd9f81b4a551bb7afa8dd1b69a0f6b1f2c4e24aa93c992fa82f82471aa8f72701473044022047ab50ee3683939bfef7410135d6b8de00f9405ca5f2faf22979df74bd4ce974022077f23743ab8ae449862ffd48caf40cbac62fdad49e005b7212852d085e82ee020147304402202e98296f1568f3b1fae805d2d6bc6fccd59bf4c5d6f1565b644d142297d7c40902207abe8a1988115e0ab88180cf90821005e645d97ce360d372f2f329fe2a284f76014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000008604030000000000fd4601483045022100d0befa3dba35057e2ef9b8b6d873dbe983166816ceb84eb875b346ce720a6b33022018d3acee74afd13496e6f1c06e7802d7813ad42a890be8a83280dc06ea23941c01483045022100822d27a60f0e4a8c37acfaadbb0be6d49c0981613610fa63c1f162d24e79e4500220316448804078b2df0d126fb9ec97dc1584ca84567332aa3dc2acab6f573856b0014830450221008fd2b5a6421611baaa3deb3739720dfec37f5cf95f93aff572dd92dca8925fa202205d2b99181fc69d7a46c7c58367a3927b1f6fdcf136142cf85f250837fe643454014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000180c030000000000fd44014830450221009c3ccf4b91b6e425a70216bafbcd277682da8bdbdff336b6f58cb97dfc3204cb022058f650ea3ad9d26b2c66f17cacdd10bee5446caa1ee34145061c227a56620225014730440220092afde83e1995e9964b85224dfc4a3782df00a0f982eb4ad3b38d083428149b02207669684a16f7af5563fe061874c80d9e35e745abbaf7396c7f71267f50fe52010147304402202858c626b1245cdfceefa6440e0c0ca838c10d6114098fca6df76559577de29302203fac70696457e9bfec335fa3a892ec3a2161a34c5bdec4a375d63f76a8d51fbe014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000066f4020000000000fd440147304402202397ebef3e1c8008050009f306560d15c5395fa07fae571fb55910749c3fb321022044acc8eab9dc7e1a9b4ab2cb167d0f944398a0b5e2c4d6e007f6f64779ab011301483045022100f4da2295f9558216c77cd9a0c56e0afc84e3ff1e6ec6b286ea5d7ab5a9f0b4b9022047d7353598ee12ea23234fa4fcdc05d7f9930f276cf4ecee76d128fe148596700147304402205216b5502fa0f62c6d5c9844f7b29ada8cda0fdce7d4dbacf8466adffb0eb6680220735d293adb02fb781f1cc02f9d1ef5a64c9436a95b4fc111dc0d69525ebadb03014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000004e09030000000000fd4501483045022100972f0d3af3ad98263fb8f500d6dc9bc75a589148b712ac0c7f95c78feb5a516102207316e12601bfb099b54075e67563a09df9e023094411ad19cbb5850a3778f067014830450221008ef3b3fc80b147b0ec47663d8756ee4d59e6ebbfd53a6d8629d1f30e9d17b70c02206583b2dd5b4f25d219e05da7fc34203ef667e0d49530e6211827f9f3041d3092014730440220088d12eb6a4424bb67b1aa85b8854cec0a959a62ee26e825a64bdc69c5e1219602206912f9adc20c5fe9f46ec852a6f433f276d1480f6a495a7984cf676a925a4f02014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000d80b030000000000fd4401473044022061236f509bf2232223af7219d64a2064dc4c12de828d46a1313b8f97b8a1b73b022043e93a6c2884668dc499ef67e370a6d736318ad39708183d2a702945a53e7cb2014830450221008e6deec7ff876824ee0f5a61f874eb5c303edd2717f5ca866afac208d591cb1502202fef21def83459e46dcb60387fa6ecac65adaf2ebec8d1c4bad92d1b0a928dda014730440220298c9412d02c1c39acfcb9dffa66cb5745904dae9d5f619b29d909cb9d6538ea02201dd6ca43c5fbe2038b6c347ce4e6a35e6d3e6f9703647661f0aa941cfd6136bc014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000b70c030000000000fd4501483045022100ed44d291e5e7c67d7817a0c1efead142048af4b2925df521f5ee011a6bbb797c0220268bc28e0b7f3cefd25b765801d25bc6de760361d5efc4ff4cc37721f191770c0147304402203425355cf89de0872aac696e9a54e1eb47d71b67a878b4291e505f5358b4c8f102205b7bf0aecb2c022fb93d72512fe820b1f9c0f396a80a75dbc72517d41006e12001483045022100b73867e6de73cf880d7eaa7a70f74685284ea52f3fae71eca4e8905d88367248022033f60a882ec544e5607201602229ddc7508c39ec25de2ee9e18e0bffc8f1130f014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000dcfe020000000000fd4501483045022100e565de2989fb12d59dceb8717fa7efe1d430031701a178e93a860b6e7c593b5302207a2c8ee53cc8deceb79e959fdbe72f7fc30e97e51652ee6043687a9f68e24eee01473044022035da650da8f643511b343b3314aab45635f5c7a70d09a34eccf208ee8c0285a602206d3125eeb0ba309c14dbac2a67fc807f8e805d210e8b4d36966ca67e80e8c5a001483045022100d2336814da44438d4e6792dec2ed9017ffe295dff7877a326eda47e76bfa587302200e5ddfdf57537fb32b0ff333744c4a426488b8199923de93691e138e7a00928a014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000ca0e030000000000fd440148304502210085f57e21fb1cd388db4e5c62353dc7f520eab422f3d7ef8624552d1385199ce502206565aa1221fc512ae6236bafc08cb8157d774e1d499ebbbe712c10032f5aaf1601473044022047a029d05cfc8da77b76625abb93ee65fa4ffd23672a7d0348e45c145cba13050220740e4bb703957e56da185bfcaece5e4d3cc602271201dadb2d5afb5475c96283014730440220573c5fd3b203915a057765b361f08082e2d891e57bcd010ecaf6e8d307358b54022018848d5a770f33d667e792853f454359d1bf1c1c846dd00ee3cb3296602dd5b8014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d000000000bf8020000000000fd450147304402203b89df3d311981d4918681f0ee17a629ea632592342085cf1c1794f75626b7d00220141f2bb0d18b5f07d5549d279437c82319ba23b5e23d8b37ee217150331fe05f01483045022100a5b0d516a0457646836b850c195c8389b2747abbf747a557e96059190ad1e38302202ab7e8d5001290350544299dc3556e9abb9da2e8f91dd2ce3b00fa0c718cdec601483045022100f7f5b03dd0f3d6a7edf18847427ac60fb49cb626b074cae1ea95f233960a0729022000aff8e788a856b194effca3a08594ce28d97138143f0b205556886b4a098fec014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000008705030000000000fd4501483045022100c9728ad82c64ab5d548752adf590654a58eb4bfaba85f1f504b57708abc3eb5902204c36886103e1aa4da4c96bb52182710806b25b9b18310d4b9eb574027eddb3100147304402205017577d2e107371b7c8bd17bc15e128e4e1186cef93ed260d6f54947e94382602200ef247802da72844a33163e6d12136027538c6855ff5761aa5ffc65fda7c810a01483045022100b56e938da3ea2ae0248afa7f6be5e8f7ddb81cd3c82e16a41919864482c28ca102202eeb3e20e95448e46c340736d980fc1b75d860264edb814f01e0e430521f51d4014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000004203030000000000fd4501473044022032a1358398cad98c16a8829ffc75fc7b44f77b93d5627dc717b66a44b59dff7102207b0472f44654abdfe1a24eda879f28838bd5184dfba238fb1b3d4ed0adba15a7014830450221008cbaf2f1616afd756d773443a52e55acafdf5202c7cecc5d0775d681de0e903902201218f989b0300a0d75672676a20c3136ef671f5a4c52ea34213eed22b3ee382401483045022100bb7ccc2f7822a511aac2104ef57e34a04c37f3e09bcff1bc779df446a0840d020220789dece4f3172564a56b6001dfddfc1b79e41ab6d156a40f020bb5dde18877a6014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d0000000054fc020000000000fd4401473044022021c6612e0d9d3a57628d54fdfb7ee9756d41ad3247c8c460c499164b6ced3fb302206cb072bf1b753b8ff407b767160acf074f6f34286f4caf3ab5061fb4c980fd270147304402203b4f06ae4d5314e5dd95341c9668b16bc4a71efa1ea4bda2403d2be25e9baf8e02200f09352867d755d614bdb6af4cf22211c93c420fec4fa6fcdacae32b11d1036a01483045022100efd849b2c87782427ce6241c9cb87c60eb0202c12d1ce5f2306b25e857aa8f8d02202eac2b493b0be06093bd4c35d111fb5bdcf24d5795449ebdcbbf234237ecb837014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae23aaa80d00000000c2f3020000000000fd450147304402202649f1955b9a482cab0eef5bde264adf912f5c9351c5d9c10ebd74a7b41dda4602205675c9cfb36ad8ed29e7d431bb7b362e001e999b52d10939636147d19d8de00a01483045022100cbe00b8a033296b9b9e269388a63fb96c4a8f75085c941fa32b037a5991932cb0220020788969972594ccac489afad39bcad1534628f6a649ad5b34f14e5e9421d8401483045022100b7160b1edb5919751ecf6d18c98cceeac9f5941c1854af8560432b34b77dd74b02207105457d94cc4839df8af02f9abc34302eca1b061666e6516d859ec73d89a748014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000009209030000000000fd4401483045022100a54e526956343cfc84ce3e428c138d40381003386375d4ebf9d246101ff678e402201c80e61034511ae79e486380e3a652af58ad5b489aa15f29ec56fb84864e768f0147304402203bdeb20123223d56f13e68817d4a29c87e690540019813b2cdcb4fecbab7044b0220396a1d6971b69b4ef3e63e8727f093b3d7bface1d677a798b4a2d5ece218e8fb0147304402203ff11e576e45e7254fa5959c93956a97c09bb123e95da708001f2ede5f9ba8c602200f9f36ba15933a54a4758d97b7842776bd9706c6a8fab6a58649b9040824634f014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000670a030000000000fd4301473044022029bb920d11e2bf9201d18e7730f3bc5f6553e62bc8314336ae9c8a5859914c1502203bdacff928d4d666507dd2583b9442959c88726a817c67348817cd65e6c3606601473044022077a8ad215d7005f651f3b73a4f5a2e33e98dd2168268e04eb41af2ed6435ce2d02200af0d91cd2880f4158d175e28bce4ddc3fe50ad78b87f969c3662ae242930d980147304402205479fac1941e63c1de3cb25c4760b13f6b62ca59cf7942fb3170fd2d195678f9022040e827f224ea5551a4dad03daaf0ad63ea470b4fceffa8e4bd495e7560f32289014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000fc11030000000000fd440147304402205c09825c601853704b1b0231fbee7591c79b6cbaf30e2e955a0b6a72793b370502203fa13d433613f7e6e63419d5db0ade84cb18d699da64a2138fc086afb6066e8301483045022100eafd46546faf8c4e1152145d0a5c30ef070d5e455b6b3b685e1cb8f47cc2a0030220452568d3b52d7a6f7b1f30f321cb4481aaf8af3d7223d5e3de2d6612fa2c41bc01473044022012fc1168c457070445b883dfbbad6996a9dca5eb006b3755daeee5908918a6bc022063b589fae666c446199742cd78eb1843385660f2a962492476c6cacf3997c9eb014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000a60f030000000000fd4501483045022100872b40bd06e8bcf66cbc8ce478d9ccb62972670682146d19b06e63b919a86da0022071cf9163b60e61078f4a5be7a46cee4978585f7eb27387c0b27ae696c3d79f4701483045022100848eb32ab0284db06df29338a34ec5d63660d8ff8838501acc00694b203a346b02203f67e1f2a8d05894f14e965748ef9391675c263afc356519f3516df5adbc87ff0147304402201a20d9f8b3e236b0807d84a7d7e041d77ee26f002d2b77c695fecca316c01b5e022035edbd8bbd6917b892166fcf4b8202b93609e04440ef7b6d850c12409cb3c1e5014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d000000008409030000000000fd4401473044022009153c7b1bfdfe8ac504213c3ba3321ede43e2dc89261d803601ed6e87cace55022051969259b11cacb80d06ca68563ebdbf8a6e85fa88e9c14afc5797dc82f0fdca01483045022100951209e2d941dd5ba148ef2a0d4a0eaf09c9e0c22051719cb5f3a762517964ab02204acdcfddb8b8aa6a1f61b5126dfb607a472b22d5f731e1318f2405732fc54e750147304402200cd5be575d4b681975316726c211db5fbbc3037d29acdeb06bb7c72119fce5db0220514ea54faba32014d3422ca09c2ebcd332888370249af76809a9f5e4c380dfe6014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000e600030000000000fd45014830450221008d99ed1beda44a35e04ed4b6a20a9335c29d6fa974011c06f7a4467420b7ea39022041faf1da827bf32bc43e56a3de62512491209b1175c8779afe3e07731db7620001483045022100f38d3d3adec74d05204c0c9f0b79521abdc57f23d9599a0423d0227294a0ae3e02204ffe4c18ccf208ce95ade49bb78cfdd86aded1071e1fcede37e19252ee0b7882014730440220477a3fa0d716f8ca73d0f5cd55508231dc05d90d14ee670527f30c7f68406e4302201ee6504b744a53375afb2e84fab902ff8d299d6d897bed9db8dcbd85fd890bad014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae4e0b860d00000000ed13030000000000fd4301473044022075d9d2d1d73ff65f1c3cb5fc705aa3f117b866901a527607c81807408fc924180220062031fca37eed36da2f119ad7f5018f8fdd6ca01f42c4bfebbe8550c17e8d690147304402202897a5b6ecb4426de79bc5be348c4b359c7a9adfec0c152345538bfd5279a3e8022053992fd5f382089e1f41e0c47a1ecc11cdd604dfc46210e6053b7f690e7ec0bb01473044022031a31eeaac96cce93cd3a5fe3d75e7faf99f17a5bba04a6a8387057815663ced0220266867c47ad462ab2e5a794b5db1325e0dd75588aa45e10dfb9c219918eb7af3014c69532102bc2a9206d10e5d5173583cbafebc78998745abeca13ed33151c93afbd850ca8e2103c995ce342de266d561d6ab4b06c7a14adb0f0b30002997f076f71c8f8ac93c98210330d6c9371b561d2b961a5987d336c0186a9c5dacd6ed4551420b5977e46a29b453ae \ No newline at end of file diff --git a/txscript/data/taproot-ref/003af31dd0b5a50c2723531e8ca22ae8ca6e7089 b/txscript/data/taproot-ref/003af31dd0b5a50c2723531e8ca22ae8ca6e7089 new file mode 100644 index 0000000000..eaf08ab3d2 --- /dev/null +++ b/txscript/data/taproot-ref/003af31dd0b5a50c2723531e8ca22ae8ca6e7089 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff2000000001c75619cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4900000000cff75994dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b07010000003c029216047236f3000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8784d7ee4b", "prevouts": ["ac7783000000000017a91408247b8d3db4e641d0be1ff23f14280256870a5187", "06404d000000000017a914b60a534933f6e50f3846e396b9868efc9e681f4187", "4408250000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["b51b9ccaaea9fd42c652f402c720f9204800e00b2f8ae4766b7fcfa164231fc81d8a8900ca86e7a871b94e86ceded7cff43db52b7ae760520079a117b3a2a562", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/005e61a50014d33f7309097490534db3c0dc65fe b/txscript/data/taproot-ref/005e61a50014d33f7309097490534db3c0dc65fe new file mode 100644 index 0000000000..8fcc5b4a8f --- /dev/null +++ b/txscript/data/taproot-ref/005e61a50014d33f7309097490534db3c0dc65fe @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708900000000676b3469dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2101000000e54ad34c04af0b30000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6f000000", "prevouts": ["d015120000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "65ee200000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d14c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4595f1c75585029ef5fafe40c7b455be7b6317879deb123e683907f6588babc52172c8da9bdd43b70cbab8912ef1aa7926e5ad7e47a4f7b71ac936200cc947dd0f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93657385cfb449c384dd2171856b934522ab5b17115bbddd9e3700a77caba093451595f1c75585029ef5fafe40c7b455be7b6317879deb123e683907f6588babc52172c8da9bdd43b70cbab8912ef1aa7926e5ad7e47a4f7b71ac936200cc947dd0f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}}, diff --git a/txscript/data/taproot-ref/007f313a1a53428b7fc9eaf54c5d51be20e10567 b/txscript/data/taproot-ref/007f313a1a53428b7fc9eaf54c5d51be20e10567 new file mode 100644 index 0000000000..450f5ca486 --- /dev/null +++ b/txscript/data/taproot-ref/007f313a1a53428b7fc9eaf54c5d51be20e10567 @@ -0,0 +1 @@ +{"tx": "52c12c3202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7d0100000055114ebadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd000000000a78541e802e64d970000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898705010000", "prevouts": ["7bdf770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bd21210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_66", "final": true, "success": {"scriptSig": "", "witness": ["2873c80a655850b5bd310a9138328c6fb8f178aecd4dcc016b1823c70f5f02815d8459ecfb1535ba7bf4d426415fa68706072eddc5d75fef76e4fda1f5471aa502", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0d0c8b2aca5e7e7a075e04f6084617cef72dd5f6b2783aba1f9c36cfda42550581d4ebde5a11d7298919cb5c9142b366abb51f60f87ea0e7bbec8cacb393de1466", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/00850c1cc564bd0dcbb02c3398f9fc8e0219a317 b/txscript/data/taproot-ref/00850c1cc564bd0dcbb02c3398f9fc8e0219a317 new file mode 100644 index 0000000000..4bd862308b --- /dev/null +++ b/txscript/data/taproot-ref/00850c1cc564bd0dcbb02c3398f9fc8e0219a317 @@ -0,0 +1 @@ +{"tx": "1bbfd49402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd3010000009d9e899b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a701000000e3abf6f202e8b091000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487859f2c25", "prevouts": ["b31c5d00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970", "5ffc3600000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "417d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936571460ba76479f128232c1e7f3cb97430b20436d33add020c19a42e032587e00ebfb5abead622ee588f8a14df4b864e849bfb1ffa426a7f0fc441a7ea7f9f3e8819e00a9246c8c145cff8a91ff4546d478c6c8e3d7b4e3f7e61102a4388494af"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d0254c28ec270bdf41d4337856af66ad3dc8a43a5d3e633735369ec57cf2fec9da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e53f01d9cbc4ce44e53bf46e342c1ac713c14ac9ff1cc3e88a31c5570fba253bd819e00a9246c8c145cff8a91ff4546d478c6c8e3d7b4e3f7e61102a4388494af"]}}, diff --git a/txscript/data/taproot-ref/0089a0f18b0647cf2bfae0c93e9ae39b345d1611 b/txscript/data/taproot-ref/0089a0f18b0647cf2bfae0c93e9ae39b345d1611 new file mode 100644 index 0000000000..15ad8f6e7c --- /dev/null +++ b/txscript/data/taproot-ref/0089a0f18b0647cf2bfae0c93e9ae39b345d1611 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702601000000580e63a5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5101000000d93ed2df03842435000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac1f000000", "prevouts": ["d487110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "eaea250000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_13", "final": true, "success": {"scriptSig": "", "witness": ["a563b69b91fd5fbe809f3b3a2b7353746f928a30dbfbc8f9ef9328112b7381a6d9b12f9857e1231a5c4b1f16b62d8893c252e110cfb4d46e597de5a8da01753301", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["80ad3c0a699a9ba01ad512740ee0bd865d10f471c737d33e38b443e3e4c72bc9a8df15660ab01897c052d8cf1ce2b7d78c5084b05ac163da8e251bfcd7e5990e13", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/00b6fe5a14ee4fb3bb65e0aa28e70cb57f0cd0b0 b/txscript/data/taproot-ref/00b6fe5a14ee4fb3bb65e0aa28e70cb57f0cd0b0 new file mode 100644 index 0000000000..38da643ee8 --- /dev/null +++ b/txscript/data/taproot-ref/00b6fe5a14ee4fb3bb65e0aa28e70cb57f0cd0b0 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4e01000000192acd32dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbd000000000851923c0387ee7a00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a632000000", "prevouts": ["a0f6280000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "d6ad540000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "4a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364758c64267c751cdb3a7d0ad4e97f82b7320c0de5dc96a77478bcc9a1aac62dfb1956d2c402f72d86d9128969f4c9ed8db93dfb826b4075483e7d557b0e234b512efaba1d06903f148d2465ca4e4c6639d336576fa6993c6ca48823372648a44"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e696e0a39b8006d5c38246735bc900624bc412e796f8d634640137370e1472505749e2a390543356cdb3691ba8d54627dfb45f7f1132e94c1a4e909f84f1614c2"]}}, diff --git a/txscript/data/taproot-ref/00cd1f1ac746e81ae27bfe1e9a383975d0bba949 b/txscript/data/taproot-ref/00cd1f1ac746e81ae27bfe1e9a383975d0bba949 new file mode 100644 index 0000000000..11e29497db --- /dev/null +++ b/txscript/data/taproot-ref/00cd1f1ac746e81ae27bfe1e9a383975d0bba949 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4eb01000000db6b973760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706401000000f98306f1010fe10c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a648000000", "prevouts": ["3f4243000000000017a91448274ba0d73ec00ce63e7922c9d87a48fd0c670f87", "04e712000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2251202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["151ed1a80e83ef2261d0a7c9cf17ed67c9b014c7f910704afdb6093f8b026fb75e65866fd39c79345c43e8ad7b7e53a111c9dd225afc4285c89b88021c930daf"]}}, diff --git a/txscript/data/taproot-ref/00d07d91c86c11dbbd14f4edf55c1f496ffaf010 b/txscript/data/taproot-ref/00d07d91c86c11dbbd14f4edf55c1f496ffaf010 new file mode 100644 index 0000000000..0ff6096c63 --- /dev/null +++ b/txscript/data/taproot-ref/00d07d91c86c11dbbd14f4edf55c1f496ffaf010 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1602000000be453d33dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4c000000008b83fd6a01858b58000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748705000000", "prevouts": ["e5325d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0268220000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_44", "final": true, "success": {"scriptSig": "", "witness": ["5bfb6605b25e0f6ea070cfddf827a224bc97bcd06c1acfc9328820914bba2d40ff72c23c0a0ac77abd8935b0bdcfc2e6255fad23b88836e5bff973e3748ddfb901", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0b0f6c4a9358db9fd237d6fa5af7f7285f4a369c3840533a090b1f5a8b1af295dc7ac91983312a9135f919ca281fd49d2623c2d21edec613e3f28e455bd072f644", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/00dc037c98e799a31facfab68fce3187ad7a0f68 b/txscript/data/taproot-ref/00dc037c98e799a31facfab68fce3187ad7a0f68 new file mode 100644 index 0000000000..aec63fb04c --- /dev/null +++ b/txscript/data/taproot-ref/00dc037c98e799a31facfab68fce3187ad7a0f68 @@ -0,0 +1 @@ +{"tx": "e4ec8ca402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0801000000348e6ddadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b190100000032c930c80498cd6f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8700000000", "prevouts": ["3514520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "71481f00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_9a", "final": true, "success": {"scriptSig": "", "witness": ["475a10bbf8ea5fc324ca213076229310193f2c0dd1dccf1ddd0de8d7ddbbc4c079edce55ab860161adf2a15e2a9c25e0a9d6f720ca0a39fcb8cdb66791f51fbd83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0833d13eb5c92b0f6cce1e5f769d946aa53bcbca9c443ee94dc4c3499027323b06d0d7dd0f6c2b2fbb3a37c0e034e083ae7cdf86975eb2eba1078a7ade4558849a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/00e2723c3cce5d6fa2b7db987e5fbc1d75297650 b/txscript/data/taproot-ref/00e2723c3cce5d6fa2b7db987e5fbc1d75297650 new file mode 100644 index 0000000000..82055ad5cf --- /dev/null +++ b/txscript/data/taproot-ref/00e2723c3cce5d6fa2b7db987e5fbc1d75297650 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cde010000000845aabfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9300000000e34899db029dd8b10000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87a5030000", "prevouts": ["4f865d000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "302c5600000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "0f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f550d8843d52ee2b366c31e2565bf158a1473c8f129a11bc7b0dcff887ae948c29bd03bbcbebf503f24139d653052e63a9a9f3faf73bed4a74eee576514948d11491142a38ebb10a24e36aadbe0cf227dedfd0966bcf56b2aea8b33dc3fd67f"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a041bf56b75b4d6888b8caace1d183294aa04f1728740594947390d0dd0c8936f8d113c18817a044fae8525416b35b4656d6d7185568187de608cafb5211e2f68491001e36edf91058819766439c3f31bd198abbe3d2204f458ac7743e1d61ccf16a5e3db9e2b81c974405e52c4661efcc91a529144e47e78be5814d4a09901"]}}, diff --git a/txscript/data/taproot-ref/00eb1a2b8aed4a406ee59371fa0a50e6679857c1 b/txscript/data/taproot-ref/00eb1a2b8aed4a406ee59371fa0a50e6679857c1 new file mode 100644 index 0000000000..234afd5dc5 --- /dev/null +++ b/txscript/data/taproot-ref/00eb1a2b8aed4a406ee59371fa0a50e6679857c1 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a101000000803b90c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b990100000075a93d6802b1c933000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc772010000", "prevouts": ["139c1100000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "5f092400000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f54c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bdcbe75f074483e48d717af2cfa8ab1bbef1c35fc84f016c108dd10256d535ae10b3b87e8b9d8544644738d4851bae032b2bf37d3a4aa6541b936ff18c715610c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}, "failure": {"scriptSig": "", "witness": ["4c52f5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e13fb7770917eb0311339f7797b42ae31badf39be5fac652227efb4e28a80f4e35f46b3ac3e0eb552c07a1c6336d6a3e2704f93e82a6d5b4a7907113e7cf17bb16c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}}, diff --git a/txscript/data/taproot-ref/0108a92da87f766ee005ac0bb220f78b50d04101 b/txscript/data/taproot-ref/0108a92da87f766ee005ac0bb220f78b50d04101 new file mode 100644 index 0000000000..e64a0e24e8 --- /dev/null +++ b/txscript/data/taproot-ref/0108a92da87f766ee005ac0bb220f78b50d04101 @@ -0,0 +1 @@ +{"tx": "bbfdf13103dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba801000000044ebdc3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba3010000006ee87db8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0700000000b29ebcbf04633b6a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc791357b23", "prevouts": ["55991f0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "bf142400000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335", "5a22280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "e27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ddc5ef0753cfbbae9ae95a5d7a8057a0f244ed9534f11134802dcf3d6e001e11de3dcad145b88b360fb9f51ed5363f34910a171e61f360dd6bdf047d4a1b93cb212021a26ea5e00fb993aa3d0fc1bd1e431f365db69035b8e4625845fc9b697c"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e0bc8e394a89b61e744ca0843579507fbd14c939f32cc2eb6ce7075b90210fcdaec7827d9bc9e4e8e39cc141cf7690ea6843d6b50eda1fc8d5571fb149b2aabab"]}}, diff --git a/txscript/data/taproot-ref/010cc78772e75503cf488b6267f5891e1495c962 b/txscript/data/taproot-ref/010cc78772e75503cf488b6267f5891e1495c962 new file mode 100644 index 0000000000..362af976ba --- /dev/null +++ b/txscript/data/taproot-ref/010cc78772e75503cf488b6267f5891e1495c962 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d01000000a146999d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40b00000000f9d200c960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706c00000000e4a24ae5038de26200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79693145c58", "prevouts": ["a3d2230000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30", "ba3a3200000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "f60b0f00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "9f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e7391eb2542a03443f1c351bcd0fdf78b6f5cd40e118bcfcda3d325918034371ee453f7f7ccbda5a0ba96115b963083e4b2e9e93a3abf82e4dae88dd7e6a6b566f3617d560800e971f99646d89bd2028caf0c6d02b6f505a11fcad3ec349c801"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d16427f90468029d5a6f19bd59ef88b2d31e42e78c5014d25692e36886ec4dd7da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e93df6a2e62376e6a3587300ef2d1a395dd90428413a52508272625b5a1a189adb591a16be56540de55d9fbfa115de937b3aca1e4dd0f5a93f17ebd2ebda95183"]}}, diff --git a/txscript/data/taproot-ref/014aca010656e76077fe517e999ea589e88307d7 b/txscript/data/taproot-ref/014aca010656e76077fe517e999ea589e88307d7 new file mode 100644 index 0000000000..93180f93c1 --- /dev/null +++ b/txscript/data/taproot-ref/014aca010656e76077fe517e999ea589e88307d7 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c483010000004b90d992bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf690100000046acbee704b8599500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487b8040000", "prevouts": ["a0413100000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "cd9e650000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e16b70d0ea7480f8ba050345bd8e4e7681bbd8db77ef27050d0a3831748599db67afcaf82673e7b509fa61dcb6f9390da3a7ce1e18401449d1277235bd9d9c04d9a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367f568ee3b696c54dce29559b372086a9ebba75be3e39bc103cd26c12b6b516bb29caa746058fefa69912501c9b6f792a531f2cb30638f1f343d3625f0a93b066f288028cdab461d62f9273620b97315e6e9af9458f777a616c1bade2d3f6a89e"]}}, diff --git a/txscript/data/taproot-ref/01686c55b9d9f3d0c2d9dc8c0911de32df21a864 b/txscript/data/taproot-ref/01686c55b9d9f3d0c2d9dc8c0911de32df21a864 new file mode 100644 index 0000000000..73f11b2c0f --- /dev/null +++ b/txscript/data/taproot-ref/01686c55b9d9f3d0c2d9dc8c0911de32df21a864 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b990000000015e6e6d3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3c010000008991028ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6901000000414a92e6031b996c00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acd3000000", "prevouts": ["7bf1270000000000225f202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "1007280000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f", "867e1e0000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["4339b5a2bb43edb5ec6015e78422673e93a5f940eb73c4bbc50742946ab32e5eed427b14f6d879458116ab1efc635aea8826b9cc83bdff544ff6844fcdf7a496"]}}, diff --git a/txscript/data/taproot-ref/016e25aa492396c1f2937c07dac87f3bce812041 b/txscript/data/taproot-ref/016e25aa492396c1f2937c07dac87f3bce812041 new file mode 100644 index 0000000000..6b0171f499 --- /dev/null +++ b/txscript/data/taproot-ref/016e25aa492396c1f2937c07dac87f3bce812041 @@ -0,0 +1 @@ +{"tx": "238858b702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bca00000000c2cbecccdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce60000000068a68ee4039e927a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acdf40ad44", "prevouts": ["b94a230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "97ef580000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_98", "final": true, "success": {"scriptSig": "", "witness": ["9cf987916c9fc945259df0324a762cd2e10f8cd101b6a6731ab1a8454c54928099a075b1fe092c6ccf2d557f89cfc68ab6f2edf800e60adf72513c4d0fcea5b182", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ca2685331a6191a0114eeabe6ebde5470bce9115c812319aff0b13492676a85fbdda8915dfe9c0f7fd1042634f5acab35eae1255f45d79581ac08d887d49f1d198", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/017f425514c38506670a6136985cf2f693c1851b b/txscript/data/taproot-ref/017f425514c38506670a6136985cf2f693c1851b new file mode 100644 index 0000000000..494859bfb4 --- /dev/null +++ b/txscript/data/taproot-ref/017f425514c38506670a6136985cf2f693c1851b @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd100000000e6d2f9d0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1801000000ccd8cab80133f516000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487bf169b47", "prevouts": ["492721000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "7355690000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4a3ea69b746c966c84daf122809976a6bce8b1d887b17a6e963c4c690b8a790e73a6c94bbfbe0c8d8162307ea587875a7b29cdfde589bfdf70042a40a3445f95ec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5174c6ee35a9af327fa74c94c4ba87a09a7dd613a1ede58e30654f1c4a24a66737074cc5cf84a1d913e1f5647d3427cc0d6d469f0e5b86c78a49890e87126542fa0e1c61743bed8ba943c0dc40e80402f7423773c7111097ca9c5a140b1b3c94b9"]}}, diff --git a/txscript/data/taproot-ref/0181b63b032265ff6a54d3acaf33d2efc67028ca b/txscript/data/taproot-ref/0181b63b032265ff6a54d3acaf33d2efc67028ca new file mode 100644 index 0000000000..21fac55f4a --- /dev/null +++ b/txscript/data/taproot-ref/0181b63b032265ff6a54d3acaf33d2efc67028ca @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9d0100000067e4a0f360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d0000000088944686bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9001000000dc741ab4037f16ee00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb3af1b32", "prevouts": ["de725e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c5840f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ebe5810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/branched_codesep/left", "success": {"scriptSig": "", "witness": ["03020d3eaa8a72b1aa47728a04d43184a271547970e0ea8816d304ece0a04935f83be78ff4d36c71649a3d01c467534678e5554b87828c0df7b8553b79a0fd1381", "01", "4cfe26427fc7901b4262f3d916bc0dd8633c30e5af8ceea1dcacd253c102db78cd839b841955f61e94bf7285a2d0e43879ae3b488b8a01e39fb2cd2bafad8fa0106bbb3fade1a7f218e6696679e4d9a0064d7cfa56e38fbce9d589ae3f102c474c244515d6deda3c971875a105d875417da42bab76fa2a27b69ca61e195bbd59e9cd2768feb7ca6768e59331499fe3edd07b3541fad96c6dd5163816913f7c6f555b72f3810c341f5ef952f6cca9fcec7a4eedbd279af7c38d57c9fb075a83b87ca30e3f546f1d56461fddbec204d0d88a9eacf4b14d4a45fdd445f343e09b7eafa0d24b8c53bef7fbf18b28e1f65ddcba4f4f353831e32a3a7c6483034fcf747563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cbbc2d3d740d8643b25368816a3e2bcc8f965749028964b311d1dfcdbc4a53b754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50ac042ba05ad11f932cebeef8b239400bced5"]}, "failure": {"scriptSig": "", "witness": ["c45c79578af8a27f61c2d67ef3a94395648362bde9177391f52f91fe074803e52cd63f6b917d076cea51d4d03ebc29ab73387d1e16560332c56db68c745725c382", "01", "4cfe26427fc7901b4262f3d916bc0dd8633c30e5af8ceea1dcacd253c102db78cd839b841955f61e94bf7285a2d0e43879ae3b488b8a01e39fb2cd2bafad8fa0106bbb3fade1a7f218e6696679e4d9a0064d7cfa56e38fbce9d589ae3f102c474c244515d6deda3c971875a105d875417da42bab76fa2a27b69ca61e195bbd59e9cd2768feb7ca6768e59331499fe3edd07b3541fad96c6dd5163816913f7c6f555b72f3810c341f5ef952f6cca9fcec7a4eedbd279af7c38d57c9fb075a83b87ca30e3f546f1d56461fddbec204d0d88a9eacf4b14d4a45fdd445f343e09b7eafa0d24b8c53bef7fbf18b28e1f65ddcba4f4f353831e32a3a7c6483034fcf747563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cbbc2d3d740d8643b25368816a3e2bcc8f965749028964b311d1dfcdbc4a53b754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50d10d0bd8e3f1cabc6112980cb297bc5c41ed353de56009a1391b18b49f72e57ea91e7772386659b2a4c3f11548cde49c39c8275d3e5e59aa74c00cf8002df9e4d1e0d017c5d08f6eea24e5e837fbc26ad1d9f018e16a6a200b04b73f8b977242e7867c772a6cdf6ecc62cc889f620f5961cb819733f362e9f3843051663078870142a2f60447911e62d53a997fcbadc873a10f2a62b9e03947d26fa0c80062a2402c593629a27df803fa5eb4420421dc7032cbfc83a2a885d2f9149c6d584890fbcc57d4"]}}, diff --git a/txscript/data/taproot-ref/018284c1e780a7aacea0d945603d5f06254c5cfe b/txscript/data/taproot-ref/018284c1e780a7aacea0d945603d5f06254c5cfe new file mode 100644 index 0000000000..7c47ababc1 --- /dev/null +++ b/txscript/data/taproot-ref/018284c1e780a7aacea0d945603d5f06254c5cfe @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4001000000f6f17dea60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701902000000d12b24b1025b3564000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787911ee449", "prevouts": ["6b4456000000000017a914269f407e1403e9e55237bbaed7146c0fbc0fe6c987", "b6a71000000000002251201649567eb00a0fbdde29b894a99c9dfb586a4dcbbedf9e66ed23f8b13544bc3c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["5ae1bb6d9c8227fbe6b4f51287715bd0ff67feca8c40c7f44c5caca4677c8833055e478a619d43466cfb90a3160e1d49cfdc3f8c47c1f376bbf11ef74df018bb", "57ae0c5d033c3b21f5ebbe4a9047ea95419ead2af2a6ab25dcd715c5310690bb7fda15f9857fcd552c25974bd2792de4cb0aa1b66902d14953b5d41a065662ffc394024c185878238d98e243889f2bb95d2381d0e48a334ac1c1ae39167ebfe8f7b8aca2d943e01b79a4dd2d6cad180b7a584ace48d190da3782d603dfed577899a8f93ffd4cb4dcc38169072001ef8b79cd9803ff44e6b3e9bfa9e69bebc8d4fc2278bb58bc6a8c9483c89451663773e061df8745b7f6bacd602dea", "750442c4413200636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e29b18e54b9e1140aa1e11582f537a5ad3999c59a23047ddb57b3ac70c6daa05e44613a52a3af8356590bcff88b520703b7800fd287a336b2c3b3df06aec1ba9093f9e168a9296464b0cb8d60d5ea228bedf288217508cefa0369dc5c09770c1a08ab1be49aaefe730fc3dc02c42930c0ef8d37e9882b09d910b42fee25cd5fcc0cf11274eb3c1f88f775243e4d6b7852ff5a273b2933877e6c1f7f93705c2aa981d0e7f742d746b7b35b8a606b51debac815e203fd3b195b7554ab4dd3e9960942c624b73feb775cec5155a8259c6a62089426b0a8276f3af6eb31eb7743e2916513b07703f9d17167c9a959fdcd0cae179c2a3beb8eef73f49d54b9a683df90beb45228ea759f56bf279a6490d7939871db834fb4f71e2aa134a1c515491012185bf093501bdd1ed26d6794459dbb074ec632f7aad5abd92cfa2d667f36fb90233ecf9ffa0f1acc87455a974903469689da98c448f59a9ac115d8a0a5e218cc5ddf73967c25d95b1a647dccb6326d59dd55f8c8bb43924508a446b4890ecb4b7105310775c9c23ab9453a8724b9db8f4ec3b9da541bc40cf7e139eb84e5d2fbb2342d4572e5d6890d142c455ebe5eb04d0452cec2b30553d1cf714e9a287b4373837d2f1b875554d0595a98820079f4b0810a322d17e2a11eeafa4b7c79f17560e63654d209cbb282493fdeb1f4fd223e4a735dc90e38c877737eb9ef3abe1000000000000000000000000000000000000000000000000000000000000000061c871e70c7d4119fcc7ed12b89136e223c6aeaedb3ee335a6c3ef523524be01f25f280d9de364a1f86f02d0f520b6ad08e77e2e7ae01f13d6ad0e760a943bb0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc61eebd30f27142c50fdbb2a7fc273ea1dba69879a36d68d4e9f1496b4d827338b6efad5c0e7d0410f01e02028258169b8d6d7aeeae7274b642867424d4b8d268a5848489679402225b8ca9ff91c8268b46b210266c603aa5d18faf745d4953e41819b819a4f7d67493609222558d2580faa86888b1068105b2577fc735b8b9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7dcdb5fac8897ab4258bb5e4224576578d9ffef55b02135098c3cf86c079d2acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb403c85095c5b43a22db076a9577c2e678350dc158d7b91b84a0357cfb68a9b0000000000000000000000000000000000000000000000000000000000000000f29e2f89cf5449492c51956aea99da5af19562992d468947751936b5bccda618ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab71f6c1d2a905b87ebb27f5fe751c43ab49e1570717c20682fbcb99025351aa00000000000000000000000000000000000000000000000000000000000000003d0ddfb5150cfc195901d331dd25bd3476a7af9b8b9e6c9e53d87a75da617b6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92b8781761d78d0c2f5ba45ae8e15f96df6914fe95abd57a9c482f07edc7ce6097b7339ed5484fecc4dd609e9431b94a2f55e3cd239cfef1a13b364840ebde28ec7676f80ffb285e6042eb11f3c2e99c48fede5c1ce543f213a13c5e4d04aef40ddb431655269f3d4a88d1f6b6d97f6e62b3726cce6024f57f88488d94f7521180868c0cbf3aa76f710ce164d71916e53281f525d1fbdf049d02c0121eaf1562ede19158fed9dcd017254ea525197fd0f2dd3d737176d7b1c48a24e5e26c8c3500000000000000000000000000000000000000000000000000000000000000004782489e614f0f46202bb2e0be9435ee2cdca64edfb612d743543120b98c7fa500000000000000000000000000000000000000000000000000000000000000009a1c7798415af6cb071c401a749655078551865e4039d0835863429ae207b46af38b9a4f08346b5ed47e670ebd05a75aaa9a8faf04abb1f32afe720cd57ab205ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["5ae1bb6d9c8227fbe6b4f51287715bd0ff67feca8c40c7f44c5caca4677c8833055e478a619d43466cfb90a3160e1d49cfdc3f8c47c1f376bbf11ef74df018bb", "72e820bf3407ba443a74c04332d7d8aa71f92299ebd2c8df3c9ff04a356e751a6a4ab8c8c911933a611da9814253d961bf871a77516840f16e6da31fdcb16382520d4fc3554da48c5915ce04dc75f739309344353bd2b8e0bb4978d849383d0eaa9b97e2edb9705e26b98025d9d7c818b4e746f75ed7c8ccbc28dbeb49ab055c9c5d2f73afe916079c96b35e817528562e84602864d870dd1f0b8bd03561335c3b485178b2a0c34cdf1d198e88764d9c19db4db948dc41bc74c510", "750442c4413200636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e29b18e54b9e1140aa1e11582f537a5ad3999c59a23047ddb57b3ac70c6daa05e44613a52a3af8356590bcff88b520703b7800fd287a336b2c3b3df06aec1ba9093f9e168a9296464b0cb8d60d5ea228bedf288217508cefa0369dc5c09770c1a08ab1be49aaefe730fc3dc02c42930c0ef8d37e9882b09d910b42fee25cd5fcc0cf11274eb3c1f88f775243e4d6b7852ff5a273b2933877e6c1f7f93705c2aa981d0e7f742d746b7b35b8a606b51debac815e203fd3b195b7554ab4dd3e9960942c624b73feb775cec5155a8259c6a62089426b0a8276f3af6eb31eb7743e2916513b07703f9d17167c9a959fdcd0cae179c2a3beb8eef73f49d54b9a683df90beb45228ea759f56bf279a6490d7939871db834fb4f71e2aa134a1c515491012185bf093501bdd1ed26d6794459dbb074ec632f7aad5abd92cfa2d667f36fb90233ecf9ffa0f1acc87455a974903469689da98c448f59a9ac115d8a0a5e218cc5ddf73967c25d95b1a647dccb6326d59dd55f8c8bb43924508a446b4890ecb4b7105310775c9c23ab9453a8724b9db8f4ec3b9da541bc40cf7e139eb84e5d2fbb2342d4572e5d6890d142c455ebe5eb04d0452cec2b30553d1cf714e9a287b4373837d2f1b875554d0595a98820079f4b0810a322d17e2a11eeafa4b7c79f17560e63654d209cbb282493fdeb1f4fd223e4a735dc90e38c877737eb9ef3abe1000000000000000000000000000000000000000000000000000000000000000061c871e70c7d4119fcc7ed12b89136e223c6aeaedb3ee335a6c3ef523524be01f25f280d9de364a1f86f02d0f520b6ad08e77e2e7ae01f13d6ad0e760a943bb0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc61eebd30f27142c50fdbb2a7fc273ea1dba69879a36d68d4e9f1496b4d827338b6efad5c0e7d0410f01e02028258169b8d6d7aeeae7274b642867424d4b8d268a5848489679402225b8ca9ff91c8268b46b210266c603aa5d18faf745d4953e41819b819a4f7d67493609222558d2580faa86888b1068105b2577fc735b8b9bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7dcdb5fac8897ab4258bb5e4224576578d9ffef55b02135098c3cf86c079d2acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdb403c85095c5b43a22db076a9577c2e678350dc158d7b91b84a0357cfb68a9b0000000000000000000000000000000000000000000000000000000000000000f29e2f89cf5449492c51956aea99da5af19562992d468947751936b5bccda618ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffab71f6c1d2a905b87ebb27f5fe751c43ab49e1570717c20682fbcb99025351aa00000000000000000000000000000000000000000000000000000000000000003d0ddfb5150cfc195901d331dd25bd3476a7af9b8b9e6c9e53d87a75da617b6effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92b8781761d78d0c2f5ba45ae8e15f96df6914fe95abd57a9c482f07edc7ce6097b7339ed5484fecc4dd609e9431b94a2f55e3cd239cfef1a13b364840ebde28ec7676f80ffb285e6042eb11f3c2e99c48fede5c1ce543f213a13c5e4d04aef40ddb431655269f3d4a88d1f6b6d97f6e62b3726cce6024f57f88488d94f7521180868c0cbf3aa76f710ce164d71916e53281f525d1fbdf049d02c0121eaf1562ede19158fed9dcd017254ea525197fd0f2dd3d737176d7b1c48a24e5e26c8c3500000000000000000000000000000000000000000000000000000000000000004782489e614f0f46202bb2e0be9435ee2cdca64edfb612d743543120b98c7fa500000000000000000000000000000000000000000000000000000000000000009a1c7798415af6cb071c401a749655078551865e4039d0835863429ae207b46af38b9a4f08346b5ed47e670ebd05a75aaa9a8faf04abb1f32afe720cd57ab205ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/01ca217ccf1ea0e39003e90d0d3573454b370bd0 b/txscript/data/taproot-ref/01ca217ccf1ea0e39003e90d0d3573454b370bd0 new file mode 100644 index 0000000000..6ecf0f0f58 --- /dev/null +++ b/txscript/data/taproot-ref/01ca217ccf1ea0e39003e90d0d3573454b370bd0 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700a02000000307a10d802eece0b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df9797223689874f040000", "prevouts": ["83d00e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "success": {"scriptSig": "", "witness": ["dbcb129ebf4f1e8201527e18f1d2be57cecffd27cf05ac2766de001634d77f1ab28efeeca801991ab3f57bba5e5dafbe42ccb0de07ef2a2a2e2e8180178b23f003", "508321106f9aff90ba27dc13d2ef81cc94ec2f8f1ea854ca3e0ce292ddcbf4d61e2320f8ce08a36e0b4d4037a452252b79ea015cca303607d8de1470da0b0507b6c9817fd30b6678079111ab7673f017f0cd07f5291141bb36d639d9bd932f1853f6dacc8a6f3f34a35d2cfb85ba80aea6b542981232e8c2ea969a99809e00fb4dfbbb46b84275821dfa0c46bef0f8542b045f39bfeec1dee1488dce01d411708e73d8566d2887099ec45ec09aaca37d1d4fc453492b958a8397e8668a88043529c055b0dc38b5bfa62c49"]}, "failure": {"scriptSig": "", "witness": ["05aa27047b2f5b25aee0ab27c860c2847dfda7f80ba6b6335f03222edaf26fc88f38915a90f7c50376cb46722d3b6eeac031b52111e2b514ad898c559fa535b803", "507d1eae983c3f45190305daa1e0543f00973fd14afca63300647162eea1905d22eeb0656c87b86cc89edb03876003d2359b1a3a96780f610cec16e0cba0b5f21bfa17fa6fef53047de15ea66457bcb475ff3156ea9912c196e1ef411a389889f417652637e2cf7424b9d83ce7b5ec1636b52f50dcf4a77c2a4009445ca5037a2f88ef33699080afa1b0a0324539b3ce8d66014d844af632178356297de11e28af3b45021c445ab85c19b8a219d8ca81a28192929ed9066bd918a24a3159e968db76156238ac94a589d46a40bff32c6ce8b7b1cae6dec43530ed2daccc8b14142e84196bb4019c98be9b4c"]}}, diff --git a/txscript/data/taproot-ref/01cc26fa177761f2440d4f78790adfdcb27c9321 b/txscript/data/taproot-ref/01cc26fa177761f2440d4f78790adfdcb27c9321 new file mode 100644 index 0000000000..97800509c7 --- /dev/null +++ b/txscript/data/taproot-ref/01cc26fa177761f2440d4f78790adfdcb27c9321 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f3000000008d771f89dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd500000000c1cefaf2042f856000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf2b3e221", "prevouts": ["23500f0000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43", "c97753000000000017a914e014b0ed75ce4306970c9f63e88b08a5a7bb4d0f87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2358212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["05d85d20fc108d588ad29a582be7d3cb74c0b8f2f2ac241d5a1d6881c63326d6299dc8a12f3fba6e77ea7c4b4af004240d4160ea55c6b0cf9eef3588f712700e", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/0224ee3efd6d6c2e6024db65267c008a3786f0b2 b/txscript/data/taproot-ref/0224ee3efd6d6c2e6024db65267c008a3786f0b2 new file mode 100644 index 0000000000..62d981e46c --- /dev/null +++ b/txscript/data/taproot-ref/0224ee3efd6d6c2e6024db65267c008a3786f0b2 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2c00000000a3ce2e21dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1702000000adcbac73bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b02000000deea024702e1a1c8000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ace21d5c2a", "prevouts": ["e96d23000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "ffd225000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "485c8200000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "cc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360f3116d13ffcf1555cb4ae301ccf73da17002937b6b410b37f9321c49918b540474a999e2826f1f27f01ebf91ad073bfebeca039a55919a1ef327838bd290026ec1da8cea892037e805a477afbb54b1f5ec380954f076c0bcd3c4e3d4797a8d6"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4a945d156e5e86160b430602b16befc6691bb081598fdd6a533cf4573a883d745716b950e27a233a501a90011450809f321d0f7541cd1975fe5718ce8e53406ec1da8cea892037e805a477afbb54b1f5ec380954f076c0bcd3c4e3d4797a8d6"]}}, diff --git a/txscript/data/taproot-ref/0234f23ded5600eb13895b83e3d3208daa621654 b/txscript/data/taproot-ref/0234f23ded5600eb13895b83e3d3208daa621654 new file mode 100644 index 0000000000..1ef4cf7df4 --- /dev/null +++ b/txscript/data/taproot-ref/0234f23ded5600eb13895b83e3d3208daa621654 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4020200000098371f3adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbc01000000059cb1e5044b7b7900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6f4010000", "prevouts": ["a15f32000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "55b04800000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09024f8005087f643e5e326d0fbdb76b9716a98de1150ee25e33b0a11f2f828a5a6ee42441089319f5f7a30f66ae6fe290d924631c0a560e4058cf4cc9365809804ec3203b232bcba98a3677a89bf235a32006a46bceec4815b6a9ad678feaabffc7593aabaaab9ee4166fa2b634131708ae1928fb89743f5cdcac27c76e4e7c1fa351ff9c686d0f9044f68a77f85149944b62dd18b89687aa0a4e52c7f4867097735cd0479406d25087d7cb32168f66fdfba982bbb5f84d89e0e32821a5a30d8df65275b11e1d6ed0d3c31fb4003297b20778f87b1b2bdbfbc8fa36e6273aa4d965aca16bb8dee9c0fec56d17555d88e5d2271c2777b0e3109f4af0050ee1e28432f4b8391d0d414850c09821fd82cee61d206611be218ce229dd4ef6555351a22361273030ee5cd632d845d287a777d1bb8264283a6325643bc524ab6ceb4a7bcfcfdb0ab93165fbd0b5345e6ee7743c545ad5f162f551ea74eae6b6a060525d3f7060e6183c9c9c2e2e235bccb9a497600e9861785de111578e38b29a87c81b4327cd64235e5f770df3cc9072bb075148a264eedc3717e7510982b44a56dc3501d8e9aa3ae1342c7cccc052cdd901a5183aa4b1a4af097b1b216966bf0f4d663aa21af6e02046ec2466db326245e3fc6e692610e3f3eaed6e7823de6225edae0921164233fdb0532af729b79a85c26df585aeaa3e2eb91845c53cce8fbf7e8227537c1d77f676f4009a75c8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ab352ee2a6a8e236a875eeadb35b814571c290bf5fc32e6cf848a4bdb48a3dff6032c3262f8d7c29daaf8f9846bf0ed9dbcc4a0f9aeeb7c8ab8b4ceb985f45a6c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}, "failure": {"scriptSig": "", "witness": ["4d0902d4079ee5c5ab78967a4de070dcd8917cefcd564da8e2c7b418a7caf1b2a764c993a93077fcf699ee51efcfe06d7d67cf66b058ee19619d948d70f9179a9d209f4fec62c9d7afd685c60061eaf8f3b301baeea8e441796f349ded20653cac996257a65805c024857ce2e6829217dcb1b8cc02c33b1172d9bde101537cf37789ed3fce9c9c67937e9099e366b695b08d4bd5ea93c82ac95922774432237ec82ce62560b9f64e5f8e7e3ef72f2abefb77123c445668a3e336b8a0141174782f7b07194af9718fd1f7bce221ec724cbe7fe43c07a62c367e17022e9e75ee0d25957d6b5ff85b829affe8942632b08597639dc7ad979b058a5be6d59d719fa451cdc66bcc185aebdd38a642bf8500496cc3f433c126106011e79a89440dedf4188b7597794e56bd15344508b9afe32d87449f13052266938bc272af6c01ab3279b41804d94c4f7fd90ae81358adc04b2b90e5bb8681bdb55022afa39c906afe8dd8e19cb03c6cfbee7a72a60c77afbda33dfce0f64926c17d97366b25d2242e009f9856e2173d2ec7fcc199534fd42779dd87eaef5d10739543f59560863d577025650d4c9cb385fa2aec0b92ec1300c00f2d3fc375e0b2f52006639c6fcf0107f07817735aadc7dcf70a5cf5747b6b94b91e7ac27d33d663f4dcb618099e9ed133b9980fb86b8f7e92696598ffcf39baa97736d189eacaec042b2b884f975f4d0b7a4ab82d08cfdcca21b77561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93644a2c580f02407949e8c9479d2e11f86ba508deab24abeabd93013277c882be620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b553f13873b7614c747e02d52f281322dd98cc8d4ce789920cf593b75c6f05693959a095ba405700a8bdcb88c47f737d45523ad768f5b3698c80add34f2e764b"]}}, diff --git a/txscript/data/taproot-ref/026745c2e6a71ca361cb3f37fe3f4e9c3029688e b/txscript/data/taproot-ref/026745c2e6a71ca361cb3f37fe3f4e9c3029688e new file mode 100644 index 0000000000..e9ec465dea --- /dev/null +++ b/txscript/data/taproot-ref/026745c2e6a71ca361cb3f37fe3f4e9c3029688e @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e40100000087e476028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47200000000408ded1d02f5c75f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987a7000000", "prevouts": ["6082310000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "792e310000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae7", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cbe80ed66a202568e8406ce6daea5cbc02fcaace10fdce03f37cb2cd6261bd65d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c61a1ab416979399a3dea56cc9db65331fc4d8e9e627e6b90ed3a4ebdc2f66c36df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936372e7144be8e6568f861dea45248ebea76fa61ab8bc1a80418220e511074ae7fc61a1ab416979399a3dea56cc9db65331fc4d8e9e627e6b90ed3a4ebdc2f66c36df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}}, diff --git a/txscript/data/taproot-ref/026f12b427239f4351f951644afdf9e483ddc4bd b/txscript/data/taproot-ref/026f12b427239f4351f951644afdf9e483ddc4bd new file mode 100644 index 0000000000..272ffdd8c3 --- /dev/null +++ b/txscript/data/taproot-ref/026f12b427239f4351f951644afdf9e483ddc4bd @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3901000000294d73f38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f000000000428d778904fbaeb6000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796f7b3ae3c", "prevouts": ["d7b8770000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "2ac54100000000002251202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "167d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cd8a296a36cabb0bc76215e2b1961ccf6987911bdf985895069abdd55ec163ba2d231140cd01d0310e585ecf2f38aee8d36f3a935cf5b06765b4319c9202713151e3355b9fad1d20bddcd1a8531bcd58c93c4d9ee4159d68db4e08ecdffbe17e"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9208e9eee32827fa4e54b07d43c20a1066def6db0c0487e58a7d5647a1ab7f13f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828719dd3b5606bc946287d150a5ecd03b0f8e892d08bbecd28ea2e3769111c28051e3355b9fad1d20bddcd1a8531bcd58c93c4d9ee4159d68db4e08ecdffbe17e"]}}, diff --git a/txscript/data/taproot-ref/0274119160b74eb12e8b0ea869012528e5c8c64a b/txscript/data/taproot-ref/0274119160b74eb12e8b0ea869012528e5c8c64a new file mode 100644 index 0000000000..b302485b25 --- /dev/null +++ b/txscript/data/taproot-ref/0274119160b74eb12e8b0ea869012528e5c8c64a @@ -0,0 +1 @@ +{"tx": "077b85b802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5d0000000030a7fabf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700b00000000c47e39a703584e3500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc1d010000", "prevouts": ["75172800000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "a8e50e0000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "147d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ab0e9d9a4858a0e69605fe9c5a42d739fbe26fa79650e7074f462b02645f7ea7d9d0ef68974064b15682d7a9aede6e3fda6769a3db9d22f26322e1baaf4532e568dbaf979cca58396dcf271ee6fc736edd00965a3b0ecce9c87347ff88ab08a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab120007c9d6e5438fb32187fc2295f6e0f6d7a9b61cc04930744a089d58d965ad1099cc9bb3a5e2066786e30d0fff4359b3ce527e140b44a0b5c89c6b4383919a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100efb63111b06c7a0ce3f44d9f6906db8fc60057b72694cfd58ed25db88d188e5fc"]}}, diff --git a/txscript/data/taproot-ref/02a2d45e622dec5a4342e4be185659da883e8d6d b/txscript/data/taproot-ref/02a2d45e622dec5a4342e4be185659da883e8d6d new file mode 100644 index 0000000000..dba669f6ba --- /dev/null +++ b/txscript/data/taproot-ref/02a2d45e622dec5a4342e4be185659da883e8d6d @@ -0,0 +1 @@ +{"tx": "66f38c2001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc900000000cda530e803fabc1e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987c8b2f34b", "prevouts": ["3f79210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_5f", "final": true, "success": {"scriptSig": "", "witness": ["9b8c21d8992b703916296f8328c308107fba6a58f4e0c0f3e932ed3869f68918d9de62a3d80e883258011295585bcd3b408a88afe0820ece1a5a9c909e3e9896"]}, "failure": {"scriptSig": "", "witness": ["36e15b42d7f927df7fc4d1976cfb3636ac0b5c7abb195d36a610b4e4c325881285d2d94ce9e47dbe0fc6d149e4773a4754f2d73d8f25603b7c00053ad3e8cdff5f"]}}, diff --git a/txscript/data/taproot-ref/02bb3113c2f000ec71e0cac539468d820cfa2df6 b/txscript/data/taproot-ref/02bb3113c2f000ec71e0cac539468d820cfa2df6 new file mode 100644 index 0000000000..2d3e48e4b6 --- /dev/null +++ b/txscript/data/taproot-ref/02bb3113c2f000ec71e0cac539468d820cfa2df6 @@ -0,0 +1 @@ +{"tx": "e051097e028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45500000000dc24bba48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4730000000064d00afb0499a17b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e789010000", "prevouts": ["24093e0000000000225120c7cc4d9ecf94fd1d6052a234c093a72236440d0ef34d0ac6810605a4931ceb69", "e12440000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667eba4a75e30ef7cf22fbfc1113fbdf039a8bb23353b5bb581506d48372cca6d"]}, "failure": {"scriptSig": "", "witness": ["6a16616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/02c77525ae2279633746cc24153272f0cbebb2cf b/txscript/data/taproot-ref/02c77525ae2279633746cc24153272f0cbebb2cf new file mode 100644 index 0000000000..1c7f7e01ac --- /dev/null +++ b/txscript/data/taproot-ref/02c77525ae2279633746cc24153272f0cbebb2cf @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0200000000cc03c0d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c680000000072bf48db039442c600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acc4ec2f20", "prevouts": ["e2656b00000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "65ce5c000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09026bfcc84a20f1dde059eafec76ab3f132b4b97d116fd9c0ecd94fbd5ae160ffca578916630bf7b2ab99380a452ca6feb2c2a0b74569e52a4d3a741119b2769860d266e4be108ab87c5254bea9009479393393b21aeb61546527ce496910bf201a0e418ae95e6bf137eafcad3e06e3c3cf2da59cb3096b9593f6eadb3b7c08bb7a9564002be14a472ba273ade254fc9855f999cdc687f04b32e05795f6d4e705b09fa265f601fc7474c7ab54b7f6966f0b86c34ba81e97cdeae52ccf504dc5dc6e0613f5cbee2cc97ab674d0db7139dfeeec8d26ced7395a13d2d1f0750b17726b2f8b24c9df13b3ec48eba42c2dd48851d08533568756c6bfdf3ea159dca5913e942f75b0e3f8cb35c883ef7da55fc6a84fb28412d58ea3f5e6b77a8895e735465e1f197aa298b03767a80f0f22a8246b6b0c56f78a79a90dd2b310c6049a358e838ab4b02686ccdbac0681739a2e67300ad3d27987e77fad413d0aafbec20332be693871db55788ca49a14ee37761ab5130731a3beeaa7d359d0adffe0c311a366cfc4830192e84e3f7ee79ce185c5b0e6a68a450b31277b074004f9d05a66feb0fbbf240ba7dd661dfa3356101f91b9b55f9f3ace5feab889659ace9879342c33cc2891ef6ecf1acbe8efa220bdf40a7fe1f43b4d3894122ebef09098a68bd08eb7c0d4b64e71c21712a66b85b9acb52f01ae85984b714ba7004df34aeee3a74afacda297895bce4c75", "347d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d221413d2c4dda6e421754723c8a1cc16da4dea4f461b707f2ddf3ed15b4d514c5a4ec1ad3c05e8d6cb6e5418cc65ab3865118805b06cbf11da98fae87c97132e97124583e57aeab90707503ff0d8dae530166a9193c4517699e1743b45d7c12"]}, "failure": {"scriptSig": "", "witness": ["4d0902db52af405d1c8b0c28b352ede8be9b8a16826899c0bd8773adeb0f0685770f5182bc9b6603ae215ecf1adcc69cf908a68654448d70df7c4e7a6ed92b7a0eeeaaa77c27314daebb270f7ee97bccad49bb2112bac50fb88ca5cb4a0138ecf4f5bac2915cd1face16d5f78c1691417f0da99ade26f9cf7bd760e014c3af369c9a8127acd92dc553ed12b4a7a86e53283730aa5e6a7c27d4d6a0af547c47f625192d6d2cb3d32cea2b611ddb90a90c520fd0fcc2c6b21d73bf9f37caf92deb1be44ba462133ec09ffd7603ae4e40463d2a5cd19683d0e5c50f097ad25785e36806e893ec6b069aa1951c7cd970bcbaee5274efd8b7dc12880d0c228115d12eae2ecdb692de46623e91cd25d0aa6e28b8e72ea2248875505e23582c3614decaf3e0ba31d77ef5ab788adddd53b5baec31a3039727cf15baff9647049a5a192c51879b06fea6506addbb9cb991811b5f7003dc12d1100863c262a97f4463f041bfa9ef95f675711baa0381427ebf1be8ec381d9795ae1bbbfcdf85d2424d8a13e9b0560dbddbb362e07edba65334773ae3bca405a2a630ab41ca253a14843bc0730b459fddeddb484bcec67e7e757283cb631b7657e493daad69218a921b4612c7665cc376a79de26956488d467707e7e937b0f7208b7555dfee6f3288ae902fd9e6dd1db8dafd5046950d755d877bdc6589d6dc1b39d0cb638cb060d32719f28698db6c05b813dca43e87fa75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a750add471e9b5b51db6817cb10861abf00379c9e2c8d017af134b88039c39e3ca882fe3c585d1ac8aa5218112791e3065e91b4e1e0362790dbd367cd44cec36e97124583e57aeab90707503ff0d8dae530166a9193c4517699e1743b45d7c12"]}}, diff --git a/txscript/data/taproot-ref/02d1c1fa4446780154693993cbb3b3357d7dc38f b/txscript/data/taproot-ref/02d1c1fa4446780154693993cbb3b3357d7dc38f new file mode 100644 index 0000000000..ab23669fe3 --- /dev/null +++ b/txscript/data/taproot-ref/02d1c1fa4446780154693993cbb3b3357d7dc38f @@ -0,0 +1 @@ +{"tx": "67740b64038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48b00000000cbcacdbcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a010000009adeb4bedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd9010000005dd15aca02d7dc9800000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac56737540", "prevouts": ["ff1f310000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "d85b480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6f8f21000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00636268", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08265d6469ded31e8361d538153e3993104db0c9d480dfc3dcfe9dd6d2fbda5f8f6abc42ab3738335b78a2a7135de763706b017ef32cb75bc24ca1210f74f6e5b7b3fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365f7d2d3ff74ecf468292bf32d6ccf054ad7a3b1b44c07da8896c3351da300a8722ebb88c16ebf61dfdf766657f947c6b679bf36be3a1118c2e7b2b24c8fd5c2a5a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}}, diff --git a/txscript/data/taproot-ref/02f4d455a5e5230510c642f46a00e2819cbd49fa b/txscript/data/taproot-ref/02f4d455a5e5230510c642f46a00e2819cbd49fa new file mode 100644 index 0000000000..56995d0123 --- /dev/null +++ b/txscript/data/taproot-ref/02f4d455a5e5230510c642f46a00e2819cbd49fa @@ -0,0 +1 @@ +{"tx": "9701b121028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40902000000f80e52cc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fb00000000f5b250cc04079570000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961fe84c52", "prevouts": ["510837000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9", "0f433b000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09023353eb347d0d2153cd9bad2bd6904e61e7a55a0ab586d7c450417662391636a0d8868ed4fbf3e9f91e6d8b61f972f36f717dca183f648d96b57203ce4f9a2447d44c50c07276d3258977e8fce61f3ce1866d6ce748292380b2be241d4666ca0701410030bedda775b8505d6fe3ce6103288ffede28435eda29614bc189eacf2b17e96eccbc91c782fe66abb968f821d41f680b1dcf007deab123c0422477dee740e7719be7520a18d5b2a118453f846ffb35edb6f22f8f90e01ac68f37c461199f2036e548700bfa8041467ce1fb87f186d0469d658b211595ddce86d95ce929fa4cead051baeeb283bdbfdbab4fbecb6decbb8f40c0f09e69538a5ee16b4a805a285ac0292c49a1594c5ff7629bb603404e50a414b36eb6d23a85a725c00cf51c06b19a1fe943c522c05fed7864534e39bf322f94d4540aa5d731f35a7fe13a024f65a64ad603e2362523066b6bf57e474edb7cd5911a446b1391e6946012143658109491c7736e3e837c3052082a63b335826ad2cab87d68c9cda512c97e6083cb5057ee85cbbc6fd838dc7628e4c69c8277fea144a5f7b0c04e629c77832ab6f89b713b3e04986008a5ebd0001d38b265f8156e9d230acae56a5ac9cc065be2a6efdda57c6c65d3e46f1d756e592a6aed34dd0306dffa384d971a1a23a5e59542cb6303d3415518ecc881582fbaf7593679be5725466f1096f8e20733bd8fae7cd8e11fecdb853875e8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363edf250f59c4f8d5411dc2db66583927bca5ee5d6634a7a83199202757115d4a886d39c7fd191823f2d71d70dbb2b614916cf5220a36a0556ea0e320955e8896770b862ef93acb6091cb4ff8ef135b3065b278142aa4adab757f952a626e2b26c80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}, "failure": {"scriptSig": "", "witness": ["4d09023aeeb10473b6ce93a4415b162ddf8725baea19dc6056c93ebe4665e2b752558a90c2a8179abf63ec0dd2e727a2c7bcdc698ad44a00a85b76ffdb17804ca07919ab22ec6b01e86f6b2e68ecdb567d6c64d18b221084bc29fa1523242ec9453fb58c3fa579e374550650afb81bddbb35dc6702afb0114ba4f2e487a724e83edabfd4587af283918dcadbe2bca16e8eeb8702cfb1dd9a0bfcd697e7668439e459b6bb5ac9b75df68bb4f685b7f87d931dcf760ad8e8ea7b12e13b4cd41e195c51b1b4cf73c68acc17b6093292eee19997bfd701408e0305b9906dea47b79ecfc9bbaf723585f4288a90fe1ccefd8d41b19ba1acd7b9652b71dd8a10d0c87a6b40fbcacfa1b068c16973109aa391e249fa775ac5b2bfc626ab7f9df87decbca832fed887de5ddbd2d903b2889dadfbaaf7e7e5335b00bb1f41525efc2a502b84c3efa4f7d2cd209027a41d038efe432df72f1f5069a6dbb03cb5cfc596fff10f043ff09b2ca87e36abb87a172cb503a14a06d50b76a1e9ba66d3288413f96f6a7e37bf9188e92434d803f7aa7106bf238d81fea1b81b03685597f2591a175f5be89149ff0923a78741b5227d7b654c3726573b4243beb0e9b31842c83fabd310cd034bc1bfbc46eb21027b51b7e1e7b4d1b810066ffa8ffad253dca43894077404c79da411e7a9358a9805f43ed674860519e567adc09c4c5d9b710d3a4a5b60208277480fe28da2994f8d7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e13f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f61f73219d91856056394a010eb6c8ee7f13c9683181be224f0fcf47ad20d61b9aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}}, diff --git a/txscript/data/taproot-ref/02fcf2313f765802ff09c238af833842580fe461 b/txscript/data/taproot-ref/02fcf2313f765802ff09c238af833842580fe461 new file mode 100644 index 0000000000..6102e8de21 --- /dev/null +++ b/txscript/data/taproot-ref/02fcf2313f765802ff09c238af833842580fe461 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf29000000001bb3f48cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff001000000b58b7f9404b14deb000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aced020000", "prevouts": ["68347b0000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "aedc7200000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d268", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936845af1e352b99ba1b82573d5ecb8b40522cefe3709b796d40d93abe1531690682bdb5955fa247e32681f749888c9d4f86e5604dd03da59f821ad9d541fb8adcb845c4b1f0ef9796b099f7837236ca3239de7da07050a4e4f568f49f6a65718f105f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d519d9c6e51540aa9a09fa82ae61189b3f4badb16bfd2877ff7bde730e5687247de05f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}}, diff --git a/txscript/data/taproot-ref/0313e7c2127076391d6fd9696d30081eb2c9bfb5 b/txscript/data/taproot-ref/0313e7c2127076391d6fd9696d30081eb2c9bfb5 new file mode 100644 index 0000000000..cc4d082743 --- /dev/null +++ b/txscript/data/taproot-ref/0313e7c2127076391d6fd9696d30081eb2c9bfb5 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8d01000000117807cebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0d01000000ea8fb1ec02e7b0ce0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898749102860", "prevouts": ["7bdc65000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "e5246b00000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["504c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f933d08853672a2275403f631a185860433b7a30f3dde2a4cbab45ca4cd5b5bf04d1c6645dfa5bcea0755bc1d945f129b754bcfdfa4df703b30809220c35586032cb43424d7ca27a7abc5fd0c2fa249f92b1e992144deb3864a86d466f79c2cceedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b2c979e5280cffc0fe517d7f3a0a759f39d4606868e0106565d6533994a6841faa718416d21ef008df2257ef512539448f5ca520db3fa3c7b8aa919421e6092eedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}}, diff --git a/txscript/data/taproot-ref/0325cc06523d6b80529e7b67ea669a8cacc195a1 b/txscript/data/taproot-ref/0325cc06523d6b80529e7b67ea669a8cacc195a1 new file mode 100644 index 0000000000..61ee6af9e1 --- /dev/null +++ b/txscript/data/taproot-ref/0325cc06523d6b80529e7b67ea669a8cacc195a1 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127033010000009cf2b10cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2201000000378971070259bd8600000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47876dd8b95c", "prevouts": ["f1be110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3569770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_75", "final": true, "success": {"scriptSig": "", "witness": ["ee04256d62ea675e3aa806a3452a6a010138f4d64e4e42228095623c25357d90954435ec1693c98fd76fa1597cca47b0f5708950e92c2894573ea12dc3fc37fc01"]}, "failure": {"scriptSig": "", "witness": ["b02f7b3c1cf4e1d8184f9fe58b46a5189033cddbdc79c54483675266f497dd9fa7e37697d3c2c9b2cac7ac228296b5f7acc853fd7a3ff60a4d5ca5bf9f196e7475"]}}, diff --git a/txscript/data/taproot-ref/032b54a2e80454a2b7039f32a4974095c2f018b0 b/txscript/data/taproot-ref/032b54a2e80454a2b7039f32a4974095c2f018b0 new file mode 100644 index 0000000000..ad357c0be3 --- /dev/null +++ b/txscript/data/taproot-ref/032b54a2e80454a2b7039f32a4974095c2f018b0 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d8010000000971c6928bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45001000000c3f02c01025ddd7800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac80ae104b", "prevouts": ["f8213e0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "65c23d0000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "4730440220686bb6e46dea578147f27aafedff0c993acd44d4f80a84a57edc035af04d10f202203d2a6da29cf4f18ad64214ecc843c48b120136beb06dc90d4182d08e52df82ff01", "witness": []}, "failure": {"scriptSig": "473044022013a6d2168ed4fa68061b08e3b2d68bc5d2e6671577c6d25201c6e3948901456f022002dbad69f47e00723719f64cc25082628a1b8bb8baac82dc589debdb8563b07a01", "witness": []}}, diff --git a/txscript/data/taproot-ref/035336c778f096bfe56ccd9c44ca36a275649299 b/txscript/data/taproot-ref/035336c778f096bfe56ccd9c44ca36a275649299 new file mode 100644 index 0000000000..2cdcfe037c --- /dev/null +++ b/txscript/data/taproot-ref/035336c778f096bfe56ccd9c44ca36a275649299 @@ -0,0 +1 @@ +{"tx": "e2951d0503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2900000000faacbcb9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1601000000b69418878bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4eb000000002de75a95023fb57d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689870b6d6e3c", "prevouts": ["4a82260000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258", "6f1924000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "0ab0340000000000225b202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["c65f891f63a4162edc2f85da4a692c563eee896098c5d267f1e194a520bc037cd66194e6887748b9e1e8fa07d0598fbf835e584ebf9a684f336d03b628e6e3a7"]}}, diff --git a/txscript/data/taproot-ref/038d58e7a5bd8cd3c42dbd68c099f5900b90ceef b/txscript/data/taproot-ref/038d58e7a5bd8cd3c42dbd68c099f5900b90ceef new file mode 100644 index 0000000000..6872d0160a --- /dev/null +++ b/txscript/data/taproot-ref/038d58e7a5bd8cd3c42dbd68c099f5900b90ceef @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ec01000000cb4377a0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffe010000004024cc68026864b900000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdd020000", "prevouts": ["64e73a000000000017a9140917710a6236c7a08b54f54b004ee705f2913e3087", "d82a810000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dba6d090ce6eeca8f19bee4c4b18bd87e742c613226dbb66d44b3d8c22cd4f417d143406647e47f2aa45aee5a8d37fbb079fe3a633dc3f79123da3b3ed47a821a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93645b70697259a6092735a83fd9185b271706fbd91da528cf82e26060ba02f7d12c3950c17255228812280bec2d0cca04b586565374a97ee6c913745c9c1a159600ce9ba0618adb3ee44483a22999a54a4e1710b9846377d8164aaa29371d79f22a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}}, diff --git a/txscript/data/taproot-ref/03ac2fb4ae30f213cec9edbaf2796b086134d050 b/txscript/data/taproot-ref/03ac2fb4ae30f213cec9edbaf2796b086134d050 new file mode 100644 index 0000000000..05750fd724 --- /dev/null +++ b/txscript/data/taproot-ref/03ac2fb4ae30f213cec9edbaf2796b086134d050 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdc01000000f1553faf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41f020000004d967d93dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b20000000009c7a29f501e4bd6e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac9946af3a", "prevouts": ["8fa24e0000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "07ca3b000000000017a914a7d99db8790799e567017bcc9951f7f968dba70f87", "48721e000000000017a914a1b035f555fd87548264c3580a1f62a42acf027e87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902507dceead97f0d39a0479a7449706ea67130065d5b4100aa056b2ec143dce6731bc857eb628da5d6582597ddd0e45ae4b471849db6e9fb3fe1c3682931873323072350cbb62ff65b67c7ecbb06c15cdbaeaf0e9def442c347be5dd7e2a51a96bba938c6c5f9828102ecd35e365e31e1896d945d7b5bf9fa72fc0fef606246e9826e4f611711aa8fcc664d39d556ea91357e5f61f71b4f541550316fab12d018f8a95bfa43156a3b003fa3283f38e89ef9a79b2308933df81d7f3459609dade69e500c90936678b2039f062a86f19196dd7aaa97aa0e7034e4ef1536690ca67356e9ccd071e82b0ccfc50f3ca3503ceec63ae1e674235edd969349a3c60afb544d75801343e5d870cf694cb9d7dce70cc797748b53657e8d8f6d3f3cdcc24f8e4f0f2efb941eee7906e5cee872f9bea68f28f99c45cbe0589e562d80ed16b80343cef4805754b5fd76e527c7fb0b749083094168ee72a1ec8922696977d6256aad60a908c0a28ac7f4e8a1d82d9a23354cd49eb6bdd210921cf0783d918a27f42977cbdd5b183f7e8bed8dac11fb3e55c940b5888725c69d8b38b194fd86345595aea7e8170ad3efd72f93e154a40266741bda110d4c389670e62c93a09fece71f5e58dacbf6bcc4eeffedabed92c760e618b69487805fbbcc7a499e4209660ceb82abd20ec9da6e429b43b26faf5ffe5cc752c7286c9aae9b615e0d0034b82519b8dc02af3837b39dc75", "6b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361b101d42e37cf345b14a494ee8db2f6d3825916e42c7a162e255fc6a9b93086c8a154b22b0f2e2bdd7f3b34b8feaf196c14822a5749c8a329692c0e12e8447d605976fe26432a41f3547171b2b9abb696d7de0172bd15211267873326056804912e839b87dc613c826a9c62085431a96f79b8782d4b0fe31dfc75aede09e250a"]}, "failure": {"scriptSig": "", "witness": ["4d0902f62d6b759218d83ab882995d625bf8f2485500966d8bf7856c73cd7d17260caf3da5b7c179032e276a4c2fe6ce6584905c5ee04745a81948f2941bb47d2871fd9eda7ad0fe926bccb818a72d505fa1abae02704f5f734dd0499733aa6a7c8545e06e965af935139702d192ecd586e7ba622fe22314477744538df2decb01028bb15b569d0879012033e02e21e7e999ac2e04ed009bab93eb9359adfae1a5e15dac151db6dea7e7bbb928c4347cba6e488420e9c2bd509b7cd2475a2b39d0b2c2eb87035c474b50edc8e029569990fed0d8029fcb39d89eaa472eafa35987b0e6c819859c3e740cb4d0df76adeb4159c987f96b2fa15cb77d01925b162cf2cf2bb60bb171f6e34601b0ae797b31d14afa7927fa551a461169c7a37429ce51dbfbcaafb572092c25f1f1bcd224e71b5816c7ec9763d5749ec50850d8078cdce5a4611876e702688765b29c58e5de0c229bac703d81576b1c41660ed6a1edc885384aa2a134c60855f617f89668d55780e576d9cdc705f25edc7834aa8c52f2115c10d76bfd6ece6602f42b7d5009b84ef0962d9de477eae8ddd8af32fe3baa60df582008facf3a3544de7b75e39f06b1af4aa009b67af22feab39cf6bdb1124ef0421cf0607be403b0e40fb602738d79c9016df609dadba5fc348920fdf82db61e236f7a27fa44ffb0f5d04fb6d365395cd2e26f3b79826269bef056ad37dd258f1789c799426cb5595c75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bb9f94af104a116bd67f5cc9bb9b862a518db3d2599f39de780392b0d5a72c30f14541946e1cf92393992e5ef2191ac72b106fd890d94444e74600720cd636c212e839b87dc613c826a9c62085431a96f79b8782d4b0fe31dfc75aede09e250a"]}}, diff --git a/txscript/data/taproot-ref/03b65143f1009a2a8a2f6b758fd8559f040d207c b/txscript/data/taproot-ref/03b65143f1009a2a8a2f6b758fd8559f040d207c new file mode 100644 index 0000000000..09028f3668 --- /dev/null +++ b/txscript/data/taproot-ref/03b65143f1009a2a8a2f6b758fd8559f040d207c @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf750100000056603c16bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf44000000000058d92c0486a2f60000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac1d010000", "prevouts": ["928a81000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "d39f770000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/padlongcontrol", "final": true, "success": {"scriptSig": "", "witness": ["fa77708f4f753ee0939477dd14179863ddef3bc880a8f335609fa93296fd108a0d05c747a90440216c01770041164364c719afd343ff34b1dba534c01de436f0", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}, "failure": {"scriptSig": "", "witness": ["fa77708f4f753ee0939477dd14179863ddef3bc880a8f335609fa93296fd108a0d05c747a90440216c01770041164364c719afd343ff34b1dba534c01de436f0", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcbca2cf1b4d989a3e309c3"]}}, diff --git a/txscript/data/taproot-ref/03bc1ab1714e0ffffffd3593268beb217c603b54 b/txscript/data/taproot-ref/03bc1ab1714e0ffffffd3593268beb217c603b54 new file mode 100644 index 0000000000..5de4da5cc7 --- /dev/null +++ b/txscript/data/taproot-ref/03bc1ab1714e0ffffffd3593268beb217c603b54 @@ -0,0 +1 @@ +{"tx": "077b85b802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5d0000000030a7fabf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700b00000000c47e39a703584e3500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc1d010000", "prevouts": ["75172800000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "a8e50e0000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090265347be1f1cccbaf5df8907cf7dacd344a716612ebc3cb560fc5c971b8c4c1031327ed44e3d3db8f2a6c3fa7270047ca3e0fb8d3181c0f79483f072706d0c1ed34821282d5ff88375dba3137ab8841a0dcc90314420a19cdb52d3ce9cf73065cf4917d1073712c952299eeb71fecc1ef61d7da57057864573e01ca802e5d5ab8aae93dc35d9e8865c313150e2dbe88ba61a1d49d0aa623ca1d9a40f9fe3c1dc3f9d07911f8bebdcb2a0dc458a05c6d7bcd2c58a30c779bef355529fa16afe3e822ca3e6b9e978a21e798ec4255b7fbf11e4fbe3be6c34d949f08b2e629ed6212d72a7def2f86d00c076678bc3d49fc6c022b9622330ee270195e2c7b2fe11492aa747c6995f535ed973446db7a8d6947a9f02f7d9311820c3ad3a28d3d1bee8b25af08b7b64b8e553430ef573bbd9542c028e9d5d17194fe70357372435a2d27ade8f0fef1fdc8e86e659fa05bfd406a01435f35ec82e372f414e608e7a6b9cdd7c617ac87d05d86791a5779959df85ba78b4fd440889c1d2aaf56cb9db10c8740a3b8625ed018c987cb05b11e4b4304d6172c7aea876226c8e5ffd46bce0200c02623fbeca2ab5dbc44b08145a1668b8cdebdbeb4fc6083e476546179aefc3098c637ee22a98cd34dddfa67e79737c477c778de7010259df66973f6e51b5e65182646affb23e028a8a929cc46e8dbe17f370f65e55700afd68267ab51212657715324cd07fb7ef5c375", "e67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa85f665641dd2adac3083650f9d93a4e0ff6d52a887a3a3677c2728d09852a8a99d11a7792f25f0da70e8485da42647201d1062d1bd001b767f1b05dec6877400"]}, "failure": {"scriptSig": "", "witness": ["4d09022d82118ada44e3fea673624994afc66bad92397c8b136ccdac6bbdc56245db6a43c1f85fcff07b09fe732657f9e6a700c2f0491035e688b8789978f8c08201b9eaef24419981e8dbc0dad5d1fb73cb4cd43f691d7781c628d06e6fc434b2d59f000ec963a0478d2d2f27ddd1ab0b1370fe98be1e28381ea5a5f7c21b10a5191d5e54512973697271df47434f8a034f8bc984e2d3c0ec64fdca0d1960685bcfab9bb57863cf91c2f2748946ac3862999b77b8a3e37c35addedfd103b1fbbe48b21f2de8440d5d4c1922ddb3a1194567266c8ce4fc59acce9fc99d1b50f4fc2eb1c5c4f875cc7e8b7ecf924d54fb6770105316c6ba5eca48bb8be92903c3aeebe6635663362a4d1efe4ebe7159fad8571fda3cf01bcfd9c89a92e1de286f60b04e2bb86c6f94d5546f457da3700faedef2c8a2568676f74022fac45dd67951020779c297c8c4533fc822a130c5ac4b459fb22560bb4d2a26ca04a20e818e41bf245195ef501a21341af2c79ee9423e280138bcb1a05a18bf7c26f47a8ed113b5ed97b44874431d6abcf48bfc3a947df90b6f1fee7d1d62defb32ab68b54dfb35d8af8db95b614560d99bdff7d12226a0c95ef60fc119cff197c61dfa41f4ade49148a997ad68c352bcda141e3b6271b092d93ec0bd148922a274a2bed64a7b8710bd40c7b8c03e213ecc97b991eae66d902e06fa67d27de2eae4e373a5167505d9e6f7339ba641bac3c475", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac9ea19512c809756aa5c58e4cd3562935caab0c2ca4eda8db33914ce4decb3cfe9d11a7792f25f0da70e8485da42647201d1062d1bd001b767f1b05dec6877400"]}}, diff --git a/txscript/data/taproot-ref/03bf93a96878a9f8ab6cdeabb7da6656971299e2 b/txscript/data/taproot-ref/03bf93a96878a9f8ab6cdeabb7da6656971299e2 new file mode 100644 index 0000000000..dcf4d9ae01 --- /dev/null +++ b/txscript/data/taproot-ref/03bf93a96878a9f8ab6cdeabb7da6656971299e2 @@ -0,0 +1 @@ +{"tx": "47c0016f0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700301000000248adfaddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca601000000923ad6d7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb500000000bc64099104f8507b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72f050000", "prevouts": ["71151300000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "c3c7480000000000235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "db32210000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ee", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f25297efdbed2aa8c1ec8b5437cb1f621645355ab4fec48723d1bef81dab8b605e01deb44bf60eeaa09a037ba0d53221083944f657819e2d2b55bb732cda3dfdd207214d6df2d18dfa237afd6016520e9e6ed6636ebebd182087bb183877c35439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d519b8dfaa69151d05ccddc10c8c1e468eb7b78f9ad17f99ee1b916fd61bdfbcfce40899fd8696dac9e3afc960f0a100b615a3c324ed3a125e98af98336f748ba56"]}}, diff --git a/txscript/data/taproot-ref/03ec899fb91c58bbb5676ebce177b0b63fa704a1 b/txscript/data/taproot-ref/03ec899fb91c58bbb5676ebce177b0b63fa704a1 new file mode 100644 index 0000000000..ac493c1f1d --- /dev/null +++ b/txscript/data/taproot-ref/03ec899fb91c58bbb5676ebce177b0b63fa704a1 @@ -0,0 +1 @@ +{"tx": "fb2bc47d028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43301000000be89569360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b101000000f904b380013e3908000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8790010000", "prevouts": ["4291310000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "39b01100000000002360212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["0c77e9f90c808108c29bf4f0eee7fe28be0cf50bb14d1f2d61baf0ea4772c38e7db30e1b807fd143bd3ee6cdbe06c2af20de4ad634330073b3d1149b4aaea84d", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/03edb43f652ba7e0ad56e117bab26ed1b3cc0b66 b/txscript/data/taproot-ref/03edb43f652ba7e0ad56e117bab26ed1b3cc0b66 new file mode 100644 index 0000000000..7e2a16594d --- /dev/null +++ b/txscript/data/taproot-ref/03edb43f652ba7e0ad56e117bab26ed1b3cc0b66 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb001000000037ef9808bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48201000000c798b1410490418700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd3010000", "prevouts": ["2c324c0000000000225120bf14cc6d2f64add112964063c7917cbfbca584b2015bb2b877e08d516634d692", "d1193d000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3045022100edfe03812173e4c65957e82650a060bccbc61c5acd076fb840b5006e26588f9602206e45846d2e23ee3be178578b2ca3a7dbfe49e2c59dbee2c9670a03a1fa7ea87803", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3044022075a06455df7b20225492f9e3a6b68b36c199ee9f47dffe33de5d5184e03d7bda022070cb646fd931c2a6e62e27739f564e67eb5ad82b5d332ee1dc706246d6e4284103", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/0401cdbd85422acd1857a2cf6024ba4b7b5d909e b/txscript/data/taproot-ref/0401cdbd85422acd1857a2cf6024ba4b7b5d909e new file mode 100644 index 0000000000..6f80ba9dfb --- /dev/null +++ b/txscript/data/taproot-ref/0401cdbd85422acd1857a2cf6024ba4b7b5d909e @@ -0,0 +1 @@ +{"tx": "55f3a2c603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5b010000003b874fecdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0b01000000e740bcee8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4580100000096508f98011c849e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac56000000", "prevouts": ["4ff72300000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "9d0f53000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0", "b9943e0000000000225120beebf2e29d62b55aba368e7e892512e69e2ef37d942bd7f6bc768a8958380305"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902186868f5a49aba39336c7fac1fccedd9e432f0b9208b9bd2ee9e0d09e6a93c86743368b82265f4a755e42a71776eef04a7f548cdbace159dd5156fe1f0e436baee748c28de426195b330bb0f57f5063b78d02d48131f65ca2ff5df87d41ba016df5cc54ee19410223521f4cfe48699df0fc934b0ead5a57b2accd4984f49b69d1c8506e2867dc9409c6fd8737f53343668a26debd293e65e04f0ed187b745da016b3477c5965683e03b3780db59a6945f22d122bf20d5ffef5bc24974cfeef66e01fa2d6bf5b9360f125fac8fe200344c1f684aad16f00c9126997ea9cbd72e33c7e712cbde801d47a634c7df00706652cdf4683099aadd1af94e4ff71495914ad7ce3a43855f379dda6ba5eee3fd85eab78de66f2ddd02b249f1a7ba655b874d736218cc7f5ead91222e183623d860f1e0170d3b442d08ebf67e2663b9f847deb78b435204059b09237df46056ea2b1b6703b83b7e03abbc1ef56c15b46c81b4f1afd2d12275de54381ce1efd2428da6ac745794dcc4cd76ab9fb1ae39a8b5b74e7c10b6fcd9fceeed2550fb50eacbf3152992d8cd0d799fb345f3c4164dcdf7c2435e3f4af5bed9394b273a31d63665d42e5a50d07ce849b94dd48a7e9df822ed193a46fd455a7869aadbbcdb03c49008672d15da2b9243346cd5b379feb2de18c774b6142374d3bb8f4592a3b0b45b06aae1de7d3737b78f4765ca1f846573d7273b4d81fba51e175", "a77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082146d6305f54208d13896b102f4aea30badeaee99896cb007ba6ff00553e24c3b2915fd873a4966f8e9b4a3b328eef3933245a1c852c287990317c3760d8289da96773453f0744a158be0509abdec64f05b1db7ccf03251d8359952271b442a24"]}, "failure": {"scriptSig": "", "witness": ["4d0902adba052ef3b7f1f9c73d7fb2caf16d7e56b2a8bb485272f0b81fdcc4a2489707719be15d2eae049fcff8ed09471a560c4b1faa7c5397212214c7d202c003f5d69a4c9fb2f2fafa2142a3e2304471509d9630047a556c4c43170770c360f017fe932fffec7047d0cd013b465ec747e570437acdbf472c9dd837808488f1ef1c917c9a46bcc7f276cbd732e2aea11c8e9c6e2ec769bffe42289a89da5e7a87aafece139edb0a6671f674a786e4bd1667b2325499a20b87efb5165378522107c7d57c465c120bf358b23aabaedc396007606e3d425d2cc33cca71fee916265a302dcd391736163a0e6f08464e6007ff1b217b64a2c127f450e75f7dcfd2f43de96f03d390986a5d6a52cc6e315a6a5fcf9b6e22d54c5b93a81fdf34c4f01073eb97b702188dd17715ca673b79d05ea524f4addb1e07fd906359fe869399c8e682c3cd355ed94c418b72b2d7ec4ac09a4e84b193e031a5782174e6357e4384783f6a926f2f57ee4d50b0f251a857b195cf47aaf0358e3ad921de76b524e36cc3d277b599bfcd8537fa0a282024c591fb23de6f92764f8e690d1ac37adf47c8e8f7a43103390fc49d97117bb83e4ad50d3209d12afcf15acc6b1c1dd088ef4790e5a1b10b337499858d51832c1c300f202d6e19c91bd54b87beca78e8f29e10c7355774453bc5a9182449ff53d972e8a9c6c3add5cad9bb28dcd10808877aecd62cdeb565bef8e250df241e75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ed1a62e8154f816026f7403b3a9565755790b01b86635a59f42302343c6f3dd69619a83ee22e28c5507e71eab09869c4e19cd00c1b769e62c37a8de310ec2a6696773453f0744a158be0509abdec64f05b1db7ccf03251d8359952271b442a24"]}}, diff --git a/txscript/data/taproot-ref/040d05cbd66190be71c513b0ebd00bbc34debe8b b/txscript/data/taproot-ref/040d05cbd66190be71c513b0ebd00bbc34debe8b new file mode 100644 index 0000000000..64a3bf86df --- /dev/null +++ b/txscript/data/taproot-ref/040d05cbd66190be71c513b0ebd00bbc34debe8b @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4d0100000097b2f1d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff300000000335a90e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43900000000f069d69701a1ee2600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aceb020000", "prevouts": ["98775d0000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf", "e37b73000000000017a9148462ed29696925d7688e1db8e76ef9e6667f05b287", "74ed3100000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21551f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["599545692eed16acc6ed23622eadfbf98699e55a84d0ec9431e80c8c0c234e9837aae449445814abe7cd48a61719937fb7c323ee98203f0e903c941edc17b58e"]}}, diff --git a/txscript/data/taproot-ref/04369027c0cf8f61083f8faeaf5d15a4bba2cb26 b/txscript/data/taproot-ref/04369027c0cf8f61083f8faeaf5d15a4bba2cb26 new file mode 100644 index 0000000000..265febe0c9 --- /dev/null +++ b/txscript/data/taproot-ref/04369027c0cf8f61083f8faeaf5d15a4bba2cb26 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c424000000004c7ffa9e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270120000000067fecfca02e2db4a00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc71c501441", "prevouts": ["8aeb3c000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "adf20f0000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["30450221008e7924b940b4ee77a40d8c9c071e4dbb61736bd178eb2019aa5d0c9ba76a022b022015f77f2b5791496908100fc43681d4d366f8af4630d9c2efdd48a4a16987fab681", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["304402205a4634d78cd7d210cf1551300af2cd466b9ed3b18ff568e6bafe3bcfb25a38ae0220055ac9545dd9559aaf2f619e6bb3f785fac840c1065df3742022a2a7f23e406881", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/043ee2fa352668d08af2912ea4c7dc868039dd7c b/txscript/data/taproot-ref/043ee2fa352668d08af2912ea4c7dc868039dd7c new file mode 100644 index 0000000000..2bf293fde0 --- /dev/null +++ b/txscript/data/taproot-ref/043ee2fa352668d08af2912ea4c7dc868039dd7c @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c26010000008481b789dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6a000000000539fbbf038fa4a4000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487c283824c", "prevouts": ["38d65900000000002251201902cefa81d0b0fe2050344a0485b195b36f31ece5900d0426a9de0fd01dcd1a", "f9154d00000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f650677a85498c606c782b8f888c9310727e5031ed3d767ec20b675f0ef8f617"]}, "failure": {"scriptSig": "", "witness": ["6a1e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/046dee126274f9efbec0b1803cf0483b40e0bc0a b/txscript/data/taproot-ref/046dee126274f9efbec0b1803cf0483b40e0bc0a new file mode 100644 index 0000000000..ee85517757 --- /dev/null +++ b/txscript/data/taproot-ref/046dee126274f9efbec0b1803cf0483b40e0bc0a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3c0000000017ddeeecdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfb0100000096479ad303c0b99c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac86e9c54b", "prevouts": ["6d6a48000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "fe56570000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_0", "final": true, "success": {"scriptSig": "", "witness": ["93765305a3fae08d9a1b1d28b4b2065aa3d6f1031fd31a5e3b926f65d534a5dce6eeb59b0d59e42719939f6e7d4ce9883d9276137c979d255bd3c1c6af7c6335"]}, "failure": {"scriptSig": "", "witness": ["babdec7f600efe50933dfc100c4e0d503430f6be4a7858f1996d6ed735afcd79769e2e7aaf9b694a12c1d47f0f6d7fb8673f6b9301634aed5143e8167a04b877"]}}, diff --git a/txscript/data/taproot-ref/047736248915b6ec7bb882618f4c6428dc10bc32 b/txscript/data/taproot-ref/047736248915b6ec7bb882618f4c6428dc10bc32 new file mode 100644 index 0000000000..3588f604aa --- /dev/null +++ b/txscript/data/taproot-ref/047736248915b6ec7bb882618f4c6428dc10bc32 @@ -0,0 +1 @@ +{"tx": "2718af9003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbe01000000e5a9b0d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7701000000d487d4b6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7c01000000a122a7d901541e3f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e1010000", "prevouts": ["436e760000000000225120cd69e6502803f0acddd51df30ad464e69e95dcae732a2073690eba6ce00d0199", "a2f375000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "0988520000000000225120a98c6fc01fa4c9d83199250e6e76cd0e9fc22cdfbaba8827d6d131a9d8267c4e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646cb5e8c66a9ebf72f7ffb8f0d067589f8122f5d919b65c933101887d7d058af"]}, "failure": {"scriptSig": "", "witness": ["6ab0616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/0496f56b7283138d77bd26aa97936a80588bc908 b/txscript/data/taproot-ref/0496f56b7283138d77bd26aa97936a80588bc908 new file mode 100644 index 0000000000..c5a2a858b2 --- /dev/null +++ b/txscript/data/taproot-ref/0496f56b7283138d77bd26aa97936a80588bc908 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3c0000000017ddeeecdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfb0100000096479ad303c0b99c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac86e9c54b", "prevouts": ["6d6a48000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "fe56570000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f268", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045726f0db9cf92b82453fc0fb8c6e624f8035b680f8d4bf4414d1abd8846bea56401b5a419c18d23e8c03ade77009761f1ea37c255231895048329572c11717ad56187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f36ca7668fa45ed948b1c8d1bea39db523e0bba5358b896321d776a78fadcd6f726f0db9cf92b82453fc0fb8c6e624f8035b680f8d4bf4414d1abd8846bea56401b5a419c18d23e8c03ade77009761f1ea37c255231895048329572c11717ad56187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}}, diff --git a/txscript/data/taproot-ref/04a0415662e8fe755a1cad7e31e996b0f9553a15 b/txscript/data/taproot-ref/04a0415662e8fe755a1cad7e31e996b0f9553a15 new file mode 100644 index 0000000000..cf0b4cf93d --- /dev/null +++ b/txscript/data/taproot-ref/04a0415662e8fe755a1cad7e31e996b0f9553a15 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf7010000007a32a641bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff50000000030c813b30337aecb00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7aa000000", "prevouts": ["f054530000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb", "d4857a000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "be7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd522f1cef67c43cc160020062cdc11d631b4f6eefdd5e68f18dfd86aed0bbdde4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8c20793b34d3eca391845c9ee05577f0fe1c8a49b621d2ce1a9da4783f236266e6f69f1f3a976918b4a05b157c0a8e21d478cce8b5d78fdf690138c8d187dd5c9"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb7c20d175283666615e94eef717cc04c54a6d9612bfb359a13b4f03ea50e15671092566d000aee18de877d7d37a6499dcaa40717b87fb42c4af8a156e9c8751ba72dfb389a6a0bb3f8b3aa7842bba2225719f72a11deb6eb959f4e6afb1e08b911ebac8c921821ba74d98d656401ec4b56b2bfe8f672693a939227457b8b1a2"]}}, diff --git a/txscript/data/taproot-ref/04a9e5bdcdafa1f723281d72593020692f3b5004 b/txscript/data/taproot-ref/04a9e5bdcdafa1f723281d72593020692f3b5004 new file mode 100644 index 0000000000..8cc7a9f11a --- /dev/null +++ b/txscript/data/taproot-ref/04a9e5bdcdafa1f723281d72593020692f3b5004 @@ -0,0 +1 @@ +{"tx": "08ffb27f01bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfab00000000334465f70206687300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acabd39529", "prevouts": ["532a750000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e768", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93664ec3f6c98a66c6847beb09afa70d74962ff9c9e8b80ab563ab503c0812acea03f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826cbd7cfc5d340306ce0f8e37fe1bfa8aba9fd4064e6187eeb928db0d0bdab726391a14412c925771c32fa4c7776d5872be2a56fee9c5a8de868e7e6e5a4c84da"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ee9caaa52dbb5b2356b97143365eda72b121d3e2ab2e725af8b99797f1a4e7c0809bd2604b63a9913b428e9bd239a7888c90ad67a336710c360335112147f5da391a14412c925771c32fa4c7776d5872be2a56fee9c5a8de868e7e6e5a4c84da"]}}, diff --git a/txscript/data/taproot-ref/04bb5c8ad218b2ea6cbabde04b776a727cb804d3 b/txscript/data/taproot-ref/04bb5c8ad218b2ea6cbabde04b776a727cb804d3 new file mode 100644 index 0000000000..8396e69665 --- /dev/null +++ b/txscript/data/taproot-ref/04bb5c8ad218b2ea6cbabde04b776a727cb804d3 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba101000000a9a32afc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ce00000000d3ee6bbadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf600000000f28de0af0335865a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb813d458", "prevouts": ["5519240000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "15bb0f000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "0239280000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "483045022100a6c5a91a092958f8894c0f8d9978c5eb068bfda5fcfc24b850b97988f146ae8702200e9256ebbaf450ddfe88150fa324f2c18b284c0de17870691d27f3aac83b120e932102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "473044022028aa0294c582a0e055ce32f145b187a3e18bd48f37a8a76895a79872fa675e7b02205553461a848c955cc16628c50c7bc5fb21e3701f48d09f1f307e591abba1ffd5932102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/04c14170bf3650e0dee112ba4b888f2e76fc3b69 b/txscript/data/taproot-ref/04c14170bf3650e0dee112ba4b888f2e76fc3b69 new file mode 100644 index 0000000000..9aba5801b7 --- /dev/null +++ b/txscript/data/taproot-ref/04c14170bf3650e0dee112ba4b888f2e76fc3b69 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2e000000004f19aad78bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a9000000008152fdb1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8b01000000bc4390e0033a13a400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d3c8e225", "prevouts": ["20dc4d0000000000225120ec87a05d11c16a148e05f58a688dc5bed4b2941085b66901aaa75337acfb52a4", "f0dc3300000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "0f0a25000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ba7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93679583417cf0de5689111c04e71e0d01ec961f10ecfecded2a9e36ca9bac8c22da47630aaed9dd66550bfcb0f3b3ec2bd830a8a42bcee9dbdef471b4e5cf2e89f5668d978bcc8d3ac0b8aded42d2a4a1c5e69a5396581e310868cb48ff813edbf"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670c450feb28eb0f8b74116aafe4d624d4bc8d2ad8551ccd2959f6334db4959b5a0ef97ab7ee9fc1eac24be41bfdadcbb7c9625a4e882ca5abbd81147d09c0527a47630aaed9dd66550bfcb0f3b3ec2bd830a8a42bcee9dbdef471b4e5cf2e89f5668d978bcc8d3ac0b8aded42d2a4a1c5e69a5396581e310868cb48ff813edbf"]}}, diff --git a/txscript/data/taproot-ref/04f498a7f3cfb530edcae02afc0d1476b8fbcd8a b/txscript/data/taproot-ref/04f498a7f3cfb530edcae02afc0d1476b8fbcd8a new file mode 100644 index 0000000000..585ac71e87 --- /dev/null +++ b/txscript/data/taproot-ref/04f498a7f3cfb530edcae02afc0d1476b8fbcd8a @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704a00000000197308bfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8000000000a81903c801c1d73a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796b73c7c53", "prevouts": ["6d9e100000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde", "456f820000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "067d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652d640cff0c4ca0b51ec04f00e7d6ca5ab56cb8e34eb7266cfd1f29ce54ee2fa85587f46271ff71c1a8d3d9e62b351dc1e7761b3de349b9de66c491fc83cbc116ed3422fe95872366e2174646ef4116c9fafb56aaaad9ae25dbd472ec9cd0fc1c48ffafb7a4cf249a6909d8fbff6ddfd3f500331ce755bc2f73b79afc0800987"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e2edee9d6f4a8cbfbb4a0af0dddab94d753895c3cdd7995db9d6f3e266cdd0bebd1973e93f7ad3f562801731a237f358bfce42fb636b2a0dab3a823989e87b4ae"]}}, diff --git a/txscript/data/taproot-ref/0526255fad6bcad83e0f38f3e175d8b55d0113d3 b/txscript/data/taproot-ref/0526255fad6bcad83e0f38f3e175d8b55d0113d3 new file mode 100644 index 0000000000..9d246ed0d2 --- /dev/null +++ b/txscript/data/taproot-ref/0526255fad6bcad83e0f38f3e175d8b55d0113d3 @@ -0,0 +1 @@ +{"tx": "78fb85ab02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7e01000000c5e6ddac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708e0100000019cdf7a804af2e3400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acb51aa824", "prevouts": ["0c31250000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f", "2b311100000000002259202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "947d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360bd0ac8016dcf75d48c3ac69d2580b72b0ba7cd77592bc6631039a54a132ee505432af4ca45b9bbe99b3e8be0ff589ddab81e08d94f2d38bc0283112328f69fdfe847a112bc0d43d64007e06b59459a0c0ad8818c3210afd17f00e931ed6a3b8"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936301899a4270bb6916b9141aa84e043e27ca85cd4d827e482e33ee8eaa8161c9e7085091e7b587d9e3d903161356c0634077d7e43e5aac1c0c25d5c3c805eac670235be472b05f11e998cd7dc8896eb16b23bac01933cdabddca8bd45937e3454"]}}, diff --git a/txscript/data/taproot-ref/0530510aa69fa36a6377468b144a6daefe9e0779 b/txscript/data/taproot-ref/0530510aa69fa36a6377468b144a6daefe9e0779 new file mode 100644 index 0000000000..d2c1de4e1e --- /dev/null +++ b/txscript/data/taproot-ref/0530510aa69fa36a6377468b144a6daefe9e0779 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0202000000b786b0918bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a20000000008aab3a404e02093000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47878a82972a", "prevouts": ["2360560000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "88d43e0000000000225120032ba6f397146bf93cda2585b16902a48899558623e6c842c83c4de6509e8b52"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c5b305c186e9c550c1f891932feea0e9cd4c7688ca45dc8e9b187d3246f8c99e"]}, "failure": {"scriptSig": "", "witness": ["6a0b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/05645a121a9dee2f1e618d22d9c0e11f1729c008 b/txscript/data/taproot-ref/05645a121a9dee2f1e618d22d9c0e11f1729c008 new file mode 100644 index 0000000000..f1f41ef7d3 --- /dev/null +++ b/txscript/data/taproot-ref/05645a121a9dee2f1e618d22d9c0e11f1729c008 @@ -0,0 +1 @@ +{"tx": "17f2605402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc60100000098f115be60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270230100000050702df8027ffe3200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48752b40928", "prevouts": ["5c6025000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "9a19100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f8", "final": true, "success": {"scriptSig": "", "witness": ["acce478862100e38361491bd945e99d878d7c209ca2466b06a8958a76f6f4fc2b10ee9cff032553be630ebad7b867179e1f6765748c8f3045c0e7ce6b430e4cc83"]}, "failure": {"scriptSig": "", "witness": ["b2db7022dfe0f5d2d2ddaa02534f2faa1e42c0d851740edc1a40039c8d7bc312761b2c9da391696f41f6f8352d39353ee94c4ad3768f79b09c5ba0a9d2d57957f8"]}}, diff --git a/txscript/data/taproot-ref/05723fdb3ecd4a3d4acc01d8ce541e74f11ba38f b/txscript/data/taproot-ref/05723fdb3ecd4a3d4acc01d8ce541e74f11ba38f new file mode 100644 index 0000000000..4ec79bdfbb --- /dev/null +++ b/txscript/data/taproot-ref/05723fdb3ecd4a3d4acc01d8ce541e74f11ba38f @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703f0000000024d521f4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbc01000000e8ed3cd4048e26370000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac76000000", "prevouts": ["ec7f110000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "7866270000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936266992371c49134ecc3cd22e54af8ffd5ffa261d20c402b4c0da0de3b849e1f1f98bea6a80fea94b985145b0732d825e6fbd27add9cac654f3749fb201eaf5c0cdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1770c141d000b7389bcb028eba0df2d51be96e98815503d59ed22f20e414bb1bdd3571a06a1d33120289e06483b2785a7356eedf367170ec7792d3587508789d4da9670c383f4b71f5a22d48df0589bd68dfe195935a65f1aeaa80f10f8ca6973"]}}, diff --git a/txscript/data/taproot-ref/0576b0175f23da9546b0ed7d213c1bdf55941dcd b/txscript/data/taproot-ref/0576b0175f23da9546b0ed7d213c1bdf55941dcd new file mode 100644 index 0000000000..0956dd6b79 --- /dev/null +++ b/txscript/data/taproot-ref/0576b0175f23da9546b0ed7d213c1bdf55941dcd @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49c01000000fc23b6c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b040100000067f7ca9b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f0010000009dd718dd01c92f7a00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac43010000", "prevouts": ["ad873700000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "baf1220000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf", "f44440000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a58b6826c45b958e6a43801c4f9a11218097d5d18de4cdf93890daaefc8ad62d7d143406647e47f2aa45aee5a8d37fbb079fe3a633dc3f79123da3b3ed47a821a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bf5896ca46bce08ea2cd3a2aa0391d54c59b6987085b2861de9c65df3f5b29ee99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45e04c998862288954a26ee7ce146837a88020619bd4ef6b5d2b0b49b83f7fafffc7f9c78871d6a598c7c7c3f4c8210a5c47caa8abf9700608b6e75845c74a6c5"]}}, diff --git a/txscript/data/taproot-ref/05a7b91a73da2203e485ff51426532165c688040 b/txscript/data/taproot-ref/05a7b91a73da2203e485ff51426532165c688040 new file mode 100644 index 0000000000..6a991f080c --- /dev/null +++ b/txscript/data/taproot-ref/05a7b91a73da2203e485ff51426532165c688040 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca2010000006f1d02720215695200000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796208d153c", "prevouts": ["a0f7530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c3", "final": true, "success": {"scriptSig": "", "witness": ["1576b15728f36c1aaa93f11db6c9bdc1b071cf0560a8d9fa87cd8ad0bfceb02e1ae7c6d34166db4273141aa4413f2c7a966cb7a906ea6844dcbe0d5888e6ab2d03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7a62ff08fdfe196332f5092e6d2a3ea47973d5284e5574bbc9aa3222143f62d0cc6f31eee34f662763ee3028d1dbce5ad51b1989d5040835f378384609b58c89c3", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/05d3a449ff645092d95ff6fa07d433d341861837 b/txscript/data/taproot-ref/05d3a449ff645092d95ff6fa07d433d341861837 new file mode 100644 index 0000000000..f123133d0a --- /dev/null +++ b/txscript/data/taproot-ref/05d3a449ff645092d95ff6fa07d433d341861837 @@ -0,0 +1 @@ +{"tx": "4a4547c3028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46301000000d1c47481dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b90010000006136b0e302a00c5b0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898718b3c029", "prevouts": ["4bef3800000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "d1392400000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "473044022054554f319c3795aa4a008926b3d564d699315ae2fe362eb1ab83128392896be70220144c04d7f15e0d82069520d1c36f0bd5f7ed8c2d42d2386749f3f3b264a7aa45024104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "483045022100e8b5c8e27b4d3120a70ae403b885a224bfe2bb31f385665cc08f7bb87bdc096a02201c6fe2cfd3d16d4eacd377af6ce78d7746e1b2a9e95b6ed78d4d70328af19507024104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/05e7d1f74a0f0d69935dcee5b60fd0b08ff396cf b/txscript/data/taproot-ref/05e7d1f74a0f0d69935dcee5b60fd0b08ff396cf new file mode 100644 index 0000000000..507d1510b3 --- /dev/null +++ b/txscript/data/taproot-ref/05e7d1f74a0f0d69935dcee5b60fd0b08ff396cf @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4db00000000fb0b3489dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bff01000000ea7ff3a203f9225a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc75f7548", "prevouts": ["524935000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "93f3260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_90", "final": true, "success": {"scriptSig": "", "witness": ["7337baf5e1481f981491127edfa649a51943c66757f9f029ef9bcb15bab0f31f4fd8cc4d5f96191468c3d7b011083c36dd742fbc4c4a7e5a2a901f64cc0f152001", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["abba4f3beb209d4dc153b59c58acee686622d181b79b538386b806c18685e4031c1909f4685c873c0a726923429d12c2b2343def9e628420dcf2cec6298b55d090", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/05f2dfea38b07d623e2947cc2c7963f25a45e24e b/txscript/data/taproot-ref/05f2dfea38b07d623e2947cc2c7963f25a45e24e new file mode 100644 index 0000000000..6d58ff300c --- /dev/null +++ b/txscript/data/taproot-ref/05f2dfea38b07d623e2947cc2c7963f25a45e24e @@ -0,0 +1 @@ +{"tx": "bbfdf13103dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba801000000044ebdc3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba3010000006ee87db8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0700000000b29ebcbf04633b6a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc791357b23", "prevouts": ["55991f0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "bf142400000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335", "5a22280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_4", "final": true, "success": {"scriptSig": "", "witness": ["d7a4de15e00961d988e4ac3f11e36dead0af966fcc97ce922dc435dd9573b8def6cf418e70726de23090f91a058eb36d779521aab880d3bc49245bb5b989e7bc03"]}, "failure": {"scriptSig": "", "witness": ["4250137e209af13e73d9d4b423b7459d0bcf20813e4d75427dcdda2bc89e28ef152d866c961e2771fe8dc9ef92c9d3bceb55908dae0976b510dcbd2d1397d53a04"]}}, diff --git a/txscript/data/taproot-ref/05ff688173b90131ed218e693cd3e0735c88955a b/txscript/data/taproot-ref/05ff688173b90131ed218e693cd3e0735c88955a new file mode 100644 index 0000000000..dfffe09aff --- /dev/null +++ b/txscript/data/taproot-ref/05ff688173b90131ed218e693cd3e0735c88955a @@ -0,0 +1 @@ +{"tx": "0200000001a86a862f8a1bc1808f7ba2abcc71e2c0ff30c2c698fc832f6545a8dcb978b6cb0100000000d612f0b5043c3da44010000000160014ca9858c362545bc83a3b93e73b12b27a9b3ca003580200000000000017a914ca5375a68588393c82c00f5d2ab21f91e99aa5ce8758020000000000001600143f886f8feaf75ad7bedd5713d4d148e7c97c11345802000000000000160014bf1a19526352877c6b170dd8786dc91b1610ae1ca7010000", "prevouts": ["bc9aa6401000000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_invalidcb", "success": {"scriptSig": "", "witness": ["3450353dceeead4aeffc66c2623942031803cc26b4417f85fee94662355c0cc06ade70ade320622ef9465ab480f3fbe3614e16d5bcdf8e49a8dd4d2a6abbe867", "20cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3ac", "c0cb0ba18c127bd01c924f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f312f383ce02997bd7885b2023ff24b4d79c49e77348af650460f5903df7baafc9"]}}, diff --git a/txscript/data/taproot-ref/060f27e89600b0edaefb344b00420aa71360fd11 b/txscript/data/taproot-ref/060f27e89600b0edaefb344b00420aa71360fd11 new file mode 100644 index 0000000000..7a3ee038a4 --- /dev/null +++ b/txscript/data/taproot-ref/060f27e89600b0edaefb344b00420aa71360fd11 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb9000000001e948b94dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b63010000003a5b129a014d5c680000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc10000000", "prevouts": ["2162530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "da65220000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_92", "final": true, "success": {"scriptSig": "", "witness": ["a9f6700bd6df58bceaa4597de51e0fa2e1e6a82d27393f0ace9053aa9fd3f367376a5715a22c87cb958d3163bdff15193be416b68feca647a8cdd056dedb9f3101"]}, "failure": {"scriptSig": "", "witness": ["84d14dc499dc1e3eabcc5034d1fe1b9e102d6c36c6410edc2abe97c85167b0a06e34f8ae3bbceddead34c1b1821a96c80dda92a87e155f7ec2be54f487e1067592"]}}, diff --git a/txscript/data/taproot-ref/0621f65ed4f98e0fc3ba2caa915de84ac2773b64 b/txscript/data/taproot-ref/0621f65ed4f98e0fc3ba2caa915de84ac2773b64 new file mode 100644 index 0000000000..691fa91c97 --- /dev/null +++ b/txscript/data/taproot-ref/0621f65ed4f98e0fc3ba2caa915de84ac2773b64 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709b000000007f3424108bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4af010000004517a8d7048319420000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875f000000", "prevouts": ["e4820e0000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "3867350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_29", "final": true, "success": {"scriptSig": "", "witness": ["beddc99585101211d166f1161dec6948a6f5976e2d29d9b7eb5347db8a42ef66cd4be058672497360f1216eb4f078d697ec07da884dcbf6710355643ac872b3181", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["072a0633145d14fe087930b8e08bd67bbcb251ab0e53472d7c1d78373cadfb352712f1cf65e74305237d9b02e9528ecd95aac0b757eb00d8d3b15ff66cab8a1729", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/064cb40080f9955f34713af8c9ccd370c7ce8d39 b/txscript/data/taproot-ref/064cb40080f9955f34713af8c9ccd370c7ce8d39 new file mode 100644 index 0000000000..62a14bc6ef --- /dev/null +++ b/txscript/data/taproot-ref/064cb40080f9955f34713af8c9ccd370c7ce8d39 @@ -0,0 +1 @@ +{"tx": "997c8d6803dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb000000000b13b4e848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fc010000003b13f7f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf4010000001bbc0c8c04cff9dc00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870cba8322", "prevouts": ["4d2151000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec", "2a41350000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "170c590000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "597d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee343ebd89880aabef0f18c5bef462b16920a32508939784a2317d7ebda32c7f1d0160c53d01d80ab4be204ae4e021ad6f56ad3990ac4b37baa4678d530d3ba4ecd61c62feef9509bc7b3762bc81079411fa6867ea4986820580c60fa1e8298e9"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369246ff60def872dcd9425d4b182836bb1c9ba5ca30c9708f02d69701de6960d646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faa393999847c63b69274661db27cd2e7bb4343911a06570db858c301dc754c7eb4be962498b383c32e8a84fa570ade752f3a2216469b10dbfd65078bd8e1b5998"]}}, diff --git a/txscript/data/taproot-ref/064f3862567d3645a67ad42e8f1234919491ef00 b/txscript/data/taproot-ref/064f3862567d3645a67ad42e8f1234919491ef00 new file mode 100644 index 0000000000..00a11318b0 --- /dev/null +++ b/txscript/data/taproot-ref/064f3862567d3645a67ad42e8f1234919491ef00 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfda00000000be838db68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e80100000074bdb79c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b0000000006cc0e3ed03fdbde60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a613ede228", "prevouts": ["566f7f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5c51330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0198350000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a83", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936648b8fdbc24ddaf6fda4be3c15bd53c3c8af4eb62251b7ead54781f83ba5fc3b8ed6c904d531fc0d19ced9482d4cbb64035dc55104164ba190923612d3f9e9a82b9d1447cbfb5d72d5da72ac5ad193469eaa6b44c038aa23e2a9d2dd480586adaf3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da4a1468d71fb79ddca97f2d0be02d5c32dc1eb93332690a2fd408e08d38e5e68f4301bf594f01c0bdeaf5c3d617f0344f5f915f3ffa16d6ac31751e310f3332b0bdfd7fd43775a37ae3e20c8f8514aca25517db969733cf8d9f690f9b6d8ea23f980255362d30444bd4a09dfd60422f4fe5b70b7cde78729ca8cd52cb50aace"]}}, diff --git a/txscript/data/taproot-ref/06689eea577fd577cf0ed48baa3396126bb6f1b5 b/txscript/data/taproot-ref/06689eea577fd577cf0ed48baa3396126bb6f1b5 new file mode 100644 index 0000000000..a7d59e0283 --- /dev/null +++ b/txscript/data/taproot-ref/06689eea577fd577cf0ed48baa3396126bb6f1b5 @@ -0,0 +1 @@ +{"tx": "36cdf06c018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ee01000000c0f713de01703f22000000000017a914719f78084af863e000acd618ba76df97972236898778000000", "prevouts": ["1847330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_23", "final": true, "success": {"scriptSig": "", "witness": ["11c8d2d2d77f80429dd899f88143ae6f988f00b7c9efe7d938d51fa2547f2c50debc9a4745150d77db2e9e0c24d8fd0057ddf5543e537bb0384616efd364915201", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["78ac00751bd1251df05faadc67c597881293ee1ecabd0418f41c375db6ed526487e20a8c65cb0156e7b83cf4086ca18dd83083b0f74fe6e580d8143b7859d8e923", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/0672af82ea3c78b3ade4b7424ecf5c00466fba2e b/txscript/data/taproot-ref/0672af82ea3c78b3ade4b7424ecf5c00466fba2e new file mode 100644 index 0000000000..88b19804f0 --- /dev/null +++ b/txscript/data/taproot-ref/0672af82ea3c78b3ade4b7424ecf5c00466fba2e @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc10100000045d79042bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf650000000093c03899033fb4c3000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac0a030000", "prevouts": ["9f9c520000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "0ae7730000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f74c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e6bf3ef0c52029538d60b405bd64e2cc9734303fd934f9ee1f37723dcf17f67fbe0beccf8b53a38f7a20d51eb008bdc60f78fac094fdd23935202ece673d8622376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}, "failure": {"scriptSig": "", "witness": ["4c52f7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1dec24bcd5a84e558ba1632e81361cbfb2715ab9fa3d579aef34157cfe08620975813d9fe920e311eca68d9da8ac683d4c5ffd57c03f9174ce1b6c58fb2e14cca376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}}, diff --git a/txscript/data/taproot-ref/06882dd6d50dc8061c56b887fa16764a4db5cc51 b/txscript/data/taproot-ref/06882dd6d50dc8061c56b887fa16764a4db5cc51 new file mode 100644 index 0000000000..b7224ac412 --- /dev/null +++ b/txscript/data/taproot-ref/06882dd6d50dc8061c56b887fa16764a4db5cc51 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca401000000a89fb6d18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d9010000001d4379cf0321668a00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689870d020000", "prevouts": ["d6ca500000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "40f93b0000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dab42da502f2250da43a527a2c86d70ef22e86fb8286b7cba8088edd55a95ebde8db2f81248ad9ed5128a6abc5bb92ba3aeb558dfcb95d0b55c9fe030b8e1ae1c9fc6c767d5aa72b6a61d813f4dedd67fc97d91e71acf86e276ab6f41d1da0fa8c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bab5c143898502b1abd6718354496239c5165981c0d5d614586abbdfb87575999aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4e05de1aec4dcfd94364dc697d2506f2d3dcb95f0b1cd2734b3ed6d289f30b19a3cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}}, diff --git a/txscript/data/taproot-ref/06aa8b12e6ae5c391fb3d92c4050218d552b6923 b/txscript/data/taproot-ref/06aa8b12e6ae5c391fb3d92c4050218d552b6923 new file mode 100644 index 0000000000..9d86883916 --- /dev/null +++ b/txscript/data/taproot-ref/06aa8b12e6ae5c391fb3d92c4050218d552b6923 @@ -0,0 +1 @@ +{"tx": "97afbbe90160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270aa010000007d516c87016e320700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acbc030000", "prevouts": ["432b100000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["bf4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cddd07b9b59a457ac18abed7266986241d091147981a1ef9d43f6473969f25041ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045911e2ebc11e8ff6aef3c08be5d8086fd4b944e3e1f7063038c1b6dadb4d48ab0219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c00247f9d8df68482c9cba9042da753e4cb10c5fb7c4ff28bbbb197976934ac148ad690b4db681210d49373d4012b83591ebe1050d9c81702caad07f4cd5bb9faa736b6bec5c04b20c5b38998d4f897a7594adad2cf377758bae1284900c20e3219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}}, diff --git a/txscript/data/taproot-ref/06b7ea9f43da11b479b267aca3bdd7cf6fb9cfa7 b/txscript/data/taproot-ref/06b7ea9f43da11b479b267aca3bdd7cf6fb9cfa7 new file mode 100644 index 0000000000..792330930d --- /dev/null +++ b/txscript/data/taproot-ref/06b7ea9f43da11b479b267aca3bdd7cf6fb9cfa7 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c8000000008115ba958bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c485010000004a1f0fbd0350b06200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7624b9d51", "prevouts": ["7b22320000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30", "9234320000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c268", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b9602a0fa147d5a6995f53504151ef0f1c99d37971b01cb6c21f8bc7a527e93d60a46f1edbb097ed18057c0e42fb935953c4336ec9d443d16e55ae39a225d9f2f0288dcf8f2e1e03125ab45cd0efca3a23715e7661e5c17627e98d50057f87374b5cd80fb8cd7c947a98554a389db356265b198fc72df311d010d98c3d6e3928"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d5c78237289a8636bb429226e0de9c7befeb1ddb6aefa0b188bf3d9b51e606da144e2b32fb029cde325456c88021dd04a80b93e0665f7e39c1e8a56bfdcaf4a64b5cd80fb8cd7c947a98554a389db356265b198fc72df311d010d98c3d6e3928"]}}, diff --git a/txscript/data/taproot-ref/06e74af8b10a6ab9ce11036f2747f8034ec3febf b/txscript/data/taproot-ref/06e74af8b10a6ab9ce11036f2747f8034ec3febf new file mode 100644 index 0000000000..2ec861e71d --- /dev/null +++ b/txscript/data/taproot-ref/06e74af8b10a6ab9ce11036f2747f8034ec3febf @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7900000000f330f40adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b590100000008d985f0031e937400000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac2cb95a1f", "prevouts": ["9343500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a6ef260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_be", "final": true, "success": {"scriptSig": "", "witness": ["efda24429d139dd7964b3f3923dfff8c4e7934d53387dfa110b912083d14f9ea5ef852d3ccf60772a205f9e5f658eb3aa52b90cfeb83fac4c71db46599a6608e81"]}, "failure": {"scriptSig": "", "witness": ["bbcd15b5296d5628463756efc7405c482007a0ecf43b2a5b1b60c1f31447b8812a767d8c06fadb8014d21ebdc22a32ba279b328020eab220e95008123bab3ef2be"]}}, diff --git a/txscript/data/taproot-ref/06f54531f7cc822f36462b303f5eed8313ca07f5 b/txscript/data/taproot-ref/06f54531f7cc822f36462b303f5eed8313ca07f5 new file mode 100644 index 0000000000..ab89b0da26 --- /dev/null +++ b/txscript/data/taproot-ref/06f54531f7cc822f36462b303f5eed8313ca07f5 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be500000000e3fccd6e0404431f0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acba000000", "prevouts": ["a4fb2100000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "", "witness": ["304402207247050860ceb4e196d3b1f5c057e6ddd839afbacb556d7f7098e299fc8c78ea022017e3c0252268a13b78d7351d3d3ec355c8f6620cc53dfffb6ae119361e21450c02", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["304402203bd0af9847bf68ab8778f9160de97b5e9caaf7e8e5b866e72bb6c3dff5c3bc3d022079f5d9271d0a58ca69a9dadaafc365350b753d7bb69345d335e17ee20768a88a02", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/07249b6446b452a9005766194cb824b77c6ed600 b/txscript/data/taproot-ref/07249b6446b452a9005766194cb824b77c6ed600 new file mode 100644 index 0000000000..52abb33067 --- /dev/null +++ b/txscript/data/taproot-ref/07249b6446b452a9005766194cb824b77c6ed600 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d8010000000971c6928bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45001000000c3f02c01025ddd7800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac80ae104b", "prevouts": ["f8213e0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "65c23d0000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "2f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e478f34169e056cf51b9394d2ada3735c0a63dc9f48f236da8ac021a74c045d29ed6bb91bf977e9e370b444e9d5512cd4ec7f3694a9311c01272a4c1a167cd930"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360eb2d35c2916f6ee10417bbe503f487f009b40ae689b59f28732d8e6ab85ee945f3be5f8f698e83d3665b890524642b89b7b05493241beec338309aba778c454d8fcf0fa02e125fe1892f3caadd01fd66f2ae3104b90b9e35e4c43083bce335e4e9031d393e93ec4f3e9da8fc51e83b82f31256dd96ef4af94581a47eb5c67bc"]}}, diff --git a/txscript/data/taproot-ref/0725dac7b6c36d404b706902e2a350065ba66fbd b/txscript/data/taproot-ref/0725dac7b6c36d404b706902e2a350065ba66fbd new file mode 100644 index 0000000000..d04851e82e --- /dev/null +++ b/txscript/data/taproot-ref/0725dac7b6c36d404b706902e2a350065ba66fbd @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c489000000005bca01bcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba70100000054f58ac701aac509000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487adb94525", "prevouts": ["3bde380000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c", "b5601e0000000000225120dfb9bbe67fbb4eb318568f7b177f9ecde078527d023b90a4ec13e543e4037efe"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360f84a3d63b5b1872a1abd5454056145b48969a3f6a653dce575a0a82ad7f58cb"]}, "failure": {"scriptSig": "", "witness": ["6a5d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/073b21ccb622912fef49f0555d5ed7b6ea85ad7e b/txscript/data/taproot-ref/073b21ccb622912fef49f0555d5ed7b6ea85ad7e new file mode 100644 index 0000000000..3794884c29 --- /dev/null +++ b/txscript/data/taproot-ref/073b21ccb622912fef49f0555d5ed7b6ea85ad7e @@ -0,0 +1 @@ +{"tx": "56711c2a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b55010000007a913ec4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccb01000000598666940321156700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac6c010000", "prevouts": ["f4382000000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e", "6595480000000000235a212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51419220fa8a7a918b3857a082d32be9fa2ecc61d36b58eead0239ee9c5d9d4afcd5a470b8497850c3a230fee464eb343180400453804118582df887251250b2f1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ef65a7bc88e8caa9953fbbe68415f348dc7b3deedacdb598041f1438fea667b18959ac4fa8a57d164b76708dc6f63c2efb2484bc5a77a391ceb66b2f5ad6b35f745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}}, diff --git a/txscript/data/taproot-ref/07904e76401a888153be57bdc173982a4396aea3 b/txscript/data/taproot-ref/07904e76401a888153be57bdc173982a4396aea3 new file mode 100644 index 0000000000..2eb4cf819b --- /dev/null +++ b/txscript/data/taproot-ref/07904e76401a888153be57bdc173982a4396aea3 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0502000000d16cb6e660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127073000000003ed0908104709196000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdfd17120", "prevouts": ["10ea8600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190", "a4a0110000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936725108a440ed4012535da7c85222e4fd4d60d8ac1b151397c12e7bd31b62cd6b31a3099151dd9022c8ab6721206c57c00ed937e9f62099522c543aef8c2ea8dec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08274c6ee35a9af327fa74c94c4ba87a09a7dd613a1ede58e30654f1c4a24a66737074cc5cf84a1d913e1f5647d3427cc0d6d469f0e5b86c78a49890e87126542fa0e1c61743bed8ba943c0dc40e80402f7423773c7111097ca9c5a140b1b3c94b9"]}}, diff --git a/txscript/data/taproot-ref/079662a69dfd16ca9215a4e0c822fc44641e72ed b/txscript/data/taproot-ref/079662a69dfd16ca9215a4e0c822fc44641e72ed new file mode 100644 index 0000000000..9571e14fdf --- /dev/null +++ b/txscript/data/taproot-ref/079662a69dfd16ca9215a4e0c822fc44641e72ed @@ -0,0 +1 @@ +{"tx": "c99d682202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5e010000002c0ba2bebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf67000000009fdb47ec02affe8e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79659a35950", "prevouts": ["2cbd26000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4", "dbd56900000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "e47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89220988768fa939e91d6ac18545dc908ae35e0fbdf4f2079456a337e4567f1e2befe4cc2cebe7bba8b4a4f82666342333b91a450af49acc0f1954b5763bfc142"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93627a793cd26d083ba6aa51290dd61966260e2cea77d3c953e5a10e1c750a41acd9220988768fa939e91d6ac18545dc908ae35e0fbdf4f2079456a337e4567f1e2befe4cc2cebe7bba8b4a4f82666342333b91a450af49acc0f1954b5763bfc142"]}}, diff --git a/txscript/data/taproot-ref/07991f2bbd7bbe3fad499b0c428f795590321613 b/txscript/data/taproot-ref/07991f2bbd7bbe3fad499b0c428f795590321613 new file mode 100644 index 0000000000..fc283766f5 --- /dev/null +++ b/txscript/data/taproot-ref/07991f2bbd7bbe3fad499b0c428f795590321613 @@ -0,0 +1 @@ +{"tx": "8e8e60c302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3d00000000e9ad4fc0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfe00000000630dd0fc01f5cf80000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478754000000", "prevouts": ["9422520000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb", "671c5000000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "737d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e85062220981136031499d54282dd1dc217e6360b68c94112219f47c832c6b09fa8cadcf9bcd23f9249fd09eb8b2b9ca63044a0ccef58f4cae9402f6ead4c2071"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa1755d4e71afcc10f3d2573fa2263bf007b883f1245d387f3f26fe0befbe96d0f3ec5aec6a85c1ca54f3417a27e00c281f3765ee450a46261b59de169989c9a702c501a2f323d94577f3c4b353be8e702d3f9991edd341efb02c3132264010bb33a63f37675deadbbcd666ca6b38ad7090050f3dcc6bba45985e955ec185c53"]}}, diff --git a/txscript/data/taproot-ref/07a56716b603afd041d05639404b37744bc2b83c b/txscript/data/taproot-ref/07a56716b603afd041d05639404b37744bc2b83c new file mode 100644 index 0000000000..9009b5fc3a --- /dev/null +++ b/txscript/data/taproot-ref/07a56716b603afd041d05639404b37744bc2b83c @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1f00000000624a02eb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127095010000009ed305a30279d36200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac70030000", "prevouts": ["fa02520000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "73761200000000002251202ea95065368f678e25a669a7906e1051ddb7c321fda55e7bd6b39829f3117b75"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["cb4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936140d663498a4274ecf7f45240089a1df766efe22ae76bf8a987a78cbf23a246a1937db199a07e1996385ab03857d8e2ee63e136796e4b408281aef544a937c0c73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}, "failure": {"scriptSig": "", "witness": ["4c52cb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93604078a57b801774f1511fcfcd4e29746b07fc4b44c1e1428c3fe5e43ff6be5a920e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e191fd70f8e44f42202023c580ea06f1578af3f03a2439147535e7b1f16736e0d18859d05a814eb862cab9a6acf3b7acf0881c47896b22b56466b77992f62c0511"]}}, diff --git a/txscript/data/taproot-ref/07aa3010d9cc23f67f6962a7c18f7dedccd7855b b/txscript/data/taproot-ref/07aa3010d9cc23f67f6962a7c18f7dedccd7855b new file mode 100644 index 0000000000..f498a1cd93 --- /dev/null +++ b/txscript/data/taproot-ref/07aa3010d9cc23f67f6962a7c18f7dedccd7855b @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd801000000872a088c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c418010000008af1d13301eb745300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3d95c32e", "prevouts": ["a1705a0000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "2fb636000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "897d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa58e965213f8dbdd3ccbab86b6d585f0f8e78abed831015bbc989f3cab476ce59ac632f1e88e109b3d5485dae08acb0148fc939094c3a94300b3efbd66c89bc20"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e8e7fff1bca432c9ba96d0556d2ed7bd47849d71950e18b52879751e42d3038d46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa58e965213f8dbdd3ccbab86b6d585f0f8e78abed831015bbc989f3cab476ce59ac632f1e88e109b3d5485dae08acb0148fc939094c3a94300b3efbd66c89bc20"]}}, diff --git a/txscript/data/taproot-ref/07ae5671fc31d245f515f5c967b4e7cfed38567b b/txscript/data/taproot-ref/07ae5671fc31d245f515f5c967b4e7cfed38567b new file mode 100644 index 0000000000..518c54a60a --- /dev/null +++ b/txscript/data/taproot-ref/07ae5671fc31d245f515f5c967b4e7cfed38567b @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702d00000000d650368ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8701000000b6f15db004cee659000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7efa05528", "prevouts": ["f62210000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "f6ee4b000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c068", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663c49f3bc9f550c63855e2d5fc0a261957d370018a90e39a0a9924b5c04b4f32f827dd3f971806aab342b51fb6c2519c5b3aa410ee2eacb06207a66da829722129de37322ddf566a2356077a247b666bf816d75bd62d8842c555909c8a1545e03de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d753e4c48a29c49a51002f402079443dae545bd96b00a3a5880d5a88ed66a5a500c8753d4e6010499b58065b36892efcd9281a64e85ebf7c5dcb8f6f4baee16c3de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}}, diff --git a/txscript/data/taproot-ref/07b8ee857d10f18474e7471c3c27d10be12c5f25 b/txscript/data/taproot-ref/07b8ee857d10f18474e7471c3c27d10be12c5f25 new file mode 100644 index 0000000000..3a26949920 --- /dev/null +++ b/txscript/data/taproot-ref/07b8ee857d10f18474e7471c3c27d10be12c5f25 @@ -0,0 +1 @@ +{"tx": "02a25573038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44300000000a45df2cd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d7000000004530aec2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c62000000009004818202ae91bf0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478724ab1f33", "prevouts": ["520e3100000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4", "942a410000000000225120327dc9effbe915b227349282cadfcd45dc438d4f1c3ec72713111ad7587a718c", "f2415000000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366db23d78c6adee92f78ed0a395ed560dcca3b184d0294b17d87d5ff6314e6d5c"]}, "failure": {"scriptSig": "", "witness": ["6a25616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/07cbbc0e4129794730bb9bb49d334b497f11b422 b/txscript/data/taproot-ref/07cbbc0e4129794730bb9bb49d334b497f11b422 new file mode 100644 index 0000000000..aa5d85eff2 --- /dev/null +++ b/txscript/data/taproot-ref/07cbbc0e4129794730bb9bb49d334b497f11b422 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6000000000f1c183f860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b201000000b9cf07d303a0995a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca2e5a443", "prevouts": ["478e4c0000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2", "d047100000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "717d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa135cf860bbff3a99fb4ec2fdf299b3a63be6e4cd6baa7eae64af9a923e2398def4fdc20f1f5535ceda7aadddab857a143114b7886b058839365016ac02e93c97"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365ed3e5978e160b34ed2da7d8b0e41bdf70d28308fbcd927b9d3a78fa41469786135cf860bbff3a99fb4ec2fdf299b3a63be6e4cd6baa7eae64af9a923e2398def4fdc20f1f5535ceda7aadddab857a143114b7886b058839365016ac02e93c97"]}}, diff --git a/txscript/data/taproot-ref/07d68512aa206614c478ec869a8b7d4f7c32333b b/txscript/data/taproot-ref/07d68512aa206614c478ec869a8b7d4f7c32333b new file mode 100644 index 0000000000..b42fd97f50 --- /dev/null +++ b/txscript/data/taproot-ref/07d68512aa206614c478ec869a8b7d4f7c32333b @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700100000000d4506fd8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0100000000c19213868bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4df01000000e0a85df0028455cb00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acece8b33d", "prevouts": ["2e421200000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "1de97d000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "8ed73d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936070bb467edca609e1a3246a8ba31e6266509d0d4e74e5fb2a32359b5f156527204d1c6645dfa5bcea0755bc1d945f129b754bcfdfa4df703b30809220c35586032cb43424d7ca27a7abc5fd0c2fa249f92b1e992144deb3864a86d466f79c2cceedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93672fb7b0b8b9d34fd164052a9d1d97e8f2f76026babd1f73e719809b132cf1e5b464f19ce228e2f316c50129d6edd6267acdc0242055b306d7ddf31bf4be6326132cb43424d7ca27a7abc5fd0c2fa249f92b1e992144deb3864a86d466f79c2cceedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}}, diff --git a/txscript/data/taproot-ref/07ff10e93b7bf06e8da854a647ad08d5bc902326 b/txscript/data/taproot-ref/07ff10e93b7bf06e8da854a647ad08d5bc902326 new file mode 100644 index 0000000000..ee691893a0 --- /dev/null +++ b/txscript/data/taproot-ref/07ff10e93b7bf06e8da854a647ad08d5bc902326 @@ -0,0 +1 @@ +{"tx": "a890ed2e028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dc000000001f541de760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700601000000ecb8d1e201aa403a00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac99020000", "prevouts": ["ec3b3f00000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "f06c110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_9b", "final": true, "success": {"scriptSig": "", "witness": ["4a759f3cd1e4a0694f3ecab49b9fb8b1105aa45bd3fedfc0e466ee468604f08d6b0f0b51c255b1478f34acd7e9282b818c5005828be1d56dd641bb72d72b465681"]}, "failure": {"scriptSig": "", "witness": ["1604cbbabe361b73faaf2ef6187ff51b79098bf820c004152c14e1af0d6048e47c451ccefee48a1cc76d0116eb1185a950a8565ff37f7ad81c1e66d36fc41d709a"]}}, diff --git a/txscript/data/taproot-ref/08106eb8543994958b201f3ce5f42dbbf19adf37 b/txscript/data/taproot-ref/08106eb8543994958b201f3ce5f42dbbf19adf37 new file mode 100644 index 0000000000..6b8508a59b --- /dev/null +++ b/txscript/data/taproot-ref/08106eb8543994958b201f3ce5f42dbbf19adf37 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7001000000fe2a26babcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaa000000006e3943b604070dc800000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987fc927851", "prevouts": ["7fcc4b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "59217f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_96", "final": true, "success": {"scriptSig": "", "witness": ["cec646cc69f13f2bbcac7aaed897dcd0b3d9585a286fcad369bc4b434669e2be41856dc069c2169609f3dcb3898a0a75d5b40a27f2f623f8b09d4eaa8f4fcf4803"]}, "failure": {"scriptSig": "", "witness": ["b03291d79fd59944fa0c87ffeb37f8e2a795a1d103f274afe4db0745384bd147f0c8ebef1091d6d71a5f59c5c636dfe2b42c55bd290809e2a3575216122904b096"]}}, diff --git a/txscript/data/taproot-ref/081a75fb52ef536975050ff3192f6c516b3b557a b/txscript/data/taproot-ref/081a75fb52ef536975050ff3192f6c516b3b557a new file mode 100644 index 0000000000..fccaca4682 --- /dev/null +++ b/txscript/data/taproot-ref/081a75fb52ef536975050ff3192f6c516b3b557a @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8d000000009628e1ab8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f10100000041654ba460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c200000000352cd7d102283e7a00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7eca46228", "prevouts": ["be4828000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "99de42000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "344811000000000017a914d574841bde7bf0817694c799002118e85acf040e87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["db4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361eadd57732c956dfe38750ac99bf9f6a185a50e2b535aa6e427b8b7d9ced3e4c3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082a04823906532712c3d4cb334ae6c7c41a1294a824a25b5277d43f47953a1da33e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}, "failure": {"scriptSig": "", "witness": ["4c52db", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fdf92fb2c16504bc9198e70ee5e2872df4025bad8bb2a722e84a5b213bdb644c99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ba0f4accdd80d494e1b95824e4feb55c95caee559d90e25fbf6396e2b6be61303dda2dfca806ccc9c3ad62846e64b9ac16121de5d926db5bebf2e82f8dec8d2a"]}}, diff --git a/txscript/data/taproot-ref/08421b069ef3b27abeb764e8412aa879c8bfb0cd b/txscript/data/taproot-ref/08421b069ef3b27abeb764e8412aa879c8bfb0cd new file mode 100644 index 0000000000..0c597ae556 --- /dev/null +++ b/txscript/data/taproot-ref/08421b069ef3b27abeb764e8412aa879c8bfb0cd @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700c000000003eac70b460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707f00000000d49919bd011e8c0700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac99020000", "prevouts": ["e78610000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7", "39a5100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "267d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2135dfff529a8c82f4e399fa9509c5b3ed194ad634f2dd2a3feda036a1773d4612b49f68f31842330decdce79aecc48c70a85ed65081abd3cb605a7bb4f89ac9cd4c02f64c49cc162ff9325daec6263c98ea78a2c5346e44c6d55d79722c7edb"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361698797c10f7187c2383d0e226dcd2087587d02c12a3e721aa4a470e9466395a9ed12ee2db6918b2bff03768a1c947d0f4fb00a38b9989b1add1650628df27e9913d4be53f363cb6dc14d29c1d7e4819045cdc001ac228b3b700074691e2599d91e402d116972020cc4db8f7e1431e7a7416668817d422dd270400f40dd8d238"]}}, diff --git a/txscript/data/taproot-ref/08630f23c6a755790aea6ed91128183d6ddc8291 b/txscript/data/taproot-ref/08630f23c6a755790aea6ed91128183d6ddc8291 new file mode 100644 index 0000000000..1e7082bf95 --- /dev/null +++ b/txscript/data/taproot-ref/08630f23c6a755790aea6ed91128183d6ddc8291 @@ -0,0 +1 @@ +{"tx": "67740b64038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48b00000000cbcacdbcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a010000009adeb4bedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd9010000005dd15aca02d7dc9800000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac56737540", "prevouts": ["ff1f310000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "d85b480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6f8f21000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_3a", "final": true, "success": {"scriptSig": "", "witness": ["1baf12dd595451dc6e061dc85971849281a59ce923b4dd9e5c71906b5f1aab7ae1ad709d24f63537e368ad07b86fdf8747a3adcef89d5d0ebc19d640d885305383", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["56f2474ee41a5df06a56fb69998211768db21c5418bbb1df3b9baa95b084a65402d9195bb969be51016361e8d7bd3a5a148737533394790b737722145711ba8f3a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/086661b19fe6034d3748295413e2b4d4251157aa b/txscript/data/taproot-ref/086661b19fe6034d3748295413e2b4d4251157aa new file mode 100644 index 0000000000..076bd01525 --- /dev/null +++ b/txscript/data/taproot-ref/086661b19fe6034d3748295413e2b4d4251157aa @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e601000000f77c8100bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf780100000075a884cc0355c5ac00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd9000000", "prevouts": ["6fdb3400000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "f282790000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_83", "success": {"scriptSig": "", "witness": ["f34b66da181de5b1e7cc51a57058c475f7ad24e1d1bb4467c6db55c2faee0bd10e8195367e7f72d51559b0aee8c60eef65d3e1ad6fc11f0df622b437a999653a83", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50d31224d31895d5f93214e389286652f6716bf1e190d51c9b23c1b205b5ba743072b263b80f96f7d373613400c7547c85c9a6c31c55cebcafc8a8c9dd42f67ab9f66679e23e5d1aeca7d76d761fe889aad74eaab38bd9ac5093e43d732ef19131a45721770a4c6fa3892249946f81f8a22ec2b808bf909e9901e6eede46863cd8b1b6893ef793c36e5dfa85d62fef0fbefebd0bad4f9a865cc0"]}, "failure": {"scriptSig": "", "witness": ["2580f77d8bfc0fa5330d36a68d182c3d90a9cb020ddb046a9ceb3486c59bacfd142ec9637a3c90b908fa4fe710e4a1cf75cc11f03547b8f74e130e1c1726e5a783", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "5057a54fbd5d4b07929441b26b64d130112c537fa56ea4ac84c490dc2f4d68a42c3570b5f36314017256e821f3bc76214ef0b973ba2d3f3a3a66e88df751"]}}, diff --git a/txscript/data/taproot-ref/08a0635b26ef56d2f6ddd4c31295a8bbde840584 b/txscript/data/taproot-ref/08a0635b26ef56d2f6ddd4c31295a8bbde840584 new file mode 100644 index 0000000000..41b857f62a --- /dev/null +++ b/txscript/data/taproot-ref/08a0635b26ef56d2f6ddd4c31295a8bbde840584 @@ -0,0 +1 @@ +{"tx": "4cb277ca02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbc01000000987c9ec48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48a00000000ab7f4a8301368b720000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7960c7c812e", "prevouts": ["9c487c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7b65400000000000215a1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["f8715e58be64394a10159f3d1c9c715912297ee6d2210f80979aa46ef71fd8cbac68d41553095afec7b14a4e3f5cc081463aef8d2ce3d98c0e772eae2ab24088", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/08a19ba6422f65b65cacb3f20b5507bca39fffc3 b/txscript/data/taproot-ref/08a19ba6422f65b65cacb3f20b5507bca39fffc3 new file mode 100644 index 0000000000..8fbf37ea38 --- /dev/null +++ b/txscript/data/taproot-ref/08a19ba6422f65b65cacb3f20b5507bca39fffc3 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe800000000f78152b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3501000000776103a803669483000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58000000", "prevouts": ["8c6f65000000000017a9148bc1125bf4e3450c593a5be1ae9a05461832d39a87", "f6cb200000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "8d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829640e65f27972e690b56e28a8f49ec76fed3450565b59143bd547c42619e148d8047789ecbd47ea83af97bdb87f8422a4707031714ddb05eaa38b24e158a7c35"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360a8a801582dd903a75de5904df4445cb714185a34938b03fb7716e9516670c429640e65f27972e690b56e28a8f49ec76fed3450565b59143bd547c42619e148d8047789ecbd47ea83af97bdb87f8422a4707031714ddb05eaa38b24e158a7c35"]}}, diff --git a/txscript/data/taproot-ref/08b5c0ff184e15e9c21e4949e2382b9a71623d3c b/txscript/data/taproot-ref/08b5c0ff184e15e9c21e4949e2382b9a71623d3c new file mode 100644 index 0000000000..9f6d938400 --- /dev/null +++ b/txscript/data/taproot-ref/08b5c0ff184e15e9c21e4949e2382b9a71623d3c @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfac010000005fbc51e78bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ff01000000a025c78004003eb7000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acfa151a24", "prevouts": ["c84d7d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e9ba3b0000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "bf", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db7a6a7e9e2eb861c5b236223f8a0e993b636b19808476c0a20268bf09779a38cc596949c599e703b9191d3ba022749fca5ec33c3492eb5532759cd445d2634b82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365bf71cf7816bf4c839ad04f64c439f60ca1e0c1202f6058d0897192eaa874d9b285ab48eb468144e5e6aa7ce6d4aa75a792c11a68b383289399495d27c15055ecc596949c599e703b9191d3ba022749fca5ec33c3492eb5532759cd445d2634b82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}}, diff --git a/txscript/data/taproot-ref/08b74fd5e5bdcfc0a22933abb14c20399138f612 b/txscript/data/taproot-ref/08b74fd5e5bdcfc0a22933abb14c20399138f612 new file mode 100644 index 0000000000..4c6a4e16da --- /dev/null +++ b/txscript/data/taproot-ref/08b74fd5e5bdcfc0a22933abb14c20399138f612 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf21000000004676830d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41702000000bbb7591260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707600000000094760f703733ebe000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc56f0646", "prevouts": ["044877000000000017a914b1a54d09172ecbb89289f2a670acc3fe14ced9ee87", "4656390000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "ea96100000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_3", "final": true, "success": {"scriptSig": "", "witness": ["d7b6456f201cf74ae23f528fa19076a87cd6787b60d78d7f8cae6ede245595824cce38957e3567f0634717543ddf7bae1e1d4620d2ac610a556e520ac5bfe7c303"]}, "failure": {"scriptSig": "", "witness": ["bc8faa4589338734df135c0ca3414dc0a62163edfc2c51b5f64898a53408c21f74f08cc0e3bf557b67b5f4a11806ccb8b0a65312491d3a627c9569459a9e998d03"]}}, diff --git a/txscript/data/taproot-ref/08cb0cb08cfb93d7ca744dbf018072b119fbc650 b/txscript/data/taproot-ref/08cb0cb08cfb93d7ca744dbf018072b119fbc650 new file mode 100644 index 0000000000..b5ed6a435f --- /dev/null +++ b/txscript/data/taproot-ref/08cb0cb08cfb93d7ca744dbf018072b119fbc650 @@ -0,0 +1 @@ +{"tx": "14fa46cf02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4801000000d70bd4f0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c64010000005783b2cd023169cc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac6b25ab25", "prevouts": ["0c20700000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a57e5e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_2d", "final": true, "success": {"scriptSig": "", "witness": ["7e300717a60ac55fdac518e5d9429f32257a2306c8a1ffdd0330ee8746e70be3277f2adc0f58c46255c40342ea996d06c4bed5d4b5334976cbf2177a1ee4e39d01"]}, "failure": {"scriptSig": "", "witness": ["69677d02c38b008c37dd52c9cd225831df3d9dbadac2bde0735c2f75b27472a945948273eeb2bfd7fb1d854347e7e8750e9cdd3fdd330c1687ff9f0a80e783de2d"]}}, diff --git a/txscript/data/taproot-ref/08cefa50635850a5a6caa88ddae4d4e4c5178f8b b/txscript/data/taproot-ref/08cefa50635850a5a6caa88ddae4d4e4c5178f8b new file mode 100644 index 0000000000..eac052aee6 --- /dev/null +++ b/txscript/data/taproot-ref/08cefa50635850a5a6caa88ddae4d4e4c5178f8b @@ -0,0 +1 @@ +{"tx": "1b7091bf0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705001000000fb6c19bdbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf80010000000a4e7ece028b5f8400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7e7000000", "prevouts": ["8822100000000000235f212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "1dd2760000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["57e0667e28ec049022631f787411974501133ec1fc2911cec719d1de6efc6db1783e2089ab96f7027a37435dd54893aec2a1ee758153f939cfc2a7f48b78fc99"]}}, diff --git a/txscript/data/taproot-ref/0918ed067691e99a0ac65b680c99b8a0bd6d2dc2 b/txscript/data/taproot-ref/0918ed067691e99a0ac65b680c99b8a0bd6d2dc2 new file mode 100644 index 0000000000..3216df945a --- /dev/null +++ b/txscript/data/taproot-ref/0918ed067691e99a0ac65b680c99b8a0bd6d2dc2 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd50000000053f403cadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8c0000000080e6db55bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b010000007bfc680003fe5216010000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc79aa1c358", "prevouts": ["f266720000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "bdf22300000000002251203d5ffb7cd06f5c84b56ec9f73ff7cc3a22b38565d229330748f260d30800c008", "acc68100000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004536ccddef3149683af65c31c85a3c06583d8e56fa5e9b8809ad6476a55251e65fad1faed220136b938a4936a71b98f5f9e86de449242d6a82efdf7a3adba2ae62745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}, "failure": {"scriptSig": "", "witness": ["4c52d4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936455dd346a6e8884f0fb95ea8c71bd7948dbe722bf7c03e38225b2fa9604e199b70b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d8657208959ac4fa8a57d164b76708dc6f63c2efb2484bc5a77a391ceb66b2f5ad6b35f745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}}, diff --git a/txscript/data/taproot-ref/0920b0864e2f856ec01587533e768fdc9f982a59 b/txscript/data/taproot-ref/0920b0864e2f856ec01587533e768fdc9f982a59 new file mode 100644 index 0000000000..007405290b --- /dev/null +++ b/txscript/data/taproot-ref/0920b0864e2f856ec01587533e768fdc9f982a59 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e5010000000f6b49bbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf66010000005e3d45c0020d06a1000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acc2a8f43a", "prevouts": ["777a3800000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc", "e9266a00000000001652142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["2be378d8e07bb734176317b5e7115c5678dbc8a9b591e95bec222e3bd303eed6c64f6ca230a44c3e80ea20e10c772c1b3b65825a41f508baf4cad948bfee4af4"]}}, diff --git a/txscript/data/taproot-ref/092dfb3e8b68e6142fcb0a354c4d02c23428b870 b/txscript/data/taproot-ref/092dfb3e8b68e6142fcb0a354c4d02c23428b870 new file mode 100644 index 0000000000..c9932fc68e --- /dev/null +++ b/txscript/data/taproot-ref/092dfb3e8b68e6142fcb0a354c4d02c23428b870 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2600000000d7f2c4e302b2435a000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7f7030000", "prevouts": ["74175d000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "483045022100b90463b19720a17907e34d06465ad5f60baab23b489b42b0e5f2e1256377f21402205e684ce7490e311ff071e05b8eb208c04be3b4bb035199ced6f6668f6a953f7b2f4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "4730440220412a88fe97f96fe569517b3cabd861be17ea143bf28c30205a0c192a25d8703c022006e1ae891ea74bb35556d88cde9be264e7722e342bfdb5678019d09783d737692f4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/09342cfa6e3461e698ef1f6aceb83fd4a3ccbf35 b/txscript/data/taproot-ref/09342cfa6e3461e698ef1f6aceb83fd4a3ccbf35 new file mode 100644 index 0000000000..97f9ffee2f --- /dev/null +++ b/txscript/data/taproot-ref/09342cfa6e3461e698ef1f6aceb83fd4a3ccbf35 @@ -0,0 +1 @@ +{"tx": "02000000012e09ffdbb2069feade9688806d408b21e4e24b0581b653f6a686a5bf690596fa0000000000436cd2f903305b7ed20f0000001600143f886f8feaf75ad7bedd5713d4d148e7c97c1134580200000000000017a914dfd1018683cfaa440400f061c02b281ec7e8e2d887580200000000000017a91402e53bc18808b3955166f5113b83b265fa421e998736050000", "prevouts": ["12fd7fd20f00000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/keypath_valid", "success": {"scriptSig": "", "witness": ["8736d0e96fabfd24bd45fbc3771242ddb5fa61dc00c00bfac51f0a981912f1b36c103fd984b420028aae849ab44624cb8301d97984442513133cafef4151d6c5"]}}, diff --git a/txscript/data/taproot-ref/0942d800ed811d505130b0e5cca50e722fc4f19b b/txscript/data/taproot-ref/0942d800ed811d505130b0e5cca50e722fc4f19b new file mode 100644 index 0000000000..496e6fde2e --- /dev/null +++ b/txscript/data/taproot-ref/0942d800ed811d505130b0e5cca50e722fc4f19b @@ -0,0 +1 @@ +{"tx": "2a4ba92a0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270680100000050b312a0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6d01000000f7b1108603868a800000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c6020000", "prevouts": ["7995100000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "cdad7100000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000095", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367cbe056fd5524803d39d9d872de87d596ee1d58542b57a2a09fc467d443df29299aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4c1a4178950446608ddf8409535ad79bdd567504e9e3f05b7b17ad70ac9eb9eeed4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c88cdf200e9cb41c74ff1734a224bd622bb601baa19704ac4140592d266c2a7878d069a3e06f8a8ee706e51fefe68609e4a48214bf7e1dad1e46f763a0ae6da54d6fbd68a9aac62cc0fc4848936fa6d465cb32a19d5a751074f74d9c4f7fb368ab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}}, diff --git a/txscript/data/taproot-ref/095bca4fc65d75681b759e14d34e7a5987625ab4 b/txscript/data/taproot-ref/095bca4fc65d75681b759e14d34e7a5987625ab4 new file mode 100644 index 0000000000..3847ca753e --- /dev/null +++ b/txscript/data/taproot-ref/095bca4fc65d75681b759e14d34e7a5987625ab4 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b74000000004fcd769dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9d0100000099219efd01df608a000000000017a914719f78084af863e000acd618ba76df97972236898710000000", "prevouts": ["b816270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5df17c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_5c", "final": true, "success": {"scriptSig": "", "witness": ["47c95e08771f68bb9e4dd1c5cf0be918327f9cedca27ad3ce00ec22c227394ed60b479071b0570e9dc435e6f0d60f84d5beab93fcb4cc18d0c72711ab2a094d382"]}, "failure": {"scriptSig": "", "witness": ["f15e080b96ee4f6a5117d8ced8ef43e304e35c5361937fb427282ddb0df9f539c8acec89cd4740689854b69148286c50ed776429aaa0fc8c4620fcf04e23ed865c"]}}, diff --git a/txscript/data/taproot-ref/097dbe987c217c3d9b230bc0e634a9e3f0bab2fd b/txscript/data/taproot-ref/097dbe987c217c3d9b230bc0e634a9e3f0bab2fd new file mode 100644 index 0000000000..562926b350 --- /dev/null +++ b/txscript/data/taproot-ref/097dbe987c217c3d9b230bc0e634a9e3f0bab2fd @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cac00000000e581b6e704f4065500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48779000000", "prevouts": ["32dd5600000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "187d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eaad0670a1a2805483e1b6119aead8e5c4f5e2d65383350292f138c62bc77d51b80858ffdbef3a81ff8eaeb69bf692b0617d2bdcb9145576d5843e6d9e5e1cb0c"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93658baf989b33fdf7a985d181ac7c72c0e79727fa5bf7d6725e5e076c24bcc85c5aad0670a1a2805483e1b6119aead8e5c4f5e2d65383350292f138c62bc77d51b80858ffdbef3a81ff8eaeb69bf692b0617d2bdcb9145576d5843e6d9e5e1cb0c"]}}, diff --git a/txscript/data/taproot-ref/09b3e7123f40c4ddb240073a912a440a18168c13 b/txscript/data/taproot-ref/09b3e7123f40c4ddb240073a912a440a18168c13 new file mode 100644 index 0000000000..0926934e6e --- /dev/null +++ b/txscript/data/taproot-ref/09b3e7123f40c4ddb240073a912a440a18168c13 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1101000000a081b3de60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127053000000000c7b5fdbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc5000000006f40e899046516ab000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c6030000", "prevouts": ["bf8d4a000000000022512074a4c3567b4c4ece2d1ea256a6bf2f85bf4dc051497bd8ce7ed8816e2d4c108a", "befc0f0000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "19b35200000000001653142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["5dcfa6aa91ce6da49a5c1dc23d4fb246deb6a5a93a275f981169ecd31cdf0e4a4e034b8f7a5c641927ca17720284b3f5e34aea6d9c96f79c6745e63a6fc75369"]}}, diff --git a/txscript/data/taproot-ref/09c225b7d61512e189a466c46243a4511b6eae8d b/txscript/data/taproot-ref/09c225b7d61512e189a466c46243a4511b6eae8d new file mode 100644 index 0000000000..382e1c2c3f --- /dev/null +++ b/txscript/data/taproot-ref/09c225b7d61512e189a466c46243a4511b6eae8d @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6c01000000b9a21ffd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127021020000007ef33ff3034d9e330000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748708010000", "prevouts": ["63bb250000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "75911000000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a922ac303092a6cb80a96afd5c7c243ba2385da8ab4baf3331612d0b9d31d6a7777e5a97eed984c98f8bc097a5ecd26814ddecb354a6d174fd826a31e179fc1bc382eac721f5d77f3709779bcbce4280b42008010e70d0a562a81fa2c4c1b7f7fd5b6fb9181510151652fd5eb41d40f94ed6292d29cb5ce365c2b2d5850a9d03d394d510ef0b1c601e81a235ab43c62f13399d7091a1d57334da623f787f533ebb7fbbf6a5f765e9f04e174764a619fe4ea8fca4ef5e0cb0b0c4f29d680fb28ed99b4258b91f82e5a2d3d59be20d98ab0c1338c62b36ea4038535b61d4d2d177b086aefcb77dfd85712b1617b9c7b1d65cb75d2ca349b739fed1d2abc6ce3bc714c4c1021e3b25fea1c3d07e02d5f12534f4e91cae5160c28094d8c7246fe7c6cf7639eaf5c65825e5da682018cdc3a24414aa77a36768f52e0cf192476ba0c879393c2d1b17cd8b2c32990c74201177ed022f6a9af26b2354fad690e9b23e2a0452dfbcfbed25660fd4e3d3e0c3fd9a9f60aac3b30d60b5ff1bda95d6b792e78fab815a5d25254cb36cbbe93df4ecd777f365b19320f34c1ca884c8c2a8493458a49b851efe928bacc9aaf1b5bf1eb83458a09cfbac7639295f1edf9c7387050c73bc4444bf11964b34a07b30dafa5fb861f7a61c485e83c0dcb6f6799efb743f91f8eafd31e3607a01df8ddc07f645ecf372e81d02bca2cab5a564ed6dca8b1723168fa0df1743c875e3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900451741062de046b8f3bdf7ef41b5db27631c489deab6fd85436806296af4173e7e74166a9b0f1c55c1671126e5eb7d3b70cf827ee1dc762db7ef6404d6cf84ba0da54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}, "failure": {"scriptSig": "", "witness": ["4d090268c590697e1ff9c25d1423bbc25d5b0159c38c30fb65a06cbefed7e0f0791e50aac7b5fc03b5cc8975d160d3594d272235a6fc4521f0f426f479e061e99ffb0caeb42a71b452dcc75b1e8e4f7595a597321e15216349e58c0c79569b8308944cab79ba12ad5355a6e4a0b9ba7f6be89db13cfac2687bdf0507f9bca7395d557c7b437b6be9902e38b4060006fb8219d474e923bb36808c9bc270f037b776888cc8ea3ca7f9b92400a362441778f9e1c8a13c53450a996c6f2e78e5307eca335f33b12e1b0f000de1401cd7f1eb3ad1e988f4db7917af6ad83ad232e9baeec51d4f306a1c4a32023d1570bc8f5e952a2f45211252950663565feda7336528943fcf4a8a7a23ddceae03d91048bfab3bcc4450f9c7cf7318fbe8e29c970938530bc4b80c36570982b27d0055a59311bb49894b286f753ac93681a4c663bfd8cf2b72c0fd2bb68098a8467508dd4220bd75eb2fb67d9399b2c277d936a43b910905fd7444adafd95ed169ca118b00b380a4ad13f663f49d4dc7dfe2b09f56069731ec1749fd2e246a3752d5d27defbab850abb6a5a158044428224d8314aacb93d68e71f4fa4823514537be93d1a65b22f066d2bdb188308cba8a6d04e76b51c0e0731a9f0687e03dfddcd0b0063f41e25fe4c6320ffc2ce7565386c9dea17b6e2257e3224bf000fe59e6e8a35a0cf3847f033b57faaa3def005bb597bf0569bb7a473885f1d912b07e3c7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362dd9a6a816a27714ed943cc25e1a1e39dd34d5569d3490ab6023dfe42a6cba430277e21fac1036469cce09bee47dd6f35fd38d265061a05632a5c9d8280907c6449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}}, diff --git a/txscript/data/taproot-ref/09cd349f59ff286840fb04789da01062c5d83ba2 b/txscript/data/taproot-ref/09cd349f59ff286840fb04789da01062c5d83ba2 new file mode 100644 index 0000000000..a10c6ac99c --- /dev/null +++ b/txscript/data/taproot-ref/09cd349f59ff286840fb04789da01062c5d83ba2 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbd000000008b1e38c6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6100000000422eee7f02753dcc00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac466b3933", "prevouts": ["6b948300000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "7a884a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "fa7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ab5229b48fb31f4aebc56e2dee567bf7ba352c6c3615b44a029752a401ad5af48c1a9074fcf4072701b6c332871422b1ccd41e69925b4b38aff436cff44d889284b3c1002850d4c89a68130d64a5a5ee29d0b1bb458f5120fd1f649ff1c37e66ac496a48f5e08c9a0063585476106fe61a3ff4222f4c7aaafd1f65bf01170e2"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936048c253878ae3aaf7983b8b419d3ff5fe49de177c40f616b90817e056f3cc67b06f1c7e5fb59ec6be7dc8dd9b5e5a9bf4b5e4bf2d4887cde3c9822cca7ddc75b6ac496a48f5e08c9a0063585476106fe61a3ff4222f4c7aaafd1f65bf01170e2"]}}, diff --git a/txscript/data/taproot-ref/09d7f478f35e48679ca5a97a08febfa49d510081 b/txscript/data/taproot-ref/09d7f478f35e48679ca5a97a08febfa49d510081 new file mode 100644 index 0000000000..913235d8f5 --- /dev/null +++ b/txscript/data/taproot-ref/09d7f478f35e48679ca5a97a08febfa49d510081 @@ -0,0 +1 @@ +{"tx": "3995509b02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c05020000006f476edcbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8f000000009096b4e5019114a90000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000", "prevouts": ["0e825f000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "336a680000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_8c", "final": true, "success": {"scriptSig": "", "witness": ["b2dd830aa16a9fd3b8a6d567462260d9063a4956bfcb1980cb68c50acaa289321d9d3311794ff9e589a3352d47652e16e9a2675b0d2d6e41b4e9b235f2c152f582", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1707541a32c6ceffb3038cc9bdbb74596608920000379ed6a93c3ffa61ee638ed6d043198826f277e11431cd2d2fafcd80a191656fc8057f0a7ef98c189cea168c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/0a3e2dd5f11a2182d7b86b927a600bde565229a8 b/txscript/data/taproot-ref/0a3e2dd5f11a2182d7b86b927a600bde565229a8 new file mode 100644 index 0000000000..ee526003ae --- /dev/null +++ b/txscript/data/taproot-ref/0a3e2dd5f11a2182d7b86b927a600bde565229a8 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46b000000000540a8d7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd30000000018732d9204c7b2b20000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5c000000", "prevouts": ["9d083200000000002251202ae35af575feea0dc18681bbd0ec0494b44b5926493fa5426b4858bf97ae878d", "4972830000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_42", "final": true, "success": {"scriptSig": "", "witness": ["8d8c44f14f15a7529f6ebd2573e08047a72348b7133320ea9b5d59bcae5d14810c7d770be878812fbb9c49135ba1ee6658ccf1105a661e74458a2e50ebb2d3b083", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["79db11fe61cced14eef34b841c4b89bdbd475ee0a749a817f406b3acccf937cba5b5568c9a20514887def0d5422a639187d1feca6f1182ca445a9e3d3d547a3842", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/0a9a9a6e04b0e55c5a90ca23c2586a07ae1fc542 b/txscript/data/taproot-ref/0a9a9a6e04b0e55c5a90ca23c2586a07ae1fc542 new file mode 100644 index 0000000000..30dd35e2bd --- /dev/null +++ b/txscript/data/taproot-ref/0a9a9a6e04b0e55c5a90ca23c2586a07ae1fc542 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6f01000000928f47ca60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c1010000000276321b048f28600000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc1683433c", "prevouts": ["d36254000000000022512055d32a9b44ee6fb3a2a0e7e2d6444c6afa4ce43aaa0c5357064383c70ed0d31b", "3f930e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_6f", "final": true, "success": {"scriptSig": "", "witness": ["b9dfa6e4602a68a3e727e8b6324c65adf31bfb0e849554f32e1be32860dd177e4feee48b1caad022448907a02332badc78c44661afc503291886d71fe448dc3f"]}, "failure": {"scriptSig": "", "witness": ["58f5560fab5895e3dd35ac7aa23d8113b7de0cb2df256b3a4900aa5264e93995bc5e4a3c7ea6f86156bf998769485bdbb30fd2725359835bf7a6be8336454d8d6f"]}}, diff --git a/txscript/data/taproot-ref/0aaeeea67c9e79315c703c56429535fd670ef5aa b/txscript/data/taproot-ref/0aaeeea67c9e79315c703c56429535fd670ef5aa new file mode 100644 index 0000000000..8189e96bb6 --- /dev/null +++ b/txscript/data/taproot-ref/0aaeeea67c9e79315c703c56429535fd670ef5aa @@ -0,0 +1 @@ +{"tx": "564957d90260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702a000000004dcc25e160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b100000000af182efc0194a10e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac93b72d3e", "prevouts": ["5f160f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cdd10e00000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100c370e2d294552c952dc54982c7ae7b7a1cb9feb56ee6637a5d18bd4bd3464cdb022040d6bf05500243fb6f1587b4aecdcd16bc12175e906527753b114b2b09e2d5bb81", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["3045022100cdc6ed9006971e967d7e22567ae7c9a89e580bc255cc7964cff1711f982d907d02200ed8f2b2d8efce97aef9c01a0e687c51fdeb267560b261f1893b6f9094ab89bf81", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/0abded429f191b0375a464688f06bd465af7c644 b/txscript/data/taproot-ref/0abded429f191b0375a464688f06bd465af7c644 new file mode 100644 index 0000000000..ef58b6d79b --- /dev/null +++ b/txscript/data/taproot-ref/0abded429f191b0375a464688f06bd465af7c644 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd20000000060f33779dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b70000000001ed470278bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ab00000000c60fe4de03dd71ba000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987a6000000", "prevouts": ["e3725e000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "5044260000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "2a20380000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000097", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692bf74884f2cec72519997a0395ff7ca30fc290a0cf462789b3d1378cedb3028ff42e4d873fbb915aa5b42e254ee79c6fd372778836ebbd6336959492b60478df213b900f5cb66b025bdcf0538d69427e8f93cfc9741b2125e61cf9215fad53f373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51064e90022f018e8cc473163b262248813e3dc7e43f487ab53623d6c75190b10b282285524a15c732567d099967405d35f7136f74f48f011bc4ab279ad8d14f14"]}}, diff --git a/txscript/data/taproot-ref/0abdf3a09f88ee47573f9509a323dfd8af89e021 b/txscript/data/taproot-ref/0abdf3a09f88ee47573f9509a323dfd8af89e021 new file mode 100644 index 0000000000..98eab7adea --- /dev/null +++ b/txscript/data/taproot-ref/0abdf3a09f88ee47573f9509a323dfd8af89e021 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b48010000003a3e7a78dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbe010000003e008dd90464f34700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875b04d52d", "prevouts": ["f08027000000000022512090f7a6000b5d616b8fab8dbf93f0441952f14900faa8700280033be77a40eb2f", "ef642300000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360089274d47cee2433e5e796e01aa5462b16341b60f863914d1ab1664c5146ca6"]}, "failure": {"scriptSig": "", "witness": ["6a54616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/0ad139668541c092541da58168e6488a1191ff58 b/txscript/data/taproot-ref/0ad139668541c092541da58168e6488a1191ff58 new file mode 100644 index 0000000000..bb511e42bf --- /dev/null +++ b/txscript/data/taproot-ref/0ad139668541c092541da58168e6488a1191ff58 @@ -0,0 +1 @@ +{"tx": "065bd6d102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4500000000c1b6cdc160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270180100000068d0aff1028cb48f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69a350326", "prevouts": ["373e83000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "e4e50e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b6", "final": true, "success": {"scriptSig": "", "witness": ["123416c4147c380e906aad495a06009aca12b8565d91b82769dab30b07b158043193ba7b36e47cc6017d2cc0c14454b0717af19d028c93d14a229a0ada13d5dc83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["281271137238ad2d3648e7b2f38adf379f9a8348bb23f2e000a68e8eb60bb1f9c60c6fc56b7bcef23fb9a90a32ed376974f9ed75e88119cda3209e35b1001e46b6", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/0b0a37b5c9ef3c034545cbefc3e8de97c8b5ea05 b/txscript/data/taproot-ref/0b0a37b5c9ef3c034545cbefc3e8de97c8b5ea05 new file mode 100644 index 0000000000..b22508b1d1 --- /dev/null +++ b/txscript/data/taproot-ref/0b0a37b5c9ef3c034545cbefc3e8de97c8b5ea05 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb501000000739790e5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc401000000d48d3cbfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c06010000008bfda2e203856df3000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6a988fe22", "prevouts": ["3bb34f00000000002251201aa53d82b3e96e8e01ae5203880cf5cebef0e054596b6f65010b7ca42a314e33", "5cd8500000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "7f6954000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d34c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08279688f26c44e4c38ecd8996ded351dfac291f6a9fe2ce500158a378a1caa9ee2234a5a049dfcee5b69ebdb7c70e6242c675d1abc9cd58c84d7f9a8e8e1277a43a4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361dc8d6179080437d4f90682873ed4bbb3e32e9d0e3b60c87db9e5499f1f336eb272895df1c355058834787a12b20ffb756990efd77bd7ff75ef6e99c81f77af73e02ad6eabd24d4d247e98c297de2a9d81d67e55d72d4ddf06c8e9a23565ad8a003e045cb689fe4fc6de332c618eb0cdce02c2dd8aae7c6dd6f70bdbaede2814"]}}, diff --git a/txscript/data/taproot-ref/0b0f9ae5467a2c8d14e86527b264cacbf4871500 b/txscript/data/taproot-ref/0b0f9ae5467a2c8d14e86527b264cacbf4871500 new file mode 100644 index 0000000000..40c9dc4243 --- /dev/null +++ b/txscript/data/taproot-ref/0b0f9ae5467a2c8d14e86527b264cacbf4871500 @@ -0,0 +1 @@ +{"tx": "6f7d0d91028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45d0100000075023faa8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e9000000009cb7bebe0114cd4600000000001600149d38710eb90e420b159c7a9263994c88e6810bc722010000", "prevouts": ["db1f410000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "a72f42000000000022512012d5e5f1356f7dd71d8fd34dd655f0d6117e8d6eac3bda425a0cfaea0a76750b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369c9aed3dfd11ab0e78bf87ef3bf296269dc4b0f7712140386d6980992bab4b45"]}, "failure": {"scriptSig": "", "witness": ["6ab3616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/0b37dc29cfcef1377a94a17297a0525504b5a9d2 b/txscript/data/taproot-ref/0b37dc29cfcef1377a94a17297a0525504b5a9d2 new file mode 100644 index 0000000000..3d0eddfa12 --- /dev/null +++ b/txscript/data/taproot-ref/0b37dc29cfcef1377a94a17297a0525504b5a9d2 @@ -0,0 +1 @@ +{"tx": "f0b08b4f02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cae01000000806254d3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1e020000004cedc9fb03ed11cc000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7962c010000", "prevouts": ["d7c14f0000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0", "2f8c7e0000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "9d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e5cb645b004d221127868eb317b35b9739fc590ddfdd834a11f89e113e113367cae2f7927e5cc4d53e0e18212acda8d85e01e1da74473232947322e5e96654c18"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ebf8cf3051908396d96a16e21f9fb14717dee7b5dfac112f56d0746b9362fe4375cb645b004d221127868eb317b35b9739fc590ddfdd834a11f89e113e113367cae2f7927e5cc4d53e0e18212acda8d85e01e1da74473232947322e5e96654c18"]}}, diff --git a/txscript/data/taproot-ref/0b7236484ffa4dee58a006bc3b9e51c30e5cc903 b/txscript/data/taproot-ref/0b7236484ffa4dee58a006bc3b9e51c30e5cc903 new file mode 100644 index 0000000000..70cb074d96 --- /dev/null +++ b/txscript/data/taproot-ref/0b7236484ffa4dee58a006bc3b9e51c30e5cc903 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703300000000690e42c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42102000000816bc2b260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f701000000b4d361eb03c83c6000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcad010000", "prevouts": ["3f56100000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "e9274300000000002251201d9d7b8068d804e3524a88462f1a480f3f4200cc7b90f0ee3c3216cc2f53f488", "35100f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "success": {"scriptSig": "", "witness": ["c3bdcbe1e2eff48c1048119be70323e738c75dd92578275c35365df43298c550b2dda6b6b2b09bd7632c973116077c46a123119dd6e043a0a058b1f87f78ebce", "6c4b52258ba4ef018a012f1db18fb5ea51005404280abbe8a32968c2ea51d3a32020031152cf733f2339e64b25fdbf77a33f9b8badd61eaaa8119b677964c4ad3cbd8dda42dab5e7295cfe65d7144ee8d59407a370bf23ee01dfda5df2d8f85d909a0a8e1b7745cd9d262d7e0252b9946f82bcc303562f54da29200f73d62faac9b2d00f15e99d676cd1f41bcfc5d52eb9307c894b898cdfca520665", "7529dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32506ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368c6f1ab0f60b6d27d4740b7424952ec5e9b4e6c3a2634fa4afdbe60332efe621ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000007b784d38a23b40086bfd8c053fb648544285a5c3cbd31b2ca243e62da1e820f4d41d47364315281464bb2bc7e133a14da7f761774864f1526404216e30be056404fb8040571c8f889efdf519c29ee8c0a22a7589e5342bca315d8ad264c09d6181feb0b0d6f40f12ef28a31a1b280bca1a116bc974608e4ae0f1bcecebf03cba00000000000000000000000000000000000000000000000000000000000000007a3f7f1ab29d05ddd347dcc7928b7367ebc1a4a1546562a00473f7a3c6cbcf0d9cca28d02b3bdd251e8552d7a0e9bb8c63d0967d76f6715e9dbcbc94651ddcb8ee680609b7aff51c1d9aa75ba6b47d666e0e92bc9a9ecc88a92a0e7a60ebd9bb00000000000000000000000000000000000000000000000000000000000000000df841a0ef8b8bf0fa3a48e28b09185afcffbe67dfc208294fa46558aaea9415c9df80e4514be4fbb7dba4245959f5be6017d29074c75e2c025d0e2c8f61cd95f8addca2ed8f6529a558a9e3e01e14c00915d486cd0ce24bbb8280d9a2eeea26ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6822ed0c934c780077812a8ec4675344f31d0a1f886d4fca11f71b2ca8ffcc8effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffceee2ef00c3d39f074722549e72a39677df22e78e46c2dd38db485fa08abbdda1dfcbe42a832838b98369f674b9bf3dab730221099e42598963bb1e0a9d40262ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000986680564d03774fa0facae89091f858d1d206ac28b6442ee070bf6debcfce9ee963c61d1ba7029aafb57abcfc927e0e76cf93ff7e4bdf08fa3af38940687ec6e6015be418b3b5609201008328468dbec4d16a3ec5e289fb31b9a775a88752932c4f85be333f315015496ef30778a90f2134bd87da0b96578b16fc6d615b3165c03ae9316f70f8f50e03e4c06f46bc55efad0bb3f658852384a046dbf03e93c591ae2675a823ff8de9db76fbd74c25c4e47124311c1654e04acc45adcd3bc2614472c0326c6920b128a30a578c540b1cacfef48f13a605e93cef8903921f66d7e1001240797f76542ccc4aabd7691b1ee1b4ef21ba5e005380b8fb1fd83103ca4100379d987e2db9374b325e0b2892820f7d08d1d9003f65e8c1ae4d916fb24569c5c7ec9f5a881a9544e2ef1ca88d8200ec3a90a62c9dafefc9ac3208a6269e323c5129a1675cddc59abf4ded8cdbe6b8aff4d9e31c8f684cca885464705324fd838fc5cb3489ce7914e1d1331abf3fe7d5c7473c146dbb911f0ae07f59172cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f5d3fb6127668f215b35bd94a716148714d264d9f7708148d25263d273655262b49dfa124fc488476ac7626decbd7a81b514bb187f144a81d3367ea5957474992128d9f9761238fec5926078ca9b3c7ef3fc7beca4b235226aec32709e100929027c07512a6b66469b7e23bf7c50a5dcdef7b1cd0447a1120e120cabd0301557707a40774284bc5a91b179523bdc301a1f9a4b134e0331ee2981ba97b0220c2f10c5e5b67d2ea7a8766da934bc52528f141bc45f12c2e8511208a0675192b6e340899eb1ebe25dcf532599528649fe7631e08c2ce875b5ecaa85015253d44500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27a5f874f01ba2df25b9511937f5c10357cbc3e6e2951c9caddfad0dc241792800000000000000000000000000000000000000000000000000000000000000005eef2440bb5a7cf4aa324e6fc40dac1c0182f24c80a5c50562ea024c388931840000000000000000000000000000000000000000000000000000000000000000280e73ce9d3d72fcca33d93965c67a6cdd83c054d246b63c29943fd2a9e19b09b4f4e017fabf8fc9c60acbbd0c1b2eb6870fabf36ad94ab2bfce6642becf84d084e13e8ab30ce81e1bb15a0e1f5ef6389cc07dc736259391d6561a2d1a6b63404ff00ed246db6aabe5a34518eb4889d9746b8cf0b6f10fb7b680b1bcfb37287bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff055bf56685ee9d33b04a565cd01cb749eecf681703e571753a2fd5b22428b617bc3b2028f448e7c6fb7c22a9da463f596c6ae2e7669db52a643f05a5976b2bc7e96479f87b60ec38e71f5d4045f98ddb819af129b686fa6572dd44cf13a26b3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04277e44a2347fc589673a4e101d4e013919d466cc2f9bcdc39282a85bb1af3b6431f6ac3f92296b33895064cffb34d6b60018b1d6685ebf84eac8699265b25c8b369c92418c14fd791117af0af3fc64fe9d0cbc6e5e843bbd2390cb0ca02e4aa26345d5eb934add1898678e0d0b4081797b53ec31da25a14fd8b510975dbecd24b915103d0b4a531b061c9eec6327f7f05aaf1e3a89a2adcac086f27946cbbaa6895484aab65e0743a3cc784df53820909e89b476f8f3a85f6ad3713308f35f2cfba897bf57159d95ccd5f2cec2c594d28258370c0303f640d8fccd39ab063e93a44a62fd53d3731ffad2fa26c2ce73e0b36b3bd7ef4fd5a3cd4c69b35680159205e1be6536802c983896b3dbd280b06ecb74db1f5d2baf7320094bda793815e4888c2ada5b687bd36343aee249fd77b989aeaca24c227b661bdf9919065a8f836041c27ccf576251836af5bd9c4d806dd1165f181f422fe7b4c2d9f10a5e4059b4b5b3464a70695e6004bb5787d12c865e1da166bdada7f1d1d10b3070095ad5af93cca42812d207e2fdb48159701b1bb0d5c8c8e9210201242a69a2d4cd51ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff125da1aad2c202d21a32b894e3857da7ad2189b92cb138de5b6153d142aa257a22ae748312c68ec7b05d89fe5087425449a1a155675fdb83a63f66694ea52bebfc90693be6fc486612871f3dd6f8840f974a3ee1922c6a48f3db1c3cb643a6c5df2c37540a97e6aa1dc6dc2dd7e7edb85dd5054d81a1c8352e9ad78dbfa251910000000000000000000000000000000000000000000000000000000000000000089d59173070797e1b39b3c6f38ae7b617efc5c3e535584906eac6067af77dec06333f9ef7783bacfc4a0598596da0415a64d1b1d460970a14f994c49cad20cbf94a26d777e3f8395245d7e45d69a7b24add08058f9afb66e0b72b2e844295452179af02a00d22a0716bb98d17b1f581846be6977b94adf16d34c58a460c9d90bc66952187cbe572574d5fa7fa37948e674c3e12fc0f56259f41d53d70870d1dbe87ef145a49b30cf99cd5c12f5a63181ce2d0922a48bfe122c173e2db2cd86279727aaf8e7d1abdd10d982bb935ae0d282f4d24f255880eeb7b4f6556ea10acd4be89eefafa9548d8cb15e567afd7e9e326516f2446055635c5785a047dfdb900000000000000000000000000000000000000000000000000000000000000009d47d33a5dcbc6bc50dde0ab6e957b0102659febd9b30c4e8ed5ad7bb42705bf4bbae6057afb128115fd12c8a0dd5c67fe9a016ce6b155b77b6efee28f99975abe22cd3c492cd082d1a84ca8041f3032b68e143b8b9ddfa1a4cebe7f2a0d896a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aab68dcb9ba5edb99dc0517a9d37ac3076680f101ced4036d50cdedca6e0877827c27d16f862a82a428bb0b917d69dbd78889f1ae7ed0e594f256ef4dd479a12abd741f4708efe323f9e966c96caed925e1df30bd844885b2c3d806e5ffc10239a13faf0d6e56d28a23f9ba1c3387da4bf6746ada8253a9d6151df5afc000fa77b6494acc6e4d9aca8357cd000055100454321aa8e821258e9a1fa2960ee17369590f39e8ef5ebbaf9f91dfee92fa1b301db1dc60a7a1ac91927f60508c423e586cb40cb20a4a0626533d56de0654e1664972d7151ac8d8c45ced1506b3b346a0f4f2e58b9d1eaad28153d39573ed50df12b59f5ba7c7d420ccb80227634d6e319fd65d1e7a090f83adb53bc53675c3d4ba2f1c5448737c58a088c16d078aa4f11780ce817ee436fa8709654ceb1c8ce1c5c30cd69176c52903e6c3dd897061263355d6173acff5b589da6745f344aa150b9f389de40f7400804dcd7854a30effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20cd59322096216580c07d7431e7af7bb4d2841ee7d7c4baa62b1da2319b92b4647602476d791a2d2d5abc6749f6d39198577c033841894cc538a7aeac19f336ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18dd9c054d018cb9e0a206e26446c6a13c5f0d8f9edcd56d5e402c5e99852ce609ff0d0bb4243e2a4d92d91a75c6db1152fb70760fa5c459ccb964b8599aee06861524c109334956d92b085d4d08da511f01b056feb57f71ca31257e7b596f7ddd434a83ea2c94897d047a1e0441c0c7210e06b7bf406ebe45ad1b5dac562e01598333715708e7e879880cd37b489c40373a9cb8fbcf74b53c7113aa62a4b9761938bf78928c88e2e9005ceb2136af4b8a299f1f8687a3c503b54853231beeed1ca9fa27ee78aef8ab74aec366a7ddc5c4aad3a38681a7b57665aaa99f0e20d40000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd03d954b5fb6eb9295ae6377a00573071aee29ac5bfc401a20de905bc07c7069803355c54e8ed96b7552b2f89f26b961f92e9063bcd5d151aac93adcb5c84604ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}, "failure": {"scriptSig": "", "witness": ["c3bdcbe1e2eff48c1048119be70323e738c75dd92578275c35365df43298c550b2dda6b6b2b09bd7632c973116077c46a123119dd6e043a0a058b1f87f78ebce", "89cd78a9a24ab161bdfb8555cd6bdcd8547095eadcf6d7f9a872e85ce0e7a153e7ca5269b3e885c337c715754e10c296e55165af6321fc25d9db26911daafe5034f4c469bc49e66357902f484a4dfd6e7e9a188afab10fd9e58ae1701e494e138b4bc4620b8901b58171541767e6edfc214471825ebef0ff58339ee66bc5eb869f20f5d613f6ebeecbadbcfa86ab66d5e5e6276e2e719b37849342", "7529dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32506ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368c6f1ab0f60b6d27d4740b7424952ec5e9b4e6c3a2634fa4afdbe60332efe621ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000007b784d38a23b40086bfd8c053fb648544285a5c3cbd31b2ca243e62da1e820f4d41d47364315281464bb2bc7e133a14da7f761774864f1526404216e30be056404fb8040571c8f889efdf519c29ee8c0a22a7589e5342bca315d8ad264c09d6181feb0b0d6f40f12ef28a31a1b280bca1a116bc974608e4ae0f1bcecebf03cba00000000000000000000000000000000000000000000000000000000000000007a3f7f1ab29d05ddd347dcc7928b7367ebc1a4a1546562a00473f7a3c6cbcf0d9cca28d02b3bdd251e8552d7a0e9bb8c63d0967d76f6715e9dbcbc94651ddcb8ee680609b7aff51c1d9aa75ba6b47d666e0e92bc9a9ecc88a92a0e7a60ebd9bb00000000000000000000000000000000000000000000000000000000000000000df841a0ef8b8bf0fa3a48e28b09185afcffbe67dfc208294fa46558aaea9415c9df80e4514be4fbb7dba4245959f5be6017d29074c75e2c025d0e2c8f61cd95f8addca2ed8f6529a558a9e3e01e14c00915d486cd0ce24bbb8280d9a2eeea26ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6822ed0c934c780077812a8ec4675344f31d0a1f886d4fca11f71b2ca8ffcc8effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffceee2ef00c3d39f074722549e72a39677df22e78e46c2dd38db485fa08abbdda1dfcbe42a832838b98369f674b9bf3dab730221099e42598963bb1e0a9d40262ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000986680564d03774fa0facae89091f858d1d206ac28b6442ee070bf6debcfce9ee963c61d1ba7029aafb57abcfc927e0e76cf93ff7e4bdf08fa3af38940687ec6e6015be418b3b5609201008328468dbec4d16a3ec5e289fb31b9a775a88752932c4f85be333f315015496ef30778a90f2134bd87da0b96578b16fc6d615b3165c03ae9316f70f8f50e03e4c06f46bc55efad0bb3f658852384a046dbf03e93c591ae2675a823ff8de9db76fbd74c25c4e47124311c1654e04acc45adcd3bc2614472c0326c6920b128a30a578c540b1cacfef48f13a605e93cef8903921f66d7e1001240797f76542ccc4aabd7691b1ee1b4ef21ba5e005380b8fb1fd83103ca4100379d987e2db9374b325e0b2892820f7d08d1d9003f65e8c1ae4d916fb24569c5c7ec9f5a881a9544e2ef1ca88d8200ec3a90a62c9dafefc9ac3208a6269e323c5129a1675cddc59abf4ded8cdbe6b8aff4d9e31c8f684cca885464705324fd838fc5cb3489ce7914e1d1331abf3fe7d5c7473c146dbb911f0ae07f59172cfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4f5d3fb6127668f215b35bd94a716148714d264d9f7708148d25263d273655262b49dfa124fc488476ac7626decbd7a81b514bb187f144a81d3367ea5957474992128d9f9761238fec5926078ca9b3c7ef3fc7beca4b235226aec32709e100929027c07512a6b66469b7e23bf7c50a5dcdef7b1cd0447a1120e120cabd0301557707a40774284bc5a91b179523bdc301a1f9a4b134e0331ee2981ba97b0220c2f10c5e5b67d2ea7a8766da934bc52528f141bc45f12c2e8511208a0675192b6e340899eb1ebe25dcf532599528649fe7631e08c2ce875b5ecaa85015253d44500000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27a5f874f01ba2df25b9511937f5c10357cbc3e6e2951c9caddfad0dc241792800000000000000000000000000000000000000000000000000000000000000005eef2440bb5a7cf4aa324e6fc40dac1c0182f24c80a5c50562ea024c388931840000000000000000000000000000000000000000000000000000000000000000280e73ce9d3d72fcca33d93965c67a6cdd83c054d246b63c29943fd2a9e19b09b4f4e017fabf8fc9c60acbbd0c1b2eb6870fabf36ad94ab2bfce6642becf84d084e13e8ab30ce81e1bb15a0e1f5ef6389cc07dc736259391d6561a2d1a6b63404ff00ed246db6aabe5a34518eb4889d9746b8cf0b6f10fb7b680b1bcfb37287bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff055bf56685ee9d33b04a565cd01cb749eecf681703e571753a2fd5b22428b617bc3b2028f448e7c6fb7c22a9da463f596c6ae2e7669db52a643f05a5976b2bc7e96479f87b60ec38e71f5d4045f98ddb819af129b686fa6572dd44cf13a26b3effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04277e44a2347fc589673a4e101d4e013919d466cc2f9bcdc39282a85bb1af3b6431f6ac3f92296b33895064cffb34d6b60018b1d6685ebf84eac8699265b25c8b369c92418c14fd791117af0af3fc64fe9d0cbc6e5e843bbd2390cb0ca02e4aa26345d5eb934add1898678e0d0b4081797b53ec31da25a14fd8b510975dbecd24b915103d0b4a531b061c9eec6327f7f05aaf1e3a89a2adcac086f27946cbbaa6895484aab65e0743a3cc784df53820909e89b476f8f3a85f6ad3713308f35f2cfba897bf57159d95ccd5f2cec2c594d28258370c0303f640d8fccd39ab063e93a44a62fd53d3731ffad2fa26c2ce73e0b36b3bd7ef4fd5a3cd4c69b35680159205e1be6536802c983896b3dbd280b06ecb74db1f5d2baf7320094bda793815e4888c2ada5b687bd36343aee249fd77b989aeaca24c227b661bdf9919065a8f836041c27ccf576251836af5bd9c4d806dd1165f181f422fe7b4c2d9f10a5e4059b4b5b3464a70695e6004bb5787d12c865e1da166bdada7f1d1d10b3070095ad5af93cca42812d207e2fdb48159701b1bb0d5c8c8e9210201242a69a2d4cd51ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff125da1aad2c202d21a32b894e3857da7ad2189b92cb138de5b6153d142aa257a22ae748312c68ec7b05d89fe5087425449a1a155675fdb83a63f66694ea52bebfc90693be6fc486612871f3dd6f8840f974a3ee1922c6a48f3db1c3cb643a6c5df2c37540a97e6aa1dc6dc2dd7e7edb85dd5054d81a1c8352e9ad78dbfa251910000000000000000000000000000000000000000000000000000000000000000089d59173070797e1b39b3c6f38ae7b617efc5c3e535584906eac6067af77dec06333f9ef7783bacfc4a0598596da0415a64d1b1d460970a14f994c49cad20cbf94a26d777e3f8395245d7e45d69a7b24add08058f9afb66e0b72b2e844295452179af02a00d22a0716bb98d17b1f581846be6977b94adf16d34c58a460c9d90bc66952187cbe572574d5fa7fa37948e674c3e12fc0f56259f41d53d70870d1dbe87ef145a49b30cf99cd5c12f5a63181ce2d0922a48bfe122c173e2db2cd86279727aaf8e7d1abdd10d982bb935ae0d282f4d24f255880eeb7b4f6556ea10acd4be89eefafa9548d8cb15e567afd7e9e326516f2446055635c5785a047dfdb900000000000000000000000000000000000000000000000000000000000000009d47d33a5dcbc6bc50dde0ab6e957b0102659febd9b30c4e8ed5ad7bb42705bf4bbae6057afb128115fd12c8a0dd5c67fe9a016ce6b155b77b6efee28f99975abe22cd3c492cd082d1a84ca8041f3032b68e143b8b9ddfa1a4cebe7f2a0d896a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000aab68dcb9ba5edb99dc0517a9d37ac3076680f101ced4036d50cdedca6e0877827c27d16f862a82a428bb0b917d69dbd78889f1ae7ed0e594f256ef4dd479a12abd741f4708efe323f9e966c96caed925e1df30bd844885b2c3d806e5ffc10239a13faf0d6e56d28a23f9ba1c3387da4bf6746ada8253a9d6151df5afc000fa77b6494acc6e4d9aca8357cd000055100454321aa8e821258e9a1fa2960ee17369590f39e8ef5ebbaf9f91dfee92fa1b301db1dc60a7a1ac91927f60508c423e586cb40cb20a4a0626533d56de0654e1664972d7151ac8d8c45ced1506b3b346a0f4f2e58b9d1eaad28153d39573ed50df12b59f5ba7c7d420ccb80227634d6e319fd65d1e7a090f83adb53bc53675c3d4ba2f1c5448737c58a088c16d078aa4f11780ce817ee436fa8709654ceb1c8ce1c5c30cd69176c52903e6c3dd897061263355d6173acff5b589da6745f344aa150b9f389de40f7400804dcd7854a30effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20cd59322096216580c07d7431e7af7bb4d2841ee7d7c4baa62b1da2319b92b4647602476d791a2d2d5abc6749f6d39198577c033841894cc538a7aeac19f336ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18dd9c054d018cb9e0a206e26446c6a13c5f0d8f9edcd56d5e402c5e99852ce609ff0d0bb4243e2a4d92d91a75c6db1152fb70760fa5c459ccb964b8599aee06861524c109334956d92b085d4d08da511f01b056feb57f71ca31257e7b596f7ddd434a83ea2c94897d047a1e0441c0c7210e06b7bf406ebe45ad1b5dac562e01598333715708e7e879880cd37b489c40373a9cb8fbcf74b53c7113aa62a4b9761938bf78928c88e2e9005ceb2136af4b8a299f1f8687a3c503b54853231beeed1ca9fa27ee78aef8ab74aec366a7ddc5c4aad3a38681a7b57665aaa99f0e20d40000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd03d954b5fb6eb9295ae6377a00573071aee29ac5bfc401a20de905bc07c7069803355c54e8ed96b7552b2f89f26b961f92e9063bcd5d151aac93adcb5c84604ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}}, diff --git a/txscript/data/taproot-ref/0b727481698d5b6e33b991da896215f0527335a6 b/txscript/data/taproot-ref/0b727481698d5b6e33b991da896215f0527335a6 new file mode 100644 index 0000000000..b8d96b9f42 --- /dev/null +++ b/txscript/data/taproot-ref/0b727481698d5b6e33b991da896215f0527335a6 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43c0100000095415d86dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6b00000000d4fe448802e1715d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2708ec21", "prevouts": ["fc1c370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6fad28000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "final": true, "success": {"scriptSig": "", "witness": ["33aef750cbca2ae70fa4e61a360cc74cdc5845f7220478c5ae24ba9e7d58d7c3a64c1537ec8bf5da3564fbe092ed4323ceb447b28be659e0f810ae1a8d43d4a283"]}, "failure": {"scriptSig": "", "witness": ["7e73988dc4ea242eb936f608260ffc3407d458b61f57777a861d37f87d509ab7a0e2e1f452b647e6c5abb4e1c564d5d3641f6751b2c287deabd310b62320e2bd83"]}}, diff --git a/txscript/data/taproot-ref/0b931370dfff16b9e6d9a7a333e61cabe23290eb b/txscript/data/taproot-ref/0b931370dfff16b9e6d9a7a333e61cabe23290eb new file mode 100644 index 0000000000..271338e77b --- /dev/null +++ b/txscript/data/taproot-ref/0b931370dfff16b9e6d9a7a333e61cabe23290eb @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd800000000a44e63dd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bd00000000160a5735025a6d7a000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787fd27fe2e", "prevouts": ["f38748000000000017a914b0716f1bec91d4758ee97d9063c9da884dd2ba5287", "ebc33300000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "165a142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["34f6449f6b7994f1e4e3219f28990cedb1f93d63779bea56e3a89b87d7096db705989fd4d740a69b9a1c7711ed50e63e8519ba2af37c4169369cebc001f3bc62", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/0bc98deaaa9007629b3338d906d73f87abce0b62 b/txscript/data/taproot-ref/0bc98deaaa9007629b3338d906d73f87abce0b62 new file mode 100644 index 0000000000..7440b574ec --- /dev/null +++ b/txscript/data/taproot-ref/0bc98deaaa9007629b3338d906d73f87abce0b62 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709e0000000047e9de70bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf36000000000931f20a02e0517500000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc22fbf46", "prevouts": ["e25a0f000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787", "c8216800000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100e41de8ee7baef7958dfed81c9982dcd8eeb37dcf13eac0d81f9d7273de1797f60220664d2178b377acf8205a7f9822f533751109e595a719e8852a63ee20397e93b483", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100e661b3b0b5ddae11ce0764751e22e523fb243c6337d707e4f0d75865a39dd56b02206892d0fc8790325387265ed6c293867991ab8edd6ce3d1a4b6d09bdd2de9af3783", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/0bf313616424ee4fc95cf71286563567fc87c472 b/txscript/data/taproot-ref/0bf313616424ee4fc95cf71286563567fc87c472 new file mode 100644 index 0000000000..787bbe2b0d --- /dev/null +++ b/txscript/data/taproot-ref/0bf313616424ee4fc95cf71286563567fc87c472 @@ -0,0 +1 @@ +{"tx": "85ad78690260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701102000000aa846bd8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bce00000000353636d60413b23000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870a020000", "prevouts": ["b39f0e00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8", "28aa2300000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "c57d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e80f62f511a5f57d359682e9bf2433f4757cbd4acbee5d7e6d55377acbc6e694247b7f3ebdceab6737726d3802236d8368ee483fc4ea684d1523b8c26fc56452a37def1cc2232d9b1ca5244635fcf6779cb15e82fb856baa2ca11d8fd1da35295f"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936969f17f40163001b57522e1bfe2b5fe7c0c4e62446f9d2c84d4738fa96391d180f62f511a5f57d359682e9bf2433f4757cbd4acbee5d7e6d55377acbc6e694247b7f3ebdceab6737726d3802236d8368ee483fc4ea684d1523b8c26fc56452a37def1cc2232d9b1ca5244635fcf6779cb15e82fb856baa2ca11d8fd1da35295f"]}}, diff --git a/txscript/data/taproot-ref/0bfc8b69a3702ac6986ce61b00e837a148e7d0eb b/txscript/data/taproot-ref/0bfc8b69a3702ac6986ce61b00e837a148e7d0eb new file mode 100644 index 0000000000..29eecf9491 --- /dev/null +++ b/txscript/data/taproot-ref/0bfc8b69a3702ac6986ce61b00e837a148e7d0eb @@ -0,0 +1 @@ +{"tx": "1af00c3402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd0000000006c00f6ad60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705401000000ca7050f7032c0a5f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796a3093b4e", "prevouts": ["bd14510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "81c20f0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_9d", "final": true, "success": {"scriptSig": "", "witness": ["e8b301698cc8fe10b9fbe252e7025e9d5fae59b7c9332f8094b1fb5439874ddcfcb7e04c95749504a7a69af462581849c82c2fb91813911755ad8a69171bed9e82"]}, "failure": {"scriptSig": "", "witness": ["66d5a75332f4785db4ee435536e7d33848897633b18efac07ce703c2389d3229093cbc9316acd88ce6f4fbaaef4bf20208fac4dc3fc52874598fb6312bb841ba9d"]}}, diff --git a/txscript/data/taproot-ref/0c00a8351b02f2185ea30aa4052174b38417e0ff b/txscript/data/taproot-ref/0c00a8351b02f2185ea30aa4052174b38417e0ff new file mode 100644 index 0000000000..763d275aa8 --- /dev/null +++ b/txscript/data/taproot-ref/0c00a8351b02f2185ea30aa4052174b38417e0ff @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cf010000002d86ee8cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba5000000005702dfc60407903000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a627000000", "prevouts": ["e2b60f000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "91282300000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09022b246878ccfab611754d6f0642f8b2cb1743063978de071b35b7d288c79916a2736cc63b07a7a2a623acfab6f6ce99322b728dd44be021e2a05dfb22735ee0db9a0b70734036bbae9f90c9c020ccb4cfec0cdfb447931a5bb6cf69a54b661ddd5a8a8eb5b10c22718fbb64c69fd23c8198bfee2a421f9fbc353e319404dcab1183126d0898eb2e878a22f820faf6b02afa4c6aa6fe27eb87ca09de15a4eb3478653fd9637a31a0789434009a5d941dce685d6bbefefc6ed96ab72a2f939056ef452d6fa2f0aee639a4e12fb8703ad7c4c99db7fda84e84b4db551f1b4d679effb3fee16e090d7bc0b866e427e6046d0d057a378c7c898655df882c5eaaab5a59d76105e4db7cb76f5dd40da1505350d1cbc02c3d968c5c0d63e44bcc1bd30313f8668001a4d781890cc43f89e40f4c01f3df0c06e241ac05a748112d53767656678aece90969fef87e164368b2a02c44d3e4cf70b791e89c1e287dc003bdd572cae39bdef823a3da7582de538e3588fae69c9f46cbaf707dec9e6894c59176bc4a191dfd8a0b183f3eea93e158cc9f4ebb2fbab1087b1bb4631fdaf784fbadda48c584a417a2406f1fb2d0fd4280b67535663fd16e801468f8d79c68f25a3034ad2b446c0fa3c1a75c029c023fe03b3024d0a56235dd82dce941fefc81de07c0f875c8a59fc3c2b08b0841fdd86126678193c958181b601f2a1e88a1db0f88ab1065fc26082a366c1a75", "447d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ec655510ef0d78e24844d6e76597a80e81981a8d7f61dd7bc99fd53b1a11d65f7b6e2c095a2b9a1b3d0ba71ae2a36fa91117ca9fadc253f03c0f98f0de350244f357c04ffd5ab4b0848fd0bc62a9916d6f879ccec8b8201b6b82c9f83bee932"]}, "failure": {"scriptSig": "", "witness": ["4d0902d1c3622916b19f90dff3fd08a32465ce6057e3e59a06f4f9bff5830bb2204f732fb5d7bff9f5f6c3bc34b05a8b0674276f6d9910c78549a811c9c1d89842450dcbefb5d20bab5322d4474366a7293452bb3e277818a640d21da6725fb83aa6178d9358d5b7eb8da717809359fc8b381c54fdb83c35317d3f431e71803ec40173c4772358e35f45b9a73194308d79fe4f8c1ffc2e1ec676218a1952ea879da4da627bfd40c547983ee773305840fb91010378336d9bf23d7aa56cd919071db2954f59be64ceb03c20b4fddd8d7c81fa7651a0e91e146dbb85ced0f938a7ef5a55a512540e93e43d9c4aea55f04f9e4ceb3760cd4139c0bbd603ee6d1ccef5bae116d8d7fda24639efaad8a10e8f22ba59837ef3fc532ccc0c8fcfc5993ccdf681bc7c6f51b74f1eadebb63bd985cff13ee775278dc5642155e018c74b197a64931642d0212f588ca0959ba21fe82c439023ed1f9f6e57c4ab4636e37bde1ae08b5c862699ea27bb1c6ea362c7fd3a8b58ccd6c6af15b9d7433f07d4ee36824b0f844f20f531353d39022ca8bc7ca6236eb8d1bc6f9cb3dd9ec058ff9a4c64573517d919ea871e3623e082accb43f52b68323aaecb3e6f9bf019e3873a0032d7cc09c84efd42675bbd1d7a0b5ee6a02c39d0455434a9a84697f566eaffac800788ee96014070564542f0e257b979630aa897fa25fb4567592bca45eacb5514439e89d4d823ce952e776275", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936443b7e89d84dba416b5c010b3eec3635a6b8b3ffa01e53435da8d448fb39e6ccda290f4428e3e675f4a51c1ca36b5af7f0162ea7962d369252b53cfa5e2a91134f357c04ffd5ab4b0848fd0bc62a9916d6f879ccec8b8201b6b82c9f83bee932"]}}, diff --git a/txscript/data/taproot-ref/0c02f78d8dd01b33e94abaa865ee6a9792f4ccfa b/txscript/data/taproot-ref/0c02f78d8dd01b33e94abaa865ee6a9792f4ccfa new file mode 100644 index 0000000000..780bd6066a --- /dev/null +++ b/txscript/data/taproot-ref/0c02f78d8dd01b33e94abaa865ee6a9792f4ccfa @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb501000000739790e5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc401000000d48d3cbfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c06010000008bfda2e203856df3000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6a988fe22", "prevouts": ["3bb34f00000000002251201aa53d82b3e96e8e01ae5203880cf5cebef0e054596b6f65010b7ca42a314e33", "5cd8500000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "7f6954000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936207372de628be21b0016a4467a52ed3274bee00d5b175bb5f0264e63299a675141d10d6c1f57e693407bbcd98ddd5bf64931b5565c89b36e50f161e759967c3e172c8da9bdd43b70cbab8912ef1aa7926e5ad7e47a4f7b71ac936200cc947dd0f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936557fb8112a3a220373d52cc4c89c6517a2e1720c5885e0e17f2a0be351c36a81ba89d18ed67dd3d5d559101471702e4f2e7d1e8ead8a22feb9e78f041b8f409f5c55ad82284641cab824687b45d4293ada5fb8cbfc4ac19bcb5188e4cd0a7708cf37d2bf9ac9d65f4f9542d60f6497573c04b4d7313f44a5c611386102890a1c"]}}, diff --git a/txscript/data/taproot-ref/0c043c49e6d5aafcf072e6be1be89160111fcb16 b/txscript/data/taproot-ref/0c043c49e6d5aafcf072e6be1be89160111fcb16 new file mode 100644 index 0000000000..92a42f04c2 --- /dev/null +++ b/txscript/data/taproot-ref/0c043c49e6d5aafcf072e6be1be89160111fcb16 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47e0100000034d6f85adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8200000000012c3b33dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d000000008f19ffce02f518ac000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987d0010000", "prevouts": ["baec39000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "d7d2500000000000225120b982c4866c93df3772712b36d4336b477e2dfe66f304c80c21f6bc33f20b8495", "8ecf23000000000017a91418261fd2fa0b0480c86b918607add1dde9f7026a87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93645312a56de4d39a275ea41c23c7e6772b7c82cab6a1b0100cced3b0664f6f1e8"]}, "failure": {"scriptSig": "", "witness": ["6a0f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/0c10be31ac329baf66d4d083563e6a9c3ab9ee59 b/txscript/data/taproot-ref/0c10be31ac329baf66d4d083563e6a9c3ab9ee59 new file mode 100644 index 0000000000..074624754f --- /dev/null +++ b/txscript/data/taproot-ref/0c10be31ac329baf66d4d083563e6a9c3ab9ee59 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba000000000a4dea4a4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c51010000001e406ea960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e01000000c86dabae0117a21000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac57020000", "prevouts": ["0ca3270000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "d08c4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "08ab110000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "8b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362494f98453d8de8230306fae5264b7e20094fd005457c4d9c992af615d79de60493e40fcef10fde3df13bbd1c2551f58461e5d74b1e1953624615bb6f8ad2778f2e441b555c43a724b579c479d380c278f8ccac4217fbfdcb96526a1dcd96287"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa726c3b29d073c2dbcf72056f4f7511ea796d648b755097daf6738edf6332d6d84d7dc2c55a7521ecc297ff7217b922438f95dd9c29c118a2bf5c9e2c8f8c84f32a50ac17afa49989b8cd5fe09550e31f987b9afab4d6ff7fb0ac42074cc4b38f"]}}, diff --git a/txscript/data/taproot-ref/0c12817899b35dadda1aee2d0a376b1e6fca73d8 b/txscript/data/taproot-ref/0c12817899b35dadda1aee2d0a376b1e6fca73d8 new file mode 100644 index 0000000000..15ab7ad434 --- /dev/null +++ b/txscript/data/taproot-ref/0c12817899b35dadda1aee2d0a376b1e6fca73d8 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a010000006c9b93db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d601000000fcf1a38ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b33010000009c6a06b504e4ebae00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987182a0b5d", "prevouts": ["29c3530000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "0ffb35000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "bcdb2600000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "cf", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365e0e9a175fda05a064c52eebe8eea391232a608d343baa66a1ca563d1b6babca6a7a52674f359a7dbed67a49e09732132053a9cde77eaa564fdce3cafe7738b9f4a62e14d7fc4acbfb0196ec29a60565ac2b3043dda4cedec8cb1ff291b90d41"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ba852db044cc7b3c6c227af3aa09dc9e9bae5367030e3f2be29afb15f97933d48121d7901a27ea565e1cb6f91818c43a3dc8f46dc56db80c8bd3776430739107a653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}}, diff --git a/txscript/data/taproot-ref/0c2099a1366325dfb20d310e00b1c1554e93defd b/txscript/data/taproot-ref/0c2099a1366325dfb20d310e00b1c1554e93defd new file mode 100644 index 0000000000..864867d2c4 --- /dev/null +++ b/txscript/data/taproot-ref/0c2099a1366325dfb20d310e00b1c1554e93defd @@ -0,0 +1 @@ +{"tx": "1b2bfb8902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b780100000008eb22ab8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42600000000c4deaba3015955540000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc74506636", "prevouts": ["1b791f00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "c7163f0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "747d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c1c1cec2ec4a702b027c32afe8f050a7abd6c53cc1a056033971ea23441aa0d3133f027656d2d9f64ade865091a06c0b2adab14558eca27c91472397a1e3806e077aea6ccf316b47e40a0e3636c5ad4f7738b9bfce630d4a478a0dbfcb51ed93"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e86e257627f53ae21a01782ee3e7d4da03b01bc19a25fdaba4c8a32b8ecf0a2d91bf4492fa00dc56072e72009d776219274bea6eb51adb458249eab71940c27cb4bfbb1ef2412aee06f4b75b9e20a72d4d9707545a4ae77abc538f76b00105406a"]}}, diff --git a/txscript/data/taproot-ref/0c4d9a60206c9ad9b61b6120b3b5495408989e96 b/txscript/data/taproot-ref/0c4d9a60206c9ad9b61b6120b3b5495408989e96 new file mode 100644 index 0000000000..7772d1dea4 --- /dev/null +++ b/txscript/data/taproot-ref/0c4d9a60206c9ad9b61b6120b3b5495408989e96 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9d00000000e8af27168bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41900000000f499c33c02627c86000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac0e38aa56", "prevouts": ["e39f5100000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "229f370000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f568", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c90e280e1421574cb54e7318c63431e4a1edfed926b25be9229483f2d9c0035299ead232f95c20736c4ca28d40406922684ff7a84c70e432a4f6a4d4d1893c4694e361b142bccbbefeea6ac26126d4f4fbb610699e3a27d96f99d1b67de22f2f"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb44041dd00c04bb207a9f54805a750c9f5dad18a896c6f9e3a7e4fce73f8863b3a94e361b142bccbbefeea6ac26126d4f4fbb610699e3a27d96f99d1b67de22f2f"]}}, diff --git a/txscript/data/taproot-ref/0c6dc14de0b80f72306e015b7560fef8a12f722c b/txscript/data/taproot-ref/0c6dc14de0b80f72306e015b7560fef8a12f722c new file mode 100644 index 0000000000..ba1412348e --- /dev/null +++ b/txscript/data/taproot-ref/0c6dc14de0b80f72306e015b7560fef8a12f722c @@ -0,0 +1 @@ +{"tx": "9a9e95db02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7c01000000d1dd92ed60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b200000000832b678a025db336000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdfa28c60", "prevouts": ["c1f3270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a348100000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "d67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667d27b234150b851a84a9914325267995d8047a4d411fd05a1678f70c40cfe2ef0c0cd32dca2782b49e872f77a6f41a631e1b6bec2669bf2370bfbcbf3d4a769630d95c26588949f1b3ae4e4e429080b434b995fa18047406852c727cd9e6feb"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e14394dbc4504b599527b31ae07292f4c811cc2f9bd5ea2479c58248999356efb1986d7e8e27273be987a3f59c249d736830c7b6f9b487df38f4ee68bd2c5d06630d95c26588949f1b3ae4e4e429080b434b995fa18047406852c727cd9e6feb"]}}, diff --git a/txscript/data/taproot-ref/0c860ba9e47e23ac7ceaaa948e710e0253317ad1 b/txscript/data/taproot-ref/0c860ba9e47e23ac7ceaaa948e710e0253317ad1 new file mode 100644 index 0000000000..f98ba148b8 --- /dev/null +++ b/txscript/data/taproot-ref/0c860ba9e47e23ac7ceaaa948e710e0253317ad1 @@ -0,0 +1 @@ +{"tx": "b96146fd0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270aa00000000012841abbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffa010000002b0920930287757400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac12010000", "prevouts": ["3995120000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "1686640000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c64c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456a39aac74ee3f63949b9c215c515b0db1b113f4639b3fb19cd99ba22ff01310c728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}, "failure": {"scriptSig": "", "witness": ["4c52c6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936818d75448986f133fc28c6b1d0348e731f044a1050c9b39e3bfbc63da577cd23d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514a68ec639edecebbcc441a95b015cfc7d67c6cfab51cac7643a880d3dd4163fb31e5a3cd6e337eb252bd8d7a8d95e14a531fbfbee4d245debca50b247e512ad1"]}}, diff --git a/txscript/data/taproot-ref/0c90542e3f64cf4c09f66ad39471bbed839d46af b/txscript/data/taproot-ref/0c90542e3f64cf4c09f66ad39471bbed839d46af new file mode 100644 index 0000000000..fa9020fb16 --- /dev/null +++ b/txscript/data/taproot-ref/0c90542e3f64cf4c09f66ad39471bbed839d46af @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b00010000006626179d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dd000000002f9f28d801c65c470000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e70cd67b4d", "prevouts": ["308e200000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "e53e310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f868", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e485f1c41272271fc4c80a4e35cc3d5c00c2bf0a9cdab1f013c35398e076f7021ef28805a30acff873fd9260c6b3bfee2b626467fb0ce04f716d513a8a4b08b6f288028cdab461d62f9273620b97315e6e9af9458f777a616c1bade2d3f6a89e"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dafdffa5bee5fc279ded3bd906723ad31de263059c45567130a0992fb7d0cdbd7103c9e8ba836cb8a4e14cf2cfa4f8a9b341b4f4aa6fb02102628b5e7003f327891e44dcd1430a53a9228b1d4df01e5c5d5af3846f876ba8dd78ee7e669e7153a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}}, diff --git a/txscript/data/taproot-ref/0c91906e6830ed3ad8eba843f2cd7c66205a7981 b/txscript/data/taproot-ref/0c91906e6830ed3ad8eba843f2cd7c66205a7981 new file mode 100644 index 0000000000..40e670861b --- /dev/null +++ b/txscript/data/taproot-ref/0c91906e6830ed3ad8eba843f2cd7c66205a7981 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa701000000f7176d97dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce401000000c70bcbe401c58e01000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ef01641e", "prevouts": ["75707700000000002251202eded5f58e3549770351ff682af5b38d1de1354573522cd8f1060c49001c6d0d", "9d5b480000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_keypath", "final": true, "success": {"scriptSig": "", "witness": ["16160f61bd77a762ef82e4095012cf3118ba7418d282fe9279dfb2ae4f7d693c7ea94e29333a27523c9a3f18ee8ffaac7d31e8b48f3bbd61926b9626b107df7a"]}, "failure": {"scriptSig": "", "witness": ["16160f61bd77a762ef82e4095012cf3118ba7418d282fe9279dfb2ae4f7d693c7ea94e29333a27523c9a3f18ee8ffaac7d31e8b48f3bbd61926b9626b107df"]}}, diff --git a/txscript/data/taproot-ref/0cbaaae8f169bef4c71cd090d475e96cc8277741 b/txscript/data/taproot-ref/0cbaaae8f169bef4c71cd090d475e96cc8277741 new file mode 100644 index 0000000000..b8ba35eb8d --- /dev/null +++ b/txscript/data/taproot-ref/0cbaaae8f169bef4c71cd090d475e96cc8277741 @@ -0,0 +1 @@ +{"tx": "e1a1f69c02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0100000000f91c71a18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e201000000d7f6cca303f3e29600000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac8b000000", "prevouts": ["b9075d0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "61e43c0000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902e8a82e148e674b2da678756ef7fb3acef7ecdd154992e611b612eb1b2efb3449ec1b6a8174731a6ba3035ed06be8afe3ad4b039a6672ae22c4dbf7617b657e942c89a5194237c2876f0381c2093ce5c84b28cbbf2d88dd8c9038b546232e5aaf505c62194008985a89505cad0a266920a70240182ce14ea47ed784ef3891c68e165a5775cd18a8b1d026edc92e0a6cf58342f06caf5fc8715d42278c86a19f3e39e8e3a656dbc7d3264018a1def62fd260c09823b98ba7aa4e8567076651f6dbccebe5977814d9cbbf01140db39bf4e8aa41bed8665129ee1747003ab3a39f100fe9f9d37bc6e267b1222119bc13ef2acb57ddc9141cdf61b82f7ccb22fd1bdb9df397ca497e35a2acf590d6e7c674c7a72ae700496f096a3b106a9476b6ea98c6654bed94bfeb5c5d40b03026a2d0cad6bcf4744c55b2c80807f71b482d931c31f18ecc0d8d8f938652c343644908705107365043ff7468c39e3698b917e27fb105b6bc860d5c7b3b3ffcf8ff27d85a2acfeaaad608711a640a8758365786ff811f14c7f1fd0d0decb048993991248fb14f95798a302e2f7813bdf53cf82642c98139ace206ad5d3a50655487312cb5002fb5370a9dd7098d850e4d92bca151d8d0a56adb316f1ca237c94dfc5ff5faf3eb1b883ed6d003e04aebf430d79a2e94c46699c7156ab4111d765567ecf018e327c64e2ed97165d0637c3f1a40bf07753ee8265c7d0108c875e2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a469bfc8de16b0968070038325e6b76e7740524a1c4ae3d3f158ce1e63cb3bfd7c6ac6071aeb5642f86cbd8c403a36f49b1ae971c310fa0b2c6d23cdcc52f9ae3b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["4d0902225586b6f5d6e8a902e3ce91f256d235da38e7af3589b6ca4267db6a9170910ae185b2288cb83df651604ee1c06cbe9441d9db43e9eeef8366211f1ce6118b1860ddeed47d85513c0869b7314dfae66b9b3bf8c56b89495bc0edaa2d2f870ad00810d0d8cb8d83936fbcb629bfdbd4f8f8873e7cfd9b8909ab4649b3a93ec0238431593fa55e651fc2761590e52a7cef87d85df33c77e90e17134def3174737627a06de1598c60c2d883191aa38f06a432634e67c61f82a64364d630a906fb7f4ad51b7d4d318a363d4db840aba1d3c4db976be94a5a2c14d06f96c17cff6dac09de4fa8833bd7daf42a9938ec99dd14448cd736ea953d494fc6afa3eecf6d480f03e9fa62c785f10189b8a1c2062a5fd3ed1eb4adc01faa2fa96835ddefd92877dc23bd33cf2515d42a0973c017dddfa1adc52e8ef4fbdafd8002ea281876092dc60340423567c4d57c8a4233f0181119be5660629949b951511b208cd490f1a8ab965a14639b5831ef164f091e608c30bbbd1193742fc04f2c6201dec6d3c928bf4fed3d2f0daaa308e11c92cb0a09e622302f625d828ffd47b6df1214f6f56fae3bfe22b9c1a688816baa12ae2056baa1b470e951118338061135a876b8bb739a8b938bfb57cd7bbcac51b8c3fef9088526db58eb21c49eb3e0f32ed0fb85acf5b877010f2809c83f31c280ba0a5a9a7ad8bc57be5ba11b4aef41afb988a7de5d2c8d40267bc4d77561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045b0bd2b339cdab1cb752df7db1bf10e0fcc4b57fed7d380ff50ba3a0b4b018724b77966166a359aa5541e77c34a58fd9dcb7d88ef6e7e0cd0e140e1adf959d28b"]}}, diff --git a/txscript/data/taproot-ref/0cfce5f569e35c19633d12676981cda0b47a34b9 b/txscript/data/taproot-ref/0cfce5f569e35c19633d12676981cda0b47a34b9 new file mode 100644 index 0000000000..b297114606 --- /dev/null +++ b/txscript/data/taproot-ref/0cfce5f569e35c19633d12676981cda0b47a34b9 @@ -0,0 +1 @@ +{"tx": "2cc56a15038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49a00000000ec9501e6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7b0000000043261ee960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e100000000823f43cc013ca96b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487b5010000", "prevouts": ["c1243f0000000000225120036cd49b0a5a8928de04f8e04bd3da02711fbb4d9053aeba12a20cf11cba05b5", "bb6f4700000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "cd9e10000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "6f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361835f9abe9a741de0e36f4900df38cc6cd8be0480d341e9b7353c9d58c608762796126e2d69a152489172163b4bb3b76a5285668b37fe09a10764d2324ee4a01a6ef766bda57b4717926485a86d332fc460fd2733e6a54825f17015621dd4290"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936702c3c7c1f1da03c8b27f2bc575737070d61786cccc09f33c0640d21457e29b546c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa250e9882e2e133b56af40caa5e77ecf964d6e28c7a51ea626a8db4d1e1f7bbb4a3f8f9fe88f0f431b5ffad473abfcf1c4b340e1c7daa1232bf4c86f035b8cc51"]}}, diff --git a/txscript/data/taproot-ref/0d1dfc0136b588b721884040ebf5911514ebb74f b/txscript/data/taproot-ref/0d1dfc0136b588b721884040ebf5911514ebb74f new file mode 100644 index 0000000000..2c8b7541f8 --- /dev/null +++ b/txscript/data/taproot-ref/0d1dfc0136b588b721884040ebf5911514ebb74f @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270250100000036c4ee558bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4510100000070e54af860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ac000000007953921f012baf0200000000001600149d38710eb90e420b159c7a9263994c88e6810bc727afb653", "prevouts": ["de1d1200000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "bbba3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "781d120000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e8", "final": true, "success": {"scriptSig": "", "witness": ["8b12312a5336aadb74e8201a2892680091c451ad34555b44330dcecafd075fca2da0d6a1cd039c82ea25ec0a66e7321a99d0d437c100510dc0d7465a3513524281"]}, "failure": {"scriptSig": "", "witness": ["9b7c20852b9e943c263b2e5c0e100b643ee71ef8ff2416512705ff4ad0dfecc3b9c439cb01f62ad0920375dfe13d746068a161571a51eb3bf0b41782813854bde8"]}}, diff --git a/txscript/data/taproot-ref/0d25d4167a2171b28beda354bc7a6b814d718e10 b/txscript/data/taproot-ref/0d25d4167a2171b28beda354bc7a6b814d718e10 new file mode 100644 index 0000000000..2f008d6447 --- /dev/null +++ b/txscript/data/taproot-ref/0d25d4167a2171b28beda354bc7a6b814d718e10 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc900000000f2275ef2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caf01000000fc57e8f90367dc99000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acba7c1440", "prevouts": ["6647510000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "52934b000000000017a91418261fd2fa0b0480c86b918607add1dde9f7026a87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "6c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a238d55badf8acf8a76486c1c58a90ba61d2c17882158465b124e563f4a2674d94fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e872a8a6de95a80dc4a6e95ba0e12854eab511c8acfff04c6cfab0ff55ad6b178"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab66e6e50f0e23344b2fb4fbd1c94b97eff6a18e7892810f712f9b1a97473dfd5b22591e944b414d99fe534a482351afe29b8e90b07993fb7f3f85b72380ca5294fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e872a8a6de95a80dc4a6e95ba0e12854eab511c8acfff04c6cfab0ff55ad6b178"]}}, diff --git a/txscript/data/taproot-ref/0d265e43ba90ce1827ee538563c6a293b0b03ff8 b/txscript/data/taproot-ref/0d265e43ba90ce1827ee538563c6a293b0b03ff8 new file mode 100644 index 0000000000..38276c6310 --- /dev/null +++ b/txscript/data/taproot-ref/0d265e43ba90ce1827ee538563c6a293b0b03ff8 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2a0000000037452ca28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ca000000003ed3dc9a0168c22d0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca639323d", "prevouts": ["1e6c240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "06ca36000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/minimalnotif", "final": true, "success": {"scriptSig": "", "witness": ["6cc2577c611c83d4bf802fbc3817b2e24f285d3c2b707bf9a36769626d6d62cceebf765a634aeb628f611fb164807f6a3f075f63f717fe5f32193ffcd2ea0dc5", "01", "646a6720871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5e13cad19c924f09e742cf01d7e012810213f06b075da864011776c4e0e33ce5afd4f5a80fdb0e775e9347ffe0d8d06d20821e8392839b829c29e03cf24dd39e09e6d21873535d25ffee6834466c284ff42ef82d8fa2fdd706d38dd213905035c198717912f4b406e8d3b313d97c1127d1135c371a850790824e04061625b9d13fad9f6d66cfea14ccee2f27c94687462e60c93097e3ddae516a269438c7ee5497178e22127db6c7f8f175fff2d2055fc4c08a025732ff7ea1096ec159efbddc6f248e0af5869f80622f637a3edafb79d72487846d4b0589ad8df1e49d86b58ae982564b911df2d2fca61beb75f1ecc1a3526592822acf1cb81afd4e2a93f13b7dbd0c12ffd99a2b3242b359ecbd2060409f001c89f4f8371cd210f37fc35c4b1df78360227d44f218f9c188c83f404e81070c2440736b5601340b7fe06d3b1bec47189a7be4ffc0056c3ee876b2f14785a511ffb40f655d5a8b5fa356d4081558c155b0d7e8c00e6282b2c83a0b7370731ce99ff8996d6837e990d84e1874f60a177a028d5b32d1137467ad00d3419299404906e230dd6a3cb22ab6dff4f06738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["6cc2577c611c83d4bf802fbc3817b2e24f285d3c2b707bf9a36769626d6d62cceebf765a634aeb628f611fb164807f6a3f075f63f717fe5f32193ffcd2ea0dc5", "03", "646a6720871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5e13cad19c924f09e742cf01d7e012810213f06b075da864011776c4e0e33ce5afd4f5a80fdb0e775e9347ffe0d8d06d20821e8392839b829c29e03cf24dd39e09e6d21873535d25ffee6834466c284ff42ef82d8fa2fdd706d38dd213905035c198717912f4b406e8d3b313d97c1127d1135c371a850790824e04061625b9d13fad9f6d66cfea14ccee2f27c94687462e60c93097e3ddae516a269438c7ee5497178e22127db6c7f8f175fff2d2055fc4c08a025732ff7ea1096ec159efbddc6f248e0af5869f80622f637a3edafb79d72487846d4b0589ad8df1e49d86b58ae982564b911df2d2fca61beb75f1ecc1a3526592822acf1cb81afd4e2a93f13b7dbd0c12ffd99a2b3242b359ecbd2060409f001c89f4f8371cd210f37fc35c4b1df78360227d44f218f9c188c83f404e81070c2440736b5601340b7fe06d3b1bec47189a7be4ffc0056c3ee876b2f14785a511ffb40f655d5a8b5fa356d4081558c155b0d7e8c00e6282b2c83a0b7370731ce99ff8996d6837e990d84e1874f60a177a028d5b32d1137467ad00d3419299404906e230dd6a3cb22ab6dff4f06738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/0d3ce2afc206b93ee7c40177e168a295fc3e5ce0 b/txscript/data/taproot-ref/0d3ce2afc206b93ee7c40177e168a295fc3e5ce0 new file mode 100644 index 0000000000..8f9a68b225 --- /dev/null +++ b/txscript/data/taproot-ref/0d3ce2afc206b93ee7c40177e168a295fc3e5ce0 @@ -0,0 +1 @@ +{"tx": "4e4d1dfb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a100000000b81df2cbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcc01000000b1bc72eb0373d0a700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df979722368987c51ca14c", "prevouts": ["558933000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "ccf77600000000002251209d7a18923cf92d77a70864db68b8be9c97fe6f327eec6aa2ee3bdf40725ab507"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "677d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a77b70c46c994a01ec5a816124f61e0f5d1b89a7d1384137283c1b5de2b508b62e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdbceae773fe677547a5f8be2986f5e4c7dc436c0d3f0e1e86711aa468c8778215"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8687eac120734a03ae4c27d3bf57e4c4c383799b8e878ebb1c20141d650e89e9fbceae773fe677547a5f8be2986f5e4c7dc436c0d3f0e1e86711aa468c8778215"]}}, diff --git a/txscript/data/taproot-ref/0d4d3db873cac71185de9e2fa4462b2f3ba96462 b/txscript/data/taproot-ref/0d4d3db873cac71185de9e2fa4462b2f3ba96462 new file mode 100644 index 0000000000..03f0df434c --- /dev/null +++ b/txscript/data/taproot-ref/0d4d3db873cac71185de9e2fa4462b2f3ba96462 @@ -0,0 +1 @@ +{"tx": "64f4e4390360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707701000000fb3218d8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ced0100000081e9f5b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcc010000006137ffcd047b7d89000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6034d4655", "prevouts": ["3d9412000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "be405700000000002251208ab07249a1fdfb04b130308cc651220c9430f0ee7d7b49fe0191e15183fe6b9a", "277321000000000021571f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363885a0e92cd4b057c16daea5a7b83b3e63537af4017f46a840615a8d8f567c1a"]}, "failure": {"scriptSig": "", "witness": ["6a0a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/0d5ecc8d0c063c2641c3a8e7adff9ecb0323914a b/txscript/data/taproot-ref/0d5ecc8d0c063c2641c3a8e7adff9ecb0323914a new file mode 100644 index 0000000000..2deb0bdc81 --- /dev/null +++ b/txscript/data/taproot-ref/0d5ecc8d0c063c2641c3a8e7adff9ecb0323914a @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff6010000004f498f07dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c860100000008441211dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7700000000fe3bde330149db9a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9fec5531", "prevouts": ["f6da7500000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "dde94700000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "c6d94e000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3043021f0da3297ff19fb04fa25e2c5bf6bc43816cb2b39db34d5f6754ce62b442aa9d02201b5faaf44a89577cbf13388fb8b09930622afaa54109768373b23b0d57bd6e3283", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3045022100961fb8ba71e716ed2972f15218c42ccc4efab8bc86f2fd593fe50a367952c1a502201b7c7cfb759576779c636d74992adea9355ca1646d860f7bddc563ef13f1f0b683", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/0d65edb0c2f57a76df2b15cd2c722b18edffbacc b/txscript/data/taproot-ref/0d65edb0c2f57a76df2b15cd2c722b18edffbacc new file mode 100644 index 0000000000..d768c0c125 --- /dev/null +++ b/txscript/data/taproot-ref/0d65edb0c2f57a76df2b15cd2c722b18edffbacc @@ -0,0 +1 @@ +{"tx": "01000000012e09ffdbb2069feade9688806d408b21e4e24b0581b653f6a686a5bf690596fa01000000008f67898d033cb5fd8a1800000017a9143fd5279308772d81081a68d882f81a7ac08fe1d98758020000000000001976a914d2eef9cb56b74880f063df7305ec01f0b8fc540888ac580200000000000017a914dfd1018683cfaa440400f061c02b281ec7e8e2d88771c9694b", "prevouts": ["3083ff8a1800000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid_unkleaf", "success": {"scriptSig": "", "witness": ["5685a450002b7722b67ce499747bfa853d11943563381312add9b974d99f5729b4e2bf51310826d839a461cf795eefc85bf51bec70a9d1e523ea6b733713db5e", "20cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3ac", "c2cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3cbfc5d7464d6f9932fdfbdb59ed04135d3da1fd24a1d97149f3f9fe8acd746e901c94ae67cd857f8f23543b618b38154b6c0432568bb8cf7638fb55d4cc0a24e"]}}, diff --git a/txscript/data/taproot-ref/0d687e26341ba489f3d7be5d0b46f4beacaf8358 b/txscript/data/taproot-ref/0d687e26341ba489f3d7be5d0b46f4beacaf8358 new file mode 100644 index 0000000000..0bef61a9c4 --- /dev/null +++ b/txscript/data/taproot-ref/0d687e26341ba489f3d7be5d0b46f4beacaf8358 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4da000000006af8c3e060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270870100000017873a89035f27450000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcfe030000", "prevouts": ["2887390000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "a9700e000000000017a914381003aa1ce42a7df73f2dd1e6e78ae0a36c6b1c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2172fc08f39dec38a16acdaea6f2fb40d915f4bcb39aadc0ac96def6ea8d2de907407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6d5e8883e00432528415be42327fc5a4a6375200eeb9467b263c8c2a6402f75ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2172fc08f39dec38a16acdaea6f2fb40d915f4bcb39aadc0ac96def6ea8d2de907407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}}, diff --git a/txscript/data/taproot-ref/0d6ac2e508ad66fe5e2ceb784535d11ee75cbe2f b/txscript/data/taproot-ref/0d6ac2e508ad66fe5e2ceb784535d11ee75cbe2f new file mode 100644 index 0000000000..f609b11eb0 --- /dev/null +++ b/txscript/data/taproot-ref/0d6ac2e508ad66fe5e2ceb784535d11ee75cbe2f @@ -0,0 +1 @@ +{"tx": "7aa1c49802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf23000000009585a1b7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b88000000003b0b69d601c2a39000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3b797542", "prevouts": ["9ed88400000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "440b1f000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93623ae85726644c2de015503b238f6d2ff3873dd043771b87773ddc298654b0280d81cfe71594e1389c7dbef12605d87c33af6e429193e755ec800f4a6d58e14260941252319b1d0989c3ca3905f2d65278f17fb3ebe6fd71301329f8e450b42a05a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b1651a3fc1c4e1b7c3cd67236d38206903995e4c6229f7d3322c375e330dd9b093e484a9e3a7c57c3845514d142b984218effb649d9e5eb3f309ab706810aa991d26af6ddceab3892536958f1ea20dd7b885ab499207106c7decaa6511a0e4c5a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}}, diff --git a/txscript/data/taproot-ref/0d75732bc24cbac5dc017bb967142c5648d55bfd b/txscript/data/taproot-ref/0d75732bc24cbac5dc017bb967142c5648d55bfd new file mode 100644 index 0000000000..2e9f2346e4 --- /dev/null +++ b/txscript/data/taproot-ref/0d75732bc24cbac5dc017bb967142c5648d55bfd @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf201000000ce5eda9bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2f010000005618a396bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0701000000427c408b01084841000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487d4145d56", "prevouts": ["24fb4c0000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "4f8a7600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "3763820000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/invalid_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}, "failure": {"scriptSig": "", "witness": ["611b77aec8c3a0a873ddffa29ff90e034dd6060c5f5aaf0c8a2dee2209879a02adbccd1d3853d9a166e6c32990b621b313362b69b5974a03ac89b352ee5e433b", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}}, diff --git a/txscript/data/taproot-ref/0d89c8dca6b7a1af5614348af7dd5ae2f65190bf b/txscript/data/taproot-ref/0d89c8dca6b7a1af5614348af7dd5ae2f65190bf new file mode 100644 index 0000000000..869f0699df --- /dev/null +++ b/txscript/data/taproot-ref/0d89c8dca6b7a1af5614348af7dd5ae2f65190bf @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf79000000003b14d3dbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2401000000537929c80432a09e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48751010000", "prevouts": ["a0c57b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f4c4240000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a99", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d85ffea93b39ff48f026a1de615f9bd5d9d5cb27805fa051e581b49afd71e8d341e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361e4dce6bac278c1b1e733e5c8ab81364e97dbfa61cc5cc43bccc0065b9d2eca6379b42341ec85aaea9ba53764a308ad79e21ba1c6bfeef93296a10f4c0e568eb3c50effc4608d2c714b1f589c510b82e2cb4bd2fb333954004903b4f08f38a79"]}}, diff --git a/txscript/data/taproot-ref/0dd2ab05d7639afe71f965b79bd7092a935732e5 b/txscript/data/taproot-ref/0dd2ab05d7639afe71f965b79bd7092a935732e5 new file mode 100644 index 0000000000..7d5dabba42 --- /dev/null +++ b/txscript/data/taproot-ref/0dd2ab05d7639afe71f965b79bd7092a935732e5 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41c0200000090748d82dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cec00000000327a6adb04bd048500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cf0c1a4c", "prevouts": ["d0a93c0000000000225120dc347dac30d55fcefc955ccbc6791a94d629e3a9213464313d15e8052cd76ad1", "f6434b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ee", "final": true, "success": {"scriptSig": "", "witness": ["a297b3345456c0e79f1ac7e940ae7b2031b4ffacddd92dcbc50b725a662e8018501ad94d516d521a69b48b21b0d3dcef7b7f042e2ff9b11f9548f65e98be96da02"]}, "failure": {"scriptSig": "", "witness": ["8c51135843b35986295761edd343c47c0c8f69f566dfc1e7ec19370a20421908d9e647a48691add825a30a57d53ddf5a8c4fb3964ff6196f0084454dc04a58e9ee"]}}, diff --git a/txscript/data/taproot-ref/0debebb3108bcd03c6d5ce9c5c2ce1a64f8da172 b/txscript/data/taproot-ref/0debebb3108bcd03c6d5ce9c5c2ce1a64f8da172 new file mode 100644 index 0000000000..e3a7e09f52 --- /dev/null +++ b/txscript/data/taproot-ref/0debebb3108bcd03c6d5ce9c5c2ce1a64f8da172 @@ -0,0 +1 @@ +{"tx": "b200976d01bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8e010000009fb86ac8037b817200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33fc3f5d", "prevouts": ["a7b074000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["97", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369753cb1a5a2e209ace27a7eb8605f5f7017a5ce229afe5de89ccd0b48219a4f45a7303e26d6b86d2a780c30dbeb7ba87c6a0494b901c3875fb9ca7f2f12bb2fd373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362b9f3130479ebcff49fd970febd3f22cafd2118ccf82fa26a081c98b144e890c088456232115bcc24dec0b5a24cea45f7d15fc3427ff6cd91fcf5dc3f7efaf083288455e3867d2ff7594cc417650f42f79f93c98aaa5c5ef25eb3554c8bf2ec6282285524a15c732567d099967405d35f7136f74f48f011bc4ab279ad8d14f14"]}}, diff --git a/txscript/data/taproot-ref/0e03e6819458e3a55e6655f8ac2fb5cb9b28406b b/txscript/data/taproot-ref/0e03e6819458e3a55e6655f8ac2fb5cb9b28406b new file mode 100644 index 0000000000..f280959b03 --- /dev/null +++ b/txscript/data/taproot-ref/0e03e6819458e3a55e6655f8ac2fb5cb9b28406b @@ -0,0 +1 @@ +{"tx": "0aaa8a4802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c72000000002635b9ba60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701802000000ce18a8af021b536e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac0651971f", "prevouts": ["36135f0000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a", "19de1100000000002251207ea7068de42e8dd8ec2d889eabca72799b94dd329861089e307e247da6412b8e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "837d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e87e533ff75a4d67e066dc739e50d12e058e790be330db290aa1a5b4fb647c89858163db171dbfcbf374971659a5a65d0378eae0ee15db360ca8cf80a8c2e13046"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365b8d95c6db891b4b73acf316d977e35c7b522b3e596d08ccbc7a995da83161483f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08209d3f278379d69ec93b9031f683f10c8ab57e2d08c050c4811cb81bd332eb9e3ff15e37d03bf407745d47da370f693bba1bd1439d95d9059575aa23ebc3ce6e3"]}}, diff --git a/txscript/data/taproot-ref/0e1d5cb6786009b8f3825aeb3f4c7eecc240bf0b b/txscript/data/taproot-ref/0e1d5cb6786009b8f3825aeb3f4c7eecc240bf0b new file mode 100644 index 0000000000..737110fbb3 --- /dev/null +++ b/txscript/data/taproot-ref/0e1d5cb6786009b8f3825aeb3f4c7eecc240bf0b @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1e000000007f87f9d660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bb01000000b381a6b20118072100000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac24010000", "prevouts": ["ef6d640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "076c110000000000235a212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["43859efd869b15d8b33f3c634b4e96d875595f9690bd5803c48fae26bbf1f097fa69dd48f8f59d02a7e642043bbe44a539d068d0e3f79843bd4aa4ac91433b86", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/0e1f79030f3681187ce4b16bf43133d56c470a63 b/txscript/data/taproot-ref/0e1f79030f3681187ce4b16bf43133d56c470a63 new file mode 100644 index 0000000000..eb5a1edf0c --- /dev/null +++ b/txscript/data/taproot-ref/0e1f79030f3681187ce4b16bf43133d56c470a63 @@ -0,0 +1 @@ +{"tx": "6fe1dd5a02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c070000000006cfdada8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48600000000e8441bcf03113b90000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cf000000", "prevouts": ["bdc05b000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "6a7436000000000017a91486e5fab3386e07350db4c59e442dbaac96c1816287"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "235a212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["472e4d32f1c25c84db688dbda40fa933bf8472109f2303175068888ae7b2dbace4d10bc6468c490dc7c2935c1a01af39812db491416acc58a4809fc899dfa862"]}}, diff --git a/txscript/data/taproot-ref/0e229a80fe4e2619a4b272d19ce5815986d08fa2 b/txscript/data/taproot-ref/0e229a80fe4e2619a4b272d19ce5815986d08fa2 new file mode 100644 index 0000000000..a9dc66846c --- /dev/null +++ b/txscript/data/taproot-ref/0e229a80fe4e2619a4b272d19ce5815986d08fa2 @@ -0,0 +1 @@ +{"tx": "0f80966902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0e00000000ea3117d060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708f00000000ee3251bc0203da6600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc722010000", "prevouts": ["a96a590000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3efa0e000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_66", "final": true, "success": {"scriptSig": "", "witness": ["bc6e0c791c7513090a5f4e337e6e2c521f16dde08d35c7a410615e8fc0936afc9dd68bf98dac81565c3776a26a4ad2f09022b9d9fe5b3290db73f67ddb89c01083"]}, "failure": {"scriptSig": "", "witness": ["ba2408cd81a669ba47141a8e5dfc436b0f542877da45e559ca29b444e5eb9eb23815b7e4d96999bef8bb447fc0cf6c0bd6e670d024436c27f4437f8094b3aada66"]}}, diff --git a/txscript/data/taproot-ref/0e27294bb1dafe333a689bcad39dff7fb6f9cddf b/txscript/data/taproot-ref/0e27294bb1dafe333a689bcad39dff7fb6f9cddf new file mode 100644 index 0000000000..5491b4cb65 --- /dev/null +++ b/txscript/data/taproot-ref/0e27294bb1dafe333a689bcad39dff7fb6f9cddf @@ -0,0 +1 @@ +{"tx": "57cf5f4502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf6010000006a9486e760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702d0100000035f118d4039b315b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac7d735b5b", "prevouts": ["8eae4b0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "768f11000000000017a914b403773244c403f76163005c780d53872622b52c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["e0fe281e14a8a8cd59a07d5c0ece3e4836edc64880ae9350f56ba15bc232fa9257b1d4f98bd0336f690615600dfc64bc5919d993ef03289dbc3944f754036e7000", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/0e28329dee72cdf3ca474e54b4eae5fb8c42ce45 b/txscript/data/taproot-ref/0e28329dee72cdf3ca474e54b4eae5fb8c42ce45 new file mode 100644 index 0000000000..c4cbac2023 --- /dev/null +++ b/txscript/data/taproot-ref/0e28329dee72cdf3ca474e54b4eae5fb8c42ce45 @@ -0,0 +1 @@ +{"tx": "c4706a100260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f700000000efbe80c4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcf0100000062bb14f502b16d800000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898726000000", "prevouts": ["9d9a100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "012f720000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "287d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e780a528759e22c32b672b3582ec3b98210a6d7cdb045b8c2f36dc39043db702a61bc10490c3b13d9c4f63caefcea4aba06d3a92ca8668ebd56c703a638058ee7"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ae0185d73b30cde4b6f847d95b0ec77b009b44599f3d33d8be12ed96fb030558462eebfc32d9e48af9ce92e50735d36faef083a1171bd1899835a9be2fa30ea55b4ae3ee914d52223472aa57f653ca8073aef0e7910b2553778e1ae03228475361bc10490c3b13d9c4f63caefcea4aba06d3a92ca8668ebd56c703a638058ee7"]}}, diff --git a/txscript/data/taproot-ref/0e292d3b3af29268349fe695e0f7ad74c422612d b/txscript/data/taproot-ref/0e292d3b3af29268349fe695e0f7ad74c422612d new file mode 100644 index 0000000000..41c1c68e88 --- /dev/null +++ b/txscript/data/taproot-ref/0e292d3b3af29268349fe695e0f7ad74c422612d @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127008000000009184f39cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8b00000000b18bd5d28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43300000000963b85dc031aab6f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7697ea15d", "prevouts": ["9e2f0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3c0a27000000000017a91486e5fab3386e07350db4c59e442dbaac96c1816287", "7c613b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c6", "final": true, "success": {"scriptSig": "", "witness": ["f5664d07dfa6f7a84016bb2df0387801d3a8d30dd7f4b641105f06ab04c2d69986c4d0e6085db919fb36100d3d67ad8c46c007f37046634b145e8d33568ae8c3", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a22fd97ec717ce4684ca78b6efc91ea96808bdf3854146a3a69c6f26dc3ac74345926d557f0d40fc61bc3da466d3bb2945d464df51b1b21e1dc83b9e10927f4bc6", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/0e41c7f53cff3726f8dbca36445f5bb99cc7515f b/txscript/data/taproot-ref/0e41c7f53cff3726f8dbca36445f5bb99cc7515f new file mode 100644 index 0000000000..70d1462b50 --- /dev/null +++ b/txscript/data/taproot-ref/0e41c7f53cff3726f8dbca36445f5bb99cc7515f @@ -0,0 +1 @@ +{"tx": "48b53c3102dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c390000000029ddda8dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd6010000002acd50fb0243a8c5000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc70404943d", "prevouts": ["84ac53000000000022512027986c975f6014bd54fa55f3e483bd83d3384004828bdd3e489d9b175e79ead5", "ae1574000000000017a91498e55eac47e04767f832d50008ff18559102c9e787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21601f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["516609a38ddfe1d98bbaad43bd619e65b73a163a7a9467bad83936a63ee4fc84d6d53ec50ce63dd171c906b33b9d4e41feea1e386ea2c3c1853f8f736bd03010"]}}, diff --git a/txscript/data/taproot-ref/0e73fd872d8f71896397723287ddf1497ea61297 b/txscript/data/taproot-ref/0e73fd872d8f71896397723287ddf1497ea61297 new file mode 100644 index 0000000000..09422c637d --- /dev/null +++ b/txscript/data/taproot-ref/0e73fd872d8f71896397723287ddf1497ea61297 @@ -0,0 +1 @@ +{"tx": "4de70a2202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1402000000fa3ce6a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf401000000b6192cae031df747000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374872a010000", "prevouts": ["52c025000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "e47b24000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090202cab6ff434e1d5b531b7202a554db72d8e3a67b117026249d92b7f971b77531e5440a1d94bd95bf355f7480cc535932d63a68eca87816757587158a417ec9e2d1c5bfc9f7dce2efe4090f1cf58d93c68becd06ac3221cb3dcdd419ac707037f85fcedfbfb8c3f44e847e751d244732dbd2304e4b232e5a8d8cc6a4fd4a9f418c2bc2e991b82f503077342da58cfe34cc3269e36fb4cb2c239a2a390d21323498c58a3280380e3944222ccd55a0c94dc57fd41b1a2655180e655615a684ab78bacb6318a43cf5377004bff7fd42bc6655b9ba7e53d0eba72c1bfec28a45a0ad1d971868761d057246ce4b852620c0ec16db0a8c62fe4b561236e64b72285b88e754c655d465d3b2d7261874ffc761f74e2e5a8c7ccd94decbec81a746d50d138dc66cfa8c4ede8df437da98a94de362b49874eb3acb1566effbda20bc545ef9c961d27219ca49813cdad47f82892b9060bac47e0b9df85f89df4230e3b4a9a4d5aeb61c791049334bca917d67b7299eb61f80f607212b731adba0e1db180cb0a05cce3d4a88913612caef50e3b4bb7c1e4b1e124eededd1f978cb6217f45992de079c39f331f51fe9b0ebce3a1a9d84b8aee0f2e3c4c09d1ccb1c4f2a5439b0227639daa1b36ba0694185e07e546f43a0a382dba25df1aebc79326fbd342f9cdefc85b8f1689c9dfe48b1d140e18d16c945cabdcbe344e485fd14394882638e7b61685fff9d41cf87d75db", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb4607ba7298d17f73d24d5d86c1d3d0fb9db652f9c069df5b4a0333ad80d0a33f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082a04823906532712c3d4cb334ae6c7c41a1294a824a25b5277d43f47953a1da33e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}, "failure": {"scriptSig": "", "witness": ["4d09022a97838beabfc8d8978d228f37f06ee48d7614432cb1aa6a915f2bbabb2507f4d8cbf9003ca4a7a110c3ae6b1eeec5f23799dcca73efe08d64f2d976ae0a25db8a8d57a4b605304789807495b4d9fa8c8ef385c52e15dc66f6f22bc05d03313724fc0248cde0b0371edda8bbb3ecdc7cb4042f615648f3bf996bc2da2a795baf2598056feafc1e82d4e374a06a5a18742585ea84f3ed67e1692585a5869ec471e93e715b56e07f93522c4da6e114d7cb38776f2190b1fbe6fc6a5e6a57c52ceaa42a3fab239c4e66ab7910c3d0e5d3ee28b0ceba338b48cdee99fd605171eee11872db14cda1636269e494ef17056919731ccb9b517b4ebb2f79c73ca718b6f91691ce7b5210e5f6913019d9bfdf70b374815352b8072cc40fc0208df93fa41013c2ebdb8225df7926cb2b1af08fbb5c1585914d131a1fcbe4ad644b8504881c787b0a74eb18bbed16193053a0604260a681d4cef558954b82163c8482e6cf11525d3eff08c2b4460cbe091cbcb040039dd79fcd1d426739f3bafe25d75e1f2a2ca5b631ca311053108a36114c753f5285ff0cb036042c302d4fb5a20744760692aaf12f17cd6fce337d63a28bd143cd8c9fda6ebfd2f77235acd89c4485b948cda114869460cec264596a4e11da85fb24e230f2650686711884e2b373199b1bf7f15ac24d5f198ff3b03079b7fc764ab868440c0680b6ec3d170b571da64adcc0b079ab4d051a46cd7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a7d2c4cebd38f1f6f3fa3eb99e7c82e9a917412571f2b1af1e1c6189830d7fa4e3966518140ddfb4b2a9d93e012e33d80f6a3bf7f24f1b44efe84ec3ac236f0e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}}, diff --git a/txscript/data/taproot-ref/0ea17004d718ec4b5b84011a18828cf136f86973 b/txscript/data/taproot-ref/0ea17004d718ec4b5b84011a18828cf136f86973 new file mode 100644 index 0000000000..571ee5df22 --- /dev/null +++ b/txscript/data/taproot-ref/0ea17004d718ec4b5b84011a18828cf136f86973 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f00000000aee490c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4b000000005f173cce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703801000000fe1cc3f8014c7b3000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac9c041628", "prevouts": ["5139310000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "560c2100000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "d2ad11000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["3045022100d7a113b9360aea818c00e3f6a1e2913059efbc3218bfe687f4a214df3a18930a02203a87c5b812f3b0777f570378af8adf62a33bf2edd57185ecbcb01dc0aa75a2b902", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["3044022057e577dda9df8746b2428cee605f12b38c5300e902b467e9309a3cbf451456a602200dad23743fdbf1bfd8678000ac822d41d43b62f0e0e609490aa48288275b50b002", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/0ea4e4491ee2abc4ea52e48ba33eeccf62d5f85d b/txscript/data/taproot-ref/0ea4e4491ee2abc4ea52e48ba33eeccf62d5f85d new file mode 100644 index 0000000000..b3795a1179 --- /dev/null +++ b/txscript/data/taproot-ref/0ea4e4491ee2abc4ea52e48ba33eeccf62d5f85d @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0a0200000089a51db2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6301000000b13edf8504c9d17400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac29b2eb20", "prevouts": ["4612240000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258", "7a71520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "3d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa671c5f6e3fdb2cca9ff2c8978272a7c72309b5e793932f9bb10a0961dd619da6701c89cbc41056f58ce11974b5756eca381e306e17d72fcef5e58c3aca02cf1415eb41ce20b61903eca7e2f7903a7c5f76d50ccbb22a22a302188dbad2e46b28"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367a4323bca4261be341492d2c8aaea5b9c8cd338f75ff3ca656464aeff6e26a7ada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eef9a48fcabec25982850a496e19df71982d596f167265e15d1ec282fb30074b91cb891527dccd7fe22077390053ac1c45ab6e7110116df1a30c9559411f432f5"]}}, diff --git a/txscript/data/taproot-ref/0ea84a4a5eee9c0cfe8bd52347d11c08b97d6640 b/txscript/data/taproot-ref/0ea84a4a5eee9c0cfe8bd52347d11c08b97d6640 new file mode 100644 index 0000000000..0c6787580e --- /dev/null +++ b/txscript/data/taproot-ref/0ea84a4a5eee9c0cfe8bd52347d11c08b97d6640 @@ -0,0 +1 @@ +{"tx": "2c58931d0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270220000000000450dd28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4010200000073486ed00336a552000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc44000000", "prevouts": ["63ed11000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "bbea420000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100922f35dcf07596b5a8df94f8153105be4bc76f6039de12c8071849f9b7ab840c02200e5cf5a15ef2aae75a2ce5f3efce5414b44f85b5c513af68710c2d18c3a8e151832102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "47304402205d40dda17032ebffbe930ec4c8b5deffa2919db868c55604902ab66cbfa9784c02205e22995e1bfdda2e9fefa19c8a07d449f43b75dadbf83e5f22a5af64fd8779e5832102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/0eb26606cb3895e3e7c3160a2acb1dd55cfde903 b/txscript/data/taproot-ref/0eb26606cb3895e3e7c3160a2acb1dd55cfde903 new file mode 100644 index 0000000000..34fccaf088 --- /dev/null +++ b/txscript/data/taproot-ref/0eb26606cb3895e3e7c3160a2acb1dd55cfde903 @@ -0,0 +1 @@ +{"tx": "a9916a060160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127020010000002766d9ce0413900f0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca973fc43", "prevouts": ["5518120000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "be7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eab0507b9227b06ce0689f3875ade4de998c1d9b3bd044e9f3b63e2ed7f9e05ff6f69f1f3a976918b4a05b157c0a8e21d478cce8b5d78fdf690138c8d187dd5c9"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8c2ac45274f354a7fa6bf45f239b04832d37283b3079f2371915482a2c13848c20793b34d3eca391845c9ee05577f0fe1c8a49b621d2ce1a9da4783f236266e6f69f1f3a976918b4a05b157c0a8e21d478cce8b5d78fdf690138c8d187dd5c9"]}}, diff --git a/txscript/data/taproot-ref/0ec71de4446b68520af7b2f5cb5495f2f7d56bbc b/txscript/data/taproot-ref/0ec71de4446b68520af7b2f5cb5495f2f7d56bbc new file mode 100644 index 0000000000..bb81e5e3d6 --- /dev/null +++ b/txscript/data/taproot-ref/0ec71de4446b68520af7b2f5cb5495f2f7d56bbc @@ -0,0 +1 @@ +{"tx": "b925e88602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2a01000000148d50bc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700e02000000c93381a40114a80a00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac61010000", "prevouts": ["4a2c2400000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8", "368a10000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "997d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e874e6e02235f222bedd00290eb9daa035321655bcf09c112e5b4a77998f5c860a0e580b14ffff5bbee812c9f6e3af6b100c6b4cffaf41971c257964f1fb14f6f9"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368884d2a2b97e27dc9a8d5c4c13a1ad4f8dd33ff04d22905d87b0003d1fc0339de4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e874e6e02235f222bedd00290eb9daa035321655bcf09c112e5b4a77998f5c860a0e580b14ffff5bbee812c9f6e3af6b100c6b4cffaf41971c257964f1fb14f6f9"]}}, diff --git a/txscript/data/taproot-ref/0ecc927da181cd3e4cf9d00b158c6acd0700b7c0 b/txscript/data/taproot-ref/0ecc927da181cd3e4cf9d00b158c6acd0700b7c0 new file mode 100644 index 0000000000..430c29484b --- /dev/null +++ b/txscript/data/taproot-ref/0ecc927da181cd3e4cf9d00b158c6acd0700b7c0 @@ -0,0 +1 @@ +{"tx": "f33c648a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1801000000efe045ba8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a4000000002db817c60273f54f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca3000000", "prevouts": ["3d7d1e000000000021511f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "c54b3300000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09024308dd64e7eeaf9ca2934bb2edc0405828ab2e3c96947aea1a656e1d8ccb8eccccb8a8478785121172cd86cc106b63be1cfa178a8853bb8900b66e1cbed5790925fe42025a2bc1e46e614b26f0e50c25f0bbd4621e97613e00340903a590162b9c6da461c5538244177a8f655a4532d13dfc6e7a7cf457c68a5b8beb96687d9f405dd123bc73dfc9accb748851c6d2e0fe7f7c94cd4f921b7b85876f5dc8bf5d804b43c41980b250fb21314454dd0912e643f5b9f38d9297c518625c78498a62571115265f05ff8dff13a154eb1cfbd8c9aa3159515b16f0eac381d36648eb3b8c37f06925cfc6d005869b5d2a0d70e8d7b80fefab7f1c9f8abfc4f311dbcb1de21f92e97bc157d3c47981bc84dc58cc2e44a78ceba1e1c2a27ccd116a80c1c3cb3a0706c1d1ae044966792b9ba6a12cbce633d9275abf86eb4f03e3dada0e396ddabe7a48c1dac4e83b8e43da7fd1f938f13a44b4f5d56f5c03536dcb33c1fb7f08e72e070d6c39c0ef54b922f830ebb90131659084e648be2881569105b238863c742db2647996fa247f87db1ea2bbe81f20c08666333c7e3cfff05a10e3e0ad72071a7302d77499346ce53c8e8f5c608fc97b39e83b31b8f2606372113c31f9c444dd73862900a33917a9b2c54965064e22d751da0c44acc6f8be5bc0ffa3947a6b61e53d3a8756da5e27f39590647b7e5b6f0a5d6c6d2f1388ccb1e6615020c3ce8e147a7cd83475", "967d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bf86d7708a8015fd8c392d5dfda539be3c55b3d42b83ba5bec57bef080407e280ad15d5ff3e747c4643a2e7779e2cae74c1db700bc0de7d47935e7ffa6ea968f"]}, "failure": {"scriptSig": "", "witness": ["4d090220e2abbf680f2ed9ebb9358138d93a8f99cea634015714200ffad0a07283553e012b8ea97ea8f366753988f2d122da3a47fbfa14bf4db54f3ae1081b0e01eb500b86ec085c81b6acf27a05639f352cd928e9918cd40b0aacca273f35e95f9fcdf08f1cef2ef3685010affbb8705aeb6f567ed5da99d80a0d8ec66007855f79e07c9bed840a56359fbc6bf42c1c8189a3fbb02d24c4e3f75535209e1c600f1e8247a0804edda81a3441a07566a3dbed889d45e09d8a09008af47bfe7362bb3b751d9238b44e2b7dc3bcfc23c4092f0e9c5bb3836547cd3a3f53226dedf032d3af18f132b684c3fd0bceab36dcfb608d51e0170c3b00804972a8c59e90b2c80024d975eaadc5d55290089649e1760c3485769cb8693aa6c5a5db88ce8a151aa22962e3a50d465858137719df4cbab33993637ac1706a6dfdd40ccdaa9960118af4369d769dd7452fd281faa7d213d6b9c83175e5dfb9d68cc8644a0b43877c57eea6d2a6e3842bba47c60ca184c886fc752b41694d164b569b434788490ad7ec2100345df48c7643d4e60c7c4b9dacce0088850eb3bc54c1e469c767ba932789c00d7c0b081c2e8dfbe70bd4232fee055b594a9a25f369ea5186508489792c2026fca6e5ada25413ca0ff273108d5eb71a7c025703bde96ed4678e87e1c4a507b4171acd5548a32fbda2f76fd88ac4b78c9b5780ad42a9ee7fdeb86f3af12446f579ba472a47a416dc4275", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360a229273ee78a689305c88529da0b62b319efef7a9724ef9ac9c424c39c39693dfa3c45458ee21e782394432ca1779912e92f35e0ff52c3985a5265a8dee58b3654e31a1d81b19a8c2670362b3a1330b2f2d66c8db1c8314023a61983d2ff610"]}}, diff --git a/txscript/data/taproot-ref/0ef9e684b87a52e1d2ec2b274d91ca104093f268 b/txscript/data/taproot-ref/0ef9e684b87a52e1d2ec2b274d91ca104093f268 new file mode 100644 index 0000000000..dcd4e9ebd5 --- /dev/null +++ b/txscript/data/taproot-ref/0ef9e684b87a52e1d2ec2b274d91ca104093f268 @@ -0,0 +1 @@ +{"tx": "2922ebe703dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb9010000005c19b4fedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b13020000001998e48adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b010100000093d904b504fad96600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac67c6fe2b", "prevouts": ["deda1f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5841230000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "70472500000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_34", "final": true, "success": {"scriptSig": "", "witness": ["1bb7d8ac82792da18cf7b6fc941ae456d366e3b2e5dc80016affdc81639cb19dd353b28add3538645bbf1a95b668d8ccc2021328e7f3352bbb809a04320deeb281"]}, "failure": {"scriptSig": "", "witness": ["35be4efe08071f56f077d44e7e833ed7b38d1d25f107b68e9a061be4f948dce90dea7af84b9ea48a0bf9e685757c428191e8a9f4605c75808ae0a12b0f40bdf234"]}}, diff --git a/txscript/data/taproot-ref/0f0de5c345a12934d91427634192d4040e5bd1fe b/txscript/data/taproot-ref/0f0de5c345a12934d91427634192d4040e5bd1fe new file mode 100644 index 0000000000..69572735c6 --- /dev/null +++ b/txscript/data/taproot-ref/0f0de5c345a12934d91427634192d4040e5bd1fe @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4070200000035c405e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca301000000f48bf49ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b52000000003a56f2d902d8daa3000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac6c000000", "prevouts": ["5bc8310000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "a32d5400000000001652142540f27e90740933c99d4f17ab2dfc6c82951cfb", "05a12000000000002251202b18b828586b5828635076972ee0bba96c3f290312125c393cc54d832abc1349"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["26c43c1b8ec990445982be5e9b8915828484df8c50e041436cb711d37db150faee76fee8fbf9d59dbbc90642b9a5292906c32de278fa80e07c68cfa3d832e0bd", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/0f1aee7720bb0ab848210f3e547b18c4431e3651 b/txscript/data/taproot-ref/0f1aee7720bb0ab848210f3e547b18c4431e3651 new file mode 100644 index 0000000000..99741e9791 --- /dev/null +++ b/txscript/data/taproot-ref/0f1aee7720bb0ab848210f3e547b18c4431e3651 @@ -0,0 +1 @@ +{"tx": "4b419ba103bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe30000000088c28bd08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cb00000000ab5264a260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709f010000009807c48504d038ca0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d33e7c40", "prevouts": ["2bbf7d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "af753c00000000002251204b9049d3a4bee03b6d234dd4c8f499fa4ef0a49d04247a5113735801c2defee0", "5551120000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_69", "final": true, "success": {"scriptSig": "", "witness": ["8229af1d9e1a0356663f422ec8b816037cd086555f2f4fb97efe1b321c781b101a39c08fc602478e583b8da8bad33fb23e76e4f57506b5cdc1dfca0537390508"]}, "failure": {"scriptSig": "", "witness": ["ac613cf8dd46d046fe317410f8017a6d0e7ffa027284d45d3c31e6a4fe4f9787d47fe2423fc2096b31d864e4656611df0282c756101e505ba3401772217b467169"]}}, diff --git a/txscript/data/taproot-ref/0f2ec0ef703ae34c9801d778277b221e6ec19ba7 b/txscript/data/taproot-ref/0f2ec0ef703ae34c9801d778277b221e6ec19ba7 new file mode 100644 index 0000000000..be7db07bff --- /dev/null +++ b/txscript/data/taproot-ref/0f2ec0ef703ae34c9801d778277b221e6ec19ba7 @@ -0,0 +1 @@ +{"tx": "0100000003d15657a619affff084fc6b1bc2cdf5e85e399bb207d84ace710aa8effb82232f0000000000378eeb7906f5bd527bde63f7c45daff54c390a64a59dabeafc8078a9bd0a050f54db6b44010000000038906fb3492909e056fa5c0ef2af542be68aba07da39583e95b43e24484150891b1d5323000000000077e0c98802d0235951380000001600146d764276c66fec1127e5074db5bff3aa6c52553358020000000000001976a914b2c48f336848c91e9c274b4615a238e127bb7e2d88ac40000000", "prevouts": ["24977ad110000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "1ad1d66814000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "14cf091713000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid_opsuccess", "success": {"scriptSig": "", "witness": ["699fdb6b143012370d036103fdbcee3723efc7a11d8bb794ffa0cd69264b4b8cbd2b943139985650e3b05e6c591a1acdc72c62e1074032538cd74455bfede244", "20159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717ac00635068", "c0159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f7173cf6535970adc1aa2e2cd04b60847ed9656d715af72d750ffdba18631024451b7902b78fc59ae74800241e9b7a2e0578a35ace37791478c3e04a51e81e708c61"]}}, diff --git a/txscript/data/taproot-ref/0f51e2a5ab57413a930a436edf258d17d6ae7de2 b/txscript/data/taproot-ref/0f51e2a5ab57413a930a436edf258d17d6ae7de2 new file mode 100644 index 0000000000..6e9ffe8b4b --- /dev/null +++ b/txscript/data/taproot-ref/0f51e2a5ab57413a930a436edf258d17d6ae7de2 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c8000000008115ba958bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c485010000004a1f0fbd0350b06200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7624b9d51", "prevouts": ["7b22320000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30", "9234320000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100cc917317757baebac9ac7ea2b4437c4f196381721810a37e5cb17506c1efe01e0220054caeb99365885257fddacda5176a180e4a80aca61a86710c6f9bd528d34dda02", "witness": []}, "failure": {"scriptSig": "473044022038dad12902e5b503b0ebd814cd812e3d4287088d17f0c282c80175915bab241c022071526b902f0a1d8b81ca20efc0cec65f1abbf6fc811eb55c8589312bc4f8239f02", "witness": []}}, diff --git a/txscript/data/taproot-ref/0f7b105b71e9cb68726584b4fa24c0ebd801c4ca b/txscript/data/taproot-ref/0f7b105b71e9cb68726584b4fa24c0ebd801c4ca new file mode 100644 index 0000000000..7fbafa06ab --- /dev/null +++ b/txscript/data/taproot-ref/0f7b105b71e9cb68726584b4fa24c0ebd801c4ca @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41e00000000689473618bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e500000000333fa0f201c56120000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d2000000", "prevouts": ["c2e73700000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1", "5e323600000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6acc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362039563b955d2dbb4039cf2ce233b67393a3c90b1c8e11b9e093e855d67171ef5f8b38696f7f521c781f821b55aa4ff86c04fbebd102ad129a9d47907becd36b4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e183e343f15a28f9ad1157957559cb0b6b8ddccd5d64405c8ba15aa31cdad4142c00ae7d77688765097c61dd6dc7203a99b1de19633b0fe895af4a245d0fe1ab9735478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}}, diff --git a/txscript/data/taproot-ref/0fa616a640ec4b881c4c4ea08e1a39f481403fe6 b/txscript/data/taproot-ref/0fa616a640ec4b881c4c4ea08e1a39f481403fe6 new file mode 100644 index 0000000000..90edea9fc4 --- /dev/null +++ b/txscript/data/taproot-ref/0fa616a640ec4b881c4c4ea08e1a39f481403fe6 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704a00000000197308bfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8000000000a81903c801c1d73a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796b73c7c53", "prevouts": ["6d9e100000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde", "456f820000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "477d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936079db4e6166f733d5f26884094154d18acad271c7897e45716ba972f6c28bc89ff81b1159cd56b1887f265c0d653f3c782f8c9b1bd8992faa992c6296a364de747adf318628644459e7d8d4ba81b7833f70746497cdf0fced2937ab961dc2be46657009e9173c5ef8826379cea4b8c999e3ae37a5805e4cc6da117a3d2ee0eec"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d573dcae6844503e10ad73cd9b71da3919fcdf6472c18e1c41584f6b5b237bc2dbbe6d997bdcd7c7603d7696a19dfa7a137162827825260b73e89d3e21fe597dfd9e929a06047270fff43ba4c6b47136464c62381aba7ed74ab98bc69d199aa4"]}}, diff --git a/txscript/data/taproot-ref/0fabe142a692b593ed073f5db1ef2aca01dbd689 b/txscript/data/taproot-ref/0fabe142a692b593ed073f5db1ef2aca01dbd689 new file mode 100644 index 0000000000..3b94f71d52 --- /dev/null +++ b/txscript/data/taproot-ref/0fabe142a692b593ed073f5db1ef2aca01dbd689 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa00100000085aa13c060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e70100000090538ffa0198587a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964401975a", "prevouts": ["395b84000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "69b7100000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09024a923d3cf89646fe239b6e78edc49ef372a465916a2802bc58363bed0bfb6af97295a944a06831ba07e48ce1fdbbe0c3fbe99f7cd010612193e4aee7cc1adf8f102b8550e11c14561e13f825081218bf0d03e00bd0a88f84efd874a6831c94b90a1f62a1e15bcd144de1fd5d6d25f7eac390835b46ee3efc5e9de2ad4f7a4f5034f57994963b0f95029c14433ed728a3ce0ab2657e3277371413650b08c3a15db7f54c6507457c2704eb74c1925bf51305ce25e707275d73dbd10fc4e583190ebaf994f8b7a73219d2ab05a67fd3b8d76f41d650bbfd3d6a7cd469e1a7ddfd4a6c4ecf884dcb45517fba401be9194a716009a83b0cee92ad5238e5715277582389729a17782ee77aae8e0c88d8a265851ca33cc5e655aa4c06adc294fab4b94cd4c8b5f1470fe6177b7ad941326c4e5ffdb4a5f6c0d0d2e8c4ca36e68be3ae46249ea4a80c21115bf6263c0237ca832eff837f94d7c3a929e863ad157af581bb59e68b2938b7536075b807f3a13a4ddc01433d31258a2a173899ce082f9e616a379ec14bd54b7efd1901da4eb72db6834f635f1936e9ae40d240648784108435103849e1d5e0fea2952714daceb3f6bc3f77d34b70907c2ca67a344e5ee0ce35d5f3af7873d3f11601edaf4718af4da9c4e2ba5128d41b75acc1e289b0d5d96f9f76ecb30075debeeaa16c48d38dcf4744e855a95eb9431aafdbbb0a259f3b0baa4fcfa84c8140034375", "9d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361e133a480e620191da8aaca6530685b5d8d82e919edeb5352d49c034c0d561ba8024f0f821479c34a3d08a46a80a2c380535e71b033b1c786baa16eef71e1977ae2f7927e5cc4d53e0e18212acda8d85e01e1da74473232947322e5e96654c18"]}, "failure": {"scriptSig": "", "witness": ["4d090243a349217aa263976d92dce8f5610a6ec4a5e47bd02dab69919d176fd8ee4b03d4dfc4d258d1dc62344e1d0612e750a676ea8359aff9abb7bc9692cdb2b5b33833e3ffa4fdc4036c5cef11a9df1952086df6c8e4d3af51b6b3d3059ad9edaa34cb17f8cb8cc9feba574ebdb2a527b1c9a3f3f2aa44716424a80d4a25cb866a05d9759adf56a1cb93e88fb82a8ebad11a5525079f88a427760443f7d942441b816a482d7ce8fb7b9869594c1db3a8d3fd874b9ba32dad414870072b12155f3837908faa0dabaca85c3e46e0b28fb705aada228c84f18bf414e237637ff8cdd2c26647471b63501e899b8a65fd128ad0479042b9c1bdcaf70f6d0f8b7d92e490d0a48e4d2ce423cd79365f8cfec8e86425ba6bb4c90a0537aa16d26b48c53144e37c92657d46a797b7ae74578a05bd61616bed287e036cc0747c2b4320017c7099aae6a723dc5efb658e0e1a231812f452702ee0b062913a80bad5aed663b50e5a6458f6533593d8c7176d2a0cb7f280dd02f8a8a677932c12fe7e3cdf09f8ef12a1291a9d1dd27f0a59c5b9d0f99fe907f78a9673b9be0003ef1d90bd954db72d67cc0999a25c624f4c977a4f89656831748b08ccaa1b3a694022982709502393410fdd293c0dd73da16d6808e7a0e646c2be031483d000f19807c8b1b2edfdf8e1756c433da925e0d1dcd9f548bc8923b00b549760f0dd5fda53ff3245e86ba2548368aeed566a37fd75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c801b4c4a2960858f413ab5d98ddadc6ffe3ff6a6f0ddc4e13767870b9a730796b892175c0861377cad04fa4faba87807216c52ab5a24eadee36522f056d83a72756956c694637235f847009e8e23b8c05283b4a047903b3fbdb647ae4209c1"]}}, diff --git a/txscript/data/taproot-ref/1000a469dfca1be2144a6563e3bc8e3f5ceb2448 b/txscript/data/taproot-ref/1000a469dfca1be2144a6563e3bc8e3f5ceb2448 new file mode 100644 index 0000000000..f7a957ef64 --- /dev/null +++ b/txscript/data/taproot-ref/1000a469dfca1be2144a6563e3bc8e3f5ceb2448 @@ -0,0 +1 @@ +{"tx": "a1212fcc028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f50000000035a475f48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c476000000007698abaf02c9fa77000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478702030000", "prevouts": ["bdc53c000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e", "d6083e00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["8e4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb46e8601d3af4b3a958df52448c90f2764dee9285ef639d0a94e9c0ff98d78680d8d550033184c6424688af85d43f5bf525b7f6d8111e731f6e2359cae2801b117ed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}, "failure": {"scriptSig": "", "witness": ["4c528e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93698751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d5099eb053c54d8f72c6d7331f9a1bb3bf1b628df692ad9b7eecd4e01f4a47bb5aed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}}, diff --git a/txscript/data/taproot-ref/1007d21149445ee61da9ad4413d7acefa9ede7e3 b/txscript/data/taproot-ref/1007d21149445ee61da9ad4413d7acefa9ede7e3 new file mode 100644 index 0000000000..7e31154211 --- /dev/null +++ b/txscript/data/taproot-ref/1007d21149445ee61da9ad4413d7acefa9ede7e3 @@ -0,0 +1 @@ +{"tx": "7cd259480160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ca00000000e0fec3de04d7741000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87aa000000", "prevouts": ["722c13000000000017a91448964eab407ad5d6e123f59d9280ca7998f71bce87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2351212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["9c54e3358dc40fff5b6eaab0a7356c6e097a91d7d87aadd4a30d61eb9667964d011eafb4a8a5867f537a947468abeb8c238a1a7c6b9953215dcf3ff5b714520d", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/100be162498b413ca391dea2387d07097432e64b b/txscript/data/taproot-ref/100be162498b413ca391dea2387d07097432e64b new file mode 100644 index 0000000000..8a672d5931 --- /dev/null +++ b/txscript/data/taproot-ref/100be162498b413ca391dea2387d07097432e64b @@ -0,0 +1 @@ +{"tx": "e82fd79b028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40002000000f2fd11988bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4740000000030e1c39504a9a063000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac9333884e", "prevouts": ["093f3300000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "1a28320000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "d97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363255b317c7de6e9ae6bb70a9fb776c4c6a00d056fb5cee6a264a49253b234c169208680e05d04c3942bb784f68e647b385a50066aeeb87d1b11822ef550a3a38682a6e83df749f265180f93fd54e474915a8abfc6fef0a760c06d61a0bf42967"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361d56eca119efe8600c7ddbecaafaac765d2e5fc0abc9d3eeeeb65fccd7070d9846c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2d5942624d66fc39e30c2a996d85a0dad9a6418b79db996452744438b84f9614682a6e83df749f265180f93fd54e474915a8abfc6fef0a760c06d61a0bf42967"]}}, diff --git a/txscript/data/taproot-ref/101afec325ccd0ecfd32b22bcb5ddb64cbc1c497 b/txscript/data/taproot-ref/101afec325ccd0ecfd32b22bcb5ddb64cbc1c497 new file mode 100644 index 0000000000..4154debf42 --- /dev/null +++ b/txscript/data/taproot-ref/101afec325ccd0ecfd32b22bcb5ddb64cbc1c497 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf070000000062aabd978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f10000000022d1bc9003560c960000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb3c81660", "prevouts": ["78b26200000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "1625360000000000235d212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["e92d8101c980eff4377e6d8955a6be6eb9c513a73b76b0c2865d9217ecc002952e790d9c1b6d4873f01b62966c2e29a6c5c67d56950c0adb21878e7ce72b19ad", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/102f84dec76aa32c7c32a67b8398d3433fd9c124 b/txscript/data/taproot-ref/102f84dec76aa32c7c32a67b8398d3433fd9c124 new file mode 100644 index 0000000000..f53c7f0056 --- /dev/null +++ b/txscript/data/taproot-ref/102f84dec76aa32c7c32a67b8398d3433fd9c124 @@ -0,0 +1 @@ +{"tx": "2a4ba92a0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270680100000050b312a0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6d01000000f7b1108603868a800000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c6020000", "prevouts": ["7995100000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "cdad7100000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "807d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac32beddb8df376ed0f15f8ca557ca4fa4dab9ea34398a6bb2b3d4cd5dda00bcea090cbfbdc5dfcad7ff4463f3cf2898b3c754f5d70a369d7bdece79053e0da647"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ebc7c443b27f0c4bcb1a4d24531c68d10c673cef24ac139c6bf3ae7480664417e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e83f9b6f826008f58b0a2f0424fb9eb1e858fa037e128d89da74120b3f1d2e75bf3dbbf3726cbcb24bd9ee344fc88539efd23f46f5d6cac68dd1bf47840d55ab8c"]}}, diff --git a/txscript/data/taproot-ref/10549677366e93a6b247cf85ef6b109794e927a0 b/txscript/data/taproot-ref/10549677366e93a6b247cf85ef6b109794e927a0 new file mode 100644 index 0000000000..630d8b7620 --- /dev/null +++ b/txscript/data/taproot-ref/10549677366e93a6b247cf85ef6b109794e927a0 @@ -0,0 +1 @@ +{"tx": "f0b08b4f02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cae01000000806254d3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1e020000004cedc9fb03ed11cc000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7962c010000", "prevouts": ["d7c14f0000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0", "2f8c7e0000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "4e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa024d2ced480b827388702026dedb2056611ff82f89a108072a2691dd6856cb09a4a8046f0466b39966676954eca5d67ee52b1615e6fe46612ea9ab4edfa131fb"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369dbcd1ddf7df12d2fbe56f12d93a74f67dca3a0fa03128d33a048f2d963a2099024d2ced480b827388702026dedb2056611ff82f89a108072a2691dd6856cb09a4a8046f0466b39966676954eca5d67ee52b1615e6fe46612ea9ab4edfa131fb"]}}, diff --git a/txscript/data/taproot-ref/10624dd984bc11b57e154d0125049824624ef4b9 b/txscript/data/taproot-ref/10624dd984bc11b57e154d0125049824624ef4b9 new file mode 100644 index 0000000000..0e0b8dcc6f --- /dev/null +++ b/txscript/data/taproot-ref/10624dd984bc11b57e154d0125049824624ef4b9 @@ -0,0 +1 @@ +{"tx": "3980379002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7f00000000bdb16596dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc001000000f9f628ff01158fbf000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a68a000000", "prevouts": ["b65179000000000017a914f955a33e905fb6c7b7e694c8cef25993577deafb87", "68725e0000000000235b212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21581f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["26814cdf6b8010156c55e773cbb30eb356c9f94852cfb3d3454e0b3c12c52fe7e73c81b9d90ce86a4c7b3fab2d18d4a3c833fe4e9f0f47ab9f6ad8468b7663cd", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/106f9a1f4925d539eab0171af97bfe996099ad01 b/txscript/data/taproot-ref/106f9a1f4925d539eab0171af97bfe996099ad01 new file mode 100644 index 0000000000..35f6b5b8c0 --- /dev/null +++ b/txscript/data/taproot-ref/106f9a1f4925d539eab0171af97bfe996099ad01 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c330100000072fc8e80dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c83000000003e0d57f5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1d01000000594c5146046d9223010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79661010000", "prevouts": ["bb6c5900000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d", "aa9357000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "edbe740000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045da069eb8d814e8e6c846f6346fa512368611d0ddd5fc662af48af9436c51fa006032c3262f8d7c29daaf8f9846bf0ed9dbcc4a0f9aeeb7c8ab8b4ceb985f45a6c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936555a30cab9babe93a50caa7d6258c00dbdef6dc9d9a8b2d0ae40520e9152db0899aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb470901b40dea8c7a5ffa56ebe32dcbb2bdc70f6165f45007f6a309c26f1d76d473959a095ba405700a8bdcb88c47f737d45523ad768f5b3698c80add34f2e764b"]}}, diff --git a/txscript/data/taproot-ref/107e2cdcdfabb3aca2ab5aa2fd3c97288ca30c94 b/txscript/data/taproot-ref/107e2cdcdfabb3aca2ab5aa2fd3c97288ca30c94 new file mode 100644 index 0000000000..e6a4cd767a --- /dev/null +++ b/txscript/data/taproot-ref/107e2cdcdfabb3aca2ab5aa2fd3c97288ca30c94 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127014010000007885ab88bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3501000000d8098c37dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0800000000ce51b63e0198b6c300000000001600149d38710eb90e420b159c7a9263994c88e6810bc7bf71183c", "prevouts": ["2537120000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e", "5971770000000000215d1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "58b05a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "777d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936317c62222341529afe8f077c28135e4216d182041ddde4bb210fc7dce870fc693c7477a635aa10de5895d22b0b13d3a2307950c6447747564098b225c8ebc094ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457e2aee6c91b47bf7b7aff3c5d3800b2287c2f5852e09bca12781ffc191c1d4f04"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fafa584ded413e2880e88fe5cf9cb62118b35d382d99cebe394016833778f1470de2aee6c91b47bf7b7aff3c5d3800b2287c2f5852e09bca12781ffc191c1d4f04"]}}, diff --git a/txscript/data/taproot-ref/109b57979771e9a623eab0dbd365a6eb604e4d39 b/txscript/data/taproot-ref/109b57979771e9a623eab0dbd365a6eb604e4d39 new file mode 100644 index 0000000000..0f768930ac --- /dev/null +++ b/txscript/data/taproot-ref/109b57979771e9a623eab0dbd365a6eb604e4d39 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b08000000005eac31d2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5f00000000e9c12dda030e24a300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487c5010000", "prevouts": ["bb4c220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5a55830000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_38", "final": true, "success": {"scriptSig": "", "witness": ["318843384a5fd6307421fe114c473c43c927ce9a7e92c77cbd360837d2f3ce568afd9cf540777bf5b7a44f588aebc1fd32897f817bc396db13d556190e34d87981", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0edceeef26ec81812148b0a5c98897bc906ca52cb5da5f40f802de1d1f5cb9bcac8f269da3b88c9a56b9472733d3b2ca5646c3be46707330bb3a069ba4ccbb7238", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/10a884685231a301c2628f0607b449081b250ab5 b/txscript/data/taproot-ref/10a884685231a301c2628f0607b449081b250ab5 new file mode 100644 index 0000000000..d1305a389a --- /dev/null +++ b/txscript/data/taproot-ref/10a884685231a301c2628f0607b449081b250ab5 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700c000000003eac70b460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707f00000000d49919bd011e8c0700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac99020000", "prevouts": ["e78610000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7", "39a5100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype1to0_scriptpath", "final": true, "success": {"scriptSig": "", "witness": ["4825723baafebd7062b84c3074b58adf3e370d04d93a9cab253810e9c2d90b3c8e12793d4c452331bf9c3961cfbe7230c2fe2c591fdeb87458a1f185e0756f0001", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["4825723baafebd7062b84c3074b58adf3e370d04d93a9cab253810e9c2d90b3c8e12793d4c452331bf9c3961cfbe7230c2fe2c591fdeb87458a1f185e0756f00", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/10e147455c54d7bb8f4395e8f52666ee498a10a3 b/txscript/data/taproot-ref/10e147455c54d7bb8f4395e8f52666ee498a10a3 new file mode 100644 index 0000000000..0af3879521 --- /dev/null +++ b/txscript/data/taproot-ref/10e147455c54d7bb8f4395e8f52666ee498a10a3 @@ -0,0 +1 @@ +{"tx": "b5d5ba7e02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be900000000704da091dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b970100000044b31bb50347704b0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796a3010000", "prevouts": ["2c7d240000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "12a5280000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f84c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bb84f5f1451210ceb72432b3e6d63235af9ffb877329c35283c8b2d18797507891e44dcd1430a53a9228b1d4df01e5c5d5af3846f876ba8dd78ee7e669e7153a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}, "failure": {"scriptSig": "", "witness": ["4c52f8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f5ae99bcfb285d164f9370410e936aae64489acadcf2521c7c395e9f790ed55435701ef224ad20174d0190f97f9f6d3f23a41bbc27fc82fd96c9e1fc2f7b2cb81ef28805a30acff873fd9260c6b3bfee2b626467fb0ce04f716d513a8a4b08b6f288028cdab461d62f9273620b97315e6e9af9458f777a616c1bade2d3f6a89e"]}}, diff --git a/txscript/data/taproot-ref/10e2ba2a40c7f4b5bbe26a0ae7a814ef9883672e b/txscript/data/taproot-ref/10e2ba2a40c7f4b5bbe26a0ae7a814ef9883672e new file mode 100644 index 0000000000..c45e5dbb12 --- /dev/null +++ b/txscript/data/taproot-ref/10e2ba2a40c7f4b5bbe26a0ae7a814ef9883672e @@ -0,0 +1 @@ +{"tx": "2c58931d0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270220000000000450dd28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4010200000073486ed00336a552000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc44000000", "prevouts": ["63ed11000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "bbea420000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f4", "final": true, "success": {"scriptSig": "", "witness": ["c18996a50a9ede14356673d49ccc2fbaf76d0bb2740f796e6e0626b92728f0a6acba91321f22429f5166252b8ecdd37ebf5230ac334fffe2d27b205e38471db883", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f24b2db5f83e6a23473c07573e33803dd9ea06c07c971dd5d2949f3f18e48b3d139020e8677fb0b2c3ed9f2283489d6584e2e5a478534918409b6edaf64a344df4", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/10fefd7899096dc27cf05039ac9a172231d52173 b/txscript/data/taproot-ref/10fefd7899096dc27cf05039ac9a172231d52173 new file mode 100644 index 0000000000..4d4058831f --- /dev/null +++ b/txscript/data/taproot-ref/10fefd7899096dc27cf05039ac9a172231d52173 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c00020000002b7885eb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e50100000052310cfd02d0af62000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac12010000", "prevouts": ["b53f550000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247", "eed40f0000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d15d544d61c31b4fed0aeefc13ec08cc85209c6d5b38125e07f8d6b119aad417a9cc7cf8942e20871e843abc4d08f3260aa34782de145843bab753526013ba9d6000ff4712f1551ed36f1c3a3b6b2b237c7925585bb72d1991c7487de12aa2045f2292fc61c89b5afbed6a11237ad29f6db36f760dfecf42096516463315ad69079cae38d857203628e5a2bbc04266f26710157112a01495eba3346e4dca46eab56e48272ccb02bc5f30d335eea1fcd2ce2954c430ce26d0530bfbdfca8bea0066f7c58eb63705984a6916db34ad728d972bf125bd95938c8af9b5fabd6def1d8ab325b69740128eb3db07bd331f7d3cb448727709870987c37dd1f722dc9061745e4c806a33be348e794440fd3214fc5625237efade29e0df41582d5f717de1f0392fd754d6c44ea7aa742041ce538ea82b74ed172d374f7be3c97b212ec2e2a2efdf2e2ccbd2797caccda97a55be1113bf5ba63e96174064cefa2e162cbe7d427a7b04b910361b84159e0e2080ed07660e49a4adac55ec179557db0db7bbbc49a1ae4324f4e54905ced6895d3245bc90ca20f510f04d4553d24c2276adc93290d06fed4cd5f6ae28ee091b43848791fccbc29ccf1355625374adc3f39018e2520bee94d08d27418a60b2155d59446061e6d1a412e6346638bec392684228908903ee901845d34414c98436faafc0191f30c0e38a346b324bd79e30839b3e58c04c6a56f7ab065b0e75", "8d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa6c417b1d65e26db5cf9371b0ce7a9c3a110335bcae099de9d0155d4e514bb408a37683ca92a47492765ed69e840601310475c5f70013240e7a67747a5da918187472d664747fea006dedee35c74318028ad9a0ae37c154fe8226ccc2af402983"]}, "failure": {"scriptSig": "", "witness": ["4d09021008d23baf9c904d7e1664b68b2a7d53743b9f098060a028684222e1959810f5360f94181368887278c7a4f8fe66e11b90514e89ed7c586a382abe671ea4e34ca1f7f9e99472e21a7c2cbe1a304d3eb8f66c7130d96c1ce1690551d02563bd28745a187b35914b1f8ad6886f82cba13088c9a596c46a73a83f1e83aa46ccc16e55c186dac0864dee058e37a897f2b890de699dce56bf0238e584eea74960443880ca083c3d02267b814b267f1e6b39efd0b8f4ea719c9d8afff3be37b6ddc31b349a4e9c3eb6f4f82fef4a0a3e93c7e651c65545af17d888def481cd7dde9489fb1e12402f875b5bd463127d58478f9fea8722486a848df31352f808d67eb3b7b879757a0d73e7996a11623d6ba5f20509c743e039e5e8e269c4db86a817bf90790c1105f969dfb044b1b786e033e64ad98798295e4987559b40ee48f88aa3fdcf5150ea11c1ea98627a42d5a80f3c80cd832eb3eefae58019d1844c36af6fbd56983e1168fd397fa93be636ff78e14fc83cd6b8b77d03ab86d7761b901eac2f89bab527b678f6a22f62d5aa725ef28c3b5756ed2dff0e3d1d8e711c1d8aef312abd0c2a87322ce433ee160f966a86d5f49d43e492e8b8de32a3d86944df8ad654c9d2e75cbff386d53dd5417259a072c0452a0590841491a28ea2fbffbff6924bdef73ab12dff424ee121fdd885c317d64c13a76cc7c2d7e10c3107df7ad7f0a713454575834eacfb75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e80492d17ab4c59254bcdea8b81e7721fca5f8758b8cd0b322bd5a652bd9dfe7967472d664747fea006dedee35c74318028ad9a0ae37c154fe8226ccc2af402983"]}}, diff --git a/txscript/data/taproot-ref/1113b16ac0b3e4b76353eb896e7272061f03ff8c b/txscript/data/taproot-ref/1113b16ac0b3e4b76353eb896e7272061f03ff8c new file mode 100644 index 0000000000..d263ca3a1a --- /dev/null +++ b/txscript/data/taproot-ref/1113b16ac0b3e4b76353eb896e7272061f03ff8c @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1601000000ce4364e8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe400000000a9dbb2eb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46000000000b49550d804b90201010000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc60416b55", "prevouts": ["b6636600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "becd650000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029", "4eaa370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_27", "final": true, "success": {"scriptSig": "", "witness": ["77a42b33d07826192717f841bbb97d4a3aee00c2e26de594b231dd079f86cb7e7b37c49ff2c6e52df896e11bcb6e3559510c46e5c113f9b83d10d4df08ea67e502", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["e42c5ca8cdf8f2ebc0c45de9d8184c5d872850a6a0cc84e9fc6bbd851a651cf4e37e151424d736cf656b11151a72c82fad84c292047afb49f01677a137d334f627", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/1131434b4bb6f2acbd59abb881c239975a1116af b/txscript/data/taproot-ref/1131434b4bb6f2acbd59abb881c239975a1116af new file mode 100644 index 0000000000..4d01af4871 --- /dev/null +++ b/txscript/data/taproot-ref/1131434b4bb6f2acbd59abb881c239975a1116af @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca1010000002f81b9ab60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c9010000000f201065042881640000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8764000000", "prevouts": ["a46f5700000000002251207c84ae2d9063cc63412a30e00823aa01b05bc54bcf6d9936dc1c650bbdc9e98b", "d71a0f0000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb2ec5b5f80be5ffc851a24e9e2606734899b00ea08cfb8b544162f48ce08ae2064fb6de85916ce1333b57715a419fbbb7fd448155796c8af09a2e4a2bc14d947"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8531e2fd89fa5f39409e38f05906a9d1ca5d490c9939b0e896f59f0755d169eb2ec5b5f80be5ffc851a24e9e2606734899b00ea08cfb8b544162f48ce08ae2064fb6de85916ce1333b57715a419fbbb7fd448155796c8af09a2e4a2bc14d947"]}}, diff --git a/txscript/data/taproot-ref/117e130d533574c601aab37e70b93bae134a6527 b/txscript/data/taproot-ref/117e130d533574c601aab37e70b93bae134a6527 new file mode 100644 index 0000000000..4e7e796fb8 --- /dev/null +++ b/txscript/data/taproot-ref/117e130d533574c601aab37e70b93bae134a6527 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9b01000000744771be8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40100000000c8bd0fb801d2b675000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c37dd022", "prevouts": ["f61b7b000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "8dc2360000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "677d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688382350e48c4cf8321145c516ef78ca067967743c135ad2d056468d55d14eb52bba6f8d4f5daf96bc6060ee089cc6dcbd533ad30ddd55009697a11ce72a351d2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdbceae773fe677547a5f8be2986f5e4c7dc436c0d3f0e1e86711aa468c8778215"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cdc40148670f97d658d45aac2004072c8bcd1ff901e6e1bec20ff924a01653ad5ea7fd6123a97de30c69bfce8661bc08bde914a895a50530d51ffe984d9d20eafa195b9f6f39c732eb35859a6bf094cf148e251ed4d8a79570f47a225cba2c42"]}}, diff --git a/txscript/data/taproot-ref/1184f4a41ef45af98fbb77736bcca10e157c347c b/txscript/data/taproot-ref/1184f4a41ef45af98fbb77736bcca10e157c347c new file mode 100644 index 0000000000..9348b20f38 --- /dev/null +++ b/txscript/data/taproot-ref/1184f4a41ef45af98fbb77736bcca10e157c347c @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf280000000029e4a59edceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd60000000005371cd401525245000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48722d99d32", "prevouts": ["4f2071000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407", "990126000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6afc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dc78fa2606fd84cafa3e9f2d8805c3b820cb57841f4a0769a1e9f387ba6d96c239c06a64e39d88ea3d05132fdd32c8e90a6b90ff74e726fde2d8f99de3a7b89959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93669c989d0e3cd6f361274bcf4d5c8319fbc2250da7e1afff7d5a216e9b52c6b5ce96c6534a767436613e49f724d4ec24036cb4bdca8403821be2a67ec4c00c0e3731d32c4c28957ee8de75561afe63689e2428997edbca796d37c8feacf80dd0b4e0df2464f99a35d5bc9fbf69ae3045675e957332f77327dfd622124d00cb4df"]}}, diff --git a/txscript/data/taproot-ref/118b63929e90757c8ca1ec818ecf53f8b71c70fb b/txscript/data/taproot-ref/118b63929e90757c8ca1ec818ecf53f8b71c70fb new file mode 100644 index 0000000000..514932c227 --- /dev/null +++ b/txscript/data/taproot-ref/118b63929e90757c8ca1ec818ecf53f8b71c70fb @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41700000000818fa90adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0101000000f46e8321024948840000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e784621a3f", "prevouts": ["e47a390000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278", "b2b14d000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e15f20acab37c5a5cb044828a71c51f411f3799e0c9201344692cb6121a679af6a96525fdd0eb5f3c5c39bf5b04d78b37703e3d3b538b36e17fa0ddbdeb236a5daa4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa108807fd1da60fca18a375aa3fa2202a3eae5e0bf99a9374f58816bea445c879688f26c44e4c38ecd8996ded351dfac291f6a9fe2ce500158a378a1caa9ee2234a5a049dfcee5b69ebdb7c70e6242c675d1abc9cd58c84d7f9a8e8e1277a43a4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}}, diff --git a/txscript/data/taproot-ref/11b1f9db49bba588d8f418e89843ef901274fe93 b/txscript/data/taproot-ref/11b1f9db49bba588d8f418e89843ef901274fe93 new file mode 100644 index 0000000000..e4388e0a64 --- /dev/null +++ b/txscript/data/taproot-ref/11b1f9db49bba588d8f418e89843ef901274fe93 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702800000000800da0c18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b4000000004386efe703b659440000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1bd3c834", "prevouts": ["d1a1100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "46513600000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f7", "final": true, "success": {"scriptSig": "", "witness": ["e0f26ec8b7c33a1f3eb4d65181d089d5db4d2bda9d68ac0f17dc311aa5c956daf559749149d33519ec46e33695dce9a9766132a6e0dcb49d3966c6f0b0f6a82282"]}, "failure": {"scriptSig": "", "witness": ["597962e8961e4e72ba14b26e40d5d6c71d81563d7a041f081065262e729fa2db2ea36f6eb4c88882bdadb41f87129215cb9081fa2b807a209689ac7a5932b910f7"]}}, diff --git a/txscript/data/taproot-ref/11e26aa15592a14b6f7dc59ed4225b0ceeca2418 b/txscript/data/taproot-ref/11e26aa15592a14b6f7dc59ed4225b0ceeca2418 new file mode 100644 index 0000000000..bff3ac7f39 --- /dev/null +++ b/txscript/data/taproot-ref/11e26aa15592a14b6f7dc59ed4225b0ceeca2418 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705400000000d43674c0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0201000000aeba28e203296f2f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df97972236898731a52e29", "prevouts": ["cb58100000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "f13f2100000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e74c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e907011b224c3ef86d2f36e7d89b63e177b85cadcf6e2dbac0680b671e6366dad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b292a4f502e305109d81040f98432632ff806e9beae33e8faa7e022234476532106df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}, "failure": {"scriptSig": "", "witness": ["4c52e7", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a046b214117572ccd993880051dc23b22a6e41bbc520e5dd4f1b896f3a7710a73f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826cbd7cfc5d340306ce0f8e37fe1bfa8aba9fd4064e6187eeb928db0d0bdab726391a14412c925771c32fa4c7776d5872be2a56fee9c5a8de868e7e6e5a4c84da"]}}, diff --git a/txscript/data/taproot-ref/11ef5be6a614ca068f2c89bc602378f8ce71d763 b/txscript/data/taproot-ref/11ef5be6a614ca068f2c89bc602378f8ce71d763 new file mode 100644 index 0000000000..0d47ab71ce --- /dev/null +++ b/txscript/data/taproot-ref/11ef5be6a614ca068f2c89bc602378f8ce71d763 @@ -0,0 +1 @@ +{"tx": "7f7876df028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4830000000034c2a7f160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270da00000000bd4927c901e6090f0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb48a7a2d", "prevouts": ["7e07350000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb", "36b70f00000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f49738aff57e0a6b8995805d8d75c600ca2593a4bb41e712efc7b944ce86ac09656c167d78024cf9ac8ab753e035ddcfbd9ff3ce8d671a87b961f7dc5c285e19485290b5b24e8c4be158b28d7aa15f62440c20797f0ff9046b08dd5d16dde3f1e33f80b1056bdf2c24e0af1480ff60c2334c347ba12327dd1882336b0f4c053429fb79e32ecfbbf5bd1c1696eb5b1bcb10f531e388c1102ea723b9fbf0c99b20c2cc384f00694f2ca582ed6f519d67422787b3478b24421a6c0f267a915ffae17fcb29d5f40f8f366b918f03c7489cab980b6881ad92df9455e0b0b3b7134cc68c03c16e996ec63f484ec764477f627458d6ecb044b54bf51eec799b6c77c73f13ef126dc2f76fb12aea072623700f9e4c4acfc1ba88cd859a6adea32c0206345ce2bc3e2f6840b9682f8d28d6f6798b009b713b500f916d557bb00d0bad132f3c24c8cc2d69a4ced7956b8847e7224495190407a0a25d7dd56b175dbff8c05bdc1fd6a26ed7cd5fd0fa447ea059246968f013d778895114414babd34440d8bc5b07a91b47f59910240896b68e6976eb8879ca698c202197d7ccb29fb40602c1731dd97d43c9aed2b6aec38fafe90d690c8f656767ae40840ed35e6ffac5978ddf72d7546486a5c310c35d3ffed087d9795b44d20a84b8ac805f55945438a98a38a9550fda80bad11962c36fdea2b4c92fb7d155a866150210dd8ea50e5d3ad8c757bb6e242d7c541d75", "d47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facc94371513ed03fc9b5b146a2753e7b1ecbc6d9bbcb6df59d8f1ce2dd42b56b227fe8633af3ad90c30a4ff6253cd799a6a417bd03591c5308acef4cef6c60fd438c2fd1368e2cc97a2933efae2d13561032948a77b2cd5d87b5e0b8010cd9f32"]}, "failure": {"scriptSig": "", "witness": ["4d09023e40994aa88661520fa6e599727d1ab9e832bb0b282abd1124ea17548d548844dd0634b83b5c8c0db635ed35de4f8a83dec08f2d50958f7753e5c769656025d49febf8568d3d7733f172e292b4c9cce87312e2b499b97b8e1c483e0a54fbc8580f5579d12c2790eb2cb1e473e03812639f15bcf56c7befbcf7d064c31896dc7624e81d3e15d5a9b820e26272e6b9a4c878916877386a2c2b3038939053644ffff156945ea7b218ebfeaa10e232e794f7f5fe244287ac427142a748325bb069b1c5ba6aeb061e841fd02ff9ae34e35f14c6a681ec9350b40a7f255b5909d5f1bfa95e94005fe04206798223cc28b0904cd761ea42a2291e5ed447800161c48db345957c7ddd0bf5460837be67bdf4bcf24941097e599cc8da062dfcab3cf264e95748c71b390d2e473317b2cd6b3a1505419611bf4416e769fb19c2d8050c9f0bc2bc3d9620e861c2f1849b4a4eea4ba8bf9d2dd2b1f7cb1ec26c3f88046a9a3573881044695f06ab7e154e7184b9c4408f8f1d13190da516bb6a6bfb5f0e0275cdfbde8395b311a64112aedd23024e8106419d161efca56dbfdcd511c202341687438187bdc3561b6a845e09e329d9b14fb9f607b488b4faa0b40c56f7aed547dada4f0286692f3c41c13d3c6345e80287b5c56b5d2640d62e0abceedbb16304f22d7c5ab0c75961b177f1af3f91392e1f43fe9190085d9f4dffe6772a2d9317e41fcdfa139c662e8875", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369694bafde2e274b368d6d3b86a79da485f5d9deaac6205f36033c146f59aef9927fe8633af3ad90c30a4ff6253cd799a6a417bd03591c5308acef4cef6c60fd438c2fd1368e2cc97a2933efae2d13561032948a77b2cd5d87b5e0b8010cd9f32"]}}, diff --git a/txscript/data/taproot-ref/121e9e0d61998a2f829c791e9f23a065b8ce683d b/txscript/data/taproot-ref/121e9e0d61998a2f829c791e9f23a065b8ce683d new file mode 100644 index 0000000000..70294a0dfd --- /dev/null +++ b/txscript/data/taproot-ref/121e9e0d61998a2f829c791e9f23a065b8ce683d @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff8000000001375d4d460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f101000000e076448004e67f8600000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acb4030000", "prevouts": ["620f7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4e3c0f00000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_14", "final": true, "success": {"scriptSig": "", "witness": ["472efdcc4bcabdde7d5b4f147cd6bcc16505dd0aa41a77d4e90a49fdb8bf011aa2ec2b3576c822a55290d1e7e10e5e51c44f083844c5561f44ca3ed214581ab782"]}, "failure": {"scriptSig": "", "witness": ["ee16f338ced795c4bb32d7c6c443d28feb43c1533d667ed29d2e35200acc18ce1c507a11412a4707654ae549de36ad18f218626cf6de269ea510911bd0018e6114"]}}, diff --git a/txscript/data/taproot-ref/122e57288341172f17f63e1689fc9a205e9e5905 b/txscript/data/taproot-ref/122e57288341172f17f63e1689fc9a205e9e5905 new file mode 100644 index 0000000000..0c9c9bf972 --- /dev/null +++ b/txscript/data/taproot-ref/122e57288341172f17f63e1689fc9a205e9e5905 @@ -0,0 +1 @@ +{"tx": "db212fd101bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8f01000000d3e8b7d40278c269000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a665fff835", "prevouts": ["396a6b0000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a5119591238be1dbb96dac89a2a1f4200bdf9ca9ffe70af608a628a478a97cfd82e1f304fd5cbcea150151ab9467ed7486524704f6f52be5784e497cf75255948f2d3b38adb8d43e963794c7c849e38b96159d46161410258dff8455721475eda4a439cf7360b606ade423dedbcf68e000a449a5c29ca30f8214e663b5d8814555c4f61973560e1f9ca1364800e359bb1eb1bab74f0d94c9cb3357557af24515d54d1d44a4bfef2597e8260d3b7ea6caaeb30d79fdf50379e989ed159a35d661fa3c2033d1640b03e018857a4e8c9c17ef041f9d177edc87ed86b4bbe57513723ad8952b174a25cd1553e775e2ca21c74adfca8ea192ecef0f9a746e7faaaa2649138c9d9907b0f99f890a0610afc95b283692c4b843558a929b80072136c64b58b8e3576e409cc4398b453b1136ce9a90a80dbfb98b113fd3c22202ed94f701259742caf849a945675ebeecc125cb16f935ce68800a6ca2599208899d72d23829c6c0cb5c991d6500e86e8102378e6849f3f98e77a9d29415896cf2dcf894d9f6adb07406cf4856d17152d55bbea73ac6090dfbaef00f59de3b952aa625c133e7294acfb968b34e5fb795d6e3b979eee0b3a1ef3aa158cfda9b676686457ea4b75c3e7477666392d2f159c406fb7baad0fed77a59cbb6aa31d751ed1b75fd3e447e2fd066e986ae57b6ee84d6d67eddbceb1d5182d30e4a7cd131d9aa5176688a5395e5984c10f87a75", "597d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93640c4fde89207c6347043abb6407e1fad26c074a321948ed0af8764114916a85f613bea5824cd1812f2095288c03f032c5bbbfbbcd6a739f4744a40299340ab834be962498b383c32e8a84fa570ade752f3a2216469b10dbfd65078bd8e1b5998"]}, "failure": {"scriptSig": "", "witness": ["4d0902761724686fbb95927291d5f9a02b864b6c6593ee844395c7ba318c8b6d9d880156ab95e1a1a00d9238abfe4a8cb2bcdb1262d6dff2fcf789b8714ca19637a47eff2438b5d7e3dd42ea7785ef92052ee84b532dd19cd59beb11fc7ce95afaa108fc8844378309d8ec3850160b8065c05218aac6ae82f4279f64b45e9d5c2879874eb9e1c75ea61dada5dea106ccac88dd96afd7ff4376b128097e29b6104521914654eec1f73479ad069b1b99075a0a99c1d5bc06478500328bfa6841a6eb43909316e4dfa0628f5151fa33a9bebeddb31b3d2a1cbcfdc5618e4db77fe6b4cc3e155769e1579c1679b3b8b059999769f6e3c89bfe76968b9ad46f90e4a9921bb2363c027b324f1b1b65d2341a718e791c7917c253d4530e8aeabc3f35409b4d5678170e79d373b80a28b7246bc14c4f89004116298f5e61530ed617728d80d96ec01a7f5fb066bb7fccb516922b255cb8079856c8b5aaadc6351361a7a436ed4d350b961c66647fd37582ee5608aa7108f5b3d4b0420cfe663e262066818e7787de72dfaba5f710db7717e07691be14e835eb8b6b398d06077f2ee8b77ee994f955d67cfc8a2a8fe5c907730eeed4f898442d39c49aa4bc1e40979d22a3bffd0d6ec7af5e74f0e0c695665c12151623f8b2adad509b4bb91bfd101526905c8e506f38a03eb28fdb2f9b1770e7ce1972571f7eb4a4817890c35c48d1126b47bb342361804f5917c5d27875", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b93df312d52b8f2dd4a25d0e8ed5a68dc4d03b1b80fcd966f75d6d56b0f35fc7d0160c53d01d80ab4be204ae4e021ad6f56ad3990ac4b37baa4678d530d3ba4ecd61c62feef9509bc7b3762bc81079411fa6867ea4986820580c60fa1e8298e9"]}}, diff --git a/txscript/data/taproot-ref/1260bed4953f82e80f379c79bc4484db28c58d8a b/txscript/data/taproot-ref/1260bed4953f82e80f379c79bc4484db28c58d8a new file mode 100644 index 0000000000..5b1effd2dc --- /dev/null +++ b/txscript/data/taproot-ref/1260bed4953f82e80f379c79bc4484db28c58d8a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6f00000000469d4db760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ca010000008269a1ba0146b74100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5d010000", "prevouts": ["31f95a000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "7c1d0e0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063eb68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045c5036d5496e9f4f5147754f04cc929214b621a1df3bcbd671a812d74f0d7877d399891b33f3277cd8a2b8473e2e6079de1e6f51840c7864da48d9f2287dbe494cf9ce2244c675144b577c27c052f9ebd481172245e28e9502c6c6e8f12c64fa6"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f8e29bc07f5e449d4f156ba38c490a95b3b86c2d169e953b485a0043ccbd92b2c5036d5496e9f4f5147754f04cc929214b621a1df3bcbd671a812d74f0d7877d399891b33f3277cd8a2b8473e2e6079de1e6f51840c7864da48d9f2287dbe494cf9ce2244c675144b577c27c052f9ebd481172245e28e9502c6c6e8f12c64fa6"]}}, diff --git a/txscript/data/taproot-ref/126e5c88c57ce073bc1e63e4306d21823db4b99a b/txscript/data/taproot-ref/126e5c88c57ce073bc1e63e4306d21823db4b99a new file mode 100644 index 0000000000..231b157283 --- /dev/null +++ b/txscript/data/taproot-ref/126e5c88c57ce073bc1e63e4306d21823db4b99a @@ -0,0 +1 @@ +{"tx": "23fdaf0a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b660000000016a519fbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3a00000000879540b203c8c28f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df9797223689877e1bf628", "prevouts": ["a61d230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "95886f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_86", "final": true, "success": {"scriptSig": "", "witness": ["28e62fc2ee5d4d1c39dc02111f43286367debb2554174bfd295225e9c3e08a4ec3623d598784eb10b211e396e5f04b1a9903b6ce2185645362e1af4671d0be1583", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7e87ed8e897adef2508c81f8ca58d8f76435c1e213a052aeb6b1a81f403f49b99c27c41cfaa65b658a0432946c13cda274c0d0cceb793dd7a398116acd02e49586", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/12bcaf48556b4780abcb73c4f32bd274ea7861bb b/txscript/data/taproot-ref/12bcaf48556b4780abcb73c4f32bd274ea7861bb new file mode 100644 index 0000000000..39b891d115 --- /dev/null +++ b/txscript/data/taproot-ref/12bcaf48556b4780abcb73c4f32bd274ea7861bb @@ -0,0 +1 @@ +{"tx": "a77294ea028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ae0000000081d69fbb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a501000000e28dd3c903cee874000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961f030000", "prevouts": ["b5783700000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "506d3f0000000000225120fd767bc2bb07e4ca9357cd933b3dc41f590c00db442e0ea12a871bb96cd7e63e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["0eee1782b97d831fe5b635a1d15fba66455951c9e7db31fa98c9a13621beacba406ba378d6d72b358340d9691f1b28696a0ae33905c482e473c4b1aaf6c6ea06", "ce474e327dba7b16a19e7f022304063ae63fed1e6fefcbf342ebb202d69441094ef7adf62c1e8e206792e6f2d75db8e4a5e27795fe78e1a6bbfc8f1fc54b52e45a93787a4293df74d65e962b279ec3b8281f4e3b5da43f78bd71d08c57d231cd7e7311be70d7f92036117575b8b34b8fb4aab7c36590ea9614cf3747ca2857ac3167ea725e92eea21ca8c0027522ceb76a40b877f027b9", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ce99e795792a3b123372692f0c3a2a4c93a6e7d2ec701c9eb9ecdbc27fb0b173956ce300fd1e9317d4788f7559d429e7197ed501cac5b77a30e2e44415254b09724fef99a662e9e1211e563429ab274b90431e7afb6bd5e6bc1fc2f69ae8c56eaac2348dc1bc3cc94ec8cf7de9027247edb1bc76738ded447663208a650b6368000000000000000000000000000000000000000000000000000000000000000070c7c5c179be9d813c0cf052f58ede075dd69e9389addace305677f5b30b36513d6d2aa7d7ef2bac0796a7f067802cc09013c9938e1092ff0cff91b377243fbd10b4abd4c7bc52f818dfae0a3b844a8169fc36593cb4fcd8517ef1dc3172b6a5ddcc86569d849eb34dda562dde11802e394bfc7a773028432e86ce627b92820281a83512c0859f3be040e42fb163f3e39752589ee9236f7fe48d580e8d192204efecc98d6ac5fe619cd8ad0cbe0fc4dc0e56bbc9f1ae493e2910f90cfe3f8d98c0ad375b221c85e52d567a24f734560dd280e896030e1b12e2400dc1fee7915e8ed1d36077cda215168c9d84d4c8153e60def32a01852c2c26735e2dd6f3bf0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adff78ea746c92e4190d0870f7ebd1ce03f586d4871d15117601f3e4ffd74e3f0000000000000000000000000000000000000000000000000000000000000000c73e27c47df88642197488deecd32c4116ec1c1d8f7f333dbfd9c2669a73986156cc523ac66dbc0b610fc7bcef654b2627e947586d674f84449c8f337d5ee34ec0c43b4d2f4ecdf09f2d97bff72819c23fa178f90987fe0676fb36370e93c8f2b09b5e3ac0ac3ea7e49f1a022bda0c0d6baafa3ce41cb6a8b1b060d6fccc723934f5021c5ec5c2dfa5528ffc937480d61e05927f2e2520ee5ca048e551cfda9579584991385068c9da37431443a24de399dc09d0d76e537682de413315c926d246c5023730ea0c4860c7fd0014d26a2a4ed97903e64a01c4f630caf802221c5cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea796666a94a0c67f21efdd73ba3292e39c52318c76f9b210f748a7ed00446b1ad7e67a428810fd1e33ed1839251e4aab947571ee6f49aa48e2a150e16ebbf6d0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67d462f37a9d770a4f8ead434365d5046e2ebb8297f0e853bb3bb0beb201cb0e0000000000000000000000000000000000000000000000000000000000000000decda19431cc4754921f93ac4190ac4ee76e9e4de08e021654cef7b7cce8daf2194f1fc6826df2785bea12215cfa124ed99c3d934ad9a4b7d77d8cf7bbf940cbea4d65835e1293eb408359245301ef20afbd6a540f0b0920173d6e05e146359affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20ded9e62f73615653886d425b45e946d4462aa27e02a509d5c5386b0847b555ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3613c27ce8e2c5209a8d43492d3af6271b81ad026e26a522c8ec55518cf8687240ae14aaec29caac32227e58bcab2d1598fa149b910a9cd0a488190cb981085bb8391a784c88eac8b12b46312a4f74f8c3ceb9e8b881c6aacb015bde35d07c8d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fe8da1f9d88e3062da0007ac52479c42f9a5b81ee1f2fd810d585d00cf6556ef38749dc81a5ff71c3c675c9caa96943d99af744bc309f76bd49a9cee4995b8f02e65eb31a4a70aae63ccbd0f7b7f8d6a912f87fcf44e5ad58c9f9589edc62ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba18c4c3a42e636a8443264b2e6e8eab468027391f7c4b9e7814f828d2391fecf1b384450b1ee2de452b1834a32af2090cef8402a93122d7f1b093456d6ff73a1ad4cbdfe487f1c681c3fb37cbd28c5d811bb5ced4213cdb2e14cfe902a2e7800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5d4b29dee92766f94f831433289b3ef66829d09ba2abe29cd9a06ec326bbfa7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02ee16e1355c0cf7be210e658ce6ebd74ea4af503edae2f334b59c65a762af46797cf1ddedf299ee15e627789c8dc1c08423ed2b98ff96415c83a376c871549c93bafc7946aed19c633190ed64207ac84d8e29bc97db4f5d723f15cd6e45186bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57d7ae1df51adb96c454d716899a926b68d13c9968645cc89d3cb5f86cb7ad0f42b60ac760679b729b7d4b807b11893438bb59579294c12a8dc02797d45a86e3669345e25ad0e64f6155549f56506e4cc950539005f9f87d1c54cf5858b7288eb00ef26aa80f15e9be38c53671b5884efe77fb24e73815fb48dc37aca10e832edbbb914d4e8641c5c7026c2d11a50a72fe5431742d7a3c08cdcc47856b2757d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff089d41b55aed0337173ee62811a8094c029970d0623ac4ed1e8153a4606a47b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17e1bb55ab6f71c880fccb048eacb4d10a8cc3d4b56471a43dd63f692c3ed4f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff881c26ae3d6c9437c747bdfc8b1384db985615fba23944a17c5f1c09d1bbbf2bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd215a4d83cae44eb84014910ddc131b8a9a891f567d5930a222ed5e2d147ae23b841e46bcb54bdfac481b6520812fa0fbefe5f0ba840599d459e472faafaa792dfbc529aaaa39fa38c21ffd97070982f76989e44b1fe6ba3ebc515e22769fe6e740e3e0bc9e28d77576468dc11ac305ba8bcc3fea44f9ac8926b8095a1b35c400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8dd6f353ed25b9760df5d18dfabde5abc637fbdf4b4fbc8f271e941c2111fec5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024345a9a2629ffa5c80af68be2abe39baa7565e3101dc49714683273bf926cf0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7239678bdab2834bc126c9af902186f0e1beeeeb1b13c60bfa4c0ce8245e7321b8b07ab64ae13c1f260f34217a5ab4d79e56b6b01cf58746b43fa9b756e64b8c000000000000000000000000000000000000000000000000000000000000000037af4931d2296edff9601a2574d241f9a94a0211e878244c322743f1cbef996432c4641166bdf22da19cb0a5f3c90108b3a825bb829d765c4647706a0215e3ec0000000000000000000000000000000000000000000000000000000000000000624dd1a53cd497e05917360cd8d4944ea710ee7ceb01c82f93be995f0c987354ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99860e967739a24f87874bed00b417705d9da1c1609106d5c8ce02eea1c0e5625c230f2a4335148a105219d3a1945b3b4e00df0452882ef5100bf23f22ebd5a40b6185328e20211949fe04cdeeede68f0c4d45644a13cdb74cf2444d0be0f5e0bead34447df0fb6000892f14786ce165149060ca0648385bbedcf24b398c6148f8314fa195f351df9e4f10dbb0d36560f3e37896f00dc6ae4995b4456de943ed00000000000000000000000000000000000000000000000000000000000000008ad7f587d130728e281e6557dc582636c00bd0f410b4db21930e82d84617c0e1745226160b9794b3d0ee89d473050505ea3a87e59d8cfe3609beeaaf85747b396de35437058f4dda156063a419fca8b483b352b8816a9eb40fbcaa5d4e5b4a0bcafeae664288c1883780d2eb572e811b3948af113aa57e256e0b645e2643348a209e3471a8178ef49be358ba1a1b821a696d354e8019437766cdb980d8a577bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008424e83a7bce5e70a44f2dc898fa43c2fb1b1f65ed16dfcc1047c83c5e4d856a145ea7b13e44b74135c6d7a0612617c38da6647d97f7e6c74be49ccd9fac8976918ba41213fb71b7844b1b6669ac9d2553545279c18ba96d1f161295c3dfe580b13665b2d82f719efce463a0dd962d16995092329b8065c7948b3ed93df1a2bde63e6804c4a650fa562053414457f5e53dd60051e198a0612b24997f8ba9241a60100ffb7196defe5eb222672be5d06a0a24a9ee6b3e0d68b6d9b57e2cf4bf7d6d10c2901d0948927be1b43cbb38ce0e2e75a59c484e6a051bb4d06cc350d9a7df24c911b0c686b13da4842e3f1791c591e6e7c5d495c106ab721c1eb10df6fa983cb7e31745de028fadef0320dc751c0b07bec602f522cff0b9737a536fefeff7d8b5e85792031ad2a46f9efbd5838ffc3330a511f129987b211bd6f48ea186"]}, "failure": {"scriptSig": "", "witness": ["0eee1782b97d831fe5b635a1d15fba66455951c9e7db31fa98c9a13621beacba406ba378d6d72b358340d9691f1b28696a0ae33905c482e473c4b1aaf6c6ea06", "063f8403c9a8ee48c87b859e858579b6c39196751715df2fd4594b214d28918766fa70ec1fc897502f41ce11673996aab1105ecdd3baff21871dbb807e140759099f15a3ec7e37999fa31fcd7ad12a14d4b09e141e51ef66775529dbbe1d7494d01e48ec3a9eb57e7228479c787f99c396afb3f87b95b23f0ae2633b2d88e83a4cf588d6ce6299773e351c05d19d605ab16b9fea15c9", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ce99e795792a3b123372692f0c3a2a4c93a6e7d2ec701c9eb9ecdbc27fb0b173956ce300fd1e9317d4788f7559d429e7197ed501cac5b77a30e2e44415254b09724fef99a662e9e1211e563429ab274b90431e7afb6bd5e6bc1fc2f69ae8c56eaac2348dc1bc3cc94ec8cf7de9027247edb1bc76738ded447663208a650b6368000000000000000000000000000000000000000000000000000000000000000070c7c5c179be9d813c0cf052f58ede075dd69e9389addace305677f5b30b36513d6d2aa7d7ef2bac0796a7f067802cc09013c9938e1092ff0cff91b377243fbd10b4abd4c7bc52f818dfae0a3b844a8169fc36593cb4fcd8517ef1dc3172b6a5ddcc86569d849eb34dda562dde11802e394bfc7a773028432e86ce627b92820281a83512c0859f3be040e42fb163f3e39752589ee9236f7fe48d580e8d192204efecc98d6ac5fe619cd8ad0cbe0fc4dc0e56bbc9f1ae493e2910f90cfe3f8d98c0ad375b221c85e52d567a24f734560dd280e896030e1b12e2400dc1fee7915e8ed1d36077cda215168c9d84d4c8153e60def32a01852c2c26735e2dd6f3bf0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000adff78ea746c92e4190d0870f7ebd1ce03f586d4871d15117601f3e4ffd74e3f0000000000000000000000000000000000000000000000000000000000000000c73e27c47df88642197488deecd32c4116ec1c1d8f7f333dbfd9c2669a73986156cc523ac66dbc0b610fc7bcef654b2627e947586d674f84449c8f337d5ee34ec0c43b4d2f4ecdf09f2d97bff72819c23fa178f90987fe0676fb36370e93c8f2b09b5e3ac0ac3ea7e49f1a022bda0c0d6baafa3ce41cb6a8b1b060d6fccc723934f5021c5ec5c2dfa5528ffc937480d61e05927f2e2520ee5ca048e551cfda9579584991385068c9da37431443a24de399dc09d0d76e537682de413315c926d246c5023730ea0c4860c7fd0014d26a2a4ed97903e64a01c4f630caf802221c5cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffea796666a94a0c67f21efdd73ba3292e39c52318c76f9b210f748a7ed00446b1ad7e67a428810fd1e33ed1839251e4aab947571ee6f49aa48e2a150e16ebbf6d0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff67d462f37a9d770a4f8ead434365d5046e2ebb8297f0e853bb3bb0beb201cb0e0000000000000000000000000000000000000000000000000000000000000000decda19431cc4754921f93ac4190ac4ee76e9e4de08e021654cef7b7cce8daf2194f1fc6826df2785bea12215cfa124ed99c3d934ad9a4b7d77d8cf7bbf940cbea4d65835e1293eb408359245301ef20afbd6a540f0b0920173d6e05e146359affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff20ded9e62f73615653886d425b45e946d4462aa27e02a509d5c5386b0847b555ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3613c27ce8e2c5209a8d43492d3af6271b81ad026e26a522c8ec55518cf8687240ae14aaec29caac32227e58bcab2d1598fa149b910a9cd0a488190cb981085bb8391a784c88eac8b12b46312a4f74f8c3ceb9e8b881c6aacb015bde35d07c8d00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007fe8da1f9d88e3062da0007ac52479c42f9a5b81ee1f2fd810d585d00cf6556ef38749dc81a5ff71c3c675c9caa96943d99af744bc309f76bd49a9cee4995b8f02e65eb31a4a70aae63ccbd0f7b7f8d6a912f87fcf44e5ad58c9f9589edc62ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba18c4c3a42e636a8443264b2e6e8eab468027391f7c4b9e7814f828d2391fecf1b384450b1ee2de452b1834a32af2090cef8402a93122d7f1b093456d6ff73a1ad4cbdfe487f1c681c3fb37cbd28c5d811bb5ced4213cdb2e14cfe902a2e7800000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5d4b29dee92766f94f831433289b3ef66829d09ba2abe29cd9a06ec326bbfa7cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff02ee16e1355c0cf7be210e658ce6ebd74ea4af503edae2f334b59c65a762af46797cf1ddedf299ee15e627789c8dc1c08423ed2b98ff96415c83a376c871549c93bafc7946aed19c633190ed64207ac84d8e29bc97db4f5d723f15cd6e45186bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff57d7ae1df51adb96c454d716899a926b68d13c9968645cc89d3cb5f86cb7ad0f42b60ac760679b729b7d4b807b11893438bb59579294c12a8dc02797d45a86e3669345e25ad0e64f6155549f56506e4cc950539005f9f87d1c54cf5858b7288eb00ef26aa80f15e9be38c53671b5884efe77fb24e73815fb48dc37aca10e832edbbb914d4e8641c5c7026c2d11a50a72fe5431742d7a3c08cdcc47856b2757d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff089d41b55aed0337173ee62811a8094c029970d0623ac4ed1e8153a4606a47b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff17e1bb55ab6f71c880fccb048eacb4d10a8cc3d4b56471a43dd63f692c3ed4f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff881c26ae3d6c9437c747bdfc8b1384db985615fba23944a17c5f1c09d1bbbf2bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdd215a4d83cae44eb84014910ddc131b8a9a891f567d5930a222ed5e2d147ae23b841e46bcb54bdfac481b6520812fa0fbefe5f0ba840599d459e472faafaa792dfbc529aaaa39fa38c21ffd97070982f76989e44b1fe6ba3ebc515e22769fe6e740e3e0bc9e28d77576468dc11ac305ba8bcc3fea44f9ac8926b8095a1b35c400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8dd6f353ed25b9760df5d18dfabde5abc637fbdf4b4fbc8f271e941c2111fec5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff024345a9a2629ffa5c80af68be2abe39baa7565e3101dc49714683273bf926cf0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7239678bdab2834bc126c9af902186f0e1beeeeb1b13c60bfa4c0ce8245e7321b8b07ab64ae13c1f260f34217a5ab4d79e56b6b01cf58746b43fa9b756e64b8c000000000000000000000000000000000000000000000000000000000000000037af4931d2296edff9601a2574d241f9a94a0211e878244c322743f1cbef996432c4641166bdf22da19cb0a5f3c90108b3a825bb829d765c4647706a0215e3ec0000000000000000000000000000000000000000000000000000000000000000624dd1a53cd497e05917360cd8d4944ea710ee7ceb01c82f93be995f0c987354ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99860e967739a24f87874bed00b417705d9da1c1609106d5c8ce02eea1c0e5625c230f2a4335148a105219d3a1945b3b4e00df0452882ef5100bf23f22ebd5a40b6185328e20211949fe04cdeeede68f0c4d45644a13cdb74cf2444d0be0f5e0bead34447df0fb6000892f14786ce165149060ca0648385bbedcf24b398c6148f8314fa195f351df9e4f10dbb0d36560f3e37896f00dc6ae4995b4456de943ed00000000000000000000000000000000000000000000000000000000000000008ad7f587d130728e281e6557dc582636c00bd0f410b4db21930e82d84617c0e1745226160b9794b3d0ee89d473050505ea3a87e59d8cfe3609beeaaf85747b396de35437058f4dda156063a419fca8b483b352b8816a9eb40fbcaa5d4e5b4a0bcafeae664288c1883780d2eb572e811b3948af113aa57e256e0b645e2643348a209e3471a8178ef49be358ba1a1b821a696d354e8019437766cdb980d8a577bbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008424e83a7bce5e70a44f2dc898fa43c2fb1b1f65ed16dfcc1047c83c5e4d856a145ea7b13e44b74135c6d7a0612617c38da6647d97f7e6c74be49ccd9fac8976918ba41213fb71b7844b1b6669ac9d2553545279c18ba96d1f161295c3dfe580b13665b2d82f719efce463a0dd962d16995092329b8065c7948b3ed93df1a2bde63e6804c4a650fa562053414457f5e53dd60051e198a0612b24997f8ba9241a60100ffb7196defe5eb222672be5d06a0a24a9ee6b3e0d68b6d9b57e2cf4bf7d6d10c2901d0948927be1b43cbb38ce0e2e75a59c484e6a051bb4d06cc350d9a7df24c911b0c686b13da4842e3f1791c591e6e7c5d495c106ab721c1eb10df6fa983cb7e31745de028fadef0320dc751c0b07bec602f522cff0b9737a536fefeff7d8b5e85792031ad2a46f9efbd5838ffc3330a511f129987b211bd6f48ea186"]}}, diff --git a/txscript/data/taproot-ref/12e033c1a8f3298a775b13078a77bc8befe4567c b/txscript/data/taproot-ref/12e033c1a8f3298a775b13078a77bc8befe4567c new file mode 100644 index 0000000000..0b54fc4f66 --- /dev/null +++ b/txscript/data/taproot-ref/12e033c1a8f3298a775b13078a77bc8befe4567c @@ -0,0 +1 @@ +{"tx": "57cf5f4502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf6010000006a9486e760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702d0100000035f118d4039b315b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac7d735b5b", "prevouts": ["8eae4b0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "768f11000000000017a914b403773244c403f76163005c780d53872622b52c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1659142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["cb500f865cff9b4b2ebc3aa367a9c52d5827d857d852a907cc04180190a0d79e91125f2fc2eca2ab8f50e4b956da9be68cdf7040582f103d0ac8e9fdc10423c1", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/12e5f4d526a722bc9b8f2af83ae028c8ee6b9027 b/txscript/data/taproot-ref/12e5f4d526a722bc9b8f2af83ae028c8ee6b9027 new file mode 100644 index 0000000000..f8d73c4a94 --- /dev/null +++ b/txscript/data/taproot-ref/12e5f4d526a722bc9b8f2af83ae028c8ee6b9027 @@ -0,0 +1 @@ +{"tx": "8ab8cf8c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be401000000e633f1b18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b800000000e45ce987016a015900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac56b72021", "prevouts": ["64751e000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e", "23a9400000000000225120c1102a8f1f1acb509ea40275c13487a0c613f8d79621443165b53e6eaf1338d7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["8e4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb46e8601d3af4b3a958df52448c90f2764dee9285ef639d0a94e9c0ff98d78680d8d550033184c6424688af85d43f5bf525b7f6d8111e731f6e2359cae2801b117ed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e0ce34fb0c991ad9d4eca1e4cfc93a976f01940b6dde3760a5561afff4e34d676e8601d3af4b3a958df52448c90f2764dee9285ef639d0a94e9c0ff98d78680d8d550033184c6424688af85d43f5bf525b7f6d8111e731f6e2359cae2801b117ed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}}, diff --git a/txscript/data/taproot-ref/12fada550b4d90c67f307a0d563ae38283c008fa b/txscript/data/taproot-ref/12fada550b4d90c67f307a0d563ae38283c008fa new file mode 100644 index 0000000000..b786902562 --- /dev/null +++ b/txscript/data/taproot-ref/12fada550b4d90c67f307a0d563ae38283c008fa @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf610000000058cecab6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c12020000005cf0669103c7c9af000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e736847739", "prevouts": ["b31f680000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "09424900000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "627d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e1c3079426a5b5f1fe415ca1dc9a375fc9bf135fffa940368a3174df14ecf01db815577f72abc2219d93608f0bf386debaad95a87d0f429ecb808b0f22f69367f"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364044acc6a70fa5b9cf91df37d1a559deb3c0d78b0a462f26dc9347473fa4c4821c3079426a5b5f1fe415ca1dc9a375fc9bf135fffa940368a3174df14ecf01db815577f72abc2219d93608f0bf386debaad95a87d0f429ecb808b0f22f69367f"]}}, diff --git a/txscript/data/taproot-ref/13080e256b05f38789902f0dbbc437401d15a3f2 b/txscript/data/taproot-ref/13080e256b05f38789902f0dbbc437401d15a3f2 new file mode 100644 index 0000000000..85c78d6751 --- /dev/null +++ b/txscript/data/taproot-ref/13080e256b05f38789902f0dbbc437401d15a3f2 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf29000000001bb3f48cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff001000000b58b7f9404b14deb000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aced020000", "prevouts": ["68347b0000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "aedc7200000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac9", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663fad082b3d4bc896bd1c7eabf214d4027c747e30ed7127fc38c25827593872689fc6d70c1c4e15dab7d2fdd5db26cf688ca78f103ab970182d2c6706fc8281bcc9238bf2d7dc0bcf11838c34785251ea2fa5f3bb034bc98e2e8efb0909b7dbc17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e10b2b16248e513241b83875342c0ccd59e2b6d40dffb5019b56610da5b5de422d74e6cd8e612cb42cda5f7f42dc10fbfe42e4e0a9faed92158fa7e41e5f92051e17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}}, diff --git a/txscript/data/taproot-ref/1318e44a20cde77432578f5126e255855a0f8104 b/txscript/data/taproot-ref/1318e44a20cde77432578f5126e255855a0f8104 new file mode 100644 index 0000000000..2f1f78b2c3 --- /dev/null +++ b/txscript/data/taproot-ref/1318e44a20cde77432578f5126e255855a0f8104 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e9010000001dec1589bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf260000000053ee53c504472cad00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac11ed5824", "prevouts": ["65a33900000000002251202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "ee537600000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "a87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8159738ff2c4f90cd16c07bb852218b8a19eccf086ed61d505eed94e2770983c2cd165f299bdaaa06ccf8947d9b12e815a5b39fc50068532880492a3446c423d89e26d26d9f798657ab1642d8194f1f5dc9158412142f65824f82701f20125ac7"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360696a8ad49f6bde3bd1da86a2495044ebc8bdff93c87d1dc4e64279442168fbe337e31cedb20dd0ec36f43f7131008eded9387a241f89ca892d220549655a6e95def3d75afa0626f5ab572f3c9ae49b6567bf85ec43d0b3933062a3ad8b1e492"]}}, diff --git a/txscript/data/taproot-ref/131ec09b5ca700e6a035eb50138f6a7f62fe3f91 b/txscript/data/taproot-ref/131ec09b5ca700e6a035eb50138f6a7f62fe3f91 new file mode 100644 index 0000000000..0052738dff --- /dev/null +++ b/txscript/data/taproot-ref/131ec09b5ca700e6a035eb50138f6a7f62fe3f91 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc101000000c198db84bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcb0000000017fde2f5039f7f8c00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8716010000", "prevouts": ["56ff250000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "2f89680000000000165a142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["22fd611b311bceb680b02d3c506b7a6490d3073e0978b21351e00df8c57b607f8ce0221a5601fa732041c9a4b1b47ca62499157edd71151ba4088699092959b6"]}}, diff --git a/txscript/data/taproot-ref/1337852e30e2d514c14e8123b84fadb9d4aa882f b/txscript/data/taproot-ref/1337852e30e2d514c14e8123b84fadb9d4aa882f new file mode 100644 index 0000000000..053bef4cb7 --- /dev/null +++ b/txscript/data/taproot-ref/1337852e30e2d514c14e8123b84fadb9d4aa882f @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bba01000000a2f78b97dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b82000000003a48009dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5301000000e7fb77e004cb3fcd00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7f2000000", "prevouts": ["d4b42600000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "69c2270000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "926981000000000017a914971b3e5f9ac480bdcebf6ea71a9fc7de0ab164e287"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e7", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93668ce749c68de633516e195736934f8a88269848cb24cae075fce4521e857a6cdd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c61a1ab416979399a3dea56cc9db65331fc4d8e9e627e6b90ed3a4ebdc2f66c36df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936feb3983b18e4525f0a8518cd3710c3b144f3f0d5edea574e13e05d297dfd94906cbd7cfc5d340306ce0f8e37fe1bfa8aba9fd4064e6187eeb928db0d0bdab726391a14412c925771c32fa4c7776d5872be2a56fee9c5a8de868e7e6e5a4c84da"]}}, diff --git a/txscript/data/taproot-ref/136bc03e80bca2dc5f71c4fdf91e7d690eac78e2 b/txscript/data/taproot-ref/136bc03e80bca2dc5f71c4fdf91e7d690eac78e2 new file mode 100644 index 0000000000..f75db0e5fc --- /dev/null +++ b/txscript/data/taproot-ref/136bc03e80bca2dc5f71c4fdf91e7d690eac78e2 @@ -0,0 +1 @@ +{"tx": "02000000031980a99ad1eac101c8fe3dd9b7c19f4e81dda5a690601a9eedc2ce713d9132e5000000000007acc88a492909e056fa5c0ef2af542be68aba07da39583e95b43e24484150891b1d532301000000001ad6d4dc1980a99ad1eac101c8fe3dd9b7c19f4e81dda5a690601a9eedc2ce713d9132e5010000000079e1bbdd02ac0b058b320000001600146d764276c66fec1127e5074db5bff3aa6c52553358020000000000001976a9147d8c30278dcbf5bd88310a3c91abbeb33651906c88acd137773e", "prevouts": ["7371c1150f000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "b7e4d4f711000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "6689717d11000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid", "success": {"scriptSig": "", "witness": ["0e0f08267df2ceaffdfeb1cade96dcfe41721caf22f0bb89fad8d7f363b2e9a52928486dd44f7b980ec67683caf4fb4e836db5f68fc7414f46fb53169174b4c2", "20159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717ac", "c0159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717a00074c7e8df7fd91f9df9f350398e675f9ead7758f02aef75359e3279a8e0e7"]}}, diff --git a/txscript/data/taproot-ref/1390c111cc1ca46caab6bdee16d74dd49519fb4f b/txscript/data/taproot-ref/1390c111cc1ca46caab6bdee16d74dd49519fb4f new file mode 100644 index 0000000000..8607105458 --- /dev/null +++ b/txscript/data/taproot-ref/1390c111cc1ca46caab6bdee16d74dd49519fb4f @@ -0,0 +1 @@ +{"tx": "db5803d80260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e101000000d732cef260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d301000000446240800499271f000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac2c32be27", "prevouts": ["b1ce1000000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "4fef0f0000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45e04c998862288954a26ee7ce146837a88020619bd4ef6b5d2b0b49b83f7fafffc7f9c78871d6a598c7c7c3f4c8210a5c47caa8abf9700608b6e75845c74a6c5"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea2949503db9bf5110d001b5fe31844dc42c6d6df34bdb7dd462bab705d6d86ea58b6826c45b958e6a43801c4f9a11218097d5d18de4cdf93890daaefc8ad62d7d143406647e47f2aa45aee5a8d37fbb079fe3a633dc3f79123da3b3ed47a821a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}}, diff --git a/txscript/data/taproot-ref/1395575564b7da66e3b458131eaed79bc605b605 b/txscript/data/taproot-ref/1395575564b7da66e3b458131eaed79bc605b605 new file mode 100644 index 0000000000..2eb50cd182 --- /dev/null +++ b/txscript/data/taproot-ref/1395575564b7da66e3b458131eaed79bc605b605 @@ -0,0 +1 @@ +{"tx": "fdc7ce4202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0900000000f49ff5b1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbb01000000249669d202c284cc000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e77d020000", "prevouts": ["f3566600000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "cd22690000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090274e9a197dffeab560f6d764160863bd948582bbbe73ce689c2fe924ce23f82a1d8037221258644efdd306d84eea245809cfbfa3d4ec384202f58ec72347e66345c91b30aa391f1f834df7940f6d9b56538f48a4be708aa59603fa8a49d785dbb65e69e75a0c1d7e9bcc4f98c22d87dc47d310d9407d50dd50de93b1de00a25177adc8853c01370e2c5b6d63d8d683145516bced6d17963bf18bffb621791c742784a397ab8ea9c0403b2ef6cd682331f4190e20687f5c49e3bdb6173f0e4cbd900991ec91d23319dcfd82f73226f6378fc5566fc61f9389034354b44c9bd4fa51dca410a0b0cefb28877432b5f7c8bf5f61f8eef57c550d4db2743bfa3fcd2b56d563ee4d11618802db67891ddfd3c0412436d3b1c63daf95dce4c16779f271831df892a04b911a54905b7b3baae7324c5a73f3d3cc12449f40ad9d359e82a67f95fd8eaea473efd1612ae33e383b268e73e631c92d217b32a42ff4e20f8d0407a77bc91badb9d7b54c63de0be89648adfbb793ce1da94f21b862b3ece8fe000c41595f7aebb049d6ec7fe0444a289a77e55baab9bb29c680581bfae20bc9e51bf8b8e1de14e1bb260805f1aa99d60aa8bb5da698a3e7ef28890140bc9d47a58c5c4e539c1d3ef7b73167c963bd0bbbc565b92ba3bb904a39cf425e3bc9f57d2201eef5ee9e73dbe5e9d272a328fc13856a9a51ed9fb86a5937451e0b31672a1978e8d3f677e276995757f", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d0abc6c99cdb1b2d92cc3611af9751bdc3c9fe9addf653926779bc3342f99dfdd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51d82f8c55e99af1bc6044802eb870171f459184b3c99e354e12eac4f204be9c37cf5fd42f9969f7f2472ed1fa62ffa49909a09466cf06ef7c57cb1be351156c54"]}, "failure": {"scriptSig": "", "witness": ["4d090233a526de0f8ac4aa3fa3ccef384d54a17b4b15234b92ab8724d6f68bc591e2c9bb0a88a7f4bbf7d0e1dafd8c1987ab1854abb1752239cdfb383966c02e6d3d81c9970759b59b2976e026bb9c9ac779fcfd5c58e91ae463bf867a1b6e88ebebc06ac3e1ddf878a16ebe4849dc3cedf716670fb602abcf458ae3d7053316a8b156627250b5bb6a01faa6ac51c538dd4d0d342b329e4add88456551b48e5be04dee9973b0b15eeee8f184c367b808f486755c92bb6568fa43db56d206c553d84b081d60c4742529039bdb73167c9493a80e860b9ecf71fa908cd3277e8d1f15b3cd325c7e827aba540c067ebedf36d7bbf7278df90eb5f0dd2d2e5f2a63dee773565ec329ea4e2c4a8915ceaf298fa8b416c4c3f337cb96a4870558991255bccb4148c38a296225c0159726043c89de079fc8b4c8dd9205d60342540c3d57c391ff1630c4a267f108e35565f762ba6310a9c4f225bb884242c3d82eca4763764c04da1ae7fd9ffe8c058e7edd29648d1c9bebb2359d7474c116b9dac03481c589ac7fd54699a1afb575661cffa385a6e9c78563c4d18fcfd852662340697abfaa340e948d5905289cce6fc54db5cea6b1dccf9eca35708a812a4f28368265f47c2f439a03c267b7df015a558e1d82da98a06289a915a5b05e44233a3a16b84072cd93bc52eab1f13828aeebc268c2e80ee9f675c77c364f310cb2ed8a2fa10f9be56ed93dd3603d2102607561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720480120d5a477c096fbef97d1ee2aeb957fc425ff8aedf322b93097b3a97db744cf5fd42f9969f7f2472ed1fa62ffa49909a09466cf06ef7c57cb1be351156c54"]}}, diff --git a/txscript/data/taproot-ref/13c9792e4f626e8f900acfa50cf122a5f5f15030 b/txscript/data/taproot-ref/13c9792e4f626e8f900acfa50cf122a5f5f15030 new file mode 100644 index 0000000000..738fc02e48 --- /dev/null +++ b/txscript/data/taproot-ref/13c9792e4f626e8f900acfa50cf122a5f5f15030 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7d00000000bdb388de8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42302000000684f888f0147fd2300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5ac08453", "prevouts": ["109027000000000017a91468f63610c45a6790781558e4d5ce83e16e8f3f3b87", "d6aa3a000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2352212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["0a4840b5169b4280cbc2bc61182b91f2558a29f20b31871018012c08fcff664659201014f10cc1f79d371fc6ddf3ab6aff415211de5436aa097fc50eb3f1dbe5", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/13d37de420974d4290a6029f20175feb02e1106e b/txscript/data/taproot-ref/13d37de420974d4290a6029f20175feb02e1106e new file mode 100644 index 0000000000..a9c1730f7c --- /dev/null +++ b/txscript/data/taproot-ref/13d37de420974d4290a6029f20175feb02e1106e @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1501000000e3ee7de3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c32010000003f2fec4a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b8010000006499adc6032e11bf00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc77d690e25", "prevouts": ["38975c0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f", "cb9154000000000022512096d49a663447a0304343e0ca844d9bda5a7da8dbda233b650dfa03e219f7bd31", "eee1100000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063ea68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93648734efffc6fccdfa671b85960f6a2915d6c681467297c41489a3521a420b294a2d42db82fd8c87bf94597052443343fe22a3a138f6b0aee44f71ff1c976f3ab32777cb2583add22ba560e78ee9942bfe3080d15b9172e7f2c8ac5adf5c65a1c36f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb1d5ef1e00fa5f70010a57f200748b29ecde733e01f3ca7c1bafa26b207d579538b2525e5ad3e6ab2346b1907a9f51d3650fdbb6911031be2b995911891caa483976a7e8bc20bfa4c53f64ff2df47d867849c8cbf6df51014735817968d498535c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}}, diff --git a/txscript/data/taproot-ref/13d9b1cfc7b7864ec3f85c71a1046df30cc17b62 b/txscript/data/taproot-ref/13d9b1cfc7b7864ec3f85c71a1046df30cc17b62 new file mode 100644 index 0000000000..008fb53104 --- /dev/null +++ b/txscript/data/taproot-ref/13d9b1cfc7b7864ec3f85c71a1046df30cc17b62 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9801000000acfffbeb02e4216d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac90020000", "prevouts": ["5c146f000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/unkpk/checksigadd", "success": {"scriptSig": "", "witness": ["cbe468d342d05067cf759e7786fa7d773f6336a46b8c391ba4988671fed73eba50cb6bf0ff1ce15f7af17ef4cdf4f7e5263990e8e8643b4fbdc8a7adff46e33e", "0051ba", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93629231b61c6552c60ab78187651c3584908ae1e5e6e6a28ea4234170b970c6fec00265579c9ab465d5922d1fe7ccd2a380d6e9c28a567fff5af501862d4fc50743de45c89862fb0bacbcd023499749ca2835a6e0cc10c045df6197f376a1b3da887ace9cacfd100dcef177ae09ce8bb2caf65c00693dfb1e2f65365235a56a522d6b917ab95e1fd9fa58eb1ad6ac180fd5b6f88d1a1a8ec6fad554fcfbece624ac8cd84c5af0b4719e62f8d2013ce0d4d13327c4e6fe65e29938735fc43debe5986c28c228ef1888dee344e41f26af0a1b5fd5ac36fb1e0b8256949ea91a65877ae71cede4162d7d56c21d6566ef88bfb31ac917ecb9cdbd205e92e106d62fabc32a651adc155e6b8aef622a203b8c3224e433a61efe40438a1ee3abe76600fe6967dbbb0216d0210891492746b07a592ae85bb43ae3347ec0e25bfb45e954be856f68441022cd3a444817edbae2583eb76683b8480293994d059289218f0d4a79d976568d9e92c4f00b9c8d7cf447c76042a3234918f31ddf63c43fdd94d6a32c000fafc31f95a626ff6b47272847de898d0fe9392d6cb40a47f54dc91f8f8111360dc44ae3d69de3386cee559eb49e6c76a737e105f9117431d64c73a13a31f98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["fd432c6b683e9b89ce010ba01631811316960fd946a28e9042feb1be6d99aa0b333b6d3e8a176dc16310d717ed191409e423131e93227765e76ed44af30ca557", "5400ba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368cc4d632c25fb1473ebc2c4691dff712f1529879b16cf6e01c3498b371ad5643f043ba3d030a3b9cb1de0a60e5c22d352c9a6b0167bb0429c65653ad93c6b5ad75df7d692cfa002fbaff39a633e2a3d0c51d8dadcd4fcf0c857fbd83ad169fef2faba22bfc7a47f9e635144f510dd0bf27279d7f381c4c7abb10bfa7caa6f45212b1384dfb83dad558f50952f8dc7a4c93fc05bc0bf8f252596f3f99dcc4aa25ab6fe4c1776346de255528baa11f4624c0da11cd67d3944bc9e3c23527f253a174940966dd57e339c9cd051354c05cad3fffcfa87d89865f388df6a9793fb850795b387e411ef7ecd738a90c270a9e8b41d104f0901d65be980e017742035d2ed5a15550423aeac2e288a32ca51234efdd8592bd1b66a7f846be8561b7af73c90baa320cf1711a17ed2a311e1783897c17c40a4468373563049ba8a82c1cbe704bb8d89f21761581480cc9fb789613a87d31235185f9da4b4384725e898ebf0d2c5eddaeb8557ce0f7cc7880e698091ab104cabb34aeeeb5d0f57ea86d1ebc555dfde575d48d1eaafa8343c63d6f5425984d2425aca274be02e47a5142e089ba2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/13ecc0464cacec7245082422e8f3212d959e0fa9 b/txscript/data/taproot-ref/13ecc0464cacec7245082422e8f3212d959e0fa9 new file mode 100644 index 0000000000..b014c5e6c6 --- /dev/null +++ b/txscript/data/taproot-ref/13ecc0464cacec7245082422e8f3212d959e0fa9 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0d00000000f0d0e5afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb5010000001fc1f48c03cccb44000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acfc000000", "prevouts": ["f2bb1e00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "59da280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_7f", "final": true, "success": {"scriptSig": "", "witness": ["e44b59fa69e292937d8450cf79b089361836967397d8a696e30cbe1cf896268bf7e0704f77bde10b992b87a8fb5c570fff52fcbb465352faaa49e954f03e28d983"]}, "failure": {"scriptSig": "", "witness": ["0ff7815b0b176697d6d7cebe201eaab1db60b0a4c521fb67becdc3dab42147ef948c5bb528e3a81bff4f7c9d102135a9003002a21d1cae0eed13adbf356c63db7f"]}}, diff --git a/txscript/data/taproot-ref/14450718a3a9e2266004b863df27746606f071ae b/txscript/data/taproot-ref/14450718a3a9e2266004b863df27746606f071ae new file mode 100644 index 0000000000..009937b569 --- /dev/null +++ b/txscript/data/taproot-ref/14450718a3a9e2266004b863df27746606f071ae @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc501000000731a1b27027c5774000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748751ef9a5d", "prevouts": ["c30d76000000000022512047adffb94737afedfc89d87094a195f595690331a7dc68829e77727baf25a9ad"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360793597254158918e3369507f2d6fdbef17d18b1028bbb0719450ded0f42c58f"]}, "failure": {"scriptSig": "", "witness": ["6a52616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/146b0be5a219a70b803fc5f82ded6f34e4cf7a6e b/txscript/data/taproot-ref/146b0be5a219a70b803fc5f82ded6f34e4cf7a6e new file mode 100644 index 0000000000..a5ebe4e192 --- /dev/null +++ b/txscript/data/taproot-ref/146b0be5a219a70b803fc5f82ded6f34e4cf7a6e @@ -0,0 +1 @@ +{"tx": "f66b5ce4038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c465000000005be9d6eedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc300000000394663ffdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c08020000000e1b4af6047d16af000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a62067231f", "prevouts": ["3e80410000000000225120783dfb3310d474c767ef9239befe26bff1665135289516e5417abb1737338f98", "172323000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "8d5d4c000000000017a9141757f4686f091b43a46fa47e92d07c87fc7a205e87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "165f142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["63b2ebbc764413c404afcf95e5f700ede4e39144ace8feaf943a413b057ec4448b8eb76fd6be2329a202b567268662569010b636e4fef4c7429523b227dbb93b"]}}, diff --git a/txscript/data/taproot-ref/1477a76ad0e64b74908b0f8a89549c7cf7190288 b/txscript/data/taproot-ref/1477a76ad0e64b74908b0f8a89549c7cf7190288 new file mode 100644 index 0000000000..7486404c5c --- /dev/null +++ b/txscript/data/taproot-ref/1477a76ad0e64b74908b0f8a89549c7cf7190288 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c130200000021444841dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3a0100000069712e0e01f62b6b000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787a59c0849", "prevouts": ["bf775c00000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f", "e8922000000000002260202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["3a3c590ec08cdb332be8e81f48a4b67e15e9fa330c9c6e57183c9027fa4272edc0c23e4668924216c7e09268bbbdc2dcf74344cc96681f2268e9affdffe701a0"]}}, diff --git a/txscript/data/taproot-ref/1493716a3ca7c3194959cd177b8dd531b04b0b9f b/txscript/data/taproot-ref/1493716a3ca7c3194959cd177b8dd531b04b0b9f new file mode 100644 index 0000000000..4dde4a4337 --- /dev/null +++ b/txscript/data/taproot-ref/1493716a3ca7c3194959cd177b8dd531b04b0b9f @@ -0,0 +1 @@ +{"tx": "06cb7a96028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42e01000000df4b95b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3200000000adddb4a50374fb5d000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acea040000", "prevouts": ["f3563e00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc", "fd30210000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "067d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823f226bc542f166b7ab1884d7601266c0b79ac59ceed404fe5ce2372ecd38c8cf9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ed1973e93f7ad3f562801731a237f358bfce42fb636b2a0dab3a823989e87b4ae"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93662b4c4e03f8bbc4e0fa6de616a7b17503976357af82c5e4ff1a693444fc6910b3f226bc542f166b7ab1884d7601266c0b79ac59ceed404fe5ce2372ecd38c8cf9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ed1973e93f7ad3f562801731a237f358bfce42fb636b2a0dab3a823989e87b4ae"]}}, diff --git a/txscript/data/taproot-ref/149679a6778ca49110eaeac21b33cd449242eb91 b/txscript/data/taproot-ref/149679a6778ca49110eaeac21b33cd449242eb91 new file mode 100644 index 0000000000..328132de03 --- /dev/null +++ b/txscript/data/taproot-ref/149679a6778ca49110eaeac21b33cd449242eb91 @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127086000000003a2fcd2c0453f10f000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7b2000000", "prevouts": ["43bf110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_58", "final": true, "success": {"scriptSig": "", "witness": ["ec39ab289167b4733f108acbf62f1118bd04b5979a66afb0f3c68018d0ce9a502d9f5c7c3300c72e2a8602ddd053040e72ebca258e951c089842e4eda60c5a0783", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["54ead5030a14a9f3d394b7d5b28710aef56bdd7a3d8cec3c3d55009ff788bc433728ebd60a03a77b475bed70a84da7938510401f95cb61c258545b30ca02cf3358", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/149bceae555709818ddc8eb34d3cf4b508780b88 b/txscript/data/taproot-ref/149bceae555709818ddc8eb34d3cf4b508780b88 new file mode 100644 index 0000000000..c45245eb7f --- /dev/null +++ b/txscript/data/taproot-ref/149bceae555709818ddc8eb34d3cf4b508780b88 @@ -0,0 +1 @@ +{"tx": "85ad78690260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701102000000aa846bd8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bce00000000353636d60413b23000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870a020000", "prevouts": ["b39f0e00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8", "28aa2300000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c2c55a726534a8d0321aea5300ccc37acb5b1fc81b19755e9d039e159ccc6bbd6e55e6cc099b3fd5cca65d40087200ff064f8f598dc371f61f8d957b472ffb5414746b6cdbbdbe747c087a2d99e7432ddfa1db1d7a6445e7dea3810e7475536557a61376c510bdd1fc860151a3b261939fa407ec1a2d0490cf2efc4278abc783"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f12e5bdadb74bb113beeaaa5995d4ebaa92337455ee51746db1fb6fe7db125e52d50ee9aa3de1fe988255b0d8b9f34dc2cecc4a96432b9f704e90359a06b468476e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}}, diff --git a/txscript/data/taproot-ref/14a9e9b7200758410bd419f2b0954ec253e17889 b/txscript/data/taproot-ref/14a9e9b7200758410bd419f2b0954ec253e17889 new file mode 100644 index 0000000000..f6b3df58c0 --- /dev/null +++ b/txscript/data/taproot-ref/14a9e9b7200758410bd419f2b0954ec253e17889 @@ -0,0 +1 @@ +{"tx": "0572398202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b01020000000b604692dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcb00000000fbc4aeb20342553b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7fc57fd5c", "prevouts": ["c5281f0000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "26c71e00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "de7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936de23aba2d7dfc49771c3511939fd66882f5955aeb1ffd7f3f853dee6c699f10346c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa827b55d11351c6fed41de6d200bca95500243dcc7874125f5161f5be208848f0ac1d0874bb493d5b277fe586a1908760dedf191b70e37bd9b06448d9d8257f0a"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93603f6319fbb8104be3478515f2930ba3b255e646dae280e79434cdb319e4e3729856e164d8f95680a310901239278cf924747110c023e5c9b2077227ee61e12b7ac1d0874bb493d5b277fe586a1908760dedf191b70e37bd9b06448d9d8257f0a"]}}, diff --git a/txscript/data/taproot-ref/14b46e9b808aa20b426e21803aebd6efffef133f b/txscript/data/taproot-ref/14b46e9b808aa20b426e21803aebd6efffef133f new file mode 100644 index 0000000000..2761fc6d4a --- /dev/null +++ b/txscript/data/taproot-ref/14b46e9b808aa20b426e21803aebd6efffef133f @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8100000000cd228e8dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa4000000004c9db3ce04ea51bf000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a60d000000", "prevouts": ["11384c0000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "6aa37400000000001659142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["9a1626105ce106bafb1b13e47bcbc07de6a37e6f07b467c39d053d20253c064f39d7f135eaeb21eb50f1b7ae032cd0a1a96a4593bcba4e4f277fe871479c0a10"]}}, diff --git a/txscript/data/taproot-ref/14b583f6a2bb67ac548a6daf674748880c14916c b/txscript/data/taproot-ref/14b583f6a2bb67ac548a6daf674748880c14916c new file mode 100644 index 0000000000..a79f5974d6 --- /dev/null +++ b/txscript/data/taproot-ref/14b583f6a2bb67ac548a6daf674748880c14916c @@ -0,0 +1 @@ +{"tx": "b039045e018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c4000000000d55d5b4022f9b3900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acd328ce2e", "prevouts": ["44fe3b0000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "6b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366cf9eaec23fdd8ffc56eaf5457c71c87e3a4d680a728575e9c60ac5881aecf96f14541946e1cf92393992e5ef2191ac72b106fd890d94444e74600720cd636c212e839b87dc613c826a9c62085431a96f79b8782d4b0fe31dfc75aede09e250a"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f4575c9148ab8fb2f0e3b60c30486bc2998c5a9fcff153a4260746061263c245b36a70886d9e3726a9aa8a2b94454683b5181a970edd894e0d0cd75aad09f75436b2"]}}, diff --git a/txscript/data/taproot-ref/14bac90ea6a6692cf7202b96a1c18e47f81a055a b/txscript/data/taproot-ref/14bac90ea6a6692cf7202b96a1c18e47f81a055a new file mode 100644 index 0000000000..d64044cbaf --- /dev/null +++ b/txscript/data/taproot-ref/14bac90ea6a6692cf7202b96a1c18e47f81a055a @@ -0,0 +1 @@ +{"tx": "22713f2202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca30000000021b16c8a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4940100000024a82fcd0387598700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487a073772b", "prevouts": ["af76570000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a", "b7733100000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c5", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360437fc07f82a1b970ec5a575c32125a1db89269ab6bba98a0a02cfac89dc7ad84b23f991898c0f7e80b32f00b838c1f1514616fab2a47083539335b67c2689fcce4d7767c8a9637a0804b073b1eb172c67de67ce152ade33f2591a85dfee2e5a"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369f15a01ba92850ae0934bcdc7ad7dd0ec30771ae29a80b5a37ba0c6579d57abb111302735ec636dd6cd82402c946e3c4544cb7cccda2620354a4b8fa269f342b5075e3d7a2801b75eefdf65cb630fc6bd09768ae07eb1bf67760ac5f1c253b1300a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}}, diff --git a/txscript/data/taproot-ref/14d0d7bc3443d31977bc6035b1a9bce2c6dc9114 b/txscript/data/taproot-ref/14d0d7bc3443d31977bc6035b1a9bce2c6dc9114 new file mode 100644 index 0000000000..449e3c23fe --- /dev/null +++ b/txscript/data/taproot-ref/14d0d7bc3443d31977bc6035b1a9bce2c6dc9114 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc301000000859e9063bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdc01000000d82019748bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c431000000003461614d047e0708010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e9103047", "prevouts": ["f007760000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "93d9610000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "f14b320000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090265dfb469bf381a99034f00c2313db7a9ea8487be485aea065b6a22bb58b09c0d5309145f4ee680d85c19e99edb3f45e1f4bed9589c94883deadebd3a5daa3b8b6b4e28040ecbb0f1f121ba924bcb343c975ac122db37e623c930d91f4611296f0d201fb314d2b988a760eb7983ff6c302b73ede91fba1ce9829c15726910d3398e0f2e6b8e941b96a59951882799189e17ea65da922a16a1e0c153363ee1304828977812013fdb0fa2a9f711e37a8ffe32974de487717c696e5409fda07631e9536ee88b3c1b5263411360122a1747650520be59c8303de25e875bfcc7d90de78b5a729fab6117ee447d5f4785ab39c4184226cbdcc52fd5fad14ef2806e855e6f52eb453acfb02841f5dde4ac674ccf6590592a420ca4368949665494cab71da2bebfb0bd7fc432ee49d355d76fdd59da5d39d12f995804d7b2caf0ccd4b41a51b940085554ee8f1938c72af163288fefdcbc0541b0e06a912bc152fc945a2278103e7dc7625c3c588b46410224860881b4c5af2fe857791103e89a10cc73081a38a97bd449892f664a86ba2d59ccf39ffb0524a8d6dbee8a8a8221ffd29fadb356de9375f79fc28eed914f2cddca1a333a15f6a93c85855011e515d5ec749790f0a9ddd983b2182dcda8297c95feb0a7ee5cb64a430d7bd637681e27086f27da38718e9dd9cb6ac1e44607b35a9d04f31ca79be71e5e0ea78913b464a6f3d3f2607cad3eb019dc1375", "0c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828d88e70532c494439586c1157b8a644f11fc532506ec8f5af612c230a11997e628257bae22e6d8aedb31b43cfe467850e731fb88c1221782039a4c16ef44c35617d0d4fc7404dd8984f6a1705481d95654b515a34c586c99c11bfe20e9503459"]}, "failure": {"scriptSig": "", "witness": ["4d090231d27d278dca35e9f72199a0cfa3d8906195b95239ac69a44d4ee627e4148a24c63a3d20f2970e9501a90323e490c366a1b9ee5d7dc6dc89151c8ce8bf3d1ed4cd968718cd918890b942be0f3d5c3e25796f3cc8886c795f90b69d871180fd431d85d43644d5a8e0d1b6093cbd0da3f3961c77c36d753936506381ab188f84a9537fc2aa603b49110d4c455f25e02d3653c2f3e9ee3ab7c037de21ce7f9f11fe1be9f53e454e691d23d5c3ab8d01017bc55b2b33e5105a55872bcc01a6a1891c08ffd418619a06320902816fe0d47e05628b6a5d930660dd7d78273cec77407af6668773aad18cdab903311d102a66f8db7c1d920e13c438ef6d38b9d8e46f115510bca1098e93a4cf32297b9262c4cf00342ae63bd0c75563e31717c11fe94430d5cd76ef126a5ded19ae495f33e348623f49c88c2399688c36adfb47c7ce0b1cc1305efa202815302ebd4164d28e1f551aaba5bc389ab20e84b37960c47da88f1d82f0526cd6e8978d3bf45bc5840ba13e6b5b21110c325ac0b0426a211f504a568f5b3b63c9d0b24fa92e1de500c99b29a1e05bece91487858990493b47c488106d06813911dbf993bf5c05d8f9ece975160ebe2183dddf8372d911dbfb10607c912fcf83a467def7048c911819030bd29dab21b76d8a6ea7daf07f289192e7f92218e2edf2e9af2a098f48000b3b2c7a08050cf78f63f6179e1694d9ed201e4d1cebee4245108375", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a98df32f973e5ecb9021ae265faceadfc19a0621ba8bbdbaed0b61c2d0622269da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e5111e542fd849c49f4d44aada2d8e1aab946c793c1d334242f5a6d1a51a6de2d5b0de380cf0ebf0fa9d17e1d1edb87a374b64935c1c67f0c5024fcc072643681"]}}, diff --git a/txscript/data/taproot-ref/14d9a8a4291206e2c4d73120dc485bd077e5f66d b/txscript/data/taproot-ref/14d9a8a4291206e2c4d73120dc485bd077e5f66d new file mode 100644 index 0000000000..fcb097f6e1 --- /dev/null +++ b/txscript/data/taproot-ref/14d9a8a4291206e2c4d73120dc485bd077e5f66d @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c00000000addaa5ecdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0b01000000d5f25f580315f46d00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acf284905e", "prevouts": ["41ae4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "91ef230000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_25", "final": true, "success": {"scriptSig": "", "witness": ["dc2a706a4a0aa1f32af552a7b5304f12a3813a7f904ccc019d6dcaf3c7fada431badbdd671c254b846fa339901440edf6b43e99ee23e4db215bcfe128019867b83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7f8032755532062218442e9b19b7dd6d4fa75c1a71b6e058621507722689c3e5b6a42b7e42a91de94f0940d8e3efe7b702c8a4ae7747e272f2e6cc7ba0e58c3525", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/14ffecf99f50d1adde6ff14120965c878f744781 b/txscript/data/taproot-ref/14ffecf99f50d1adde6ff14120965c878f744781 new file mode 100644 index 0000000000..c80be6fb54 --- /dev/null +++ b/txscript/data/taproot-ref/14ffecf99f50d1adde6ff14120965c878f744781 @@ -0,0 +1 @@ +{"tx": "1440bee6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44000000000a895e88fbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf52000000000366cbad01bc8c1b00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac83030000", "prevouts": ["a0853e00000000002252202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "44c57f0000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a62", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936adba0e1bc195d38fce49fa646b6129b089e3124fdc2016a828a489528ffec7b5c3a658b9783cc0a28fcc02932d4b85eca4f49aba0b4fac0b36a7e3a0001ff4113fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4acac51423d2718039d2d4f4b1ede307d37862410d7af1d01b9eb1511bc3dae1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004522ebb88c16ebf61dfdf766657f947c6b679bf36be3a1118c2e7b2b24c8fd5c2a5a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}}, diff --git a/txscript/data/taproot-ref/15032320c16e26b0069cf1571846247d073f2efe b/txscript/data/taproot-ref/15032320c16e26b0069cf1571846247d073f2efe new file mode 100644 index 0000000000..5f94bd2804 --- /dev/null +++ b/txscript/data/taproot-ref/15032320c16e26b0069cf1571846247d073f2efe @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1402000000ff7187b9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8600000000e2bd2fabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b54000000005614c499012d9a5900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388aca876a75f", "prevouts": ["cc547700000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "b4db27000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "aafc28000000000022512008ff927e8178e20f38298d934a97845982dc7c5901b7d815cf7926413ad6b4c2"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f328d66b083ab2a9c43e5cc215aeb4ee10a12698c3df0ddf89a122fccd78eacd"]}, "failure": {"scriptSig": "", "witness": ["6a90616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/150b2d12becd542c0352fdc80bbd85c2901d8228 b/txscript/data/taproot-ref/150b2d12becd542c0352fdc80bbd85c2901d8228 new file mode 100644 index 0000000000..9394805535 --- /dev/null +++ b/txscript/data/taproot-ref/150b2d12becd542c0352fdc80bbd85c2901d8228 @@ -0,0 +1 @@ +{"tx": "32bd0f0b03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7301000000a2d6c9c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a100000000c06b56c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127000020000006321a4850146cb4d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709ff9333", "prevouts": ["03b67e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "f22b120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "802711000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "success": {"scriptSig": "", "witness": ["9e7a5db4c19c933d8a1c668f5df19fbea4c8449ec42c618226deb5cdbf56601e0590821fae8c6467f18c74a86f3b381d09c2623874937be21ed1151241df34d882", "50664439600155fd4b4c213b5426df46fbba2237183c4c5ab72ab97ac7f95840fc9d7fea4f2bd65d35215ea52b50e717aa96ae22b868d3fb618165042c193ff8803fc7ed900f0a84f257ddea319b01ea30c0387869daa1df78d31771e6bda749f30d1aa832611bbdd6058e6787bc429325c2f1a08d12889954736cc348db08694352730bf7581d4d4f066490c3ea8b33db8a00f5e53df4dec53719d4f108d44ea435c66df718a1762c240482f62de9093a14bdf2ed1c1ab6d5f8d9bbb6dc90b1b0d66449f73ffe99c5d5a260e202819614dc6a80ac3738"]}, "failure": {"scriptSig": "", "witness": ["e05cd2880a9cda10a00c04f98f7f4d9743c62524bf765b17c6a37698f9e3b74550d3b29bb8ae6b73bdcb58d1be8c51b9413246e1ba613d872a327a7c438b7d1f82", "50e765dd9670a5d889e2ef65331812b31f7b301662cc7be2fb94631a232f39a72d5df054fd5fa2510b825fb2052cb9ca4881b80269621671baf39e962d989c58cba068b76c7a81a0859e1439a1bf5de050f5f7f4accb61"]}}, diff --git a/txscript/data/taproot-ref/152491c8478252c98640ae41d5813cd6cc4800a4 b/txscript/data/taproot-ref/152491c8478252c98640ae41d5813cd6cc4800a4 new file mode 100644 index 0000000000..626399597a --- /dev/null +++ b/txscript/data/taproot-ref/152491c8478252c98640ae41d5813cd6cc4800a4 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be001000000a799f40abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4f010000001e21c462bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9a0000000077dd0fb3022989fd0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a611000000", "prevouts": ["025a1f00000000002251203d94c30f7ef8b0d9d4c7a773497c0af2bbd0a232f6e89c19e65bba66d7e2056b", "c0e969000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "f4dd760000000000225120ff67dbe5f480d52a3db68ddc8756a5701c353a5e478c53504b3368e48f095423"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["4c2811373219b4fe0d51b3636adf30c65e37103a291cad7ced9974fc1ed02719b3c730180f343426fa077c7b021ccf8f14d8e18de65258ee9a2cbecab092d49f", "20c361c307b1347c3dbd192b8365ea0856258daea3babb4e0b6cf1473be162b5c249f6a8283ba675e35f5789e589d63f47ad7f6f0d5b741fd2303d960bd2679f492610c0226661ca3b4fa3a985162b4ede7ee3adaf664778a9a77400b693ab17ece76d7805307589a2826dd9d544f88265663f9df8f3526d82ca0f6be0ceaac07f", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694623ddbddbeff0d470051de72b352c3379666f2e7a0c2d38368d4b52ca36d470000000000000000000000000000000000000000000000000000000000000000da4811e2aacb3c84826462416084743ed6dd43bb284051c03dfdddfd63c540104f14b640f086882c47bced18d592421bbd1a13d929376bd98932a8e6f7af0432ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf51df56b95b936c41835af32e23ec4c37bba09ad354e25a296cf8a2656a50f670993ecbbcf0bc159ec158eab8996524b2d584952c62e23e4e36e6cecb65ecae016910cb2eee6c42404feb46b882062426af39f8f178be9c4f5a5d922c0d788600000000000000000000000000000000000000000000000000000000000000006527910f019c3fcf564669fbb4de551caf24033b91e6e20341a2ad1e19e794975ab79dfa7cf5db7145e5d4b1cf65a62da6f4820b5bb8836c7352aa412d89bbf9cffa665729358e66ee7974075bdc3f023da28c8170769389bd77fd3350573099ad9e4f4a509b1727e57bb4cdfbbc9cdc5e25d1c80d3c0e1c0472b5a012f1c5ac8fdb0ed751460f87321e7eb2778f208b22cc62c5a3333033aabc48d6a4234408555e4ea92c158eabbc383be2138719c205f2e564d5513c602afa90d5d21a64ed07c9bb2cdb84cb55454f658761c235886584f469cb5db1c8f126bb07e52d94fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2b9a385067d1ff76e66456d18758d7252474300231654393e962574dfcb3e02900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6d0207243d3a5e1d40b65a3e00ac09ee4fb9ac90d65b0d48611dc50693aa349554b1a5dfec8ab3dd9cbb3b7c3bce73eeb64d657f9b0edbf4cf233f96ccdd20da897b378d7e7abeea00daa9a8458336b67244f9b33bbdcaedf4e545a463a31220000000000000000000000000000000000000000000000000000000000000000f1923ab9b1427d72e7269c361060aee9e259b71dd54306873c6a83db8917af370000000000000000000000000000000000000000000000000000000000000000dfacecc67e0994959ed18f085c4d51a50d8c63c6ae33e37cdfd0aaa3916a01ffd906df940b0788d9298f45a851e28993d905f4f44e71f23447a8eb291b08da0b13ac2ecd7c087e789b7aec612185da482c4154291c9750ddb61eae66b7a3b84d3637d419470f6e827829fb96ca2244aea96c187addf1800b3a1c93168b7f7352114f215a8f004336333296195e14e4cf4d41b60e61102a4922a0753f47792f52707b26b61c29f13b51ee900bc00311c92ba01cb9fbc8146f086b212616b917eac92168c5b925cb38cf692d2ad85d4a48328295d9a986cf2ed298979ec2d77165b8693445bfd3789f047078d3089189a42154d3c6d025ccca8059fe44b852d46c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026779a7dcd99df21ca785abdb33aa8dcefe047efeecf6776220d361c8db1926d0000000000000000000000000000000000000000000000000000000000000000610c1eb08b2962ddd01d2c8466ebebdc574b186c623b686c6d7d8a5bdb0b6407000000000000000000000000000000000000000000000000000000000000000006c96b0efe981974fe03ce5c459e755d2b9bf6c03ac4be4b9a79954a9bae8bf0dacd581c50f6afba108c6f63783079ff6f9aa98726d907938892631d548282ec0000000000000000000000000000000000000000000000000000000000000000da4bda93fc5768f467514d10b3e0847704a6ab251f1eed02771e37529e138c835224c8e6add6fbfd06d3f86feef55029733513ed47533dab7044333377279f0d813863f5fae4e2e3c999407371460a52d5509a286bfc3367bd768b89ee842fb9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90fa64bd3bee3a05ed5ae22173e7f969667bbe2e1864238b8969d4822a247470472b397fe976f850c4dab4af7a4fe2260bcf80cf77b002706e4fcd222e448e087b98b20d1cd8f5dc8697f8d25ccffa3f7e6106e17b2cfb546ba60b050f05ee34014daf9b7831c6b6aef9dc084c1cbc9e70624e236891a8079a08acb3c4b3733bf8cad34ee169bc56f17c0da902a29574d2874ce1479b25f0a13a55943edf23aea89cf5d84c7cb0a591b3d8c719e5d151096bda56f2b15d1b162f87e1ace3d942fc1aecb5da843cc093ab6bd2197970e55555844fd2778e623b202ac79a197297d7743666a6a236c6f008d32f55f7580c26c63af20514bb21225a25cad5bec6653de563560779ec83e2d18d669241ea80197c1becd5af2a19f55c752356ad7d41e57397ff916836f106d1077c50c353a77cff266c1ca61c192f719e62d11d26f61ca4b7357879edbce8f21690ebb8d359e46d22056ddbcaf4b85fb534a26b924bcd5eff56081dfd8b71d373a31bc6d37ec91f93c78486cd6dab9c5b709f0ed53dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8201962e9051459e1b14ad2163ca08d4980ccfdb063b840b38d00c267fdb51affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6992696ad57ce4955c69e5322b474dc52d445da18f197a3fe875df06f3965f467fede0c9619ced497685906b3e6a271af70afe7b1cf2e6a96572f45027424d2b7f424b07e7f08053d8bd3c2fa343a8a423b1a8bd414efdae03adb9c9c7a43af234068674a7a0acc2028341b92d85529616dfe6deac9718e05acc43bac4285f4c95a57aa0bbb142f8691107c5b257f93ae851f054af2edde97fbdc1b6b815f9f000c6412c25377ad82d391822896adc0e03a8aeeace06fa19c32673ba251f28bdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000e4e023bba57072ac921c95300dadef54579723e7d5494fb3cc674e6254aeb46c9d2cc27b9990c26cf55efc8ffb9b295f2e8e771e8f9b9ab66912cc17580edf6d6d9453ed2eaf6a1a94cebc2bd1601c37a141e4baf35b921b1e6a913421b4fb0adea8f5c19fcd235104ae63cc3721a3af04ffd5215ee0f537d6e835030e3c23ad7ab66b33c5fe4136214d2bbf5dff01dffa449a654c8334af799255d0b56ad3c2602a5826bd2d8331651edb05faad28b95f192954389b092c31fc14dcfe55efb7a42bc77d761e80540cee7f3e755be577d16f3061ed7066d55cbfc7731bf317348b006355c1e9b833782ee3fcb0c105d32de7ce461f093b18ac2469170b0f3163eb0b29ffabfadc4548a488bc6f7351730422069f075c89041ebf8c1a1263411b0000000000000000000000000000000000000000000000000000000000000000fb6017f23840baff3a911350961bbcf46bce41f99ddd15430e5c42bf750a2ea0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fa33345aa47618e8fe0368be3040c4a53021f4e4eec186f77f9be22b921ff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27070a474e9083bdc6c46593942c11e5941cdd9cb4e0966459aebd77f49a25a5cb404b950305fc3997cf6d7a66804eb33ac708af7c6a5a8afeccd5684498634f49687bb3048bb5756478596a0156d73f72c5cb10b759d6682bf8bf1f1e3a5dce00000000000000000000000000000000000000000000000000000000000000009c20b15f7caac69d8ae700c0e6af6bf4ca64bc1ae695e675ad11a51c3616721ee217543ddb8a58dfd3951d4195b5bf71009a22e4e62eece10fcfdeae1f7808c2cacd00f6e8492212f03ff48ef3c9688d972b72bc418b4432ad7f873bbf2cca0a", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["4c2811373219b4fe0d51b3636adf30c65e37103a291cad7ced9974fc1ed02719b3c730180f343426fa077c7b021ccf8f14d8e18de65258ee9a2cbecab092d49f", "4ec6a99aa59703f81a8c4122a6d5f47117d14935de6551dce6dae5f38bc09de31b90fa725205863e73f0a1f4b42fd279200807e4805c684f9fe65924195f7b0a4e0aadb5c30a09167fe379c2ae362369169498258b791a07386c916db47672377a1237ce7ace8e8a8a7155bb79c3c040d4ae7cb0f9627cfa93d6f2fcd35bf4c8", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694623ddbddbeff0d470051de72b352c3379666f2e7a0c2d38368d4b52ca36d470000000000000000000000000000000000000000000000000000000000000000da4811e2aacb3c84826462416084743ed6dd43bb284051c03dfdddfd63c540104f14b640f086882c47bced18d592421bbd1a13d929376bd98932a8e6f7af0432ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcf51df56b95b936c41835af32e23ec4c37bba09ad354e25a296cf8a2656a50f670993ecbbcf0bc159ec158eab8996524b2d584952c62e23e4e36e6cecb65ecae016910cb2eee6c42404feb46b882062426af39f8f178be9c4f5a5d922c0d788600000000000000000000000000000000000000000000000000000000000000006527910f019c3fcf564669fbb4de551caf24033b91e6e20341a2ad1e19e794975ab79dfa7cf5db7145e5d4b1cf65a62da6f4820b5bb8836c7352aa412d89bbf9cffa665729358e66ee7974075bdc3f023da28c8170769389bd77fd3350573099ad9e4f4a509b1727e57bb4cdfbbc9cdc5e25d1c80d3c0e1c0472b5a012f1c5ac8fdb0ed751460f87321e7eb2778f208b22cc62c5a3333033aabc48d6a4234408555e4ea92c158eabbc383be2138719c205f2e564d5513c602afa90d5d21a64ed07c9bb2cdb84cb55454f658761c235886584f469cb5db1c8f126bb07e52d94fcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2b9a385067d1ff76e66456d18758d7252474300231654393e962574dfcb3e02900000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6d0207243d3a5e1d40b65a3e00ac09ee4fb9ac90d65b0d48611dc50693aa349554b1a5dfec8ab3dd9cbb3b7c3bce73eeb64d657f9b0edbf4cf233f96ccdd20da897b378d7e7abeea00daa9a8458336b67244f9b33bbdcaedf4e545a463a31220000000000000000000000000000000000000000000000000000000000000000f1923ab9b1427d72e7269c361060aee9e259b71dd54306873c6a83db8917af370000000000000000000000000000000000000000000000000000000000000000dfacecc67e0994959ed18f085c4d51a50d8c63c6ae33e37cdfd0aaa3916a01ffd906df940b0788d9298f45a851e28993d905f4f44e71f23447a8eb291b08da0b13ac2ecd7c087e789b7aec612185da482c4154291c9750ddb61eae66b7a3b84d3637d419470f6e827829fb96ca2244aea96c187addf1800b3a1c93168b7f7352114f215a8f004336333296195e14e4cf4d41b60e61102a4922a0753f47792f52707b26b61c29f13b51ee900bc00311c92ba01cb9fbc8146f086b212616b917eac92168c5b925cb38cf692d2ad85d4a48328295d9a986cf2ed298979ec2d77165b8693445bfd3789f047078d3089189a42154d3c6d025ccca8059fe44b852d46c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000026779a7dcd99df21ca785abdb33aa8dcefe047efeecf6776220d361c8db1926d0000000000000000000000000000000000000000000000000000000000000000610c1eb08b2962ddd01d2c8466ebebdc574b186c623b686c6d7d8a5bdb0b6407000000000000000000000000000000000000000000000000000000000000000006c96b0efe981974fe03ce5c459e755d2b9bf6c03ac4be4b9a79954a9bae8bf0dacd581c50f6afba108c6f63783079ff6f9aa98726d907938892631d548282ec0000000000000000000000000000000000000000000000000000000000000000da4bda93fc5768f467514d10b3e0847704a6ab251f1eed02771e37529e138c835224c8e6add6fbfd06d3f86feef55029733513ed47533dab7044333377279f0d813863f5fae4e2e3c999407371460a52d5509a286bfc3367bd768b89ee842fb9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90fa64bd3bee3a05ed5ae22173e7f969667bbe2e1864238b8969d4822a247470472b397fe976f850c4dab4af7a4fe2260bcf80cf77b002706e4fcd222e448e087b98b20d1cd8f5dc8697f8d25ccffa3f7e6106e17b2cfb546ba60b050f05ee34014daf9b7831c6b6aef9dc084c1cbc9e70624e236891a8079a08acb3c4b3733bf8cad34ee169bc56f17c0da902a29574d2874ce1479b25f0a13a55943edf23aea89cf5d84c7cb0a591b3d8c719e5d151096bda56f2b15d1b162f87e1ace3d942fc1aecb5da843cc093ab6bd2197970e55555844fd2778e623b202ac79a197297d7743666a6a236c6f008d32f55f7580c26c63af20514bb21225a25cad5bec6653de563560779ec83e2d18d669241ea80197c1becd5af2a19f55c752356ad7d41e57397ff916836f106d1077c50c353a77cff266c1ca61c192f719e62d11d26f61ca4b7357879edbce8f21690ebb8d359e46d22056ddbcaf4b85fb534a26b924bcd5eff56081dfd8b71d373a31bc6d37ec91f93c78486cd6dab9c5b709f0ed53dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8201962e9051459e1b14ad2163ca08d4980ccfdb063b840b38d00c267fdb51affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6992696ad57ce4955c69e5322b474dc52d445da18f197a3fe875df06f3965f467fede0c9619ced497685906b3e6a271af70afe7b1cf2e6a96572f45027424d2b7f424b07e7f08053d8bd3c2fa343a8a423b1a8bd414efdae03adb9c9c7a43af234068674a7a0acc2028341b92d85529616dfe6deac9718e05acc43bac4285f4c95a57aa0bbb142f8691107c5b257f93ae851f054af2edde97fbdc1b6b815f9f000c6412c25377ad82d391822896adc0e03a8aeeace06fa19c32673ba251f28bdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000e4e023bba57072ac921c95300dadef54579723e7d5494fb3cc674e6254aeb46c9d2cc27b9990c26cf55efc8ffb9b295f2e8e771e8f9b9ab66912cc17580edf6d6d9453ed2eaf6a1a94cebc2bd1601c37a141e4baf35b921b1e6a913421b4fb0adea8f5c19fcd235104ae63cc3721a3af04ffd5215ee0f537d6e835030e3c23ad7ab66b33c5fe4136214d2bbf5dff01dffa449a654c8334af799255d0b56ad3c2602a5826bd2d8331651edb05faad28b95f192954389b092c31fc14dcfe55efb7a42bc77d761e80540cee7f3e755be577d16f3061ed7066d55cbfc7731bf317348b006355c1e9b833782ee3fcb0c105d32de7ce461f093b18ac2469170b0f3163eb0b29ffabfadc4548a488bc6f7351730422069f075c89041ebf8c1a1263411b0000000000000000000000000000000000000000000000000000000000000000fb6017f23840baff3a911350961bbcf46bce41f99ddd15430e5c42bf750a2ea0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3fa33345aa47618e8fe0368be3040c4a53021f4e4eec186f77f9be22b921ff03ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27070a474e9083bdc6c46593942c11e5941cdd9cb4e0966459aebd77f49a25a5cb404b950305fc3997cf6d7a66804eb33ac708af7c6a5a8afeccd5684498634f49687bb3048bb5756478596a0156d73f72c5cb10b759d6682bf8bf1f1e3a5dce00000000000000000000000000000000000000000000000000000000000000009c20b15f7caac69d8ae700c0e6af6bf4ca64bc1ae695e675ad11a51c3616721ee217543ddb8a58dfd3951d4195b5bf71009a22e4e62eece10fcfdeae1f7808c2cacd00f6e8492212f03ff48ef3c9688d972b72bc418b4432ad7f873bbf2cca0a", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/1532d9cb1517dd25a5c8a93eb64d3962a52cf4cd b/txscript/data/taproot-ref/1532d9cb1517dd25a5c8a93eb64d3962a52cf4cd new file mode 100644 index 0000000000..4248146231 --- /dev/null +++ b/txscript/data/taproot-ref/1532d9cb1517dd25a5c8a93eb64d3962a52cf4cd @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4e000000008f41f4e3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b450000000076427492dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cff00000000c272c0da025f6a97000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acbf96ea1e", "prevouts": ["4be92800000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "7fc7250000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "79b64a00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6aca", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6f432293da1a11df20de0df2cdfe573cc92222e6714a6159f8978c317656a2558c38514ede62462d8dcaca890d92a506794ae643449cc5c1c2c2667ece3d2dbdc18898993c284d2f731b7495cb62c60e8571430965d040562487638e1f1fd248a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369d53ff9cdbd05c7b14874b5d383777a8a4f6c1559bc54c1161d63ac106a237bcc1012b923c15ff4ca5711684c82f77f7d0ace9e417918255ff860668826001128a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}}, diff --git a/txscript/data/taproot-ref/154147c0c82e41a7cfdb7b8295df125020cd7113 b/txscript/data/taproot-ref/154147c0c82e41a7cfdb7b8295df125020cd7113 new file mode 100644 index 0000000000..8a37e0a942 --- /dev/null +++ b/txscript/data/taproot-ref/154147c0c82e41a7cfdb7b8295df125020cd7113 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bc00000000045d0f63dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0301000000dc9d369c018f9e5b000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787a2000000", "prevouts": ["fc803f0000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "8d43260000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "d47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e1d15be41604f0459412a6d9aa888e4d019cca614dbd3b30e8d19f8f49981c6d3eef830f28a0ecbd34c70640f7829eb7d86b0cf2da24853f16b74ab53bbfd728ea84370bdaf8fbfa2c728119f306db95ff534e2e627fabf0c000f69380d4e93e"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93669e6d8ef22861e07fee4583a5ab47fb4893c942079130ef347ee1cbb0ba45047b93338c7d107e01cff6d052285c57a3fa3547f5f14e99776c0371239cd8619173eef830f28a0ecbd34c70640f7829eb7d86b0cf2da24853f16b74ab53bbfd728ea84370bdaf8fbfa2c728119f306db95ff534e2e627fabf0c000f69380d4e93e"]}}, diff --git a/txscript/data/taproot-ref/154b30ae55351cbd129d9b1b6a6311572840bb26 b/txscript/data/taproot-ref/154b30ae55351cbd129d9b1b6a6311572840bb26 new file mode 100644 index 0000000000..2f5aee4c43 --- /dev/null +++ b/txscript/data/taproot-ref/154b30ae55351cbd129d9b1b6a6311572840bb26 @@ -0,0 +1 @@ +{"tx": "b516eae002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3801000000c3f7c6c8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8800000000587ace9a0352bb73000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4872f7d0b24", "prevouts": ["9917220000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "91ee530000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "fb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936832cdd808d94d07e5d991a3d0c5a8b4a06c9fcd7df1eeedb760eeb7a3be6ddfe43d925f8e6664e67417d113cf51c5b4c3126025efa5f83bf5b16dba6746279b738273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d466d9f82b2327fc04ce4429e47540ca0f52fd08e57643f6e07da44ee4246ab9eee8539df42e1fa2e5e9e7b75fbe1b52db879ec8a622b496736c99966ce19d0038273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}}, diff --git a/txscript/data/taproot-ref/15541041a721e558c8cfa7f4ee5f4d09fa6c9065 b/txscript/data/taproot-ref/15541041a721e558c8cfa7f4ee5f4d09fa6c9065 new file mode 100644 index 0000000000..370a64de46 --- /dev/null +++ b/txscript/data/taproot-ref/15541041a721e558c8cfa7f4ee5f4d09fa6c9065 @@ -0,0 +1 @@ +{"tx": "e61fc582038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45601000000c4e2b5b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2001000000c5b7f7db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41a020000002528aeb801fdae1700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7c4010000", "prevouts": ["f0893300000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970", "8b96760000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f", "5e9f320000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_8d", "final": true, "success": {"scriptSig": "", "witness": ["1b6c242c01c1110e3cb320bbad176adc2fa5b1b01e493aa2200b28f5419ca02a8f8fb950dbe0ccc6de76af5df3cc4ccfdade86acafaca80d8cabe28bb476b73182"]}, "failure": {"scriptSig": "", "witness": ["383ec8f0dd004aebdd2ad05a5a87c334f6d1b2c1398272c26fc9893a4317acba84cf4ed11aebe339d3567509a40e076d0644b5ba82904b643cfc1d6dba72a84e8d"]}}, diff --git a/txscript/data/taproot-ref/157183c1796c9575b6c576a29c98f58fbd42356c b/txscript/data/taproot-ref/157183c1796c9575b6c576a29c98f58fbd42356c new file mode 100644 index 0000000000..80171c7c0d --- /dev/null +++ b/txscript/data/taproot-ref/157183c1796c9575b6c576a29c98f58fbd42356c @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc900000000f2275ef2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caf01000000fc57e8f90367dc99000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acba7c1440", "prevouts": ["6647510000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "52934b000000000017a91418261fd2fa0b0480c86b918607add1dde9f7026a87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2255202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["759bd5b16f8435ff1e784f79b0f1bd4de1590a1e54f0536d6d84bab4e8c903d81915781366fe51dfe410e656b2d5f3f89e7374de4e49700275cd296eadcc2b08"]}}, diff --git a/txscript/data/taproot-ref/1571fe984911dc73398ce28defbf71e715958a81 b/txscript/data/taproot-ref/1571fe984911dc73398ce28defbf71e715958a81 new file mode 100644 index 0000000000..f60986cd7f --- /dev/null +++ b/txscript/data/taproot-ref/1571fe984911dc73398ce28defbf71e715958a81 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704501000000ee4d8a848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40b01000000f0d42d8a0429894a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8749000000", "prevouts": ["30ce120000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "725c3a00000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cebe1805b4dd002a9656fd180b0893baf3654597c23b46cc67f3675a294fa085bbd17872a9d61e54e96dfef681da77b5399be78aec05b527019b8e812e967c33a95f177959a3d24a94a797d1e607e5550897d4e95d12a52323e6e8eeeab3383c"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e145a42fba29499bdd7f6ed301115275954ea9ec94acc2dc80e39b9e79b601e9aa172fc08f39dec38a16acdaea6f2fb40d915f4bcb39aadc0ac96def6ea8d2de907407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}}, diff --git a/txscript/data/taproot-ref/157aebc161b66c638243c0a814262c48979b21de b/txscript/data/taproot-ref/157aebc161b66c638243c0a814262c48979b21de new file mode 100644 index 0000000000..e2249034f9 --- /dev/null +++ b/txscript/data/taproot-ref/157aebc161b66c638243c0a814262c48979b21de @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45400000000990ad9cb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709601000000ca2459ba01210a0d00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acae847024", "prevouts": ["dd2d390000000000225120ed1497f510b05298f56dedfdf59bdab87baceded2037e3bc9fe47e7002bf81b0", "480f100000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "success": {"scriptSig": "", "witness": ["9c6d465f3859fe9151e890fc05920f5f0e2268355917987ee9ea7e79de43c463a7d888255b7132ae4dfbe3dc0bc72a101332801010f29430e3cc148bdebbd360", "2cae544d1f08c0bf45a6668f8e81e77ed8830fc5fff4a9b50d724022cab5690ee80b421eec511dd5e61010c90a857ef50df533c2f596e0", "750442c441326ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f2f760e336cd45075e8c240a289642762d43a502d352eb6f26856b9069ecbd6f0000000000000000000000000000000000000000000000000000000000000000a24976a108ec6afa239bf6529f53a4dd717eb168e3f5be864cac330810dbf6e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92823c675e1a2f7520b6491ff52c17828c7ea50107a5ef1b6f881be6d9db820d", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["9c6d465f3859fe9151e890fc05920f5f0e2268355917987ee9ea7e79de43c463a7d888255b7132ae4dfbe3dc0bc72a101332801010f29430e3cc148bdebbd360", "4c8b30f49759382a62c79ad4ccc192fdd531d8ebd07da1d328f8dd1d6c551bed44f783ee28e0b6171a7c8a3d5af5de84f4452a1c1a0b", "750442c441326ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f2f760e336cd45075e8c240a289642762d43a502d352eb6f26856b9069ecbd6f0000000000000000000000000000000000000000000000000000000000000000a24976a108ec6afa239bf6529f53a4dd717eb168e3f5be864cac330810dbf6e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92823c675e1a2f7520b6491ff52c17828c7ea50107a5ef1b6f881be6d9db820d", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/15b38d795c9bb9ef573b4d2b1ec4af8fc0cd8fb6 b/txscript/data/taproot-ref/15b38d795c9bb9ef573b4d2b1ec4af8fc0cd8fb6 new file mode 100644 index 0000000000..1dede99c1b --- /dev/null +++ b/txscript/data/taproot-ref/15b38d795c9bb9ef573b4d2b1ec4af8fc0cd8fb6 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccb000000001cfe6dddbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2c01000000c20cd2c40255c4c200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f877b000000", "prevouts": ["92f156000000000022512081f4094833c2bd1c8ccd20bca7d3b4bfd2d5ed628270e66be4011ac690e88295", "1a336e00000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["fd6b1d3683d073e61bf14c61589314e5217a28e37f79fb5ef1a559a7d092686e004fa5230305827d654a6dced83870b0cf28098e9e15ffa32763cfbc1704645a01", "9e692d60bd8d606571937bca6efc4424", "750023fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774daac916923fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da6eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360ee8ce1cc6402c664160e2673cd562c284ffe5a9d51d880e57aa7962acbdbaf6b82212375b3163165baf07a41081950e4a930d2d89c0b0e74343bf419d7d9a90faafca2a8a8f6c7d119832e5d564b4d4833a04a2fd7939d6b3f4f9113808a30946961be48dc97c5faed1227dd301bbed3c226f8bae5b9850ca0fec70938223991b8afbaa887ecd89c28162c904940f3bbdde1337cbf5cfaa29807f434f2a3cc2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d991af31a7907ca623e7471472ba05dbdd7634b91e6dd5935b4cc093a81d13387ed1870f3f061cbc24b9576b62dd0a98734759b8e527cbb595f7f3b08e524f7fe4a16c690034d7855c91554dcb96a2d8d2a2769ebe672069a66f653ae4f76ca5d1bdeaec1d93e893b58df5440bac7d0034a93260341cba7c7e17ebd8142671cb618f3f7bd41dc0483f53576fb62c4a4ddf9fa643706403a7e80d2f52c16dfdb68e3b24e18d54ce3bc3f592380d81db6ff0b093303657b7c0217cea14ff19e7f2e577d56b1accd67f73c6a86371f866e23145b60ccc40343af6f38672031b483ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2568d751d8590666015ff790e5e46158bf7fb84480770b17f668e3d6b7108183960f233300d7460f72e9a93ec8ad82180f3479fd15aabb50f8199b7d58c03fd3b3e75a587ddd19655282f16a554597180217d56817cc2503f7772ca013c120c21f4bd07fed00ed63729e02e7a1dd956b0eaca9b45943eeed833f94fd8f9710697657d3dac22b45d9cf80f7698315130eae1662959abdbea7354a1bd55123ab178482c0fb29f4f03e22c5b87e2db34d4e9f152679680ecb88ef3772497d38e6c0e6b8521209d2c8c0b03daced85104381e7697c97be8a424e952346cc7b054a7506cdc72be568f2422212b9e88e6e7c5973a824be4b31a2aa17f52cf6ee495ab32bd2168a51c3a5b05d231b27d2fc6aad802bd77e8edb4ab219ffd6c1df66eda881590b753ce02dbc56d81978897e889e0cba287be84214a041ca7dff0b7997e36a7c2f4c46e7fc4cb5aeb93f28d687ac8c86ed0ed5b09a88d63ea4cef16c59a8000000000000000000000000000000000000000000000000000000000000000006f72b5a2d4bdcea0bd126246ad2d2477c17dea0bb0dc556b640d1aef1e676602492c3d88c830d609a707645ba9640d7d565bcd5aff69b0b6a3dcf2c5eec35c00000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf07e91c9da68d5d703d6e06c45282b0f3ddc059316166f8f9f7a179e25da51a49b0aad9ca9b82f64d83f38eca581ca38d1bb6f9f662829251e69bcf2f3e43145cc59dce48bf6b3d4072f2995aa52ff4488befc6866bd69943917bcd43579ea6ef216ce10035f9b72fff15c20113b0ce4b3064454680131c4e5eb9070cf67937416232689e5c807105b6f37cd192baeff0dd09e185b66338c5899223e92518c1000000000000000000000000000000000000000000000000000000000000000054f70ea626b1f3b00f2b177ed980cf6737c1fb222bf27803957141c673a197e344d81986af3e4fe232fb4cefb56d334dfa7cae09fa5f359cd5171bb54aebf2cdfae0afa293d38f6a60784231cd5c836df1ada5a03252d281528b3313c4ff44d1d2dbbcaadf18dceca71cebcaeb5d4d43c614022a3d5d97cfd78e94525aaa28347593bb42a8d7441c9a11bfa0bd2870f8ce06dda840c0fbf2f7106003cdac424d128c3dcdcdeb73a001958145f157af99ece9fa64aa5d571d87cbcb3025cbdc2f3a17c1097a4681b6ff92ec7197ec6db2514a2d22ee0344df673393be06893b4a00000000000000000000000000000000000000000000000000000000000000004d1c42436eec7dc83920ffb5afcab7d6e9de90f2dcc8d1b70444ba211de242c772e76cd39c87b212680a2ea640588ca6ebb9f1c2dc7ace27890693efa7e1437d77ebc8d0be0253abcc19620a9228e0fc39bff25095f2fcdade5349194d8b5c0aaec7e7dbf321ef772ac6b953fc7fd1b760cede71a36ed1f9f778d1d9d96cf2698141d7f62311cf943699d3bd66f6ef4202a3e3593a0b06e4e10ee1a1036fae949fbf725310621fe2bc1160d6b73acd12af1c9032b22d0c8271f1e608339aa4b2000000000000000000000000000000000000000000000000000000000000000093ab9d3ba174288d6d9576c25bf2eab745d2d2cfce294d070cc8bf0772a9cb52ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a29a7cd992657590929a06c0f1e0810cbbcd6e04dd22a270182707c31a68aa7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["fd6b1d3683d073e61bf14c61589314e5217a28e37f79fb5ef1a559a7d092686e004fa5230305827d654a6dced83870b0cf28098e9e15ffa32763cfbc1704645a01", "50827f0bdf447b9c8f9d0eaee88b8d", "750023fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774daac916923fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da6eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360ee8ce1cc6402c664160e2673cd562c284ffe5a9d51d880e57aa7962acbdbaf6b82212375b3163165baf07a41081950e4a930d2d89c0b0e74343bf419d7d9a90faafca2a8a8f6c7d119832e5d564b4d4833a04a2fd7939d6b3f4f9113808a30946961be48dc97c5faed1227dd301bbed3c226f8bae5b9850ca0fec70938223991b8afbaa887ecd89c28162c904940f3bbdde1337cbf5cfaa29807f434f2a3cc2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d991af31a7907ca623e7471472ba05dbdd7634b91e6dd5935b4cc093a81d13387ed1870f3f061cbc24b9576b62dd0a98734759b8e527cbb595f7f3b08e524f7fe4a16c690034d7855c91554dcb96a2d8d2a2769ebe672069a66f653ae4f76ca5d1bdeaec1d93e893b58df5440bac7d0034a93260341cba7c7e17ebd8142671cb618f3f7bd41dc0483f53576fb62c4a4ddf9fa643706403a7e80d2f52c16dfdb68e3b24e18d54ce3bc3f592380d81db6ff0b093303657b7c0217cea14ff19e7f2e577d56b1accd67f73c6a86371f866e23145b60ccc40343af6f38672031b483ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2568d751d8590666015ff790e5e46158bf7fb84480770b17f668e3d6b7108183960f233300d7460f72e9a93ec8ad82180f3479fd15aabb50f8199b7d58c03fd3b3e75a587ddd19655282f16a554597180217d56817cc2503f7772ca013c120c21f4bd07fed00ed63729e02e7a1dd956b0eaca9b45943eeed833f94fd8f9710697657d3dac22b45d9cf80f7698315130eae1662959abdbea7354a1bd55123ab178482c0fb29f4f03e22c5b87e2db34d4e9f152679680ecb88ef3772497d38e6c0e6b8521209d2c8c0b03daced85104381e7697c97be8a424e952346cc7b054a7506cdc72be568f2422212b9e88e6e7c5973a824be4b31a2aa17f52cf6ee495ab32bd2168a51c3a5b05d231b27d2fc6aad802bd77e8edb4ab219ffd6c1df66eda881590b753ce02dbc56d81978897e889e0cba287be84214a041ca7dff0b7997e36a7c2f4c46e7fc4cb5aeb93f28d687ac8c86ed0ed5b09a88d63ea4cef16c59a8000000000000000000000000000000000000000000000000000000000000000006f72b5a2d4bdcea0bd126246ad2d2477c17dea0bb0dc556b640d1aef1e676602492c3d88c830d609a707645ba9640d7d565bcd5aff69b0b6a3dcf2c5eec35c00000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbf07e91c9da68d5d703d6e06c45282b0f3ddc059316166f8f9f7a179e25da51a49b0aad9ca9b82f64d83f38eca581ca38d1bb6f9f662829251e69bcf2f3e43145cc59dce48bf6b3d4072f2995aa52ff4488befc6866bd69943917bcd43579ea6ef216ce10035f9b72fff15c20113b0ce4b3064454680131c4e5eb9070cf67937416232689e5c807105b6f37cd192baeff0dd09e185b66338c5899223e92518c1000000000000000000000000000000000000000000000000000000000000000054f70ea626b1f3b00f2b177ed980cf6737c1fb222bf27803957141c673a197e344d81986af3e4fe232fb4cefb56d334dfa7cae09fa5f359cd5171bb54aebf2cdfae0afa293d38f6a60784231cd5c836df1ada5a03252d281528b3313c4ff44d1d2dbbcaadf18dceca71cebcaeb5d4d43c614022a3d5d97cfd78e94525aaa28347593bb42a8d7441c9a11bfa0bd2870f8ce06dda840c0fbf2f7106003cdac424d128c3dcdcdeb73a001958145f157af99ece9fa64aa5d571d87cbcb3025cbdc2f3a17c1097a4681b6ff92ec7197ec6db2514a2d22ee0344df673393be06893b4a00000000000000000000000000000000000000000000000000000000000000004d1c42436eec7dc83920ffb5afcab7d6e9de90f2dcc8d1b70444ba211de242c772e76cd39c87b212680a2ea640588ca6ebb9f1c2dc7ace27890693efa7e1437d77ebc8d0be0253abcc19620a9228e0fc39bff25095f2fcdade5349194d8b5c0aaec7e7dbf321ef772ac6b953fc7fd1b760cede71a36ed1f9f778d1d9d96cf2698141d7f62311cf943699d3bd66f6ef4202a3e3593a0b06e4e10ee1a1036fae949fbf725310621fe2bc1160d6b73acd12af1c9032b22d0c8271f1e608339aa4b2000000000000000000000000000000000000000000000000000000000000000093ab9d3ba174288d6d9576c25bf2eab745d2d2cfce294d070cc8bf0772a9cb52ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8a29a7cd992657590929a06c0f1e0810cbbcd6e04dd22a270182707c31a68aa7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/15bed2762ca16694fce3754fdcb0fe404484b18c b/txscript/data/taproot-ref/15bed2762ca16694fce3754fdcb0fe404484b18c new file mode 100644 index 0000000000..2bc9b9f928 --- /dev/null +++ b/txscript/data/taproot-ref/15bed2762ca16694fce3754fdcb0fe404484b18c @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705c00000000fc3ba74b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270360100000034bc366cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfa0100000055a193d8039f024700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca335554b", "prevouts": ["c58a11000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "75690f000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "91f92800000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00637e68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456a1ef8f97f9d432891c11b27eeccc6d565069ea6fda1d19446b03f857ca9b7d00cbb6a1bc9c683a9249ad6bea98cd3b225511a23bd3763b6594afd12d3e036b5faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367379cfff3878adda0b859082d5b21f59c33b10ed69d43cb7d8098f3dbbb31e416a1ef8f97f9d432891c11b27eeccc6d565069ea6fda1d19446b03f857ca9b7d00cbb6a1bc9c683a9249ad6bea98cd3b225511a23bd3763b6594afd12d3e036b5faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}}, diff --git a/txscript/data/taproot-ref/15d389f49e1f412ed725252d3ee81230a2e81cd0 b/txscript/data/taproot-ref/15d389f49e1f412ed725252d3ee81230a2e81cd0 new file mode 100644 index 0000000000..ee828641b2 --- /dev/null +++ b/txscript/data/taproot-ref/15d389f49e1f412ed725252d3ee81230a2e81cd0 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4f01000000b02ea1ac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e30100000099b12a1b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703401000000cc4e3d950314417100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc757020000", "prevouts": ["0fb65300000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "2ac5100000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "03740f0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cd949ca4fda7b418d269ac7332cfe3b3c4d272913f478425fae381281da8c46e49153cc622aa353482ad0128e41c922a496803621b9ad28f713d97cdce77464b2c78e40500fa05b550b7f6357dbf83024c41a574f6a1706762c104fa8aec3fcb"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a30bb99d7d9a0fac0fcd125fc81d59b23ab8775c400f56b8708f446f264d38aca51646124a2b4386d840e205fec55c7cefbdbe9c75e9c45dd558741f313d2d0ee0d9bed60e53dfa6fe8b58229f37daf0597893c765c7b30814eb9e16fca89b86"]}}, diff --git a/txscript/data/taproot-ref/15fcafcc7469d59709774013df0fd9633e820008 b/txscript/data/taproot-ref/15fcafcc7469d59709774013df0fd9633e820008 new file mode 100644 index 0000000000..fb5d98321d --- /dev/null +++ b/txscript/data/taproot-ref/15fcafcc7469d59709774013df0fd9633e820008 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47d01000000bf12ba80dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e020000007eaf3ef5041e8d5500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79693000000", "prevouts": ["fd043300000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "0f3225000000000017a914a5f28fe5532719f979169bfa3a31d5746f69452187"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2357212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["b8be758fe2d28e7fbfa6f2359efe0fbfe093c11e11aa89a0f25e978fccaabc764e37fb378db09249e7a5fd824831cb3af1a1074bb5d25e5c7d8aa5c537fe4a1a"]}}, diff --git a/txscript/data/taproot-ref/16128f27ae921b87284e0eab75845884e009c865 b/txscript/data/taproot-ref/16128f27ae921b87284e0eab75845884e009c865 new file mode 100644 index 0000000000..a23292e43b --- /dev/null +++ b/txscript/data/taproot-ref/16128f27ae921b87284e0eab75845884e009c865 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a1010000009c56d373dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbc00000000662fdb6e03de2e7d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd858f22c", "prevouts": ["c78532000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "4d314c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ae", "final": true, "success": {"scriptSig": "", "witness": ["4d0be36ed8dae05f9cda4607148e82c789c4d9e36be70fa625603182279d00e95f660cfff7d4bde847544ea1944c79df8edf67aceb90d0d743ed452510da9bf601"]}, "failure": {"scriptSig": "", "witness": ["1bfd93a70888881a409f12eb9c833a9f696bd4f8c7fec00becc36b0f24dc97c628121b7932065253e71c59618770790c1493f723e0c45479bc432b7c55d54cddae"]}}, diff --git a/txscript/data/taproot-ref/1630122f5bef1592ca6b6280297bd620d8ce0ab9 b/txscript/data/taproot-ref/1630122f5bef1592ca6b6280297bd620d8ce0ab9 new file mode 100644 index 0000000000..494eb3382d --- /dev/null +++ b/txscript/data/taproot-ref/1630122f5bef1592ca6b6280297bd620d8ce0ab9 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4901000000049cf49e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b801000000bc4daa160275809a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e754000000", "prevouts": ["0c3a6400000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "53e838000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_1", "final": true, "success": {"scriptSig": "", "witness": ["bfa2103ccccf1488b36a28aa4957dfd6becf11a8a0469d582e7c98bc6255926c5affaaa2f1dddc4c29a1c8e96b141211a3426a1da8693f2e73f2f57fa23d7bde01"]}, "failure": {"scriptSig": "", "witness": ["4a12e80c94c0ac0584a8eade86f52726f4706abdad42a39268d30b05aa4afaf7ae8c296a8b72e703572ff1e16d3e8fd31c8e6575a53a0f960c28fe83961fc5b801"]}}, diff --git a/txscript/data/taproot-ref/164113b42e586e2e8ce7bb6fccef9f52a5136708 b/txscript/data/taproot-ref/164113b42e586e2e8ce7bb6fccef9f52a5136708 new file mode 100644 index 0000000000..048b62ee11 --- /dev/null +++ b/txscript/data/taproot-ref/164113b42e586e2e8ce7bb6fccef9f52a5136708 @@ -0,0 +1 @@ +{"tx": "84a1e22002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6700000000d31a558abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3e00000000a47f97e303c77edb00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7b8821e39", "prevouts": ["fe68600000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "69857d00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_dc", "final": true, "success": {"scriptSig": "", "witness": ["1b2c8969f6db96d01c364f245eef671b80073c13aedb6987de3b77d5659cc81e1eba9eb682616a1b7fb85def99082375b2adae70132ce84c20c34e4e398238bd03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["d4f296ae3ee1ec947be95c69e6dcbd5f2fb38a277f1329b990a8243c12d9248c745d0c45d0e4a26e6361a8fa896064068d8826c0cafb491a88197cd8bb96630bdc", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/164178c636e1e1ccfbe67f53e9209ff1c0e8584a b/txscript/data/taproot-ref/164178c636e1e1ccfbe67f53e9209ff1c0e8584a new file mode 100644 index 0000000000..c631010b0a --- /dev/null +++ b/txscript/data/taproot-ref/164178c636e1e1ccfbe67f53e9209ff1c0e8584a @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ed01000000980d4ec98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40a02000000fb01bfe604d937760000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48738fdec36", "prevouts": ["e7e9370000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "685f4000000000002354212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["3d601f5f6580ecb01eec7c5ead52441fe44b531ab6ae99d3e697404822425e8759146b1c6992eab52d5279feeba4f7cfe79e2d5a51c026de49302c2f6e01d653", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/16431b60ce2185dc8a3e19f1b9325a1078131515 b/txscript/data/taproot-ref/16431b60ce2185dc8a3e19f1b9325a1078131515 new file mode 100644 index 0000000000..c21cfe87ee --- /dev/null +++ b/txscript/data/taproot-ref/16431b60ce2185dc8a3e19f1b9325a1078131515 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d02000000cf6fd6acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdd00000000770059ed60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270030000000080b8e2a304c1997600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5997e11d", "prevouts": ["a72f0e000000000017a91481d4142ddc5ce7a3de4047bd48b623419b5bc45e87", "8cd95a0000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247", "ae2e0f000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "3f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369aba35d3104e600974e554b9cb99049f7aee0f23ae7c74d9fbe3a88b265c838bd728e192bc5f69ac80b4a6e0537a86a2095372e08a2c76143a8a8a3d0ed1b85bc06da1f6599d7e514a71ffa8a2afff73792fcf1df1b953d2196d009aa835a52703985aa46dcbff8b0495de750bd1afe74a661312f7eddf1146199ee1ea8c08aa"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3d62cda1d889ee05ca59ece4e76d2fa27c0bab47b49d4f70b1e2cb0efe9a711fea811edfde1d836b623c2094badb4ab8bc7795b2b49da5506600222f32ea3fbd"]}}, diff --git a/txscript/data/taproot-ref/1658b5c8f7c6d3672d694462a7f53ad3f3596d38 b/txscript/data/taproot-ref/1658b5c8f7c6d3672d694462a7f53ad3f3596d38 new file mode 100644 index 0000000000..759d76b03d --- /dev/null +++ b/txscript/data/taproot-ref/1658b5c8f7c6d3672d694462a7f53ad3f3596d38 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bec00000000078c47fcbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd5010000001a65b428042cf0a00000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478710020000", "prevouts": ["f72520000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d", "497283000000000017a914269f407e1403e9e55237bbaed7146c0fbc0fe6c987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090275fab9b7195359f7514f30a6475ced76a2aa48da224e6237aa6415c08b28ce5e2fb5859531f43cfbe5564e6677e4945d72bd57a5e391af4eb6b1cc214c3271c6417d1d31156fed8d5608caa4648ae84a369204011aeeb2fdc9a5dd3f501fea490089091faa2601c5fcc1fa05ad0a29fb85a040cc521706b51dfb7fd76f0cb39f0a1a60056079346d67ebfe3325da3b47c20c4c59a349ed192aed4fb7397861e496c7ea413bd961a51830f27bf1c4b270849600f15e878c851bf189d07c56a94d55adcd5e2d6ea8f74fb78f340e9e0a5985fe0396ada1e0903fcd250bfe577bfa194a7bc57eb0e332f33e183489fe985c15a08ba86f40922c19d60319a0529c25943af902e84066b079ea7f1bac331bb5cfb96a8996275c2d6a5cd63e1b04770c81e6887465149f28096b78f61423a5b1e2ee3930f3b2d667fb10f8153d48fd30587c880b7afe5160d4dda45b45d5a388eb3534c827de64b3fa31562a3447950ccd10c5357b76b045e4c8dbff3f4dd42998ef4d1733c25c6acba72107c8f401fcfadb6bbc838342d0556f95fd322b1640256f30753e8f4c4cc4846de415637d5da505100c7f9699ae46c4a3738c3bfa51374e10e2457097a6d9c98ccdf2d40ad57b412c493c48a8afbfe059c7001884b5cc0911e32c601c9a5d078609dd54fd6554aec2459ffe08b2c4265dc63898b68d2467d190eda1f56cb13cab10e10f6edacac0f68425e8ca3b0b75", "ef7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367cbfda17c38fed6334a2908ab805e5d14fa71acd028483d3725fa56b0d725d21eda91d0eecd1ce224dc9f5ac46de57cb81ed44d1050e451131a9df60f58ad735b030008666d4260a12bee868d13ea953ce9c9319f2222d8e8469ea0b912b8ceb"]}, "failure": {"scriptSig": "", "witness": ["4d09022074db48bb9c1f5d88eb3fb771aa8b9567d69e345485ed7d6eed5a405fd4ef514a48923e11cc30d8ea7b6e3670bdfac73b61fb2edb8619603c65920bd0e3368fed8707f68eebe3cadf5b8b830c92f16ea3a535499c31ff7c72292394c77cfe9046310dfa27b589342be471c337d9040f9b20d15171324efbb16e69ad8b1fc08947f991fae6eaf0d61bc0dd75be08fa3e87ef168f9212dcab43cf566416951f4d2bd3a097fcee8a50e1471a01e68dde48a1773fb112b49596adba32732d3c108f20d937146661d7a64e5a770d8676d6e83718653efc899ac583e52b8168af1471480eb4334c6cfa62f853b409fe0f0b18da29256b97d99f84101c0d3168efbce42178734dde7c0c1a1382dff8895a7e3d25dfabf7cc75d69f6044434f8acd327ec5c5645e51a22d15e9b0ece5bf66f96f9af7c4161e6fd4e5b87a7c15e8f1d9292224dad6ad431d7b261ae1e55a60493c0d3acc36c2dced84343019332d9433bd3c018c0348f922cb75912179eef737c08b033b24d4a26fcb10c8de4fb856a52072ea1343d6225d750d1f237b99519b9ec04193a6e3d57cb825db2b0bcedafe6caabbd505cef725f622c74a065006471f433695404b3bbc058e91403a01a7539497d851f98882c53b320d7586031d4689f4e42a3b506ad6abc8911551a612df4482ea5f6b19c1685f84a0eb61771be9a4134baea5e129ba3089f02c23f2b296e91cf738bb5ae4edb91f75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936361ae9315a4f56942059dce8d08baef7ceb9eca078b725cd2c8eec46152008c6eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac8ef60344f111a9c34d055af59cfd42b130acbf4987ee3354719b7c9974e4d449"]}}, diff --git a/txscript/data/taproot-ref/166cd55c33178000f9e3e3b366ace5266964a5c3 b/txscript/data/taproot-ref/166cd55c33178000f9e3e3b366ace5266964a5c3 new file mode 100644 index 0000000000..1db82cae40 --- /dev/null +++ b/txscript/data/taproot-ref/166cd55c33178000f9e3e3b366ace5266964a5c3 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd90100000012f00060dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3c010000008347e7830238aeb10000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748761030000", "prevouts": ["c79c6b00000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e", "dd9f470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_19", "final": true, "success": {"scriptSig": "", "witness": ["2d46ac609b4e1622bd501ff9596c14c9ed0624310f50cc9f3936270dfa548d2c7adf11af4d0eaa4fa4a21739ee0c77dcb014bac0a87346a140d6d018c16fef2682", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ed9ac15921dc6266095a75e80b82ee38ba7a3a2095b816b01f629e5343326880f41a48ba16e00bb810ffac1915d0948a5187cfe9e58e1c162a25bf944d18c7b019", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/167a4033a1f4c30b87898758c3868c1025df1694 b/txscript/data/taproot-ref/167a4033a1f4c30b87898758c3868c1025df1694 new file mode 100644 index 0000000000..f5a51116dc --- /dev/null +++ b/txscript/data/taproot-ref/167a4033a1f4c30b87898758c3868c1025df1694 @@ -0,0 +1 @@ +{"tx": "7b13900c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b76010000009ad734fedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4b01000000c5b820b103cef56b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e745000000", "prevouts": ["0177270000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "43f5460000000000165e142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["205b562ceece4892dab2aaa5b4dd4c3220d2e3d2ed8890be47773502094f216601464380447c2983866fc6c4301cef32ad64a9c377f25b1fcd583377c253b449"]}}, diff --git a/txscript/data/taproot-ref/167fe32905b764460a1199e4a4ab3d84ef186e2e b/txscript/data/taproot-ref/167fe32905b764460a1199e4a4ab3d84ef186e2e new file mode 100644 index 0000000000..668df5ea03 --- /dev/null +++ b/txscript/data/taproot-ref/167fe32905b764460a1199e4a4ab3d84ef186e2e @@ -0,0 +1 @@ +{"tx": "b809cec502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4d00000000826028da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708200000000d8400db60264ac6e00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acd4000000", "prevouts": ["3910600000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "4937100000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "777d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364d6f52c65af8984250618465516d171424b5f4605f7d510d2b5bd71719fa37153c7477a635aa10de5895d22b0b13d3a2307950c6447747564098b225c8ebc094ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457e2aee6c91b47bf7b7aff3c5d3800b2287c2f5852e09bca12781ffc191c1d4f04"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a983e3c65cf55188846777a92d5d2662905d67f05c2a27733140ae1b500402ced76a514a469a046f8a639d1762af89c30ccdce4827317950871fa39f73bf898af03474d1f6825ec143575bd2e16c5d5a5b633189d07c1a3af4de94c30aa06021"]}}, diff --git a/txscript/data/taproot-ref/1680d648bb0d496b0b5cdc71bd31f42d092b5e31 b/txscript/data/taproot-ref/1680d648bb0d496b0b5cdc71bd31f42d092b5e31 new file mode 100644 index 0000000000..34e7274011 --- /dev/null +++ b/txscript/data/taproot-ref/1680d648bb0d496b0b5cdc71bd31f42d092b5e31 @@ -0,0 +1 @@ +{"tx": "c3554c7202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0e0100000076c92ed6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcd0100000015e8f9ac0162f93d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac8ebf4b29", "prevouts": ["f7b753000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "2b9321000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090275f8ad32fc82d87f629fce56667f924fd59b23f1967f238b19edd0de3dc262a2ba6ac97c8c761e2a93deed9e676697909ef70de8ba836e6449a000fba219de20afeaab20c73245fe3055fa64bc4fee3604f5f05ad56da1e1b108a15805af6f8f27f91e39312227267431aecd4fb6e5c2cafddf5b0c8065b776f39edcb8ac72a3152f42211527ea426f02486046c4b0748b050651cc2205b0453c70007fc57de292a4c6d42240db36bfd29137b8a8a5ecb1994e50e61d323a4b7255a79b953ba88704d163621dc282c662cb720bf11f25b43c9f29f89d31a6cb87ae73bfbe6f96baf6a4496e8b4df69cef594efc9edac9f2729848b95e87a1b07e01f50e5543100d5d4a91d16d87bb307bce6c891545bf46ec5839c67edfbf43730f71e9f2fb137bab9645cf2b9e539da74cd4da03a12d46a7666c42a824cdfa8b369e614b2595601329fc2c7ab87aec9986bd28ad09e387cb467250a3e02227479062d5c27510fddf0a9fcd204c69c198a5133a59810e8ba7edb973d2845973ae43cc55e7afce144f216680214d5be0e5de4dee5add6a0b5c3e0bd060103e53a0695d7b1b29b4a6723d75207a5018952ce1df6aa0b77687682bfaed4af04bc1ef8702b36e2ff1165b8f85b9eb65e8854bca27702ca2c1237cf5c15c89d91cbfa4432424a44180edced6fa479c99ea9b2f4e066bb31dddea90abf115d7634021447d6eb560adce000045cadce7343a3975eb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ed6552aba169725607bb1130dbc4a5e66e4116f82e73ca53fd59d9f0c82562e31292070a98a4b0647c95affa8e1bd4aa189d67ab6e78b6f1cfbf1b9e41a8f8bf399891b33f3277cd8a2b8473e2e6079de1e6f51840c7864da48d9f2287dbe494cf9ce2244c675144b577c27c052f9ebd481172245e28e9502c6c6e8f12c64fa6"]}, "failure": {"scriptSig": "", "witness": ["4d09027274a01e8ad4da83e3fa778a82a2fb92f044ca92c005899e5679ca074a7909a5213a09e1f09efdd4148f37b007c5b2de2fed89f964df70cddf15fec39c1202cb72ab4a624e1bf918dc4cf60fddfdc17dea6b91422e27b54f7bbc1415f92c7f7952e51ca712b812813c52257e17f2e3e8e17ac2ccaba45612e43d5724e90e5e9c168ed72f2b3a8f7c341d7e5acd656986e7f60fc91ae5e180d018b178c0ee3a839020a1a0ea0671949dda3470a9006eb88cbc46b1d88244b93edd34afd2a1803990f19cd5cc197146c7de90144e0260a020d48466de1127f723f6f51aee38941e3167ebea6ab4d0c4416d25cb90d0aca2d42aea46c4ebce4e841625afd0212456f23730832011c3b8840838bfd609dcfbbaf025b0227079bb3141f67fe01614bf7d90d213149010626650c37e06d5fb3d13122160b7c4d276fbfb7476e7cc53c211a6605efbd92f062b62441ab9197fc93adb8a5009633880438a446e10a69bac0478db09e4cc1782fb4a35c3ecab86ecaaea47b913bf5a64647e06550eb43d1cc114ed3d2860e77ceebda45fac1ce02051c92932f827c804bc016352f64c7d37d0847a539065414f92b9796e5991f7eba30d7c0287f8b7f30e1df9ada3f4ef7f58d82d83808fed14dd9c3b4ec9cf31d0433f98ff05e6b4d68a9054e764e6de4cc3028aa8f57118a687a767d06a7c05997cc7845afcaab0622737aaab3feedfdb891e771bedaf0a89f57561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369886f85ebb300297009aa959255e1f8e976b091c7e06b33477ed400c40a83b4c14f0d108097d00934ef2973385fcf188ce2945eb833bd9e90fcb9cf025505833cf9ce2244c675144b577c27c052f9ebd481172245e28e9502c6c6e8f12c64fa6"]}}, diff --git a/txscript/data/taproot-ref/168c2988106ea01a8121eba649b024715de5122f b/txscript/data/taproot-ref/168c2988106ea01a8121eba649b024715de5122f new file mode 100644 index 0000000000..e9333099c0 --- /dev/null +++ b/txscript/data/taproot-ref/168c2988106ea01a8121eba649b024715de5122f @@ -0,0 +1 @@ +{"tx": "ab01e604018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49e000000002f2cd5fb03a4a13a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796a481275b", "prevouts": ["f5363d000000000017a914f7f3eae48087a4952a984cf9c1f2f12f8785754687"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2253202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["c2cd116515da87b99de2601d6f479891cd5d8247cff7df2366f63237c6a7fe39aec53d853fdcde99e72311c5be6ba75778f6e11065c44bce3ac9a74220eb997b"]}}, diff --git a/txscript/data/taproot-ref/16acfa58909fa72c2eecfaacc8866e7dd1f42fda b/txscript/data/taproot-ref/16acfa58909fa72c2eecfaacc8866e7dd1f42fda new file mode 100644 index 0000000000..23278d20aa --- /dev/null +++ b/txscript/data/taproot-ref/16acfa58909fa72c2eecfaacc8866e7dd1f42fda @@ -0,0 +1 @@ +{"tx": "0a05db0e028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4230100000039d351eb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707f010000009a75c1ee016fad22000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cdd4d843", "prevouts": ["852c310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2f131200000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_7a", "final": true, "success": {"scriptSig": "", "witness": ["96bf9b8dd7c3e25dae24535d68b03d7034cf2ae0bfb0c257d2306316d6d4de59d533c636b33ffbc710228439042268a9d0147c4b0296c1ea63893508425691aa01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["112329f32b8d24769485befb9431172c5e520686e872a4f5554d429e43f687f2358fcbb14f2cb2b9f6c0df35c92d6fb2b81031df59c54bafef0b80337a361d667a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/16b2bf568fa5aa6e4b5de39fd290f6de49b091ec b/txscript/data/taproot-ref/16b2bf568fa5aa6e4b5de39fd290f6de49b091ec new file mode 100644 index 0000000000..ea0bdc6896 --- /dev/null +++ b/txscript/data/taproot-ref/16b2bf568fa5aa6e4b5de39fd290f6de49b091ec @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f800000000fdb29b5b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705101000000f4984f1f04d30d4500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ba000000", "prevouts": ["a949370000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "4e5a0f0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "f07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3e6b1501de3c77a58ed25563289f7380fad902eb870a0fdd7293169316d7b75ff88c7bee1bb9c109f1c6365501285b6447b8ae029d34f47d1dd1efc50e8947b4"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb5208f8b948433da6baa451dcc6971038720543971a17923638ed54c8a85897df7eb609cf6b5925737ad21e523a1c8cc87f95ebe19353e64c9623e085aa5557f88c7bee1bb9c109f1c6365501285b6447b8ae029d34f47d1dd1efc50e8947b4"]}}, diff --git a/txscript/data/taproot-ref/16c6bf5c5a6caf8746580f9e01ec4e218a4c0e39 b/txscript/data/taproot-ref/16c6bf5c5a6caf8746580f9e01ec4e218a4c0e39 new file mode 100644 index 0000000000..ad0d94abf8 --- /dev/null +++ b/txscript/data/taproot-ref/16c6bf5c5a6caf8746580f9e01ec4e218a4c0e39 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b07020000007adfb0878bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41d01000000b3b8bc9e0240305d00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f874d000000", "prevouts": ["43942700000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "1845380000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_6a", "final": true, "success": {"scriptSig": "", "witness": ["2ffc5dbd47ddd5c2f8e370e4599bb5f24a60695d816beda2c13da6cb5016ff2a7008a3c80b599761254448f3da8822bc7282217e3d6e33adc7c68e4f1bec3b3503"]}, "failure": {"scriptSig": "", "witness": ["29482721dc7ac275df8f85c07a78144d243d30cdce18b8d78005ba830e06d6909ba2db0e2c09583cc26b65cb8aeb9fdb063081867a42b45023689e2426b6ab4b6a"]}}, diff --git a/txscript/data/taproot-ref/16ecdda3d618db946d6033f96c780764642e0471 b/txscript/data/taproot-ref/16ecdda3d618db946d6033f96c780764642e0471 new file mode 100644 index 0000000000..2aed1c5ac8 --- /dev/null +++ b/txscript/data/taproot-ref/16ecdda3d618db946d6033f96c780764642e0471 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707301000000b075f9f160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703a000000004772b9bc03c6971e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac66000000", "prevouts": ["0d7e0f000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "2ae0110000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09022074c1af01a4ab4ee37a577ed2238c8787f0cab6a4bada6f5d2e8e612647c21be6d26696ae79098d80e3f1284580385e0c77a330ff679475d29e10503a4f582147e76794e5a5f855160fc67104736bd34e91bb7e6c6949893d5ba0002ecd78680aedf2bd03daf8238d8742f68cc3475a5b6fe9f667d7fb1e92772fdafff7fe3fefc6c657041d58a4bf9732adc627f7924e13306cde51ea9050b91361d526e1b349e6c362cb9fd1d3e8f11814738a554bd4c4775b06ee086b411aceb72e4cbad1a238e26b4b27e8827dd23f7601e92d11582c34218f30564f0b923e0c4abc70f31b588636015af7f9b899e40f92dea322adc746b0d60b4a0df5c03b9c61c75c844f2e9c8f35e576f4aa897a082c9a6042f78e5d0e5cb2ee6aecdbf1cac2a20bbbfc303525c7309eed6cfc78eb7b44f83536221b7fb45bba92eff5d30e01549ef42a01c468b988ecf776de5c2497f28486c8a4be1cec44f6a3a7f6ff4110fb26761b8d38f638df69dfa24f9ea03d8910402bc726b84d1c1b24d2458c96e56006e7bbd7df1df5b0c655e9f01a2394d4bb361836783c36db19f9433788878880703a72d7512926040a2e570c03e88eda6dd187a0435d175a7763f2c94abdbb82619077a0f1d3611681986def2171430c3885917235fac9b821f1d527749ce43f04efa241f727ebe23c58b5c5e756391e6850e48eb59306ef01633f1a74c80ea603c66bd45bf15fa317810775", "717d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936acd583c45d21b204d1804bedee0b0f3c4b80b4344b7f9b78d7e17b5495d745d61e193f5d3ae2ada43ea9223ce508afaffd6393e3458e5d7b2b04f710aee774aaf4fdc20f1f5535ceda7aadddab857a143114b7886b058839365016ac02e93c97"]}, "failure": {"scriptSig": "", "witness": ["4d090275347463f525937e1d40acb4526ae2a606ce4c9ea532e96a08565c5600ba4579e2fae43aec021284ed8df594a5061daa3c984e6ced12570eecb593b21e72e5017dd990c7b1e785872731ace7dcd25d5a409b394badca2fb3e089bd5cbdf5bcbe6538a61152cc0a6692c57c66e71203974426396dbd05597b65e1efdf4835c687edd32019d365cccaef873ce0343172655e841c550e32db2bc1b83abc4cc36ad1edb93a48df3850953383a83a8dfa5e6c17e119a672100be9c49f33ed270023b11f17b5dc70819e544bb68716cc880bcd5e06986669c43a02161ae0594427d1de18dc54eec708cd782eb28a214c1be61bd4b2505d9173ac5cb87934ffcac3a192177bb7659faace9ee3de2d917e59bdb8f845d82e0968b2b0ad14131f4a7f09e6aa98c340995adf8179b4406025acd4d6c788c3c63715271fd2d99898621b07dd8a59f71ed3f931b49c7d84580934da53b637b1ba3b40e3181c7676d52eb9b77a88392e7b2a7aee7360098bd1d64003d72e74c537466548dada818b8d83117e5bab73563e54c3441c8c872cf2671a919e2345ccca71d293ad60b0a6a6927ca9303071581793294793b35acc4f5fc8897a8d67f8202d87e152ffada3674e4c1a565f195f1a80264d3e5773b1df3400c7be59af8c34e4d73074932895fe4213db361754ed666ce91f068701d739b84918bc33eaeec6f2d4c2e4c2fef7b59c74eda5864dfca3d89e58fe3575", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e47c0542868f8d04f04b11c7797ac2650c695e4f1f1a83ba9fe9a249175e916721e193f5d3ae2ada43ea9223ce508afaffd6393e3458e5d7b2b04f710aee774aaf4fdc20f1f5535ceda7aadddab857a143114b7886b058839365016ac02e93c97"]}}, diff --git a/txscript/data/taproot-ref/16f6f25ce07eadca0f3c82818b8910b5006b6aa5 b/txscript/data/taproot-ref/16f6f25ce07eadca0f3c82818b8910b5006b6aa5 new file mode 100644 index 0000000000..5fac9b9aca --- /dev/null +++ b/txscript/data/taproot-ref/16f6f25ce07eadca0f3c82818b8910b5006b6aa5 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3e01000000cfab0487bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6c000000006aa54fd6047c69d500000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc797000000", "prevouts": ["a7a25a0000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "970b7d00000000002251203792436bc7394fc8cacb2bd2cdac9c86871063933d86113811cf92ac8fb26226"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93640873c0ba6ee1189c8eb3d7712690e4c72ee5324e9b4123eca76344463b203ae"]}, "failure": {"scriptSig": "", "witness": ["6a3d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/1715e26f824103c322e360c6d3c237781724ca4e b/txscript/data/taproot-ref/1715e26f824103c322e360c6d3c237781724ca4e new file mode 100644 index 0000000000..65c29eb0d7 --- /dev/null +++ b/txscript/data/taproot-ref/1715e26f824103c322e360c6d3c237781724ca4e @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c81010000006dbe9804bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6101000000606c4766027ae7c2000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487afaba04e", "prevouts": ["7ea54c0000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "8668780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a", "final": true, "success": {"scriptSig": "", "witness": ["9f4d601ee4c95b404904b3634f10340ed5cc2d5217b8d4c8b61fcd07ea2a2ec0be945eeca3e8dd20201edae5e8e4ad5353419b0e7283a9ddefa3c9cb6197aeb683", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ef45f34e72a351230a4b75d54f81f0a013881cbce07c34da05fcb83150234cce6a5602d5b63ed6c66a0b376d84a4189e90f866b71a967a0a415ad11e045bff6b0a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/172062063b7ae63dcffacdd6b98414054d06633e b/txscript/data/taproot-ref/172062063b7ae63dcffacdd6b98414054d06633e new file mode 100644 index 0000000000..bccb6f98ee --- /dev/null +++ b/txscript/data/taproot-ref/172062063b7ae63dcffacdd6b98414054d06633e @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0b00000000841f9a698bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d301000000542e177d01f3141c0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce455ed3d", "prevouts": ["95cc5a000000000022512089cd9bcf9fe9207377d5b979d86bcf752d8d9dc577da80e024c55776b1ac583b", "47af310000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "success": {"scriptSig": "", "witness": ["bbc60f5d705ad205271ae418fa66f0d3c7e753d4ff180d61427337fd992e014cc7b932cd72f78749602d019232db381de632db37e63bb6c98c7b099f8d01bf85", "839267d6df0912e5b51f34023acbc7ee499792bf670136104fbdebede46c7bdc92b506accde64fbf85b129d12d39e3b68c5742e49fa574c78df828c285caa75dd5adc196e2aaf19535c8b6ff81359797258a81b5441686e4ff9cf2a3bffe6b356d5973c329e3b83aeda7c597a0007b98f9799f6d38d9235b387a427d7f8907f586e581c18cc2783ad9ca95c6efccd9d61cb7ef1e9a7798300d02e0de99c01a", "4cdc5c946e76fa3b8cbba9df2747f00e36922870e04a1d7b73d0d7be7b66ebcf9b7fb48e2c19122178c23c497bdb9e81cca0c8f506c2948de839eb8fd4937fad193a715e0199efa3630d411a86fa04d93b9cdc76493ff3a76194563f4aae77307242bfa399fd6b916ad0cbb23b9c3aef3075068fc66b5f186c14f15e2b1af53afcc633f3857186145b9927a02e1cbacadd099a1a2f58b9d79fe00a0785a531dffcc2a09bbb3a90e22aad7f41f330f16ba557b99d8f6467b650041d69428816875a721eea04addb2cdbd6bd61250600108a3ae9bb21643cd6c4e7ffd0d4e36d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000032d2efdbe161f98c288eaa7fde4bf4fcea321901811a63e066302ce97599a1f9c1aedc962753057dd58085b3b42211bdffaf8bfc7fd34f8a41eb79c9c1d3ae83ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000001f858f5656212125faa6eca732f451d22c3247528ede16e402131fa27291047000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dbb21eaff952aee1413b27d6544f80001b0348805f17871125c31f0c83693bc4e6c0135b1e281dab29c4cad425a9053dd2519a7dd2c8c13a888f296e54cd0ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43d6bea0072195b361f058c9a7e17831c3c4d4453374f6b3ef9c08e136a3e1ca6c188788cd0ca725f0a3156c1ead00eb9238ea1aafbb39b34d4e0f0fc4c4d3209a54439c8f1b29dec753bac498ba1ac20b83434e06482602f7e0a989f99d6ea963b5c5d77f2175ebd3570a0ccf057ddc65fe30c62b6f1c9c0c34e0a08a62021ed917fd46971d6070abb03d15af5991be56e08a425e0cd9e813f7e96ba49012b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1d726dc89cf4e5c9124bf8711bdc2e07a8daf774ae4012b22539b71c07ef212f9c938a7204c78c9670b3b453158ffa99b869b633379d29fb1aacca0628e5a9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff58db95f3737e2b8a5a30ff49853ad0936e6c131757bdbaefc3e366453323513f16250042be117da29fef9ef7f439bba7edf9e777b14ed019706f4bc72caed468eac762bd0d93a5dcd4b44b8868b4a20da2906f9229d66631d05efecd463868703475f6ccfcdb564a8516f725723827aabdc7c0b6441aeac1b9b1e3f1d8e9fe3c9661d942f27eab2399848d83364321d832fe274ea51d21fd6e96ff381d5f86c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb284df40cb00a2b517a661340b2d63e0d02f2c780340b8dc5d2617845680c33cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["bbc60f5d705ad205271ae418fa66f0d3c7e753d4ff180d61427337fd992e014cc7b932cd72f78749602d019232db381de632db37e63bb6c98c7b099f8d01bf85", "aaf117669031bf027b0d859b5cb34b284214e9b533bf4c22bcf4714af431f6efd11d5abef709464a6006c1cdc0bdea111ebd46a80ee2b6b214456c169e345e24660acf2db097f7b3574995385abe6c0e91938c6c43e3987e44aa5a4712258025d7593a00ffe4f95a099481d0de95ffa700ba12cc5b135241c8c565ba00e070e878885ac95ee15046a2ba96122e503729a488d066782be6c30cb52105201e", "4cdc5c946e76fa3b8cbba9df2747f00e36922870e04a1d7b73d0d7be7b66ebcf9b7fb48e2c19122178c23c497bdb9e81cca0c8f506c2948de839eb8fd4937fad193a715e0199efa3630d411a86fa04d93b9cdc76493ff3a76194563f4aae77307242bfa399fd6b916ad0cbb23b9c3aef3075068fc66b5f186c14f15e2b1af53afcc633f3857186145b9927a02e1cbacadd099a1a2f58b9d79fe00a0785a531dffcc2a09bbb3a90e22aad7f41f330f16ba557b99d8f6467b650041d69428816875a721eea04addb2cdbd6bd61250600108a3ae9bb21643cd6c4e7ffd0d4e36d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000032d2efdbe161f98c288eaa7fde4bf4fcea321901811a63e066302ce97599a1f9c1aedc962753057dd58085b3b42211bdffaf8bfc7fd34f8a41eb79c9c1d3ae83ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000001f858f5656212125faa6eca732f451d22c3247528ede16e402131fa27291047000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008dbb21eaff952aee1413b27d6544f80001b0348805f17871125c31f0c83693bc4e6c0135b1e281dab29c4cad425a9053dd2519a7dd2c8c13a888f296e54cd0ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff43d6bea0072195b361f058c9a7e17831c3c4d4453374f6b3ef9c08e136a3e1ca6c188788cd0ca725f0a3156c1ead00eb9238ea1aafbb39b34d4e0f0fc4c4d3209a54439c8f1b29dec753bac498ba1ac20b83434e06482602f7e0a989f99d6ea963b5c5d77f2175ebd3570a0ccf057ddc65fe30c62b6f1c9c0c34e0a08a62021ed917fd46971d6070abb03d15af5991be56e08a425e0cd9e813f7e96ba49012b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1d726dc89cf4e5c9124bf8711bdc2e07a8daf774ae4012b22539b71c07ef212f9c938a7204c78c9670b3b453158ffa99b869b633379d29fb1aacca0628e5a9d9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff58db95f3737e2b8a5a30ff49853ad0936e6c131757bdbaefc3e366453323513f16250042be117da29fef9ef7f439bba7edf9e777b14ed019706f4bc72caed468eac762bd0d93a5dcd4b44b8868b4a20da2906f9229d66631d05efecd463868703475f6ccfcdb564a8516f725723827aabdc7c0b6441aeac1b9b1e3f1d8e9fe3c9661d942f27eab2399848d83364321d832fe274ea51d21fd6e96ff381d5f86c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb284df40cb00a2b517a661340b2d63e0d02f2c780340b8dc5d2617845680c33cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/172b85f2524cbd3f0ca1a41380566b1648c8c405 b/txscript/data/taproot-ref/172b85f2524cbd3f0ca1a41380566b1648c8c405 new file mode 100644 index 0000000000..3d9005f03d --- /dev/null +++ b/txscript/data/taproot-ref/172b85f2524cbd3f0ca1a41380566b1648c8c405 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bae010000006b85b084dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1c020000003e333c8a0305983e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7beb20230", "prevouts": ["9b361f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "07072100000000002251205109082c92be6cdaf88bccd1fbf3eb83cfab83a783afec3533a63ba21c303957"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a2", "final": true, "success": {"scriptSig": "", "witness": ["76c983c00fb22e9436e98f72d0759ce06226d6b3f4dcfc7c6e430b8a74e4af893c54f63c8731a08f6ef2a870d0226e0c0f6279a4d5565680728a94115c32713a81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["333565cb2306881e71591235c965c1c30f9a392877cedcc6b965f45028b69f512c8bf3d472ddc724ada5df5256200327507374cc5e35026256abd4c9a053bdbea2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/172ff5cf4d0d01f9ac160be767a1b233dea05ffa b/txscript/data/taproot-ref/172ff5cf4d0d01f9ac160be767a1b233dea05ffa new file mode 100644 index 0000000000..9a0c0e1d10 --- /dev/null +++ b/txscript/data/taproot-ref/172ff5cf4d0d01f9ac160be767a1b233dea05ffa @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4660000000079caaceddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9400000000319a8008014ac71c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a631000000", "prevouts": ["e90e370000000000225e202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "72f2250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["f0cef00457cf698bf2d34dd5b5a0ded84464a8bcf9886cccb35a292ef580e492c3abd449cb085d9914f672edae5d0c926025942789a99731e7c216170ad41de7"]}}, diff --git a/txscript/data/taproot-ref/17405fca2ae8f08cec8849c6a750217abef9ff89 b/txscript/data/taproot-ref/17405fca2ae8f08cec8849c6a750217abef9ff89 new file mode 100644 index 0000000000..374642adb8 --- /dev/null +++ b/txscript/data/taproot-ref/17405fca2ae8f08cec8849c6a750217abef9ff89 @@ -0,0 +1 @@ +{"tx": "1856b3df02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4e01000000bd0fc0dd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b0010000008f497eb404b1cd82000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c40df233", "prevouts": ["dc4e490000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453", "11a53b00000000002255202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["bf", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db7a6a7e9e2eb861c5b236223f8a0e993b636b19808476c0a20268bf09779a38cc596949c599e703b9191d3ba022749fca5ec33c3492eb5532759cd445d2634b82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365bf71cf7816bf4c839ad04f64c439f60ca1e0c1202f6058d0897192eaa874d9b285ab48eb468144e5e6aa7ce6d4aa75a792c11a68b383289399495d27c15055ecc596949c599e703b9191d3ba022749fca5ec33c3492eb5532759cd445d2634b82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}}, diff --git a/txscript/data/taproot-ref/177f3355a5b98fe40607bd5da8383d7129c515d5 b/txscript/data/taproot-ref/177f3355a5b98fe40607bd5da8383d7129c515d5 new file mode 100644 index 0000000000..7bff305791 --- /dev/null +++ b/txscript/data/taproot-ref/177f3355a5b98fe40607bd5da8383d7129c515d5 @@ -0,0 +1 @@ +{"tx": "acbf9f810260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cc000000000eb572d4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b920100000084c9bc8602e0ab2e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acb0633037", "prevouts": ["2dff0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f34f210000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "3d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93643fc02d791da942af66dbc7ed13bfb20fc5039325710c1116f758577e095b78a701c89cbc41056f58ce11974b5756eca381e306e17d72fcef5e58c3aca02cf1415eb41ce20b61903eca7e2f7903a7c5f76d50ccbb22a22a302188dbad2e46b28"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b508c965bf67778dcb8a54be530beda3976f1f18c717ffc195c744ea9b09aadb671c5f6e3fdb2cca9ff2c8978272a7c72309b5e793932f9bb10a0961dd619da6701c89cbc41056f58ce11974b5756eca381e306e17d72fcef5e58c3aca02cf1415eb41ce20b61903eca7e2f7903a7c5f76d50ccbb22a22a302188dbad2e46b28"]}}, diff --git a/txscript/data/taproot-ref/177f56a1fdc5cc3198a785f6f5e7a55d8c324f16 b/txscript/data/taproot-ref/177f56a1fdc5cc3198a785f6f5e7a55d8c324f16 new file mode 100644 index 0000000000..50ab04dcae --- /dev/null +++ b/txscript/data/taproot-ref/177f56a1fdc5cc3198a785f6f5e7a55d8c324f16 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf430100000019be6fb160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704300000000dcce808e041afa810000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8795000000", "prevouts": ["d9ef740000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "78f40e000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c04c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688fc8f615032475bb12c71b7eb73effb9d0886ca0e0e26ca1dee2899bd81981c1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004500c8753d4e6010499b58065b36892efcd9281a64e85ebf7c5dcb8f6f4baee16c3de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a3f25e8770efb05111073ed80fe6014ab4fd3382442a3e29d1922781189381cde2b448ed3f1969af8fffbdb3b73bd72fedaa98057d5c8b58a84426194002c6e029de37322ddf566a2356077a247b666bf816d75bd62d8842c555909c8a1545e03de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}}, diff --git a/txscript/data/taproot-ref/179b29b5e6ade731ba119866f25b6743232bd3ec b/txscript/data/taproot-ref/179b29b5e6ade731ba119866f25b6743232bd3ec new file mode 100644 index 0000000000..4ea5a07259 --- /dev/null +++ b/txscript/data/taproot-ref/179b29b5e6ade731ba119866f25b6743232bd3ec @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0401000000bebd38a7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbe01000000ba854d0e04f3d9d10000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e790000000", "prevouts": ["474f840000000000225120ea467ace5d4e72e4b47248d08b4c7e21d4858a06bc17e94ab3d6153139c60e1f", "ee48500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936816733c26ff73b2a499b6ca717ce0a086eff22a381422ce1dc07285d274c2f8b"]}, "failure": {"scriptSig": "", "witness": ["6a6b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/17b2c3c5c8f5c6d4e3b517021c8e26c982fc552f b/txscript/data/taproot-ref/17b2c3c5c8f5c6d4e3b517021c8e26c982fc552f new file mode 100644 index 0000000000..1074793d49 --- /dev/null +++ b/txscript/data/taproot-ref/17b2c3c5c8f5c6d4e3b517021c8e26c982fc552f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9500000000d03e1c89bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd101000000992df1f804e162e200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac708d0a37", "prevouts": ["a310810000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba", "b1dc620000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_7c", "final": true, "success": {"scriptSig": "", "witness": ["7fa5da3cd9b4d580444f4654d625dc1b8b9856d7348e7e31b609a33cf89f84997a0e5d95530f5de272f3f2c7cb6605e824b2c0d015c0ba50a451cd12f1f49cd803", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["eab441492422849d56f4622cfcbd0126a9feddfeb2046e6bb576c24bd65113ab7a06955661f92abbad08389afc44b4b36273f587af7a6389364a61dae9318cee7c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/17cd80eebaac8182716c6996ad037efac35af699 b/txscript/data/taproot-ref/17cd80eebaac8182716c6996ad037efac35af699 new file mode 100644 index 0000000000..9180d55bed --- /dev/null +++ b/txscript/data/taproot-ref/17cd80eebaac8182716c6996ad037efac35af699 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8c01000000dffcc7d7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfce0000000016cac3e60495eabf000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8729020000", "prevouts": ["937b5c00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "5f7e650000000000225120e1a0c74a8d16f26f13c9c4b6f4a1ceec6071856e9cbd0cceab614068d31377db"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "47304402203d3811030c08e0a632f8b0fc87b891d3763cbf3a20328a2e256ae000909e68a4022018c009878d1833d1390094c1fddfdfbaa956aebec306538c237df1f506124494cf00", "witness": []}, "failure": {"scriptSig": "483045022100a89bdbdcde6c63d7d2a6f29815a2ce2cb4a871c74e636e4791d23b2230e1b645022058f7a4c5a43c0a9ef1cf8800f89fd301f19d03ee803bd530d1324799078acca2cf0101", "witness": []}}, diff --git a/txscript/data/taproot-ref/17fccd13627419da75dd075f405d0c40a09c652d b/txscript/data/taproot-ref/17fccd13627419da75dd075f405d0c40a09c652d new file mode 100644 index 0000000000..7c99074b2a --- /dev/null +++ b/txscript/data/taproot-ref/17fccd13627419da75dd075f405d0c40a09c652d @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1a00000000fcf1cbccdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca4000000005c8d71ea02dd33db00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69c733a34", "prevouts": ["bd928000000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "adff5c000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "b67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3bc00f369fc994f47536ced64d5e4f722a68c2ed1128957c24de4b5158af0ec621d9a3f11774810afeba87c9188100d693899e640a37210c96e3be6a00ac01d4"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e848df663f65f0e27b2d1567423d7462b229bee90dcacba8c1bf1c1a66aca7f6821d9a3f11774810afeba87c9188100d693899e640a37210c96e3be6a00ac01d4"]}}, diff --git a/txscript/data/taproot-ref/184dbb048070da2a1db945f29853600246189da2 b/txscript/data/taproot-ref/184dbb048070da2a1db945f29853600246189da2 new file mode 100644 index 0000000000..c0f14f40ce --- /dev/null +++ b/txscript/data/taproot-ref/184dbb048070da2a1db945f29853600246189da2 @@ -0,0 +1 @@ +{"tx": "6a7bc0ae03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2d010000005909f2bfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc501000000c4642ca8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b22020000008a37259c02ef808b00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4c7b8943", "prevouts": ["697b510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a86c1f0000000000165b142540f27e90740933c99d4f17ab2dfc6c82951cfb", "e3fe1c0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_7b", "final": true, "success": {"scriptSig": "", "witness": ["6d1784fdb02f794281d08e5a2eadccab5b1087b0a7be24f1c3db188a916719147f28cb172383aadfcbb53a554bd17ead768a785ba87b98aac13881819252009c"]}, "failure": {"scriptSig": "", "witness": ["63f65fe0609276b08be634be8b183957880282d8dcc77e30b7193ee9f23ae9ff3f153cffe505e3f46fbc60837bfd76db11d9445ea7ab7c6f569cb8bc77587b377b"]}}, diff --git a/txscript/data/taproot-ref/186d4e3b056dbde38d01af9a2095f2b550b930bb b/txscript/data/taproot-ref/186d4e3b056dbde38d01af9a2095f2b550b930bb new file mode 100644 index 0000000000..31ac84481f --- /dev/null +++ b/txscript/data/taproot-ref/186d4e3b056dbde38d01af9a2095f2b550b930bb @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf10010000001f3f7932dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3401000000f67932efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2102000000826b9d0304a1acf2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688accafa8b37", "prevouts": ["0a62760000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "ff685e0000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5", "64a1200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_47", "final": true, "success": {"scriptSig": "", "witness": ["4f15da331ebc736f43a26b66b6f0d3dfe612edb6c9048c30f1a4a1a64824b2d84888175d8752df80ad37d67ac18d69a38fd7f8c8b9594de5aff947d1e54007af82"]}, "failure": {"scriptSig": "", "witness": ["ec08c97c7428798b25dcda478f9ec80f14cfe5dcee6e99e556f5247195d0274819d59fe7bab5878e2cbffac9f6f3eed3257d9f9ddf2005fb0c6bf1a7b42b422247"]}}, diff --git a/txscript/data/taproot-ref/1870a7b0cbdbdbcb7e9f1d248928fe0dca885fbe b/txscript/data/taproot-ref/1870a7b0cbdbdbcb7e9f1d248928fe0dca885fbe new file mode 100644 index 0000000000..b868a45959 --- /dev/null +++ b/txscript/data/taproot-ref/1870a7b0cbdbdbcb7e9f1d248928fe0dca885fbe @@ -0,0 +1 @@ +{"tx": "48b53c3102dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c390000000029ddda8dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd6010000002acd50fb0243a8c5000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc70404943d", "prevouts": ["84ac53000000000022512027986c975f6014bd54fa55f3e483bd83d3384004828bdd3e489d9b175e79ead5", "ae1574000000000017a91498e55eac47e04767f832d50008ff18559102c9e787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["3f87d679e4e87922a0eee489ec20a705e9e568dc388bcf757e70cac8d09ecc13b34cfbd387b92a08c4d8d1292f488d73a430928e4a49f7eafeab4d76b68e33aa01", "15fe4dba251774e95533d9bc102ed0609a97c946219a1cf03e6fb6112d76020a0c78efaf1d33b244cf21fe90e9fa03a6d0a855dd44da2f8be864e216495dc5495453566b4f6b5fc57cd7f7e0a312e93a2bced2a69847fc45feebe7b7dd5c8ae7dd689286589ebbd15ed9a4417c5fb5df2294d4272c81ade188ed5be3cf0a45f63329fa10da2f0482c4272083ad489dbf160399317c92da90a61ec5c218078d652c45f0a6ce", "75005a3535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a2ba5a883535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a26e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936411aaccaa2f00a161189dce43a9cea795f36d9d70d3e1cdfaad5740f706f3bc685a95c0e3a9be06cf58146b3bc5fb1546d7d0e3556502e189d50862181eabedb441369121629d451605e60faa82fb2587a97364c24cffc54a5e52e827c54e449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000344c3dd851e2ea42f02204f30463dee20c8e4ec50417a06167139b8316877a824c5b466720024622ac5259cd26bec0d05da102db22ba7095575a2ab0833c096ee80c64f88c70fa9c5a569bf63c9b21d14468486491ad016b49487ac210783ef738a473e1ce637153c37c66e2de294c34f551d3bff138f1251d2e0a7f4443f8c56f461f998bb42f4b3acc72e9e53e57f8ec81f342eb5545af3272b690b5de07643a69d446fb5445fb7c454993ad958ec703cba86021ad80fd977d224cf36b429e850602eccaa779cc00b8e901390d0a3f36f43e636d45368154c7ae46fb231fb7000000000000000000000000000000000000000000000000000000000000000028045a5222f219de8ce4ec64d59ec454de0c807af9d7cac8453ec4ba2c236bd4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb9da65bdf156bf72fd39d7f8e5752fca9a112277c8bb84a4f0c27644715f865b557a5191e283f21ba9e21731cfae2cce5fd3871db1cab1b923c6441195a6489a1301aa0ebfabd684fa6000ff7d506040276a9f980293b4f5e1c25cabca2dc3da0e48c71b991503486333f3fb9d1d772ac0a752ba97864b4c8f30a08d1b9986cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6f7dc171b51f4e47daaf698237e670b847083a87634e77718e24b4a1464ae516fedb2e1e9eed857bc9e29f3169583d6da8d59e2ecf81763b37dc26cc9770bca31fb6945707df739a4b83934d90a1dda4122bfc99d5290237e4cf99ee4802f6aa07f773beac71a24828b1c2bcde88987adc1134896e30412787c35d1333060376aff0ea89d2fe3642e776371bed5c0828903ae0efa314eefdba81558a852d8b1363f3636a73ee0d5967e2666ae2d9417538c99a277c2f2399c9ca2da076db766399f07a4ba9b4e291ce4ebb45247e0879b10d6b0a19344e65ad4b68475184fc6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1184700b38805717162fd8eb98570728e94e1d69bf2f17a904264923904b5e23b257b4f4aa591205239b696237fb3d9a1787aa2d972c47529486b9a47b76136c6ccf73a78b3c04938de1da676befeb8c12e0346b7baad6f7781b6de83876fce1c06e304006c7f5f29425bed8b063420f0fe2bac560eeec08cc5e418e103a5d4a682425880f6f7aa6c4f19abdd0aaa24988645d00ffbb813497720be270d2fa65ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc04f72245113b62716050c7417eb81c66dd8b1460d05627d683c3c3a50a2ee3b5ace784a5112f602ba4d0d55c8d47b9f58ff462a0a0d0f1bdb3e111bbfbc42fc85215ebb23a45fb555483827840ba84619b643c8c951ee3948f03bfa66dda1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f89a0621c6a1237d5e0083f81f775598a85a3ea54c279faaefbf20811c74ceea5d237ac4a5690206981b4ede23e91cb3e799c38126fbb04c4951bbcd72153ce4"]}, "failure": {"scriptSig": "", "witness": ["3f87d679e4e87922a0eee489ec20a705e9e568dc388bcf757e70cac8d09ecc13b34cfbd387b92a08c4d8d1292f488d73a430928e4a49f7eafeab4d76b68e33aa01", "d53139ecbcd5420e03cb5a1f62a039f4613fab6145a39447d28c04ed572eb947c298e0d9527b927af004c454ed9092be4cb71da7a0f5f170107c45764c2a8a9e9b30c4583c48e7d1f54a1b1bfe2f7365faa467dbb9ff03c32cfe99284219a26e53765b32161fd856e2f8b1ebe52296add06888d17b4565e0b5d7af781156c923d4c3b1ec6c0c5f8975fda0810a06148160f6f4c12ea90581c7ca937aa1421cb7c94d66f7", "75005a3535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a2ba5a883535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a26e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936411aaccaa2f00a161189dce43a9cea795f36d9d70d3e1cdfaad5740f706f3bc685a95c0e3a9be06cf58146b3bc5fb1546d7d0e3556502e189d50862181eabedb441369121629d451605e60faa82fb2587a97364c24cffc54a5e52e827c54e449ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000344c3dd851e2ea42f02204f30463dee20c8e4ec50417a06167139b8316877a824c5b466720024622ac5259cd26bec0d05da102db22ba7095575a2ab0833c096ee80c64f88c70fa9c5a569bf63c9b21d14468486491ad016b49487ac210783ef738a473e1ce637153c37c66e2de294c34f551d3bff138f1251d2e0a7f4443f8c56f461f998bb42f4b3acc72e9e53e57f8ec81f342eb5545af3272b690b5de07643a69d446fb5445fb7c454993ad958ec703cba86021ad80fd977d224cf36b429e850602eccaa779cc00b8e901390d0a3f36f43e636d45368154c7ae46fb231fb7000000000000000000000000000000000000000000000000000000000000000028045a5222f219de8ce4ec64d59ec454de0c807af9d7cac8453ec4ba2c236bd4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbb9da65bdf156bf72fd39d7f8e5752fca9a112277c8bb84a4f0c27644715f865b557a5191e283f21ba9e21731cfae2cce5fd3871db1cab1b923c6441195a6489a1301aa0ebfabd684fa6000ff7d506040276a9f980293b4f5e1c25cabca2dc3da0e48c71b991503486333f3fb9d1d772ac0a752ba97864b4c8f30a08d1b9986cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6f7dc171b51f4e47daaf698237e670b847083a87634e77718e24b4a1464ae516fedb2e1e9eed857bc9e29f3169583d6da8d59e2ecf81763b37dc26cc9770bca31fb6945707df739a4b83934d90a1dda4122bfc99d5290237e4cf99ee4802f6aa07f773beac71a24828b1c2bcde88987adc1134896e30412787c35d1333060376aff0ea89d2fe3642e776371bed5c0828903ae0efa314eefdba81558a852d8b1363f3636a73ee0d5967e2666ae2d9417538c99a277c2f2399c9ca2da076db766399f07a4ba9b4e291ce4ebb45247e0879b10d6b0a19344e65ad4b68475184fc6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1184700b38805717162fd8eb98570728e94e1d69bf2f17a904264923904b5e23b257b4f4aa591205239b696237fb3d9a1787aa2d972c47529486b9a47b76136c6ccf73a78b3c04938de1da676befeb8c12e0346b7baad6f7781b6de83876fce1c06e304006c7f5f29425bed8b063420f0fe2bac560eeec08cc5e418e103a5d4a682425880f6f7aa6c4f19abdd0aaa24988645d00ffbb813497720be270d2fa65ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcc04f72245113b62716050c7417eb81c66dd8b1460d05627d683c3c3a50a2ee3b5ace784a5112f602ba4d0d55c8d47b9f58ff462a0a0d0f1bdb3e111bbfbc42fc85215ebb23a45fb555483827840ba84619b643c8c951ee3948f03bfa66dda1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f89a0621c6a1237d5e0083f81f775598a85a3ea54c279faaefbf20811c74ceea5d237ac4a5690206981b4ede23e91cb3e799c38126fbb04c4951bbcd72153ce4"]}}, diff --git a/txscript/data/taproot-ref/1878d0c6c90056867949699c2702dab1671a5739 b/txscript/data/taproot-ref/1878d0c6c90056867949699c2702dab1671a5739 new file mode 100644 index 0000000000..7ce1093e34 --- /dev/null +++ b/txscript/data/taproot-ref/1878d0c6c90056867949699c2702dab1671a5739 @@ -0,0 +1 @@ +{"tx": "83cc59aa02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bca010000003af476dbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc6000000006aef47a201686f3a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac94020000", "prevouts": ["5b6a1e000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "26871f0000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_81", "success": {"scriptSig": "", "witness": ["410a83dce0fc1f4b869e6ebad4e96ff5ac038efae48abdd4cd1994cb17db7fd9bac8a598e83f75fed7e9ee950253d942154f170267123240e9fa4e1a842beb9c81", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50f58c"]}, "failure": {"scriptSig": "", "witness": ["c927375cdecaaaf14e52c715c3a41f3b247660f79b6056fbedbc19d4a9bf647b1637af0ae2d7c36993b6e16338c0df4186c54449bc3ae2912851b1889c01bc6881", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50c8a20490796da18231bd891dfc9ee9fd3dd67e5b30c1a68a6cee31aaa1336563c6ca3d54708b8c2b37edfd5202d99de398f9334228717506d47758da2096d2044c83f25dc7e9130a265932f539855bc55287cd589137c651df4fb02a89d8efcb8dfeb713325eca5030f8fd265bcccf417534c9b9798622d197d365a1399abdff9b863e58d4a947646aab8a203622c4b0de25b3350549c5a7c4b10510109688e65ed8759dd8c4d93ab0abb7c5f86c136630abcfac7f01ddd48edf843ab9d39cb1ea46cee32b93334e12ac9ca566197b98deb2"]}}, diff --git a/txscript/data/taproot-ref/187dc420ad18b5fb75f0f40dcfa22e824b23bbd4 b/txscript/data/taproot-ref/187dc420ad18b5fb75f0f40dcfa22e824b23bbd4 new file mode 100644 index 0000000000..7b405070ad --- /dev/null +++ b/txscript/data/taproot-ref/187dc420ad18b5fb75f0f40dcfa22e824b23bbd4 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be301000000fb36def3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb301000000e6af33afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0c00000000754fa2b201d3161100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac7fabae57", "prevouts": ["c6bf250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b787490000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "1205240000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "167d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936394c54942360201b0e5a9c52bdb8553d3b85213f639fc7674feca5a4529f4e0b46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa654bbf7a6388e898988522fa7e5d2ba9e6951646cde29fc617f56e0c3d8e4d50afd13a3b2c4c421c5355668ae9e4eec8bcb7618363c6e35efd204a43726d22d6"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6552d9f0078438d40136d7ff6a38e228e91ae2f5adfdceb2d12241afedfa4e08719dd3b5606bc946287d150a5ecd03b0f8e892d08bbecd28ea2e3769111c28051e3355b9fad1d20bddcd1a8531bcd58c93c4d9ee4159d68db4e08ecdffbe17e"]}}, diff --git a/txscript/data/taproot-ref/18822bf70764f3c01f808cd81031bdaa811edcaa b/txscript/data/taproot-ref/18822bf70764f3c01f808cd81031bdaa811edcaa new file mode 100644 index 0000000000..3a2cba2fbd --- /dev/null +++ b/txscript/data/taproot-ref/18822bf70764f3c01f808cd81031bdaa811edcaa @@ -0,0 +1 @@ +{"tx": "cc2a29fc03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8901000000c830c9abbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff100000000746406a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9601000000bd8ec8fe0286b12d0100000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cc349424", "prevouts": ["6a2b66000000000017a91408247b8d3db4e641d0be1ff23f14280256870a5187", "2f55760000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0074530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1655142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["af342baa3fbdeba74159cdc207a6d6446da28746af0ac0b6527095a2a1df2747abdeb989e446aa880398dc744c8055cd2f37976c5b7311f4c6e1a3923216225f", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/189034044dacfcbaac5a98bbd0a33a369683d2d8 b/txscript/data/taproot-ref/189034044dacfcbaac5a98bbd0a33a369683d2d8 new file mode 100644 index 0000000000..3830f52e2b --- /dev/null +++ b/txscript/data/taproot-ref/189034044dacfcbaac5a98bbd0a33a369683d2d8 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a300000000afc78ee1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8a01000000bb1633dc0151876500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac867f065b", "prevouts": ["ddbc100000000000225120ce3551521fa9f590f4e3a432d6c546446f0d4fa78e73ac01749e3c952a57623c", "8fb85a000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902e89ef9cd6a14ce137a122e44e8f156230f0fb36a7fe792c664bf4e947afd0d0d697dc42b4471ab4b348f61a8519e7390605ae60b23b14c83a0c81e8115296ac5a9daa7733b3a0feca8343c80a0c3c55f8d113c6a90832209384961aee83e5fb322f0c412ae0e480a0e0707a55e4833d5281a6bfaea7c3a8d9b18cf36ce87fa1e76f9a5770098d2852721ceda1096a092df80654ee99377cfa92b424ce5599d0d022227cd4614fd76dbd6efd459f367214a3a2f308eee0a22a6e43c41e4660239b960204c9abe9ba77eb55dc371c7036b245a9820d0f70682a2e60dc8feb8ec9c2a0bde27353ded2adb1ce2c4644b5a013c9e428b2f4335af9efcc4599029d88c8292161d7eb7a367ec859fdf8e801e8083fcd9b15d821f023eb2bb5d01305a17d85e88d8b147012ffa1ff2582a65fed1793686d8c1b1afa8124161d33e42b897519a76fa1093abe812c7e07daf6e205bd6a41b53dd0612bbf1e860c5383ffa04fde77d9cc56ff7b817061652f8956980c8a60cb14d6d80134d0314a69a646d065f8c540b2c1c5a928f11f24eb7dc9d501e0082bcf5c77f09c27b2f0dc4e98f18c8fc9203088ed95b3ef15dccfcc0099acd050b21e95f2cadccb7506a30d01d8ecb1ad72de8513c9947a1908609df03d7509f01011b85d5f3d033203b8e0add3a1d42dca2feb1b8cad341805d8272faaf7b9f788fe592f0dae7e5ff72970453bee2e027a13736e8ab3275c0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936276d389ce3a0d147c1239f614bede42df56e685272932fdf5fddf7ce36575c5f1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004500c8753d4e6010499b58065b36892efcd9281a64e85ebf7c5dcb8f6f4baee16c3de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}, "failure": {"scriptSig": "", "witness": ["4d0902b01c77afa7c0b5bbb9b76851dd5b0c4c1291b498150c85d5e77a5760c3c53238768a50eb44fe420f0b709e8cb838731e8abacd0742575f54ef20bd961caa30534f889de0e3322cde7b11b680bb1790cdc3ea2af04982d59d205a600f9d1d9840b7a5024b903073603cdab268a22c15c0afa3a3346364622c843f653ec944cb0f0be9a87541087e0cbbdb2c3fd8ddbc0ca3cdfec638a3a2c4b7ce3c0d1c17259719b7fd78f7b60be45e8942c155728b6f17c028130029eeae1e396b4198b8ed01b16ecdda8c8440aae1795da4f24a39d60bd80fc514504bea4ab1006537aeea72a3c7fe70640c96c3544dc04ec86cce64e29e8bc31783d3dde3b50669aaa1f69140045d8403e6f20860dbb3437be037484e7e7f80c071bea3989fb569489b122a37c12dd34042b81eed66a9cf5f4ce551570c4fa0eb4df0252ec9eaee5bebc884c3450ba26cf52a27e06e9f074edc1eea8f9ad734806a1ea0ad3790abbfc6e50a0262054c73cd894b8f9e608f8e354d14d86f713a2d53e9672074471d9a271cd9fc14530b764937e144e4ec7a0480276c1f49d63cf9a968d7034f12ff75f4926d1ac2701a2eb8cdcf7134c8bf554729efd1c66bbf0a1e95ab0fd5d961386b0e12ef7813f5e9f9c62d3705cd23bccd9c150506e717ef3847316d8f6b73b11d52030d798e14177092cfc2c7f1bf6749d8241110b42bd5462a881b26a3463a1ef7c83668f9d76c9d7e0f977561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e99c9f88738a88b3aa0a4c3963e818c9517aa5d4efdacba58fe8702f7dee8816fd75cc9ac1e6f185878d252db6c7bbd874f5ae03fa9961d4f4a0208503b0750f17ad4bbf375bb62f626ec8048d4347cc1eef977780228a6d2fc47294088d561"]}}, diff --git a/txscript/data/taproot-ref/1891c772f3ce8c760b0cf1b52164fe1d2e4ce605 b/txscript/data/taproot-ref/1891c772f3ce8c760b0cf1b52164fe1d2e4ce605 new file mode 100644 index 0000000000..a1dadfd94e --- /dev/null +++ b/txscript/data/taproot-ref/1891c772f3ce8c760b0cf1b52164fe1d2e4ce605 @@ -0,0 +1 @@ +{"tx": "db2f843102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1c0200000066a63388dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1f01000000bf6ffcb001a26d3d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71019ae4b", "prevouts": ["a799760000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "62b4510000000000225120db9ddec7a132eff6af262a32a64079b83118332a0594bc0106395f5efc921419"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ff9558f81ce3a2dd7306f2c5fb453fea421a50752f6b7d85ff2868f6db9902d"]}, "failure": {"scriptSig": "", "witness": ["6a11616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/1894c4ad4a51725e14a4b3ca4124be935f442f98 b/txscript/data/taproot-ref/1894c4ad4a51725e14a4b3ca4124be935f442f98 new file mode 100644 index 0000000000..1624b4f5e3 --- /dev/null +++ b/txscript/data/taproot-ref/1894c4ad4a51725e14a4b3ca4124be935f442f98 @@ -0,0 +1 @@ +{"tx": "861c712d018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fc000000005f5df3da046a193e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acb2ca1426", "prevouts": ["23a04000000000001660142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["782efbd86b045ff3423e869c9ff729134d2e2d6d42e34893fc9b54481a272a287e205fb3b5b7bb34ba9e49ffb3340109bc34e99ed3b092d8aecdf643e6de7a31"]}}, diff --git a/txscript/data/taproot-ref/1899c6c029807a2b6fb9c8709343768c03f3405b b/txscript/data/taproot-ref/1899c6c029807a2b6fb9c8709343768c03f3405b new file mode 100644 index 0000000000..4b343aed22 --- /dev/null +++ b/txscript/data/taproot-ref/1899c6c029807a2b6fb9c8709343768c03f3405b @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc9010000008569c1c7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b05010000000d6c2cfa0347939200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc5000000", "prevouts": ["5b906d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d95e270000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e3", "final": true, "success": {"scriptSig": "", "witness": ["7132d2bf84d4c67ce4b2b563bbeb1047587933e3d039c6fce4c818c47f967e8d4fffa2803b3b989fb1e8ba8e6499a92cb8944ffa0facf983d1fb0bd7a3408a0302", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["69c2e1924b1024f6abd8959b5bd5ec07801f72f9f880c60cf36d8c841d967b2fd8dcf8e6f4df839bebe8b1620915a04ec5b60674a1bf2c783ac8dbdad2ec303ce3", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/18ae04d1c49da35415f8e30e1757321ada62e83c b/txscript/data/taproot-ref/18ae04d1c49da35415f8e30e1757321ada62e83c new file mode 100644 index 0000000000..c5e1dc4929 --- /dev/null +++ b/txscript/data/taproot-ref/18ae04d1c49da35415f8e30e1757321ada62e83c @@ -0,0 +1 @@ +{"tx": "e0ed141303dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b93000000001fcf05f6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7a0100000091bd69b9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc8000000009a4857d5047746c200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487bf000000", "prevouts": ["bec22800000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989", "73802000000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "8c967a00000000002251208560e60ff9f5f50e17abe0faa94b8704db3bcecc7cb6f74a11a752b4bbc814f5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["fa4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6765b3a9293f3bfd6c3b684051ad5b8ba6e731c254b25e3cb8e354d60cbb2971a4e7a29e9a68a1d6e5ccf500c3bde1b862f2704e441e939992f2bf5a528056a3bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}, "failure": {"scriptSig": "", "witness": ["4c52fa", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08226ad4257a22b62302a767a5b8896008d1af7055b6fcc30f1a04cbcad06de5cf2f8b8afd7beb88d43ca6c6d2d58dc9425172bd95ccf582b2eeeba83616a9d27d33bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}}, diff --git a/txscript/data/taproot-ref/18cd769c18f505e8bc05856ed71e114b5bd9a022 b/txscript/data/taproot-ref/18cd769c18f505e8bc05856ed71e114b5bd9a022 new file mode 100644 index 0000000000..77e100191b --- /dev/null +++ b/txscript/data/taproot-ref/18cd769c18f505e8bc05856ed71e114b5bd9a022 @@ -0,0 +1 @@ +{"tx": "8a55f3a20260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127021000000004a3d07fb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40e01000000ff9e6bf701948e070000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7fb010000", "prevouts": ["7a301000000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "1e2442000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "e67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d518f5fcc4dcd317f656293c43c0e8e59e06b99ff36e809cba7caf0d79972dd48256d6f90d235a6ba3188b640209fb1b87a6d8106344fff793e748ee999a397d93d03784866e2fdd94d7d1b7c12b1f0da96746c05c19b8696f0ac6a701ba8135"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee92d7728fe824bb86fbd19678fc348031552299afe2faac0cf612835804e2a859ea19512c809756aa5c58e4cd3562935caab0c2ca4eda8db33914ce4decb3cfe9d11a7792f25f0da70e8485da42647201d1062d1bd001b767f1b05dec6877400"]}}, diff --git a/txscript/data/taproot-ref/19056ae532d1819a4355eff6310ab655a5030df5 b/txscript/data/taproot-ref/19056ae532d1819a4355eff6310ab655a5030df5 new file mode 100644 index 0000000000..3ffb9d5167 --- /dev/null +++ b/txscript/data/taproot-ref/19056ae532d1819a4355eff6310ab655a5030df5 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfc01000000e1fb988b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4080000000022028f9adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bea01000000a94b1fb4012f9338000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748777000000", "prevouts": ["30532100000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "b5243b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9a341f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_fb", "final": true, "success": {"scriptSig": "", "witness": ["a98fb395b3493eb836bf41a5bd15b15209c6528c74263544e6dc96725d7a28e1c7073a7c1a6a9d9ed2651cb1f2b5c7b9712769b98bdfa4efb2162bf9fd3d6adb81"]}, "failure": {"scriptSig": "", "witness": ["88b69aaef809e7d03af8417a443da1bf0f7d36da0ae334b0d1b5ab96d960d3fcbcd630dbb9ab3ac6788a73002f8c5a40c64356a9154f83a07c3dbefb07e0d41cfa"]}}, diff --git a/txscript/data/taproot-ref/190cfc23dd00d10a83315e6bc368d40445cd322f b/txscript/data/taproot-ref/190cfc23dd00d10a83315e6bc368d40445cd322f new file mode 100644 index 0000000000..e531d9ae9d --- /dev/null +++ b/txscript/data/taproot-ref/190cfc23dd00d10a83315e6bc368d40445cd322f @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf81010000007d91abc060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700400000000377d028060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270550100000075c420dc03d8f996000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876c030000", "prevouts": ["daf6740000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "cd0112000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47", "923912000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09028598895956c3c54d60141d7dccd3ece136a9ae92e7de806483a046ec5e34a65d7fd4877d911c0a50224968dbcc146ac94bacdbe51c9b3a7dcbe60eb8cc167df34d4dd397489a39ac5c97ea7af8c1225cc8b2653926d9c1fd285d498d62fd162b8c59de799db2895b669387dbfee379a1209b1984b7596b30f05498b9bb919fac74acbf96a1a2ea5709cabf24c0e60a289e62a824c7a5aab185ca8a28a8706ca2b26237be1bc60e08d1d11d299e800c971ed2ee84f4867e7f9fa64afbdd1a4eeb3ca60b1c5e6fc9eb790c541f494938d512ba82982d4d52b70d02bc039ca381afb245f90148055275b38158ec782c20bd308f1dd35b4a3a2826c2daf93e9726ecfe43b13e4c67ecf8a129dfb73d1b94bcbeca814e579540af62b78627c06ce53aa6fe82b4e10b640193214ccbb63f2d3399884216e1cf3164d4e06962f26e279d05f7e91a13d3d5a7d0aead0c0741be2779a2b7f04e403c17572e56721877d58676133a5169b4b6f8b450d22d77566a6d0803f42541ee336606b9c09aceb61b85e001c979ce04470415900db581b190f0f772c500964d7b6b4460db86430dbc3f5bcf69ac09a50dbb03c7be7db156e32bbc4cbef91148fc0a0efb5ac44abffb400aa1afbcf0235208347deb7205e40dbcbdcdeacb0520531ed6c6e96348b641df1252b29e3ab1055a94de18d2da7b8023e4961b0d913857410f2d91d5559c2cd5d46520acb2c30d4a6c75d1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e2640f3481b4b8be81ba7985476c68570d9a370e915b621c48db5cd673c6aa535c55ad82284641cab824687b45d4293ada5fb8cbfc4ac19bcb5188e4cd0a7708cf37d2bf9ac9d65f4f9542d60f6497573c04b4d7313f44a5c611386102890a1c"]}, "failure": {"scriptSig": "", "witness": ["4d09024e585a70f6e68623563a521d3ab6d70962de4d06af5ae6286b424445e12893c78ab47c79061d477e81483f9868d4b19902c6af29bb24f8ed5fa6472812109e5c5864796d7e384064a8385264d27c4264fc974cb1ba069899917903c5b6a0d13380042c8af67b33f897a141c6a1edb55701e4d043383f844503bf003d2613c6ec35467b64579c80e51550306db99f472c9613b613aa374cdd7702f49d45ba89dee8a87d6629e4ef7193bf9cc9bcda479effa6426c14dd013a04188fb73c589c9190113d9188da7697b8290b27850f64a3bfc3e18afb14804c69280a3a0f384712279a5ae70bf59fcf17f47e31292632676c9daa3e985917adcdf7ae096398e2782d0a4370c9451a421b192ae396bed9e1c01b1e82eba6624337316c5fa35a955b0b0be26755cb8d76a3076c9ab235a2729324c658f42a3ed1a81b5263ef058800d48843469ebe01658e24b75353e695d79386994b540eb5e3777acd10fecb066b946ce01d4960215f029fc2f5bf320731144c1aeef2ab2d0e53f5e169686f399dfd1947dab539a0664c291d6876d8cce162fe1c5f908ce4954dfe336ee45f80321687aeb9a947ab8ed79fbf91bfd38c60b553dac29401a510e8869df0a9376764699ad7072b4f52c92977044210ae44f2b2eb928611c6187e1b04d595b19f187b4bdce2ecffd6dedd1fbb649a3a89b87522ebfff3df6aef88c74bb80909946eed489c7c7aa8bc3cc0ca7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5172402ee5f7d01023de35bf8c020790747879409f1771ca1b4a9af174b095ec7ee5aa467dfe2257bccb94fb5bf6723e840de90a3890266560a9e3d72c84089f55cf37d2bf9ac9d65f4f9542d60f6497573c04b4d7313f44a5c611386102890a1c"]}}, diff --git a/txscript/data/taproot-ref/190dca39f195f8973c60e414fa6fa6aacd3d9290 b/txscript/data/taproot-ref/190dca39f195f8973c60e414fa6fa6aacd3d9290 new file mode 100644 index 0000000000..cde8bd0028 --- /dev/null +++ b/txscript/data/taproot-ref/190dca39f195f8973c60e414fa6fa6aacd3d9290 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ed0000000047b48efbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf38010000006d3fa388017bcc44000000000017a914719f78084af863e000acd618ba76df97972236898720010000", "prevouts": ["ee9241000000000017a914a4e57198280c195671631f8b9014214c2f083b3c87", "da80710000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e148eb929e36bf5d0ae927afe6ca96e40c19e477115e42779571d6d91d45ed5d842c4c20f1fedac94edf4ee37dcf580edabb0aa4839378386ec3447d53f529f2ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936724f9d0df23615753016e7eb8d62571c0b8a17dd151f7df09f79bc44b2e134251de3578bd50e4aef3f42172206e28aaa53f32c3941b8b4ddcf806814652917426187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}}, diff --git a/txscript/data/taproot-ref/191602968fa2af7edef6e40a0c4e4b9e4ef4cd75 b/txscript/data/taproot-ref/191602968fa2af7edef6e40a0c4e4b9e4ef4cd75 new file mode 100644 index 0000000000..80c4c5afdf --- /dev/null +++ b/txscript/data/taproot-ref/191602968fa2af7edef6e40a0c4e4b9e4ef4cd75 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6401000000c77854c802ab2882000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7e82ebc5d", "prevouts": ["d461840000000000225120d88cb7f53f02fa1c481625f74693a34411b6fbcd1738e3c4eddc22f3e1da8f8b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936276cdcf8aa7f00f9cb895dc6486b366e3db7f84b06171b90b5a70246671bc599"]}, "failure": {"scriptSig": "", "witness": ["6a48616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/194da7e8add6b9a1ecf41a75f040b4611f016a09 b/txscript/data/taproot-ref/194da7e8add6b9a1ecf41a75f040b4611f016a09 new file mode 100644 index 0000000000..d2153823b7 --- /dev/null +++ b/txscript/data/taproot-ref/194da7e8add6b9a1ecf41a75f040b4611f016a09 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a101000000803b90c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b990100000075a93d6802b1c933000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc772010000", "prevouts": ["139c1100000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "5f092400000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09028648441159ad2b9d233f800939add1a514c20ed91caa7d2e987b386d685e1d731b58440102d73d177d22f69af5cedb0c49176ceb18d6cf779c1791a5356643889976479b3f3c1c5ed6c0961d6e45617e1a5df3fc53f4ea77bc230facf738c0674f96c5190d6e8cef9371621cb7c4ce9655b947b129caba27823efaa16e54b2c9fda2dee8dd1e168c3fb1a71430207b808b2d987ff11a7bb1eb7aa232887be85514f5742376ac568d7081339fc11fb4756aa3f0d09cd3ca4c6bdbd075b11ac307d49ce466991a48d73cbb7bd03ab1a6f6f6c0e443c7d45c28b6853595f95f9a96113f600e4696ccd06f73e49f563ef52150c7097fc3dcb09164707ae72cfb212ef2a5ede2992dc7fec07184cfa207b3abe85efc42350540a9e0e1f5a0357705e204e188b2cfd081eb9dad8338c823cc5a6de4ea06c79235feb3502e97d463fd2bc558f78c4b9338e537ccb3b4991b809f1b07c3e6017ef9d5f4111e765bc8ec4a8ce81078f71dc56afabf8f6152034824d09c621bcc60c9e4fa2762cb67486e7d149e357d6eaf7a3efdfce693548b3348d318db5c541e0a5d8b546bad75c15334c5f00e89e15f899002fbc5818a9309dea1d7f0db786cab72b6da3bc3139e0135cf7b726f76ef0bdff0d74a4d4ce9ca29669feb3eadf3f7cef5fe7396b0afc3230b9091e235da3a9118008f4a96c11f39851d5a477cffecbfdddbab8f542ab7d8ea787880c52e6b4fb675", "737d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820f3ec5aec6a85c1ca54f3417a27e00c281f3765ee450a46261b59de169989c9a702c501a2f323d94577f3c4b353be8e702d3f9991edd341efb02c3132264010bb33a63f37675deadbbcd666ca6b38ad7090050f3dcc6bba45985e955ec185c53"]}, "failure": {"scriptSig": "", "witness": ["4d0902f8efa2bec798ba64b03a5a73e1ee4e926bf8834987fb701b1bc07641eb1d04ef82a3c3570314e1c487e3eaf7b61b9f5d1e54f66bb2f64071a4f81bffe22ecf61f3f4ad28ed5f3b19b8b5fa19149e35bfff473490f5a2ff09837295014e3b5992155349b58f6ae6ab9a3af1900e52295358d36f12e5f9b56c8dfa5b240ef0ad8a9103962c35efacbeddd5b0ff277c1f2090177411a5906c1f3831782c9a9da9f731f43f6955a8401de9fa99e1c10e6c2fa0dc1954dd6ccf16eb5d6f3fc841d9765d116462af996cc93a11f0428d4bb7fcdb283545cea5b671243313d97bf972cde25871fc92c077407e977135a83531cf74b26615fd61f6c82b1ddc3b16b0ab3309e20bfff864e24e38d1fda3c251233990a5379e82c6b9a48e3b97a2f0bc0262697979971378a5a83708db3ff1cbcec8d6d39a4068510eb7266d9a23a97a1b66e131127191691a2a81008d71ba85351e8cc6656a41d3033dda07e9c51b8641b047bdf8901a31b13211fa4a142f54d6c9ba7c1862ad8d7ace338e8a6a9a8640701cc50deacf8a62ca1d4ec9f096d8abffc79169cf7ddf4c733b93488de08dce3bc7e5c30ab1312d89eef609c3f5d037a0f3b0d14eb0cdf2352d490724c7846ad55856d161afe93de2b67ea373f02daec657ae20704960b9c1e5f6293961892567257f93007cf8085c87c7b092e1e093b3f994d31fc1772384e0439101a9a50842c10e4d1853d3ebadfb75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936349dae1e17845f77bdf4fa0e5359f29aefe32d3d88495b84e8b0fa7ed04ef515be4f7cbc7087a9eecd21f8f9de83a71ce09520dfa28ecbf12e6edbc22e0d0c39a8cadcf9bcd23f9249fd09eb8b2b9ca63044a0ccef58f4cae9402f6ead4c2071"]}}, diff --git a/txscript/data/taproot-ref/1969e36c75fe223b6de50a2e92c6ce56dd4915a3 b/txscript/data/taproot-ref/1969e36c75fe223b6de50a2e92c6ce56dd4915a3 new file mode 100644 index 0000000000..fb87e2a509 --- /dev/null +++ b/txscript/data/taproot-ref/1969e36c75fe223b6de50a2e92c6ce56dd4915a3 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1402000000d73d2e948bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4200200000097ebd4f30302dd930000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ad30a625", "prevouts": ["a81f570000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "e9523f000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "1d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dd31519ef42d9a07de8d84f40740dcd35a5a7ec542cf980ef798e38719a42baac92cd4ecb05acffc69b3cce67f0fe15bd50aa9f87096dacf733b4583e5e3d147ea37f54c31b0dcd6e392a972a33f542af4c40de53091de86bbd5587895c52a53"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368c90fc6b4e29557b0ab9f594980af38df75bea42e763db152d9bd27c49e84296422ef55f7568e8dc283b8fa041d75ce76b297151a0e1c7ebf12f48a20b112ecb6879334807fc224780ba3e72651a115d27f4d0acc1c4b651ff2820865c4364ddea37f54c31b0dcd6e392a972a33f542af4c40de53091de86bbd5587895c52a53"]}}, diff --git a/txscript/data/taproot-ref/1970570c77db050bc51d853165e59487dd05c1a7 b/txscript/data/taproot-ref/1970570c77db050bc51d853165e59487dd05c1a7 new file mode 100644 index 0000000000..1a466951ab --- /dev/null +++ b/txscript/data/taproot-ref/1970570c77db050bc51d853165e59487dd05c1a7 @@ -0,0 +1 @@ +{"tx": "b940699f0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706e00000000caa6f69504ef1c1000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388accd7d3e34", "prevouts": ["b6ba120000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c94c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900453bd2bf476d5c79b80d1dc385df1320868058b4af6871225604d123c25805c1374cc0fc2e3b1a564cf058e89401e888e3d8222f635de2bcbc595bfcbb872403dfb24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}, "failure": {"scriptSig": "", "witness": ["4c52c9", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369456184d2f43385344915638f6d037a1adead7f216e201cdee489bfb57cf83ac4cc0fc2e3b1a564cf058e89401e888e3d8222f635de2bcbc595bfcbb872403dfb24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}}, diff --git a/txscript/data/taproot-ref/197071c336e5f96eeccaa2d253d5c00e0ac7febc b/txscript/data/taproot-ref/197071c336e5f96eeccaa2d253d5c00e0ac7febc new file mode 100644 index 0000000000..a4849b2ca5 --- /dev/null +++ b/txscript/data/taproot-ref/197071c336e5f96eeccaa2d253d5c00e0ac7febc @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45301000000f58a3dee8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44100000000b63cad77dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bef0100000079a1743d0344399800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df979722368987ea000000", "prevouts": ["8b783e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "624c37000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "3919240000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d84c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93602817a41c51ca033292e6ad0865adf1b315ae27488bc31b0f8fb3dd6e91881b7d7b73fe79aa50781a03db77b9e22252058e372f5a0275feae864cfaf4c2a217ec513aca5799d408eee0c275015e54cf6f255f9c56741048ad8672ad33d4825d8e26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93676a870c8d6d66d1892dece22bb0edd2c674ad3f2fe5a056bace5d4c57bd527fd06f18ba19de64c771db55f5af06ee3412ffaea1fa921290752d742eff6a1e67f7007ac6d9f1365651a4d55e6df0dcb109d268cc6c386b355a4997173bc95c886"]}}, diff --git a/txscript/data/taproot-ref/197a3fa4a03436efcb2a86e1f8cbb45de1371615 b/txscript/data/taproot-ref/197a3fa4a03436efcb2a86e1f8cbb45de1371615 new file mode 100644 index 0000000000..041446560b --- /dev/null +++ b/txscript/data/taproot-ref/197a3fa4a03436efcb2a86e1f8cbb45de1371615 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2a01000000f6816db38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c467000000004c8c3ed5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa300000000092b0a9b015b3c530000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7962ad43c56", "prevouts": ["4e8f5e00000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "562e3e00000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "81d36500000000002251206ee7f50dd8b37aeb440050df10921bea288340730b764e02d5c3920c65efa447"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93600d8a7d3ba54fbb1fccfd13258af4c0990ddaba061aa27cca5baff13fc191a16"]}, "failure": {"scriptSig": "", "witness": ["6aa0616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/19928329d12601dfd9c4a12541e9799fefb5439e b/txscript/data/taproot-ref/19928329d12601dfd9c4a12541e9799fefb5439e new file mode 100644 index 0000000000..29eb76aa9f --- /dev/null +++ b/txscript/data/taproot-ref/19928329d12601dfd9c4a12541e9799fefb5439e @@ -0,0 +1 @@ +{"tx": "0572398202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b01020000000b604692dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcb00000000fbc4aeb20342553b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7fc57fd5c", "prevouts": ["c5281f0000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "26c71e00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "f87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac319c7218672eb959ddbc260878b465d5507ea31f17efd143d8fbc0323ae2c89a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e5422b6de6500db2bf907e4c5314ebb405475f57406f25afe5ac62a92a9e6c58b"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa9b3730ae0e9b8e06af6fa3903dd842ff49b91f4387036eb6432f756cbb46a1de5422b6de6500db2bf907e4c5314ebb405475f57406f25afe5ac62a92a9e6c58b"]}}, diff --git a/txscript/data/taproot-ref/19a982b7ff350572fab07d8c7397bd3e8f2cc04b b/txscript/data/taproot-ref/19a982b7ff350572fab07d8c7397bd3e8f2cc04b new file mode 100644 index 0000000000..395d25b59b --- /dev/null +++ b/txscript/data/taproot-ref/19a982b7ff350572fab07d8c7397bd3e8f2cc04b @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1f0100000024be6dac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708101000000ce3435b90165bf2400000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4f45d043", "prevouts": ["f8be21000000000017a9141582f8bc3490e924b143f387e99eced40303eaed87", "53cf10000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2355212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["39c95c28eef2d86ff7f805a2e33b30e4b9f33c8c4109928d9a3ac762aad41698a79804c1f7bf30b80dea6d323e1a673df445e3797ec0186de2c1c550eef58e3d"]}}, diff --git a/txscript/data/taproot-ref/19b94494f911d6c8dffa42a0570e686d8d385d0e b/txscript/data/taproot-ref/19b94494f911d6c8dffa42a0570e686d8d385d0e new file mode 100644 index 0000000000..d25218a771 --- /dev/null +++ b/txscript/data/taproot-ref/19b94494f911d6c8dffa42a0570e686d8d385d0e @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4c00000000274f8de6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdf01000000f39357ce027462a30000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e718a8883b", "prevouts": ["c63d4b0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "7dc45a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c3", "final": true, "success": {"scriptSig": "", "witness": ["c1db5d29b3f8836f14c4e1bc3d0c1622dc9224e69e259628e048e23338b334879f8c549e4afa5134d71135b32178095dc092369d1573aca294815119234e7eff83"]}, "failure": {"scriptSig": "", "witness": ["29682f6d3d2cfb2d0ef2a264d5b95c3751b14f71a85f980f49a3ff199d52927a34ec170f44e72cc36a16246d37edc0939f1c1263a63e5b122fa94b7eddfdf41bc3"]}}, diff --git a/txscript/data/taproot-ref/19ce749d29e4620af1b8364a70b233842f7e9d56 b/txscript/data/taproot-ref/19ce749d29e4620af1b8364a70b233842f7e9d56 new file mode 100644 index 0000000000..6851ae6d5a --- /dev/null +++ b/txscript/data/taproot-ref/19ce749d29e4620af1b8364a70b233842f7e9d56 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41d00000000c6f337eebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1f0000000004cc6ffa02a323b300000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987074dfa5f", "prevouts": ["ec8d3f00000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "768e7600000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["7e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e19aed6a34821d65edf69e9d12354a87f406d02be059705f92363392a057792142e401215e29d5d13de3b6ed62165bc3378402ce71158bd1208562fc299f33fc22fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a0d0ac5788f723aceb0a237bb228183ae381a676877b38e9861fc4f2162de386b9b4175db22b4058fbb32c1c98b401bd6f80a734567664ffaf4b869d5cecb8c8be9bce0da1a8e0eb2f55600b1edecb05394963f1d059e6505f0ccee9d28b62f6faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}}, diff --git a/txscript/data/taproot-ref/1a199a3cd2f3a67e25e36bd4711b535ae3d24e31 b/txscript/data/taproot-ref/1a199a3cd2f3a67e25e36bd4711b535ae3d24e31 new file mode 100644 index 0000000000..32bf96a299 --- /dev/null +++ b/txscript/data/taproot-ref/1a199a3cd2f3a67e25e36bd4711b535ae3d24e31 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c200200000056d3cc57dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf501000000a74f649460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270020200000040bd4f300326debf000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac82010000", "prevouts": ["1dfc5f000000000017a91480e36171416c0f598c1c20ba17ab3a3cf10a438e87", "34075000000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "95c61200000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c868", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb470901b40dea8c7a5ffa56ebe32dcbb2bdc70f6165f45007f6a309c26f1d76d473959a095ba405700a8bdcb88c47f737d45523ad768f5b3698c80add34f2e764b"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367895634d85db6d6be3323c51ec5b22c423c1332565debeb0f270092a59401143da069eb8d814e8e6c846f6346fa512368611d0ddd5fc662af48af9436c51fa006032c3262f8d7c29daaf8f9846bf0ed9dbcc4a0f9aeeb7c8ab8b4ceb985f45a6c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}}, diff --git a/txscript/data/taproot-ref/1a3a8c18a8e82421d33989ed4d05f5485999b0db b/txscript/data/taproot-ref/1a3a8c18a8e82421d33989ed4d05f5485999b0db new file mode 100644 index 0000000000..afb3cd14d2 --- /dev/null +++ b/txscript/data/taproot-ref/1a3a8c18a8e82421d33989ed4d05f5485999b0db @@ -0,0 +1 @@ +{"tx": "5ba8d15b028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b100000000a28f43ffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4301000000f4d3acf404f3d25800000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87e490d753", "prevouts": ["4153340000000000225120dc3b17a9e97101dd89a6713513f87d72e341f4413af90c87ebb03089172b5d03", "e38a27000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367e327090cd1d58a7bb1c01ec2add8b9e55662aa07a105e387969c68210862490"]}, "failure": {"scriptSig": "", "witness": ["6a68616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/1a83bda864530d8086caf59fe1272ad5768d34c7 b/txscript/data/taproot-ref/1a83bda864530d8086caf59fe1272ad5768d34c7 new file mode 100644 index 0000000000..10f6c6c24c --- /dev/null +++ b/txscript/data/taproot-ref/1a83bda864530d8086caf59fe1272ad5768d34c7 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c496000000000fcc65bbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfef010000009a2231fa0450179e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870d661d36", "prevouts": ["4a9e3b000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "4982650000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "4730440220551b4fac1e931eb4709bd1c9ca34de6fb6d354f2ec95f9b5ef3f19c6f20ad5b50220408f74615a963ab5cca0811ceed7b591b242d5f6c2b7706b363b88e2d2c8b36082", "witness": []}, "failure": {"scriptSig": "47304402203266799c0aebd4129cfc3391cdf081f407db3cf6c5ae353980cd281c1260041f02200a82cd1c0863b4a2e66029e3418e566a916d04ea0c87c504d1356a72bbf958cd82", "witness": []}}, diff --git a/txscript/data/taproot-ref/1a9368b5d21e42219df4751485b7f522507fdefa b/txscript/data/taproot-ref/1a9368b5d21e42219df4751485b7f522507fdefa new file mode 100644 index 0000000000..b4e7b51baa --- /dev/null +++ b/txscript/data/taproot-ref/1a9368b5d21e42219df4751485b7f522507fdefa @@ -0,0 +1 @@ +{"tx": "73092d65038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46c000000004658eea8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa401000000a7b39fe5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c450100000060837bf002397b12010000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a60fdfb23c", "prevouts": ["afe43a0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "7ec5840000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee20550000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_6c", "final": true, "success": {"scriptSig": "", "witness": ["e857d2f90a5bc7133586841afde07b1a8a3a411030decc4660825e63f7bdba2ffbe49542633f455dd76988ed20b444f8fc57752c36a192f59b5d41ac601bb60681", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ddf64ec469cf84face0bced4771ee35e04faf554c70568f2de03eb420512c85d2e63950c2e2eb0d7a6bf730c367908d900afb6b3a94fccf5d131cae1f7d985926c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/1ab6d3c20509931b1abf61a6b45d8069679b66fe b/txscript/data/taproot-ref/1ab6d3c20509931b1abf61a6b45d8069679b66fe new file mode 100644 index 0000000000..1c3208db6d --- /dev/null +++ b/txscript/data/taproot-ref/1ab6d3c20509931b1abf61a6b45d8069679b66fe @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708300000000a2259fc7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8100000000c6f72fe102884f91000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c8010000", "prevouts": ["1fea110000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6", "6e5c82000000000017a914927d550e2674fb9e1f6ae1260d00989fc596dd7f87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090274fa3d8b77f1bffd12d3bbf2b314c93c392949ea529f39c5e3c345c5ff1112b6dfff2435d46796fc34bbdb9748d6736c775b452b064088344aabdea0cec8220b3764b5e34edb61e8405fcad227877826186b0f73ed74abc7405251b6d62ccd0ed2879c1b5aa1d93a3746b70ee16ab3bcab6442e45b3737d2220b4b2a5527573e1fa70d3cd4f839af1c54bd1f315a2e73ea46d58fbcd75ede8678b6fcb2131e036c8dd6c3f17268e6e23701026672e35d450313a4f00f0e6426683b345211bbdae5d4049b90b52eacd11729b6f977029129657df3b1af967d3330d782834afd8ffb8d4ed35f3ab33a8a606a2c3e6369546d25c83523ebc19a8ea2b53375d5d46f5bd51aff5f7de980568a079e8e461bea7f561c8ab39327e32c6405e851a8f525de98119126d2370eeabe7cc093ae031c60b16c86869916be9ffb2b27bd565f73468d134b358fc7717c32777fa07652d585fa096bae11c0121fa1a5ced8339b0c094f605740b0f7090b3af7bb4b4f96e4ef01aefda18ef330b370f32b2323b752df75923f2dfd9759798a9750a0502df4bf8953baf334d862edbfa492de1913dd126f9ed89f82d7b40e0ca3e4acd3ebb779247e8ce4fe06ae94c3a556110605cded8dc3506ca1bb98d7ca853856189069e6d1d818dc3cfd8bd18ba08fe8b7b9c9cdbb05bd9ae2c3e77de0e9a6b311e0175dc92631ae429c457e580463836ffe9e2ec233477aae46085d75", "2f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faa9cca9c712bd5dbc651b74ba1f32b079db60a81520e454f56bdbd9ff2bb730ac4a68514c5be2766b31ac79cb27b74c816d51537da76cf4fa244470107a7172f8ed6bb91bf977e9e370b444e9d5512cd4ec7f3694a9311c01272a4c1a167cd930"]}, "failure": {"scriptSig": "", "witness": ["4d09021511def2d2d06019a62a38430800e7d0b9c29ab11904b26a197189f78c6a7e53c20b713823cee88abc75c1b34db860499af0cf4954de25cccdee355137e49030c67bcbc204bfabafb47b93c03a353f3e0fe516b5e28386149ef94f0bb8051dcb31d6614a94f5227592cc93756115cb908152ebb46dfa9f80796f344908a760fca9995210b89ddb932c11569d3d509abcf7bec4ee2c224267d82a768837b9a559c2c13ee9e83a088d5547f50970cac6029c0b52970c6602e17b5483a6399d0c0ecfc3fab1bd43b5c1084bc8503e403b43dd70533d2b055b85ea3b51c3da0d6d958c0ea6438095e66200a0692c8586da0db6b084933f2388e8d0693521b957da46646acf53f917bd1376bb7585bd3893e5b6262b002483122892c53dfb5c59f5141d6811cc913b6f38df2380a81978785149d036dec7612602c4bb6a29937d1d21d13c161fd1a5a1036272834f9b89cea5a912b9978a848288f6d4d72f0e488a3e8063589e3f4eb49369c72b62a42742ffdb440cd12591ea2164684e2d91c5a9922ea55b156a0acce65905032a2b0dff9d8c495347eec48bbb08cb6b066e8de6e51febbc34bfbc923a5a73857d59d1392f492217faa9561b3b883068cf13b80468b5318dff5ba2266680746f499f4be31e07d43813462b9ce55f09aec147354c53ca7b47b5c421ec1e2b83982ecc6b73f1c96122e9ea2a52dda230b4bcf9c2a088c7d4e23fc553304d0e75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369dff55cf6ae51df43fe52c7d0d4fdbe30fa92730d4eceb3c6abd9d09fcc7ef40d8fcf0fa02e125fe1892f3caadd01fd66f2ae3104b90b9e35e4c43083bce335e4e9031d393e93ec4f3e9da8fc51e83b82f31256dd96ef4af94581a47eb5c67bc"]}}, diff --git a/txscript/data/taproot-ref/1af45f5f9b4d38fa9b4e939f3e3622bcdf2d29d6 b/txscript/data/taproot-ref/1af45f5f9b4d38fa9b4e939f3e3622bcdf2d29d6 new file mode 100644 index 0000000000..cabb17b0cc --- /dev/null +++ b/txscript/data/taproot-ref/1af45f5f9b4d38fa9b4e939f3e3622bcdf2d29d6 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6900000000d4abccebbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb700000000bd7983dd023b8a89000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47874aafe95d", "prevouts": ["0bac2800000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428", "09de63000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "5a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936648f7288da451c6edcb2ab904ab412d7719851ebe4c732831d3fb8a1e081c682db79ef349d3e4f05529a42271c6cf93f8e06fd8991a688edddf7288612a03eef8b5457f6f65490151d40d3d05d55f9c92d8dec73c7aa55a79aa7c51354918829c531ca70e78518003474f611c07657b0808402a053b744a80e6cf25146bdf24b"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367960d7b37dd1361aee34510e77acb4d27ddca17648a17e28475032538c1eb500da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb4949da8d2968254411aebae49708200d0b19b59a844616925b107b397a8b89bee9c212f1ab0dfa1a42522b9ca3467b009d36f3b841f39cdc4da4a0520ce4fa4"]}}, diff --git a/txscript/data/taproot-ref/1afbe3f769c38b8e8b6210ef4c1e57bc6cfd7f8d b/txscript/data/taproot-ref/1afbe3f769c38b8e8b6210ef4c1e57bc6cfd7f8d new file mode 100644 index 0000000000..5af698c92a --- /dev/null +++ b/txscript/data/taproot-ref/1afbe3f769c38b8e8b6210ef4c1e57bc6cfd7f8d @@ -0,0 +1 @@ +{"tx": "7b8f2880028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46300000000896a89f660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c3000000008f1288ee01e55143000000000017a914719f78084af863e000acd618ba76df97972236898700000000", "prevouts": ["2c12410000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "797d0f0000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d5012e137fad837f2a561bcd1c9c1f808d9fbccd84ec6909847f68cc5e99fd83680ad4b39187ba2201bd43281cb490806f8c92f3a923381fbf08f71aacda6b45a8d82ce18bd234c1584c4c622342218adb669c8aa790fa32167112ba5ab09537f29ca2a45ef7c036783e7f019aef8c33828dfc20d8195f846b202f5060bd6054c5e9d880afa10b507a611a7cecba0751355e204d7d64cdc65781a30fb764faf16916952ba4bce2ff36064afed8298aede0bfa088d5cd87b98bd86e0d202351a708c54794ccb84200dd55c18b7917646b7f907583615335daf060c73e014afbcd85269a32091ca1a0e619f6cb46502b0617eb208183082b6d5eadd4338e4b10dbb97d8cc4aefd2bbff4ac5774aa7982bc9c37e7f08e57211b2703c97bb67d987aa84ab88925ee8582ab7c5b84ad64822574e5eab73dbea6612084108aad55bf4bed6d6aa2b9e066146b19db11511d4ad8ae5515bddc907180c169281dbc52835b6456a98e3de1086bb652e5971f79fa145d699f0d3f075f058767839d4bc421ea4bff2666e4184e2ba3b40841d4d84ef7df51a9df4d23a49c5c067c7b5ad797adc191b33a6991643a5484210c304c9a55f50151dc5816624ea9a8a448bca698b23c50db5b86b03db533335bf6d0647eae4c039e05f016cc8805dfa15fd010ed2e5f65c5f9ea1e732051d65371f5df0cfe5590cd124d77011f963477e438344a6835e0693fb3d083133775ee", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361e1b8a1feee59cf22177304d96071e13d70dea9b08ecfc21a58c9f3d5fdb3c7559932febacadcdac9e119439ee6db08dc69c3a75ae91b384d859ac01e20a421c0028cdc19f89baf6c362287c7c7841c4536091540a9bd978c440258b5fe7844c439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}, "failure": {"scriptSig": "", "witness": ["4d0902ba928d55b192a89bed5e70305a953fb31aed39dbda4d92b7501ca560e75875af4bc1f1cad845cf132d229040f255300d2d92e14e3baf0ca7261028b28525afe557310a4513d6c035826c20ec28ca25d69ffa1fd69324d4f053f46569665001d152a86f5c779661d2e74ca20fb6e60a619dafc445b735fa1c209fdb999454b255e7338a078bd425f1a6523435b24b9d50a0aa221f873dce6e8454ce85e7a4c7c4a92f4dc2ada819992e0f98779276a4b4b18905de8c0ecefa5f445f95814da46bd30037eb8f3ea3e78d8e9da0c92b63198f7826e92c90fa61d7a1d35a87e720d7997cb9b4ed894e84aebd87e54082fb470c490f2bb353a4aa926a15e076e29dcbc8da4a63d5078659ad263302326525911d848b77ad4d35a0c0bc025f37fc5c40b2c06786c14c1682dbe8cff62d3b7b5543e21bb1ba2bf1ac089e1c37fa443d282576ab7b9d37aab9b2161b7491a07923b254494da284488e5302406f7be9ba60234d3c6eccf289416dbdf2cdf17410edcdb2234ba003a985d992ee9e00069bbd1b93fd5fa1b44208d6af7067bf5666e4a570d1b0ac682a5972c84111619a307622e8b2d38e24d42548d3cd47f53b553e62a46efbf4dcd30317c65b834f5ae6474bbe4945a3a66ac34fa4c628bf983ec8e68ccfae08d228f6416737264838eb602652e918ea718b2f4166aa1c1a411f3ed31630ce2345a89f52a363578694ed34220f4f00128197eb077561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364853829b144d1f1df74c8f7a51e60c1d5006a46e3272d2845a586cb2514e9cb959932febacadcdac9e119439ee6db08dc69c3a75ae91b384d859ac01e20a421c0028cdc19f89baf6c362287c7c7841c4536091540a9bd978c440258b5fe7844c439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}}, diff --git a/txscript/data/taproot-ref/1b13c8bd9a345bdcf71eaa1078ef4cb752b3da96 b/txscript/data/taproot-ref/1b13c8bd9a345bdcf71eaa1078ef4cb752b3da96 new file mode 100644 index 0000000000..73287f07aa --- /dev/null +++ b/txscript/data/taproot-ref/1b13c8bd9a345bdcf71eaa1078ef4cb752b3da96 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be9010000003b4ab8d18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49301000000992f62bfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c36000000004f65d726032c18a700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5f079022", "prevouts": ["617c220000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029", "dc55330000000000225120884291612dcc22b2c0e2cf19d55719f5f9dfe9624bd12dad94712b18ad4d330a", "c6da520000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e74c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e907011b224c3ef86d2f36e7d89b63e177b85cadcf6e2dbac0680b671e6366dad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b292a4f502e305109d81040f98432632ff806e9beae33e8faa7e022234476532106df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1dbfe159b7f074423d2fa61e8a9b5231056855b78cb68876c387837662b8c070f92a4f502e305109d81040f98432632ff806e9beae33e8faa7e022234476532106df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}}, diff --git a/txscript/data/taproot-ref/1b2543854748d5b37077ed3e53a36309f5330a50 b/txscript/data/taproot-ref/1b2543854748d5b37077ed3e53a36309f5330a50 new file mode 100644 index 0000000000..db350c295b --- /dev/null +++ b/txscript/data/taproot-ref/1b2543854748d5b37077ed3e53a36309f5330a50 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8801000000c8c8d8b88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ad010000004c9346de03c1f76000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc731010000", "prevouts": ["4b5d270000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "c51a3c000000000017a9146f2d26adc5ad58653becfc45ce03a0b1167b1b7e87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "cf7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea56bafcb4adbf2751227cb38af2ee857892c1346189758b7796ca4cc3d2e44b46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdd6c4167c25132c432c9175336dcf34ec1853eafcfbd891c58e0cd045b8bc4542"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e82a853d9097b45eb0aab266931969d1621607f85e2073f603093b953a54be8539d6c4167c25132c432c9175336dcf34ec1853eafcfbd891c58e0cd045b8bc4542"]}}, diff --git a/txscript/data/taproot-ref/1b3c874362224cdb658666354aa6fb9efff9b371 b/txscript/data/taproot-ref/1b3c874362224cdb658666354aa6fb9efff9b371 new file mode 100644 index 0000000000..b868ee7a8b --- /dev/null +++ b/txscript/data/taproot-ref/1b3c874362224cdb658666354aa6fb9efff9b371 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4300000000d2837e2e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c484010000003ef0486f03696259000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8761727c27", "prevouts": ["e16b230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "43df37000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/input81limit", "success": {"scriptSig": "", "witness": ["8c51fd3dadf2084c515868c0183c3a4fe1f7af7f1d72b3c5bea38d36b25fead31cebb4337cf0fcc96b784a4673ebda7bc5dc62d4fb2a1f019523632a7f8fd337", "6ee6f7f05b6d3e67725ae7b81d24ee0c606bf1ee08210f6d61e0980224e8f31ef531b411854cb17b4d129f949891c8c09237a72dfd743ca002b8ac24f2b8e9e64ac37c2055b4b66dc9fc7ab00faa0994de", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93633f145906eb3b0b9144503b7e952fa7ac030804bf21818b76946b0617a1dc901d4021eb67a5422f2c264ab2e161e443ad68483a924a10f3067064f47bfc1aa823d0cff3dcc0a2d4e46fc30f48a30ceeaa99fba3feb9f110c8632a3b2fa3f4f4f8fbdead7f8de6a8aad36d37b0d589bc9244c1684fd5ac3294cec67c7c6e587a6904ede5a53833ce5d447360be78b94add963f9070eac219e9b04ee2bdd400ddd04364ae3f3c0d48023a93d8481ba8ff7adab87d79476f69028f3fb22b08d057964bbb3ea34308947c748760264ee9e03eb1f98d2b66028dab654f580a418be99661f479a6b0f557293064f4a690bd09af98d8bd3a778ce8944b23259946622ee8f58700e34290ee018923271c5b5338c26b1c5ef6f25154ea2cb21c87cb2bddad45cd3b88d2dbb65b62cf977bb614d0efb5c9353a8b35cfa01122561253231744c2c32064ddb3ff0f538be34c536787771f8aa5aec123a81e8014a979ffa6906075479528a5b4db5d683c0884af4c8976d652dd9505f85dd291fe0843ffd0ff27865ba15c8822e63cb0be5982c1ef15a41fad555080e76aad0b72a8aa15726acd51679a62f62b306cf011a5d1358e6ba8e189d7358bc43376d46dcace83895e75b2934214492b999e4970e4990c42fb0eac353aa09117e3e38145bdbc22646e577b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/1b4bc136aef0b80666d85ce3d93b7996d0ce7ab5 b/txscript/data/taproot-ref/1b4bc136aef0b80666d85ce3d93b7996d0ce7ab5 new file mode 100644 index 0000000000..3e241af168 --- /dev/null +++ b/txscript/data/taproot-ref/1b4bc136aef0b80666d85ce3d93b7996d0ce7ab5 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9a00000000410c554104488323000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76e000000", "prevouts": ["74fb25000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "a77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8344d9400294a0bc4ed438b22b08ab3b11b45ca3db5baf8ab71a53149f22b235b11a008161139ac7a92b00665158d25501a881aeebdfdbf881ee45b85e0726c11"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b1e774f32bdb28c76107d540bfb745497eaaa89f3b38b8eaacc646c85ab728e2344d9400294a0bc4ed438b22b08ab3b11b45ca3db5baf8ab71a53149f22b235b11a008161139ac7a92b00665158d25501a881aeebdfdbf881ee45b85e0726c11"]}}, diff --git a/txscript/data/taproot-ref/1b5a41cda693f9d63f77b9b053dbac3106aea789 b/txscript/data/taproot-ref/1b5a41cda693f9d63f77b9b053dbac3106aea789 new file mode 100644 index 0000000000..053549e43f --- /dev/null +++ b/txscript/data/taproot-ref/1b5a41cda693f9d63f77b9b053dbac3106aea789 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd90100000012f00060dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3c010000008347e7830238aeb10000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748761030000", "prevouts": ["c79c6b00000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e", "dd9f470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004536ccddef3149683af65c31c85a3c06583d8e56fa5e9b8809ad6476a55251e65fad1faed220136b938a4936a71b98f5f9e86de449242d6a82efdf7a3adba2ae62745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ef65a7bc88e8caa9953fbbe68415f348dc7b3deedacdb598041f1438fea667b18959ac4fa8a57d164b76708dc6f63c2efb2484bc5a77a391ceb66b2f5ad6b35f745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}}, diff --git a/txscript/data/taproot-ref/1b68c33f2aa26138257e984d7c57524a609332e4 b/txscript/data/taproot-ref/1b68c33f2aa26138257e984d7c57524a609332e4 new file mode 100644 index 0000000000..b87afbcd3b --- /dev/null +++ b/txscript/data/taproot-ref/1b68c33f2aa26138257e984d7c57524a609332e4 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd401000000a64a7c9bdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2f00000000f9b73b8e0300959b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a695000000", "prevouts": ["8f217a00000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "ed1f240000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "2f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cb0eee81661f2fefaf772a8bdabbcbada52a1b0c3a58f1bcc7f9bb01897d4d674e9031d393e93ec4f3e9da8fc51e83b82f31256dd96ef4af94581a47eb5c67bc"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ca2ffab0cf338eb106c1ce200445cc90ecf54781f497edfad4f32965f124fa8cb0eee81661f2fefaf772a8bdabbcbada52a1b0c3a58f1bcc7f9bb01897d4d674e9031d393e93ec4f3e9da8fc51e83b82f31256dd96ef4af94581a47eb5c67bc"]}}, diff --git a/txscript/data/taproot-ref/1b79cd4b2e7a4b311359e56e468853036d3681d5 b/txscript/data/taproot-ref/1b79cd4b2e7a4b311359e56e468853036d3681d5 new file mode 100644 index 0000000000..c2c0f4f6ac --- /dev/null +++ b/txscript/data/taproot-ref/1b79cd4b2e7a4b311359e56e468853036d3681d5 @@ -0,0 +1 @@ +{"tx": "d1497db003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5a010000000ac409eddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1802000000b7a057afbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff7000000007c740f92045d5fac0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce5030000", "prevouts": ["d1a0230000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e", "d84b2000000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1", "d77c6b0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c54c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694642e1d6a26a11a0c6e91919f09b278112d3d9e7557d10f9f51d88907efe7b71ca095b957df84f3ee7611aa117e5662ab64755743d6d9c5cff6305984f4054c5075e3d7a2801b75eefdf65cb630fc6bd09768ae07eb1bf67760ac5f1c253b1300a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}, "failure": {"scriptSig": "", "witness": ["4c52c5", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365ecb95e6307dce8c007c72a55b7b5c6feb3e69a9f251aeba09cf2903e8de24a91ca095b957df84f3ee7611aa117e5662ab64755743d6d9c5cff6305984f4054c5075e3d7a2801b75eefdf65cb630fc6bd09768ae07eb1bf67760ac5f1c253b1300a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}}, diff --git a/txscript/data/taproot-ref/1b8f51ede6850bb667b5fd80d78e02cd4832d753 b/txscript/data/taproot-ref/1b8f51ede6850bb667b5fd80d78e02cd4832d753 new file mode 100644 index 0000000000..5bebc8d355 --- /dev/null +++ b/txscript/data/taproot-ref/1b8f51ede6850bb667b5fd80d78e02cd4832d753 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701f010000008a70cce402a20b0e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc11e4753b", "prevouts": ["b2a6100000000000165c142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["cfc26d33c3f5da3eceabd09c022c5e779e8b65893679a04f00096c9348e616a10ce548f5d5717b699b60e94ae7675c4d43a7be8f45ccddc700a88556b6026cea", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/1bbde099bad78eb5021b57eaf4e9fecec63162ce b/txscript/data/taproot-ref/1bbde099bad78eb5021b57eaf4e9fecec63162ce new file mode 100644 index 0000000000..ed5f465430 --- /dev/null +++ b/txscript/data/taproot-ref/1bbde099bad78eb5021b57eaf4e9fecec63162ce @@ -0,0 +1 @@ +{"tx": "a8b92e5502bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7c01000000345ea6848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40901000000fc4b1ed502e2dfa00000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac69b80e4e", "prevouts": ["8402640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7c773f000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["be", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93659372e262d5a0f9ef536aae388303ac1332900989a5444d826ec2580d67fc3a21a521886ab29756862a71c0453b77f880429f1d68b1fae0f34d555c1e4747b3e7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a5bb2be9c002390585aecd6a44dd843628783a58b1ff5512778ad80556de83f015cb0c87b91becc5e8e88545f518ccd4dd82a3936db012f0c0e2ff8a479534101a521886ab29756862a71c0453b77f880429f1d68b1fae0f34d555c1e4747b3e7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}}, diff --git a/txscript/data/taproot-ref/1bc3e95ef1ef57164dee0340314916513b071491 b/txscript/data/taproot-ref/1bc3e95ef1ef57164dee0340314916513b071491 new file mode 100644 index 0000000000..00e84e6d1a --- /dev/null +++ b/txscript/data/taproot-ref/1bc3e95ef1ef57164dee0340314916513b071491 @@ -0,0 +1 @@ +{"tx": "044da27e03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdc000000001a07b0b4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9501000000bff781dddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bee00000000ac3a7bb4026db9df0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67e030000", "prevouts": ["ca4f73000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "2fbf4b00000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "e43e22000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "a87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa5bae7514f70ba44e8d531d880798aa096a25d03d605b2e6afaf4f02fcbbf71905def3d75afa0626f5ab572f3c9ae49b6567bf85ec43d0b3933062a3ad8b1e492"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e0f273cf51817af2ba6be97d0b489c0ff94fb9e2107188f41c15a52934d07d725bae7514f70ba44e8d531d880798aa096a25d03d605b2e6afaf4f02fcbbf71905def3d75afa0626f5ab572f3c9ae49b6567bf85ec43d0b3933062a3ad8b1e492"]}}, diff --git a/txscript/data/taproot-ref/1bc5747eb674dd470ce9e8f236e8c461bd9f5491 b/txscript/data/taproot-ref/1bc5747eb674dd470ce9e8f236e8c461bd9f5491 new file mode 100644 index 0000000000..3bce49e476 --- /dev/null +++ b/txscript/data/taproot-ref/1bc5747eb674dd470ce9e8f236e8c461bd9f5491 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270df010000000d2d46bf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704500000000609e4da760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a601000000c24588ea01641b0d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87260bfd52", "prevouts": ["9707110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bde20e000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "f260120000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c6", "final": true, "success": {"scriptSig": "", "witness": ["ddaf1bb74989869b37d16c28f9b40779f55f7f5218aa7f4c0685073d12b99c91b034097dfb03d30811fafd407578b0e2574a239ae4e5611106dc92d5d83046b902"]}, "failure": {"scriptSig": "", "witness": ["04ac942e3e881e0770c43d7aabd4619c2f8fd9930302edb64765b30443e9ebd2d75201cd83ae2f622a4bdfbde08a1f357a601a2c866e2459b1d9be20fddf56fcc6"]}}, diff --git a/txscript/data/taproot-ref/1bc76532e1949261ee2079d9ce81e5bd2ee2c56a b/txscript/data/taproot-ref/1bc76532e1949261ee2079d9ce81e5bd2ee2c56a new file mode 100644 index 0000000000..0bbffe8138 --- /dev/null +++ b/txscript/data/taproot-ref/1bc76532e1949261ee2079d9ce81e5bd2ee2c56a @@ -0,0 +1 @@ +{"tx": "a83fcb2f01dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0c02000000300def9a03348f220000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72c010000", "prevouts": ["6614250000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902987bbdb96815479e252b855f04fd09b10903650e7f2b4711d67c5f3d52c6e112abcbb9aeda19ca443637f8af4be0bd588f2bf3d3451c2290f18e2b98fbb0207b0d4cafd72c318d0207acf78da1a6b850968d0dfa2c2ba264ae4d1d9335888894578835dbe8bc0aaa2fa616bcfdd2645e34058e523dbe20cac0296caf6e7669742880805ebcb4988448776844570656fa42a56e438869fb28e2d41bf1491fbbfd0962f8f9293fc970bc61456b63a6f71a95a009b7d04258a2cd7429524c40c0384a8e7e83a46c2cb28470bec8edc59729a2a6666c3a6934fae3a662ee3d744ac831a565d3a637f74561b395b9faf3958422791928ceb370b5d133620de5210bd5d59feb4f4277f33ee4642c3a78927c2dadcd7cc9dd64426e9120bf52716d945aa8ef41165ff702aad7667419322d892d7b31a6580ccdd70cb103e0ef4c627100342d0e968fe4597b6beca749a94923f0b4ccb73d0b9054029a8c64f92138ca07beecc730e33a8db9798c826d2a3322d65d197faa43725fdb5e2eb17aa768ffc466cd96b0ddb7e5e02beb4081648afed31d7307add3aee1e91aadfdec50e0e024752ae7cce334cbbc4c44166fa0717d413fc4705e235f59639466fdb00441ba6b59feb969c484b89a245a896b5954f88cc871642f836c1723f711a1919c52f63bd88823727e359bcf81b7c73fe5fdf1f99a4e89d38f22694ef46fbd6445e90a0d8e0e8e427c62fd0da775c5", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1111302735ec636dd6cd82402c946e3c4544cb7cccda2620354a4b8fa269f342b5075e3d7a2801b75eefdf65cb630fc6bd09768ae07eb1bf67760ac5f1c253b1300a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}, "failure": {"scriptSig": "", "witness": ["4d090230ecb3e7cdd1f21ad4866d4b17edb63a2ea54323396ecb9ff29801f7f34cb7fa443c0c5adc090368e9434746ff002e4730351d45e72964762c78d3b03d40d713422223d4857688b9eabc0573719f932518b9e2f2b1beced10da4150cee0049de8254fd03309f9f04d1ff7c1f15c215facb0ec1d51116610a83e9b80d38e9cd917261cd5f6a9d6c2dce17ddc268e07b893564a1ad65dad766465c3055c54c0138cc517808e412c08ef38e6d42dfed56e7dc797f815f14654cf5283883d85c362fd911e5a314097bf785665888e831fe68ca5f22b7497881bb7c9dc33082812cf8162c824ad085bc858b2a1be43091ccab22c989f43ecbb7d152f3365c25a3ee6d12a89609f429b4feebcd549c37b1a13408043428ef2b856fd48ad02fff8e35084046064413e5a44ad3e8e36045f8859e898f5d84f3919c005592aeef473692552a000b94619545fbac00dce04a4c9aacc0fcf54927117b05b84beb4e37f0622317bbd91338eacbcfb5d954866a93931514a051e009cd9c0c6b5e5d08f35365cd88c6fc4aba03331c91bded729f8aeed05c5f32bde8921947844e5d7499238c0ce305d5d0bedf4c53b18d52c1d0cdc51d0650459bc9bd71d7b19cde9ab53084f2e95d489dfd79abaeb4b0a7746f187015067e8576b25ddb0a6f68897529f6842e33b3c7ed7c0b3e276cb43052005d3944a68bc64483610d73d6fd521caa1e40cd730429897b1c0517847561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a660eca3fa0edb42c0ab30ffe3daaf6f1f409e953104f48559c2b804c71af6a81ce4d7767c8a9637a0804b073b1eb172c67de67ce152ade33f2591a85dfee2e5a"]}}, diff --git a/txscript/data/taproot-ref/1bfe6046e6cdc344b877ad37196692f2724dfb96 b/txscript/data/taproot-ref/1bfe6046e6cdc344b877ad37196692f2724dfb96 new file mode 100644 index 0000000000..dc67403009 --- /dev/null +++ b/txscript/data/taproot-ref/1bfe6046e6cdc344b877ad37196692f2724dfb96 @@ -0,0 +1 @@ +{"tx": "3f83490e02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf29010000004679f882dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7001000000ded352b204041c8c00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487ae53ff24", "prevouts": ["18d9660000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "dbd8260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_csa", "final": true, "success": {"scriptSig": "", "witness": ["2b44eb7cd66327d88d4548755f38c44c35018f8a857e6c90843b6b9b76e558f77a9de1d26d4076b0f124c9291ad326ee84d275d24343dbe3e3d6b0385bee9ebd", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439befee6fda3cb49175c9fcdc99039bdef34bed6f8c885214259c1ab60f6e0548afc8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["2b44eb7cd66327d88d4548755f38c44c35018f8a857e6c90843b6b9b76e558f77a9de1d26d4076b0f124c9291ad326ee84d275d24343dbe3e3d6b0385bee9ebd00", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439befee6fda3cb49175c9fcdc99039bdef34bed6f8c885214259c1ab60f6e0548afc8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/1c0b90070d5af0e0da662d27418affd7255bb328 b/txscript/data/taproot-ref/1c0b90070d5af0e0da662d27418affd7255bb328 new file mode 100644 index 0000000000..eb5ea2e6dc --- /dev/null +++ b/txscript/data/taproot-ref/1c0b90070d5af0e0da662d27418affd7255bb328 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf300000000050a1b45adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2002000000d5142d75026c9a980000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac27030000", "prevouts": ["3ca17900000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "03c62100000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "327d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93664a7611b628410c237d06316ee04957fbdc9ecb6c280085c3b6be5718c5572e78ce3cfcf38b656b5bd992972d83f897c8aa5da1de7c0e12ea4c0aa09cdb3dc1d2e4cd18b5d1ec472eec5a95c6c9d67ba3848eb933b0b41a8c6d3176a27b07997"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93613098bd67eb0d948d9da1baef2a1e373b21f0d2c05e2b432c8a43efdf85d0ad308902a07d3a610262cf0bf6826274beb2bca0848f03750f1d66d9fdb1ecc982925d31a4d328a06fbd663a9de03f4f743ae6731d946a7b64875ecbfa9fe5ecb492e4cd18b5d1ec472eec5a95c6c9d67ba3848eb933b0b41a8c6d3176a27b07997"]}}, diff --git a/txscript/data/taproot-ref/1c1b10df48009861e679c78f57233fcbab1c9c74 b/txscript/data/taproot-ref/1c1b10df48009861e679c78f57233fcbab1c9c74 new file mode 100644 index 0000000000..4e9462c12b --- /dev/null +++ b/txscript/data/taproot-ref/1c1b10df48009861e679c78f57233fcbab1c9c74 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4c00000000274f8de6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdf01000000f39357ce027462a30000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e718a8883b", "prevouts": ["c63d4b0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "7dc45a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "1a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa8e84781bad1ba81b7ce5b7be6cf9bec34b59091704d19096b61e5a37e7aa266c56798b11c96dafc2935d577afad31a6537ce4b1a48ff27833822cff5fe95a51e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ae37181c42054bd3d996a0cb9fcac8a434e22d455bb156486fd105951d5862240401d3043d3e54134521a2f6b274f3ac0e46a5b9a6f95ac49ca3a75270b4793801cbe9d84ce1e82e006940c90d66235295537a514918e448d1b01c99be1031af2727a08c83da142d000f7f66d34a23554b296f940ffe81022e50f50dcfdd8b9"]}}, diff --git a/txscript/data/taproot-ref/1c1c68f02884233862b5ace3f063b648ef1a8f5b b/txscript/data/taproot-ref/1c1c68f02884233862b5ace3f063b648ef1a8f5b new file mode 100644 index 0000000000..6a30370636 --- /dev/null +++ b/txscript/data/taproot-ref/1c1c68f02884233862b5ace3f063b648ef1a8f5b @@ -0,0 +1 @@ +{"tx": "2cdaf2c70260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127012010000003b999eed60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705901000000d23472a40318961e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5f000000", "prevouts": ["05ce0e0000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "bd5f1100000000001651142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063ec68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367a5b4453de5c6ff322ea1de12551f31e7d4d3d0aa0fae2cde1b898bb69f40e54afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173adddfc46016955cd26bcdfd077adbba0d60eefd6e0317def1b858595de21efb103b719bf4b6df334f4ad3966afd516fb2a8d294cb4fface4e4609ab1c9f988c5a"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d686773729ee45a24450fddb7da6d0266ea60d425b2bcaf3694e59ee80e6a1a3dddfc46016955cd26bcdfd077adbba0d60eefd6e0317def1b858595de21efb103b719bf4b6df334f4ad3966afd516fb2a8d294cb4fface4e4609ab1c9f988c5a"]}}, diff --git a/txscript/data/taproot-ref/1c2a334bb5693def73177ba056d467309d1a592a b/txscript/data/taproot-ref/1c2a334bb5693def73177ba056d467309d1a592a new file mode 100644 index 0000000000..0ea800b7f3 --- /dev/null +++ b/txscript/data/taproot-ref/1c2a334bb5693def73177ba056d467309d1a592a @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bed010000004b8c4692dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc00000000064d1b7e701d6ec0500000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5d040000", "prevouts": ["d41126000000000017a914927d550e2674fb9e1f6ae1260d00989fc596dd7f87", "690e290000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2254202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["3986be8a270ddfe32e2009bc7115200b5e1f0a0ebc807f85a6a2f555df4aca454525ee4dda5aaac495658d27b678d55652a1f2ea60fad74816052599f8b8c92c", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/1c34962adc291e2c8bf6dae66b8fb9c765b86439 b/txscript/data/taproot-ref/1c34962adc291e2c8bf6dae66b8fb9c765b86439 new file mode 100644 index 0000000000..5c7a1f8153 --- /dev/null +++ b/txscript/data/taproot-ref/1c34962adc291e2c8bf6dae66b8fb9c765b86439 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dd0100000032bd211460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ae01000000ce12f710049bb81c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac34000000", "prevouts": ["bfb20e000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "9019100000000000165b142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["b0a0c8f5ff054a8c0b66272c21f09d79645ec52eba52e10be1a70c9dce1379227bf4a7668378a0efe2e4ca5c312fb651a52cedfa4773ff4ab97e186205b0a85b", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/1c385e281c4e1f86fe4c3b41f133fe0f1ad20791 b/txscript/data/taproot-ref/1c385e281c4e1f86fe4c3b41f133fe0f1ad20791 new file mode 100644 index 0000000000..2dbcc4f58a --- /dev/null +++ b/txscript/data/taproot-ref/1c385e281c4e1f86fe4c3b41f133fe0f1ad20791 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41202000000c2df2cc2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3e0000000000c889220437d98f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a63a584d51", "prevouts": ["d5a340000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "1f1a5200000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "437d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362c503a4390cea1e1efd273895e3e36c6de149914d80a97a30106137d896fa43dd9a73345c989c90f21221bc9fa2fdbe5d62b34ad323157a62317cd84046f2af72db79fc77699d349d3583c063c1ca5cb78d93faef419ab336fa45db1a25ff641"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a84e311995f98367a2a93ed7b61478a76d5defba7ed050312f02844091a9eaa94274b5900613cb2e14ccbb49f92be42e903262ce34f92c4d0a103e0ecbbdfe862db79fc77699d349d3583c063c1ca5cb78d93faef419ab336fa45db1a25ff641"]}}, diff --git a/txscript/data/taproot-ref/1c561097325c97828153532b8c7b95b14e46dff4 b/txscript/data/taproot-ref/1c561097325c97828153532b8c7b95b14e46dff4 new file mode 100644 index 0000000000..a3ea13d95b --- /dev/null +++ b/txscript/data/taproot-ref/1c561097325c97828153532b8c7b95b14e46dff4 @@ -0,0 +1 @@ +{"tx": "feb46ba5038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45901000000d71bd59f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4be010000004e14988560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a7010000008348decf04584a79000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987a5c20248", "prevouts": ["41353600000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac", "744c360000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "28650e00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ca", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f99c996d59a69d75c183cc1e3ba6b17987582b2274e87a7d50251745c93805cc8eba4e75ed92f6e82baf0cd6101dcd67879c020ab703e3dac001fd69a24240ecc7034c4ece6ceffdf067bd97d8bd2a80e986f14e8b5dca33ff1523eba7a77d63"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93609ecd9cca2f2b8950833b6aa956617a5b43d405ddabf2f82896509604dfe978d1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045be01dd809c80d07fbb65649666935b9712ecafc77e536b2a27c3cd6425d00c1ec7034c4ece6ceffdf067bd97d8bd2a80e986f14e8b5dca33ff1523eba7a77d63"]}}, diff --git a/txscript/data/taproot-ref/1c7cf3e3c8d41ca4743e00d88ec0434c6f31d4c9 b/txscript/data/taproot-ref/1c7cf3e3c8d41ca4743e00d88ec0434c6f31d4c9 new file mode 100644 index 0000000000..cdfbda7df1 --- /dev/null +++ b/txscript/data/taproot-ref/1c7cf3e3c8d41ca4743e00d88ec0434c6f31d4c9 @@ -0,0 +1 @@ +{"tx": "d3ff18670260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127077000000001de5cfb8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6200000000bb5121f804c76831000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac74020000", "prevouts": ["23940f0000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "a9962300000000002251208cf8a45f10f972ce0940452c1be98364c363db2f13613d49d474bd7709bf6664"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "8d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367fb9aaabde077b4a96633c8c7d2d9c056a2c65d4be6dfdaa3c1c9735c6591c4fb838daaa44e784827b3ea8aea20503468fe81f3acdd576e27ac09ae12d8ed7c28047789ecbd47ea83af97bdb87f8422a4707031714ddb05eaa38b24e158a7c35"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e88f7cf44737276fc9e0e4313f71ddb6257126d0499b1311bfe4a854929366560492d17ab4c59254bcdea8b81e7721fca5f8758b8cd0b322bd5a652bd9dfe7967472d664747fea006dedee35c74318028ad9a0ae37c154fe8226ccc2af402983"]}}, diff --git a/txscript/data/taproot-ref/1c903f96be3cd8956476fb915624fb89666a187c b/txscript/data/taproot-ref/1c903f96be3cd8956476fb915624fb89666a187c new file mode 100644 index 0000000000..ff2891fc54 --- /dev/null +++ b/txscript/data/taproot-ref/1c903f96be3cd8956476fb915624fb89666a187c @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706a00000000ba3847fa01d7b9020000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc15020000", "prevouts": ["0d141000000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09024c60c07685b0417c278706be8b20403d535e08fe96e8a49143174c62f87a0fff247b9625014ff97b39045d5791a8f071f7024979d335a05e843ef427d5ebbcca3188050a4668a361e040eb89629cb77b168ad9c46a13427b3f8fe1d7eb4417f132cfa94b84ad4a52d7ab1988879ebef37da6ba67866597973f51d8e05964ceed321323d3e0d857e1421627bb575713d9661841e83b89e0429e271dce0b57061c3ab2e6bec506520c94d2a556c2708c62a9ebd3625214a74277dcfce157927e4c25fc8ca86168dfb495b394b2b6eccbabca296655ec91060cb415658e39313e3c6e570a9bca1127647e20fe0f7246b5fb464e899e6b9f9ebd66b42a2ab5cb9ca2cd20ae9ce19aa5e82991df186a89e579d2282453b43051bd855825191665358fabda6d3dacc64f96f1c1fbc9401da10693286fc252e472ce5338aca9b47feb7f7dae56c04a978ee4fb3a571b777906b70f519cf31098b8759ba4239f77e06153fe967cc9a95c9107d23d07f36396496cb33d224cc86f56b8d0b4a090561c5b6c40d54f23f80105b81824524a1c52ac2e6537501ecae2b61711ba647136d08a54660268bded7c90f9d473a2f000a41e25fac686223bde9debd54b9ebe372edbd8824ff04a4dc126ea7762bb58442cf782ace01c0ca01813e9c71072966f5190164e4103b82aaac539d4d5585d9327850fa7655e7c7a7bef797ec07b6e4d734904b64d7a27ae3363fb0575", "107d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e32fffbf821c428499cff2b0139c90d93037c61d12af2692624d5246efcf2a3a14520b5ceb13d27db1b37ec8ee9ee9482aafd08fc62c5401b1fb7c7b4ff374c3d"]}, "failure": {"scriptSig": "", "witness": ["4d0902aee04339b9490235fa263c8a9d1929a73a22b6665a877f21940e3037e1cb39e76f25ff54c1e217fb5156da8edea597654d2abbe5203007c27276cb78e6786973e1b2f302aa78b0eb3f10ceca4490d6b24a240fcc959704fd574daad1e2604c3aea31cbdf80f3bf38c3ddbc630610dde249dbd182a005648ed105ba802d39b9164ed0a2d19c61a8cee5b4616345b5316703d09221a554f3d1172ab8fd61abe4f46758155f9ccb90695869bc7569e6c25d278b6288e7c1b8a9537d72349fd41041fa2413ebd82723766ff7ebf178afe3a00419d139ec6abc5d8262a6ca8a22ed3539097a0fde7bcb6b37885ce7931e5ba848a1657c6d7f8dec7a214b102bd908dd6a3c57490400f06425cbeb9efbd32af16954ae48b83af314671a0d08c76af69e0eabd9ed703ec91cbd9b8b9a68b6f6dd3fbcd1909b223cb8c50d0a2d1e58423294789f50bdabc07290db9286f9e531d4ed59f42f92bc3d0b767ec2b44815f8756ac222cce21792012882139ea843745b12ba9ff77392617c5bca01d69af30d98d617d40800915bc8a33a53d224ad2da62d578252c629eb705695549e56cbec550a1f2d62f18520496b4f0ffaad2cc085f31b7af0590e2adea835c5e3936a54bff6069a9c03fbcc6f5e5ccbbfa9f4fc2ec5ebba4c5ab56bca459a2ac55bac312a2de82b17a125c95cf4c29c539d5b2414158dc6c0d77833feb713ed9c0994373e19f0139957cd577c6175", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93634545fb38decb633cf6ae769fdef4bf71c30e4ea3f5ff3ea24d94195fdedff4709630471a62c8657382c38b342878f0042beb3ba209e0ca1417f9db2e3d45f6dbd940ade039b405c8439b762bfbc73f9441ef227e6f687b6d94ebcbac32155c7"]}}, diff --git a/txscript/data/taproot-ref/1c929a0b875b383b7f3db0d168424cf2ba6d3cd5 b/txscript/data/taproot-ref/1c929a0b875b383b7f3db0d168424cf2ba6d3cd5 new file mode 100644 index 0000000000..fff0191bec --- /dev/null +++ b/txscript/data/taproot-ref/1c929a0b875b383b7f3db0d168424cf2ba6d3cd5 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702e01000000a82179bedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf101000000b57106c802fe846b000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac32000000", "prevouts": ["b7550f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "45bd5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_7c", "final": true, "success": {"scriptSig": "", "witness": ["50bf221dcc4228142ec7f1b58cdf0cbc075daf28ee8a07041cd6f07a20d05696ebca6a7a8d0ffaf9a2449b39c7b38eb29c2c3f0e5c2d039ba51a0b3c92ae7b6501"]}, "failure": {"scriptSig": "", "witness": ["a740c0e16ff18e887707249969575eeffbfa21e71f98fa097001567a45a8504b2913294a49fc25a3cc72a55cec35d5af3147f630280a7b14c6fa3aa9f47b0a7e7c"]}}, diff --git a/txscript/data/taproot-ref/1c974326af0bc49a9f389a9c91eda58bdb47ef17 b/txscript/data/taproot-ref/1c974326af0bc49a9f389a9c91eda58bdb47ef17 new file mode 100644 index 0000000000..b63ae9d4b5 --- /dev/null +++ b/txscript/data/taproot-ref/1c974326af0bc49a9f389a9c91eda58bdb47ef17 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40502000000389ef4cfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cee01000000e0711392020eb285000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e55e102f", "prevouts": ["67343e0000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "df294a00000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/merklelimit", "final": true, "success": {"scriptSig": "", "witness": ["fc777bfd39e7a40f276038dc2bc4c815879daf9a58586353d6f3f85ee628a1c2dd5353de835c4020bd07ff63da79a03d921019893ee36314ae0ef668da1c456f", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}, "failure": {"scriptSig": "", "witness": ["fc777bfd39e7a40f276038dc2bc4c815879daf9a58586353d6f3f85ee628a1c2dd5353de835c4020bd07ff63da79a03d921019893ee36314ae0ef668da1c456f", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93672ab2582871329e6d2ee7428615b3ca131667fbf9a036ced2b197b0b63c7847f72ab2582871329e6d2ee7428615b3ca131677fbf9a036ced2b197b0b63c7847fbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}}, diff --git a/txscript/data/taproot-ref/1caae5c5cd8d5b5cbaed34c3bffbfa19df6aa109 b/txscript/data/taproot-ref/1caae5c5cd8d5b5cbaed34c3bffbfa19df6aa109 new file mode 100644 index 0000000000..260ddd1de8 --- /dev/null +++ b/txscript/data/taproot-ref/1caae5c5cd8d5b5cbaed34c3bffbfa19df6aa109 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8600000000ce2f9983dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4601000000204160840467558b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ba17e93a", "prevouts": ["35af690000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43", "468324000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402207686e00c97162febf58805365e573e1fd0aed87eed6e265268aded331b55b05102202b76a217a8ebe51fd962739ea9065c67a104185abf22b4e7538217e7cb81072f81", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["3045022100dd3abd03be5be846e41d4fc544313f60598ebef60284bf3b954428f6868e187502206732f3dcff5b38dbdccc1f609c0510d3e9b4387b3d5dec49d1f2efa96f61c3b981", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/1cb39f47f10b248d485afd4c83fa450fe4dcf928 b/txscript/data/taproot-ref/1cb39f47f10b248d485afd4c83fa450fe4dcf928 new file mode 100644 index 0000000000..6364359fd1 --- /dev/null +++ b/txscript/data/taproot-ref/1cb39f47f10b248d485afd4c83fa450fe4dcf928 @@ -0,0 +1 @@ +{"tx": "67740b64038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48b00000000cbcacdbcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a010000009adeb4bedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd9010000005dd15aca02d7dc9800000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac56737540", "prevouts": ["ff1f310000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "d85b480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6f8f21000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "897d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ab344e4b6d97d5a92cc1b05df0fe09e2cd2d4682c3139258fed99670b6ab8d41726cb8b9ef30538f8a1a93f31e75c47dd280be49ef0cf0ee8d9ed88fe0918226c56da6b4a79dd49e001229b88fb5122d120ac43d63d1be0cdb38b208b21132e"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d4b8046dad04a3772f9ccea4aa6561ffa13699a4d5ce62fc25982fe6640a947d25e476051edc329ceb3a02f4bde28569ef4d6846a9140276d24ddc98c1f436ac1726cb8b9ef30538f8a1a93f31e75c47dd280be49ef0cf0ee8d9ed88fe0918226c56da6b4a79dd49e001229b88fb5122d120ac43d63d1be0cdb38b208b21132e"]}}, diff --git a/txscript/data/taproot-ref/1cc704edb370c2b52aa731bd30ea881ee0b2eb53 b/txscript/data/taproot-ref/1cc704edb370c2b52aa731bd30ea881ee0b2eb53 new file mode 100644 index 0000000000..30a44c6ddf --- /dev/null +++ b/txscript/data/taproot-ref/1cc704edb370c2b52aa731bd30ea881ee0b2eb53 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce501000000881946a160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270870000000050efa3a7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb100000000ea994684043ae79000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487046fe641", "prevouts": ["b8fc5900000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5", "d298100000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "290d290000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "697d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facb7a7ab5fd71851d574a9c26887a3027e1173994a10fb9074a9680b95d402bf38dbbed29828226c3a1e74b431b518dca4e99f1ee054f76cd9b7bd5529b5cc8688de3449b5e2c621283b68ab187cecafc7aa77a8721601b5317d3484f84536019"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366514e2792df6cd73727562f46c93cd47aa533cf6032189900e3e0a43e73e7f3e7bbe6274b0dcd2777fc9b1075bd65318fdd52335751f1d5034a6ddc9c2a447578de3449b5e2c621283b68ab187cecafc7aa77a8721601b5317d3484f84536019"]}}, diff --git a/txscript/data/taproot-ref/1cf397672140f803d1c48c64b7a9b55ed395d983 b/txscript/data/taproot-ref/1cf397672140f803d1c48c64b7a9b55ed395d983 new file mode 100644 index 0000000000..02ddacd6eb --- /dev/null +++ b/txscript/data/taproot-ref/1cf397672140f803d1c48c64b7a9b55ed395d983 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4680100000014cd4d66dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5b01000000d231e7ff03efb58d0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc27030000", "prevouts": ["9db93700000000001654142540f27e90740933c99d4f17ab2dfc6c82951cfb", "7b045800000000002358212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["11f1c55903856f2490e230698c97a7170a192ec750008f08d002d35e89a335566076759e504b9c5780d7077cd426e1639c3e0d113dec6a9a678118987f1e4af0", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/1d396736b3bc9203fa55467a0775f7a058a44b05 b/txscript/data/taproot-ref/1d396736b3bc9203fa55467a0775f7a058a44b05 new file mode 100644 index 0000000000..4dc763423c --- /dev/null +++ b/txscript/data/taproot-ref/1d396736b3bc9203fa55467a0775f7a058a44b05 @@ -0,0 +1 @@ +{"tx": "7b8f2880028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46300000000896a89f660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c3000000008f1288ee01e55143000000000017a914719f78084af863e000acd618ba76df97972236898700000000", "prevouts": ["2c12410000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "797d0f0000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "b87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8d64c15a931058236adef8a4965d2af6c40e751c52c93bf72b53dfa72cc6c024bd12296fcc73680f3617d8f33f0de746e19dcfecb08411ea531ade48d4ab609a0"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e5c7be958f18497b82a5f310769c8b8ace0436200d1bb32be05dbac5afb51b7c71ca511921a6acb6b52511c7e467c1fdb04a1d5dae2a81dbcc486709376a8609dd12296fcc73680f3617d8f33f0de746e19dcfecb08411ea531ade48d4ab609a0"]}}, diff --git a/txscript/data/taproot-ref/1d4be0ac5b202d439cadb143602ea3459a3eea33 b/txscript/data/taproot-ref/1d4be0ac5b202d439cadb143602ea3459a3eea33 new file mode 100644 index 0000000000..ddf70daa85 --- /dev/null +++ b/txscript/data/taproot-ref/1d4be0ac5b202d439cadb143602ea3459a3eea33 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41c0200000090748d82dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cec00000000327a6adb04bd048500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cf0c1a4c", "prevouts": ["d0a93c0000000000225120dc347dac30d55fcefc955ccbc6791a94d629e3a9213464313d15e8052cd76ad1", "f6434b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe79816e53960984aa9f9324f7580bf1e252717c8ddcb06f3034ba39587c992e"]}, "failure": {"scriptSig": "", "witness": ["6a12616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/1d66bb4f8ee00895bb9533eb0329de6d26b4e395 b/txscript/data/taproot-ref/1d66bb4f8ee00895bb9533eb0329de6d26b4e395 new file mode 100644 index 0000000000..b08117d061 --- /dev/null +++ b/txscript/data/taproot-ref/1d66bb4f8ee00895bb9533eb0329de6d26b4e395 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdb000000005eaf85bf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e0010000001162e7efbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9701000000c3c69fd004347af5000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac82745761", "prevouts": ["612151000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "c6b8340000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "f439720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["984c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c161624a971c36aa6290c86687ec80062b931dc8c82c07703e18fb2ec2014c60afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a4b5563559956b4521d685614895115ff3b761ab3fb4dd1d8def3bf310bb092b594c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900451f4c7988b5621a2b4ceb0e4a0295b5522bdaf57a14af19f5e9873d8ccb0a4f054b5563559956b4521d685614895115ff3b761ab3fb4dd1d8def3bf310bb092b594c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}}, diff --git a/txscript/data/taproot-ref/1d6b45d432e1a9f7bcf2692c87fd3865d9e96451 b/txscript/data/taproot-ref/1d6b45d432e1a9f7bcf2692c87fd3865d9e96451 new file mode 100644 index 0000000000..68c145e6cb --- /dev/null +++ b/txscript/data/taproot-ref/1d6b45d432e1a9f7bcf2692c87fd3865d9e96451 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8e010000009d47f8c3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9c00000000643f149804cd20a300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac550ddd44", "prevouts": ["3958230000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "01bd8200000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360a008098802adc05b7660f80fc20c7ba5a23d2bd0801d1158072548832fd78b18080c17c1a9ba5ea8a3780f9d0897aa41ac6e03bb9fc27a0b4027847c33ef9f08f84e1cc8430872045fc695723e7e8ea88aa60745b893850b41017408051d8396d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663f772b330758ff91816ad5871b5e8f137c7278d3b68f945670a0b97a4fd348222ac0f20434af06d5694002e66a328e774b08c17356336e0bf0019524f47df1a7470af5f469e43c444817efa23ad8740a4ec3822d36804e7973b39d521bdef59faeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}}, diff --git a/txscript/data/taproot-ref/1d6c3731bc1125e0c52a0356e80d994f891c5e9c b/txscript/data/taproot-ref/1d6c3731bc1125e0c52a0356e80d994f891c5e9c new file mode 100644 index 0000000000..15552ad006 --- /dev/null +++ b/txscript/data/taproot-ref/1d6c3731bc1125e0c52a0356e80d994f891c5e9c @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c730000000007e7cb39bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4a000000006802958d0482acd60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac15766851", "prevouts": ["4500580000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c9af80000000000017a914b0b53ba433a336ced94ed75e23248458a1c69fab87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2252202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["5d0bd60061e5efbf062c0c572eb308a43704db88b96943fbda77dd4f9d1d97cd33c696ac36c089951dd2bd32b0933da4706cec06b97a5a9a290e728b1afd0703"]}}, diff --git a/txscript/data/taproot-ref/1d83703eed5baa3599b3562c9ea6f395f0ecacbd b/txscript/data/taproot-ref/1d83703eed5baa3599b3562c9ea6f395f0ecacbd new file mode 100644 index 0000000000..3f81e4f9c0 --- /dev/null +++ b/txscript/data/taproot-ref/1d83703eed5baa3599b3562c9ea6f395f0ecacbd @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5000000000b2eddc38bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9b000000005a19fb67020823d500000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac37a54057", "prevouts": ["fe80540000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1a6f820000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e", "final": true, "success": {"scriptSig": "", "witness": ["1d898af12645329314121988bca247d8058a4a07668854d1230edffc57c9ba153634f60451d8f2b1f3f326922d9964c54beb0784c374ce67c2d8a6f96d7a887801"]}, "failure": {"scriptSig": "", "witness": ["4713e0a951a41221f90b51516adb5e13c07d104f62e82e715156c4a99939e7193e3b1866035c75fc75d48daa703bd35f5b8f1b1d7c9f36c95edd2417efeed91d0e"]}}, diff --git a/txscript/data/taproot-ref/1da56d6e6d60e92c14472e47b665a85be68598f1 b/txscript/data/taproot-ref/1da56d6e6d60e92c14472e47b665a85be68598f1 new file mode 100644 index 0000000000..4a9e24b7d9 --- /dev/null +++ b/txscript/data/taproot-ref/1da56d6e6d60e92c14472e47b665a85be68598f1 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ad00000000d70bf3c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b08010000005adde9fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b60100000078ddf57604cdc96f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787521e713c", "prevouts": ["6eb8120000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "686e1f0000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "02ce3f0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100cd39a39352e610354339855f7764070783c64dfb51e94ccb5402fe45ffee70ec02206e2aea3ec7777536a73cb5a604c1f87435c64d05251a235d5ce15597cd31471903", "witness": []}, "failure": {"scriptSig": "483045022100da7de1c027823bb7ee1d3365ef19a3d48ae72ec52baccfafbc1af3e92d68185e0220684939173578d11d459d1ebe2ed19ca2978f160209de889bbe65336d97fd158603", "witness": []}}, diff --git a/txscript/data/taproot-ref/1dd5926d9df81e85da3075d37f0702718c88900e b/txscript/data/taproot-ref/1dd5926d9df81e85da3075d37f0702718c88900e new file mode 100644 index 0000000000..43be68e12c --- /dev/null +++ b/txscript/data/taproot-ref/1dd5926d9df81e85da3075d37f0702718c88900e @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bba01000000a2f78b97dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b82000000003a48009dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5301000000e7fb77e004cb3fcd00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7f2000000", "prevouts": ["d4b42600000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "69c2270000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "926981000000000017a914971b3e5f9ac480bdcebf6ea71a9fc7de0ab164e287"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21541f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["4292cca86b1b659a1536c0809dbe9ee735a3f3c75c7923f1b1fd213cb26875c533456f950943e6d6c95370ff3a62d8986998da89659d83be93e072de654bc626"]}}, diff --git a/txscript/data/taproot-ref/1ddf875ca22b308639d7b1cab6ee74ea77bc6bce b/txscript/data/taproot-ref/1ddf875ca22b308639d7b1cab6ee74ea77bc6bce new file mode 100644 index 0000000000..9ea6467c2e --- /dev/null +++ b/txscript/data/taproot-ref/1ddf875ca22b308639d7b1cab6ee74ea77bc6bce @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4100000000ade270268bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e300000000586a0d6902a64ca4000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c5010000", "prevouts": ["d61a740000000000225120e5be1c56293dbf2401662c2d3a0e5c3ad348f091e23d387b2bf628c220dc03c1", "b02c32000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369b94a607fdb4e67654022166c29e3d68c7d66d8db4d337314bdf481760aeb4b9"]}, "failure": {"scriptSig": "", "witness": ["6ab1616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/1de45c6257377171ec1383ff685db7ce8e13d8c4 b/txscript/data/taproot-ref/1de45c6257377171ec1383ff685db7ce8e13d8c4 new file mode 100644 index 0000000000..f1a04212b2 --- /dev/null +++ b/txscript/data/taproot-ref/1de45c6257377171ec1383ff685db7ce8e13d8c4 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1200000000f79331a1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1c00000000af1cfe2a0186b90c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d3d29e43", "prevouts": ["46751e0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "1b83220000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09027e716760078390cdadb0e9260390b88e80098d43502e4672c8fac6d770c8eb42cdb4854a650bfc14629fc38122eec2f3eb0012876861157c780db41969bb8f6b00fcfab393b5fe72d0f5db254f39db30728c397871ba12dc2cf76c7cd347947e8b48262a0e6b8078edab1955a623071b4f180ac3e1f04d87fd76bd4d79f5f93118738002cba5b78eef52e27f5fd2bda939fe8261439196a789e418b27fb34308e10a82cd6eb2b9e7d4ccef6b277d420ea6830678268b09fd16f5a1890b8942d3791129c5848e9d4513307b8bacb61c30ef96cfe16799e3042a7d2cfc649143b610c95191d4de8f8b76b0581ccb7ee1d8af237153d5b128af150dd9593ed0c577a7c7f8fb7a8868504e3a5db5686ac7b94db04c2a72ad39c5822b4665fede0eed0e3ca09030bf676a99f14643e4fbd9dcab698378213e18cf9abf28b5b3abc3eebc5cf297760c79a6e07fdbfc12aea095543c246e48a50437e0e7774d4c30e8719304a58dab234a958bccc260cd66204eefecf2c9e0290b3974c5b4abff01040350c2a8e5514505296d6b1170d404a5493ac59a19408ef6b0c87865c3464ac95015b7fffab5e2433770ec5366510d466d255f3b5cb95f86122e4ac03b18acd584bc34690620e29ccaaf29351d152f2965996f184202c3282f11a6792e352777491fe6d01c36c3d606b7d5281f03ec344779b8dda4ecaaf468ad641dc55f002c0a44fb20b87bf012a56375dd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361dd1f325c7599a78d92b2d23b27ca74bab0f6f46d0fa61f693735ede031c6bf898751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d5c12d2886f924517b8c41f4755cb69ff55f68e740076f0e346dfe7ab1da23e202491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}, "failure": {"scriptSig": "", "witness": ["4d09028a5657ad0cef0fc2f60c361e3773fe48ca7c066bc0041df797f0c742dc8240da2b4a183b579a2615e3c6f32b650b7021161c2cd68b4b140d52a28f1f327d402865b29ec18d2ac856309782eaf390d19167c42dea8e75b0b423e58eb647481d0010515dba3334450c6f72c1932d37ffc239dcc1c55e72cc12947cfa10bf4eb3f73eee6574eb2e606c0b10a1db3726b8d8879f49f6d84870bc7aeeb389f59bbec5d4669b681fd7aa50b25a514e4ec63cf770e661f610279419ae35717412f5f6d7147dfcde9c04872bdf2bb9ec152e612340a0aa94b7faf636214c12084ce492cac3bd2b11e9685535ea207b8083450a8033211f54b676c167711bf6d267c45bf8716c7362a48aa74b21e6d2f097d1616d2c620345918267866b01224a288e0d13ea22883476de7b07a3fc091a8c4d5ca61b3a4272d582b0ba217597c987d043c17bcdb5e461c27f821988095ac1f9be21c229517a9eca4483ce3f0154fbf8e48903d53310948c5b975c6280c1123ae25946bf9fca2b249adfe9e685811b945a42035ee762bfcb4cab1aa383c4ec40b91f47c578f4313f922f01422cd61d301b9d08bb8aae7634bc891eb853f7caa7b967b813fea7311ffb0b4a94b2c28ea88be4d3f2cc3871f620fb394f201d75300b5b61839f8590da79ce80e0dc34e8704bf41c9ddc443333b65ed6a2eaf55174212f29d65f4634a54ecee6d2cab1cf0b07fad1d935aaf793c466687561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d058489ac116bc6dd9b95d4e3df35f96fc6c43c4fbdbaf0f126d19fb49e472fe6ff37e966b1384c4d5bfa916e4482452180179a80b37f756d07f3e2976ea2d444f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}}, diff --git a/txscript/data/taproot-ref/1de7bbede303fc60efdde225de97fe6e4cfb88ef b/txscript/data/taproot-ref/1de7bbede303fc60efdde225de97fe6e4cfb88ef new file mode 100644 index 0000000000..b184d42bcd --- /dev/null +++ b/txscript/data/taproot-ref/1de7bbede303fc60efdde225de97fe6e4cfb88ef @@ -0,0 +1 @@ +{"tx": "bfc6bdac0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705d01000000a466cbd7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4901000000510497b3033a5032000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8700643d2b", "prevouts": ["e9d1120000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4", "0ded210000000000225120803c4cefbfa0d88ba71bbfceadb0978872c77a948bd70ce562f9334bcd1dc6dd"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["0d8b3925a29252d5928eb1425abd42dca2f5f952fe4141bae1f69fc4e09910beef62953a7e1af241cd45ce1784c7bca02b687638ae539b8d5b981a59835debaf01", "855f152b8fe068340becfc15f1bfcbf7fd1d10ed67b0ef10db1641a82f5c73a95e3ffc225e28d9e339e24311efa6177664a6dfe14d34ae2022a0e8f14c1c150488d9f68f35e6c5e66a6410fc18eb", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a9c58bd41b8fc2379fbb89e979f65b4422719c0e5523b14d43ef7b58bc771b6141a604de8df597194a64a0393f98cc7dcb73e0445b1fdb8f7c5b9743dca7dd300000000000000000000000000000000000000000000000000000000000000009c334e28a41046a614ceb75041aaa8c50b3d2a63c6e199d1a52e17618ee578baf20b1a94752e5511701c811d8863fd07baa3bc138935a9aa0da4c40ccd50dd3affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33513086926ca65d1bcc0ed5fd54f0689e45ea12db577c49ddbeb7fb43895dc05fe8fc5bb3a8eb867f16081e9ff7aab4d1710b464ae04eacbcadea3e96deaa6db251d6000ac52413b8fcfff7ee8cf2a0e783127d3174d4b0c3d18b89562425fe50dc011f7abe9c52b51148917e176632021610f66786cf7eb22e578e382f5d8d23fd60d9f80ffd76c86606ccc070913271e3ae9763ecec8920c600546263f1dcb5d780805fbb369415a2df853983e46d2bbb7de6af62bdcc1630a3ef74128fab29321d4e4e64e89faf895fce335166a483ad5ec640d21f3dc9aeddbf4c594ddeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc129f5a01833e6f687b8d7acb7a198db8c9c6219d9d9e3bb04eea564e9722b2bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5376d1fd9eb5bc7ed5f740970802297606290f8f37c225c2d56c45dfd2e6b2216e069c73ce93231aeeb36f8ec19c13d481d4f01d9a4d1da23ff324a7a0570fe5cc68a4a01876e525de7e7cb051ba59788552a64f2653fba1ab2a5862c0786ba94a406f5d2c9bf7176b77884a7beef7c28d71927f64fa010208f90a29e6799245ba64a3b0e8a7a4761d9d26d99b9a31edd5b957f99544d69c34a1f500fbcccfd6683087cfbe73f76bd4afc2ba12238ceeed9d84dd753404b6da4208c999aa5cd70000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff489008f17c7972c9361baeda34a36d693684286c266b690add962b31e70e04f88683fce20851725ae0c5e6b4e234a0ba7f9ce1f4f167ad2a67459773200d227ceb346fa033c86bca2ab196f3d9a277ff388c861d6eb62922f27c51ccb8a9515ac9233b1e9b73ff54d05436db65ee331970b47db36b384177a6176e14616acad5c397125a5fd584d44faf56567216dec2289faf20a81dd2d3c462bd2d16d3b6a3b0067d58d044ddad4bc6ba80633bfa6aa3c1007d2d9f72e9a975c5f3b715c0baa9ac4db0116efdd97b24b49f296c9041697ac511d91986401bdd1ddddaf461dde57dedd0587e36469271958e71ff56af782b2dd92340df151716636c42b8eefb799c3c66c1c579c0f0f16cbea9c8bb5478e0bc79b0c66714798e9a9f95a3480cbf25c48716c0c7c3adfaf1388e411ab300f1a46e9600b2871d546ceb556d8f82ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb65226b1358c415f1ffc2f1e836aad1406ad36617332fd7bd26e688618d9d1200000000000000000000000000000000000000000000000000000000000000004f6b4fcd8ed4389c0c016bcfc73e722ff2c65d6bbb7995453a88f1b68a0776d30000000000000000000000000000000000000000000000000000000000000000425c88510c0fa6d7bbbe212f5347cae05e80400212515cb35fb6c60db3dd1fc8ea7f5252bf9ed9ae8b70f35a93b421ef96a8a90684e016695af5f35f1be840966ed52a2f8d8268f293b666f6f7d5aa84a6aac3b3b1b80087b14bbfcc13b0333ca86f15b40294dede979afc3e173c68d45e38f7197a4cec150a9d4e5cbe441d66000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f421c128db20477f4d8b18e4af2cfffb92d01f8bd46fd88e4ce69d41252731e0d0e50c2c3729f7be46608d0334d5cd7dacbe28801502d31a3b18bc7c1a1e65fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f642cd6eb08ba7b702c471f5f14c176fba15056ed0fbc4bf77626d64ac3df7cd152295262efbdc1502c9f6d815a04a67eb1cd0393bb4c5f67e1287543a990d8a549c25773a3b30a38f5bf32ca94b5a26c2eb1c78756bfb210a8b3751f46341c2d7a7bb1792b15814c782f6ab02c7a34c534ec00563f34ec1822221a0ee6b7df46404cd4305a0820cdc24ad9783542060f3c033aa489f191cfd014fd227a056a34d0d157a1b71afe486f707ea2d249ca1058b7d3a7b6425c4d2393611ad1d713029e075b5bca6f59c6777db817e96677c5e3626cb35248a4dc2f5d905f7071839ff0b8c72b268e09099c620c2f720b27733db3810b619bec5dcdc11edc7a0ae7867d4da97da20fe8559412ba979c238f4dabef763b01c01eb4750d03490c5bb97c130b7b13378352f912eb3b93a5d722c0a912b8600898fd38202e24ea55152eeb00ce84d720d311b5627fab1f4fab7f524bbc51b1a164b81164d54c8f59d6a868df0eeca945bba6643b776bc7f907f2d9b76186b6876b3bd714c0720ca7d9f7ffe4bc49df7e9fcc86a3e3effd7827b57255624f65787cbb010d4d23c23b0a47e306b1f0458efb8eab487be7e5493f2c193660054babf701fcba9537466a092a38187bdfdb079bb9d7bd4be10adaf2b07ce9c9b807da99a11642831849b4c8f0", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["0d8b3925a29252d5928eb1425abd42dca2f5f952fe4141bae1f69fc4e09910beef62953a7e1af241cd45ce1784c7bca02b687638ae539b8d5b981a59835debaf01", "3cbb21efe1567520b2461b1a88d0d35f17e40fdf502df93155271bd61c475f8402b18eb1e289b75652078d6547c204b016796896ff9a184553e4426fed5aeb508eb5d016b3f0dbe04cc6b9a871", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a9c58bd41b8fc2379fbb89e979f65b4422719c0e5523b14d43ef7b58bc771b6141a604de8df597194a64a0393f98cc7dcb73e0445b1fdb8f7c5b9743dca7dd300000000000000000000000000000000000000000000000000000000000000009c334e28a41046a614ceb75041aaa8c50b3d2a63c6e199d1a52e17618ee578baf20b1a94752e5511701c811d8863fd07baa3bc138935a9aa0da4c40ccd50dd3affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33513086926ca65d1bcc0ed5fd54f0689e45ea12db577c49ddbeb7fb43895dc05fe8fc5bb3a8eb867f16081e9ff7aab4d1710b464ae04eacbcadea3e96deaa6db251d6000ac52413b8fcfff7ee8cf2a0e783127d3174d4b0c3d18b89562425fe50dc011f7abe9c52b51148917e176632021610f66786cf7eb22e578e382f5d8d23fd60d9f80ffd76c86606ccc070913271e3ae9763ecec8920c600546263f1dcb5d780805fbb369415a2df853983e46d2bbb7de6af62bdcc1630a3ef74128fab29321d4e4e64e89faf895fce335166a483ad5ec640d21f3dc9aeddbf4c594ddeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc129f5a01833e6f687b8d7acb7a198db8c9c6219d9d9e3bb04eea564e9722b2bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5376d1fd9eb5bc7ed5f740970802297606290f8f37c225c2d56c45dfd2e6b2216e069c73ce93231aeeb36f8ec19c13d481d4f01d9a4d1da23ff324a7a0570fe5cc68a4a01876e525de7e7cb051ba59788552a64f2653fba1ab2a5862c0786ba94a406f5d2c9bf7176b77884a7beef7c28d71927f64fa010208f90a29e6799245ba64a3b0e8a7a4761d9d26d99b9a31edd5b957f99544d69c34a1f500fbcccfd6683087cfbe73f76bd4afc2ba12238ceeed9d84dd753404b6da4208c999aa5cd70000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff489008f17c7972c9361baeda34a36d693684286c266b690add962b31e70e04f88683fce20851725ae0c5e6b4e234a0ba7f9ce1f4f167ad2a67459773200d227ceb346fa033c86bca2ab196f3d9a277ff388c861d6eb62922f27c51ccb8a9515ac9233b1e9b73ff54d05436db65ee331970b47db36b384177a6176e14616acad5c397125a5fd584d44faf56567216dec2289faf20a81dd2d3c462bd2d16d3b6a3b0067d58d044ddad4bc6ba80633bfa6aa3c1007d2d9f72e9a975c5f3b715c0baa9ac4db0116efdd97b24b49f296c9041697ac511d91986401bdd1ddddaf461dde57dedd0587e36469271958e71ff56af782b2dd92340df151716636c42b8eefb799c3c66c1c579c0f0f16cbea9c8bb5478e0bc79b0c66714798e9a9f95a3480cbf25c48716c0c7c3adfaf1388e411ab300f1a46e9600b2871d546ceb556d8f82ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb65226b1358c415f1ffc2f1e836aad1406ad36617332fd7bd26e688618d9d1200000000000000000000000000000000000000000000000000000000000000004f6b4fcd8ed4389c0c016bcfc73e722ff2c65d6bbb7995453a88f1b68a0776d30000000000000000000000000000000000000000000000000000000000000000425c88510c0fa6d7bbbe212f5347cae05e80400212515cb35fb6c60db3dd1fc8ea7f5252bf9ed9ae8b70f35a93b421ef96a8a90684e016695af5f35f1be840966ed52a2f8d8268f293b666f6f7d5aa84a6aac3b3b1b80087b14bbfcc13b0333ca86f15b40294dede979afc3e173c68d45e38f7197a4cec150a9d4e5cbe441d66000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005f421c128db20477f4d8b18e4af2cfffb92d01f8bd46fd88e4ce69d41252731e0d0e50c2c3729f7be46608d0334d5cd7dacbe28801502d31a3b18bc7c1a1e65fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6f642cd6eb08ba7b702c471f5f14c176fba15056ed0fbc4bf77626d64ac3df7cd152295262efbdc1502c9f6d815a04a67eb1cd0393bb4c5f67e1287543a990d8a549c25773a3b30a38f5bf32ca94b5a26c2eb1c78756bfb210a8b3751f46341c2d7a7bb1792b15814c782f6ab02c7a34c534ec00563f34ec1822221a0ee6b7df46404cd4305a0820cdc24ad9783542060f3c033aa489f191cfd014fd227a056a34d0d157a1b71afe486f707ea2d249ca1058b7d3a7b6425c4d2393611ad1d713029e075b5bca6f59c6777db817e96677c5e3626cb35248a4dc2f5d905f7071839ff0b8c72b268e09099c620c2f720b27733db3810b619bec5dcdc11edc7a0ae7867d4da97da20fe8559412ba979c238f4dabef763b01c01eb4750d03490c5bb97c130b7b13378352f912eb3b93a5d722c0a912b8600898fd38202e24ea55152eeb00ce84d720d311b5627fab1f4fab7f524bbc51b1a164b81164d54c8f59d6a868df0eeca945bba6643b776bc7f907f2d9b76186b6876b3bd714c0720ca7d9f7ffe4bc49df7e9fcc86a3e3effd7827b57255624f65787cbb010d4d23c23b0a47e306b1f0458efb8eab487be7e5493f2c193660054babf701fcba9537466a092a38187bdfdb079bb9d7bd4be10adaf2b07ce9c9b807da99a11642831849b4c8f0", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/1df8c615c5b7d5080d1019801137bdc97c72d639 b/txscript/data/taproot-ref/1df8c615c5b7d5080d1019801137bdc97c72d639 new file mode 100644 index 0000000000..2e44f05393 --- /dev/null +++ b/txscript/data/taproot-ref/1df8c615c5b7d5080d1019801137bdc97c72d639 @@ -0,0 +1 @@ +{"tx": "1a1da20f038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c496010000003477079360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127029010000000b0db5c160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700e010000000bfac8b303bf195b000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487198ac73f", "prevouts": ["ed513c00000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "fd2d11000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9", "5ac90f000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "4830450221008c530efe6c078e627fc8e56d518195b4a6cdc486b85831ae546c4d935b8db6a8022008d2f9353e940029a8a96fd8568578bfc9dd8abeec91d81cbb6f4b0b79ccc62602004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "483045022100a090d756e9f1ed649b6ef69b8d83da87c604ea10e700ad0bd9547163faa215fe02201be9fd953ca42c83e176a0121cb17c70887afeff4b550e2c6aec0df9331e64c80201014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/1e2b8ba68f2655f0f5159ba8ee446f920bd6f384 b/txscript/data/taproot-ref/1e2b8ba68f2655f0f5159ba8ee446f920bd6f384 new file mode 100644 index 0000000000..ab0d401bca --- /dev/null +++ b/txscript/data/taproot-ref/1e2b8ba68f2655f0f5159ba8ee446f920bd6f384 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6900000000070fc07ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf680000000062cb832204efafcf000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2c000000", "prevouts": ["0697650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "24df6b000000000017a9149d4bcb1ed806c9beed692a78614f8b90a68c708187"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_50", "final": true, "success": {"scriptSig": "", "witness": ["ef1c081533d72348c49b6dced51bf3dbe9f33e3a18e76bea3a51e8e9558f908ea49b2cbbabf6cae85ac397dba0cdb9971da85a595f57d236e6bc533d6fc7783f83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1c068c111f27015bcdc64135671066e2c873572f3dedb5187b98592e47212079a9e22be2dec9dd33300968d016a93d51d6d0074216113a69215de44ee33f0fb550", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/1e2f14f392e271b5a594679f83b4847d83b8109a b/txscript/data/taproot-ref/1e2f14f392e271b5a594679f83b4847d83b8109a new file mode 100644 index 0000000000..d6c765871f --- /dev/null +++ b/txscript/data/taproot-ref/1e2f14f392e271b5a594679f83b4847d83b8109a @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41d00000000c6f337eebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1f0000000004cc6ffa02a323b300000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987074dfa5f", "prevouts": ["ec8d3f00000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "768e7600000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090289df5dfe666d2cc917e1f55821de1ab143027be0f2ab94845395685182a511a4fbd06f6550babaa8e15cbd24d6090a762ac41e8fd6777ee121423f4ab9fadd448061d721e9614ef46665752ccae11ba8fb8b3e0e8635278d6d1a41575350502d3532aced57cc6793ba7b319de455086c750edec36be168460493ce8ab3b4959284f08f22e5455741738407ea852b845c813effc44941197c00d9cbae33c2a21790845a760592fc96200e7b9f4615e4f65431e19915a5bf9c397b116ce39cba73edd44e22dbc743352ac7715af58be0791ff7ca80f9745a5ed24d555dde57515806c23d55582ec53a78cf66ae28835200ddbefe49c6638d6e4ac21951af73e631a24b39dc18f31e4e2f1d9641591faec6e4fb5235020cc2020437a11110d38a1f5c64cb25df9fa762cceedab2a362acda54590d2a7b85a288d58282b238a225ae1007afdf53e71da548897ec153586a02273985403754dd9b138834e14ef64fb64cf735a2a0a17854149e7187c00cd216f40a40b7712f585792053349e23fed08c9e0a7d4c9a772ba16396a8be3d9d93ed09296f0e7e5246f224c75e33a0133b5d42eeaba07f288a367dfbcca385b7ef9d4e7ff9e1d0398d7a543691261affa79c5b18867b36c9df9a813aa07fa3e5b8a6cebbc5e1b7caf968837198d1d6563b94c42464bea000a1eb4b8ac9f1585a8adf23ab097311917b61d777514e51709c46abde176591b5f1f3775", "387d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db3476583035a6d1b88195251aaba7e67b83c65ae24581826bcc4112443d611c9b60e5914c50703ee8fed26b085ec7bf74c965cec3b126e70865dabf0c3179e2a12168afdb4ef286e7748ddb08cf408d85b089f504486378d2bfb535c0d2875b"]}, "failure": {"scriptSig": "", "witness": ["4d0902033937b9697af058a166983e989845de94fd06d6c9d4e471685d7514abe06a1f7b44e0e957743d407ea3b60fce90065c8a69f67553571af6e56d23ebac3029343636cac22ff003874c61d825dd304a5b4eb7b01eecc990cb7d6c7e557a028700944f802fa0925ca5fde07f62cfe3a4103407279040fa481a3f7a8a7624b1467461abe9d43be8e2c5b350a094a2e21135a130be57e1b8d0d0165844055a60a68cd4ee92988958cfb233f39a1bc19ce82db3886b7472b5343eba62d15cb40cac2848da8082b76e09355473a7f986257ad0f6aa09cdebc338b874688b9e123d1eca488fa7a21bc2f1b277af53a467efda2440e583114274926d5a534c08a32652f9e752cafac51892ef0dfa4f03fd75bd9681254cd5d2fa7109b78b3cf876db2b014129cfd6d4233f265ad45e8a9da8a3f10c76f877bdebe043d1950124bcefc63a3533481808ed912ed38e0eb7f1d1ff1b7c1feaea1a6dc09cb7a6b287cf2cbb2d43d5cd702c17d493be3e007a0c8c727ae57bc7e743d62a018985e2b0102cdfd50e4a6641993b6406da5b3bb3b55cd017731a74ea96e041a25b66a48cac438174f9ba6704bdcac41446e98f9e81fc9473d27a18e6149fe63b187e814b0d14cb104c8d6f0a0b468371e8af6ca385b46067668053107ff1429326fe98adad3b6cb9dfd822ad3162ab16909d987a0ef69448dcfdc5ec6bebfc02e4e9ad4776d41987b031bc5d4a361a1fec75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365bdf44d130d48ddf5aa080cbaba430c6470780414dc9784f104c605fab81d466c542915153386019108494d00e6bbd0a8a4ab824ea9158d8694b82aeea9ace0ff7118923d14a9704f5c6065ead9bf1df659362e443facca38f7fc54a29b18e2b8fa601fcc68a78472d280e0a6f10ace0c22dad9ad93c154f995d1132d7b2f793"]}}, diff --git a/txscript/data/taproot-ref/1e2fa5e498506cf0c5adee563fba8cdb0900cb86 b/txscript/data/taproot-ref/1e2fa5e498506cf0c5adee563fba8cdb0900cb86 new file mode 100644 index 0000000000..197f029eff --- /dev/null +++ b/txscript/data/taproot-ref/1e2fa5e498506cf0c5adee563fba8cdb0900cb86 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9a01000000b5f930dadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8d000000005ea06fac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127044000000007a558cdd0125890e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b1000000", "prevouts": ["5c0c570000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "7bdd4c0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "fc3d0e0000000000225a202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902311e76f30cd86bd8a8820920af5ab36e6884f47add64465d23defc7cb327af1f69d1d0ca4e9b1e2368af7128794c2cf73ffc8f78cb9d12fa45d3ba838ad135a44c6344ff062aea4403e91b8bf9c615f45dc7a2dc87ab8d0e7538eb20d569bfdac14d72c4f9cc555556c04aefb1d04182b2ef05520cf474f7a8f0443ec286dadf8c1833eaa6f1ff5b8dc0c2b202311f4725f8f06c9394d33b2a9cf82d17a5cba6675aa8561fbd22086737ab6306291c2e0b7531ba268c30ca69b2bdc1cae06655dacd427cc8c8919249e0c33338c45ff004126d0b2b782ab1af2d0e82085d2a1688cbd6fa966627fc2283108c48ee1ed1a777ccbf2723701701f01bed96a5906857e08695a7fc4150eef75ccb1f7df5c7dd8802fd40e09e9006bafc2d44d3d06842700bfa95863e667a6b6856e614dcc829b1690bd5d5593a7349f906065d8f85ec4d23d0fa8fcc6fa46519163627f8da5c94ec01d4deb6cc1e8e823cae233776bdf47108d142b0b9ff2856a4eac6ed2916ccb09db4cd6ca6415a052feb625494bb1eabcfc555bbad3a01e43a17581ea500c397249b14e542efcd04e394569f2e3f4b8faad28e28598f384b917433ccb9cc3ac1842c07abceea267b86c33eff30a2184f8c8ff2876b8a785ebbb4b461eec6afb1c22083f65f7dd384f53f8c3b7c4490caff14b1eded19d8e967b77744633b9d9e70c927ef17bf841447113603cd34c41105d4e9bc342f75ef", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5170b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720cc28207c7af5a37f80d9c7bda068b6f89abe5b5cf72eaf80ed3e31c2f1c9dfaa6c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}, "failure": {"scriptSig": "", "witness": ["4d0902352373deff6fc3da049f4124623a135a6453146cbaac9b4da0cbaebef15e339213472c31bccb69db3d201c31f28b91cd1878f7d76f2339edc48b0c8588a521d2fb4ecbb2d4374c8dc404eb072a9b46a0506a9827d98ae409f590aaa2d98edca01188e76b3450037b3518144475ddeaabbd04467d32371dbe579a9422d9896732c308e9659717f2b58abebe12250105b35b1dd56bfa3b8fc42cfabb343a38e934c80cfb66f8b4886b15e372a9999ec4afdcc9326b89e77a26aa4dc046020061882aed4623aac49d20d08a8ac8b8823c223e9ed68f5014179a9cb112cea8b255d6fe471f1127f28a269b9d40b14dd9862782329fb6d7bdc259d3cc5cf980c842551965a28ec33f715af105bbea7c19ed33f5b335927676a0a59d57577c256f4d5ddb1659e9c52d496d5686f08fb18a4a83f7aea273851751af42f1756bab592bc2ff33014dffe01b70cba23b501fd86c083ffc6fc0a7c92477642a62576b273613835ab50d243e82cbacbfe88b017813779804d62bd346faa016e60923ca626517c56d2ba0092c0e4db8dc7c4dc4fa3d13685585fad0d374677eb6cd708dddcfe9c7407f19ea2a0be5f4859a40b7352c6d4fc63a929b1ee055aac4ccb160dd3645ad39a5925978e94a7ad2a630f45e6b298804423f5a2b3470856d5ac98fd7ab1d0fc664fa92ad180898fb2f5d92395cc7fe1b9f5b0c8196b4bce59ec33537a524cb88a75337c60f8f8c7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e190840bd75c8ee6dcc19a553b4e3bda7516a8577ecf1c365a05a7b0ad0f101a1c215b4c606cdda8e0cd0631e1e6566a3457cf9b2eb8ccfe9cc1918e65b703d3f7cd241e6bbc5ebedd8f50ae206f1f82a1e41ff5c139455a0ddb0d368f52a47602"]}}, diff --git a/txscript/data/taproot-ref/1e32a9cc12b73e8a61aaf4c846d1cd0ffa78bf93 b/txscript/data/taproot-ref/1e32a9cc12b73e8a61aaf4c846d1cd0ffa78bf93 new file mode 100644 index 0000000000..ec0507ef06 --- /dev/null +++ b/txscript/data/taproot-ref/1e32a9cc12b73e8a61aaf4c846d1cd0ffa78bf93 @@ -0,0 +1 @@ +{"tx": "e4ba8c7202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c69000000005862f3e0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcd00000000a6beadbc02bf667500000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d7010000", "prevouts": ["d38156000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "608c210000000000225120242fbb4e68c81dfdc905839a5aa96f20c82583acd27e1bde1e06ec2a83f43f26"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/oldpk/checksig", "success": {"scriptSig": "", "witness": ["b00c0ad3306860ca44abb8145f06a470bab5db8e74e2ee20685f616131eec486251f6e958508eb5630b3319ddb7a045d8393e63e7135ef2702230a82aac89c89", "2103871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368f39a0868157845cb7ad47461625d394fa6e029b849baf79f532c059eb0c90de3e8a461a0f368c4eaf94de3746540889bc99fb0c1f5702a0984aea55c9bba1eb22670c87c91ee1fda6f8c1b2dbad04ae44c07618f7e68a5991e1d29a00ee01dec96075c0438de6f0216cdd72c8aa39ebb45de420e1f8e51b4e4692bf34a2e56f8158c8b95398c311670004bd9a4afbeae52e97235779550b29728e38cbd58716465db9b66632241155b259b456613f75f4b6110df8d845f1977a6a00467ac0fb2de7e81d2fc1490aa9ea09216c54370d636a110d3f6d009a2836912482a02ec1416c54da450879e4fe6a281fd904df5a47457cf3faf8fff1fc7cefa1429c1f837cce0c16b4ac2bc0a56a4da93975e15b81bed03d043eda7c9ddac9d51a909cf984b496ca51f1d59b029869e88466a950803e0b1fd0201aa98a66ad53a0d4a0c956f68441022cd3a444817edbae2583eb76683b8480293994d059289218f0d4a79d976568d9e92c4f00b9c8d7cf447c76042a3234918f31ddf63c43fdd94d6a32c000fafc31f95a626ff6b47272847de898d0fe9392d6cb40a47f54dc91f8f8111360dc44ae3d69de3386cee559eb49e6c76a737e105f9117431d64c73a13a31f98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["6f0391293f93ead6b26939209e234eabb3081854bffef81e74c6ba479b736d0c96a9bbe884e5e6c9c8798b5176a6b0410879165953057fe295a782c7faf2fa0b", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cd2d09394ee01f4cbf453b8e43120c6bca0157ff833036c4a91161ae8d6db3dd3595e47f783dea9cd898c640c1ccf4b7d0ff5bfa4236f535dc6b4728299c1d69fb9e9eefbd8dee3e5857c0a5c3742d0e58764b1e6eec73b89290af63b7ef8123f752582a11afed87b1aeeab00a91ac5167325e0fc3825def3a8307d2082c1acae8c13f957496bd85a8bfb196b41115877f1c292877d449cb5d56eb109a1f8e695176267bbd1b7867e2eebc439e9f1978d6a17134b75a8bbf0107687388ddeb5ca20cf31e30816ef7bffd0e43d4efa6c46d11185474d89ac75f693a7c477baa289311c864108ea260dd739a7c927abea94bbd3ef2fa436b5348a12a03476bb9e451f31f95136dbefe9a42f2bb6868f993acae25cfce8fc0d73b984508d267a487b041864f4ad19f6b2782b89895068e96969bc0c0cb50b64c3b84612df4c73208c4bcf6cb070e67449ea1a036232a8155856b27be4c634558db013e06b79c26858824757e3ab18b9476867ac69e63e36877af9fee4aeb519472ff5a504bc7e1bb8a70b57e599289922abee7f7cb3f5c4b4e0126255c9af59ddd6c8d572a0551d9a0b10fc29ed9ec9ba811a78159d56d191855f20d80384a7f598d54defaeda75074e07476023602dfde1c8d0d124f96edbab4af8198f97e6bceba6cad7de517a8f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/1e5a2d83584c4f1ccd8746aa4cc87f3b5c520e63 b/txscript/data/taproot-ref/1e5a2d83584c4f1ccd8746aa4cc87f3b5c520e63 new file mode 100644 index 0000000000..36fb354dcd --- /dev/null +++ b/txscript/data/taproot-ref/1e5a2d83584c4f1ccd8746aa4cc87f3b5c520e63 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6c01000000caf387b6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0701000000d913f3dbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf000000000d47bb5d904ec5a0d010000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acef05f434", "prevouts": ["5591730000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "a0b64e0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "88954d00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["624c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f393068994750671244e9a386d61bbc7bdd03428d67a6b3b3603ff438afc80a6abc42ab3738335b78a2a7135de763706b017ef32cb75bc24ca1210f74f6e5b7b3fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}, "failure": {"scriptSig": "", "witness": ["4c5262", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93623b186fa626e8512a5fc76cda23f4a60fbbad4c2c958c923f9740c685dc8fa339b124451a95f66d328740c8f74b6bc79ec66573930240463dbcd03d8389735ccc3a658b9783cc0a28fcc02932d4b85eca4f49aba0b4fac0b36a7e3a0001ff4113fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}}, diff --git a/txscript/data/taproot-ref/1e754a40c050fe3c356b0e253ed22633f2c5edb5 b/txscript/data/taproot-ref/1e754a40c050fe3c356b0e253ed22633f2c5edb5 new file mode 100644 index 0000000000..f34de6f459 --- /dev/null +++ b/txscript/data/taproot-ref/1e754a40c050fe3c356b0e253ed22633f2c5edb5 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e800000000a2a1cdefdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf5010000003ccba3d9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5100000000276aa1a901227028000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787240e3c58", "prevouts": ["3b470f0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "fb0b200000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "0b2527000000000022512067225551b50f550878fba08cb06856b99d76e57e98d7477f94810d7b1bff9dd2"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dc50a39cdaeebb2a650cca1339da469af920634404b8985ff645e07812e34845"]}, "failure": {"scriptSig": "", "witness": ["6a10616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/1e841722ec03b5be4c1001e90d8019bf9e01d892 b/txscript/data/taproot-ref/1e841722ec03b5be4c1001e90d8019bf9e01d892 new file mode 100644 index 0000000000..5e8df13016 --- /dev/null +++ b/txscript/data/taproot-ref/1e841722ec03b5be4c1001e90d8019bf9e01d892 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703100000000aae7c1ca60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127001010000004823318f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270060200000039d291e50304902e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e70b3b865a", "prevouts": ["076b0e00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "6753100000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "176f12000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "b17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa6d4441481b861885f5ed94900bbd5862c55ac99196b75719f05c0af3923d20525bc912f5bf4aa2c9ddbc9747d59c78f40d0a0aa0a8a4f22dc70e3f9cdb9b6ae3"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d5f4fd4f38de76daa30397659fc5eb995186dee5e848d8b406f0f064ef43f0c2e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8d9568d9f877f6ca0cee9df3d4970d26d0e286b65747316dde3c995de6e71d9f55bc912f5bf4aa2c9ddbc9747d59c78f40d0a0aa0a8a4f22dc70e3f9cdb9b6ae3"]}}, diff --git a/txscript/data/taproot-ref/1ea62bf92cf8078007e5cd279d0ac921980c1395 b/txscript/data/taproot-ref/1ea62bf92cf8078007e5cd279d0ac921980c1395 new file mode 100644 index 0000000000..dd0138915a --- /dev/null +++ b/txscript/data/taproot-ref/1ea62bf92cf8078007e5cd279d0ac921980c1395 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3501000000d42eb6c660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ff01000000c3ef7ad960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270af010000003e9053a503f715690000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7a21d363b", "prevouts": ["1cfc47000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "edf4120000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "94c6100000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5120e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e18e3807b59d4390aa508570eca32c61fc450dce8c5cf98deda801e2e8c3fb4b07491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ed9bc7b6602c1c15305ed2f4c8ec9cbeff7f3a1ef2517417313cc014db5fff98e3807b59d4390aa508570eca32c61fc450dce8c5cf98deda801e2e8c3fb4b07491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}}, diff --git a/txscript/data/taproot-ref/1ec26ee9e524029b8cf64e318125007a12c085d1 b/txscript/data/taproot-ref/1ec26ee9e524029b8cf64e318125007a12c085d1 new file mode 100644 index 0000000000..8d4839b481 --- /dev/null +++ b/txscript/data/taproot-ref/1ec26ee9e524029b8cf64e318125007a12c085d1 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fe0000000085a123a1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb8010000002f037acc0296cc62000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf7000000", "prevouts": ["d9ef3d00000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d", "f66a270000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c84c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93666ea2a418f0de61648f1846bcf7f8f7eac0e21721710bf1aae8a61bff50d06c920e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b553f13873b7614c747e02d52f281322dd98cc8d4ce789920cf593b75c6f05693959a095ba405700a8bdcb88c47f737d45523ad768f5b3698c80add34f2e764b"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360379d19db0294afbd483f2a5266502c79758d505384d45d9b44125b08f0b0e3c70901b40dea8c7a5ffa56ebe32dcbb2bdc70f6165f45007f6a309c26f1d76d473959a095ba405700a8bdcb88c47f737d45523ad768f5b3698c80add34f2e764b"]}}, diff --git a/txscript/data/taproot-ref/1eed48f62357914c0650cba567a06e37071db51e b/txscript/data/taproot-ref/1eed48f62357914c0650cba567a06e37071db51e new file mode 100644 index 0000000000..81afb50d68 --- /dev/null +++ b/txscript/data/taproot-ref/1eed48f62357914c0650cba567a06e37071db51e @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e000000009ccca0ec8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44301000000298165898bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e700000000f154399c02849c8e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966d030000", "prevouts": ["a9371f000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "49f43300000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85", "fb803d00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "107d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936acc696796e153717ed5a6a385f9de8b7611279c250cec566122acf9b81ca854846c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada7506a3091a1e28dfc5b9aac4646748f840add9c91a317c4120c5f1dff96d2e4520b5ceb13d27db1b37ec8ee9ee9482aafd08fc62c5401b1fb7c7b4ff374c3d"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630300b02e92706ec4fd7f3b61fec60afc7cf4f75cde7fe0ccf1bedc3ed3184dadad4d220d15ec254ba214a445cc73922794d5f92559e27b8850a422e98de131f09630471a62c8657382c38b342878f0042beb3ba209e0ca1417f9db2e3d45f6dbd940ade039b405c8439b762bfbc73f9441ef227e6f687b6d94ebcbac32155c7"]}}, diff --git a/txscript/data/taproot-ref/1f06a021e51a7104e4b8be0ce9c51232c8fd6c77 b/txscript/data/taproot-ref/1f06a021e51a7104e4b8be0ce9c51232c8fd6c77 new file mode 100644 index 0000000000..e95663aaf2 --- /dev/null +++ b/txscript/data/taproot-ref/1f06a021e51a7104e4b8be0ce9c51232c8fd6c77 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e601000000f77c8100bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf780100000075a884cc0355c5ac00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd9000000", "prevouts": ["6fdb3400000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "f282790000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "557d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936140d24f18a3c79287a65dbdab01f63e645309929f2cbe7a876d35f25767643489c6f5bbec45690fe95363697d7c9a9077046b35079592ab1dc3c0638990956b6a4c5d50721208c85113b157b4dd4688510f63bd33d4c90ece0d9e0afcb8224b1"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936410b6b76a639e4f4cca477601870e8f5c1a65fec44bb24e64b1e09572c2ddbf52a116e3d98c0753c1b4fce835beb402fe845fa277dc01c5b4ae7ac2a0861d05e2d0ae3a8a51f8512ed3183c6b189898e3d13807be8720838a97bd7135cdf46e7da77d1c2cfbe9569ee5db2c51580a9857624040db9177af617be0771cc5b8a1b"]}}, diff --git a/txscript/data/taproot-ref/1f21715d338b4550c3e7e74321d26de8853626f0 b/txscript/data/taproot-ref/1f21715d338b4550c3e7e74321d26de8853626f0 new file mode 100644 index 0000000000..4b688fcf3d --- /dev/null +++ b/txscript/data/taproot-ref/1f21715d338b4550c3e7e74321d26de8853626f0 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c33000000003fb3db2960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708000000000f56cb0cedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5600000000b56ec84c033b18af0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac87d19161", "prevouts": ["5469470000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "ad4f1100000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "392e580000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "84", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b09f12ec1a5fa4aa343993f316f0126821d68bdf7911bc110cb6f7136d98f163462b9d29a734e556c6b2d2347029c074a964aefd93d416389a14ef3ddb3da113c419005ce053ef5676128682d79317eecff4f27ad8f3a341c1729484208650bf5e521f6248097fdc64ff5a0a6cea9e07e7c649e93dab8ac6058acbfaf1ad70aa"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694086fc36ff4db5fca7b596fd90c3389887398c2c7f02b2c132cac3937a1991e1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900459910ef1376b2f57d6157bb9e8c31b4bd4b9d07432c4b683bf27102948dfaafec7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}}, diff --git a/txscript/data/taproot-ref/1f33b328ec921a865dddc299139161f27b477147 b/txscript/data/taproot-ref/1f33b328ec921a865dddc299139161f27b477147 new file mode 100644 index 0000000000..037da6c355 --- /dev/null +++ b/txscript/data/taproot-ref/1f33b328ec921a865dddc299139161f27b477147 @@ -0,0 +1 @@ +{"tx": "997c8d6803dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb000000000b13b4e848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fc010000003b13f7f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf4010000001bbc0c8c04cff9dc00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870cba8322", "prevouts": ["4d2151000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec", "2a41350000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "170c590000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_cd", "final": true, "success": {"scriptSig": "", "witness": ["7c020ccdd67522f4954f025bc3c4029bf6164a536a8eaf2fab9499cb2b9b3cc802e223354bbfea41e635ead55aa4dc3b26215de122527204b933e47ffa7e833902"]}, "failure": {"scriptSig": "", "witness": ["3a28164e5b3e874a2836cbef678b40dcc4dc2781d1a67213d7539de84f36581be89fb9bb78c03bbfb4c487c0b5efbb095eb70616f6f5b0a7512dfd5f99d9c262cd"]}}, diff --git a/txscript/data/taproot-ref/1f59389661d72064b929ee2bac0a3f2782c99fb1 b/txscript/data/taproot-ref/1f59389661d72064b929ee2bac0a3f2782c99fb1 new file mode 100644 index 0000000000..7ff86cc2ef --- /dev/null +++ b/txscript/data/taproot-ref/1f59389661d72064b929ee2bac0a3f2782c99fb1 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703e00000000c3348ab560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707c000000000d6403d70465f522000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67f64dc44", "prevouts": ["2d431200000000002251204e94ede8d65c6640c4e6b607af4038eeb61cf5c03f43315636aeaf4bbf4b4fcd", "482b130000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "success": {"scriptSig": "", "witness": ["e2a5abd0faf03d04bc444eee9e8c8eec00144ae37a2d3b9401bad6291682e856fefb6736fb76aa669edc33000bec526f257566c9295c3a2653f86a32461895a1", "efe555c8f4b6a3941cb6dce8d7c8400922fbfc61c5fdb2d0cde49084cd3996329d7ba79e95a91d2cd4dc65cd1b2a6eed8ab75d777d997e4ba77b10357d95d6274a0a9c248234c476c9e29d0509742cc1df33adfc6bd8ba12bdb0550ba0479f5666a7a08b8be84adc934b049530fcf55089d12c2b99fb8a5dc9e3214aff70a6dbc18e0e520de477bfa4910cdcb7f9fe675163492c24b5ae253b1d143f22ce8a4ec08aa32edb96843be21139399feaab4242cd48505626f7084f692a1bdf71a4801e2203457fe527f73440e21e25b2a1c07772c579a116193a3836aa4a41ccf58af4eda33071239c", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10ff8ff84e2c74b185c3719598e68da490345cea6c4dad36e38092287b147b2bf95c996c233af882906f9dbac1ade951ffbcfbc851784c4426c4244530b53a718781d128360fcf147d876726c34cbb43628eaf8cca219716c2c6c399cebcf5a"]}, "failure": {"scriptSig": "", "witness": ["e2a5abd0faf03d04bc444eee9e8c8eec00144ae37a2d3b9401bad6291682e856fefb6736fb76aa669edc33000bec526f257566c9295c3a2653f86a32461895a1", "04b0c465f4deb7c2f40c81ef09ae86a825a63529d20e6890ccf84f57486afd6dfbe76d6b705ef0446b5da688955e1cc8051702612f445b32e916714da815ba236228459751a0cf9bf26bfc36d1d08531523acc683c8cbbe60c0d0c85e7b63d17de5ed6ecc10b6a23383fac06e92146a36874a968904478e6b02ae0eba2219444017be61918e25839a19230c345d0785bf0fb6ee2bb82813e632c3fbc336524883520a8f08c4591dfaae7a2cf78c8c543ad22e8772707ad7ebaff1c34f8cabcdadc193f1cece0af97125c97b0c4500f9200b9a0f623ba61bf84b957013ea601359c7e2c7df8d1", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff10ff8ff84e2c74b185c3719598e68da490345cea6c4dad36e38092287b147b2bf95c996c233af882906f9dbac1ade951ffbcfbc851784c4426c4244530b53a718781d128360fcf147d876726c34cbb43628eaf8cca219716c2c6c399cebcf5a"]}}, diff --git a/txscript/data/taproot-ref/1f7d7d9cf1ac6252c762a06bdb35e619ce77741d b/txscript/data/taproot-ref/1f7d7d9cf1ac6252c762a06bdb35e619ce77741d new file mode 100644 index 0000000000..99468b392d --- /dev/null +++ b/txscript/data/taproot-ref/1f7d7d9cf1ac6252c762a06bdb35e619ce77741d @@ -0,0 +1 @@ +{"tx": "d950a147028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4710100000088ae7b8cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd2000000002feaa9920273d1630000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75c917233", "prevouts": ["201d410000000000225120682cff718d7cbe051bd5beaa1ff36d3547b88d6d4bf403f10c1645a08d942ef8", "4ae5240000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d54c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365edec6927239e37481c871e98a308ae148761fbd82cda43b44eea2241bece5c01ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045135ed0e678ad02d8eb601751aa1b9acf14c9c27e67d62b009394546cc2bb02284b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}, "failure": {"scriptSig": "", "witness": ["4c52d5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e134849a28cba9aacf50a598dea57ce3ca224575357c4c8c887db8ba6ff2354671f69ea04c091b2bc3b7c7ae53ee1804d998a6447fcbbef49abb62b7a394c4c123854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}}, diff --git a/txscript/data/taproot-ref/1fa141a9352d1d89d10a4d09abf044c9506a4bac b/txscript/data/taproot-ref/1fa141a9352d1d89d10a4d09abf044c9506a4bac new file mode 100644 index 0000000000..931559227a --- /dev/null +++ b/txscript/data/taproot-ref/1fa141a9352d1d89d10a4d09abf044c9506a4bac @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1502000000ee042eca031c9649000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487a36b7049", "prevouts": ["35654b000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "657d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936642c359003ab8821594404f608687349fe596e5e62fafd127e5735207b1f199b7fdb01d6ca2155f5be7a678ca6a1e1d0c436995e81f878ed9c74997cf4fccddd302781454c6297f6b8a579760f4d591c0acf84ff9d038b064bbab8a5d53835db"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93611b7e6af417d224a1457ec19c3d9b3480cff6eb3dd58882614542c648c838a9319acac53f630ad836c1252ba923d9d3235c3c343fcfee9c8733d292c93bc64142bc2c7d802e8c870cc0fefcfae9d23d316cca1682651be3bf62b663d5ddaa443"]}}, diff --git a/txscript/data/taproot-ref/1fa4445b8704e72f4df267622d688919d1c6a44e b/txscript/data/taproot-ref/1fa4445b8704e72f4df267622d688919d1c6a44e new file mode 100644 index 0000000000..e11461913f --- /dev/null +++ b/txscript/data/taproot-ref/1fa4445b8704e72f4df267622d688919d1c6a44e @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc9010000008d41693360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fe01000000b3acba1101460a090000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc89e64f5d", "prevouts": ["b00c260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "90ae0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_99", "final": true, "success": {"scriptSig": "", "witness": ["28408300b104b8144353cde3903f49e2dc94ca991cdd9211ea108b6b85afee6d4520bdaeaad36e1a05f2e13b2c24571febdee963fe2d391eab38ceb154be36a303", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a4af46dbdcdb7f5b33f16bd681462da43c41d651e2257d815d6c3620f02498b5047564ecbf2a9f08156125db0bcd62f6cc00466a392449fe6001d7a8369cc37d99", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/1fbfc728d51680fcfeadde2a9e6fa7d1ac3996ec b/txscript/data/taproot-ref/1fbfc728d51680fcfeadde2a9e6fa7d1ac3996ec new file mode 100644 index 0000000000..58200b24c3 --- /dev/null +++ b/txscript/data/taproot-ref/1fbfc728d51680fcfeadde2a9e6fa7d1ac3996ec @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be3000000005ebff876040f9920000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acf3030000", "prevouts": ["f5702300000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936070bb467edca609e1a3246a8ba31e6266509d0d4e74e5fb2a32359b5f156527204d1c6645dfa5bcea0755bc1d945f129b754bcfdfa4df703b30809220c35586032cb43424d7ca27a7abc5fd0c2fa249f92b1e992144deb3864a86d466f79c2cceedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93672fb7b0b8b9d34fd164052a9d1d97e8f2f76026babd1f73e719809b132cf1e5b464f19ce228e2f316c50129d6edd6267acdc0242055b306d7ddf31bf4be6326132cb43424d7ca27a7abc5fd0c2fa249f92b1e992144deb3864a86d466f79c2cceedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}}, diff --git a/txscript/data/taproot-ref/1fcd778862db2069278171a2ee940bf756a2bdab b/txscript/data/taproot-ref/1fcd778862db2069278171a2ee940bf756a2bdab new file mode 100644 index 0000000000..96c4534cc7 --- /dev/null +++ b/txscript/data/taproot-ref/1fcd778862db2069278171a2ee940bf756a2bdab @@ -0,0 +1 @@ +{"tx": "766d60d703bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1201000000da307bb5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0000000000def8accadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba10000000099eb13d001d42a740000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72a040000", "prevouts": ["f9057b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6272570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b92221000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f0", "final": true, "success": {"scriptSig": "", "witness": ["89bffb1a58ab6675b495f7914fd34c4f41c87b8e25f1179000b0f67220300bf45c525d2f486e738658fcfcff09c3835ffc31aa30192f76deab72fc61f4423ce2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["e167ccec3dea0b6f348da1b70a3c5228d3fd0fa9e38d384d0e75a377cd793c649ee920d7728ab8433d98912fa5b462d21647f06116d294702f86739ff9265cf8f0", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/1fcd7eddbae73818ef08042df1c443c53fab0c49 b/txscript/data/taproot-ref/1fcd7eddbae73818ef08042df1c443c53fab0c49 new file mode 100644 index 0000000000..58f72ae674 --- /dev/null +++ b/txscript/data/taproot-ref/1fcd7eddbae73818ef08042df1c443c53fab0c49 @@ -0,0 +1 @@ +{"tx": "d9cbeb5702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b06010000007bcede8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706901000000a3cb8e8102bd1e2b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acf751961f", "prevouts": ["eec71e0000000000225120761ee5da1a196558fc88c883f4c68738765f8bbbf6c28fcf877f70c5de6e3c55", "e7850e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f467d3b2e53c0044d956650f0b6dad5c85ca4976a3e1b41bee60729426076047"]}, "failure": {"scriptSig": "", "witness": ["6a23616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/1fd0cbef8f091c8edefa214a32625302e2f3a6d8 b/txscript/data/taproot-ref/1fd0cbef8f091c8edefa214a32625302e2f3a6d8 new file mode 100644 index 0000000000..833a3659c9 --- /dev/null +++ b/txscript/data/taproot-ref/1fd0cbef8f091c8edefa214a32625302e2f3a6d8 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf81010000007d91abc060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700400000000377d028060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270550100000075c420dc03d8f996000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876c030000", "prevouts": ["daf6740000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "cd0112000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47", "923912000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f068", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364a1e8360ef905c29a22b948ad2d88d5f8aceb0a77bd56e2a8ea8c44b68d550acef05bece11fc4259c24dede9b1787a65bcee91937b36a28d108e88384141e6c4419704ddfd13dc63b1b4156372563d65f148a89e112fdd9cbf47f8afee5da0a9"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d1c86e323c4ea98d64ced2095cdf418b8da11459ca8cc7d768d85c68c22e03bad7df43f1383df9f0df0a1e0ce133acd14e2258cbe9a702da78bb61f4d1a9bc80eb43d08761fb76661299d0344fd2d8bfc7de5e7c6dc622156e95971f4b8396db5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}}, diff --git a/txscript/data/taproot-ref/1fe16cf825c0f639b3abd120fa85f9a344d3e514 b/txscript/data/taproot-ref/1fe16cf825c0f639b3abd120fa85f9a344d3e514 new file mode 100644 index 0000000000..6f776356b2 --- /dev/null +++ b/txscript/data/taproot-ref/1fe16cf825c0f639b3abd120fa85f9a344d3e514 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ed0000000005c790a2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6c0100000018167116dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9f00000000e046d60303b5e5830000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e74d241b32", "prevouts": ["69900f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ae0c58000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "92f41e000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_23", "final": true, "success": {"scriptSig": "", "witness": ["6afc5bf813b1756f0a1d5c1f332c15e7a736be9fffc76358a6a1ea00c2e16626e8ba688042cf4ef627e6717c631b6cc0260f4b21e7292ab41747c7fd2aa61ed181"]}, "failure": {"scriptSig": "", "witness": ["ae0e98a4fdc95b2953b8e4f09c33b6c0af467c60b4e3f1ddecbd956fa505b1846c57bf267784e943b3c3bbb4786a139fb1362a4deb1f46e2e9fa5161f87fde4323"]}}, diff --git a/txscript/data/taproot-ref/1fe6f643a391a7f73e3577d1f4e57935064e1c84 b/txscript/data/taproot-ref/1fe6f643a391a7f73e3577d1f4e57935064e1c84 new file mode 100644 index 0000000000..54e363d3cd --- /dev/null +++ b/txscript/data/taproot-ref/1fe6f643a391a7f73e3577d1f4e57935064e1c84 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe2010000006a60a6e6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc700000000333905ed029b4e95000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748789e0cf22", "prevouts": ["f9d2760000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2", "ac4c2100000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["844c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51120199479ee6d2d4c88363683365d3fc0e890ec8511afbf0335c75bda2c0295827135a2a7712dc4ffb0f490ef0a9e18994dae8053f69b06dfd6a349e2375b7df7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a081beaa6ca8e8a38428233ed41ed0af84f710aa288efb4d17e1b0b9546cb4415f8a538f68d5e42651660e8feb349dcf42bebc9266cba18280404d93052698127135a2a7712dc4ffb0f490ef0a9e18994dae8053f69b06dfd6a349e2375b7df7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}}, diff --git a/txscript/data/taproot-ref/1fe7d8f0f7839c475eb9dbd113d0ac120b1301fa b/txscript/data/taproot-ref/1fe7d8f0f7839c475eb9dbd113d0ac120b1301fa new file mode 100644 index 0000000000..c86dfc2c47 --- /dev/null +++ b/txscript/data/taproot-ref/1fe7d8f0f7839c475eb9dbd113d0ac120b1301fa @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2e0000000021998959dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd701000000289af2e28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49001000000cc78bb2b01117a7000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acc484a04d", "prevouts": ["5bd120000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "0a98200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b4ba39000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09029140b18755d55c9ee068ed4156548f810024a038b43525e32e1b421b547d3d4d8bcdd02ab45a5caf22e9992a32cb479fa0992e8222a33e19beba472aaec531b9e8eae3539feb433fdad8fff4f38e7a14b61f65bf1ee5cea54d6bb990dd8688d44b68d23b3dac549fef4bd8cf52bcf6eeb68596b99db64a25ca9550afccb9fcd10e7e6b139a5521d766f52112e64e6094e2461ee8bdf8614eb0828c34a0f5f6ae4e104acc5964a18d6bf872be09546b62831ae744b664c9755eb63321ad5c8cc6a35608884cc0e48904351a50485ae61b7f5460ecf5916aff0f78970a7667099ded8d90e3b986e0354c66787005512c85961fa016593663f6c08f7f4f9984f13de311e7997bae76112f6947058e9501cc03d88fc2210cb34aaa83bf85c3b8cfd7d3fee9153c4e90952644210576fd3af97327926a1851af63122e616444a3a623dafc0141a48813f658f12364f19a54f7e086013768a1ebf7532f3151062f25e34e24d54db1ecb3e64a063b1fe91eda41e1693b9e33b226ac01b1c848a4c80eb20b87d2ed69c00f6e0acb7209561acbf2785afdfa068f66c1d576d3f4250e4b29228edddfc88ed76935b6c10732c3b31d206d156835fc6809159670e9e7e18690c8f35b190dee2bf3ca79afc227b98ef960ac5a45fea9325acd0924aa3de3853ab5b97332845113275b7482a72c1967786c243c34897b07964e7f33949d73065a3a8f57b7c0a463a8e775", "bd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364ce5ebf1d1f724a0dbfc9e1d58a876a2ee5271b366a0d0a4478f52badb0e07b5f248cd26a95289b2c5b6dcbde70ff737dd7b8c2860adf4f4d2fc326868c95410d797dd6acf95c24b81e793c9c81b0ab80d381fe8deb935e4a90684c96acd4587"]}, "failure": {"scriptSig": "", "witness": ["4d090216fc59cf9c1b85b35eb2d3760023cade92b0fd92fe309d5bec453763aba2842b3833b7bddec0144ab6ee045eb22cb2dd078e044b8390da1f71678b836b46376905a32870b36d3caa39f497053c65c648de50b8d9f05f0c54d7a4b74b4f76421b99468ece4e5602e290d2bb921317383feccf40b3ecf50f68ba847e0c4c7ecceb2597bde0a0d12fdcd341bcf553527238c23a884684380eb69004b089bfd64945b1f1877b099e2fc6a8d32e75852660e55153d2116f552255cbb04efc7d55de0d58e13f4dd742c003f25351caafb0c613cf9f3def818321f557ff5290135c8966b135c1420f943264afa808d903b9cb9a8bf2a165b656bfb6805e396d865c466f71bc35f63b3194d8c332bd4d2d80d73a6cb1715b7d36e13c283ebece3b1438339f5794c3537135ccfa10ef888505fad21a69cffdb45fe7d44220b3e8054ebe63219f7a29755e44be9655bf119c72edb93e7057d05ecae0c68a9edd706d908ce5a4a4cf792262bbb27169bf2ca90df7679623c618eff8e4f4033f536546306e9426636017c83116d9a9a57b9f7c873b8c1f6a0deda762bc91b280e7bedc5713189ce0ec0fae8704721144a709cc06d0e4c5710c04db69346f9c60c331678a39177a530ff10e8a6cc0bfb544fe5154ed4c3b10bc3b909d176aa629a70c17bb209d23446812c1836735f7671884e5e0df1c31bc8a53354d2e1a207a6830df90f92a37ec2769c0dd01e70f75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed4c17033a0423a3758914e896a84d75b6af3e7ce95cad06f99098a3cc7df4a1ef248cd26a95289b2c5b6dcbde70ff737dd7b8c2860adf4f4d2fc326868c95410d797dd6acf95c24b81e793c9c81b0ab80d381fe8deb935e4a90684c96acd4587"]}}, diff --git a/txscript/data/taproot-ref/1ff8cc1006122254a00dc42299f828366e65b691 b/txscript/data/taproot-ref/1ff8cc1006122254a00dc42299f828366e65b691 new file mode 100644 index 0000000000..123d9fb491 --- /dev/null +++ b/txscript/data/taproot-ref/1ff8cc1006122254a00dc42299f828366e65b691 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a700000000d7649d888bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41b020000005bb521d202828c7d0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ef020000", "prevouts": ["68bc400000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "10fa3e0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93619c25e57f1f989d83744c87da06b614bf52628c742756c46ef690ad2ebeffa6f0b87aa3d77021654e9bdded249075f42755a492250fa9a6a44787c57353d93e356798b11c96dafc2935d577afad31a6537ce4b1a48ff27833822cff5fe95a51e"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ebd27c35238d7f43d4f7bfdb39568ec119b9aba2b203a7d851ca1c3c89dc41c13ff5c5d6186003b3e6d49f1c6ac4dc5a625cd45316b0701f0e70ab94b228af6df2727a08c83da142d000f7f66d34a23554b296f940ffe81022e50f50dcfdd8b9"]}}, diff --git a/txscript/data/taproot-ref/202c9cc0aac7d6c5172f0818c8d0d3405649d29b b/txscript/data/taproot-ref/202c9cc0aac7d6c5172f0818c8d0d3405649d29b new file mode 100644 index 0000000000..1d8138be85 --- /dev/null +++ b/txscript/data/taproot-ref/202c9cc0aac7d6c5172f0818c8d0d3405649d29b @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701b000000000f33c6c8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8c0100000053d675bb027de5770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a63f6b2736", "prevouts": ["a2ef0f00000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9", "b26b6a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "d07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa74714e58ef013156220aa32c916bb7c1f2fb2617e3ecaa27044ebfec042fafbaa211c16676cbc388c1faf2d1545933d22071968ce5ea9e4d8ac4039e171efe917420b3503815f4c7b180839898c4c4aff0ab6ef4d8b082708dba105a321f7428"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c91ffd9bdd7718e2534d84740feff12c3e278aec2a2c7640f784ff2523f8588c15c449093bd19eda03bff23881ea6078d018b9cd0ffff6e12447ca822e876d277e36b196311c1a9d305bc653889017f46f4c4934a1587d131a83127df4466fae"]}}, diff --git a/txscript/data/taproot-ref/20372276860410d8622c60d5ec72e5716e313dfc b/txscript/data/taproot-ref/20372276860410d8622c60d5ec72e5716e313dfc new file mode 100644 index 0000000000..f8a58979d4 --- /dev/null +++ b/txscript/data/taproot-ref/20372276860410d8622c60d5ec72e5716e313dfc @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c493000000004619122f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705600000000f0a051aedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdb000000009966758c01ba080700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac63030000", "prevouts": ["901e38000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "2cff0f00000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f", "676a26000000000017a9144c4b1fc943f04d775886b4f6d3c3c73bf7d3118c87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21511f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["9c977cda999fb777401bb707089a400841e57a42d76a033be16e75d27051f5c0063eb91f26417ebbd83af79a57d1d2b8494303e3208c77ad3e4964f1472679cc"]}}, diff --git a/txscript/data/taproot-ref/203cda36559f2e342d3921d1f1f5ab05e330fe7f b/txscript/data/taproot-ref/203cda36559f2e342d3921d1f1f5ab05e330fe7f new file mode 100644 index 0000000000..a37d295b54 --- /dev/null +++ b/txscript/data/taproot-ref/203cda36559f2e342d3921d1f1f5ab05e330fe7f @@ -0,0 +1 @@ +{"tx": "e3469bbe0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706700000000c719f5ba60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709f000000002924d0bd01b5301900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac88030000", "prevouts": ["17b91100000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81", "09fa0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_de", "final": true, "success": {"scriptSig": "", "witness": ["05219fd19c255dd62c22f1d23054b50d11994ed452ab688d5f39c135657686601b112e74d10d9c769c9b3ef2147401bbd1148060ee8b535520d53c4b7c914d6f02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a25754a5be8d5603ff76d699fd962222fd7a6446bc364ebb4483ca18a9554e2e115fda02da9cf38c92f08bc0c56b58969dd9c08c98ef401a14d52946bf47d3e0de", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2068fcad81b42ac14a337456c1c0e850bc5567e8 b/txscript/data/taproot-ref/2068fcad81b42ac14a337456c1c0e850bc5567e8 new file mode 100644 index 0000000000..15fabae3ae --- /dev/null +++ b/txscript/data/taproot-ref/2068fcad81b42ac14a337456c1c0e850bc5567e8 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270900000000030ccb953bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf360100000044aec6de01f70b180000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc12a84e37", "prevouts": ["90430e00000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327", "f73e8200000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "447d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457430173849036d038bb15ccd29e38ea974083458e0cf50b14971883c73e09395afa4004b2cd3f2b5519985ef4ce40029d6249627881f39179d9882ffc68f5bb6a"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa08f12ff2db60e07951e3ece83f8d4c41d9b16f9cd93bc43e76ab3ca16313aee1430173849036d038bb15ccd29e38ea974083458e0cf50b14971883c73e09395afa4004b2cd3f2b5519985ef4ce40029d6249627881f39179d9882ffc68f5bb6a"]}}, diff --git a/txscript/data/taproot-ref/2071f151f52b689e1e3c9f2b0372a3c1ca4c6dc9 b/txscript/data/taproot-ref/2071f151f52b689e1e3c9f2b0372a3c1ca4c6dc9 new file mode 100644 index 0000000000..79fc6cbeeb --- /dev/null +++ b/txscript/data/taproot-ref/2071f151f52b689e1e3c9f2b0372a3c1ca4c6dc9 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700f010000007bc29c6cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb900000000665aacda033f912f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e74a010000", "prevouts": ["0b3c100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0862220000000000225120e57fe1708102910b1e8fab470345c0402aba6cb96c683e4f102534396b5c1780"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a8", "final": true, "success": {"scriptSig": "", "witness": ["39eb969c427e032bfbff293814fbd33417be2d8872751fca57e881e37ccf77c2afe50a43cf336625c50cf055e199c0befd766b9c963ecd0d90fa714712896466", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["fbeb611f19a3b68d8630ffca6fa6062eb074a92e44f854d10cac4defdc78f08dd6f9392c7c86d3391a6e4aa741bc3c1922c9b47f080461e88188e7a2727b3ab9a8", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2089f610f91855cc26e8760f3910284181dc1b86 b/txscript/data/taproot-ref/2089f610f91855cc26e8760f3910284181dc1b86 new file mode 100644 index 0000000000..73089eb69c --- /dev/null +++ b/txscript/data/taproot-ref/2089f610f91855cc26e8760f3910284181dc1b86 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bec010000001d0a2dc2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf00100000010fb28d503d0fc6b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac4d020000", "prevouts": ["5d3d220000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "c7244c00000000002252202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["5a7d220a2162de9dd36b932eec5d84328f53e5a1c5d11922d11565b47cf408654d661e58f11589da695ccac5165f97e5a2cbf83dcedf2fc5f6b321061f22fdd2", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/209d75465a4314536f2bbabf6ada3622bec989d5 b/txscript/data/taproot-ref/209d75465a4314536f2bbabf6ada3622bec989d5 new file mode 100644 index 0000000000..3e4ad6f66f --- /dev/null +++ b/txscript/data/taproot-ref/209d75465a4314536f2bbabf6ada3622bec989d5 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2e0000000021998959dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd701000000289af2e28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49001000000cc78bb2b01117a7000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acc484a04d", "prevouts": ["5bd120000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "0a98200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b4ba39000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_0", "success": {"scriptSig": "", "witness": ["959d8b004aec9b6c8b35fc30afa6e1c9c64bbaed1b82210e78e3d772f6bce5777f786bddc06f222a037ebd4777fac8bfd2fe22eb950019490f44d22f2f1858f6", "502480a9a1c656a9f5f7746327f1502e9badebe19941d325bffa0b69ca20d42cbba39f6119d85cf48f64651b58f4d172892b615337e5ae1b79b1b075c2c0c6c8fcd824e506c15518a093d3784485f840af3db7c2d6fe64bf0eefbac6760ea866c11bdd38b3b91ad1c92cfa912ce2ea64ad0b8836d6ef9d47df36fb8712a9aadb5b7ebe77916014813c9ba3bfde6e9ca00b747088dc55e836e0a6bb1e817fb5c01a05277b205e73e57ea5eeb53244ee64cf4a15ce1fe1648bae74835f4eac17961062a29c29a5b041873e01f34160e5594a8e88782e07cbe71fc0da7b880cf5bc9923ee"]}, "failure": {"scriptSig": "", "witness": ["9ed7c8a586213bebaf0e2e191ab6016cef1f18afd56c1cb8be6387fa7814968f1f46bf2d1dd870c953c60a9e0e8b6ddf070aac51ccc0e5a19d6ded1c7b664d7e", "5030e2de755082f6ef0c8db5c1dbb514ed01771dc2fd8356d180d58d8f2b57a03ce1efc7b26ac693ba7844888338cf23f16d34d00d4aeef7f7afce215b518a1df9581a38a199eeb8cba7b1ca06"]}}, diff --git a/txscript/data/taproot-ref/20cd1af7438c223f49d33ed3693631c63f6c3234 b/txscript/data/taproot-ref/20cd1af7438c223f49d33ed3693631c63f6c3234 new file mode 100644 index 0000000000..c69ca4201e --- /dev/null +++ b/txscript/data/taproot-ref/20cd1af7438c223f49d33ed3693631c63f6c3234 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be701000000e408386d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46a010000004e24027602e24e58000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48790000000", "prevouts": ["6c72270000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "f5703200000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007f", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e10a12ee33fd4d96023e4b035134b5e2e7438605ed0c658788ecc1f80acf96e3cde17cc42fca95eeef15c2a149426edd48c8eb93e73982ab4fa8378007bf5ef888ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366cd1429f940fd1b5efd0dd192a5378c597739e1b4337081e905f661f126e379f0a12ee33fd4d96023e4b035134b5e2e7438605ed0c658788ecc1f80acf96e3cde17cc42fca95eeef15c2a149426edd48c8eb93e73982ab4fa8378007bf5ef888ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}}, diff --git a/txscript/data/taproot-ref/21227867cfe4806f692be272ca5b865dcecc1894 b/txscript/data/taproot-ref/21227867cfe4806f692be272ca5b865dcecc1894 new file mode 100644 index 0000000000..4093df4333 --- /dev/null +++ b/txscript/data/taproot-ref/21227867cfe4806f692be272ca5b865dcecc1894 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9600000000634b90858bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48800000000344f78fb01beec02000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6c14e4b3b", "prevouts": ["520829000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4", "bada40000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ef7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aa6323c0295bc5775a3404b3aacf7082420dcfdcb982829d77fe55ccdd4d869082a8da46561b857dd56ed73270ec2a55b69a5f7c1db8df98b88468b2be2ca2b7eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac8ef60344f111a9c34d055af59cfd42b130acbf4987ee3354719b7c9974e4d449"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb1d33bd2ec2ef2b80e561b3c30cfb99b356a60261a599d7e1f2ff199de481a6e8ef60344f111a9c34d055af59cfd42b130acbf4987ee3354719b7c9974e4d449"]}}, diff --git a/txscript/data/taproot-ref/213cd49c2b13fe3ee6d2220f5f96b63c748d1add b/txscript/data/taproot-ref/213cd49c2b13fe3ee6d2220f5f96b63c748d1add new file mode 100644 index 0000000000..8fdaab8ee3 --- /dev/null +++ b/txscript/data/taproot-ref/213cd49c2b13fe3ee6d2220f5f96b63c748d1add @@ -0,0 +1 @@ +{"tx": "7f672b810260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704600000000d96525f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce000000000157fcba20390206e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a66a020000", "prevouts": ["5d7811000000000017a914b0716f1bec91d4758ee97d9063c9da884dd2ba5287", "32655f0000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "165a142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["ba35ab6dc7bb7f42a551063c6f63d18d00b0b1d45576ad66786938447dd71941b9813b8443228b535069a06c4cfdc57a0feba8067a80f5fe7fe50c644e535d95"]}}, diff --git a/txscript/data/taproot-ref/2152488b729a3937e9f4e83bbefbb36d961013ca b/txscript/data/taproot-ref/2152488b729a3937e9f4e83bbefbb36d961013ca new file mode 100644 index 0000000000..1e43c5bc85 --- /dev/null +++ b/txscript/data/taproot-ref/2152488b729a3937e9f4e83bbefbb36d961013ca @@ -0,0 +1 @@ +{"tx": "359093cd0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ec010000002e50bda803557e0e0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac8e757553", "prevouts": ["12bf10000000000017a914b403773244c403f76163005c780d53872622b52c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1659142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["c5792a58b67d9ab4f85de726ace781508f45a14949e4f0df33d83e835148398cdc86083f6b2c243dda9b6806313f8618e121ee99d8ee5211a7eebd12017dc9ee"]}}, diff --git a/txscript/data/taproot-ref/215ddb94c508c11099b9268dbf4ce0d7f7d18977 b/txscript/data/taproot-ref/215ddb94c508c11099b9268dbf4ce0d7f7d18977 new file mode 100644 index 0000000000..b5aed78888 --- /dev/null +++ b/txscript/data/taproot-ref/215ddb94c508c11099b9268dbf4ce0d7f7d18977 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b48010000003a3e7a78dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbe010000003e008dd90464f34700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875b04d52d", "prevouts": ["f08027000000000022512090f7a6000b5d616b8fab8dbf93f0441952f14900faa8700280033be77a40eb2f", "ef642300000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "47304402201204ff9c9eae38bf2b33b671b2d640c822740371a4b2d5bfda1999c4a15cd2840220195e1c96d8ab5bdaeafbdf2d336be51203f4cd8df2284b786386af6fab34d84eb24104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "4730440220165b901dc777d7422d0882af9833e6a8b0b63640e6633b39d05373f6e1e6ebb80220535b568652daa99cbc006f31d9d4e7aafbe9057a5f8ff93d450a0682f03bc0beb24104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/21a38194825eb39a4a0ae99128be4409c90d420d b/txscript/data/taproot-ref/21a38194825eb39a4a0ae99128be4409c90d420d new file mode 100644 index 0000000000..da4b788125 --- /dev/null +++ b/txscript/data/taproot-ref/21a38194825eb39a4a0ae99128be4409c90d420d @@ -0,0 +1 @@ +{"tx": "d7f96b1903dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca701000000c90fb0fadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0602000000fe78deebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b92000000002e15949302b1769a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1a020000", "prevouts": ["3eea5800000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "d5e41f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "688424000000000017a91495eb8fe3d959e08a2cc279c1b4ede1921d14a93b87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}, "failure": {"scriptSig": "", "witness": ["d3252c4a759ac11949cf9159136b9e06c6295f8939b74bcafcdf3cbef48f320cccb2b22c406a6837310819a4d6b01f220aa934a7832d57d4607faa31a591894400", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}}, diff --git a/txscript/data/taproot-ref/21a967d5a754fe4909db382de1d7debbb040d069 b/txscript/data/taproot-ref/21a967d5a754fe4909db382de1d7debbb040d069 new file mode 100644 index 0000000000..9b53093709 --- /dev/null +++ b/txscript/data/taproot-ref/21a967d5a754fe4909db382de1d7debbb040d069 @@ -0,0 +1 @@ +{"tx": "020000000206f5bd527bde63f7c45daff54c390a64a59dabeafc8078a9bd0a050f54db6b44000000000096e4218fd15657a619affff084fc6b1bc2cdf5e85e399bb207d84ace710aa8effb82232f0100000000d0187eb30492422a51220000001600146d764276c66fec1127e5074db5bff3aa6c5255335802000000000000160014a4c1279efe108bfac1a01a2fe5d5c45b8fa18363580200000000000017a9143f5d8a006e43f5509420a4ea1e0b36ae11579f4487580200000000000017a9143f5d8a006e43f5509420a4ea1e0b36ae11579f4487a529293a", "prevouts": ["22cbf72c10000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "ddc7342412000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_invalidsig", "success": {"scriptSig": "", "witness": ["5e6cd8509542b63d2537a5bac669c0e311e78bff90c017c9c820e0c8da249779835917527ca01331a4054ec1b7b321c9234dfc8ce009f572033573a3c0091b52", "20159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717ac", "c0159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717a00074c7e8df7fd91f9df9f350398e675f9ead7758f02aef75359e3279a8e0e7"]}}, diff --git a/txscript/data/taproot-ref/21b086a0fcb5394bca5e13730e9801a167031fd3 b/txscript/data/taproot-ref/21b086a0fcb5394bca5e13730e9801a167031fd3 new file mode 100644 index 0000000000..80609d3d7c --- /dev/null +++ b/txscript/data/taproot-ref/21b086a0fcb5394bca5e13730e9801a167031fd3 @@ -0,0 +1 @@ +{"tx": "6a76990802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd8000000001d4b6c88dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4a000000002f820b8201e0103a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac02034d61", "prevouts": ["b82721000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838", "cf8a1f000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936685ceb4100efa5e54cc068990ea9a5bf606617cab6629ff60e87e062a72f36c14639ba4332756735e08e9dd0c9395e600a8a67669bda3acb22644b013566df80a9fad2668c863ea9bd6dd9197c1c49c61c2b9d7888bac8bf6fef03fc3ace0a5a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ef01d0d256ad0d229e53661481dce388404558ec2529e0bc1d85e0261a585159aa9fad2668c863ea9bd6dd9197c1c49c61c2b9d7888bac8bf6fef03fc3ace0a5a"]}}, diff --git a/txscript/data/taproot-ref/21b915be35d2383f8baacd2d513b5cdd06836ebd b/txscript/data/taproot-ref/21b915be35d2383f8baacd2d513b5cdd06836ebd new file mode 100644 index 0000000000..77c5881552 --- /dev/null +++ b/txscript/data/taproot-ref/21b915be35d2383f8baacd2d513b5cdd06836ebd @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47801000000d864d64160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706300000000b0448b2f01b9302e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8754010000", "prevouts": ["fb623f0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "33201100000000002256202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f5847d0622df121483b1ed7ca0bdae80206069e1f4810c687064ab59362fa9d59ff12214a208d620ece111200c1b5ab8b29e152a7c0e0e9f34d3dc0633f30eeeec1657f77102ce9c66c2655bb8b142b23ef3aa1d02b33f9da92a5485665189a305894ba7e52c3f59ebde71110e6c07aa3bee1c306f778690742fc0d2666be22433877eb8dadfe7392b904a66d6e5a0fdf6abcec13bfa32b12428fc721b4899425361151473b05c7435b71805c313c77f99fc2e625caddf9eba38b41961d9aac8887fca6a04088dabcc5bb229da55269438cc8cae8510ef86756104a5abcd4b04dc97aff4f977878d8d6dbd4e93781623986ea337f11083eabe3f4041a0bbc18f9202cfac5543a23481545870df93629f7408aa1adf0febc0b154d0e5458d38ac59a8e755fc574e37d5e31620e2e2b509f7500305e244bd9f769f6b55faf0e0541eda6c68ee6cd2f7ecd2986ff4286473e6f519c61771ec01bbecedc12119c173e0a70dd0e4b6e7f33a1dd09bd27ddb591ca0742272179dd3f928b20f87b1056bf95665bda75eed1248735141aa1357ec21922c018c0b65411252c61729c121e65f0889c8c550b605cc3aa364e9044eb48cee5e7a0251145439477b569e393506edac5c52814f53f7c10d91e526ad89a90f900f839e3a03b158cde00fce30f3bc219665407756206e9201e137acbd1e3dc0e4838adff3f0e3ea88ef86a5f118450b2bfbe112db310fe075", "697d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e945c33b167c9a8798707088659264fefaebd6f00f5f412ec268481dd4d0e7e4494dcbc06ccecaf65037be0509f5fea40d87445fa254b78f124a4b8c5e16963b53b3c2b944ff5e8034ac7518513c5ca10ab4eec025a723136fa482de383e24ff1"]}, "failure": {"scriptSig": "", "witness": ["4d090265099e99201f0ae5ecc7e7150bc7097c376c0da0d359efeeba78eb50d06cb3e3367eb394c456161ff97f0b821c36a335ec772ca86c113a7c1af68e7a5e99811a8045986fc060eaaaf362f85b288c4c2bec1148741ef27504b8168d3e4aee1112cdb5676de582c59200b6279650e63a3e02989f56406065f0798d6e251207e044ce7af6e7259e449c26bc45322b9a9f1a9cec73cc7929f8b6c28aa9b1292a68d222203aa61155a0494f55f7c7262ef8bc61ded342356d7150c6e927f0879dd22baa293eaa0ac1b609b4ccd9369fb906529933c2692b893c0162d4e22870566ddae7f50f09d10f26e3c59ec538e8233d67a72495c9ad2d2360486a205bcbbf9130cb5a551393ac1418596b0fce84d3f2c92bc2b27de57e805c786e78f0bd64623a7780472348003affc7f78fa1f17fdbe6a7e160a2aec3e418a42c146b3e336a158e2590f456d0a1616f40882ee6a2fbb55905a3dbd484204253f8a6663db27cded6ba4a5be14daaa009136ab5061dc57a28e79cc41ff0271be7052513cad6685217d61c76d7ebc05efed1ad376add0ccc97858bffe745a60bdf61f14fc68d9ee473378f960a9df286fbedaf16b03855f5c861b6dd7beddb599188d5551329ef082c329861e86c4c99eab7b7bc07d1393dadc65e7ab4b967ef6c8e919cfae6f96df3d1c54bf5c6c91f9a8f1243ac80cecb7497cb646e4057dafd6d18ffa3b366fe1ccf1a798e2383d24375", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bbba8c45aec20ec89a583a695eb75c8b6b0a9fdfefa2bfeb5c3f7ebac004de28dbbed29828226c3a1e74b431b518dca4e99f1ee054f76cd9b7bd5529b5cc8688de3449b5e2c621283b68ab187cecafc7aa77a8721601b5317d3484f84536019"]}}, diff --git a/txscript/data/taproot-ref/21c64c51dc34976712f8356ed25d28cb2506a3bd b/txscript/data/taproot-ref/21c64c51dc34976712f8356ed25d28cb2506a3bd new file mode 100644 index 0000000000..b6b5f3f6a5 --- /dev/null +++ b/txscript/data/taproot-ref/21c64c51dc34976712f8356ed25d28cb2506a3bd @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44900000000f5f5607edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2400000000a5a0567a0347928500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a66dc2b32a", "prevouts": ["ddf93a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "57904c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c2", "final": true, "success": {"scriptSig": "", "witness": ["8a0085756ab64896d6da8cf6a231042de33fdcb2378af0685f003628646c246d1b4d9c69e97ffc9be71d61dfc961a77aa1232e56195baf91e9eaabd8ac13ddc201", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["38ec05dc82f628ae4093c6109d9ce790cb7d07b666f44f3137a0bd8df91f8f9dc99ab062ca4df414763477ebec5c02b4c1c024d3fe8b08c3d45551577986dd50c2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/21cd99bcb03828e0395286a09e866684d6c569f0 b/txscript/data/taproot-ref/21cd99bcb03828e0395286a09e866684d6c569f0 new file mode 100644 index 0000000000..8646650ab3 --- /dev/null +++ b/txscript/data/taproot-ref/21cd99bcb03828e0395286a09e866684d6c569f0 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f00000000aee490c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4b000000005f173cce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703801000000fe1cc3f8014c7b3000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac9c041628", "prevouts": ["5139310000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "560c2100000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "d2ad11000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "907d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ed16c11561cb4e52cbc61ad76d34e49a6feea77f682efcf50ee22f89bd1fa0f0da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457ba4f11ff80ca9181e3d85997fa959accb8f97af45a52bfd0df916797673441f5"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa51b810e60c043042e0bb2eafa8cecc8c22fa830d489bdf7de51e14fd273b03e0ba4f11ff80ca9181e3d85997fa959accb8f97af45a52bfd0df916797673441f5"]}}, diff --git a/txscript/data/taproot-ref/21f06e9520e734ab7974353357c55b81e5ee87a9 b/txscript/data/taproot-ref/21f06e9520e734ab7974353357c55b81e5ee87a9 new file mode 100644 index 0000000000..73071f9a8f --- /dev/null +++ b/txscript/data/taproot-ref/21f06e9520e734ab7974353357c55b81e5ee87a9 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bac00000000a4c899b2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3301000000510c59fc02e5e69f00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac52020000", "prevouts": ["13cf270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "33bc7a0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e6", "final": true, "success": {"scriptSig": "", "witness": ["e20d99c9b7cc55693d7fcddbdb74b2e4b44d7d73e01a3007f31a7a6b2383aabcdff58c6e37c26938cee76279e85ff2a382f0f91502495007badbb777fab8df4b"]}, "failure": {"scriptSig": "", "witness": ["e783476659ca403a70e474208bc6081d34140b640add30584d711f8c051b60ba83098caf714b69bfe84538f54302e3ce3a7a6c0dcd3786fb8ec791d43c7c287fe6"]}}, diff --git a/txscript/data/taproot-ref/22089449f264bdccac5901669554a20c01c7632d b/txscript/data/taproot-ref/22089449f264bdccac5901669554a20c01c7632d new file mode 100644 index 0000000000..a35414d8bb --- /dev/null +++ b/txscript/data/taproot-ref/22089449f264bdccac5901669554a20c01c7632d @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bea00000000ee0a502560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fd00000000d7a42f82dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b80010000009c57242704fe4b5500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48746e08936", "prevouts": ["2584250000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "ec9f120000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "64811f00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/negflag", "final": true, "success": {"scriptSig": "", "witness": ["7340617ced9340b45760ceb890528fe2485469f12da62bf2170dd2f0de96785c1664b40e8e69c903cb0ceede49127d69deb93704d5e9f4845c384cf5ed9e29c7", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}, "failure": {"scriptSig": "", "witness": ["7340617ced9340b45760ceb890528fe2485469f12da62bf2170dd2f0de96785c1664b40e8e69c903cb0ceede49127d69deb93704d5e9f4845c384cf5ed9e29c7", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}}, diff --git a/txscript/data/taproot-ref/223d492bc034d65fae5c76008697dc6455711a0b b/txscript/data/taproot-ref/223d492bc034d65fae5c76008697dc6455711a0b new file mode 100644 index 0000000000..212942e1c8 --- /dev/null +++ b/txscript/data/taproot-ref/223d492bc034d65fae5c76008697dc6455711a0b @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff50100000056f5479204060a8500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e798000000", "prevouts": ["fcad860000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_5b", "final": true, "success": {"scriptSig": "", "witness": ["bda58126d802fc8724e1125ad89e081814d63df7516d10412d5dab66c1e01d3d190f47091320c87d1a69cb736db34bf7d9abd284a594ff6df2b6d116cb5c3e9901", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3ea3be366a45078cc28f71c16628b06f52c8f5f7deac2ad51f942f6bdad7fcf05430857a5d49feed4260131087e8631ac9af928fbd39b17e15c2ae4f01a5bdaf5b", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/227dc7dc4b5fedba0f90b82d69d0f8f6785c49f3 b/txscript/data/taproot-ref/227dc7dc4b5fedba0f90b82d69d0f8f6785c49f3 new file mode 100644 index 0000000000..0e0d7231ed --- /dev/null +++ b/txscript/data/taproot-ref/227dc7dc4b5fedba0f90b82d69d0f8f6785c49f3 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a300000000afc78ee1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8a01000000bb1633dc0151876500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac867f065b", "prevouts": ["ddbc100000000000225120ce3551521fa9f590f4e3a432d6c546446f0d4fa78e73ac01749e3c952a57623c", "8fb85a000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "final": true, "success": {"scriptSig": "", "witness": ["053e1b8e538c3bc309321ac2217c841e880cb5a81e463cb0273e3eb9d8ff51171a2a986efb4e5d8578424799da33525b1c775752a17602e0c96412e87012a8f301", "187ab5e105b5f66858c5", "4cdc9e50942076c092b25970e2ec1edf7d22f4e8b7d3fec3736a17277eb80fe9326cf18522ad1022328e18c1a14493249583ab862b6578e409ed7ca2edcdb1f3aa054abaa04cc51fae6e33cbf17eb5794fd525f3ef28f01bc15e20750d9ce510485df67443c4925a72e921f620bc7c94dd404f4bfe95fba127119cc784608713b24adec77630aa324369a14a2f16b637bf12180bfbdc8d48692a188aa0563671a10863392b672220a5b12fd3a0f5e7bfa50715370de8fe624a2232cce49783144e169e5f73429de7aa4a634058f95da223f9240494b2fe9ea62072cee4c76d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361592bcadc6b0173f44371808ef35839d7baf56fff8f47332472589970ebf0574a56703c807c846ee6abb2e7a8564bac5205dd4eabfb1e9d7f613523c0bbf3fac983123818ea2fb30d9c84b0712135e951ac6fcaf39fdf102e51ec0569ab5991acc2e87e6786e427484b7a25eca77971dac858d288ad2240853937e399511e1ac4814eb3006873c92f651a031d457533ec016334f911cc3244fdb7b55a1bf193c8d7fcaa8a3f248af81478f78c2ae2d84a51a55c107f63091e371c961c44fa973ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc22b5950015ca6bf902ab72aa161ffddb8987823fcc69a35030cb97d9616cfff6331bf3ecd5cecfb7e4dc2b7d61da5af4e5c887b1feb7d18aee6a7d1cd1096818b16ba2eef987ab89b69f32dbaaa9ec389f135c69edb6a4ec37f19740b7f2030fd5d4501928cec0bfd3602ed3e76d8155ec353f26584e3e4366c38f97c64459a00000000000000000000000000000000000000000000000000000000000000000d19e8ba886ddbbc76dafe91b8a3f02f3529cb5ab44e9f64b8ac5357a77f29094c224d123975e63ce69d08583f98430dee35d861114d22679af6131d9293c61b079e2fa6fab44cc7b4c6168b32516e0f04cc913a7bafd309decf260e3dec9ec9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23c22efba2313404e5904d2fb71b613b37bd41e7dcbb9c2b8be01d05d7a0187f14cb4cb66f826648695fdcb338c2aa262eb871a8c6cd9390c57bbc2ad6593fb3474d25704f9cafc09d6d8453426c7549d5e3004778d9b3968bd3b952c67c78aece7d952da9d14678ebdac73a5c8d5e14d2cf7ad3db2da6307947f0654078ec9fe05bfe0e9604d5022b4976402c46e4791b3c24cc77cdcaa415e28c2d609e771a94d6fdebc6f5faf2a0846ba52c6690c8a7073b213b6876428e0ce15616fd0ae963c0b2339f89cf0c1a47a819d2b9486acee87704ed5fa88be0ebb48e216088e500000000000000000000000000000000000000000000000000000000000000000893f14fcf5d631ca4274979ce31cb9c09423de1cb28e151fdb6568c6c55c988cc59b8e0defd2e76923fd0c02612e4a457ad43e8a186a5bbf1a8a2e635dd74c84f51f3ecd679b6c3af4c536805ad1cba391d88688d829113e460024821dd540fd4e7c034159daba82f364a02678622ec5af6cfeb13e31db96cdbd07f4e158d44c1f6f49e31c03579db62e751ad67ad23ccb8b225365890d25961d69fd722782b012bc98deb593730ee305162ddc176ce1055da8028d8a2ee84d3c5c2c016e610d4ae09ac0895b0e73024df773b4bc8f1fa77f269019c47251e1c591ed460b2286cc58e13e322ea39b4ff78f82227af8337dbb5c72b03e1c7618e558f55a9075fc8c68fd921bcbef3dd6b532ca14b0fd895fc7a323b38714abeec35945cabd814000000000000000000000000000000000000000000000000000000000000000074504a206801529e97cac9bcfbf0e79c56e7bcf3bdd57da720ac7abf661cb56b989feea5982311a81e317d99b193bafbe53278f14d7b4be0dd3d3284c0e978d6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000034ad4366c2133fe7305e82f00e8e91cb8b9791a3213d6a5d8bd78689c95b2e2200000000000000000000000000000000000000000000000000000000000000001ede38e04bd71b3ac73e836ccc88072a7a4af163764f3793deb8c7d98cc2f928362f49f48aa2225e55227b3d7ad92193a33b686884306da89b4eaa021b4b7daf0000000000000000000000000000000000000000000000000000000000000000084d5d7678a3ed0fcf0ae03f659b2fa1dcbcbe078bb81640a9785c7ba1c58b4557b5a17667a4d546babc00b67679095d6e28454babbf94f34b1b0c124a0604d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27f3c98e8455f02dc20fea8d531a5a4c9e725776b18a66babc2cd47d77c913a3bd2cdad93c71d5ea44101b85685b0084504e664db3a94d92d59fa39ce6a85b0654dd810de0659ebab0f273f152d7bd84250193e07888cd2fa42003624114a381ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000003066daf29525c49d87e5cf6049bb14ef6673f0322201ef9693ab06c4026439d68e8ab8978a96a938148e40440241df287b5f0d5a15cdfeb4e7519593faefb3c45118e72a7730c34cfd24b4adda3b16ab4022e80da0f9444d347922a0b3227d9c000000000000000000000000000000000000000000000000000000000000000044e7c902a1c8fbe84ba609f269cf831ccdb662782f4e70276f4e3b821fd5df5a43acde8c0352fc0aaaae2e02aa01128217fe38f9f6ffda05ac9924746330e0915201a810491ac6470d9eda9794c3d356bdabf10b53d6b81280412c9ea0a70cf3545d56b60a3fd73014bba9fbefcb041aa62d02ac0505ff63888fbe19ad0c9763c69febdb8e0ed135a6949314778b5867f1ed499dd589b0465ae2227c2c373c1bf7b52c16ec7a6a4c7a53b73dc546c6ca5a1e63511fe79bc58b510572ae439831ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d4608c9c942491a3856d1af5e4ca48a237017c60814331617bdad2705666b325c968575eebb5df14f4b7c35f6a1cdc55e757cf91ede928ce5cbb13b86bc4856ff46359e7411918ed4c675ebb7fc831e8a5add7dc1eb9b3cb2635fa2785f3f880000000000000000000000000000000000000000000000000000000000000000cfdd7a337e747cbf1f441415e766197b1fe31e560f2bec1e61d1a024a657e69b9576076a6c1d6b47dca9816a842858332bcd978d0a69f25c2b051cf9b9feb0dba2f0b7a047dc92e8f11b6a9b77015bee15ee6ea71a811ecc6babaa90fc9464a82bd9c105c600a394f153addc1db5fa33c17990cddb9634cd24788d0a3b13612dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe55f438864ef2a33dcd1ca3767364691085985ef8f411f2902a38068b23af8d50000000000000000000000000000000000000000000000000000000000000000946911e0389d4b583b97ca3d7b2c423ae4a3d6c9fafd58cc8bff8456f17d236b2e53bf69fb1c97e7c7836556c6667046e21cf6785ecd43cfba50274e6df29381"]}, "failure": {"scriptSig": "", "witness": ["053e1b8e538c3bc309321ac2217c841e880cb5a81e463cb0273e3eb9d8ff51171a2a986efb4e5d8578424799da33525b1c775752a17602e0c96412e87012a8f301", "525d710a6fed5fb107", "4cdc9e50942076c092b25970e2ec1edf7d22f4e8b7d3fec3736a17277eb80fe9326cf18522ad1022328e18c1a14493249583ab862b6578e409ed7ca2edcdb1f3aa054abaa04cc51fae6e33cbf17eb5794fd525f3ef28f01bc15e20750d9ce510485df67443c4925a72e921f620bc7c94dd404f4bfe95fba127119cc784608713b24adec77630aa324369a14a2f16b637bf12180bfbdc8d48692a188aa0563671a10863392b672220a5b12fd3a0f5e7bfa50715370de8fe624a2232cce49783144e169e5f73429de7aa4a634058f95da223f9240494b2fe9ea62072cee4c76d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361592bcadc6b0173f44371808ef35839d7baf56fff8f47332472589970ebf0574a56703c807c846ee6abb2e7a8564bac5205dd4eabfb1e9d7f613523c0bbf3fac983123818ea2fb30d9c84b0712135e951ac6fcaf39fdf102e51ec0569ab5991acc2e87e6786e427484b7a25eca77971dac858d288ad2240853937e399511e1ac4814eb3006873c92f651a031d457533ec016334f911cc3244fdb7b55a1bf193c8d7fcaa8a3f248af81478f78c2ae2d84a51a55c107f63091e371c961c44fa973ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc22b5950015ca6bf902ab72aa161ffddb8987823fcc69a35030cb97d9616cfff6331bf3ecd5cecfb7e4dc2b7d61da5af4e5c887b1feb7d18aee6a7d1cd1096818b16ba2eef987ab89b69f32dbaaa9ec389f135c69edb6a4ec37f19740b7f2030fd5d4501928cec0bfd3602ed3e76d8155ec353f26584e3e4366c38f97c64459a00000000000000000000000000000000000000000000000000000000000000000d19e8ba886ddbbc76dafe91b8a3f02f3529cb5ab44e9f64b8ac5357a77f29094c224d123975e63ce69d08583f98430dee35d861114d22679af6131d9293c61b079e2fa6fab44cc7b4c6168b32516e0f04cc913a7bafd309decf260e3dec9ec9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff23c22efba2313404e5904d2fb71b613b37bd41e7dcbb9c2b8be01d05d7a0187f14cb4cb66f826648695fdcb338c2aa262eb871a8c6cd9390c57bbc2ad6593fb3474d25704f9cafc09d6d8453426c7549d5e3004778d9b3968bd3b952c67c78aece7d952da9d14678ebdac73a5c8d5e14d2cf7ad3db2da6307947f0654078ec9fe05bfe0e9604d5022b4976402c46e4791b3c24cc77cdcaa415e28c2d609e771a94d6fdebc6f5faf2a0846ba52c6690c8a7073b213b6876428e0ce15616fd0ae963c0b2339f89cf0c1a47a819d2b9486acee87704ed5fa88be0ebb48e216088e500000000000000000000000000000000000000000000000000000000000000000893f14fcf5d631ca4274979ce31cb9c09423de1cb28e151fdb6568c6c55c988cc59b8e0defd2e76923fd0c02612e4a457ad43e8a186a5bbf1a8a2e635dd74c84f51f3ecd679b6c3af4c536805ad1cba391d88688d829113e460024821dd540fd4e7c034159daba82f364a02678622ec5af6cfeb13e31db96cdbd07f4e158d44c1f6f49e31c03579db62e751ad67ad23ccb8b225365890d25961d69fd722782b012bc98deb593730ee305162ddc176ce1055da8028d8a2ee84d3c5c2c016e610d4ae09ac0895b0e73024df773b4bc8f1fa77f269019c47251e1c591ed460b2286cc58e13e322ea39b4ff78f82227af8337dbb5c72b03e1c7618e558f55a9075fc8c68fd921bcbef3dd6b532ca14b0fd895fc7a323b38714abeec35945cabd814000000000000000000000000000000000000000000000000000000000000000074504a206801529e97cac9bcfbf0e79c56e7bcf3bdd57da720ac7abf661cb56b989feea5982311a81e317d99b193bafbe53278f14d7b4be0dd3d3284c0e978d6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000034ad4366c2133fe7305e82f00e8e91cb8b9791a3213d6a5d8bd78689c95b2e2200000000000000000000000000000000000000000000000000000000000000001ede38e04bd71b3ac73e836ccc88072a7a4af163764f3793deb8c7d98cc2f928362f49f48aa2225e55227b3d7ad92193a33b686884306da89b4eaa021b4b7daf0000000000000000000000000000000000000000000000000000000000000000084d5d7678a3ed0fcf0ae03f659b2fa1dcbcbe078bb81640a9785c7ba1c58b4557b5a17667a4d546babc00b67679095d6e28454babbf94f34b1b0c124a0604d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff27f3c98e8455f02dc20fea8d531a5a4c9e725776b18a66babc2cd47d77c913a3bd2cdad93c71d5ea44101b85685b0084504e664db3a94d92d59fa39ce6a85b0654dd810de0659ebab0f273f152d7bd84250193e07888cd2fa42003624114a381ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000003066daf29525c49d87e5cf6049bb14ef6673f0322201ef9693ab06c4026439d68e8ab8978a96a938148e40440241df287b5f0d5a15cdfeb4e7519593faefb3c45118e72a7730c34cfd24b4adda3b16ab4022e80da0f9444d347922a0b3227d9c000000000000000000000000000000000000000000000000000000000000000044e7c902a1c8fbe84ba609f269cf831ccdb662782f4e70276f4e3b821fd5df5a43acde8c0352fc0aaaae2e02aa01128217fe38f9f6ffda05ac9924746330e0915201a810491ac6470d9eda9794c3d356bdabf10b53d6b81280412c9ea0a70cf3545d56b60a3fd73014bba9fbefcb041aa62d02ac0505ff63888fbe19ad0c9763c69febdb8e0ed135a6949314778b5867f1ed499dd589b0465ae2227c2c373c1bf7b52c16ec7a6a4c7a53b73dc546c6ca5a1e63511fe79bc58b510572ae439831ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8d4608c9c942491a3856d1af5e4ca48a237017c60814331617bdad2705666b325c968575eebb5df14f4b7c35f6a1cdc55e757cf91ede928ce5cbb13b86bc4856ff46359e7411918ed4c675ebb7fc831e8a5add7dc1eb9b3cb2635fa2785f3f880000000000000000000000000000000000000000000000000000000000000000cfdd7a337e747cbf1f441415e766197b1fe31e560f2bec1e61d1a024a657e69b9576076a6c1d6b47dca9816a842858332bcd978d0a69f25c2b051cf9b9feb0dba2f0b7a047dc92e8f11b6a9b77015bee15ee6ea71a811ecc6babaa90fc9464a82bd9c105c600a394f153addc1db5fa33c17990cddb9634cd24788d0a3b13612dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe55f438864ef2a33dcd1ca3767364691085985ef8f411f2902a38068b23af8d50000000000000000000000000000000000000000000000000000000000000000946911e0389d4b583b97ca3d7b2c423ae4a3d6c9fafd58cc8bff8456f17d236b2e53bf69fb1c97e7c7836556c6667046e21cf6785ecd43cfba50274e6df29381"]}}, diff --git a/txscript/data/taproot-ref/228fadb4fab77130e6a42578be8c100758962a74 b/txscript/data/taproot-ref/228fadb4fab77130e6a42578be8c100758962a74 new file mode 100644 index 0000000000..3ce1537232 --- /dev/null +++ b/txscript/data/taproot-ref/228fadb4fab77130e6a42578be8c100758962a74 @@ -0,0 +1 @@ +{"tx": "2922ebe703dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb9010000005c19b4fedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b13020000001998e48adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b010100000093d904b504fad96600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac67c6fe2b", "prevouts": ["deda1f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5841230000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "70472500000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93666a124118b98944227ac8799c33055b94d7e7018f02deaa87dcf78fe58f5e6601ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045bd4c1b076909910aa73b6afb36aebfd26014933f900bad794466c6fcd625cde53ff737734404bbc9015f34371be38b9f5376f1a60720e7cf7da81354011ad4f7"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360294c57366dead3fd876fc32af42a2fa764f9bd5b32489219346221a609003451f8d24c2756f16b9efc524121d49339a04fd56a536f956352850ed4d5018a4abf7205f064a536655663faab66bf2e716758d251376e4a55710082b6d7272244791bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}}, diff --git a/txscript/data/taproot-ref/229254c58edf03c88b0434f339de04542e82f168 b/txscript/data/taproot-ref/229254c58edf03c88b0434f339de04542e82f168 new file mode 100644 index 0000000000..00b0996cf4 --- /dev/null +++ b/txscript/data/taproot-ref/229254c58edf03c88b0434f339de04542e82f168 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c850000000050957517dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce601000000ac49e6a1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5101000000703ea34b033cef1101000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a641020000", "prevouts": ["59c348000000000017a914ff6a0b1cf86e786bc6de2387f1927f71fd08cd0c87", "fabd5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a3736d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "165d142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["792e781772198103647e5cfac1dc4091877ebb5077e791a2c12f8df0eedd0aea9926b2690076ed08e99357dbf7eeab06cd4b6b474fe179a0f91e8bfb1576a070", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/229a032ed00e20e08e27892cc81b53b28e1d245d b/txscript/data/taproot-ref/229a032ed00e20e08e27892cc81b53b28e1d245d new file mode 100644 index 0000000000..f7b973b7db --- /dev/null +++ b/txscript/data/taproot-ref/229a032ed00e20e08e27892cc81b53b28e1d245d @@ -0,0 +1 @@ +{"tx": "e804ef7102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe80100000034edbacedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd1010000006fa7aca801349d22000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787f2e54f5a", "prevouts": ["e25f660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "146920000000000017a9148fdfffe253d045df4a2985902e5465482e50374187"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_25", "final": true, "success": {"scriptSig": "", "witness": ["e61ba9755f060034285cef78e42a9461431cd3560d8e35b815f0c4939697db5c13d18cd88f908990704eb5289b22675d16eef3222c96d9b83050c4ce96a926a082"]}, "failure": {"scriptSig": "", "witness": ["eeb72d40ee7892901389368277850a2863b21496aae1e44ccc936d22b3b8944c3571313c4eab0a9282c069cb0bf5d539802145bf2def115727c7ecd26e041e0c25"]}}, diff --git a/txscript/data/taproot-ref/22a01d7a209edd8694bd9edb1c95de74dbed6fc4 b/txscript/data/taproot-ref/22a01d7a209edd8694bd9edb1c95de74dbed6fc4 new file mode 100644 index 0000000000..d35b577ae8 --- /dev/null +++ b/txscript/data/taproot-ref/22a01d7a209edd8694bd9edb1c95de74dbed6fc4 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6000000000f1c183f860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b201000000b9cf07d303a0995a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca2e5a443", "prevouts": ["478e4c0000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2", "d047100000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "217d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b125012b8c96659eb5051cffa1e2d8709a673f9f71e7e6dba2a97721853c7b7f5bb5ed745f7425de3873ba37c460c85acd2f4f50490d9d3680fc958bb85bfda6f488f9b2dd04714e2920653c1afab7d010d81355bbe53edbfcaebea15ff1da48"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936292ff1b7e178d7e9da4854c31b4400aae8a94314f1c0979690521ac9be0bd43e4f67f6e69cf51b25bdfcad90ab02b519823ccb2f4612df68d1a9a4df99984c88f488f9b2dd04714e2920653c1afab7d010d81355bbe53edbfcaebea15ff1da48"]}}, diff --git a/txscript/data/taproot-ref/22b9de25667093d760c9e17c5477dead3043b33e b/txscript/data/taproot-ref/22b9de25667093d760c9e17c5477dead3043b33e new file mode 100644 index 0000000000..ee62b083fc --- /dev/null +++ b/txscript/data/taproot-ref/22b9de25667093d760c9e17c5477dead3043b33e @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706f00000000c32c43f2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf320100000028b9c79a0196fd4300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac7d040000", "prevouts": ["bd700f0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "b5d872000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "747d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f13115bd78303830deef59a17ab37bfed179177a6532f4fa9f0a1bd0d59f4dc133f027656d2d9f64ade865091a06c0b2adab14558eca27c91472397a1e3806e077aea6ccf316b47e40a0e3636c5ad4f7738b9bfce630d4a478a0dbfcb51ed93"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93600cb8eb27b118577da6335628c0c478e07c27a1a525520767178318f599b32b5ff7c473e619e0ca75adf5145a8683277729cbfddbd5802fec00494435aa4942fbfbb1ef2412aee06f4b75b9e20a72d4d9707545a4ae77abc538f76b00105406a"]}}, diff --git a/txscript/data/taproot-ref/23157f2fc305799762478817c79fe62d896edd22 b/txscript/data/taproot-ref/23157f2fc305799762478817c79fe62d896edd22 new file mode 100644 index 0000000000..c212d60d5e --- /dev/null +++ b/txscript/data/taproot-ref/23157f2fc305799762478817c79fe62d896edd22 @@ -0,0 +1 @@ +{"tx": "ac7f65d102dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c010000004de5a7fabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9200000000f76d37d202d679b6000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e1000000", "prevouts": ["25c3510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "397a660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_71", "final": true, "success": {"scriptSig": "", "witness": ["a456c59e98366ae7ff61f61a89cdffdbd005e7e3bc4fbd099197f1a081976d965bcc584c7e7a29ad6a2625259dae4bfc998dea467e2805617b1632f00c73082082", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ba94e56ba101c1b723b2cd8c1fa8a54c5ae79d7cf1a2439c7af948e861f382e2419747a3b57d514515985d0f717045304887d07439977e31e73fc86ee4a63aed71", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2334138f3c633d853dbab847307d9950c227ac09 b/txscript/data/taproot-ref/2334138f3c633d853dbab847307d9950c227ac09 new file mode 100644 index 0000000000..ba5f4405c8 --- /dev/null +++ b/txscript/data/taproot-ref/2334138f3c633d853dbab847307d9950c227ac09 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706f01000000230ae7af60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d600000000224fd88202d97b1f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a626000000", "prevouts": ["621d120000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "78ea0f000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a97", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936320fe3e7102342eb9f8810633fbe90b9d113dd72dc4507b687ff513a291f00e9bbdd0eb743f16fddaffdc87a703f35bd0417e0996b155e435c0add546ea723b55a7303e26d6b86d2a780c30dbeb7ba87c6a0494b901c3875fb9ca7f2f12bb2fd373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2064e90022f018e8cc473163b262248813e3dc7e43f487ab53623d6c75190b10b282285524a15c732567d099967405d35f7136f74f48f011bc4ab279ad8d14f14"]}}, diff --git a/txscript/data/taproot-ref/2341c37b333e27f887345a539b3a46aa15fe6738 b/txscript/data/taproot-ref/2341c37b333e27f887345a539b3a46aa15fe6738 new file mode 100644 index 0000000000..1ab8045a19 --- /dev/null +++ b/txscript/data/taproot-ref/2341c37b333e27f887345a539b3a46aa15fe6738 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fb010000003f2b16d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb10100000040c4b8b401a85c0700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac817e0b21", "prevouts": ["29c23b0000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588", "3cf4590000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac5", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b7edbaf46c0268ae1918128a2d0d299a3d54c113a31bc8611ce7c78042257f253f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826c8f4b27179de8a3c9fbcc0ecf825a44b7564122e0508108d3381c6acb047da700a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ca963a534af16cff2b21484c634d90c5e0c00f8b3fd57582cf68a2a29eca46015f1aeabcd45f20884fa261b27121b1c083fa5a2716bfd01069fab98e18c3b0e4b23f991898c0f7e80b32f00b838c1f1514616fab2a47083539335b67c2689fcce4d7767c8a9637a0804b073b1eb172c67de67ce152ade33f2591a85dfee2e5a"]}}, diff --git a/txscript/data/taproot-ref/234eb0340c07ea7d86dcfac62e971eae6dbc359d b/txscript/data/taproot-ref/234eb0340c07ea7d86dcfac62e971eae6dbc359d new file mode 100644 index 0000000000..8942582b03 --- /dev/null +++ b/txscript/data/taproot-ref/234eb0340c07ea7d86dcfac62e971eae6dbc359d @@ -0,0 +1 @@ +{"tx": "71a4ed46028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44b01000000ec698ea18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47501000000cce1158c0485037000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac31010000", "prevouts": ["8ce9360000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5f533b00000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6aed", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7af4cfe0f99cca6fd42b4bad50f9f41e4667d74ccb507e77633a831529259e37eb7d8a059ff700a84b94cf01bc4b173d99041796f2088e1a59df5cc5c18f54d86475c33b310e45b92339559838140b9b3f3d62b1cf111e129ddf9f566de62eb71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368171ab9422ce0db519e36e4df069c3183058a2adc3cc0dfd4bb4c05bde2a2f30c9b0690fa0521f4fddf88c65f69e0716898ebb5a52dcb1ee37dd2f34a8a99dbd71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}}, diff --git a/txscript/data/taproot-ref/2363727c5d55ff4d6eaaf41f33d420d94aa0259e b/txscript/data/taproot-ref/2363727c5d55ff4d6eaaf41f33d420d94aa0259e new file mode 100644 index 0000000000..73b3a87eba --- /dev/null +++ b/txscript/data/taproot-ref/2363727c5d55ff4d6eaaf41f33d420d94aa0259e @@ -0,0 +1 @@ +{"tx": "9141e8fb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c431010000009eecc698dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6a00000000ac6348d004e56f6200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca6173146", "prevouts": ["83e83d00000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "f83727000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d7a19d3d760a1d5b978f5f8613b1d81f8c804efc212bcdee817dc6857aacc54dc4ac7686e1050a7898ca46832dc0b13c656b8aa5296dcb10451fe0686117a525ba8b1d0413a3689afa6e2d3b5e2c7645358d98c43f6c96a422c82685ea6ebed243c7016fa806ba9399c8748af43c67a9931dd4be53300ce189c0addca0147628838b9e44c160d655842f291bfb9229f8c849f630e82253daba9d615aabeb90a2ceb5e9fe548869c37c426773c51df4089cc45f472c69d3ae172a3e96766e4056d2bdd2c883828986bbbf628f78aa9193925784cd080760db15db2d7ddcf232709c468cfdf7f2279136b433104d8a23a726f2e024007ad37bae5a90d61502cabcbacc92aac1e945356c7b905510a04afd1a64056f3ac117e963500e1cf8388dd97fa005b259f8db467372ce304ac59e5233b4cac90f1a410f1b0baa0d30fe804dba19e1ff4cf9f2b46ecf12e1835c88830dc7e5aebb781a630d83beb145a08231e9564a4938cd0864f24f088881405eee602fafd96a120b2fea89c09290402625ed0448801b41bc85baa36810c816cec4ecccc1b9f7044128c1c6ab50ea6dfa8eb8352d6ae2b3a1b8c907ce62a51c3f29ea6ebfe3efa32fe0565bc9b1d09816c004080d40fc21f62bf917edab68690ef37e27bf9a10ee365f1758b8a71b90d6034749ed1d48f90fce1f6045794a00ab8a72f6c49d7fe4b976e89d16e4c3db3a5e39b0e9f5f9688fecfe75e0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456b8fb8a6613bd9c6482328b74d7fce63938f8fb7ab14fbe335c660b528e72f6791d26af6ddceab3892536958f1ea20dd7b885ab499207106c7decaa6511a0e4c5a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}, "failure": {"scriptSig": "", "witness": ["4d09020b84cf359cb0adde03512043954d24058956b42b615de75e6ddcec21df184bbee6c863bc11286694c694fa0a8fb65ffd60304f9f96b4544c14b4163f76923b3773fa746611c4d6ed29af4f8586bab6bfd704aa6fce0c4c201525bcd9e901377bef2915acaaf853e616153933c684a493de9d51d53070dd21d318657b6e654313159eaac3addf54c3f0a1814ec5482b7a7fa7b1f238805a7aaa66e0bf60414823d4b4e7d0fe091a60c1cd66dcfddebe80247654548220e63422fc7f0dc44e3cae708fe297fe5bfe97ecc73c25866c039cbd034bc54b6f60057139722de21b9c669e553c41f949c90e247c81b99aa5657e59d4b37d8b1a659de394957c8314b75bbdd9897bacd2807566073306ddefbb9cc32b0e37b155bdbfe4661ecebdc1825c519c8891a70bdbde9adba7b0cb294a33e87063f83f2e68eedb711f05ef97b8f54fda4d774496bd20773ee5d2d30bdd1031e531c17af6d13ea321a25817cd36a054b8a2b70189f8d25e3b9f1c23f6f745888ecd6ce590cf1170bda83381f7f34bf8baaf0721660aeda86a6726110b58991b0b6b81fd646b1ed5ff8fe10d040116b3727c80c013cf3daa792d1f5b73607be9bc040cfc6fdaac30395ba9914c3a94410af93ca306ba3e225e37b7cf9f8efe90fb68caa92732ff00d975d833066968d7a6b23c164b93fdc84a95083d1f1c7bea248b3b703b2fcbe6c78e51a9380ffe2a722004d92283e08d7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bdcf8e50873998a844faba380504aa6a4d6e9de9af7f46f4843b96a4d07d0a1c0941252319b1d0989c3ca3905f2d65278f17fb3ebe6fd71301329f8e450b42a05a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}}, diff --git a/txscript/data/taproot-ref/2364ebc1025f0c764130435a3da1d5febf1ac0a5 b/txscript/data/taproot-ref/2364ebc1025f0c764130435a3da1d5febf1ac0a5 new file mode 100644 index 0000000000..31a232032f --- /dev/null +++ b/txscript/data/taproot-ref/2364ebc1025f0c764130435a3da1d5febf1ac0a5 @@ -0,0 +1 @@ +{"tx": "1440bee6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44000000000a895e88fbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf52000000000366cbad01bc8c1b00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac83030000", "prevouts": ["a0853e00000000002252202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "44c57f0000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["9bde27e94522f6809244df9ebd77fd059392ef6e9929729db2a23e7f354cec06728b50c787bb54d821f0f6b64f38a80b0d65b35c5124dc4dc8d03381ba66de4e"]}}, diff --git a/txscript/data/taproot-ref/23873275d271cfb7c8271e4058054ab8102b18bd b/txscript/data/taproot-ref/23873275d271cfb7c8271e4058054ab8102b18bd new file mode 100644 index 0000000000..732a4424d5 --- /dev/null +++ b/txscript/data/taproot-ref/23873275d271cfb7c8271e4058054ab8102b18bd @@ -0,0 +1 @@ +{"tx": "57a8be88028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4360000000053d6dc89dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c050100000069ebfe9f022b60820000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65c37ec52", "prevouts": ["657a3100000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7", "1017530000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "b37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b1edffd5a893e5df644ec9dcdc719e8bca2e1f26d5763c3eeb38ec8c4740357935a4766d58ec26ce2b4efcbf65574b66558d9985cca85178600ded982bb1eb8a33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a368ced990ebadb111ebc3982eac7e308f07f99a9264ca6c949f56162916d7884"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93657cfe4e05c2801526133fbc39f19ebc94f094228af725e239c5bbdc23ebbaf663f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ebec8f444f9538a00b5e533aa370349d7181cba703021b72fe611d481b359a8e62055c347ba5402321504576f6c37d0c6cb1d044ee75df535bc9eec0560634a7"]}}, diff --git a/txscript/data/taproot-ref/23ce0a835c3fef13acabbe51379451af1bad4377 b/txscript/data/taproot-ref/23ce0a835c3fef13acabbe51379451af1bad4377 new file mode 100644 index 0000000000..9848cc7afa --- /dev/null +++ b/txscript/data/taproot-ref/23ce0a835c3fef13acabbe51379451af1bad4377 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcf010000008c867549bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe200000000ef2a1b630206169c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71bbb9c40", "prevouts": ["35f922000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "d5937b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["ce4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb2c5514a992c22e53e3a04f6b085a9b65917ab3f28cc532348e66ade0afda2c959bd9b34bb85690c892593228383c48f2c7a3855b4947a3dd1708d13c567655d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}, "failure": {"scriptSig": "", "witness": ["4c52ce", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366e56b48b572a1cc7c2f3559a9632e4e2bdf1e7b793f9a11573ce0ed706b87c990ea67bdb3398814286540937ec364df004af879f987225ad05d036a51e8223e6d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}}, diff --git a/txscript/data/taproot-ref/23ee2abacaf9004b59fb4b0c0bf4fb0518c0b719 b/txscript/data/taproot-ref/23ee2abacaf9004b59fb4b0c0bf4fb0518c0b719 new file mode 100644 index 0000000000..c7400ea1c9 --- /dev/null +++ b/txscript/data/taproot-ref/23ee2abacaf9004b59fb4b0c0bf4fb0518c0b719 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccf010000000c1a2eeadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce100000000a5df58b402ee86b5000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac3e5be55b", "prevouts": ["6a2c5a00000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "604f5e0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000df", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d781ab0fc22299030d8088d2502bf7faafb676f2c6fd3570596726d37b72f1ea18b5f2fef84521b683d8aac742b48aa2197bd0282730b1a4f3a8fad5441e2c71c315aec02adde316e700f87e7c47f474d1ec7cdd06b196ee567d81a15967a13360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369f2178c5a62b4c30d4502e396e591afca727ab38280213cf79bd50a97c5a07b199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45385991a3000310359e2a9adae84589f286ca8f4d4476598a0e772bdb8ecbe6352ff338358c59a252efd0a17af70f1cdfe194eb24c5d50483b26343bf89011bf"]}}, diff --git a/txscript/data/taproot-ref/24189b1ed398f5834d414ec0517d0e4ec49e5123 b/txscript/data/taproot-ref/24189b1ed398f5834d414ec0517d0e4ec49e5123 new file mode 100644 index 0000000000..ae0404cd4a --- /dev/null +++ b/txscript/data/taproot-ref/24189b1ed398f5834d414ec0517d0e4ec49e5123 @@ -0,0 +1 @@ +{"tx": "dc9f3d8802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf46010000009ae647c88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44901000000ed7e76b5043306b500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8725000000", "prevouts": ["89a97b000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "5f003b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_67", "final": true, "success": {"scriptSig": "", "witness": ["863013d4da2ddb0a46deb8b892d3eb016fcbdea9c696bce69f15e1aa6fbd98006a72109f81297ab644f1d0e9894e63500c4af91b399c39921c7388e960e2b31203", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f672b112d731d76e4b4d22617715711ee17afbc16e51f1f3aef845b1fce57650326a639e81e3acf410e5daa35ff55e6f422cf1db39b4e8021456d3e1120ce5b667", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2447d402d9160d103faa8fce8f16b8201a516a4c b/txscript/data/taproot-ref/2447d402d9160d103faa8fce8f16b8201a516a4c new file mode 100644 index 0000000000..cb47cbe4ac --- /dev/null +++ b/txscript/data/taproot-ref/2447d402d9160d103faa8fce8f16b8201a516a4c @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1601000000ce4364e8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe400000000a9dbb2eb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46000000000b49550d804b90201010000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc60416b55", "prevouts": ["b6636600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "becd650000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029", "4eaa370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_keypath", "final": true, "success": {"scriptSig": "", "witness": ["abc52c9b6e558009b409314e7eac5967890b3ab0fbd19460eceb0e93b7565442ece6be3ecead53f592645f60ef462641aede6a98a50fa514baff89d7bcc0e83d"]}, "failure": {"scriptSig": "", "witness": ["abc52c9b6e558009b409314e7eac5967890b3ab0fbd19460eceb0e93b7565442ece6be3ecead53f592645f60ef462641aede6a98a50fa514baff89d7bcc0e83d00"]}}, diff --git a/txscript/data/taproot-ref/244d1fe0151e8979539727b36d9efd4236889b85 b/txscript/data/taproot-ref/244d1fe0151e8979539727b36d9efd4236889b85 new file mode 100644 index 0000000000..13dae4f720 --- /dev/null +++ b/txscript/data/taproot-ref/244d1fe0151e8979539727b36d9efd4236889b85 @@ -0,0 +1 @@ +{"tx": "1d7233850360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708c010000004c7f1e8bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf76000000001971cdc460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706001000000c78a86e4027ef68b0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f877bbf5d2b", "prevouts": ["4e1e0e0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "19636d0000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "a6081300000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ab7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ce8c86c7323be371b6600ab2618f7270fcde0f103b94fe3f1289a4691bdc2f0b588819b06684552554786b2b49e7cd3d9dcfc0725dc4b3b93f8768a6a84fb31b7c07bb1aa10d02d314eb70c923196d0e49e71087637e2d5a1d7fe44c2440c398"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e894b0c937046f490030e0d20905ef6ea85b70027c49d9391eab6e36e103b9e792f3dd0bfdeb3f64daf38e1101738c14790d5f1c68393c583b55b6fea5718d19818cb303569f28fbe8acbcc2d27d183e3a68170f5392df28f40a03efea695d856e"]}}, diff --git a/txscript/data/taproot-ref/24b9d083b99a1fda505df14b9b98cadbf34618a3 b/txscript/data/taproot-ref/24b9d083b99a1fda505df14b9b98cadbf34618a3 new file mode 100644 index 0000000000..be23af65df --- /dev/null +++ b/txscript/data/taproot-ref/24b9d083b99a1fda505df14b9b98cadbf34618a3 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfda00000000be838db68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e80100000074bdb79c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b0000000006cc0e3ed03fdbde60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a613ede228", "prevouts": ["566f7f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5c51330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0198350000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a", "final": true, "success": {"scriptSig": "", "witness": ["ab6f2a367aaa484bda76cf2cb22c487a3174d962013372eb1507ff843e34eadf29fef3f39b6974c382e939309acc68924a9d49e2d55515bb0ab5ec4e15f3dbcc02"]}, "failure": {"scriptSig": "", "witness": ["9d6fe25fcb93992f8d739c892ae3ce58646a41defc8dbe43097bd1a8969882bf972ba62b773fb797f35d670c68b25bfd115b0dbb0e0499496478bf62bc2d21260a"]}}, diff --git a/txscript/data/taproot-ref/24bbb3bb32575090a29c31c6d367e46898dc602a b/txscript/data/taproot-ref/24bbb3bb32575090a29c31c6d367e46898dc602a new file mode 100644 index 0000000000..0394110baa --- /dev/null +++ b/txscript/data/taproot-ref/24bbb3bb32575090a29c31c6d367e46898dc602a @@ -0,0 +1 @@ +{"tx": "1bbfd49402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd3010000009d9e899b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a701000000e3abf6f202e8b091000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487859f2c25", "prevouts": ["b31c5d00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970", "5ffc3600000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "e47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366bc9e6400471d4508039602a6371cc2fb521d342dad10229cb10d12c2b95e76f158e114954b29a1fe443083941979d23a0210cc324956afb3dcce424fb4eceefbefe4cc2cebe7bba8b4a4f82666342333b91a450af49acc0f1954b5763bfc142"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa0d58db0463b9d01080baa2617114f2c0459e5723b09a0137090d28117705b675ea7c8dd4a05a6083e4a7ce3fc20cde94d430ec03cbfbe8017e9dc8ef3bce99a9"]}}, diff --git a/txscript/data/taproot-ref/24d0fbfa8bd2c68fd6ee1e4839bb0d5bb73ef21a b/txscript/data/taproot-ref/24d0fbfa8bd2c68fd6ee1e4839bb0d5bb73ef21a new file mode 100644 index 0000000000..14b2198114 --- /dev/null +++ b/txscript/data/taproot-ref/24d0fbfa8bd2c68fd6ee1e4839bb0d5bb73ef21a @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706c01000000ba310ba08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41100000000bb14c6b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b42010000002e7adaf704ccf9680000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987d84ad23d", "prevouts": ["3b2c110000000000225120e0fbe9053c6d2a439b1df3d9c89ed0e68b8279a92dae6907e23437dbb3b4029a", "a9cc330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6891260000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_7", "final": true, "success": {"scriptSig": "", "witness": ["6a566cccf8d556b725767057e9855e9c75da02cd5ecac659c8e7aa317cb7ce19154c5e66479190706580cf8ccffb3ee9b3d34c0414cbd4c9d7993d7c9982c86202"]}, "failure": {"scriptSig": "", "witness": ["33a3ba65412efccc995c72a550fc3d0ee02d63309953043a9b3a7625796dc71d3f0f5dfce2bffcb90843143fcd5e266635675865d9e12e227ec0ece6e3dd8e4107"]}}, diff --git a/txscript/data/taproot-ref/24e2153d05b71ded99689e64661aa90af06300e2 b/txscript/data/taproot-ref/24e2153d05b71ded99689e64661aa90af06300e2 new file mode 100644 index 0000000000..45d78cfb92 --- /dev/null +++ b/txscript/data/taproot-ref/24e2153d05b71ded99689e64661aa90af06300e2 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127031010000004cc7cda5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2c00000000af66aafd030a6e79000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87dec2e433", "prevouts": ["a3ab120000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "b7c06900000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ae7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fab92d0c8bb72b9935581697fe84ef0173536b04207acfd5de8a2df8889a2a895490189ee9b6b94816743a58868693b6f0ba58cb07e4c6d5ed2ce590077e887d5b"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364894fe7b01477097453262073e919cd09e7fe7002637f313a53b18e1ba28b741b509ab67bbf3c81955fa9e200008a666546f84b8be37a00b57f87c80ceedbec790189ee9b6b94816743a58868693b6f0ba58cb07e4c6d5ed2ce590077e887d5b"]}}, diff --git a/txscript/data/taproot-ref/24f5f696fe56cb9b25c9d12a9606b6d6f531d6db b/txscript/data/taproot-ref/24f5f696fe56cb9b25c9d12a9606b6d6f531d6db new file mode 100644 index 0000000000..5344352c0e --- /dev/null +++ b/txscript/data/taproot-ref/24f5f696fe56cb9b25c9d12a9606b6d6f531d6db @@ -0,0 +1 @@ +{"tx": "67281e5e02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfea000000004aacbe908bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42200000000a23368a302d754a3000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898740461b2f", "prevouts": ["a9f1670000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "032d3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_6a", "final": true, "success": {"scriptSig": "", "witness": ["e00afe554272977ab3f2b49abae534781583d7ad56333709f506f3374d33eef12f64831a0760bbf6ebe943861d12fb4782cd4be5c2ffed0f4ef6cf62ae98112b83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a2aa46f3072abcf280b77d2244b9bc38a46f398b11ef902183651c3e5164c5ad7ec3f3f84a32670ef00ac3ff6d05778f256807269c913366abd1839ac88817dd6a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/24f8bbbbf4e945080301e930844b08d263783100 b/txscript/data/taproot-ref/24f8bbbbf4e945080301e930844b08d263783100 new file mode 100644 index 0000000000..e95f60e31b --- /dev/null +++ b/txscript/data/taproot-ref/24f8bbbbf4e945080301e930844b08d263783100 @@ -0,0 +1 @@ +{"tx": "edcfcdd702d9befb1e9c529d7d9073823d42f590d5d83a9ae9e8205a58b2deac400aa179de0000000000aed2b9bbd9befb1e9c529d7d9073823d42f590d5d83a9ae9e8205a58b2deac400aa179de0100000000c9ef9ecf037bb08b0f2100000017a91417076ced824a76f7f00aa0b9ce412f8713d9a8a68758020000000000001976a914798a0f34de6d8f95c4b7ca7c79a0cd208c63fb0888ac580200000000000017a9146e2b0fcc2c4086d85becf46dae6d7af8c0bb07518738d6ea54", "prevouts": ["d453c1ad13000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "8032cc610d000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/keypath_valid", "success": {"scriptSig": "", "witness": ["b0e70b088525ec9342c39ffbeda6de86c95b6f4e996aa4d1877d6528a735d6f56f6c5047e4ad727e6c8147f22df9423a81218a920b673bdb6b66ee9f457dcac4"]}}, diff --git a/txscript/data/taproot-ref/250db3e160a3b1e5fb27d5880463b82d2da450a9 b/txscript/data/taproot-ref/250db3e160a3b1e5fb27d5880463b82d2da450a9 new file mode 100644 index 0000000000..817a031b56 --- /dev/null +++ b/txscript/data/taproot-ref/250db3e160a3b1e5fb27d5880463b82d2da450a9 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2601000000813b7ae6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc100000000e9fc16df02e0e58e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac31c5cb4e", "prevouts": ["c5496a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c351270000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b6ca9bd00465ce94790b3b7a982cef870607517f3d3166496de7dbf5954c12613b218f74fbd0c55276c685331fdb0afd974d82655877a178fabd8a81865588a6da74b77cec5b7fe449456850d166470def075aebaeccf9499b10505089f5a1cfc7acfc3c61e892a316f931a7e8a743174c6f9d4dde170747ae9fbe17ddeb8e226e47d3da47b9a193dc9a7264e112daacb6f035e28c5102c6322c133c5f5d0b1bb197927209056cbf10e65ed20ee2eea49bbabece407e63d9389b55497709689b44fad0ea8d4fee74cfee5740c541ca49e9673207ed1c91a62bd89cece466f5041baa53f4877b4cfc8ac12aaed89add43ccfcd8614fb3448e11119743c06c2c27fdf88097760c4c7fb482ff62ff52f95440b228504b9369885666588b5aa959d63642f6a47526912090d7eecbe4577ba7566ab1db067ad735b38ccdb03512eb6a8fa7442aaadacbdd3f6a5d23d69b9f0af76d5a288097f92b1d4bc459202435466efdfabe45bb529d952e000da4af29575a01d1caa8864ee77d8dd70f110ff0caee764a67658d9b9d0b8a44122ce224b2625c2c7ca1a2824d78fdfa1b07881176fc1c37a8847e7d8ccd5738fbf671df2af66a030bee73931c9e2657ab6c06fa189af7a1adbdab9b9aeab90c85d457d6edd2238c1aee017c00eaab0ff850925e168cda5fbf9482886ac931bd6a5c74241ccf19c6c7404ebf7e3f8f51cba95a9e4d2d8e39fd5eb5bf195475c4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93640426f7abc0edfa3e5837ac88df8e230a9790a46604f0df0976590e171fcb82c1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045161570c3f10a90b75a16babedba4ef90c71a7e82b9436df981e4930578e77912a95f177959a3d24a94a797d1e607e5550897d4e95d12a52323e6e8eeeab3383c"]}, "failure": {"scriptSig": "", "witness": ["4d09026d3cc0d5b63b2610fac20b94fbcb41610aeec5956b511addfa87dbcdbaefc7eebe8947f2684977c8e598abdf9a0f776e51be058cb66ea05fe55aedcba2f9e576121e73dd9202aaf615367a08a46de36784d8eaad291b896b7ac5dfe654c93fbceb111f336f78dab89e5146430f3543b046820131318492ab4520f545a20f62b25828cab0aa3cc5dcbca3f3d0d454bd57823890a8e73ec4e0fb3393f34b42e22c782d8e5221d30282e3d0c91b60449f3e8b9304fd8e6547f2b239385ceb9b2631ac2e7d8b00c2d99f588ca876d9e405d017c9f3c3f9a8806bc7258f3bca0c7f2a8e1216042e649b8965bcf7fb01c9aa5db3c5aa942a9cd51e977281b3d747d72e783091cef5ef104751e70a066df14e1d03fde151b640efaaf6d606696b9f9034fdbda7d2e26ecc6d3075bf45695e6693f762752c121af7b799022db8e5ec0fea45c6b2fcd1b678c87f9861e7b0b3f86af0397c4cbc42780ab6873797831077171be6e0e71121e699eb94c06fc2ee4c8b27161d529d9c8fbbb1060fc15a6c6cd2215cdbb88e560ad167b99b03b058db52d78b14b1b51b7588c126ed7babea7e89aeafc539d5d3dc0f5612e50e31d95f3b6ffcd9b583167a929c32a15a50b1311f572261c5793a0e734b245611cbc636fd664507535e33c1b3352d13c0d0a011bda9d54974c888386e5f4eb02d1c213c20dcb0ec07b731ca05b715335c8bf12fa6aabd0d23e3401e39777561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c204e79a2ed843ca0f497febf0944f07030a971653548149129593a3acd07f1fd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5174048a48c6eb42f280da39a6557d46ee4318cb4e3319043ed115bdbceba7fd7e7407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}}, diff --git a/txscript/data/taproot-ref/253542d32b85965ac57232e3741542be2aa8d091 b/txscript/data/taproot-ref/253542d32b85965ac57232e3741542be2aa8d091 new file mode 100644 index 0000000000..67ec90cfd9 --- /dev/null +++ b/txscript/data/taproot-ref/253542d32b85965ac57232e3741542be2aa8d091 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d1000000007867cfcbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf47000000009ee3dbbf01c2b77700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6c0d4c1e", "prevouts": ["55523c00000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "ad3d770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["864c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4a89eab7efa8b8df17a82e815a072b99e340ac1768e499ee92fb25d88959474e250636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}, "failure": {"scriptSig": "", "witness": ["4c5286", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93696d81c4fed743e71eb520662c2db8c0fc2de5c834e975d368200854a3f19047c9a49af0eb7097a2b25f70d75fc7fd7c267678862dc5ecafe442b2ce2fa2401f5a112aec6b4b8b5b1ca7f36a9e0521bdf2c7802df3cadcb1e8aa67d830b4a0d3fd33ab5c29645e0220ea4ffd8cb7e67404885cb8b0cf94872336c7b06d59c3124"]}}, diff --git a/txscript/data/taproot-ref/25452194c45988fdb9442f977481e8fb95b4ad75 b/txscript/data/taproot-ref/25452194c45988fdb9442f977481e8fb95b4ad75 new file mode 100644 index 0000000000..5990ece591 --- /dev/null +++ b/txscript/data/taproot-ref/25452194c45988fdb9442f977481e8fb95b4ad75 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700700000000cf91ab8ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1e010000002e60e4f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43f0000000034add3ce038151bc00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79695b58e1e", "prevouts": ["055d0e00000000002251203236882dfaab6a61030776953d98ee1af902cb36dd280fe66ad8ee191278ec27", "e3536f00000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "e1fd400000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_7b", "final": true, "success": {"scriptSig": "", "witness": ["00559de3606cd6fb38dfa5bd6a0cece71320a2d5799b2f8df76ece1731b38d5e67ae7ee68f9c2efc1f9dccbede1c3586122debda6c390f1351aeb6c0784f554e02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3562b94c856a14147b325fb36410535b2d563f5b4302b04b7a68817b6d461b2274adc80d114388f32f51cbedde6e71d4859959baca2c45bbddc735229bdc8b1e7b", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2546c1139a14d6b2b3d6b9918c96de6e589fbf07 b/txscript/data/taproot-ref/2546c1139a14d6b2b3d6b9918c96de6e589fbf07 new file mode 100644 index 0000000000..1506c6a40e --- /dev/null +++ b/txscript/data/taproot-ref/2546c1139a14d6b2b3d6b9918c96de6e589fbf07 @@ -0,0 +1 @@ +{"tx": "7c7bc09502dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4a010000005814a0c1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf72010000002a1554c90484e08300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7fc000000", "prevouts": ["d98421000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87", "3e4f650000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["3044022007a486a869114165d5fc919c2eeec61779fc7b02a178f36b22edc5cb6a9ece2f022006e6213f5635c03fd8510cffe1da06601b5f4300c850699773a64590442945635f", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["3045022100cea15e514cdb25add06b3fbd62c250979141615cf92db862a8914169378ade5d02206ab02b7dbaf2f7ba0a077b95ae41e194116ac2c134be22be0ffbb84159d39ed85f", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/255e0819d8c9639459a4e49579fbd923cdf9240e b/txscript/data/taproot-ref/255e0819d8c9639459a4e49579fbd923cdf9240e new file mode 100644 index 0000000000..30f8010742 --- /dev/null +++ b/txscript/data/taproot-ref/255e0819d8c9639459a4e49579fbd923cdf9240e @@ -0,0 +1 @@ +{"tx": "5212986602bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe100000000b6aa49efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcb01000000fd92fc8b04ca0fa200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acecbfb437", "prevouts": ["7f66820000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1060210000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["814c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93649f82d663a1e447420f2cf05179af13964281439b8b427a6cb4b09af5b0cc191d3571a06a1d33120289e06483b2785a7356eedf367170ec7792d3587508789d4da9670c383f4b71f5a22d48df0589bd68dfe195935a65f1aeaa80f10f8ca6973"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d2fc2950fe45156b8c56aeb245dc43c1c6a55e17e72ce5d38a429da4652849019c228cb7ae814d70beabdb725e2cb3ba4f8af3a16648b1300fc97d27ac433c5da9670c383f4b71f5a22d48df0589bd68dfe195935a65f1aeaa80f10f8ca6973"]}}, diff --git a/txscript/data/taproot-ref/25608654bdece6361519480d9115afff3312cb31 b/txscript/data/taproot-ref/25608654bdece6361519480d9115afff3312cb31 new file mode 100644 index 0000000000..bf4780184b --- /dev/null +++ b/txscript/data/taproot-ref/25608654bdece6361519480d9115afff3312cb31 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5e00000000bb4e8ee2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8501000000acba6b03047a1da200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac91030000", "prevouts": ["a3a5820000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "952e220000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_bf", "final": true, "success": {"scriptSig": "", "witness": ["f593154ba8af9b372c525572230278b9c19b2a48dbd79fc5dc97da5541c23ce446f3ce84a544c17463a78167268231f7a3954f38be52d4629d08ead3369482fb83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["dedf1a77c9358f8385d28ea34d869318f7ad41ab42642f269cce982fec028412edb4234c53457221ec57aac1a2883eeb37b2ef75eb7b4a7141237ff2e293ec8fbf", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/25bdf9d085288589dbb23f1fc7d98f7783cb09fe b/txscript/data/taproot-ref/25bdf9d085288589dbb23f1fc7d98f7783cb09fe new file mode 100644 index 0000000000..3b442d6db1 --- /dev/null +++ b/txscript/data/taproot-ref/25bdf9d085288589dbb23f1fc7d98f7783cb09fe @@ -0,0 +1 @@ +{"tx": "82e7331e018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f6000000005e138bb703b93e37000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487db020000", "prevouts": ["49d039000000000017a91482be44661ef9d172a86ea47619409ff206130f7487"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2256202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["6ddce3068c94bded449e8fc546ab815d4baf7ae5981f67b59a6a85fc59ba731d1e5f4c659e5d88afefc4bc08228f2f291644dfd3a99a48b60452f4416eedf576"]}}, diff --git a/txscript/data/taproot-ref/25e7910e53d821321fab3c8bb9db847f37fff616 b/txscript/data/taproot-ref/25e7910e53d821321fab3c8bb9db847f37fff616 new file mode 100644 index 0000000000..23a6ca6a7d --- /dev/null +++ b/txscript/data/taproot-ref/25e7910e53d821321fab3c8bb9db847f37fff616 @@ -0,0 +1 @@ +{"tx": "6f7d0d91028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45d0100000075023faa8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e9000000009cb7bebe0114cd4600000000001600149d38710eb90e420b159c7a9263994c88e6810bc722010000", "prevouts": ["db1f410000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "a72f42000000000022512012d5e5f1356f7dd71d8fd34dd655f0d6117e8d6eac3bda425a0cfaea0a76750b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902474f16723479a702a9dd4086a6d913f04c60f046a28d4c3bdef03770d37766806130148165a399b8398f1a7a6101dced6c179bb01a4f58171a3cba1be405f3a4d6e4d8915b513563548274b2350913689a2b297bd7fb11c436ac69da8b7dc4e71c6d4956b2311aecb026f17411b65d6693f46e2f2cb4d9adc69ca99be0ced3e6ddb431514a79ff28635bff881dc5d7f0997c15764471eaa977e515916f501a35b6f85748b3821c1f18e0dd7cefb1455cdff896a1884d916e645c5a61ec830590af1a715d3653178f3d9f4784ee3080b83e4d9ac7c3a5285b1810bdf9c9641904258f5c2e5a810c831e3ded934f04c6dae31a4513e05ce52f75339f0bf2a9d8370395dc56c695b4e94e35703d06c2b89e79e18b6b7b1a5d29c6764f85c76d71c5f75514fcad37adc8f88b724532f65eb5d94402c31bf5217b1ee3fae3a1cc724e889c3bdb0f4973d23b1b023badf2786ad5f8514fdc9c901faa73face5ca598e7c70e64a38547e50fdffd7e67612061c7dc8c8c442c7dacd71b0961aeace9aa18b4c3d9750fd3b07b6b82b03abcc7e486c33345b8d11de7dfea74b29c0e0e5c379a5a69a80fd4e081df770950757e6f3adad7f637eea9e39a8b6d3f14973443ec2a78bd46959ebbf5f86b8774319f94349779d879b54120ec4e95040120837343d6958b3fc81fe9752c28b02d1bfa7c575be75c3b69f8e72552f140154a3fa2ed87cf9c0784316d013f758d", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e1ff68bf827032ff32c71cc2cc31eb8f40be3e575e2b9e5ebb1de96bc2fc57fb6a7569334f57ff848fadca8fed75a3aad007c69b24557dd271b830b96d574d63f2f7628d981d9c0428415dafbd1cc169dd3ce50060f3002d6f03fa895459568af43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}, "failure": {"scriptSig": "", "witness": ["4d09022f5a3443246efea87c796510050d88cf4e3457f805df227ef0f78f28e0783d00488533cf9debf1b6fbcdac460fcd69643214a3c1065dc5c6775a77c9d91f10479c2c465fffc8b82b3c658eb8289dfb776218fd29e1299865e770952f0b6ba7fc28da221ba35699be6f01dd6b4e07e335abff4a640b5ea9bdd08d07aa5dba50010c194d02ea6aa3c393aed2b51aafb7e7ffa26cbc23836ba1d7986eb90456a905dee34fa3195e04ed92a5e2a64dde4a2580ae0a71b94a2dd247cb63db853bb88d64dea5ddaffd9a0cfb57322e76f6fb12b4239eac0b2408dd779a90255ec907eb7c27664ce924c6a6920d6c793a65ae2d0d12f4b5a7b51db9cc92798737643f63fa7bd1ccb64a737d749068fa91fb7de636e1cb3086d6865d538f2cee23bd9dcbbc4dd7b05d582f75a54b58a751cb45358bb07449bf60035f3d913d5e31074139a57acfcced21d25eac61e76c5e9a586804f18b12f4d60629809c43396cd345106c971019b88f5c485a7d84d057e3c5f64ef1057d0389cb598151d4b8577774844dc0a4cdc5c1fa841f9f41fdf9557e59cf3f274f02a2b16b2411ed9e1882ea17cab93c44850f7a768512a7212a1679bd8066716d98b61e046d9997c602805698256778c56d3866b4cf166673f5ee8ca2820a58ea7d5068101a053ac1af88127f59b58bdbb2b5125aec4c27da2d1eb65e05c00109a36fd167a8e09a6b9e7c944af4a82ec2070aeecbad7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368c644295f81108e0be886f59870f13809827e9d797ba4690398470dbc4c919c19886f85ebb300297009aa959255e1f8e976b091c7e06b33477ed400c40a83b4c185c953dbf0a33402e724bbb72e47d874a897a0941d53d9706dc82e2e14efc19f43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}}, diff --git a/txscript/data/taproot-ref/25f13dc685e40d3fb22819356cbba4a5a6789e15 b/txscript/data/taproot-ref/25f13dc685e40d3fb22819356cbba4a5a6789e15 new file mode 100644 index 0000000000..b23e75abfd --- /dev/null +++ b/txscript/data/taproot-ref/25f13dc685e40d3fb22819356cbba4a5a6789e15 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4b010000006599e3b460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e9010000002319b8e0033a632e000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a3600632", "prevouts": ["b22e1f00000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7", "0de6100000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b6726ecd04cb905c4ce1620edede51b486a0bd5e02be9efb7864f9dd4803dfc8a154b22b0f2e2bdd7f3b34b8feaf196c14822a5749c8a329692c0e12e8447d605976fe26432a41f3547171b2b9abb696d7de0172bd15211267873326056804912e839b87dc613c826a9c62085431a96f79b8782d4b0fe31dfc75aede09e250a"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363993fbb03bcf38c66ad1844758b0c7119cbc650054de9c9a3fd376fb91c92df78a2960a95becb1bbbe0636e0493c58f712af9b8da417013d797bf12c130ac56070886d9e3726a9aa8a2b94454683b5181a970edd894e0d0cd75aad09f75436b2"]}}, diff --git a/txscript/data/taproot-ref/25fd25289846f102771af05c1445e63acb583b93 b/txscript/data/taproot-ref/25fd25289846f102771af05c1445e63acb583b93 new file mode 100644 index 0000000000..7db41a27f9 --- /dev/null +++ b/txscript/data/taproot-ref/25fd25289846f102771af05c1445e63acb583b93 @@ -0,0 +1 @@ +{"tx": "abcdc84802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2300000000aef782f1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7f000000006a9856a70490143e0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df97972236898704010000", "prevouts": ["dd33220000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "a0951e000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "8f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936963dc86bc71687ecacc1e5b8f2c4145fceca424a4eb02fbe2bf7a8e8f9bd1024e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e81f261744aaaab7b61bfd8b873ce05c274059b1d1cb072d2d2c67e8900f407405dd5f972b05e2f18c3e7c797b604beeb8879a3af7f1e10968a0ac8aaf9d489fe7"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa458187dbd74455692a21727c8254a8cae6fcc3fc3c7e883861248db6e64d9919f8fae370a255a677f2f729010dbb329fa966ed9a0dd82e5083dd7ea90426dc47"]}}, diff --git a/txscript/data/taproot-ref/2619632226257817c56eb288a9d2075e56dd0e34 b/txscript/data/taproot-ref/2619632226257817c56eb288a9d2075e56dd0e34 new file mode 100644 index 0000000000..85608e340d --- /dev/null +++ b/txscript/data/taproot-ref/2619632226257817c56eb288a9d2075e56dd0e34 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4df00000000d95f0a96dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8f010000003207e989016e8a0d000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d3010000", "prevouts": ["4a6b3a0000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde", "6934240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "477d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8af5253a3ae898682e613588786a672ae77746787ad628dd74364be19bb5242936657009e9173c5ef8826379cea4b8c999e3ae37a5805e4cc6da117a3d2ee0eec"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93624f7d08525b5d52815de985e807035e6f0110330bf2d62b1ce3b9c92499c7c7ca24674935b347637fb115fbceef28e6d08e5e47afc6eaa336546ee2e891e964bfd9e929a06047270fff43ba4c6b47136464c62381aba7ed74ab98bc69d199aa4"]}}, diff --git a/txscript/data/taproot-ref/26300a1704f502625832730a36d0088f21a46e2f b/txscript/data/taproot-ref/26300a1704f502625832730a36d0088f21a46e2f new file mode 100644 index 0000000000..cc845a15a8 --- /dev/null +++ b/txscript/data/taproot-ref/26300a1704f502625832730a36d0088f21a46e2f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf19000000009d3e6ea68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44800000000855c81ec04bce4aa000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478709000000", "prevouts": ["c8fd7a00000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9", "b6d4320000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "d07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362b8a3482aa7cb17cad77f3537e7f0fb67661c6720f234fbfa8fc690463546899da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e15c449093bd19eda03bff23881ea6078d018b9cd0ffff6e12447ca822e876d277e36b196311c1a9d305bc653889017f46f4c4934a1587d131a83127df4466fae"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360723cf45802ddf87c5577cf46e20a53b28825f20a581d36a06d1de070a7e046a1c85c730685924be02f7d46bcb10c9c474c6189388cc381e7f7055dcad1cfa477e36b196311c1a9d305bc653889017f46f4c4934a1587d131a83127df4466fae"]}}, diff --git a/txscript/data/taproot-ref/265d0640e2752abb03fbe0a1b150f575f8469aa5 b/txscript/data/taproot-ref/265d0640e2752abb03fbe0a1b150f575f8469aa5 new file mode 100644 index 0000000000..3dc46a2320 --- /dev/null +++ b/txscript/data/taproot-ref/265d0640e2752abb03fbe0a1b150f575f8469aa5 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270190000000065a894b4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bed00000000c5e85eed04a6fd3100000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787cd030000", "prevouts": ["661a0f0000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6", "f080250000000000225120ed31d524ef6bc5b71a68a40bfd6359c52f177bae49683ad83ab62d1806c34929"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e85f3be5f8f698e83d3665b890524642b89b7b05493241beec338309aba778c454d8fcf0fa02e125fe1892f3caadd01fd66f2ae3104b90b9e35e4c43083bce335e4e9031d393e93ec4f3e9da8fc51e83b82f31256dd96ef4af94581a47eb5c67bc"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ce38f36f588003ae3435f4b7a2e1027d2d00dc9eb0fa8adac7713a480749442478f34169e056cf51b9394d2ada3735c0a63dc9f48f236da8ac021a74c045d29ed6bb91bf977e9e370b444e9d5512cd4ec7f3694a9311c01272a4c1a167cd930"]}}, diff --git a/txscript/data/taproot-ref/2669c9c65bf3af74d4482204c70ea69545d8babf b/txscript/data/taproot-ref/2669c9c65bf3af74d4482204c70ea69545d8babf new file mode 100644 index 0000000000..ae60c4eafc --- /dev/null +++ b/txscript/data/taproot-ref/2669c9c65bf3af74d4482204c70ea69545d8babf @@ -0,0 +1 @@ +{"tx": "f919006c02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf62000000009ccc4ad2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0800000000c2f31cf701a3813c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487d9fcb420", "prevouts": ["8e88720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "735d69000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "final": true, "success": {"scriptSig": "", "witness": ["cd134634a4384f5c6c32353fe0e3d4d3d31c5b176345ebc07f2d6b30b01669e93bd94fe207a6f5e1de2dfe583fffba5c4cdfadc0fe688e34f59c67edd84c81e402"]}, "failure": {"scriptSig": "", "witness": ["34f4a8bcf08a0c7499841efc7edf06fb25520b9fa9dfc2cbdfe0b4a9c488742f71d24044f0729ee618ebdb316ef7c67370cec6e754683a0379cf2a680317120d02"]}}, diff --git a/txscript/data/taproot-ref/266c1691a90b2a342849d25e3704659308c45951 b/txscript/data/taproot-ref/266c1691a90b2a342849d25e3704659308c45951 new file mode 100644 index 0000000000..b432d29dc6 --- /dev/null +++ b/txscript/data/taproot-ref/266c1691a90b2a342849d25e3704659308c45951 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706a010000003d8886bbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf770000000088db63dd03e1877e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478742010000", "prevouts": ["ee0f13000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "54426d000000000017a914f5a65ca4534ef3ca5833434c0dd44a3e128f499587"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2259202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["427dc8da4ffa5ecc822b1cf3bae38ff8a32e3788355b9ea21ba5f58b5e2eb6f6a70fdb814bdc4801d45574dfc9679198c5d5228957fe3481a577a9cd3a280d28"]}}, diff --git a/txscript/data/taproot-ref/2670c894e879a8499f50e08ae018e501b6693152 b/txscript/data/taproot-ref/2670c894e879a8499f50e08ae018e501b6693152 new file mode 100644 index 0000000000..4e8725e3ad --- /dev/null +++ b/txscript/data/taproot-ref/2670c894e879a8499f50e08ae018e501b6693152 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5500000000e17386c6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbf01000000655e64b60215bcbb000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48731792f38", "prevouts": ["e16e49000000000017a914e18c03fb168c1c1b3408ffb477de8ff77b0fbd9587", "c198740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["32ff6e2411fdf496fa6bfc80d7fdcd16b6c28f11fd1090550cd0f96c6c0ae439a7569296b8018165923a6c60a08873efaa1e0d3579a9e43aaa530e4da034901d"]}}, diff --git a/txscript/data/taproot-ref/2692015cba943bdfa1b324204d53284234754d15 b/txscript/data/taproot-ref/2692015cba943bdfa1b324204d53284234754d15 new file mode 100644 index 0000000000..eb55c85f58 --- /dev/null +++ b/txscript/data/taproot-ref/2692015cba943bdfa1b324204d53284234754d15 @@ -0,0 +1 @@ +{"tx": "71b5e2d803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba401000000be38a9c2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9b010000003949d5b6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba2010000007c0e80f601ed1c22000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787e6a4735d", "prevouts": ["4a3f2100000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "f873240000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "4005270000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "e67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d518f5fcc4dcd317f656293c43c0e8e59e06b99ff36e809cba7caf0d79972dd48256d6f90d235a6ba3188b640209fb1b87a6d8106344fff793e748ee999a397d93d03784866e2fdd94d7d1b7c12b1f0da96746c05c19b8696f0ac6a701ba8135"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee92d7728fe824bb86fbd19678fc348031552299afe2faac0cf612835804e2a859ea19512c809756aa5c58e4cd3562935caab0c2ca4eda8db33914ce4decb3cfe9d11a7792f25f0da70e8485da42647201d1062d1bd001b767f1b05dec6877400"]}}, diff --git a/txscript/data/taproot-ref/26fbe1c5bd294a3fc35af2e36f46c951b25e5cc3 b/txscript/data/taproot-ref/26fbe1c5bd294a3fc35af2e36f46c951b25e5cc3 new file mode 100644 index 0000000000..7723b42208 --- /dev/null +++ b/txscript/data/taproot-ref/26fbe1c5bd294a3fc35af2e36f46c951b25e5cc3 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d900000000dd8001afdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c19000000007ff930cf04916466000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8749030000", "prevouts": ["a68d110000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "567c56000000000022512077fcdfa5b83233990258cd0e78144655048956ba28606e7ed979bb07d82944e6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670f2b09ce069cb1d2f19757a518c7d2541e6ab5f0b990938e6d2f93119732f11"]}, "failure": {"scriptSig": "", "witness": ["6a70616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/2721ca2fc08ca7ae38cc809a3799bf618ce5a75d b/txscript/data/taproot-ref/2721ca2fc08ca7ae38cc809a3799bf618ce5a75d new file mode 100644 index 0000000000..f37d736596 --- /dev/null +++ b/txscript/data/taproot-ref/2721ca2fc08ca7ae38cc809a3799bf618ce5a75d @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703200000000ac43b0a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2801000000ab411cb402bca15a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963af0dd3e", "prevouts": ["d08e120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "319b4a000000000017a9141d8eff3030620b266a8bb5e50900ecd7b2ab72da87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_22", "final": true, "success": {"scriptSig": "", "witness": ["1d30e194b4df56e01a172013a81217111f42aae7e242ef28ac1e86f071b2f101b3cfe1acb5c3bbe18090905b5d0418b1630f46afd2b9d4e64cc490ca5599f68301"]}, "failure": {"scriptSig": "", "witness": ["f0785c48c61905e841e84567b2ceb69b42c2bae46fc17cec918a2dfc700a36687ca07a9bc318dfc810379f1ecd9754a11e2e20d2aa8abfffe44f36042c9563e322"]}}, diff --git a/txscript/data/taproot-ref/2756fd453011fa7471613114061631b066029dc5 b/txscript/data/taproot-ref/2756fd453011fa7471613114061631b066029dc5 new file mode 100644 index 0000000000..5b123f1ec9 --- /dev/null +++ b/txscript/data/taproot-ref/2756fd453011fa7471613114061631b066029dc5 @@ -0,0 +1 @@ +{"tx": "7aa1c49802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf23000000009585a1b7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b88000000003b0b69d601c2a39000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3b797542", "prevouts": ["9ed88400000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "440b1f000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "7f", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db342938b39be9e12773a9624b573dbb1df9d93500dc93058087a84b4280ff8e70f73741da43ca43557c58f6aa15023f4cf70566ac935702465d6fb0f93d4429f8d5397512e216c7ab52609f0ab27ccbbfd2b7e561d7599ada55e292956af911ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb44a1c4274957806206aadadfd15cabecf517c42c49a66a44e84081097b7475aac480120d5a477c096fbef97d1ee2aeb957fc425ff8aedf322b93097b3a97db744cf5fd42f9969f7f2472ed1fa62ffa49909a09466cf06ef7c57cb1be351156c54"]}}, diff --git a/txscript/data/taproot-ref/278eb959a30cf3ec8163a007eb3f89ef107765ea b/txscript/data/taproot-ref/278eb959a30cf3ec8163a007eb3f89ef107765ea new file mode 100644 index 0000000000..2b0a707660 --- /dev/null +++ b/txscript/data/taproot-ref/278eb959a30cf3ec8163a007eb3f89ef107765ea @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270230000000056475b9ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca0010000002f35f8e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8900000000ccb14bf503f56ee6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898746a49225", "prevouts": ["6ab20e0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "e73c5e000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "aea27b00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100ada79d62fa15f9115d82840b8691c32a9675d1153431a30d84c575b27f655ff5022037daf47feead7f6bf130cf9b11c67c0ddd821710093bfe758b63d51759b1e2b882", "witness": []}, "failure": {"scriptSig": "473044022055e9d1d50eba789b485e7be1d8723ea09824cb56ff53c14b2dee44d74e7ec379022070fc42377626267d182fdb531525ef651da68d02a997ed5f6da35f9751d958db82", "witness": []}}, diff --git a/txscript/data/taproot-ref/27ab4c447f840d27a13d145eb27c80db511a400a b/txscript/data/taproot-ref/27ab4c447f840d27a13d145eb27c80db511a400a new file mode 100644 index 0000000000..9ffd8dd8fe --- /dev/null +++ b/txscript/data/taproot-ref/27ab4c447f840d27a13d145eb27c80db511a400a @@ -0,0 +1 @@ +{"tx": "aceead2a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b940100000081d662d860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270db0000000091e8ebe1033d623500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acb2000000", "prevouts": ["f89c280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "688a0e00000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ff", "final": true, "success": {"scriptSig": "", "witness": ["9e14bb8d59f2cdaa26d8446bafdb8ad8e26ae889daa3c5b6be4daf7a5c66b12ffefcc72a251df6530db46cfb3872d1a655816c7e4d0baa30c7a2d8557b82375f83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3a2b267d257536b91fa1ea735b5cafcc7a828875c141be7ffa30f52e08c3eca7fdedf355b3d272cc504879d9dcdcbe4df548b291235c0737fc48beb180a84b71ff", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/27aff0ad61d128505e22df766c0492e316fbd9a9 b/txscript/data/taproot-ref/27aff0ad61d128505e22df766c0492e316fbd9a9 new file mode 100644 index 0000000000..4870a8b4d7 --- /dev/null +++ b/txscript/data/taproot-ref/27aff0ad61d128505e22df766c0492e316fbd9a9 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708f010000007d6193fc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f6010000004a71e3b960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705c01000000093cd1cd02363e64000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87f047c423", "prevouts": ["df2c110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4a5e4300000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "818712000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000050", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e26684d91d6a25611b98f9525cf8030045f0e379e1e6360450dcf32f11d35fa349c2fd9879a2ee2ae7d76224c991edc718b1729f7f1922f570a67a21926d2cc48d"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93600db14dabffde4eadee715a8622cdc410adca6ffbf626fcd1e3a6b0b6e154d3c99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4faa718416d21ef008df2257ef512539448f5ca520db3fa3c7b8aa919421e6092eedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}}, diff --git a/txscript/data/taproot-ref/27b9b3e3bde2958e048cee68f2493d41648987d3 b/txscript/data/taproot-ref/27b9b3e3bde2958e048cee68f2493d41648987d3 new file mode 100644 index 0000000000..a837dc5f23 --- /dev/null +++ b/txscript/data/taproot-ref/27b9b3e3bde2958e048cee68f2493d41648987d3 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba0010000003f954bf360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706501000000f7025ddc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ec00000000d17f70eb03851b6d000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3a773856", "prevouts": ["90ed1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6154110000000000225120685f1f4d981f8d279e9288f3fac3f130840e4486d97e094876558f7ee35a7d24", "1f353f000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_70", "final": true, "success": {"scriptSig": "", "witness": ["4dda5727b9cd37b5c14c9a77d8af9d109ec06230eb6cd58d9f51bbe0feeb0ed852e20570d011a45d84becb8e6cf238140c68a811fd7571bed3a847994bd2e09f03"]}, "failure": {"scriptSig": "", "witness": ["498ee427afbf3f1d086ac1eeb701926ab18225d1677e7bc7ed55b83c072d4f6517b884c5050b13dbefac8a91c54a49bec9d0e094ebcf4868148dc71241d79f4f70"]}}, diff --git a/txscript/data/taproot-ref/27be24f0f9eb749b51dc6e83c6ab5c8637349a25 b/txscript/data/taproot-ref/27be24f0f9eb749b51dc6e83c6ab5c8637349a25 new file mode 100644 index 0000000000..48c4f9bc07 --- /dev/null +++ b/txscript/data/taproot-ref/27be24f0f9eb749b51dc6e83c6ab5c8637349a25 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc7010000003a0d4fc5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1700000000c98173e6018bbc4f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87921bfa49", "prevouts": ["658421000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "ad0a4c00000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "897d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa58e965213f8dbdd3ccbab86b6d585f0f8e78abed831015bbc989f3cab476ce59ac632f1e88e109b3d5485dae08acb0148fc939094c3a94300b3efbd66c89bc20"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e8e7fff1bca432c9ba96d0556d2ed7bd47849d71950e18b52879751e42d3038d46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa58e965213f8dbdd3ccbab86b6d585f0f8e78abed831015bbc989f3cab476ce59ac632f1e88e109b3d5485dae08acb0148fc939094c3a94300b3efbd66c89bc20"]}}, diff --git a/txscript/data/taproot-ref/27d37797fa4bb9c3bba68f9967eab892fec70642 b/txscript/data/taproot-ref/27d37797fa4bb9c3bba68f9967eab892fec70642 new file mode 100644 index 0000000000..752c5b79c6 --- /dev/null +++ b/txscript/data/taproot-ref/27d37797fa4bb9c3bba68f9967eab892fec70642 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0202000000b786b0918bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a20000000008aab3a404e02093000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47878a82972a", "prevouts": ["2360560000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "88d43e0000000000225120032ba6f397146bf93cda2585b16902a48899558623e6c842c83c4de6509e8b52"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638068", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045f29e1e33c93035514fb0dd85894dc242cac3fcef5d3781aac1ff5cb7ed66668ed2fecf8564d6a652bf0232997fa790ca314d73b111c417284694cd1738ccb12191585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a13e25e6d35815262cd49d2dcc0fd0de63cfe51aa238dc2e6ca3c341dac8fec3f29e1e33c93035514fb0dd85894dc242cac3fcef5d3781aac1ff5cb7ed66668ed2fecf8564d6a652bf0232997fa790ca314d73b111c417284694cd1738ccb12191585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}}, diff --git a/txscript/data/taproot-ref/27f1dbe3a65014c59ae266af3346177a5a57d4e5 b/txscript/data/taproot-ref/27f1dbe3a65014c59ae266af3346177a5a57d4e5 new file mode 100644 index 0000000000..e8f9b5a3b2 --- /dev/null +++ b/txscript/data/taproot-ref/27f1dbe3a65014c59ae266af3346177a5a57d4e5 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ef000000008cdb3d2f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4740100000070de6b5704c11e770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7d5000000", "prevouts": ["21b33d00000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "6ab93b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b3", "final": true, "success": {"scriptSig": "", "witness": ["cbac7272a76e134786c66591596a58a32a0e363a6c6d1dff45def2968dcb61b0d39730d5d0392d53f294f0a45acd9374d448934224a8fb142935427831900fc302"]}, "failure": {"scriptSig": "", "witness": ["c765d437cdac54a1521f4c8960c1afd35707362404339f96252de68961be4c3227f95a2ea6a636e381b263f3c90908a09a7d653e583805de653055e5c68776e2b3"]}}, diff --git a/txscript/data/taproot-ref/2807a46ba9b453c2f9e4af2406b26ed38137b216 b/txscript/data/taproot-ref/2807a46ba9b453c2f9e4af2406b26ed38137b216 new file mode 100644 index 0000000000..d265fdb633 --- /dev/null +++ b/txscript/data/taproot-ref/2807a46ba9b453c2f9e4af2406b26ed38137b216 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c370000000026ad1f6dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbf00000000f2e52467039292ce00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac85020000", "prevouts": ["88de5c0000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "035a730000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["ee4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ba746a1e3af4c529d3cdba1b4e6cf9b58f2b1e1d981455be45b81cc2f039993b0f3b0db014ceaa26ae02ffb8f31853eb721e6357de034fb71f3898341a9ea5240028cdc19f89baf6c362287c7c7841c4536091540a9bd978c440258b5fe7844c439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}, "failure": {"scriptSig": "", "witness": ["4c52ee", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab3d7a13ff99e8e18dacbbc4ceeaa4446ab48fce45aaf041cd197f8d702987f5dd207214d6df2d18dfa237afd6016520e9e6ed6636ebebd182087bb183877c35439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}}, diff --git a/txscript/data/taproot-ref/280d6a9607ad78d3eb40f04e5b5a76c6f8eb4c02 b/txscript/data/taproot-ref/280d6a9607ad78d3eb40f04e5b5a76c6f8eb4c02 new file mode 100644 index 0000000000..9d36b79afd --- /dev/null +++ b/txscript/data/taproot-ref/280d6a9607ad78d3eb40f04e5b5a76c6f8eb4c02 @@ -0,0 +1 @@ +{"tx": "0affb4e102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb601000000148475f38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42101000000c9d6518c023f499c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf4e9e538", "prevouts": ["110a680000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5f3e3700000000002358212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["e4fd4aa8ed373d196ab6e9a0ba8935c0d889eadfc5126511718e0b222975eb97e2f882010153a250c4f4b2ac4fd2d10797cfae46c68a67bcccc6a7fa91e2636c"]}}, diff --git a/txscript/data/taproot-ref/28259bbbf78c881c7400ac4602722df51776ffe0 b/txscript/data/taproot-ref/28259bbbf78c881c7400ac4602722df51776ffe0 new file mode 100644 index 0000000000..b4dceadcd7 --- /dev/null +++ b/txscript/data/taproot-ref/28259bbbf78c881c7400ac4602722df51776ffe0 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c57000000006bfe37f5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd9000000002b9ed0c5018f7108000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478720040000", "prevouts": ["571d530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a4e51e0000000000215c1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["dbb4ed59e14362647749d55139746050f452d9ecc6c022c09328971453f73ac09c4dcc8d420a62aaf6b133b2cdf953aa3df1b048687bbad72fa841068b20765c"]}}, diff --git a/txscript/data/taproot-ref/284cac89d0553dfdc596ce4bfc4251fd2115cb15 b/txscript/data/taproot-ref/284cac89d0553dfdc596ce4bfc4251fd2115cb15 new file mode 100644 index 0000000000..a35278c2f7 --- /dev/null +++ b/txscript/data/taproot-ref/284cac89d0553dfdc596ce4bfc4251fd2115cb15 @@ -0,0 +1 @@ +{"tx": "c78d28c0028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b900000000714907ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709c00000000d69c6cbb04d88644000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689876b010000", "prevouts": ["d6823600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "c2831000000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93648f8d343e45b2a3fbb17d68cee821227f9a1b53be93535e58c68639dc86e84fc4b6f5261b409d682c30910e7df322d9859114aeb60c7168b8885bdaa0165cc6510b3b87e8b9d8544644738d4851bae032b2bf37d3a4aa6541b936ff18c715610c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7e8952e748deb89d7f1315439c5970ec42920b4cab4cfb00d3d1dcb758e23bdbdcbe75f074483e48d717af2cfa8ab1bbef1c35fc84f016c108dd10256d535ae10b3b87e8b9d8544644738d4851bae032b2bf37d3a4aa6541b936ff18c715610c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}}, diff --git a/txscript/data/taproot-ref/2872201824aca727042b22cae049102582283dd9 b/txscript/data/taproot-ref/2872201824aca727042b22cae049102582283dd9 new file mode 100644 index 0000000000..80388620a3 --- /dev/null +++ b/txscript/data/taproot-ref/2872201824aca727042b22cae049102582283dd9 @@ -0,0 +1 @@ +{"tx": "a5db689303dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8e00000000ee83d8e88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49d010000003a8b0fcadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6e01000000d40773fa021b25830000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ace0020000", "prevouts": ["24a5260000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8", "e8e73c0000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "4909220000000000225120acc511cd55079365da76d18a33af3ae7411f3879a9caec918e9264c8959f5dac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "017d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93680d50eb913f48c4bd7a21deaca51149041449e391631c234baaeef92aa25ad44d7f8ee1a917297df4869582a1b348cabbff1db4a1952fbd39d89a346cd02d0a88810a2a55ef559e3dd2f859359930339f67e2de31eeac841179b888fd41fd8a3"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4e5ee47dc19cce5f5bcfbe17d15c6a925997647a0a2c3c32d22380bb5e59a56e05873438be84f92d1402d5d55e9fb409fe52800aaeb5db180b239b834bc1ca2"]}}, diff --git a/txscript/data/taproot-ref/288e61a59fe0099d03730d5c9d59712f743123a2 b/txscript/data/taproot-ref/288e61a59fe0099d03730d5c9d59712f743123a2 new file mode 100644 index 0000000000..03a751dda7 --- /dev/null +++ b/txscript/data/taproot-ref/288e61a59fe0099d03730d5c9d59712f743123a2 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b90000000044735f0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a5000000005a25110d02bd811f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8714020000", "prevouts": ["8cf00e000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "bb0213000000000017a914381003aa1ce42a7df73f2dd1e6e78ae0a36c6b1c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082093e484a9e3a7c57c3845514d142b984218effb649d9e5eb3f309ab706810aa991d26af6ddceab3892536958f1ea20dd7b885ab499207106c7decaa6511a0e4c5a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93644f2e60a682fd302b1c3c798b38ae6e5157f4f93288539ff9c08590bf0a0b2aad300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5112303efa97a8ef6ff3cee2bba9a63ee7e38a3d19e4db44f275f3f55c4e39991f7cc0cd924d9aecb0bc2fcf01621d0e73a88693291594fa52fe0219caeccfa5b3"]}}, diff --git a/txscript/data/taproot-ref/28a21b4f4afeb9c978b1290c620548f1f33e127e b/txscript/data/taproot-ref/28a21b4f4afeb9c978b1290c620548f1f33e127e new file mode 100644 index 0000000000..2a92a95b29 --- /dev/null +++ b/txscript/data/taproot-ref/28a21b4f4afeb9c978b1290c620548f1f33e127e @@ -0,0 +1 @@ +{"tx": "f919006c02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf62000000009ccc4ad2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0800000000c2f31cf701a3813c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487d9fcb420", "prevouts": ["8e88720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "735d69000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f", "final": true, "success": {"scriptSig": "", "witness": ["0ef016eaa849eeae9a07777b6688a6da7982dcb02ef9b98bbfabfa68721fa22f79a121b00be8e65588652fa6f7a396e04dd6496767c76640ec8817c0fa0c20c382", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1a286ae53a16e195ffe38b0b70f03e31f7b8293a664a7f566b1547c94a9f631b521b544aafdba8dafec5583da9e032adbf676a1373c2e8967b03f911f63da1d90f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/28b1a2ce5cf374a3ce64a6c7853fdbb6a15d1e25 b/txscript/data/taproot-ref/28b1a2ce5cf374a3ce64a6c7853fdbb6a15d1e25 new file mode 100644 index 0000000000..5da1ca6b7d --- /dev/null +++ b/txscript/data/taproot-ref/28b1a2ce5cf374a3ce64a6c7853fdbb6a15d1e25 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ca010000006bee4fa801e60a040000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcdb000000", "prevouts": ["74673b00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "317d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e14e57181048ac96cb53327a8f686080e72dc312071604fe817a5f66426afc20b12f65ebf74c8b951b09da599ea3d6f486010b8cccb0a2142ec39aae62c1ca3e7"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363c68f787ab385ea36bbb3a618645cecd085be4294b842aea644329206b21f53e4187c77ca06c68e3a239e6fea37385de49c0e93bf09ae3a990bb588f1e26193612f65ebf74c8b951b09da599ea3d6f486010b8cccb0a2142ec39aae62c1ca3e7"]}}, diff --git a/txscript/data/taproot-ref/28f223ee6f9c2562b1e382ea899bc7f88e63490e b/txscript/data/taproot-ref/28f223ee6f9c2562b1e382ea899bc7f88e63490e new file mode 100644 index 0000000000..80f0489777 --- /dev/null +++ b/txscript/data/taproot-ref/28f223ee6f9c2562b1e382ea899bc7f88e63490e @@ -0,0 +1 @@ +{"tx": "5f9251c902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf800000000bc13d3a860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705b01000000331e88c204b46b2e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48766d85037", "prevouts": ["0f9b210000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "89ee0e000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000db", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f48f2841dab59f80ad6998fa3cd0986050b454c28fbbaecb941d0e8795529b49f09ad02cb012ed2091760f4e9ad26775ad10447e2b9e598a8be746abc4727fb4e3966518140ddfb4b2a9d93e012e33d80f6a3bf7f24f1b44efe84ec3ac236f0e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b7f6b7f6faf43deefc8dfb90058dbe61b727862c364ff314077bff4a6c878d2754e6d4b188f4ba3829c97f16419e7d7896d7c05fe6215d1417ce194d9971cb9e3dda2dfca806ccc9c3ad62846e64b9ac16121de5d926db5bebf2e82f8dec8d2a"]}}, diff --git a/txscript/data/taproot-ref/28f4e044d59009036250527f061daea52c6b5917 b/txscript/data/taproot-ref/28f4e044d59009036250527f061daea52c6b5917 new file mode 100644 index 0000000000..a42de1a793 --- /dev/null +++ b/txscript/data/taproot-ref/28f4e044d59009036250527f061daea52c6b5917 @@ -0,0 +1 @@ +{"tx": "9ca1b5ad038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46400000000a64e37f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e001000000fa4a59c660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703701000000d0973dde03647656000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd90b845f", "prevouts": ["ae4139000000000021511f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "4d750e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7465110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_3f", "final": true, "success": {"scriptSig": "", "witness": ["5cb3501b241eea500dedaaf16734b6243eb53e4ff4acd4e81ea8ca35c0ac1aeca287614ea75026f7ac7b806cc7d6a09e211fc149fbbac303a5f4075fb083314a83"]}, "failure": {"scriptSig": "", "witness": ["444c64a22e1610258cdaf53ec7625f2df5c6d8af447b82d0ae63d8c323b1b69bd2ef597e20675587e40d925dbb230b98ac201588e7bdb1749777c2be392eb9273f"]}}, diff --git a/txscript/data/taproot-ref/290325a794a4307e35ab570d847c9854f6d63001 b/txscript/data/taproot-ref/290325a794a4307e35ab570d847c9854f6d63001 new file mode 100644 index 0000000000..52ca5a6a7e --- /dev/null +++ b/txscript/data/taproot-ref/290325a794a4307e35ab570d847c9854f6d63001 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4da000000006af8c3e060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270870100000017873a89035f27450000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcfe030000", "prevouts": ["2887390000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "a9700e000000000017a914381003aa1ce42a7df73f2dd1e6e78ae0a36c6b1c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1654142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["8df426347ce7aa183839cbace2dc0aa6559f8e0884b104badaa8f337f90ca4beec5468c71dac3655f4facf4e9a257dfd14f021ca3a5866be730454807685f9a7"]}}, diff --git a/txscript/data/taproot-ref/290a1cf15d24d80b8dba0ba4397f5a7eb13382d0 b/txscript/data/taproot-ref/290a1cf15d24d80b8dba0ba4397f5a7eb13382d0 new file mode 100644 index 0000000000..8aa08cd2a8 --- /dev/null +++ b/txscript/data/taproot-ref/290a1cf15d24d80b8dba0ba4397f5a7eb13382d0 @@ -0,0 +1 @@ +{"tx": "865915d603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4200000000458456e0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9d00000000e0cafcf560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707a000000000805b2d203a5255300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4a000000", "prevouts": ["ed2920000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "3f51250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e9fa0f0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_8f", "final": true, "success": {"scriptSig": "", "witness": ["c38095a8e2603d473d663749cd03aa5edc0c9224eb38c6efdf8e4872b14c37516b08471a575cbb113ca5a41ef9cc12294e3e3b7205928f3dd873b17f19b7195102"]}, "failure": {"scriptSig": "", "witness": ["2429f911d27d6e99d9a0ad91ba066dbe28df85ac96882efa0d3a30838ab045992494697bb2bee74d1b2a81a1b08bf2bbfe4f959cab3777a4f9be5d0caf1cd7178f"]}}, diff --git a/txscript/data/taproot-ref/29186f53cff8c33b62ccd1cec92b4c6b02c8c2c8 b/txscript/data/taproot-ref/29186f53cff8c33b62ccd1cec92b4c6b02c8c2c8 new file mode 100644 index 0000000000..07e8bfa0c3 --- /dev/null +++ b/txscript/data/taproot-ref/29186f53cff8c33b62ccd1cec92b4c6b02c8c2c8 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd50000000053f403cadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8c0000000080e6db55bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b010000007bfc680003fe5216010000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc79aa1c358", "prevouts": ["f266720000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "bdf22300000000002251203d5ffb7cd06f5c84b56ec9f73ff7cc3a22b38565d229330748f260d30800c008", "acc68100000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["5dda6d72098986d04518a24d2521425ba6d77b741f2dc69adc71135d06cc897697b9b998281b4aeb839e0b3bda61f16f4b4c505b81706352bfcf18ea801720f301", "d4705b44acd3ec855c255a6dea384759d5063f3b2150dcf17db724df5cc6c9ccf15141f6e0a22c20c664f8ffdba93d8cf8d7770627985b510c66e9fa8c8deb3eea72d0c2e68e0ae503100e608310eeb77614bd31c2bb8390da18cd2eba1826c76ccf37918cda2d4beab01e20cc53dd18b7c5c206e7000a2501a84ef69dbfadd649ef0b0f51327f03f95df877a83b465d50f7c7770cd0aa2ae57d2d1c3323c10d812b8f4b251eb50757bfd05a1f6fbdd7afe6df7d159fa9b5e01e96f262be4e", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667032e69e21d42781246748391369dbfbe9c2f737a3aa9dd562e73f34721d9f90000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d5e180c56c0451524ee8a3ecc1896e768f754c20286ce8750e284a151907e0f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff367c934a4e22854ce1859ec32a8b50a173f3d6bf46b91a4e515153e2740f32abd6cfa89ab6efc047f82cae49d2c7e996032853be69261c62e58dcb3c658578fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff814c28f1277924f496f70c6329e6fac80f720e95be11054f2510a4a0e768693e83d0eb0ae905db2b3320532e634fa29e4cb94c4e96928e7deef2f119e52df0a57f6c93a7ffdece33021c7cf7b3d765e1a46296764dc9ba04c599279cb672c479a9925177f77555e7c2464536907aa0652b5d6df5d5805f83e664fcbfa72aba2e31a87647ccae878b37dd674f479be3918775c0a8d0e7cff5e8e41ff5b753198d82594cdf62acb0b1c218457e155e8393989ec96832f8688a1ce662bd91ab362dd146f03dd1d4451010a28a928a5862d9891081ff8346d0be05e585bfa5838048ba9bc477dc9106d83ec59206cfed5e9d001dedc4689f82ab32943944509c6cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8385d325695f4e3dfcf4fd74b8e11ce36b58c36dfbda4f78bef707e7e6e0e55fe75eb3a08875f4fd6054ac3ea535866fe12d75d68f862b514e5b6562b23a066269bb6bd3e6d3a52d1c8e3e2bcb300f97d2d958553c34bf19db98fd0ca15b5717b6b24aabb1a6d761815d5a2aeecfd76e00b319e79a0c094cef081f9597096109e5ee9a49f7c4bd48672eaa3c559c197f42203c0c3f747ec67dcfbbb39a6d8b99964ab793c369c83bebbd6d9ab04fdc20eee4d5b564c2ae0bba8012a506ef0a7359659d7950fbbb61bd5b15b30b553b03295ce3b4802c9bb96c67be53661d1033e4baf755d6772763fb9f00f49b3eca6fed6a61db392a1cddebc28a3a29f183b5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4feef60d9a51c95da5f947be6b14a11753c50b6f77c9fde2091b1bf69e7c89499d68da6005d030d02de924b098b912ad8d4407e957916ab58085fa0f0d0bfeb8951440b49f3c0312875a0ed1424d9783139c27b389bce64d8a3fb48826e2facec7c7861ea5509d55dbd2a306764de3d574389ebbb8f3e3a19ec9b86e8101f24b8f8a8d7993ab1b2960566540f39a5e7bbcc8050a68a1ea4a040b0c4e3338a1aac3e8a55a88cf2022e5ec967e99b3491010878a865097750ecc03b9b368467a9cb4c3dd8e9c84081d062d9a493ebde728b0ac140b9fccb94c86ec4ba4332f2eb02198aa9806157c25250e42ff5d040a6d4f93bbbec7b3c533e20f11c6371e4c2a1f64f518b1b16f67fc9af158746931699464c7b709b3f73e234e08a9dd7e782e91c2a1f51d6419311604a1b9af882f49a3e8dd7fcf7e2e88012a16afb55252145ac98b6c2ac10b0bc5f7aaa9934ddfc8ae746072955b5002ae01ddd5f27234c1bf3eb2e5e40ef2a0e2adfd9017cf0a0fad99e659c388d03a9f190db9ae00d51a1857dc312bba1d96a12c87e389ff1d540dea0ddf9f6d2c084c61f1c6411227f18bc930a253a4738929c6fda8d38bcc04911604a72857b6546104eeed291de3f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2339a9818586aeec15c1a33bca4fb74aa5070ce4d351acd4558314783398588623ab4d91c02012cfd3d16762d052e3bea25e0cc4afc61fa618dd7cfee3ef7f900000000000000000000000000000000000000000000000000000000000000007a2932450e8563f21a614cde78869ae4cd0c6c11ad100954ae5d68f257e8b3b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff29d8f8674248f31ed7eb0e93b8e631d9885381e2eadb6ce29220939193b75c0988d3775f3bba68dbea3679f79f8ef5fc82934acb8388249daa7b82818290f7c00000000000000000000000000000000000000000000000000000000000000000835024320f109a04b39cabc114a7a14246a4335cf860393ca76de3de8cb2cc21056ed338d9bd88ccf476c043068bb7b27c2ee4048ce332a2ee2e697a706c199322ed959329c9e61e24e6adc1397e7f8616eab4013de5770430e05f7955c4b311ec03396403dfbb50cd13942b9a633bb11eeaeed80a65541dd3027f2c096f7b367029d052419f5ea265a8bf7f0ea7065e38016694cd20167eb6c0ae40bf29d3f924b0cdb8ac8dd8b4bf7f7cb3db25c2070bb177dc59eb684faca6f13d48dba1c6"]}, "failure": {"scriptSig": "", "witness": ["5dda6d72098986d04518a24d2521425ba6d77b741f2dc69adc71135d06cc897697b9b998281b4aeb839e0b3bda61f16f4b4c505b81706352bfcf18ea801720f301", "56920577caf00f768afcb45739f46879113eee1f0a6f3e7844dd095da5a9cc28ee594e99904294de13fe35c3da526aec2e214127254baa70de8ec484d38bd9310353b90db40cb2f5523616acaeb81608c86c2e5124973bfc2f5d874fca2f205bbd5e6b56262f469cbd0d649c7db5480c26d62e4283c4b69cda3d13e0a6682e27a41b76876805c3e57480c13c2e99b5bedcbdc14650ebde1310b871da3f71a2da75a7a276ee372826f949916dcdf5e507ead814255ad09bb648b2566951cc", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667032e69e21d42781246748391369dbfbe9c2f737a3aa9dd562e73f34721d9f90000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d5e180c56c0451524ee8a3ecc1896e768f754c20286ce8750e284a151907e0f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff367c934a4e22854ce1859ec32a8b50a173f3d6bf46b91a4e515153e2740f32abd6cfa89ab6efc047f82cae49d2c7e996032853be69261c62e58dcb3c658578fbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff814c28f1277924f496f70c6329e6fac80f720e95be11054f2510a4a0e768693e83d0eb0ae905db2b3320532e634fa29e4cb94c4e96928e7deef2f119e52df0a57f6c93a7ffdece33021c7cf7b3d765e1a46296764dc9ba04c599279cb672c479a9925177f77555e7c2464536907aa0652b5d6df5d5805f83e664fcbfa72aba2e31a87647ccae878b37dd674f479be3918775c0a8d0e7cff5e8e41ff5b753198d82594cdf62acb0b1c218457e155e8393989ec96832f8688a1ce662bd91ab362dd146f03dd1d4451010a28a928a5862d9891081ff8346d0be05e585bfa5838048ba9bc477dc9106d83ec59206cfed5e9d001dedc4689f82ab32943944509c6cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8385d325695f4e3dfcf4fd74b8e11ce36b58c36dfbda4f78bef707e7e6e0e55fe75eb3a08875f4fd6054ac3ea535866fe12d75d68f862b514e5b6562b23a066269bb6bd3e6d3a52d1c8e3e2bcb300f97d2d958553c34bf19db98fd0ca15b5717b6b24aabb1a6d761815d5a2aeecfd76e00b319e79a0c094cef081f9597096109e5ee9a49f7c4bd48672eaa3c559c197f42203c0c3f747ec67dcfbbb39a6d8b99964ab793c369c83bebbd6d9ab04fdc20eee4d5b564c2ae0bba8012a506ef0a7359659d7950fbbb61bd5b15b30b553b03295ce3b4802c9bb96c67be53661d1033e4baf755d6772763fb9f00f49b3eca6fed6a61db392a1cddebc28a3a29f183b5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4feef60d9a51c95da5f947be6b14a11753c50b6f77c9fde2091b1bf69e7c89499d68da6005d030d02de924b098b912ad8d4407e957916ab58085fa0f0d0bfeb8951440b49f3c0312875a0ed1424d9783139c27b389bce64d8a3fb48826e2facec7c7861ea5509d55dbd2a306764de3d574389ebbb8f3e3a19ec9b86e8101f24b8f8a8d7993ab1b2960566540f39a5e7bbcc8050a68a1ea4a040b0c4e3338a1aac3e8a55a88cf2022e5ec967e99b3491010878a865097750ecc03b9b368467a9cb4c3dd8e9c84081d062d9a493ebde728b0ac140b9fccb94c86ec4ba4332f2eb02198aa9806157c25250e42ff5d040a6d4f93bbbec7b3c533e20f11c6371e4c2a1f64f518b1b16f67fc9af158746931699464c7b709b3f73e234e08a9dd7e782e91c2a1f51d6419311604a1b9af882f49a3e8dd7fcf7e2e88012a16afb55252145ac98b6c2ac10b0bc5f7aaa9934ddfc8ae746072955b5002ae01ddd5f27234c1bf3eb2e5e40ef2a0e2adfd9017cf0a0fad99e659c388d03a9f190db9ae00d51a1857dc312bba1d96a12c87e389ff1d540dea0ddf9f6d2c084c61f1c6411227f18bc930a253a4738929c6fda8d38bcc04911604a72857b6546104eeed291de3f6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2339a9818586aeec15c1a33bca4fb74aa5070ce4d351acd4558314783398588623ab4d91c02012cfd3d16762d052e3bea25e0cc4afc61fa618dd7cfee3ef7f900000000000000000000000000000000000000000000000000000000000000007a2932450e8563f21a614cde78869ae4cd0c6c11ad100954ae5d68f257e8b3b2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff29d8f8674248f31ed7eb0e93b8e631d9885381e2eadb6ce29220939193b75c0988d3775f3bba68dbea3679f79f8ef5fc82934acb8388249daa7b82818290f7c00000000000000000000000000000000000000000000000000000000000000000835024320f109a04b39cabc114a7a14246a4335cf860393ca76de3de8cb2cc21056ed338d9bd88ccf476c043068bb7b27c2ee4048ce332a2ee2e697a706c199322ed959329c9e61e24e6adc1397e7f8616eab4013de5770430e05f7955c4b311ec03396403dfbb50cd13942b9a633bb11eeaeed80a65541dd3027f2c096f7b367029d052419f5ea265a8bf7f0ea7065e38016694cd20167eb6c0ae40bf29d3f924b0cdb8ac8dd8b4bf7f7cb3db25c2070bb177dc59eb684faca6f13d48dba1c6"]}}, diff --git a/txscript/data/taproot-ref/29306f00a438f213a01ebd7a7b0d04ae25d239ad b/txscript/data/taproot-ref/29306f00a438f213a01ebd7a7b0d04ae25d239ad new file mode 100644 index 0000000000..f6ae4c2184 --- /dev/null +++ b/txscript/data/taproot-ref/29306f00a438f213a01ebd7a7b0d04ae25d239ad @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701f02000000c88992c38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c471000000002bee261f02805a46000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e745311638", "prevouts": ["43bd130000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247", "ae50340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_98", "final": true, "success": {"scriptSig": "", "witness": ["3567c39e4922965c877ce5437585a0ce586f4770215af4d36adeaba189e176f44ea5a7cf38a87191f77162d333e4ade4b1e9267c2a86383e03be70d105b8195a01"]}, "failure": {"scriptSig": "", "witness": ["6c885cd3c57f8434439fbd898a5883458c3cd7878d2f4ac4cc926e993f8af32b44fab4a8359649a55ed7656c35ee56ad23c9e923f34f7a6ce852c11488740de998"]}}, diff --git a/txscript/data/taproot-ref/297a3281b6d5be24c14d7ff51f2fbfe46ed86f1a b/txscript/data/taproot-ref/297a3281b6d5be24c14d7ff51f2fbfe46ed86f1a new file mode 100644 index 0000000000..8bd660aefb --- /dev/null +++ b/txscript/data/taproot-ref/297a3281b6d5be24c14d7ff51f2fbfe46ed86f1a @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d401000000e688dcea8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ff00000000123c9dc8046d667b000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac3fb5d441", "prevouts": ["915f410000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50", "defc3b0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["834c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bf852205919db101e7100c264881cf502d3d2e764ba6b83faae2c86d526b113f2b9d1447cbfb5d72d5da72ac5ad193469eaa6b44c038aa23e2a9d2dd480586adaf3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c18461976e62a50a1c995a04d8b83eea654c194a7ebc4bf0616751df5ce2576839b32d44b6ff86c799acdff23ced11a294722ef2b8af6951bf8429e3bda52b31af3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}}, diff --git a/txscript/data/taproot-ref/297a666c7fc982a83775114d7c6821fb42031e06 b/txscript/data/taproot-ref/297a666c7fc982a83775114d7c6821fb42031e06 new file mode 100644 index 0000000000..1175057818 --- /dev/null +++ b/txscript/data/taproot-ref/297a666c7fc982a83775114d7c6821fb42031e06 @@ -0,0 +1 @@ +{"tx": "dd0484290260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127004020000003a1f3dc18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b2010000009ee9318602534e47000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c9000000", "prevouts": ["e68d100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f4e6380000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["cb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652247e5dd926380ab694d48c4d41b564ea6c104d6001198f68608a68dc76789170b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720d6d723e038e6335a667e0268d00f4826306437ee84552cc7f8172181160444ef73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4f551d5f9df51039c21b920ecc011c032a9913b031d76462e802a27cbd0d0ed8dd6d723e038e6335a667e0268d00f4826306437ee84552cc7f8172181160444ef73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}}, diff --git a/txscript/data/taproot-ref/299581f978295f5b97afd9102abe9746f3633e76 b/txscript/data/taproot-ref/299581f978295f5b97afd9102abe9746f3633e76 new file mode 100644 index 0000000000..68ce7e99e3 --- /dev/null +++ b/txscript/data/taproot-ref/299581f978295f5b97afd9102abe9746f3633e76 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700f010000007bc29c6cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb900000000665aacda033f912f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e74a010000", "prevouts": ["0b3c100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0862220000000000225120e57fe1708102910b1e8fab470345c0402aba6cb96c683e4f102534396b5c1780"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936545c476ac6dd89960a95424e037fc45720028d28300f66c18e5d73f49140b067"]}, "failure": {"scriptSig": "", "witness": ["6a1a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/29cceb8deed87738d060e1bd5338ab0536f8d2a6 b/txscript/data/taproot-ref/29cceb8deed87738d060e1bd5338ab0536f8d2a6 new file mode 100644 index 0000000000..4e74847390 --- /dev/null +++ b/txscript/data/taproot-ref/29cceb8deed87738d060e1bd5338ab0536f8d2a6 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0a000000000dcc735dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaa0100000058f69bca01f683110000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7af77dd40", "prevouts": ["61a26c0000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e", "cdb27100000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "777d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936317c62222341529afe8f077c28135e4216d182041ddde4bb210fc7dce870fc693c7477a635aa10de5895d22b0b13d3a2307950c6447747564098b225c8ebc094ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457e2aee6c91b47bf7b7aff3c5d3800b2287c2f5852e09bca12781ffc191c1d4f04"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fafa584ded413e2880e88fe5cf9cb62118b35d382d99cebe394016833778f1470de2aee6c91b47bf7b7aff3c5d3800b2287c2f5852e09bca12781ffc191c1d4f04"]}}, diff --git a/txscript/data/taproot-ref/29ce41699e783cf1ab6b5b84bcc1f8da679ce8cd b/txscript/data/taproot-ref/29ce41699e783cf1ab6b5b84bcc1f8da679ce8cd new file mode 100644 index 0000000000..b596df54d9 --- /dev/null +++ b/txscript/data/taproot-ref/29ce41699e783cf1ab6b5b84bcc1f8da679ce8cd @@ -0,0 +1 @@ +{"tx": "0fe2948902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be6010000006a51eadd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c4000000007dccafb10437fd2d000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964bd1f750", "prevouts": ["e56f1e000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529", "981f110000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "f77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee1b135a17580d142a9191c3b85b2fd298f3e09062f6f11151feab86e1334277f9411b885fbcd56b4d2cd2e695cafde2fa2de7097172cb34b20e1fb870aea9a6a"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93614bc388ca930cddc1c81a27ee7343eb0c7b6fd8e7416418176eb400a30a42e0c75fbdc6cf2e777e050e79c533e418db275d42efba7f8dbffba71190cfdc033660f5943df1a7722c938328966c7e5ac747f85bf050d43cd9195f6df88860ae066"]}}, diff --git a/txscript/data/taproot-ref/29d289d23bf6e34dbfac501041222a1978cc95d2 b/txscript/data/taproot-ref/29d289d23bf6e34dbfac501041222a1978cc95d2 new file mode 100644 index 0000000000..8cc5ec0c62 --- /dev/null +++ b/txscript/data/taproot-ref/29d289d23bf6e34dbfac501041222a1978cc95d2 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdd01000000023cc89c033c5726000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a64636e056", "prevouts": ["f79d280000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b8d8025076b24c8a40f76c002001c237b48dcd5ca95a82c0e5e41f0b66f8d235805006cc51063e7185e527fb59c761b5074d10ceb82e6a0b7e047e6dfb68ed645d4f3cf5225bc2e73bca160ca9ad46c357c6d2e1ae176a3211e20e5b1ebd28f9886e04e2e32fa7ad4455724eeab1facbc4974330c42667012f8319582ec02529573cb21a631ca15bb4e9a11f0b33c4fac3f5c23956ccf4c137f9ab5ffb9c788bc2584230d40c4440e5afaa58dc239280e60c7fff9f1e0e04362675d60552e9fd6171c0119c067a199095fa5ffce19230fbfd4bc55a74e9bf9bc95fe7811bcbc5baee5ebef1a5a189e407f78eda078eb3c14e4eefcdb328ff92c0594f07c2be48fc17d7ec39d2654d0e2b7e05ab9abdc96c7cdc9024fc06253d2049207bdd1b75933b1538b7c3d8785dc862cc0e283b57cde1ea32c67de21488473295624630fb3a68ad2053e7ae8e85b08513b274ed188fe50aeb9ad7327ba8d0f053ed46817f1f9547718020eef34d55f693c49717af4420d33dc7b0405e06ecd96c307a0ed6560f14673495fc50c6819ebd0d0663f4e4d84c96aa5a4332bcfedf5010c1705d19d26532e4b5fd8adc36d22acd1b73c0ec3d909abb8b2271349cc48c1fc370d3fb18a660fdb680e4421bcc846aeab0213ee6a3b124a047f1a214390493644e6fe9aa7e1d465407604bed45d57a9165f155cf48144eef19f36baa291368ad974e9702b1e961f52bbc8775bf", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb448ad690b4db681210d49373d4012b83591ebe1050d9c81702caad07f4cd5bb9faa736b6bec5c04b20c5b38998d4f897a7594adad2cf377758bae1284900c20e3219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}, "failure": {"scriptSig": "", "witness": ["4d09020e105272e2585e738c768fc20f5d968658bfc397956b671146f4b7795091d902cdc73036841d91a7cf5e5873c97979a7604ca82151d8fc6926a1a7a195f0f3abb3b2b673e9bb7b1c27205eb5a62c7ff9f3744e015650d5d1573c7f521675eb4cb11118a04049e2bf69f5ecf5177f67c3260ace9d3caa675e79da97e0afb04a43e777c245d6fda66c2c63651be6f6757fa8c5dd9441c0ad8db19122f1a0541bb96efa637dad6a22226131a026fa4d6e3b3658fc77f3fc8c3bbfa22940d7e17397e1b0a69fdef34d6b2c0e6e44ab56212b0aa7a5c0263655e43dd86951fea2a604af949af140737a269420350c88075b01bb8fd2c28304fa7c6c37676e60fb89b050f25a7527982eef96665354af9a29733e62a7f756e962e888241f2f63a2de5b04d387dc8a75437b4afb6db301508836125156078ce820574769c5145be3b6161ab298bccddb039f032fba6d7b1137567645870af19e57ead4acf8b9845deb241e61fbad9a3b315415b5e59aecefa9ac0a25a33f2010a607b9d62d5982bacec40d7bfb7033b2943478ce7df0d10f8c57f2b751750d85fa2650ced72cb501c23ef3e3f6adc2180541621111ee26010aa9156c841a3cd9126612663d1cfe2f476414940aca7659c332768f7bb2e92f093659532cbaf81fcc449fdb013abeb368745c23e262a7d2e99c057b5eccc8ba5cb0eae27005fc84a41b3af3a5c0988977e1a11b0360e9aeed1bb37561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082285ab48eb468144e5e6aa7ce6d4aa75a792c11a68b383289399495d27c15055ecc596949c599e703b9191d3ba022749fca5ec33c3492eb5532759cd445d2634b82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}}, diff --git a/txscript/data/taproot-ref/29dc54df002663eb3874c3fb7d3952e70b1d1779 b/txscript/data/taproot-ref/29dc54df002663eb3874c3fb7d3952e70b1d1779 new file mode 100644 index 0000000000..42b46b7c1f --- /dev/null +++ b/txscript/data/taproot-ref/29dc54df002663eb3874c3fb7d3952e70b1d1779 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c100000000dd110ca0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caf00000000071f80f3030b996000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac9d000000", "prevouts": ["b4170f000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "b5bd530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d511915e430f0db2345814ef782ce895d8c23952d8feef260d8eb90daec0803de3eef05bece11fc4259c24dede9b1787a65bcee91937b36a28d108e88384141e6c4419704ddfd13dc63b1b4156372563d65f148a89e112fdd9cbf47f8afee5da0a9"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4baf3800ace8e6c95c7e7a9d035d879049832cd6be429795a36cd3109eecab56cf0292c5c10d160f8e0745cc9e7b1222beed517475d04a852f0f3c02abb361f19b5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}}, diff --git a/txscript/data/taproot-ref/29dd1cab8fbe87bf2eba3c671a6054c32e47ee9f b/txscript/data/taproot-ref/29dd1cab8fbe87bf2eba3c671a6054c32e47ee9f new file mode 100644 index 0000000000..a6d0f7c78f --- /dev/null +++ b/txscript/data/taproot-ref/29dd1cab8fbe87bf2eba3c671a6054c32e47ee9f @@ -0,0 +1 @@ +{"tx": "a804d40e02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b96010000007c2543a7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfb00000000e7fe5fb603e9bb46000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79609000000", "prevouts": ["332f26000000000017a9144370350f30aa8f875e3d2a13be81f25f19bf1a6387", "6b2623000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "027d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8c6a1fb55f16de67c2a92ad96c93aeea32aba2f93d3355ba34bd608160e8b6bc30e32049d91f42cbcb04955cd98e985d287b85d3c77c1154d8406ae5e2d81b7b1"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e27fd3105da1a30ac5d519a74d6ce1b9e57e0f98575d55e76aa178b4a6feecbec6a1fb55f16de67c2a92ad96c93aeea32aba2f93d3355ba34bd608160e8b6bc30e32049d91f42cbcb04955cd98e985d287b85d3c77c1154d8406ae5e2d81b7b1"]}}, diff --git a/txscript/data/taproot-ref/29ec9ea0cab2025b952a31c864a85546c8a8f032 b/txscript/data/taproot-ref/29ec9ea0cab2025b952a31c864a85546c8a8f032 new file mode 100644 index 0000000000..2ee60e2e69 --- /dev/null +++ b/txscript/data/taproot-ref/29ec9ea0cab2025b952a31c864a85546c8a8f032 @@ -0,0 +1 @@ +{"tx": "82be370701dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7100000000e2dd84d901c0404a000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4877c000000", "prevouts": ["190c530000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c65d6d28abe4427a28718cc9defbf81c26729a2e7a56ee27b8dc889a3e93ef624f81831abc7030d30d94d76608ced7887e45146dfb5c6f498f7413d0801b8ec7370771bc09cab9990a137eb2bb36c383505d4d9622e2608e50044675509ef423478c66cad98a0e432fbf5ebaf8edad64c7e69aef4b0ecb2d91224350ecd4ca2b12fa4f30cd813b1727916698f3a36b99f57249def877c8eb26ffaa2e89ef37ba2d5eae3d4087861a32c2301fcc6526a832631ce74afcb19abe25323e02ce5bcf918938c9260f6cc78f08ccfda91b4edae9e87478fa98959668c188503e739c9250e4fe01f646976a21a8bdeb603de9327a271009c25302ec16a9075b01fb10e3c14e7f9e84c21f0e572d8c0baf5de5badfc858b8d4031a2ed56d0e574b2ae632fa6db275d93e24f7ea1bfc3fd107842c07aeb28e3a11f378b0f058396df45c6d195813457aeaec14ec5f4c34324291fdd81c184c7fa09b70ec6032af1d30edfb986b15f46ba49e847ef142ec8f050c2602e4a5399c960ee556315266d4e3af38da742f2c000c141291d643c3b0c48fe4641ff8ade4a0e89a1ef3388de0d26bbf9e1857b21a56ba99a394f1a8a2f2193511174ba1881308dd9fc7cada8576072c967d068357203d288819ed68c2385cd9f3e83e32c7bdf3a3eb1d1ed4374b6902b39c851708e748952e6040f6f797375ac5df8f0429223f2716feead55539fd605b07dfdf619cd4b11b75", "eb7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f6502ed723c13c5ddcf31911de71be6f76e583532ccf009c50f97b41c4fddfbb84ce21fa65bd655e7fa8dd3695f51b098b96b5173f87464f2936878bf520f49fc2ce937a5de573933a673baa3adefc0607b7a8b345eb0a9388ff089ef522bdd2"]}, "failure": {"scriptSig": "", "witness": ["4d090299e6ec5cb8d4658f0cf258626bd3d34f4f03b0abbdcdc7114723e8143cb357be842a82f438db98212eee111068e7ac218cac2006e89d62c921b70d38f5a6c5a84d288723d59e4fb8a9e7761d40a6f381739d5b2db8cb1179eb492c2823da5e6712d85632f20d262a17dd659182b9cbbe44c1955da4988c678837160fb8f12f5e341acacd54c50ce56bbea55f20904ec6b672862a854cf6197e8635c7502fe8845708ea12c2d69486fc75d74c6b11898557737115c73f82ebaeda00d243bc745e092c42bcc8fca35a81178923732e7f0a5a21a593f3cc5d376148d143bba4d4938592e1927e279fcb6f6ee2676e668f2f33557976f2438ef61f5b826606519377503e9f1ce443ae1fa81026017c6711d9832256587148be270d272918533f06e0dfdbf98eb7c93d8722db3624222412d424f4635f7ea35663bb7926a17d303b78da410c0c39da5b7e069de4be5d776b5463306373a94dfd8dd027623dbee561e0e34e3d300387c2ff95cddda6478e14ec65b10f3c87452bf7361245a1987203ef362a0ee362e7b1127bc44fa5f8921cd034d4db2f4b1394df6875536f7ebfd73e6e17174703c039eec3a68e93ec983dd1a9a86eca4343153c1d4cdb18e858015c3109731f21970526e1a50ce941409f7ff6120bb1fbe60d12aea1707e5b1bacb17cd17a3259611e4149ecea670cc95b65c000c67d602c808491998a35743bd6746d3404f6a2e1251dd975", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823f13c9f2c0ba7c3724f3080ca99cfd230291165bf004db5bbadb2403d0b759af84ce21fa65bd655e7fa8dd3695f51b098b96b5173f87464f2936878bf520f49fc2ce937a5de573933a673baa3adefc0607b7a8b345eb0a9388ff089ef522bdd2"]}}, diff --git a/txscript/data/taproot-ref/29ef22549cd23bb217da411a3ca72d83c71150d6 b/txscript/data/taproot-ref/29ef22549cd23bb217da411a3ca72d83c71150d6 new file mode 100644 index 0000000000..7a18f810d9 --- /dev/null +++ b/txscript/data/taproot-ref/29ef22549cd23bb217da411a3ca72d83c71150d6 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d900000000dd8001afdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c19000000007ff930cf04916466000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8749030000", "prevouts": ["a68d110000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "567c56000000000022512077fcdfa5b83233990258cd0e78144655048956ba28606e7ed979bb07d82944e6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "367d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a25034f4670dba2bfd8b532fe5e2c4399b1757245b955e89574c41111a3f13a78448a7537869648343bbbdc00eb4ac0785a5f2aec0111e81b0d25ebde82a92a"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93618278c07a795a465b0e01ec560e597d9dfa9576d66260ea15112d4b854280992e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a25034f4670dba2bfd8b532fe5e2c4399b1757245b955e89574c41111a3f13a78448a7537869648343bbbdc00eb4ac0785a5f2aec0111e81b0d25ebde82a92a"]}}, diff --git a/txscript/data/taproot-ref/29f6acfc391f9db2fecb96ea0a708da396ed202e b/txscript/data/taproot-ref/29f6acfc391f9db2fecb96ea0a708da396ed202e new file mode 100644 index 0000000000..233061cf01 --- /dev/null +++ b/txscript/data/taproot-ref/29f6acfc391f9db2fecb96ea0a708da396ed202e @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0302000000e24818d4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9000000000f9f348ce017c48060000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961c030000", "prevouts": ["dec2220000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9", "964c5600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93626c391d5e47230d4b4e419da58037ce9505b07d9e5ed3742aee4172be09b65ae536798c57c197a746bb2ed7f28bea5bf32719d74447f5bf93d90a00b781807a2845c4b1f0ef9796b099f7837236ca3239de7da07050a4e4f568f49f6a65718f105f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d1b360dbc2a68556ffe995fa73d9491f5c7d1d4795c1bc7f06a4bb01cde3d3510ec8a0a1d660d587d93edd278a1416bd3a7fb5c67f78681973183382c988e9bb422e3784e386a40d51dfdc8b2696050c6780884f0aa6a0f3f5d0b1b514784d82ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}}, diff --git a/txscript/data/taproot-ref/2a46178ff8d5794433a794e9fe86b9b5fc268cc7 b/txscript/data/taproot-ref/2a46178ff8d5794433a794e9fe86b9b5fc268cc7 new file mode 100644 index 0000000000..f70fa1228e --- /dev/null +++ b/txscript/data/taproot-ref/2a46178ff8d5794433a794e9fe86b9b5fc268cc7 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cba0000000025e7d69ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5201000000d3af49b860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701202000000fc825ac201084a89000000000017a914719f78084af863e000acd618ba76df979722368987398c0a2f", "prevouts": ["33da480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "65a5590000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "064711000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09028c268e4ecec76aa2f59fd94a68acfe2af67776f00ab61b86e7926b8144e5460e352e8be1a3e826c1de3684dde036bb7fe3ee1d1abed079fa22ad91325d6d250c4071cbbb929bb77ca91eaf03eca18757f412a11ca98c105429b92b01fa2edbf45df934cc0c392ab33e5de08a07d445b2960976e3a612969189fa73381c74b61595c73fdd90a17bbd5d3ad2dfa07331dd78d654069faee70b8f3d0027dd4bda0d25036fa6bd5a31714afc0b876a1484fc0ac1d172488b41385d371429232fd1ca521709e8798d2c8f4632fc0d0991c6601844fa80fdeb0f863d6c8d9e23acea27e4f6e79b1544860e70a1ab109defe1e5d885efba13babf997cfdbbba70e9b43cfd08bb67231cf0f73194c8956eb4836c70499e8f1e1414fbebdd36991ddab518b704a5323fb24bd8cb5dede640dfb43823bfc370ffdc8f8bf9015213367aaf83febc6255cfd65db07e9ae40a72c52cf098a6e39210868f7f112753e19ac1fbf7ae587e08feacee253b364bd8597808e61fdfc766b043a7e5f2660e450d86b6881052c2d6b715def1b3878c16593a3c15f394a666ee03d0f523dd35b8d22d2b882eca659cb3c0a4c1aae1bb05e5963263e1f8431a80722ab1b5a578fabb97d5a4e0b2acc386e1e0ce43bcd17e4027df76691ea1672d466792ec4c0b69529a066b0fa276db15c6f54c2b2bb080efe801aa96151ea9f70473b6b921d902a8ffc8cc73c320a72e2575d93775ec", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367c63ad976486975ed2446585f6ed9ba3fac098da722e4eeebc45988370da4d7fb68406090ec9503da6e41d61411400226504a16a75c985e068fea4ead469507b3b719bf4b6df334f4ad3966afd516fb2a8d294cb4fface4e4609ab1c9f988c5a"]}, "failure": {"scriptSig": "", "witness": ["4d0902d69785071bec72fafe99f102795213c00b384192ae090803f8625c94283c751d50e410062e3117ae2a30ea04b068e7a9d50fb1654db4f7e36a29ee771593efc943b1505a983a6911158499b20c80f50b23983cb242319cf04df8ef13675414c5b15d36795a77d8092b2456ed9ea851470470d8e6dc233b0d7cbe947e92c0713de76718482c411885db43fce7d5ea387f08a3b2f2374af87ee9f49aa887b8bd4e8ea23fcac6638de92fb44c0ed4028e2603390f96262272b8b30d9e0de8a06c111f4e5b5ccb7737c28de9ce83c990b0bae5f8febc8dcaaa664cf3f697c7d912d80b67704f66298cc9cad54c6de90bcebeec5857385f3635af969080018e4fe81c5e47a880ba6e8ba152f9cda6943504eb5df2477038a99165eff24f84cde01173de56907890aab88f8f2a68c3836362f7a252961cabcd26e0096e9d8285f030828eea7ce529e58b6c218a48af9781d86beacba5f9200384e6b50283459c52853b6d1c76986d5294d354bc1379f9a31668ec33d9451a3e2c918e8706bc694ed0df8a419b1ffce6ce3bdb9cb11c537ab37697b1f6edb3cc6512a11839fffb283210c1e6b7f154a60c8b82a31f855ec217b79b96543a47b3d07ee439c2a1c8e3f358db506434a6a8b53b76b7f2e089f140d0ef49f0bec3214ef2f90151a52675127f263af3271e8b42983ef9731e5b6e5a99bf38be069813665bfaa75355f6bf6392b387aa9af1f6223ec27561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dab3c70c06b6d40db1cad4929dc14312cad177937e3c271bc65c4be8c12a381eafd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173adddfc46016955cd26bcdfd077adbba0d60eefd6e0317def1b858595de21efb103b719bf4b6df334f4ad3966afd516fb2a8d294cb4fface4e4609ab1c9f988c5a"]}}, diff --git a/txscript/data/taproot-ref/2a479685fd7da722bb6722ebc37d68cccb881ee6 b/txscript/data/taproot-ref/2a479685fd7da722bb6722ebc37d68cccb881ee6 new file mode 100644 index 0000000000..c8451400b8 --- /dev/null +++ b/txscript/data/taproot-ref/2a479685fd7da722bb6722ebc37d68cccb881ee6 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd401000000c607a19edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc70000000014b61f7a0255067f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc783000000", "prevouts": ["a10d260000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "1c935b00000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "967d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fab066835f4c858657284bc4f27395efb05761f76f20d1739098d7bca44617346d654e31a1d81b19a8c2670362b3a1330b2f2d66c8db1c8314023a61983d2ff610"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea99249230f034edd8755346ac09fca5c6ef71b313e66a1d1ca3f34bf2000d9789b1afbd82754ccbdb229e33ad6472305abc54dae2fa9ac3a68b58b93ca8c8390ad15d5ff3e747c4643a2e7779e2cae74c1db700bc0de7d47935e7ffa6ea968f"]}}, diff --git a/txscript/data/taproot-ref/2a4e458a761d418129aa4d22bbbd076927fcef77 b/txscript/data/taproot-ref/2a4e458a761d418129aa4d22bbbd076927fcef77 new file mode 100644 index 0000000000..675eeb107f --- /dev/null +++ b/txscript/data/taproot-ref/2a4e458a761d418129aa4d22bbbd076927fcef77 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703f0000000024d521f4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbc01000000e8ed3cd4048e26370000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac76000000", "prevouts": ["ec7f110000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "7866270000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936442ef3e08d4cc76e1b58466903dde6bc7d9143fa5154c6795334e9e845b214803f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08233479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a4bb2c7d85af23cd06361a8d9967d47c0827d7b479cd52e2216fb2d12a2ff38bc"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a680f8e17236a8fbc1196317399c346aeca722ffefcaac5ef62e17ac4625d25b4bb2c7d85af23cd06361a8d9967d47c0827d7b479cd52e2216fb2d12a2ff38bc"]}}, diff --git a/txscript/data/taproot-ref/2a4e61567a20b2e90af1a0fb476b1ba0154b0a8c b/txscript/data/taproot-ref/2a4e61567a20b2e90af1a0fb476b1ba0154b0a8c new file mode 100644 index 0000000000..c39491fc74 --- /dev/null +++ b/txscript/data/taproot-ref/2a4e61567a20b2e90af1a0fb476b1ba0154b0a8c @@ -0,0 +1 @@ +{"tx": "1a1da20f038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c496010000003477079360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127029010000000b0db5c160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700e010000000bfac8b303bf195b000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487198ac73f", "prevouts": ["ed513c00000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "fd2d11000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9", "5ac90f000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362cc5df8a4115da779f8a758b20ada553e9e091a2311498f2aa3552034f30084e276a8166e5256dc9010e53101dfdb6dbd4fafdb1e785ffcbffe7e4bfe923fbf99aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d3d1c8f95326a5f9176c86e1c30427cdf7afee7eae03ceb2fdd83531b682283cf61f73219d91856056394a010eb6c8ee7f13c9683181be224f0fcf47ad20d61b9aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}}, diff --git a/txscript/data/taproot-ref/2a7da9157e1527a2190bce26d0a1303d7f239f9f b/txscript/data/taproot-ref/2a7da9157e1527a2190bce26d0a1303d7f239f9f new file mode 100644 index 0000000000..0e1076cc3b --- /dev/null +++ b/txscript/data/taproot-ref/2a7da9157e1527a2190bce26d0a1303d7f239f9f @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdd0000000084353b078bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a0000000004495027302e6bfa3000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e791e25a5a", "prevouts": ["3415660000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "d8bb3f00000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "eb7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d30f73147a154a3628d0970c0221a8932217afeee5ae5f898a11b906e2468131e58e476735d98d5a1185fd7ff42bb7b31cec58182079010d151d415fc7d6c3e4c2ce937a5de573933a673baa3adefc0607b7a8b345eb0a9388ff089ef522bdd2"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e2b3f5d542005946f2ec6051f133431d1ec5375b61ea1504919b9de7f1f58f14cd47700b8e47119238508fabe2c12c2c2868bd36dd1a15df7cf7a783bdc7d4f633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a9e937f21fcad1bfe108fe60be9a324a720a35d98355df5fe53ca48d5593a6c6b"]}}, diff --git a/txscript/data/taproot-ref/2aa0596f17f2698bdfd51894a7dc1e1241cd3ae9 b/txscript/data/taproot-ref/2aa0596f17f2698bdfd51894a7dc1e1241cd3ae9 new file mode 100644 index 0000000000..da1a1f5ea0 --- /dev/null +++ b/txscript/data/taproot-ref/2aa0596f17f2698bdfd51894a7dc1e1241cd3ae9 @@ -0,0 +1 @@ +{"tx": "78a4f8c4018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b7000000009a731cbd039e5f3a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487fb267745", "prevouts": ["b4f53c0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa5d6d6d3f2cd85347736e7cd11e639ac781ae37e103c2c2842f248c73b61e825b0a9249c0485c0b349be2068ea39eda6d50f7b6c474a6d5eb714296c91a9f24b9"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bb23dba8f127cc5caa444c657f3417e5706f46d2cbe11427067fdee54552685ddaba019801d089772adec5c5b59e5bcfed03a63e4fac904ae7f3c905b717bc6fd7bec169038f6fbc2f311373c62d75738dee89ed934d1dccaea4579b1c053aa90a9249c0485c0b349be2068ea39eda6d50f7b6c474a6d5eb714296c91a9f24b9"]}}, diff --git a/txscript/data/taproot-ref/2aa48f72c81f73267919baef97d2c186ffc36882 b/txscript/data/taproot-ref/2aa48f72c81f73267919baef97d2c186ffc36882 new file mode 100644 index 0000000000..c817c695cf --- /dev/null +++ b/txscript/data/taproot-ref/2aa48f72c81f73267919baef97d2c186ffc36882 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701c0200000078a4abf760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e80100000013f5b7250110821b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac9f000000", "prevouts": ["51e6120000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "458a110000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["cd4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5148aa6a6dbcb4c7060082480e3e536b464146150e8b2e96d2b5eabf2aaf1fe24e9f4d7ab890a2001a7be6cb25cf630fcd24657943ff80a7c5a11988ecbf9e80e4620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}, "failure": {"scriptSig": "", "witness": ["4c52cd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93683f2a03e8c381f92f3124ed7c392785374a020be92a8046eb2be30094f713c068fd238d2decf6f7142c55252dfef824eea080278838d8f4f1f0f617cfe47b5d91029910a453e765cd82c29c3b576a90579a453f3a941b6b6175fa922e9a13196"]}}, diff --git a/txscript/data/taproot-ref/2aa72eaeb2dee91742e3412f9e1ec464ecc22161 b/txscript/data/taproot-ref/2aa72eaeb2dee91742e3412f9e1ec464ecc22161 new file mode 100644 index 0000000000..ccc1614482 --- /dev/null +++ b/txscript/data/taproot-ref/2aa72eaeb2dee91742e3412f9e1ec464ecc22161 @@ -0,0 +1 @@ +{"tx": "896c810602bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfee01000000fadb3ee3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfee00000000d2cc268d0308cbd900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df979722368987e4000000", "prevouts": ["7dd76b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f3956f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath", "success": {"scriptSig": "", "witness": ["1fded07e14633319b5e5d364a93e0d1d69618a0bc3e97963976ead7850c805c8e98a23b613814cad05b5405372152115490f3de9a5ae05045b4bd15a8f95266b02", "50cdc53a7cb9cd5ee51d6149aecf9513ff5e0ff90b593e41157ee379098b30950d6383f4062f0c953e39bda615242fd08cfe63e1d438b500933bf1f372f8c65613b2d5114825223618514f73aca0f1e0771ae72e00606e445891296845e1dfe150e541ad046eaf767190486fa4b72a399279d95827284367003507c9d75fc300289ac1f466a89d36755e1600e9f1331399a86e3d6614880bc5639e5c5752f982fe8c321f227fe925a9a03dfc15769c4b914ec30a565872e626afd7a688f04d2188aa718ad9cb9c9cfc68ef59d95f"]}, "failure": {"scriptSig": "", "witness": ["cae0502574ebeeba586e579f5ff580377e691cd75fec571595fbcb717e287961abed55f6b0c7837de54539d85ca391adfd315d4cec3b7d7d78d13ba6e8acd9ef03", "50940335d2bed26fbd5ad4cd2bb4582c647d766eed8bd1ac46942ac25feae77c8d59fd8552f74acc58d02bf139ffd091c977ea845e402a2da1f9e4282183afb49883c37ee77529e224c823cb6f04e16f085c302d16ec88556dd1311f768ceb00fc42f2406ee9d4252e4cdb3835ac88e84fa802fb74639fe01457d17cf4c9655f74b9bd1614010e34f8fe015aa768c73a3db3dda5cbe0dee792f2d25f0cccc7d7a2d08c9c1c8b2639a85d81abb4960393b06fe8570a029d9a2a97eccde684e094b74461cbb6abd5db5491d8ac878e7ee7301352517a6d016050c52a2f00aa37beaa"]}}, diff --git a/txscript/data/taproot-ref/2ab67ca0e8401c63810a011ea1b9b40ef8573922 b/txscript/data/taproot-ref/2ab67ca0e8401c63810a011ea1b9b40ef8573922 new file mode 100644 index 0000000000..6f368cdd67 --- /dev/null +++ b/txscript/data/taproot-ref/2ab67ca0e8401c63810a011ea1b9b40ef8573922 @@ -0,0 +1 @@ +{"tx": "65bd5fe701dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf50000000060d4819d03436a2600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac2ce15b2c", "prevouts": ["4c042800000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "d07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dae8e61e5a93854f939bc67e0ec3e122a7138bc48d6cec8581769a140f30e791a211c16676cbc388c1faf2d1545933d22071968ce5ea9e4d8ac4039e171efe917420b3503815f4c7b180839898c4c4aff0ab6ef4d8b082708dba105a321f7428"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fbb2c95f519f2e9e9c845032cdd61b2be56a03c746f0eb1686ad2cec90f6300d74714e58ef013156220aa32c916bb7c1f2fb2617e3ecaa27044ebfec042fafbaa211c16676cbc388c1faf2d1545933d22071968ce5ea9e4d8ac4039e171efe917420b3503815f4c7b180839898c4c4aff0ab6ef4d8b082708dba105a321f7428"]}}, diff --git a/txscript/data/taproot-ref/2ae84cabbb3a18b00167af69886696809a07a86a b/txscript/data/taproot-ref/2ae84cabbb3a18b00167af69886696809a07a86a new file mode 100644 index 0000000000..94d27922a3 --- /dev/null +++ b/txscript/data/taproot-ref/2ae84cabbb3a18b00167af69886696809a07a86a @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702d00000000d650368ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8701000000b6f15db004cee659000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7efa05528", "prevouts": ["f62210000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "f6ee4b000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100f2e79a51fe00c6e6e503785aafc61c471d8b3f3710ce2822fc6b94dad79bb5f20220612a7f3657447392d93d9efd88c018f24279f3576e48a6d63825d2f80156217203434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "47304402205ec6f37e7965778b6138431b2edef66705a66cdf19c15dc917aa27fb8647c52302206fb657046bca821f61f76c1b0e05a68cce9aa61015ce60e471454091f26a4edc03434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/2aef8c06dd7c0aa09e6494194a3b812e4b7b2221 b/txscript/data/taproot-ref/2aef8c06dd7c0aa09e6494194a3b812e4b7b2221 new file mode 100644 index 0000000000..d85f5bad47 --- /dev/null +++ b/txscript/data/taproot-ref/2aef8c06dd7c0aa09e6494194a3b812e4b7b2221 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709d00000000dd342c8a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127014000000002d192c0760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d00100000015c28620013a9a03000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a600000000", "prevouts": ["6c730f0000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "a76f0e0000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76", "ef970e0000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "597d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee343ebd89880aabef0f18c5bef462b16920a32508939784a2317d7ebda32c7f1d0160c53d01d80ab4be204ae4e021ad6f56ad3990ac4b37baa4678d530d3ba4ecd61c62feef9509bc7b3762bc81079411fa6867ea4986820580c60fa1e8298e9"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369246ff60def872dcd9425d4b182836bb1c9ba5ca30c9708f02d69701de6960d646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faa393999847c63b69274661db27cd2e7bb4343911a06570db858c301dc754c7eb4be962498b383c32e8a84fa570ade752f3a2216469b10dbfd65078bd8e1b5998"]}}, diff --git a/txscript/data/taproot-ref/2b1075a4c09b4d3aa3be48cb1ce2571ab06a86a7 b/txscript/data/taproot-ref/2b1075a4c09b4d3aa3be48cb1ce2571ab06a86a7 new file mode 100644 index 0000000000..29ba3bec72 --- /dev/null +++ b/txscript/data/taproot-ref/2b1075a4c09b4d3aa3be48cb1ce2571ab06a86a7 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9c0000000073b9617bdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caa00000000e018eef0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf8000000009055c6ed02596ab6000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8cf5391e", "prevouts": ["56552100000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "682a4e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d136490000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_61", "final": true, "success": {"scriptSig": "", "witness": ["4c0a794abbe885190796db3840260cf4307843554ceecab68b87ff3376813c3ed29dfb4d8f3bbaa85ab8d257d0d203ff2340ed1b96a5935dfe667da753300b4b03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8193c1f31ca8063a843028b265a92d103a0bc55d579077a38dfa4c0f0cf1f578f8aa4ae59b252cb1ad77cb9fd776daefa1da376451b1ac32e0f9e42b0381767861", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2b168b93f7f916976567d85cf8e7ca0d6dbbf32e b/txscript/data/taproot-ref/2b168b93f7f916976567d85cf8e7ca0d6dbbf32e new file mode 100644 index 0000000000..d6df95f8b1 --- /dev/null +++ b/txscript/data/taproot-ref/2b168b93f7f916976567d85cf8e7ca0d6dbbf32e @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9000000000e38806fadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b27000000003c867fec04b7aea000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987b2879b25", "prevouts": ["4d15810000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "1f522100000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "8d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361cedd4ebc3a8843023445addfc64093d9c0a992ca250059238cd67fb8e6a944bb838daaa44e784827b3ea8aea20503468fe81f3acdd576e27ac09ae12d8ed7c28047789ecbd47ea83af97bdb87f8422a4707031714ddb05eaa38b24e158a7c35"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368e1f303af422a99e386a37c6ae9ac8e059bcc48394b77a776eee18f539e12c166c417b1d65e26db5cf9371b0ce7a9c3a110335bcae099de9d0155d4e514bb408a37683ca92a47492765ed69e840601310475c5f70013240e7a67747a5da918187472d664747fea006dedee35c74318028ad9a0ae37c154fe8226ccc2af402983"]}}, diff --git a/txscript/data/taproot-ref/2b229e9febea1749971fa08007b52b574b3046fb b/txscript/data/taproot-ref/2b229e9febea1749971fa08007b52b574b3046fb new file mode 100644 index 0000000000..d1840f1a19 --- /dev/null +++ b/txscript/data/taproot-ref/2b229e9febea1749971fa08007b52b574b3046fb @@ -0,0 +1 @@ +{"tx": "b354418b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2b01000000785719ab60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d801000000a030ebbf032d37300000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac35050000", "prevouts": ["1c06210000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "72e9100000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "bd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d6822c3ab459532077d5f4bfcf7544c522d220251729d5888eecbf9f185531198751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d50e634e19498d3396bfa452af2ece499faa564dc4b58fae514f4ede8dd179fb909e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900450cffa7efd13876b56a4fb6d16fe87f2b3bb25d39f5e6fb1dfb5ce04c0283c8690e634e19498d3396bfa452af2ece499faa564dc4b58fae514f4ede8dd179fb909e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}}, diff --git a/txscript/data/taproot-ref/2b4be33fed42ff17f8c6910629b0e2183d109eb9 b/txscript/data/taproot-ref/2b4be33fed42ff17f8c6910629b0e2183d109eb9 new file mode 100644 index 0000000000..4f3d1e8146 --- /dev/null +++ b/txscript/data/taproot-ref/2b4be33fed42ff17f8c6910629b0e2183d109eb9 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4280000000012c312408bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44b00000000ca4d1b9204be1e7100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc70b020000", "prevouts": ["7eca39000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "85e938000000000021551f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "cc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa45716b950e27a233a501a90011450809f321d0f7541cd1975fe5718ce8e53406ec1da8cea892037e805a477afbb54b1f5ec380954f076c0bcd3c4e3d4797a8d6"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eaf68f276ddb4c0fc7f0310a620a2f1f9fe6c0e4e29d0e280a559099e56625bc6391effb841e4c3f4ca92b599bc572f2bc6440711e20bdc5ba4fc353379105b198f95dbc4edc81931664a748b39a9978dd32dedaf5c850114f6bd2f5098c050fb"]}}, diff --git a/txscript/data/taproot-ref/2b609a197a87b5e2d1507c9acbaf2e2ab79ce53a b/txscript/data/taproot-ref/2b609a197a87b5e2d1507c9acbaf2e2ab79ce53a new file mode 100644 index 0000000000..d7284a7544 --- /dev/null +++ b/txscript/data/taproot-ref/2b609a197a87b5e2d1507c9acbaf2e2ab79ce53a @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1302000000a081f487dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0500000000e4f110110337dcab000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48777000000", "prevouts": ["c78166000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "7f1348000000000017a914971b3e5f9ac480bdcebf6ea71a9fc7de0ab164e287"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21541f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["b0fcfc88cfb5d6a8f5cdc0ea287840d7aff9a8756f3059ef4a2b2630a9ee69c301f524b2bfe20e440501edac14efe3fe089e837b1fa49d825701efc63522b590", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/2b9f2b2856d6b4e70d3b3d8e2d4ffcc6048847d9 b/txscript/data/taproot-ref/2b9f2b2856d6b4e70d3b3d8e2d4ffcc6048847d9 new file mode 100644 index 0000000000..26fc1b507d --- /dev/null +++ b/txscript/data/taproot-ref/2b9f2b2856d6b4e70d3b3d8e2d4ffcc6048847d9 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3200000000bfb51208dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf700000000ddd630b103d1d6aa00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796cb000000", "prevouts": ["b68d4f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ec455e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_4f", "final": true, "success": {"scriptSig": "", "witness": ["4d328c9fca94688e44f3ddc20a53f0782d432f5cf25486d998b1cd1777ee872169d8df25e6fd5c14c88ac72c6c6c4384aa0bee3bd35f74575a1dde6873a78db081"]}, "failure": {"scriptSig": "", "witness": ["22fc99a53b24832447d4a86902b8a2f9a1d3bb32f9b7a4adaa99b60efdd44c439d94e5f10eada4241a36f9194669561144e77084cb56b63f2eff81c6f07fdd3d4f"]}}, diff --git a/txscript/data/taproot-ref/2ba9b396adf10109648ab2f9856ca66b6fc5b688 b/txscript/data/taproot-ref/2ba9b396adf10109648ab2f9856ca66b6fc5b688 new file mode 100644 index 0000000000..73c1fafb9b --- /dev/null +++ b/txscript/data/taproot-ref/2ba9b396adf10109648ab2f9856ca66b6fc5b688 @@ -0,0 +1 @@ +{"tx": "40d9dd910260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cc0100000012faedd7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3e01000000bdce0ea40285d78d00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487a77b7a2b", "prevouts": ["2dc31200000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "55a47c0000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09029cb4a54efcccea4dafaff73436fc60ee5b4b7435fc92eace37e5c5d2ee723e22f662c2e24427d387f25549d5a36980f4f0ac3f27f8f2210c4cbd92b2a3c693999292caaf533ec3aaf0bc7aa832e780ac41ff1f43d04ccb54342f2db52d90376dedb1682ba31f74cf78d1cf9fad9cdf023e0ffa92e0686adfeb4db0dc1e7f636971b2c8118a9b9177c527ba2420defafc162961f80533f3f38adaca3ba60ee6c01709c86f494d3082e52d35d8e3018b78548654d946c8a300b0023e987133e797a631a95885cc9c1966311c5318bc004d36273bed5a357b25ffcd15a6df9f79ef7e7497fe1299e2dd62ea89215b08d627edb1b2761bd4a7067765924405ec97be826e95a22a6d5341ff4b35ff845743e464f1b0388f36ce1b6485a4a72d97dd6d40de394a2173d3d3cfb9dd880c28745a4bcf04f47325955464882da740f2b078cfdb5fae6cce7ed3e28ad13ce77a757b24abfcd6be705603db6ae6b5ceaba91eefb4e803147c4915e35d5a2b545491043a8a283e680b7ad0d99db1ccf96827b588d9a0101b2a4942f01dda330054b3501e056a6378680a74d250c382d7327993aee995c814fbabbb3ab551a00c1e920faba4d69b1db802c848f93bf97e767f5f0c9ec52dd16e94ceda4aeb8c9d14cb717ff421956750123fdbe84f0927adb67c2cb611d5f935cab2df633acb65efc48e137d807969785e903cc0e7cd395f9f84e33d0cf2068310cc5375f5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a4535f2a8b8103329caa1c08a23a51463ce03272f6b2653fcde7985b43626f34b6f5261b409d682c30910e7df322d9859114aeb60c7168b8885bdaa0165cc6510b3b87e8b9d8544644738d4851bae032b2bf37d3a4aa6541b936ff18c715610c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}, "failure": {"scriptSig": "", "witness": ["4d09027370d73d83f0ee286bcdf47d56a638fc2a96fee834f9f3930dcc5b67dcbb7abe7689a28ed15513d1b733a5ed1a38f7699db25858938a56a8abcda8b82a7072385ffeaea4df29e6ccf07fb82ccece359b4b2b9b56a819a977eb7885c60c9ebd03b954938195567f5abe2173261c40f69e31d2478fbcdb45c33df599636505b989d2b3806618b3f359f7d3ade30b78c5671098c4c6456dbf0701f97ac56d02d178d00b5302f7f426a2121c57733a8dc29f0e25bfa4461ea481ab71e85d8ca493d6646a4a752554ac802931e8a783a66e08c3b217d71a7ed95ce86a75b28c57e8fac0a50fa3c45940a472027657fea7e2d7737e8bba3a6d5a396d0f0063be766e3ce553d434787fd2ac1a3499b2387af32fe57830ffdde282f9c011cca75df0c16405e9bcdac75810eed9c2ff8f708196394957d584bac8668727c6608a553a0519aa643eed2d750c0c63df091ea36f92b6ff05ad4cf3a87e2f2daf3607b222e9fa190b67606b998c6d949a66b862a2b7c7c24c3344b52162527d5fc330d81901a70a788174db795f7e11894f3c4cb0c90519666698c1e431e8fbb95f55bcd468fd63e5a513ad4ed4b5147b1e4962aae44bf5703a17d39453596402efdedf3782280eabad201e66bceed466e1b5aaca1c5a72b2a1164f954858686f72b89520da5b83dbaf9184dfe8f3170cf8387d07afab8f279a8379a66b5eea8ed2b3c6bc13f3d326165f21939707207561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363e6166208d8c263b9a4a34aa528e018584d0355a882520645d2ec0d7435d6daaf46b3ac3e0eb552c07a1c6336d6a3e2704f93e82a6d5b4a7907113e7cf17bb16c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}}, diff --git a/txscript/data/taproot-ref/2baded8ac492d5bbd1dcece9f3d4a2f0458c778d b/txscript/data/taproot-ref/2baded8ac492d5bbd1dcece9f3d4a2f0458c778d new file mode 100644 index 0000000000..1028e0f060 --- /dev/null +++ b/txscript/data/taproot-ref/2baded8ac492d5bbd1dcece9f3d4a2f0458c778d @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf801000000af3ec0830480c1240000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac7df1c63e", "prevouts": ["ea9c27000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ba7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa8eec2374ba6ebc72bec4e80a7a4eb00aacc51a24e1026152998b46c213b611dafed5a24f2185242e3d6c1310740c566533f3942992fafe5f5be2785933680ed6"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d28ed9315b482680e4fce28b95ffa4f42337dfc620d9f0292f84b82b6bf4e2a98eec2374ba6ebc72bec4e80a7a4eb00aacc51a24e1026152998b46c213b611dafed5a24f2185242e3d6c1310740c566533f3942992fafe5f5be2785933680ed6"]}}, diff --git a/txscript/data/taproot-ref/2bde7ad09804a986048db6aa7983bf552f327e9d b/txscript/data/taproot-ref/2bde7ad09804a986048db6aa7983bf552f327e9d new file mode 100644 index 0000000000..a48387adeb --- /dev/null +++ b/txscript/data/taproot-ref/2bde7ad09804a986048db6aa7983bf552f327e9d @@ -0,0 +1 @@ +{"tx": "90a986b40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127057010000006a8f8b938bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e400000000e9d5c1d403674e480000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7e6010000", "prevouts": ["90c70e000000000017a914aa4a4e70b11f4eec4760f77206dc93b02350fcff87", "88c33b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1656142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["57e53e386b4787443e31509bfee6c0b1bb2cdecda0239fc8d71217960b529cb82c40e0e35928e60c70c32e01eb2177e27f526e4e86f94bffea45ea362be4c589"]}}, diff --git a/txscript/data/taproot-ref/2be1d596003c42e91c2a03626c93ce8259dc64ad b/txscript/data/taproot-ref/2be1d596003c42e91c2a03626c93ce8259dc64ad new file mode 100644 index 0000000000..ef15331e03 --- /dev/null +++ b/txscript/data/taproot-ref/2be1d596003c42e91c2a03626c93ce8259dc64ad @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b050000000039ccbcc40458951f0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d9030000", "prevouts": ["a854210000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/bitflipmerkle", "final": true, "success": {"scriptSig": "", "witness": ["983e46c7721e340f16f66741f7f5b66ac0ff2e0a1a718853752a0be0a9ec8418b77190f9661c12602673bb39ed0efe1b2647f1d67218a87164b3d360b67f1711", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}, "failure": {"scriptSig": "", "witness": ["983e46c7721e340f16f66741f7f5b66ac0ff2e0a1a718853752a0be0a9ec8418b77190f9661c12602673bb39ed0efe1b2647f1d67218a87164b3d360b67f1711", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddfffffffffffffffffffffffffffffffffffffffffffffffffeffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}}, diff --git a/txscript/data/taproot-ref/2bed09f85647ccc7b26bbdedb9cbf18167240799 b/txscript/data/taproot-ref/2bed09f85647ccc7b26bbdedb9cbf18167240799 new file mode 100644 index 0000000000..e183e25b46 --- /dev/null +++ b/txscript/data/taproot-ref/2bed09f85647ccc7b26bbdedb9cbf18167240799 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c75010000007ef937a6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3f01000000d149970e0413abc500000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc8beed50", "prevouts": ["16f4570000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491", "264f700000000000225120af2bbad466c5a636acfebdcec0f137a30a8da1196ff11e44fb40b3a109be056a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902236e2f5f81dae367b3a32efd6df987735531d7a249a36ab57ab1942d2ce2a573b4369058c3a3e021c84082d30e443bf2688653932ae4df20c0f670f595f339bb8180e48106b379adcfec74ba8d4ad1838fe190ce0737da53bd97fcaefd31bfba66ee1295721f198bee5c592951c9e8a531371a55bc321fb847788eadbc2d005029b63c313c1aee1d4297e5bd46ef695c9522ef339c80a5118beb0805834e7f5d16cbc3a65671bb3c71007cce88ddfd6330c113b71c2fe5d3139bcb93bb77e2029b2a476686573c42313b160d5615aa71d5f015753e73e495d22b83ec41014ca5e0c58c94ec79325fd022ce445543850f9f4a12e0a89fc7e7a84e6af93fdce279149322b65da69fdf21846ccf0b35a1527e96fdf8b1a6af144e0d41decb434c80243af46f5c54e7d977528abc9efb1ed94b77daf70cd8dfcc44aeb0f6ba88167d69922afd2a082f50ee7eee80d7c8b56f7c4b8fec1685be3b10887cee1b3a15f237cd7fcaab7663ca30b0016a20e6fbf01a4be2a7125e179d607093607a85d18a938c79e802f9ce5415693e493c1238d12aaaaa4ecc6c44608fd4d45ce35fba7c92ac5abaa71b6d5047e8ddff403b9fd5a3000420b6b357402cfdddf668da8e9e34fdf30eea73acd6038b1268768645a4be94b993a436021923648b58967d311cb8083d91eb05c5b89f027a07d7b7816193082816a1fdc6a8afe060dbf58a4ab2d3436f58c2b998160e75", "ca7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360e3072da704737c92e6792de46398d398bda5c7ff39800a3d9751e7fa2331627d8a21256d264232ee00f93dc1ddd051bb1479704967786b363cfaf3cd40418b0ce21dc20c2e8df5336572f81421322a354c6d32fb525b1159d1e49b1e9404bf5"]}, "failure": {"scriptSig": "", "witness": ["4d0902bcfc97d52a3c0f965091d2cacb7a585d7ac9a9cae9eff3f1790cd8ad05798f6de8d03d290a527b84bdca5fe6986ecdbb7201485bca1b0400fd1395aacf9835f064b0a83507546adb84d6b11ba769402a81435b13ce4501b0fa96536282f5925ab3ff03af6d0e24c3583047b751e34b364f26869405ecb1e0d4bfc5111a53de2ec6f06665f3b6d9da38ac5341ee6c1c75b0adb7357e1ee21ef26f69831f2f91cfc48ef7d16f84362f9f584cabc7d752e69f6ce47ce542ed3247e4d166afe039d1a43b69be51219e81024b9ff04d6961b98e696121c64cf0cb438ef7d5b08c3bf2147431db5763ed35b9fde768a90013100abb6cb16a652ef5732a37d883130a91f42323825d7993f5b6c10a7eaf8a8c955c43acae39fbcd300292d1f41a29de29b265adf9662e62ab971d2507e3bffbba40421ae5347b67201e0ec4dd05623b04e88d74cd45f42413a3137b3908f4e9fd2d1d8de9774bd1431d72de1bcb10ac5a1ad5c766ccd68959a19c1e2d83d4c05fc304f2cd59f29ba6128d5a3357947a2629d8f325790cf36c54074ab867a40f6d669aa5f68afb6e290f047a35c9b7fe52449d636db47cf18c0ecd80637cb8fa9f0031e8b8d1b3607d85d9c71ca9581798c6aa7e3a0e7c814d4e3b73241b7e432040373db8984c3a2790016f2e851b22cf1c42226f9cade6d98424b0798933fbebda7ca71b8e6246e42a966a4d09e6897a2387b9a12b0e493fc175", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e3449c69d4dd26d8f08d0fe98a8e8c1c38138c07c2a650710c465fa6c38a97e3ce21dc20c2e8df5336572f81421322a354c6d32fb525b1159d1e49b1e9404bf5"]}}, diff --git a/txscript/data/taproot-ref/2c2132ba18413a6ac05a486fd72669aa4293e784 b/txscript/data/taproot-ref/2c2132ba18413a6ac05a486fd72669aa4293e784 new file mode 100644 index 0000000000..4f47b8deb9 --- /dev/null +++ b/txscript/data/taproot-ref/2c2132ba18413a6ac05a486fd72669aa4293e784 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c75010000007ef937a6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3f01000000d149970e0413abc500000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc8beed50", "prevouts": ["16f4570000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491", "264f700000000000225120af2bbad466c5a636acfebdcec0f137a30a8da1196ff11e44fb40b3a109be056a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d62e2c11d390d4993697686d5fe9ff5088ad345993c774ed79e9cd5d83468e5b"]}, "failure": {"scriptSig": "", "witness": ["6a2e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/2c24b83fa75f9fc91269d9be43a5c14f9a0c8adb b/txscript/data/taproot-ref/2c24b83fa75f9fc91269d9be43a5c14f9a0c8adb new file mode 100644 index 0000000000..9342ddadb4 --- /dev/null +++ b/txscript/data/taproot-ref/2c24b83fa75f9fc91269d9be43a5c14f9a0c8adb @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1300000000eb0c7ff9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9f01000000c78597bfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a020000000af4cdaf04a802d1000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76dfb7e54", "prevouts": ["501121000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "7beb5e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bbba52000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "2b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936135ad0cd7c9b6311df988de8317b2c783507c964445beca4d69314b6889edfdc527b3d6e358222ba6f0d0e44427df3c74648eb5abf60e34311dababed48c5c2bd74d03d2cf0ae79996d1bf896237ca201e78f1b4c5ece550af4c0e01e9fa9886"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a543900b336a3c008870ed4aa640473f983a69734480d339364ae43ad1d21b16885bea8937005622f3eb8b2c440108feebbdb5f3ff09e0402c722754cbcd9b2d195038de5261112827291f7af9c58b034003ed818b7e5ec0d4ccdf81f6c2ea4d"]}}, diff --git a/txscript/data/taproot-ref/2c2615f5ff25527bb1609bacc940eda0c32b8d28 b/txscript/data/taproot-ref/2c2615f5ff25527bb1609bacc940eda0c32b8d28 new file mode 100644 index 0000000000..558c40c7dd --- /dev/null +++ b/txscript/data/taproot-ref/2c2615f5ff25527bb1609bacc940eda0c32b8d28 @@ -0,0 +1 @@ +{"tx": "8e8e60c302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3d00000000e9ad4fc0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfe00000000630dd0fc01f5cf80000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478754000000", "prevouts": ["9422520000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb", "671c5000000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "be7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ca40252659daaf7bd0a99f0cd5df95fe9267f5bca7d63ff15beca83667156d23e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8c20793b34d3eca391845c9ee05577f0fe1c8a49b621d2ce1a9da4783f236266e6f69f1f3a976918b4a05b157c0a8e21d478cce8b5d78fdf690138c8d187dd5c9"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93689a733077e07d558d32e9359f72d96d0e65552d1fc5bec129f6b14519670c299ab0507b9227b06ce0689f3875ade4de998c1d9b3bd044e9f3b63e2ed7f9e05ff6f69f1f3a976918b4a05b157c0a8e21d478cce8b5d78fdf690138c8d187dd5c9"]}}, diff --git a/txscript/data/taproot-ref/2c2686017a35729961e5b4064e6ea9b58c073505 b/txscript/data/taproot-ref/2c2686017a35729961e5b4064e6ea9b58c073505 new file mode 100644 index 0000000000..ecd5c5b2b9 --- /dev/null +++ b/txscript/data/taproot-ref/2c2686017a35729961e5b4064e6ea9b58c073505 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ed0000000005c790a2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6c0100000018167116dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9f00000000e046d60303b5e5830000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e74d241b32", "prevouts": ["69900f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ae0c58000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "92f41e000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5112303efa97a8ef6ff3cee2bba9a63ee7e38a3d19e4db44f275f3f55c4e39991f7cc0cd924d9aecb0bc2fcf01621d0e73a88693291594fa52fe0219caeccfa5b3"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a798727fda10d0036e92c2807d287b376d106d60a47a638b2ffa4bc96415976a12303efa97a8ef6ff3cee2bba9a63ee7e38a3d19e4db44f275f3f55c4e39991f7cc0cd924d9aecb0bc2fcf01621d0e73a88693291594fa52fe0219caeccfa5b3"]}}, diff --git a/txscript/data/taproot-ref/2c28303252e327e51e1e99036e9c4fcc97b10d8e b/txscript/data/taproot-ref/2c28303252e327e51e1e99036e9c4fcc97b10d8e new file mode 100644 index 0000000000..1d0201bee4 --- /dev/null +++ b/txscript/data/taproot-ref/2c28303252e327e51e1e99036e9c4fcc97b10d8e @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c452010000004e24b6b360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127082010000008e6c8db2045a9741000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898755010000", "prevouts": ["2c1f340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c8200f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_8e", "final": true, "success": {"scriptSig": "", "witness": ["2a9fa7f94fb4eed58add5335b59b833f5d23368510bd8a0bad2d767a2071b5b850ff0d7a306f2e990e23ee425f618eeddd804dd8e7123627f7e262936133501b02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["4e9dad7f641f850229ab9805daceb057af75c9b7ea11e99ed179c6dd05da65dfbf5fef79d9abc6bf6de2eed4bb0219cdb88706a421c586b9138f50733f22173e8e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2c3a119d1d9da7d4fe68883d95e8f11060a9def5 b/txscript/data/taproot-ref/2c3a119d1d9da7d4fe68883d95e8f11060a9def5 new file mode 100644 index 0000000000..668f392e6e --- /dev/null +++ b/txscript/data/taproot-ref/2c3a119d1d9da7d4fe68883d95e8f11060a9def5 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707301000000b075f9f160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703a000000004772b9bc03c6971e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac66000000", "prevouts": ["0d7e0f000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "2ae0110000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "success": {"scriptSig": "", "witness": ["a4d66911b9fab85fa454ff79e7aacdb46a0cfb135b676c3088d4188b6d8eedfd4b6a7e5d091228483a946f396a7eb7a52e036fab36c42ea72842463904828f6983", "50c1e8ebef0ff5a53599a24f57ac480c27d919b1eb13fd98fac93df728ce6b0b78ce1d3365a0bc169463accb988a490f1076f186525a9fd9c3c8b2a4027b15574d015bf2d1ef1fca000ea1d8be5fa4ad17"]}, "failure": {"scriptSig": "", "witness": ["3be1d19392a4847afe2c1fd0d8c7ed5c91bf42072f6fd73e7cec54601dbad6a8751360f195d58870f0f11dd3530853fa10c72e7be83aad2c8583195fd6c8488483", "505377d055a183100a91b0a0c5ec8601ecc394fa006c26ff0fabf901f319a509e70088370c5136e74d81642146967476ea381f32dc3660ddc4c405213d85046b528bdda31c2075e07de31ded85a571a766bfe188929118b572791b993ec7840972d0e06863cc88fe3393c6101be1ca11f7942045bfce40112b02ae69d0a618a34b8a7a8baa220588bf8567a0141996f444c061c197f06603749a2e67e719b7dc92e50370bfc8c37f81f165f737dc3c58733d158520166cdfa15e640f4f00f219"]}}, diff --git a/txscript/data/taproot-ref/2c3a775a5deae4555f3af3537c8a4195c6e5354f b/txscript/data/taproot-ref/2c3a775a5deae4555f3af3537c8a4195c6e5354f new file mode 100644 index 0000000000..257a136d12 --- /dev/null +++ b/txscript/data/taproot-ref/2c3a775a5deae4555f3af3537c8a4195c6e5354f @@ -0,0 +1 @@ +{"tx": "32bd0f0b03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7301000000a2d6c9c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a100000000c06b56c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127000020000006321a4850146cb4d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709ff9333", "prevouts": ["03b67e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "f22b120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "802711000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b9", "final": true, "success": {"scriptSig": "", "witness": ["bac03280310edab32e47ad2149e69de400c7ffe6e28a636181118f38390d7a787f2ae43f65710514538b1fdd779c58769ede109ff1d79db0bf4471ecf111209002", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a297df114f37f55d9b4ed1e3f63bad63d671d4b9b23c07be7af6a916ec99158de750669f9737e120809497c4ce13d79fc1981426b808fb763aa2343f19304573b9", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2c62f7a3d90b30d6f1b1804f6bf0a916d3305efc b/txscript/data/taproot-ref/2c62f7a3d90b30d6f1b1804f6bf0a916d3305efc new file mode 100644 index 0000000000..c23dfa5770 --- /dev/null +++ b/txscript/data/taproot-ref/2c62f7a3d90b30d6f1b1804f6bf0a916d3305efc @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6101000000fa271d9660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270790100000078cbba8d03582c3100000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1c000000", "prevouts": ["2453230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b6c010000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_48", "final": true, "success": {"scriptSig": "", "witness": ["4a56d64489dfcb24ad51a498b7f548027600e170d67317acec759b0f03422d8e5ab3460d69c19f6be0eb559f50974c028601689fb5b5f6237363d47ef5b8e24c02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0db5ebafb35dd767eccccbd366467749618c34c6f5fb7912f66b22577b8d93dd653e03e8d68f6ab4c010e6bef0a6ce86255f8fb46088e55052313894091886f148", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2c67e0be52a7389f103f44944fe8d8913c973b48 b/txscript/data/taproot-ref/2c67e0be52a7389f103f44944fe8d8913c973b48 new file mode 100644 index 0000000000..e6b4b6cd47 --- /dev/null +++ b/txscript/data/taproot-ref/2c67e0be52a7389f103f44944fe8d8913c973b48 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708300000000a2259fc7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8100000000c6f72fe102884f91000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c8010000", "prevouts": ["1fea110000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6", "6e5c82000000000017a914927d550e2674fb9e1f6ae1260d00989fc596dd7f87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2254202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["aea28210ccbc6063f5354013cd50857fba6fd49a8749ad2a4148746ed6bdc422ec0cce14f7f2b83e3d27a6a13354cc60d006a9039e074d670657ae6edb93d62f"]}}, diff --git a/txscript/data/taproot-ref/2c7c5497a7e7f81979773204f099b9f23323698e b/txscript/data/taproot-ref/2c7c5497a7e7f81979773204f099b9f23323698e new file mode 100644 index 0000000000..9270b63c9d --- /dev/null +++ b/txscript/data/taproot-ref/2c7c5497a7e7f81979773204f099b9f23323698e @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccd00000000f9b351b001d812490000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e79e000000", "prevouts": ["d5225900000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045721cddf589dd211ac28650b11a57c9c7761090d2defca181b3dbd9260ba7b6b1d191de94316b2d555b882a7ea052cdcffb2858bcf3e9dcd4db66bb89a9914d760d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936140d466410f93f506cb3577f700de6259d226f314801f04d6da966bcb64c10bef2809a2eb594a6d82ed798bedf8d6754ddd1a8a74001a2f8f1c3cb07bb651864f3b3fb8d5121830dc5ea13d084a01bce62f4c2426ea7fcb92dda33a6ec3d9661"]}}, diff --git a/txscript/data/taproot-ref/2cc2506d179d284634729bf9fbd8c05239f90ca9 b/txscript/data/taproot-ref/2cc2506d179d284634729bf9fbd8c05239f90ca9 new file mode 100644 index 0000000000..26492ea6b4 --- /dev/null +++ b/txscript/data/taproot-ref/2cc2506d179d284634729bf9fbd8c05239f90ca9 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4c00000000fad9e7660375706800000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478780000000", "prevouts": ["785f6b00000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f94c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c138752b88f442304cd570a99b7416851da048b7f1df3ec1a880a296df45b544a4dd4bfc6549e8d5e198b0f1e67d147f6db02444245a6cb27bc19444f2462468d332399bdd0fdb741da8d579adddb10dac50c4b595c0031ea1e156729d78e3487d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369f418ddb17834b13bad2d7867a7cd562666631728cf586feeab904af49e7e90debe99bd20db478a4ea38512f1221f176d7e5053d85ce724541b970d7e312b589d332399bdd0fdb741da8d579adddb10dac50c4b595c0031ea1e156729d78e3487d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}}, diff --git a/txscript/data/taproot-ref/2ccd61243d6bba96a68b774617b9d76c97662ff0 b/txscript/data/taproot-ref/2ccd61243d6bba96a68b774617b9d76c97662ff0 new file mode 100644 index 0000000000..67575aaa40 --- /dev/null +++ b/txscript/data/taproot-ref/2ccd61243d6bba96a68b774617b9d76c97662ff0 @@ -0,0 +1 @@ +{"tx": "a890ed2e028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dc000000001f541de760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700601000000ecb8d1e201aa403a00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac99020000", "prevouts": ["ec3b3f00000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "f06c110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638668", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365fab757434963be9e6b2bc0ce3358798181954c3af1778da49ffe7612886fff5056f60ea686d79cfa4fb79f197b2e905ac857a983be4a5a41a4873e865aa950715c685a6e20a464c0638846c4feb0cc1ab19a0a1d3cef03660e119c827d202a5d33ab5c29645e0220ea4ffd8cb7e67404885cb8b0cf94872336c7b06d59c3124"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d516619599a2832199ea7520e829579ac708ea18d94219cc28453716c125c7ffbf6b4167115de6998fecfb714975bc270adc7a6998f06c7ef8576e15f157ca8963750636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}}, diff --git a/txscript/data/taproot-ref/2cd0311c121154bc8385767e5893c92ee5aa2c05 b/txscript/data/taproot-ref/2cd0311c121154bc8385767e5893c92ee5aa2c05 new file mode 100644 index 0000000000..9f86b197bd --- /dev/null +++ b/txscript/data/taproot-ref/2cd0311c121154bc8385767e5893c92ee5aa2c05 @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270410000000011ab04a302b6940f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc40030000", "prevouts": ["5d78120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_38", "final": true, "success": {"scriptSig": "", "witness": ["671024994d289f8082e67b82ad6c507ae04d157119b587baff5ad260381797efb62a929e26d45f8965e5bd110b3aef395b702fd402ff517d175be30d7cf3f09a03"]}, "failure": {"scriptSig": "", "witness": ["4c81a578377825b6b347ac5c4623fe99cbf806ead287d9bec6c7a24728a2018bb0e54cb299c047d9ce95db7071e4a3f6f99fed67291398ceae513120af070ec438"]}}, diff --git a/txscript/data/taproot-ref/2d240420d7f8e429cb31120c7bf532805423084e b/txscript/data/taproot-ref/2d240420d7f8e429cb31120c7bf532805423084e new file mode 100644 index 0000000000..b61b027911 --- /dev/null +++ b/txscript/data/taproot-ref/2d240420d7f8e429cb31120c7bf532805423084e @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127031010000004cc7cda5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2c00000000af66aafd030a6e79000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87dec2e433", "prevouts": ["a3ab120000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "b7c06900000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["30440220424a1fcedac58fbab208e7872625898eec1b477b391478d49822257108be639c02203b1888636d3f82bc77e92d9d245acfe2715ca7c9e4963a7d15acae979b7adf7dfe", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["3045022100e974a892ae164d3255e966f24d7157c9f6e5773a9f2534152153e64bb12fea0102200186a3dfc8c364a7ae72712fa808647039f4e9fc39c07bb3d89c13f0d62ea0abfe", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/2d2a878308fd10775f477107b478ca6993799763 b/txscript/data/taproot-ref/2d2a878308fd10775f477107b478ca6993799763 new file mode 100644 index 0000000000..b00755ae9a --- /dev/null +++ b/txscript/data/taproot-ref/2d2a878308fd10775f477107b478ca6993799763 @@ -0,0 +1 @@ +{"tx": "8d072cdd028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c408020000006c4d0c91dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be800000000b35dfbaf0267815900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6e14cf126", "prevouts": ["7b9236000000000022512085b1b5643880360a93ad399dd8d1aa945ccf0115d9a41dc926feca691d280be1", "8981250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93622caa5a4728c320064920d38fb193ace693a56e97bbcb89e0763e5547ea42b91"]}, "failure": {"scriptSig": "", "witness": ["6a08616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/2d50c7d765d0137b5bc9bd78ac8e39437d22fc0f b/txscript/data/taproot-ref/2d50c7d765d0137b5bc9bd78ac8e39437d22fc0f new file mode 100644 index 0000000000..f7d123ca18 --- /dev/null +++ b/txscript/data/taproot-ref/2d50c7d765d0137b5bc9bd78ac8e39437d22fc0f @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbd00000000d61de46603ff1b2000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc754000000", "prevouts": ["31c0210000000000225b202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["74d06513e254771c994c8eff3a704430ab64d6b1094937fe3e9f90083eb5ef5c0cbbfd8214affb01532e5b00db6afc887d4f96e2c8d8ab269cd12eac425d2b8a", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/2d562228e60c1a1e62b21379cc97a7cf96852b48 b/txscript/data/taproot-ref/2d562228e60c1a1e62b21379cc97a7cf96852b48 new file mode 100644 index 0000000000..06fd0e1d6b --- /dev/null +++ b/txscript/data/taproot-ref/2d562228e60c1a1e62b21379cc97a7cf96852b48 @@ -0,0 +1 @@ +{"tx": "0adb3c5a0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c30100000007c9f6ac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704a01000000e25f26870387721e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2a817952", "prevouts": ["569012000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679", "59830e000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "7e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369989da34048f0fc009025cddcce64a25b2539e47e8d6db7b5752e0bbf5ec5785da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed3fb5b8f7b3afa290146b30788656a8f4c2497a65b1555cd50f1d702ddc8a1f8f2e4a14a40b0acbe20218e44481fe6660f01d2e0cf04e3bc8d4452bacd1080d1"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fab95efb91d04564594d9dcf752eb8fd975bf01996a0bb9f9eb7163324924bcd44fa5d068ae686a8bb1ac9947127542ac866077ad522de57cab26ce701d52bc951"]}}, diff --git a/txscript/data/taproot-ref/2dafca8d1802bbb6ce3ae1196aa647ee3c9e418e b/txscript/data/taproot-ref/2dafca8d1802bbb6ce3ae1196aa647ee3c9e418e new file mode 100644 index 0000000000..5f2635c88c --- /dev/null +++ b/txscript/data/taproot-ref/2dafca8d1802bbb6ce3ae1196aa647ee3c9e418e @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5c00000000bbab6ce0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb500000000c4ee82fc03fcbb79000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f878865e72f", "prevouts": ["34dc260000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "8bab550000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["30440220737d2e648a5be65074da66d545eadd11f9ddf1d199ca3ab7cc78cfecc3e18dcc02207f2c8d36c2e65fc7a9934bd579e42176065193e8b901b8209c216c7ae7b8985f82", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["3044022065c9c653026db1153cdd8ae6e83aef8a48d7d558f87f475465c26ace6cfe4dc402205731f6814f4a56cf57cd6107ebc60af4a92a74876a32064ee6a8c15e206008c482", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/2db945824c150b91aa78265f9e3701bd991fcf10 b/txscript/data/taproot-ref/2db945824c150b91aa78265f9e3701bd991fcf10 new file mode 100644 index 0000000000..9a24cebf0f --- /dev/null +++ b/txscript/data/taproot-ref/2db945824c150b91aa78265f9e3701bd991fcf10 @@ -0,0 +1 @@ +{"tx": "e2951d0503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2900000000faacbcb9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1601000000b69418878bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4eb000000002de75a95023fb57d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689870b6d6e3c", "prevouts": ["4a82260000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258", "6f1924000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "0ab0340000000000225b202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b904af0aedf319833b6f0b5cc7decb0889776f3b77dd0bee536a968c107450583dc089f03a34f9a466f96706ee05a2c65539647f5e0522a7c1eb730770b2f3bea809c0c19ecf10fa30a127aa36fa908ad7150633bdc76f444042c61340bbce98f283db07d21eb3646864d591d62d7ea89cd4fe5c53d9cac758325c23478cd23cb96479f190182bfd291c39676b63b25ab7189f37c57b6aa43a9787a8349f43ae6af10354e7c7683ba590f944c3f093f860075a196bf752044b2b9e871432bed800b030b09424cb74a4c11ead0a02665a359a06a427191c45484eea8acd392b190ffbb0b67847bf9a36a335ac89a394d88743908daed17785255b26220769bada28c31d2f9f02a4c9b4a00cb3902bcf1cc4f329ddf7b755fb48424ac9e2b15423725fe4392aee827301d3bc45b505bc283104c722e19161595876ffdebcb027e30bd4617df89096bce9d7b78b1451ac28e0b27e029178010867b2da170d39427ff5093c317c8272b429ac5aafa9a052804a61485d365db36ed4e6843a72703898607188976e5c86ffa3d89b4bf040fd3cc53d0f80542bb58ebc484bbdc68885b83eeed607504fcb8e701a3f5d54dd575762b414a2a420b081fc8f60a8b7badc2e7063460be2968cecce24ba321cc219799ea24f62415cf33a6ef1cf4a78606e7fb7f506279b41e02ccbdd054737dca131891bfb6465063f4695a16e5e9dfe559a5b91a3ae9bab51173175", "3d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362b5dec934ccf641c1f3f5519568e5c1c1326bd2715cafe0a6e7ee716dc27c9f14ed4022c883bcffdd4981a43d80a989f638bed5cb710560195e12f06d5f3803c1cb891527dccd7fe22077390053ac1c45ab6e7110116df1a30c9559411f432f5"]}, "failure": {"scriptSig": "", "witness": ["4d0902257170955c47916501f1e60c211483835e75c9607c71846fde55f94f7aa07a0af2cb6418c4e1c2412127f30be270998c93e9590de3c36cac97d677a256b24bcc76b77d943717e4a234ec25292d21dd067dba9e06830f0368f151558d05d5d07e012f91f50149ac649c461743569c40ce9333fe03c4493f78cf0979447849a721f1def33ce6a24d9cbb3ad9cf6e909243572f75b01621e405f251adc94b7dc03d07bc5d94aa409b639ec1a77bf4fca14d3549c531d7eb2449a0520f30ecd38ce52ab978f0402be6e8892482df4274d4d7f0ea0143d29895bc7fd257e62fb7af1d5a2e928f4c6bdf0e192d3b4a285b5ac0089875c94f83aaf2513e3eb15e4c5fae4ec1caa74bfaf5ac4795cf54d655f358d4011f9e68e232e813a4df6489cfc2ce3020464d8c4c0579852ac2529b3623fd1c11ae5178e665382fae66fa7ad93f6eb7443ede6bf926783c8eef39f9495b71a096271b5ce0efd4a7f703a9716827d1217fe9784f1dfc83e52c30c326a3a22d8ec9878b4b51ccfa03958203245afed879db89040dcbb997c948e771f16d17ca798e3e158638132ad6fe035a478231903687b0f2c05f10b447a4b4336a280e48c0ad415fcba55fe7ef100c2ac1da92cee102ed2f2e03a1d01c5a5e5a3696693b8b64bf395d8a75555cd58a353ba21948541ce5427ac4945a027563d24d51dce47446ab54ee30bf25b2854f8eca966297b3c822432b73abc45675", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eef9a48fcabec25982850a496e19df71982d596f167265e15d1ec282fb30074b91cb891527dccd7fe22077390053ac1c45ab6e7110116df1a30c9559411f432f5"]}}, diff --git a/txscript/data/taproot-ref/2dc10a9c76952430b8601993c330b88bd0e19cb0 b/txscript/data/taproot-ref/2dc10a9c76952430b8601993c330b88bd0e19cb0 new file mode 100644 index 0000000000..82cc79da4e --- /dev/null +++ b/txscript/data/taproot-ref/2dc10a9c76952430b8601993c330b88bd0e19cb0 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45400000000990ad9cb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709601000000ca2459ba01210a0d00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acae847024", "prevouts": ["dd2d390000000000225120ed1497f510b05298f56dedfdf59bdab87baceded2037e3bc9fe47e7002bf81b0", "480f100000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d666a87a34bdde03248c8aac3a2f3cbb5c6322b1c912a69a1720e7f08fbef08803216184eec05d23f2cf8f11e8132d22e55250b1dd0dd930eed2463a640b4cb3935b24f2dda21bd71b290b36c23a236e30959133139fae36c8c319dfa56ccb90b4f923087529860f60db50a941e0648505ee9229884c11d173fccdaea036b5dba14a392c1fd4395ff1b7822f28ce9a0004528e2fa8ae1dccb1bd625bb1fcfc692e0aa9a022e68826a2877d11dac2e04126f6e07e45bd216ee7ab06a4968c00d89b79a7d694735f4cabb34156980ee79b7aac581cf7775adc112e870cb17fdee261bee9f4bd5b18fa95aa09d60e495a365c9508df1a56f37976c686f96663e0230d8b361d5e30f297cbe821243044a694958a536cd18156076f3622111985cf0a3139f617cb31d4579ae1895b63f089440e77a065a8ec026200c06767f6abb6f469bd20680cb27d39f75fb37f4825620229d9293004f8bd9ca6dc114006363919ba331314771512786f7741367e58d06b74a75d04ce197f6fd9c2847636622112bb1a45221a9a0522bb592c94847b18761c41e2b846be6cc8f45bb8995138e65f85dbc5b0bfc7f32edb83097f4a210f09cda4264ce9f7ee4ee22f69b0bc375ca731222673b6e920f960bdca744e509f5d5954465de105977324203a3e262c0fa535aec5147081fa05fc6fc3b6a117c5369818034468c9580a1f568c01c1b21d9d2bcf4569fe463f603375", "7b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffc23cd491e8fcb233d9013136f75dc1e8b804157adf3d15ad0ad23d368e24bf2affe3792374ee751e9779d236e331236b2211c0285bb070b7e5d58aad1c033f64fb6de85916ce1333b57715a419fbbb7fd448155796c8af09a2e4a2bc14d947"]}, "failure": {"scriptSig": "", "witness": ["4d09020d89e0fae9357fdf89b3639a88a65e941d8855eec7ce68e6f13a6a6b5ba7abe824e47f9cf11e1dbd0db57166425eff3ef578e9d73568bd184640c4b591b9868a60e084744e7779b6f7ed248ff685354f7a6fa7e14e3da359ff41a86336d03e9c099b997d1b730bb33294a22b3a195f8aea033d9bc2379a715bde9caeb673718125e9d4d4414cecec1512cabc9cfb91f0b2dc8a05af0d20c29414ca1c038cf78b8e4aa4acfc6d684bed98bf6b681fb6b7df97d391cb17b74973cac63d5bc86bc87f9d430a2edaa5b85e433b89c896b996947815129981a5aff7151ea9f31cb8c9fcf95da2582aa3fe946e980cf8a244f2ad099e966e49e3b8244780b5ef903b7c607cc2ffb736f8d564e668a7980dc19204e424e745cfdd1efd399904892b0a6be52037ff7f6e76fa8d8c7205e6bee9803a215355cd4fde78aad7d52c69434936dac65bd6bd9db59f771ad152530fc9d46a3b2e763bee19b8d3107c2d45860838c11535d77df67292c9824f5522e05a7110767a2958a7cc3ebe595fcbd74ec86be2b8c4bbdf5bb6e961d601c2c23b209754997b2cb59035a9f784a7ca23feca6f227e72a4053b48320e047a819e418a25e269d2e8b14a993ccfb54d8fbecda59635bd327a3b21448c5d75da091427fee5410852eff893bd94ff535963246cdfbbae3891e3675cef51b3bc6440cd3cd3486e3dea650cb3712fccc780e7dac268f9a2244c828fae1383d775", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082565447efa486312fa493bc3efa8d0ca00e2c766484411258b08f0fec6b85156cd34322f35809060e9857f404c38bdcaf402c3d07c78e42a3b4d1eaa304dca88a"]}}, diff --git a/txscript/data/taproot-ref/2dc5b1536be7b443c27e763739595c42dc34998e b/txscript/data/taproot-ref/2dc5b1536be7b443c27e763739595c42dc34998e new file mode 100644 index 0000000000..9f9cf3127c --- /dev/null +++ b/txscript/data/taproot-ref/2dc5b1536be7b443c27e763739595c42dc34998e @@ -0,0 +1 @@ +{"tx": "b183537402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b730000000029171eb98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40a010000006f30ebce04500f4f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374879e627060", "prevouts": ["76491f00000000002251200e94bfc4da0ec878710fc6e63dfa8cf2888c96cc8603d6f04301c7800d453852", "9dc6310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364f1066f55fda12d1d5279f6f8609595c415a02645efcaf2b4e451b7cd978e9be"]}, "failure": {"scriptSig": "", "witness": ["6a60616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/2dc9f8f8cf217ccac41228917cb739aee23f3b55 b/txscript/data/taproot-ref/2dc9f8f8cf217ccac41228917cb739aee23f3b55 new file mode 100644 index 0000000000..20a3ad0318 --- /dev/null +++ b/txscript/data/taproot-ref/2dc9f8f8cf217ccac41228917cb739aee23f3b55 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c415020000008b24badfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0400000000376ef8070205c49700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689878c020000", "prevouts": ["92b3310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "adb367000000000017a914856f7c6a5a6a1ac0e553b769a4c35bcb9fb6f50287"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_fd", "final": true, "success": {"scriptSig": "", "witness": ["697477b6f9d7c74b509fb25aa4948561024137bf5c2dd8edf46921020f4f122a9bec8324cefbd879df5bf6225ecd05d3d86f6f42bb1afff2496a0395467ee504"]}, "failure": {"scriptSig": "", "witness": ["48f3d197c6e9af9cacf64915a2f18cc6c0838397d1f75de62dd956b4e5212be98be8b375a488565b5860f3f0bbf77f9d9eb6760a40ffb52d46a798d994eab796fd"]}}, diff --git a/txscript/data/taproot-ref/2dcae1af8317442bc492bd0899984f32bf30396d b/txscript/data/taproot-ref/2dcae1af8317442bc492bd0899984f32bf30396d new file mode 100644 index 0000000000..ebd72fa4d9 --- /dev/null +++ b/txscript/data/taproot-ref/2dcae1af8317442bc492bd0899984f32bf30396d @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd901000000f31c8ecadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6f00000000c116dbd404db3d7a000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5d010000", "prevouts": ["1ef55c00000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "0fff1f0000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "137d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e86a37fd9f079711aee2dd395c4f9bf6b9cf1f54b1a82846abc908addbbb61fc725d0346f0de7f7080f7758bd86c81c482f81ad0c7703311f4b65ab9d7b77c9f00"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ebd41cd46598692ca564feb702471a27c2b329b731a2dc6dbcecd3c4d6afe3efd7c43b740c0608ac721897ca7a4b0bbd2ef7e62418d1fc20274bd386c7c0d4d7e"]}}, diff --git a/txscript/data/taproot-ref/2dd9b9584d97aeda14030c0cb94034e5a64e1e33 b/txscript/data/taproot-ref/2dd9b9584d97aeda14030c0cb94034e5a64e1e33 new file mode 100644 index 0000000000..e497a8c7b1 --- /dev/null +++ b/txscript/data/taproot-ref/2dd9b9584d97aeda14030c0cb94034e5a64e1e33 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ae0100000008a2ec32dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9c00000000ab39da2d03d6d489000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc742d7ef21", "prevouts": ["0d91320000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6cac590000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_aa", "final": true, "success": {"scriptSig": "", "witness": ["2fe77d385cee1e8ea67bcd1a4ab9a7a56a6fd393937cd299ed84fc6ff756a1df9a87d024d0f2673e09d267c99b2631e47bf3c52436e2f7dd15473b628f861f4702"]}, "failure": {"scriptSig": "", "witness": ["171b6ee5693612f96b8971c02837bcd7990bdac55d1268294b28e40192fd4aac74c35bfb700be0dd9b7481d55e639c3f7b0c8e807fadae98b63b8642b4d0166aaa"]}}, diff --git a/txscript/data/taproot-ref/2de7782cb97bcd10b69053268684420a0022efd6 b/txscript/data/taproot-ref/2de7782cb97bcd10b69053268684420a0022efd6 new file mode 100644 index 0000000000..c737c19443 --- /dev/null +++ b/txscript/data/taproot-ref/2de7782cb97bcd10b69053268684420a0022efd6 @@ -0,0 +1 @@ +{"tx": "35c5f7e30260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270220200000096b2ecaf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44c00000000bf5276d503061a48000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987c030cb56", "prevouts": ["02ee0d0000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde", "ee013c0000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "f77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a71884cd53fc7dd87aebc20425da51a5c294f1bede93b7a913770a59279767c4e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e80a4dc25bef94d3da1f821dff96c297a1e496d55e040bded104527be104f359289411b885fbcd56b4d2cd2e695cafde2fa2de7097172cb34b20e1fb870aea9a6a"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f5209053a0e3543f016bdabf2a9b449e56532ff027210dc00b302557bc408c98e1b135a17580d142a9191c3b85b2fd298f3e09062f6f11151feab86e1334277f9411b885fbcd56b4d2cd2e695cafde2fa2de7097172cb34b20e1fb870aea9a6a"]}}, diff --git a/txscript/data/taproot-ref/2df7793cf7520895ea4121850c34c16bd1874c22 b/txscript/data/taproot-ref/2df7793cf7520895ea4121850c34c16bd1874c22 new file mode 100644 index 0000000000..a87a7c0c9d --- /dev/null +++ b/txscript/data/taproot-ref/2df7793cf7520895ea4121850c34c16bd1874c22 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf48000000009d982271dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c76010000002843b97c03ee7dca0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787fd93ba45", "prevouts": ["a3c46e00000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "81d15d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d04c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b81ff7cc7637e0c05982e17a8e208328988859d4b2b7eb979a1983188becada13f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823bd101e45a609d3b8e0b3b6f0b7594624f7e9102ef5d5dd3027418de40ebb2180d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb3c724dd5710b1380b446d964c3207575a75cdfc2d4e5f005be07d8e30cc140daaf72f6551695de9dd2e4eae28f07b41c9ec36110061b2152d7ab3729ab44bcf81a0ae7b640e88bbe84e7c412f47337f1d12d37f95b062c539998fd28213cbdf3b3fb8d5121830dc5ea13d084a01bce62f4c2426ea7fcb92dda33a6ec3d9661"]}}, diff --git a/txscript/data/taproot-ref/2e15993224f1d73378824cbd1780f6d25e85740a b/txscript/data/taproot-ref/2e15993224f1d73378824cbd1780f6d25e85740a new file mode 100644 index 0000000000..a859b7f136 --- /dev/null +++ b/txscript/data/taproot-ref/2e15993224f1d73378824cbd1780f6d25e85740a @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270910100000002ee48babcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6301000000681f3bd404a77680000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac689bb04d", "prevouts": ["d5e912000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "11686f0000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ca7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea15911bfc306ad37f0e70507a95a4a7045d4c5bf0ca1619bed3f37a14eb6407e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8bfe61acb5630f372e1ed5eec342882068788aa3656bac92c2951e857c300141b065bfcb7199ff8296c5f7d41f3b2c6067d88c0a33f2878328c609d56cc191f12"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367e39eda6846be57e551a440b61577244ebba110fe39aa4de9a3aa77d57736b5ebfe61acb5630f372e1ed5eec342882068788aa3656bac92c2951e857c300141b065bfcb7199ff8296c5f7d41f3b2c6067d88c0a33f2878328c609d56cc191f12"]}}, diff --git a/txscript/data/taproot-ref/2e2b8acfc93c65c04508d0730229d6beb1760346 b/txscript/data/taproot-ref/2e2b8acfc93c65c04508d0730229d6beb1760346 new file mode 100644 index 0000000000..7a2d7e9804 --- /dev/null +++ b/txscript/data/taproot-ref/2e2b8acfc93c65c04508d0730229d6beb1760346 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2101000000cfe0b1b560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701701000000d6dee7570105fc0400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4c000000", "prevouts": ["48997400000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945", "60ea120000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_mis_83", "success": {"scriptSig": "", "witness": ["a9a463c57f5b1cc5842c32f6861eeb98c56b3095b2197f0179969ef076ab25d20d39b7716feadb72ac981c7987e20c4b8515b4f9c3b8c492e0c03343b569cc2e82", "507a06e1db1b486066c7a31bb8825a8d4302e904a212edeb9483bce2e1e7bfc2face2c9d48f67629594d3117b8c3ef6e71a386fe8f45378203b251d4b128acaa7269"]}, "failure": {"scriptSig": "", "witness": ["0ee1f68bef8ea48719567c7dcbd082a7445c6f33d6c6725bc7925ef66844f13a78baabac3df01b4ec85b8869e341ff558eb711e6d5e59ce798f12427fa89a4bf83", "500b8bdb554277b253a33974533211c9bdbdb494be9869b397c3e49b32982d90b8842ab8908c5724d99cabe2863b00f227b79ff5c83dadb7293a20c7a4be1ebf6cd569b24f9fcebb6937179e2487c7eca78ff87249"]}}, diff --git a/txscript/data/taproot-ref/2e4630df1ac360494322a4300b3a916bf4a7aa42 b/txscript/data/taproot-ref/2e4630df1ac360494322a4300b3a916bf4a7aa42 new file mode 100644 index 0000000000..6f9444ca20 --- /dev/null +++ b/txscript/data/taproot-ref/2e4630df1ac360494322a4300b3a916bf4a7aa42 @@ -0,0 +1 @@ +{"tx": "9e51fc1b02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf32000000004143349fdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4beb000000009abff0ed03c1d68f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ace21a0c39", "prevouts": ["01b468000000000017a914a8c07d8aa161ec0fed82ac1dc93d81dd0a92012687", "54c72800000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cf", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630ff43b1b4fa7d17657f9cc2ec27f32679adb7cdeffb13176335679db5b5919f3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828121d7901a27ea565e1cb6f91818c43a3dc8f46dc56db80c8bd3776430739107a653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514d5a9b7fc917253ce709706ec0b90ac12c0f363dbc177a85b066bc4407805851ecf70b79dd1be85a38988f8929e7263abb01bba95965800009381ed351eddb0fa653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}}, diff --git a/txscript/data/taproot-ref/2e9a37abf29713e5bf564831df0206b134ed9e23 b/txscript/data/taproot-ref/2e9a37abf29713e5bf564831df0206b134ed9e23 new file mode 100644 index 0000000000..14a284e595 --- /dev/null +++ b/txscript/data/taproot-ref/2e9a37abf29713e5bf564831df0206b134ed9e23 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf60010000006c56fddcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf700000000cc52dde28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41200000000d0282f1d047d49ca00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d8000000", "prevouts": ["a7a86f000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "7af02500000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "2e6e3600000000002251200fe4658e0dbf66b6be10f530376fb0e6dfa185e9d7f38ef5d5af1eba17e45594"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b7ad5dba2f6f9458c267035de2d7bf503510508c8170fbdcaea0beece8a3bb23282b7b94ff2692e877eeaa3eafb165130cb72cfea221dc1c58e730ef74fd0fac2d03c13d57b4ce5b0f7ea75927e23ce55c81390c8691b340cca438ac913c93305ebfc1bf0ab184275a47986721d9e8f84e432fcfaa66fc390cc40b5c0290fe4b0c7cfde660d1ee135ba38c440afe4643c43e3d8b4d68ba8040e98073deae341927ebf2266d75261f6214a86770d368c621acbc65bb9a2c7d63609caf35c0ecec934b8a35d972d4eb890c97d9efb764cc68c53e650a3ef109e3716255ed3e0d3ba7aef3ed87e4d27263b62c9061817da64c850af1dfae274cc53511cab2acef4af2b814d26bd325950368d51e19e7ac1c1a2110f7b50316de62e60f5e0ced7a359552e8c90be6246b22132cf033941b5944e52fc7e7aa25bdbabb21948e91ee116fd488fbb7229962ed3e168f23612ef3436cc4c9bd0a5c4d7183d64660df68686f73cd6cf451a862d2c3e833b18d4727df04ee7ab75e62480db84d78a8f5679747e362e4fdff8760ed0d4e03a4383f57d8c88f2964bdf81d017cb6f18be3d7a4b4066719346642082479181c32c448e66a1890e57cf84b0113f5e80de7777280948712cbb01a1df40acca696cd7148190f34cb2fa319793f9c7086b04f8a5be3a02023d4a2928785d933b30c7a160b32310b76a06b255ef4c835996c1cf58a4f7950a8e742049b63d275", "fa7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936871d09367f73210ada4ae17c4e696152b1b26636a23a3c040181dad738cb50193f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ef1076b289256cd19daa60d704e81db3a39e457bb71d9d0e29c4cb2075820e5e1"]}, "failure": {"scriptSig": "", "witness": ["4d0902c4718fa1742f630e1346c8971a97dc28b4cce6fa6cfbae37f39d896e5b06392b510889602d9f3fbe754f3e9d9d1ba4e3f541ad98094691579a8a5d9664d69b1c9c35b2fdabf844c85a1121ef42824f7777bb6b72e47bf0cf97f434d6785dd7e8adb346d0b105209d30cbe127d649011a9ade0103a12da678b54f64b6f0594a3f837c450ffef8f55166ed79348879022fbc2d61b4f2f00095f7a8bfc6a3b283fed52a77d149151c58b6a0b1ab76c118da14bcb10aede9ebdf7fdc6402feb70ac33bb898ac02a3d16497f1296a55da1869548de7a289ee324d21ae208e00cb80f1cffa358190b15800ccbe6806b56530bff303c2990d2cda159b647132c0439bffda5a392b87844d9e911d6a5f83b3ed6fad30e74a263271f07d2c1c6b2691559d7293172b4d43e9162c6b8d8f5868aed99cc7b7c81a78903215779b9fab998bf5675d133b4be726476089f5aa330e4f253db7656b13f58a050cfa5f752f31832abf50c75911b6ede542f22232a351d9416169451df509d7f19ec9225d3fffeb2759eae5ab270110fee0b16f994fdf531f2dec50a73775eadd449b2307f2748d1b9ea07092c437684160b82cb848bcf342067aafc9ca65257dc0ba1e2f7ba302f2aae965b572a53677671866a5aee0dff7ce69e8d4182b9d78007d2c815a29321521020242f6c8f96f2a0d3504a49780db73a422e3fe68b69f76af454f4c0fa3c4bcec9210d88b59dabe75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369137576d67431f087aec678a5b0872b87ad128bcec3b357baf1a434a8a1f59b5284b3c1002850d4c89a68130d64a5a5ee29d0b1bb458f5120fd1f649ff1c37e66ac496a48f5e08c9a0063585476106fe61a3ff4222f4c7aaafd1f65bf01170e2"]}}, diff --git a/txscript/data/taproot-ref/2ecab25cfb72ae137a881589719a53343a030263 b/txscript/data/taproot-ref/2ecab25cfb72ae137a881589719a53343a030263 new file mode 100644 index 0000000000..22b20c5053 --- /dev/null +++ b/txscript/data/taproot-ref/2ecab25cfb72ae137a881589719a53343a030263 @@ -0,0 +1 @@ +{"tx": "956ac78c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd3010000000bede5d6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbd01000000dd0c1e9303c6f18f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79631010000", "prevouts": ["3db3220000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8", "db25700000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["0b28dc1a1ed9c237cc12bd76b0de2c6d3a65d4aa2db7a6dee9d7bb55a8f05853c18259cbf31a19f2a6e9653cd9f674322322eb2f4e78dff407e40bb84c9928", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/2eccff6ea763376046948b3876b0d9b3e8b28c87 b/txscript/data/taproot-ref/2eccff6ea763376046948b3876b0d9b3e8b28c87 new file mode 100644 index 0000000000..b81150e70d --- /dev/null +++ b/txscript/data/taproot-ref/2eccff6ea763376046948b3876b0d9b3e8b28c87 @@ -0,0 +1 @@ +{"tx": "cc6f3def0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a90100000072a16fcbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1d02000000bff28abf0409d36200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ace2040000", "prevouts": ["38281000000000002251203e6b8aa12170bf3e8ad7f10d608d1ed027d7fee17123c5116152c821758451f4", "bc035500000000002251202f329ebb629b1bb09406fd99900762644c979122f44ddf705116f636c54af1f8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "success": {"scriptSig": "", "witness": ["b169c11161be2668a4898276e1674688a27c346bb637a43c4603cd94a1675fbeb0f4e4a049f072db99a8129c20c7ecb362d04a1f7f31ef2c875354c24c669dd801", "4f11cb54cd4363330221a5476e74c99e78c313b7e57ea6a0a1a013458a6017055bf2fb8346e050982ff6bf4e87eee951d27544f6d9bbbd37797efe7145a70c1734571bb22d9dfa6283c74a63267c132bad", "753535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a25163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360000000000000000000000000000000000000000000000000000000000000000c464465aab929372e8a3272aaa968cbe1bc1afb1960d855f2fe679d588a02434856b36bfd7f7855bb64dbf9aa668b0b855833757a9d963e8997fdb5f4e4240cb4447818055f223605d46ae0697f5dd051ef4973d44405ad46cb7216702b7ff39fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff31269ab2f4c1c53405a20186a186d3b8959a3926b34b7f6cc4c21ab859b1ef6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}, "failure": {"scriptSig": "", "witness": ["b169c11161be2668a4898276e1674688a27c346bb637a43c4603cd94a1675fbeb0f4e4a049f072db99a8129c20c7ecb362d04a1f7f31ef2c875354c24c669dd801", "3ff764577193cecedc2471709b069b3d901771a4bbb5117747b819cbd4ae05a8325788723d9289f513cf115e00228431a78d3bd32b6087d0f419353d04936992d9d02a23a2ae49e10d78ec481bb26731", "753535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a25163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360000000000000000000000000000000000000000000000000000000000000000c464465aab929372e8a3272aaa968cbe1bc1afb1960d855f2fe679d588a02434856b36bfd7f7855bb64dbf9aa668b0b855833757a9d963e8997fdb5f4e4240cb4447818055f223605d46ae0697f5dd051ef4973d44405ad46cb7216702b7ff39fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff31269ab2f4c1c53405a20186a186d3b8959a3926b34b7f6cc4c21ab859b1ef6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}}, diff --git a/txscript/data/taproot-ref/2ef7e082ae22ffb03fec01772b442b4b8d19cf06 b/txscript/data/taproot-ref/2ef7e082ae22ffb03fec01772b442b4b8d19cf06 new file mode 100644 index 0000000000..9b1c2870af --- /dev/null +++ b/txscript/data/taproot-ref/2ef7e082ae22ffb03fec01772b442b4b8d19cf06 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709100000000dc1650da8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49c000000002a8e0ff10207f94a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac4c010000", "prevouts": ["a0e70f000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "e1773d000000000022512015f6c01f4cbfbd03849fbcce8a636b49e5c18ed85b3712a10e7757f33687c2ef"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["510c1e0f8d8b217fd756cabc05215322aa202163430f2f8105d26396dee19e42d90269035be717393da60ef10270371fdf81a676ad2565380f0b3ac4743a35e5", "6d0445e6ed41c5c1da464b7f69f42c82e904b2019baf9b4c51e22d2598834b0281e418155c336f14c44c8f3e610bbe1694afd26681dcf4c5ed133bc33b9bdf33ec046859ff8bb26d477103dfc106611656ac4e7934ccb0ef45234d9ee840aade4ecf20774557cdbcb815f8fe171f1aa45cf7f3118ec3ba95860df8e3edc54b6e62af3c455379037a790ad462353c453dc44683bbf866ab7544fd983e306393e04dee9f47fded02dee1385ba9fb748aa071a845afba4227a84f1968a87152456f36acfa0f139e15a069702ee81086", "75005a0442c44132ba5a880442c441326e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b906ec0996a27a0975ca1985c3441f930e18c0e7161e7296b2172ba13341a453ed9bde459cc607f90434bb166d3ec7e209748081df0503bf0c893b2c05cc89025a4dc0c0ac06154f9e7687d9626a71c4113e7b04462405ea5030300b68649b1f0000000000000000000000000000000000000000000000000000000000000000059c97f71763205d37447d77b9481b0229f316e3ea169182bf6c4442799784c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff47cf94f4ef9a81243015778337beed47d770b1752496c8cb43e14c8f5618d03d2bc023c1a5426b30f2d3ff8ee18cc79337bfe63f8c21b48063f56145891f3fca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c375f9cc4863b77509f570dca37c6f1b0d5780650bc90808dfd966172f0aee314f5e7eb28e29b8f9711d97c5f67205dd5fe5bbccf6c4613c0584d22b427a8640aabee78f518d567a56310fd35e88b053b233b8d53d9a84463c19e404bb93219402edceef2e1cfabda82014c15520265730051f3e196742b5d6f980876f86c9e0ae5e6d1fd7a8aed8617495055bd2756aae86b051d9a7e64aac892410fec9828e7797c85ea40021e6370c6b1247ad96c868ecdfa3b3a09bd1641a75386973b59341bdebd50e1f93218ba374debfaa394f619fcf8ae3e41d68756f77be2b559bc94441bba5950973255a390573b21bbe00a5674bb0e3d894bcaefb4c3f152b2726163d788cc5b2733f8152907944d51204b8abdbe76babf05a395a66a40853220ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90c813b07f3f1e589da2b64465f5fb1c84207d13e616b780826015634f93fc1e419707835256302027c307839e60ddd33a9e3793eceb5c69ca5de22c3ec7bf1616277b9d794c4da0026826782b9260bc2c5379ad6ca693f2d617d559d14a26d6999f00734e9389dca8a9e0ac79833afd33dbd044f69b9b2f9756073ca40fc68adb4bde35283173c269b9673926dfd4351a41d94bedfe523aa26cf069308f577bb0c4f4abba38873964205ff1d891dc324d4591b57c4a9c340da8bc3d8c44bf70f0044922f9c552d236346e932fecdb9abc09fcca6459ee447e7305a9424a0b2ba5760cebbc9e519407c295cf85190c31a45326db562081ca53d2fae07679ee6b5eef6b6ff377c7de10ce1ba4352a612be67f4659b90e3742fedec162eb88f44d0e123e8578004adb49aa2263493fdbd7312ffdb6a7fbd1359c2f7d39be43ed28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000004d631c01803798834ea281dc818038ced54754a8b054812e7806a5fb63db7938ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff79b1fadf47789fa69b12fa81337fb4b9dd503dce04e753e29a3d7206030d04525f492a57ccc8ad78d7af544768e6566d73c807bdaada390521b09849d35ea4065b273116f990e14ba6fac0a194be232846a2032257ef8650eba772493728d326ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6ac316cdba4b9d7b340a3e93390a9e51ec7177f56555b1d4dc81944c73c8ecce1ae75ef58286acd8a78947a6fafa96fc79935ac52bcd399d90cbecb897dc7b6f7042d8ac5bd990f5d2df14977d954252a3f4f4425ce1bc99b5d9265d4efbd9d0b8257ed0e3f30076c4b54ba89d76d013d6d5236b4d69415aa5e149fd07f4f00d73350118db15fd4ff62db868637c7de74e18c9aefd9ba6de3c725b3cc59f7697156f40401f7899f325f6dc9468a0d060e00633a197fb96df82f14008184a5d4588bdc717d62e02543ce2019c521db22f153f5b8841108263722c7519285dbbc4cd02a9c11907ffcb18eb5f628354a8c9af9826c0db1fd222186714cae1cc253b875c7b0575481d1a3e533be752b0daf9f6833f7692903e4fc2a5739b84cc02900000000000000000000000000000000000000000000000000000000000000000e01323f29c7b82c367139190b7256078a65437ac9c1e5b9be7c8757a8d44b35842149120a20b2140e28a58f57441ba66e856a33970815631a877f98eabd3eba62c8a64e994be5ad8cc3e9cf8b9d462624da81e70b2f4fd1530d4696cc35acaac703f40116c3b2be49cbe8ade195aa4cc6acceefdc8f2f440ff172be1cd11cb5af24b2ad4e0822adb5846ad68af15b9564ad0aa903f9c68df6b404fffd75b778c8c29a418bc316fd8ec552fed778cdb4e130d22016e0f635fc1e2574b4a968ecda5b3470ee859244ce0038d539bcf90d82d1b7197cea53d7cd98927fe6f8606ad13b28a1ccaaf76512e5c97384d28634a5b8e07fc6fc88fdc219c7c092086e85c00000000000000000000000000000000000000000000000000000000000000004bb364304e2c3099a14595ae3783d99484f261cdfe8ac1c9c9dd8b044bf5af1d52b7ec58a6a31e86ae468579508ef8fafa8494ffb501d58ff7ba5c1a78aca03dcbd9580c456a23201881183c7e6b1555cadf3970d6fff3c1cfc0b0595db6de43e2c17952118e3c3246fe40c3b1763b09f2edeb999caa3d3ece77a6d4f55a212ed5628b648990c536feec6bf6a8f73e0b15722078452bdd040303a20a2c811a70fe48df9f8a53f3566aea507ede96dfd2625a6ec6324867decb474a58b9c3ee75bef0b20a924b0cd13fbb6994ea19b989a9f39e3df3da9d8c872b89c3ae5d361dab4a16d574dc9db1845ed073394ce0cb48b070edfe6dbe86bbb4ddde28d5cc9fe4992cb7cc97f08d79e521194394e42f8abbeedb693f4f361c7db176a82f9afdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9657e34068c80a6680e7119262cf52ba3dc579df242c970b0bd27f0a8a0ffda44d0c46c25e493f8fce00c2f165dfdfd6cf7d0a4c376edb382cd9c314f462c2be026ab7db6da46baab1e5bb55f3fae0a9dd11ee926938172a8ff968bef78ffabd0d8e26e0f044d259b44f24cca1c65b6706f084accd8a9ebcc99640c4f7d08729ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5ea263b7d84a27d6fed4a9d6fe8b2108bfec7a471bf77ab3aee6e1979a7d8feef8ef1e99aa602ab3d345c641a79704c3af9569ae0f70a112968822bcc00b328b296e20f25e5000731149e4732b9fa9925eabf3bebfa1d94ed859a8ab12380abb81d80235fe722b9bcc985edd64c98dcad858552092ba23674447e5001870af92c670689bc281bd20293ff9cc8b810cf4b9c20e94c1271e53591283558093c90bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5a376bb2b88ab92a85b954d3d7d3b304933692d788a3dafeb6c4ecc3c561e1f5cee81e4fdef3be738e703a40bfd998df6e9bc90f5e8940a45aedf471a2e40c34f6d6b80393fd2bdb9ac4ec136c87a91e993dd01d266f1d2bf55075e4786afd4eb57cbebb951f85cf2941f373516ba8a56866cfd4d747642622e6a41612781a81bfa9a3064581607042502d5c27f480e6d9b42e285c2f88a5b0977aab1964f19bbde0c206cb8ecb6ca3cb7bb40d78d37c0768b67bf8776de7d3afadca0b1f407a941185a32b56822e84ef9f50d906dc4ce70c6dd202ed2bfc6b1e5f4d0e932a442f2fbacb2a630fb5a9638cc3fe2d350f3675a96fbd38cef95881f33ca1655a188ac3ac1622a9e48c57a993a505d716d5cf4f1250ede35bd9116bbf6afb568baa557f3f4e91b0c33878ec28338679e25b262ce969651876ca1a2237735e408d47", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["510c1e0f8d8b217fd756cabc05215322aa202163430f2f8105d26396dee19e42d90269035be717393da60ef10270371fdf81a676ad2565380f0b3ac4743a35e5", "7a07b376cf5ef72cc8df6adb062da0eb0c3ab296cca12d495b3ebd443ce82bdd1f1a7a2a4b5fc72ec2bef62e1a636cb1b35f1b8de7d15eb7207cb6b4efbf4610f3f54b151d24d008cad4ee2b3fc2f61b4d20458bd4e08fa1f6c76f3a1e469dfbab887ae1aad4218e171619eedb4fef67a549828c5abfb1da5cb121d9704b12628867ed6578519321f2a883f87ea3440377f8fdfad4036e0c6af352612a29c42de115f6909791caa5e9d6388922a224777fc47ce672e8021a7656ca7d1bbb69a65d6108f794d91c633741e6bec9", "75005a0442c44132ba5a880442c441326e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b906ec0996a27a0975ca1985c3441f930e18c0e7161e7296b2172ba13341a453ed9bde459cc607f90434bb166d3ec7e209748081df0503bf0c893b2c05cc89025a4dc0c0ac06154f9e7687d9626a71c4113e7b04462405ea5030300b68649b1f0000000000000000000000000000000000000000000000000000000000000000059c97f71763205d37447d77b9481b0229f316e3ea169182bf6c4442799784c7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff47cf94f4ef9a81243015778337beed47d770b1752496c8cb43e14c8f5618d03d2bc023c1a5426b30f2d3ff8ee18cc79337bfe63f8c21b48063f56145891f3fca000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c375f9cc4863b77509f570dca37c6f1b0d5780650bc90808dfd966172f0aee314f5e7eb28e29b8f9711d97c5f67205dd5fe5bbccf6c4613c0584d22b427a8640aabee78f518d567a56310fd35e88b053b233b8d53d9a84463c19e404bb93219402edceef2e1cfabda82014c15520265730051f3e196742b5d6f980876f86c9e0ae5e6d1fd7a8aed8617495055bd2756aae86b051d9a7e64aac892410fec9828e7797c85ea40021e6370c6b1247ad96c868ecdfa3b3a09bd1641a75386973b59341bdebd50e1f93218ba374debfaa394f619fcf8ae3e41d68756f77be2b559bc94441bba5950973255a390573b21bbe00a5674bb0e3d894bcaefb4c3f152b2726163d788cc5b2733f8152907944d51204b8abdbe76babf05a395a66a40853220ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff90c813b07f3f1e589da2b64465f5fb1c84207d13e616b780826015634f93fc1e419707835256302027c307839e60ddd33a9e3793eceb5c69ca5de22c3ec7bf1616277b9d794c4da0026826782b9260bc2c5379ad6ca693f2d617d559d14a26d6999f00734e9389dca8a9e0ac79833afd33dbd044f69b9b2f9756073ca40fc68adb4bde35283173c269b9673926dfd4351a41d94bedfe523aa26cf069308f577bb0c4f4abba38873964205ff1d891dc324d4591b57c4a9c340da8bc3d8c44bf70f0044922f9c552d236346e932fecdb9abc09fcca6459ee447e7305a9424a0b2ba5760cebbc9e519407c295cf85190c31a45326db562081ca53d2fae07679ee6b5eef6b6ff377c7de10ce1ba4352a612be67f4659b90e3742fedec162eb88f44d0e123e8578004adb49aa2263493fdbd7312ffdb6a7fbd1359c2f7d39be43ed28000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000004d631c01803798834ea281dc818038ced54754a8b054812e7806a5fb63db7938ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff79b1fadf47789fa69b12fa81337fb4b9dd503dce04e753e29a3d7206030d04525f492a57ccc8ad78d7af544768e6566d73c807bdaada390521b09849d35ea4065b273116f990e14ba6fac0a194be232846a2032257ef8650eba772493728d326ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6ac316cdba4b9d7b340a3e93390a9e51ec7177f56555b1d4dc81944c73c8ecce1ae75ef58286acd8a78947a6fafa96fc79935ac52bcd399d90cbecb897dc7b6f7042d8ac5bd990f5d2df14977d954252a3f4f4425ce1bc99b5d9265d4efbd9d0b8257ed0e3f30076c4b54ba89d76d013d6d5236b4d69415aa5e149fd07f4f00d73350118db15fd4ff62db868637c7de74e18c9aefd9ba6de3c725b3cc59f7697156f40401f7899f325f6dc9468a0d060e00633a197fb96df82f14008184a5d4588bdc717d62e02543ce2019c521db22f153f5b8841108263722c7519285dbbc4cd02a9c11907ffcb18eb5f628354a8c9af9826c0db1fd222186714cae1cc253b875c7b0575481d1a3e533be752b0daf9f6833f7692903e4fc2a5739b84cc02900000000000000000000000000000000000000000000000000000000000000000e01323f29c7b82c367139190b7256078a65437ac9c1e5b9be7c8757a8d44b35842149120a20b2140e28a58f57441ba66e856a33970815631a877f98eabd3eba62c8a64e994be5ad8cc3e9cf8b9d462624da81e70b2f4fd1530d4696cc35acaac703f40116c3b2be49cbe8ade195aa4cc6acceefdc8f2f440ff172be1cd11cb5af24b2ad4e0822adb5846ad68af15b9564ad0aa903f9c68df6b404fffd75b778c8c29a418bc316fd8ec552fed778cdb4e130d22016e0f635fc1e2574b4a968ecda5b3470ee859244ce0038d539bcf90d82d1b7197cea53d7cd98927fe6f8606ad13b28a1ccaaf76512e5c97384d28634a5b8e07fc6fc88fdc219c7c092086e85c00000000000000000000000000000000000000000000000000000000000000004bb364304e2c3099a14595ae3783d99484f261cdfe8ac1c9c9dd8b044bf5af1d52b7ec58a6a31e86ae468579508ef8fafa8494ffb501d58ff7ba5c1a78aca03dcbd9580c456a23201881183c7e6b1555cadf3970d6fff3c1cfc0b0595db6de43e2c17952118e3c3246fe40c3b1763b09f2edeb999caa3d3ece77a6d4f55a212ed5628b648990c536feec6bf6a8f73e0b15722078452bdd040303a20a2c811a70fe48df9f8a53f3566aea507ede96dfd2625a6ec6324867decb474a58b9c3ee75bef0b20a924b0cd13fbb6994ea19b989a9f39e3df3da9d8c872b89c3ae5d361dab4a16d574dc9db1845ed073394ce0cb48b070edfe6dbe86bbb4ddde28d5cc9fe4992cb7cc97f08d79e521194394e42f8abbeedb693f4f361c7db176a82f9afdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9657e34068c80a6680e7119262cf52ba3dc579df242c970b0bd27f0a8a0ffda44d0c46c25e493f8fce00c2f165dfdfd6cf7d0a4c376edb382cd9c314f462c2be026ab7db6da46baab1e5bb55f3fae0a9dd11ee926938172a8ff968bef78ffabd0d8e26e0f044d259b44f24cca1c65b6706f084accd8a9ebcc99640c4f7d08729ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5ea263b7d84a27d6fed4a9d6fe8b2108bfec7a471bf77ab3aee6e1979a7d8feef8ef1e99aa602ab3d345c641a79704c3af9569ae0f70a112968822bcc00b328b296e20f25e5000731149e4732b9fa9925eabf3bebfa1d94ed859a8ab12380abb81d80235fe722b9bcc985edd64c98dcad858552092ba23674447e5001870af92c670689bc281bd20293ff9cc8b810cf4b9c20e94c1271e53591283558093c90bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5a376bb2b88ab92a85b954d3d7d3b304933692d788a3dafeb6c4ecc3c561e1f5cee81e4fdef3be738e703a40bfd998df6e9bc90f5e8940a45aedf471a2e40c34f6d6b80393fd2bdb9ac4ec136c87a91e993dd01d266f1d2bf55075e4786afd4eb57cbebb951f85cf2941f373516ba8a56866cfd4d747642622e6a41612781a81bfa9a3064581607042502d5c27f480e6d9b42e285c2f88a5b0977aab1964f19bbde0c206cb8ecb6ca3cb7bb40d78d37c0768b67bf8776de7d3afadca0b1f407a941185a32b56822e84ef9f50d906dc4ce70c6dd202ed2bfc6b1e5f4d0e932a442f2fbacb2a630fb5a9638cc3fe2d350f3675a96fbd38cef95881f33ca1655a188ac3ac1622a9e48c57a993a505d716d5cf4f1250ede35bd9116bbf6afb568baa557f3f4e91b0c33878ec28338679e25b262ce969651876ca1a2237735e408d47", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/2f1b30aed18276568d11bfeb997aac3246d57017 b/txscript/data/taproot-ref/2f1b30aed18276568d11bfeb997aac3246d57017 new file mode 100644 index 0000000000..805e36395b --- /dev/null +++ b/txscript/data/taproot-ref/2f1b30aed18276568d11bfeb997aac3246d57017 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41102000000869367a3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cef010000005d951084021acb7a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2b040000", "prevouts": ["86fc330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8835490000000000225120f42b54ceee5422b98931ba4e4259b1fe0b973d9efeacc7f6f710ee118b027bcc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_5d", "final": true, "success": {"scriptSig": "", "witness": ["ef072dc73a2a7c85a106da40cf4350988ada5473f81d7603594996251a4416008427c03b27db4546a392e75922a74ff451367c038407efd2a1783038d4cb36db82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f2f50a5f3eb4ce4a02b45f364fd2b28078d73058b45b484461b8197429502f51979e7a9bcf9871a1ab468ce8e6583e66729b4b4414bb01229a845f3fbcab6a965d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/2f63727a65eb7f7437ab5c39d3f16671518719e6 b/txscript/data/taproot-ref/2f63727a65eb7f7437ab5c39d3f16671518719e6 new file mode 100644 index 0000000000..8bdc5b930d --- /dev/null +++ b/txscript/data/taproot-ref/2f63727a65eb7f7437ab5c39d3f16671518719e6 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b12020000006f9651d88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42401000000bdfd4f8d034fab5c00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ae07c92f", "prevouts": ["8131230000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d", "82de3b000000000017a914f7f3eae48087a4952a984cf9c1f2f12f8785754687"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2253202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["b076743f1b381298fdeedecca24325f7eaa6406b4cc4a9bfb03a0e98be4f2a0fc74c1ea328c89447c37cad026f943ca4e340bb957d3da66003882909baa9a2a3", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/2f6a3e29b8be29ea5949fb1b5a71679b5cadc8d8 b/txscript/data/taproot-ref/2f6a3e29b8be29ea5949fb1b5a71679b5cadc8d8 new file mode 100644 index 0000000000..e74fc756e9 --- /dev/null +++ b/txscript/data/taproot-ref/2f6a3e29b8be29ea5949fb1b5a71679b5cadc8d8 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2100000000d30a43ec0156331c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75c010000", "prevouts": ["bc6f2600000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["cf", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365e0e9a175fda05a064c52eebe8eea391232a608d343baa66a1ca563d1b6babca6a7a52674f359a7dbed67a49e09732132053a9cde77eaa564fdce3cafe7738b9f4a62e14d7fc4acbfb0196ec29a60565ac2b3043dda4cedec8cb1ff291b90d41"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ba852db044cc7b3c6c227af3aa09dc9e9bae5367030e3f2be29afb15f97933d48121d7901a27ea565e1cb6f91818c43a3dc8f46dc56db80c8bd3776430739107a653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}}, diff --git a/txscript/data/taproot-ref/2f718ebe5d9460ba98f7815e59bfffe1cd1f3bc6 b/txscript/data/taproot-ref/2f718ebe5d9460ba98f7815e59bfffe1cd1f3bc6 new file mode 100644 index 0000000000..feae496f4d --- /dev/null +++ b/txscript/data/taproot-ref/2f718ebe5d9460ba98f7815e59bfffe1cd1f3bc6 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4baa01000000f77c2d26bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0c010000004f4f1f22031457a20000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f870d020000", "prevouts": ["3c312800000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "f4397c000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100feac6a621889f11528fe75f4f1ed3bddc4a3405cafd8e83304097686bb18065a02200f488a566cdf0c26008250132586eb44338afedd92e69b3bed54f457082215e783", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["3045022100b64aa1eab2e13c30e201a02745d52123ef5e8190d2fa4aab4cd2164cbbd39b3a02200e621b908bedf7c40b1d3b4dacfcf51a36685bcb35b59a13dd6babca9985bad083", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/2f92c5daf5b1fc8c65563916bd77ad58dc8ffdab b/txscript/data/taproot-ref/2f92c5daf5b1fc8c65563916bd77ad58dc8ffdab new file mode 100644 index 0000000000..60379ef0fb --- /dev/null +++ b/txscript/data/taproot-ref/2f92c5daf5b1fc8c65563916bd77ad58dc8ffdab @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cea00000000937427d7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5000000000476245d802ecc273000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689870d97cc2d", "prevouts": ["dbfa5400000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "704f21000000000021601f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["b70ef45802c64d612d4f6b57535e50f9dace6e6750abf4373a4664a19d391d8100d29199118100e3759d96e740f519cfa6949b6b04e1bcc8910c672cb0c9dae9", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/2fc6756b64916b520df4a5d7eed9bc7c1ee85753 b/txscript/data/taproot-ref/2fc6756b64916b520df4a5d7eed9bc7c1ee85753 new file mode 100644 index 0000000000..5bca4401bd --- /dev/null +++ b/txscript/data/taproot-ref/2fc6756b64916b520df4a5d7eed9bc7c1ee85753 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d00100000061bcd71c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46200000000492c8d5abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfde0000000026f8a34302b303e60000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87ab000000", "prevouts": ["6f8234000000000021551f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "b983310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c2d5810000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "a37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365aa5ec3a6d8c57772d2eb4e1b20d5e63ae42b9b99b4ff5e41cdc072aa2de00e7fd3695492b964dfcc45d3a474d456ab4db8430bda5885b2eccf08499e11263dad2054b94cb6efba565738f5dbf6ee5a67458962b65d77e1cf5e0d2c1c00b2210"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e2798fbbca1809bcbebf31f88b6105e51fb6f911c134cbc99a44881a528cc9462f8f33b00019c5a92b78a4d0765b6724114f5676deb8014962e3b41b4c6baea3fd3695492b964dfcc45d3a474d456ab4db8430bda5885b2eccf08499e11263dad2054b94cb6efba565738f5dbf6ee5a67458962b65d77e1cf5e0d2c1c00b2210"]}}, diff --git a/txscript/data/taproot-ref/2fe9ee314e024619b228c81cae27f4bd50141a36 b/txscript/data/taproot-ref/2fe9ee314e024619b228c81cae27f4bd50141a36 new file mode 100644 index 0000000000..65bd8737d1 --- /dev/null +++ b/txscript/data/taproot-ref/2fe9ee314e024619b228c81cae27f4bd50141a36 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a400000000bf14df5cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c000000002070b123bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd800000000fbff2f2002a8abd800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac05ebd32a", "prevouts": ["79d30e00000000002253202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "5ed7480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "853c8300000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "", "witness": ["3045022100ca4097ba1ea29a4ee74a221595b6449bedb0d92abba7f8b35c74513cf44e1c2a02204f902eff652022536de3e104a7dc21c344778ad6467186ea9eefb567c7c7e89c79", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["3045022100fda831829ec294c3db692d9ced24cf52132b6b02cffd3ce55a28a4e4b80cf34802207626f16e69deb1ad1817bb0ff356ba239b98c4b2d09fc099556a48e95bceae8579", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/30060e7ffc388552b8bae73eb28705b637f7685a b/txscript/data/taproot-ref/30060e7ffc388552b8bae73eb28705b637f7685a new file mode 100644 index 0000000000..b30890200c --- /dev/null +++ b/txscript/data/taproot-ref/30060e7ffc388552b8bae73eb28705b637f7685a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4f00000000aace61d9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4101000000718e46cd01acf570000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e4000000", "prevouts": ["a9c1470000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6", "1a5c710000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090201db07837861b034233f77b3111e4d0454df87e2a2ff67ed85311b71b4f71ea984ee7706783d1d8d901af96336562e8d9b681366f75181d5b5bf5c203b439bfb74691dcd2a3d862aef8ed868371cb201121c920928376a9c354e2164985dad9849282ad32fde8e834e8c0c85492fe0deb0e7f2169ec2f85c6d1bf5cdb80a4b58840f28885f5c76e6f722a85d7140cbdaa3e1bc80d8e92b5143fbce25d74f701388c01a3c150e337cec29f3a5da355215983936b2fdd1455c0a1386d6986d1d7d18d693b6e11da7b611b0ab4b29da5754091eb40f7ff0ee22228eea77a94b059e16e9b8bf1a8eed0acadc92f96e2e1dfe4e7d03b67dd0395550a02a74dfa2d0ad8ea3a1cce721cb512bc800cd4b3faae00ed5d644fc9a5f24194461db2726e8dbae3b8a4841b4b57177c0d020e8d80d5f7037a7e8131d829c473db5fd9661dd1b324f4586f385d8e5436a0eea158b3ec52b488b0ef6124eca6362a614ad4aabe08205e40023becb41201eabaf64a22a43f5852d49acab49037919da7cb246ad532bce07c2f5d9cb3db3fca631f5a47a1bb3deb6f20c979d8fd09d90fe1224b44cbfbef283968d9741dfee1e94abf7a91269f12153db64d4a52f9fc78f181ed31d472f3c4a5b066eb730503906bf339dd1b1a8ff8a0c9422d622ac14655cdd5e838696a3437b56aa1b4c7ecc259f8ed6b7bd7ffd6e7e1bda92f8d7a9bec94c12e25929a0f4e083687d3875", "4a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a5f53a99550b57470dcc4d4233d312935e71f0fec8998bf9150bf0a5d1b49a4615c38a9f4b3c26d8dcb1a4c3fc9e68202e120a4fd7f06c3d33071ff6316723f12efaba1d06903f148d2465ca4e4c6639d336576fa6993c6ca48823372648a44"]}, "failure": {"scriptSig": "", "witness": ["4d09020117eafd078d9fdeaf63cb3c5977ab805a9f300e7ccb7d9e91108c18403445bd9b2108817b65d5a42e26389c75ad57668db05f829fc02daf8ec0d29b43a1de7d5036efb52c810bfa4e4bdc426e4e6c588e21ede5fde6f02bbe46f4843ecc5e61278695182541d856245fa73740b4a9766cd7f1f4dd5a9f68de74961e162c9a7d22366abfeda5fefa1e12fcbb6df4d02d38ba18fe8f065e2c87c5ff8662d12fe973366a03ebffdc472935cbc4c3995b0ad24b4ebe994a165aa62051e01d9823ac27c5e9b15f8f84e42fb45cd8b410dac23725a24a1d098537f081f4b105505850f8a0682dde64bbb4f2929814a1a4dbaad8e421d073a6a993a28cf27ef01f9b6c4bc705f5202cb6903d70c49f41b920178a4860cd1f9ffa7c5795de2648d218ebaf2adf2bc9d61d3a9e50345521bbf48d4fd735498cb06b7aaf2f9ea8dd410187653cef74f53582679eeb953c5e4df4c8dd7327b9ea1a0227bcba1532c3ae35a31b86a93017ba63200e30bf7b1969ed2b1e23759ae8ae4661d748137e5ffd796b0f0121ff9d8e106f6d5329ae8596596a21bda2d0b2a231096c26bd9648dd2c4694f514ec13cbbc7a4577726ca5d281301185a94aab801ac722f1df73cc8d9153c1866114b94e31e919d23ab8c496700ad76587a92d0b4da562849b7a6e5eca4ea48fbebd061fec5f4745b27baa51a76187bf7863a0b7887b713c57ad51403b81881582a36727b6f85975", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93649ae925491555535d3452d6a0c9675b1c4c853a5ac96d8d917c8f686b1ab70deb1956d2c402f72d86d9128969f4c9ed8db93dfb826b4075483e7d557b0e234b512efaba1d06903f148d2465ca4e4c6639d336576fa6993c6ca48823372648a44"]}}, diff --git a/txscript/data/taproot-ref/3012845a3aa7dc757cc4778e5334769c9239ab60 b/txscript/data/taproot-ref/3012845a3aa7dc757cc4778e5334769c9239ab60 new file mode 100644 index 0000000000..0beaa68704 --- /dev/null +++ b/txscript/data/taproot-ref/3012845a3aa7dc757cc4778e5334769c9239ab60 @@ -0,0 +1 @@ +{"tx": "50f7ec8e0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706701000000a45b1eefbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb501000000d4e342ea0211518b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7bfe0a757", "prevouts": ["10c212000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "41977b0000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063ce68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a6a38b8d39a057b5d03cc3fb1c5a8fc6fbbf2afa69d215fd7d0ba06cabd825c0959bd9b34bb85690c892593228383c48f2c7a3855b4947a3dd1708d13c567655d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368cdeb0de8daf44e986d19e114a7b8ed70d46e74ed21bd6c6e785c2a6747f82dd5067193501824fc7e1f7f904c1e32fba78339d7701e72316b16feebc15a414abab692e734634bfaf43d653c1e6f6d8e8d14797d8e4fda7a04cf5eec270202b46d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}}, diff --git a/txscript/data/taproot-ref/3015e994a3e16567397bea00a92ff97eb53971e6 b/txscript/data/taproot-ref/3015e994a3e16567397bea00a92ff97eb53971e6 new file mode 100644 index 0000000000..b1eae3b0e6 --- /dev/null +++ b/txscript/data/taproot-ref/3015e994a3e16567397bea00a92ff97eb53971e6 @@ -0,0 +1 @@ +{"tx": "dac681e501dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c250100000096d7d29903b4354e000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4766ee20", "prevouts": ["555d500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_6b", "final": true, "success": {"scriptSig": "", "witness": ["60e41b643c1c904eb42c536554f629a5a90730108f3c3f64603aa691fe7e5970c00935965378e91a47e2c720dc2d3595da65f1f42a9a0462503c0ff9dcdb25d702"]}, "failure": {"scriptSig": "", "witness": ["49a0de936e7821d3f58fe5e59c6ce0da34ed62280bcddafe5a9927c420bebd82d83dcb74aec03bac7391e2554da15a352cc0c2cf9ee6d51d1cb07c41844493d36b"]}}, diff --git a/txscript/data/taproot-ref/3031aef9ccb0cb566246e72e7f976a7cf00b9898 b/txscript/data/taproot-ref/3031aef9ccb0cb566246e72e7f976a7cf00b9898 new file mode 100644 index 0000000000..7d73329764 --- /dev/null +++ b/txscript/data/taproot-ref/3031aef9ccb0cb566246e72e7f976a7cf00b9898 @@ -0,0 +1 @@ +{"tx": "dfd2e9c702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3201000000e75193c860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c6000000003e731e9f04828f2e00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7eae9964a", "prevouts": ["f48f21000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "b6d40f0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "5e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bc10050415f3a7eb0f871e59844dac39a9eb46351c529a41184ff4a5bf872c5d7bec169038f6fbc2f311373c62d75738dee89ed934d1dccaea4579b1c053aa90a9249c0485c0b349be2068ea39eda6d50f7b6c474a6d5eb714296c91a9f24b9"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369fb909a8cefef27cda8d32206876bbd59a602541b1ac02e9aca8fefecae353d965cca6be1d3cc9714f9205dc72257def63c8e50f66dbe399f94c25bd2c6a85f30c8cbc16505271ed8ce1a03d67d2c4a35529bcf4a25ace24696315022c27c9cf"]}}, diff --git a/txscript/data/taproot-ref/305b7d52e8b2e5b62f366d1fe9aca1b4c31a2e51 b/txscript/data/taproot-ref/305b7d52e8b2e5b62f366d1fe9aca1b4c31a2e51 new file mode 100644 index 0000000000..f85b1bdac5 --- /dev/null +++ b/txscript/data/taproot-ref/305b7d52e8b2e5b62f366d1fe9aca1b4c31a2e51 @@ -0,0 +1 @@ +{"tx": "b4abf2a802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4baf00000000b44aa8a6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7a00000000201254d604ccd0a80000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a64c020000", "prevouts": ["87bb2600000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "998a840000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090205b8b6acf2a1736dbbaad48ee9d1f6f76f614fe334d2d4879607993100e97cebf90f59892e8df71e7d72827181b3718731fe8058f38f7664fabc855eb51aba6033d063f287d5e4c5795ac8bec57a4beecca7a88847dc99b5c7eaefa8d86be802e14836dd6187494d9d13a61270da2c2383c6a220b70dcce96f0b1ba7459e000fdbba556000c7959d9e25920717d1c39ac30a566db08dcf50a07bc4de8e0524f1a2a6b70fd03e10cb93afd59ee586f5e6efaf5337ba0ca58312824fd43a122ba9070fe087d868f453c6eb0a7ed7c4e5577fdef88af88fa979e473b449d92ae10268368688e754135412dc955f350514dfac3bcdc1126aa2363d8cae0e47f64bee1fa0712f8690d4728c733c85f5ecab2cf9a24eaa28c419cbc1765f948b59e92e7ab0bef423c49e113c534f8da1fb40544142f0ec513a15df5eed3378adfd6d490daecde5a624de508575880aea484ef4b5d8285a1f7ae764d201a4774acb96b96725e9859bfc095d89bafaab1189529362c2d7dd8059773d475f3e716733522911c7cb1f2fdb0cebbeb3d092b1aace46c3f0e98c4477faa239288141db3403ee4773583f0b87f64fc948345ff73c7a471ef5875bf5fe56f172d8c24beb3e29fd0d141256023bcf7cfa2e9ec870b56018ba2f8abf16c603c42491aa870dc2b7ffc3b58af172b7a9ae7e9d822dc05e310b666926b4b35ea7e2fc5d5fae2323fdf10ff759e5beaef0cade75", "487d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8fbef2b09bb3fcc5f7a097fe825ffcbc345a4a7607f02adcd9241733378f6a21f7da89940c9c2be3d3cb1ea9fc374137a74dc3bafe909c68993f298761996d666"]}, "failure": {"scriptSig": "", "witness": ["4d0902e08d56acc221f3c5abd5a672ced6a3b82aca76c67152e71330aa040b6999e65de00b8354a22a07efc36182e2584ce94cad2b7ccae8baf249ae1513e5462eca0736e74e77a052e819f3d5af896d9d50a1fd44ed94bd223b9049c0226b80887cd71331be18a236d77a14e55e5a98ac2467dd4f7f7b7ed938b47193b21fad48c479dd40447a3d304afa0e5c628a2e1b7823a0b4ff442c663583edeb1936652db22a04b18e29ee5bc2cc55f47485a530a7c0a6588c4d0e6ef380f39832a7c1a8525b322784ccf11452ae91acc5d2ac27c4ac6e308a1b31139cc3cf64546aeb61b6fcb1e4b3907d0fef12dc7370f33523ea4392a3731b5861d8efbbd7b4015d3fbd06bb5ee79df526d0c0e9de9dc93183fc6f7971abe2005ecbe6c69e3640920c6a7f56921335ebd25f8bed69d285611b4c818ef3ff48645dbbe1206040e556ec60813a4bca11431e39e00cd6df4a9db07bbd5d949aa4cacbdbf4f8aa5b87a5674882efa72c5c7275c488425b9223900fecf5898853c227fa7842fa929c9190bcf71a4da602eef272702ff34ab9ba2b11d48c2f31241718f2a55a8ca4cb3b862f3019d0972d31c4b501ba29bffb7de4fa5674ba56abad00192d6371d727c1396a5a352a87f4facc462f7ef79705e2c97aceb3f2c04726793897d4a531de7cc40b8545ed67bb1e63a4cb79da4a5f24a891a3afdcb4d508d4907d795210c6f881cf463c00f10e2ea87aed248275", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365c9fca99784b9d41e6f6eaa8a610ad45ac066af872a8b7bf7b421736c80a55bc4d178bbecd44a62a975bb89c44ce69c4bec935ce63261f4a792ecb896593fa3c40210bd7db211b82a407c19f9567cde5a01f8f2a3c3dc032c7ac21169de78447"]}}, diff --git a/txscript/data/taproot-ref/30733f314d77a04fcfb55b009f72a5a1a94cc1e5 b/txscript/data/taproot-ref/30733f314d77a04fcfb55b009f72a5a1a94cc1e5 new file mode 100644 index 0000000000..bd15176363 --- /dev/null +++ b/txscript/data/taproot-ref/30733f314d77a04fcfb55b009f72a5a1a94cc1e5 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c63000000002fad8be6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9201000000a4949ed304f066a70000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcffb82f2d", "prevouts": ["8fae510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5ed3570000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_63", "final": true, "success": {"scriptSig": "", "witness": ["37a9f9ce33791d68a4f828b52443efbb4a63f8857a585ab57799e1527fdcd431fe22aa36e7b3e099442517ae27200a83146a9ac43d41e3ec1ae4504404a3e1bc82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3a76cf09e0dd45dab9531549c859b67bd303eff4b7dd8f85ccf423d229bc1fa7efa2893ff8279b61d97e4e52182b1514d693e262cb63d90faa6e0aa2ae0266bf63", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/312a2eaf5a3bbccf69b97e292f665b53846038f5 b/txscript/data/taproot-ref/312a2eaf5a3bbccf69b97e292f665b53846038f5 new file mode 100644 index 0000000000..25701c4baa --- /dev/null +++ b/txscript/data/taproot-ref/312a2eaf5a3bbccf69b97e292f665b53846038f5 @@ -0,0 +1 @@ +{"tx": "f558c58603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b980000000056c18ef4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2401000000aee696e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42a01000000869aac980117bc3d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdb518220", "prevouts": ["e140210000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "49c88100000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "8e2839000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09029e9fbc43986dfc06ccc27dfc5fea2ca7339b8830f043004f6b89771c0e3fb83d714645fe4d0076702e2b41f08e672c2bf2d40ffe582975e9ed403094effb4aa62e9f4d8cfdf881ec3f2f25df5231caae77cc45f9aabf37281f5c758d8a79245c576453ea78b3a33116a93e1ebc767d0eaa013836d990a609315eacbf6fbe2738aa274af49863273ab305af6a7caf0d58ff24f5074cdc9a0e68dca18706e888c9a10cee3c859bf6767e782eded343112fdb0e4dc6bfe618197a7f0f8bb5658a33abfa6e130432ae67a77cf91f67c9e22538ff726837d818c202fdf8f2fa7cd17e6b80a5595595aac6ca3dda8875128b259deb1f22831f2238091755bbc3246622e6c4d18312e6aae1efd43e1b26f5659f8f174278ea5ce142043fd9b96003e97784a75891a525a4727ef854d59e6cbc00f2d624b7bdc544562f0e42ebc21ebe19725cedbf9e5034cf63fcebd1297e848c7a225695595fe4234961c5936bb65075e7d5a0db3b9337f6d2992ae5b9edc06420d7ca69f68ee7f424745e3a5b95b00ed46c572a9bf0769ed97aa7ec98af2e16bda3e766755dc257a1af915dfcc21402e376d4ecd669c9410f38835a6a3db4ee71aa883deac397bff34c1d09eec4fc1521ed20cf7f7edcdda358d8af15dde8b084ea6ca3f00dfa98f0528549046df091c79d408718a3ccff84d82ca47adfc3a370307c81fde6241ae6a3b314d4cf2c1d9c74d603426c2154a875", "b67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694c0b340583cf13ebe9076e32fe1c03226eaf53cf87bb1d5bdb546787d6812ebca37f8027c2c0b0d436eabba5be8b19fe8a47d5b17abeebfa31c0139f25f704791244d1d955381053a5c36db6928ef13bb9242569ee84b58d7018329936aac78"]}, "failure": {"scriptSig": "", "witness": ["4d09025bf364e9f43484dd5a74e4ee67d8772984549b328dfd37f43cc117b8aa5e8a8a26e43d8b717e7f8ab5985e199c23f11fa41a2ee586133c16a39708d7d863a58a8df54313fc601dff1ef9f32acb35bcec5ba7868cf873e2a9bba9bc970ba3eb4bb571935990924e4040da54c51ea142be5722214f596bd1b51b98d586af75d0dec46d22bbb19272c5fd2f11204d8204a46690eb76019def8b28f08930e6fc6bce5d28af6a74b9492283f3f7958dc5facdd9fd227106ca3dc5cbbdb10083d2fe279815fa066c71498c9d67f4b83ad5069fe1fa818d7a6efd08ea872a95f99a445df7bcb582f0ae58cecc03ff3ebb0e02af229913603b3a451fd7223607fa7bd1fbc52fb75deb9272e474fa8a65d793f9001dfef5e5f0a889051cd357c2d3a1e99f33a4bad065ec3f64fe394d184d816d7c29d9474c78dd47850bcd6327d11acebcb610b2f0d40ffda2b796b6f7fead3070a46680b682e5f7dd03b6dd877a780a30f6be66a379e9e2c233f69d7db4ae3882de3299e2348e4ffb1fe2d88d36d056c096ab5ae85dcbc6651ed3aecd739e0fef5f321592fdabe1c3382da805036909a27f0d721c579bc2bfeefb4e8ea75179be1ef630202972fa11bef077b0712c013d6759354c062748cd35b559cd427759f93d5314c186c0c6a38a112c1b10b53503d4be85272eda3884d96284208d7e96db5f9e1e32470435db03ea42ca031eb545cab114bc871e38092075", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb561c4b1d6688f5bfb11d0986684152459867eeebbedce173d7984e1f333e22781c07d8975c94d77b7f566737b45f640ec74b2b98cad100fb0cff19b6594ed691244d1d955381053a5c36db6928ef13bb9242569ee84b58d7018329936aac78"]}}, diff --git a/txscript/data/taproot-ref/3177278ccbc91f49567f80c0b575882edaf4556b b/txscript/data/taproot-ref/3177278ccbc91f49567f80c0b575882edaf4556b new file mode 100644 index 0000000000..4fff2660b4 --- /dev/null +++ b/txscript/data/taproot-ref/3177278ccbc91f49567f80c0b575882edaf4556b @@ -0,0 +1 @@ +{"tx": "5e99ba8803bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7500000000df8a91a8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3f000000005c7bc9e9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0d02000000a28c08c40314b9e600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75c6ed459", "prevouts": ["48417900000000002258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "685e2300000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "f0a04c0000000000235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["18d74be7b73f4c5ca81e26253f5de705a40a19125516b355c897d2050126cfa62a6728c742eeb80723bd09ddfcc22739bb29d0052bbf4cfd8e4118fed4398e29", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/31a7241822ef819833b51d86a78d83bbb4d58136 b/txscript/data/taproot-ref/31a7241822ef819833b51d86a78d83bbb4d58136 new file mode 100644 index 0000000000..9e62c70afc --- /dev/null +++ b/txscript/data/taproot-ref/31a7241822ef819833b51d86a78d83bbb4d58136 @@ -0,0 +1 @@ +{"tx": "0f23d10e02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0602000000ff1278f3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2d010000005422bc8b0191e85c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4878f7b482f", "prevouts": ["ab6a490000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "388f1e000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "a77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936efbd2f9b1cd4fbec58efe0420f12191abaa855d6729399166c4c2475d9d665e59619a83ee22e28c5507e71eab09869c4e19cd00c1b769e62c37a8de310ec2a6696773453f0744a158be0509abdec64f05b1db7ccf03251d8359952271b442a24"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93625bfac2bef47395f58f992c21945b8909d7652ef3a3903d04cb677a2ce7470d8389e677eaf5eeea89a70f01c0aa3bc14cf3320f4b6dd8cc61f33138af3398b5b11a008161139ac7a92b00665158d25501a881aeebdfdbf881ee45b85e0726c11"]}}, diff --git a/txscript/data/taproot-ref/31b4933ee39bc4133c6a36b1e309775c87a96c23 b/txscript/data/taproot-ref/31b4933ee39bc4133c6a36b1e309775c87a96c23 new file mode 100644 index 0000000000..d501475d3e --- /dev/null +++ b/txscript/data/taproot-ref/31b4933ee39bc4133c6a36b1e309775c87a96c23 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707800000000d472c2ff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47e00000000b22608f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbb000000007c5fb0ca0254669200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8e01af3b", "prevouts": ["ab600e0000000000225120a2c28b736583e5896e4a53bfde129100bff930ada42454ee2f7bef5a60a371d8", "deef37000000000017a914c7d65cb5025eac8b5bf295baac9287994ab34b9b87", "28374e00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "225b202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["c16d2e3e06340d2f877b0eab8731a0be75cd78a304909212b58f76d0de579180d29fc64d6e108c74bbbb3f670903bc091152728424957cc505fd618c0e673814"]}}, diff --git a/txscript/data/taproot-ref/31bf684d25c7125e85ce524a607eb2a52cb7bdca b/txscript/data/taproot-ref/31bf684d25c7125e85ce524a607eb2a52cb7bdca new file mode 100644 index 0000000000..9cc0e3fd89 --- /dev/null +++ b/txscript/data/taproot-ref/31bf684d25c7125e85ce524a607eb2a52cb7bdca @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c9010000000264f714bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf53000000001434957104c9c89e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79635000000", "prevouts": ["8db2310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3ae16f000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "027d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936420b598f8858794c178995f11a8e34655a29ef30c99d23407a26d0a64bc31f191a39935f0afddba064f6b0bc8589127966a984604296ac06f9873b8ee7d7aea369828280661f54bb25ef200c9d39138c753346ae1cc558703fbc48b26980763768cf2d3d0be95621d7446294d89d9a2894510d2dfb4e1a33e7316a17e39cfc99"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936228879bafec8e1069b4e024c9320127e455344299f19b4d97495a4e33db3a44844c267ebca37631eb8e8b6e08a101702978fd7f172e21a8d6d6b527626f4402168cf2d3d0be95621d7446294d89d9a2894510d2dfb4e1a33e7316a17e39cfc99"]}}, diff --git a/txscript/data/taproot-ref/31c15818563bf9247178dcf6aa28b033af2bb447 b/txscript/data/taproot-ref/31c15818563bf9247178dcf6aa28b033af2bb447 new file mode 100644 index 0000000000..c2daef5041 --- /dev/null +++ b/txscript/data/taproot-ref/31c15818563bf9247178dcf6aa28b033af2bb447 @@ -0,0 +1 @@ +{"tx": "0d8311b402bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd701000000fe04979960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700a00000000da955a9d01905b3a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a636020000", "prevouts": ["df00720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "73d312000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "3b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a1daf2fbdc5eba8a219f1f8635fe45cf0e30925345452464a53096773d109ba7ef84fce916674b46359d0327d7b56c183d26d6053da1b16053a1f90da8a1d4e"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369517bd2ec6e222f593b12487f5a7b1eaee696b6e0fbcce419bd0b390383a361246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fafc7fa9328de6285e10958c6b3d6f5d3c073b4c582e31cb42904dcf82d4bed78a29f15cefa9911251712bcf83078e1db490f7db40c14a26e0e577f39f7cfaf11f"]}}, diff --git a/txscript/data/taproot-ref/31c6f3973f706c7761a06718934fbee33a007e9d b/txscript/data/taproot-ref/31c6f3973f706c7761a06718934fbee33a007e9d new file mode 100644 index 0000000000..b23f74107f --- /dev/null +++ b/txscript/data/taproot-ref/31c6f3973f706c7761a06718934fbee33a007e9d @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1502000000692e59dbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdf00000000d423c2f302fde5ca0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac6ee00e50", "prevouts": ["0990850000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "90e7470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_45", "final": true, "success": {"scriptSig": "", "witness": ["b34ea06aceecce83e03cb040193d99209bd9d53d028494754984fdbad06f23e930f5e7dc05fa644db9d6062a4abed83386d095739cb342c46619ef7019bab09a03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["fb3fc49762e161cba1c9a95533e76d002d6bfea2c76f997b653f0c2f111f78d3859425789d2f093914bf43aac3d34f3cfbd3161d2895dad5f509ade10153007445", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/31c88595514658ef1b8ff73277244b8f007c505d b/txscript/data/taproot-ref/31c88595514658ef1b8ff73277244b8f007c505d new file mode 100644 index 0000000000..8b9b85c412 --- /dev/null +++ b/txscript/data/taproot-ref/31c88595514658ef1b8ff73277244b8f007c505d @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f601000000901c05e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9900000000916fb3af02ceaf58000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a622010000", "prevouts": ["07680e00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "90344d0000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/invalid_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["f1ee54e6c0c32e3731dab52392c8fe3fb26537d5c72a5a909de0f1aaa6def308dd5ee83fd14aded0294cda3bad5f00bca2aea2f5acf38cf8cc73db14726666bb", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/31d4c861644fc9edae1f7e2e4f31aa06c7517889 b/txscript/data/taproot-ref/31d4c861644fc9edae1f7e2e4f31aa06c7517889 new file mode 100644 index 0000000000..e17f2aa5cf --- /dev/null +++ b/txscript/data/taproot-ref/31d4c861644fc9edae1f7e2e4f31aa06c7517889 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2e000000004f19aad78bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a9000000008152fdb1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8b01000000bc4390e0033a13a400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d3c8e225", "prevouts": ["20dc4d0000000000225120ec87a05d11c16a148e05f58a688dc5bed4b2941085b66901aaa75337acfb52a4", "f0dc3300000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "0f0a25000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f54c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bdcbe75f074483e48d717af2cfa8ab1bbef1c35fc84f016c108dd10256d535ae10b3b87e8b9d8544644738d4851bae032b2bf37d3a4aa6541b936ff18c715610c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec34041dd00c04bb207a9f54805a750c9f5dad18a896c6f9e3a7e4fce73f8863b3a94e361b142bccbbefeea6ac26126d4f4fbb610699e3a27d96f99d1b67de22f2f"]}}, diff --git a/txscript/data/taproot-ref/31f076334b0a05c6d42d3ee64880af4288a1a071 b/txscript/data/taproot-ref/31f076334b0a05c6d42d3ee64880af4288a1a071 new file mode 100644 index 0000000000..99e139be80 --- /dev/null +++ b/txscript/data/taproot-ref/31f076334b0a05c6d42d3ee64880af4288a1a071 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf60010000006c56fddcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf700000000cc52dde28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41200000000d0282f1d047d49ca00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d8000000", "prevouts": ["a7a86f000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "7af02500000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "2e6e3600000000002251200fe4658e0dbf66b6be10f530376fb0e6dfa185e9d7f38ef5d5af1eba17e45594"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902be1fdb15007c7b079b1fcba37239218d2a0c30bac088eb1bc95a350527d03c30e825e686599f11585d24459989a12b2deb3942948cb4b8f9cda5b0a791d3ed03b4bdfcfd361b094f8caec2142892666ce4b2b488cc016d1fe8c1a607d1af467bafe0dcd94063da1e485b4ce943fa3daab9ffa7ed4765ea8840071d5bd38fca49594ad9b532a51ab448ebb3f19688136f5a74b9eb5f59e2ea931d4a0583f350c50c626903e11087bb74f76859a15cf934c6c46f1fd04a5269bbac98bc751549c470b8f72621925e01ef3f3220b2e7a1a2480279f7b56ab2e0cce2ec534b20cad50ddd20ac47f4b91a5f727622c3ca4d4406214b0c4239f05a9d851a31b5d80e0a8f37b083c19c9ca9f83eee836ccb8592d08ba17d6c822d29e760506b91e769bd74ae989ff28aee9723e60e2c6e9ce1f7ff8654293fc51d7412b103a9ca611de8473caae5a362a95d2047752a598d6b45a3c9717a5693a49d8d752c993a6f755428cc77636e306b2553db19379595174e12ea6c936c8016b3861ba6fd4ea933239b733720e249a6053a9ea4d6852e5561729da7538d4a937673716f95fc2be78e5874aff68e9afba308f6423c5aae7c8e2b45661e26fa14d36cf918ef1379c2cb61d329ce1adc9f94562b71c56bc461eb732e5ebcf8083caed20fd7c73d699480b430c173415f692464e7a1c6a8468a89f7d6313dfa82a6a35ac98892a86aff146044328cec2c15097175", "657d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e874d92406f86dee9f8c04bb958856db6cfc0bb7ea92d17397457214a16beb1de2302781454c6297f6b8a579760f4d591c0acf84ff9d038b064bbab8a5d53835db"]}, "failure": {"scriptSig": "", "witness": ["4d090226f850f7916ae805cfd01da3d88ba7199d161feb700e32a1e50021c6003ca27dc720ec4b6f7479434a54f67001de9d4fe624d2cc701234506a3aeab9ffc936897e4b0276a74a482fcadd75f8b0ba5a6115f4acb1d5803b741035c7916e7587c77409522bd0d4987b273d05f6e3d08d281f0c7909b73087769b28231eaa345b901a6b7b43c0547f07df9e089ff1f953ed0bce399c502ec492ffbb6e0a358e549783d8a46223fd1d70dc57bfadae07294e70978d5e5a4aadc6e5859f115f49a5cb21c5b5836748c1a4d5082bc5775f51701daa63a0f8e1753bbc1dd4a97c53cc1a286488205dbb620869a256f9b961ee0a21fb38a71816805d48ec695126afdcd2239296bff27447a2eede5770873acbccb8cc6fbf51dde9b65691a5052f518f84188382e676c04bfa05ff578a9de1191b8405d2597acfad0d5b4479707a936431265c14211a1ba593034235eb24c82b840b4fe131f19fae3ce3fc4d40183db076c935c1486a850bc64994ea20edaa605f56222165541624237602f667f9d254ae7daa69cbae4cdb10a5dec08d4c9cb72166d8e7770d5691ceb6e42ba4f83d9c07d09c271681af9956814c23cdd3ee14b1e4bdc835a6975f65e98041c920a61c1e0209e0d0a57847f2d2414b4c1785037dc9afee306dfb2f63a72f42dc21aa940bb43c09090ce6bf6f144876b9070d5c81d66876524c1052ad44ce1aaa29a5dd8b282a56607cabea3dbc75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e38fd10ac28b4a0ae18793cce60e7e7ebbedf1e3488ce0551c956bc9cf517ba032bc2c7d802e8c870cc0fefcfae9d23d316cca1682651be3bf62b663d5ddaa443"]}}, diff --git a/txscript/data/taproot-ref/31f2c4c02978ae42e16425ad8313162bbbba6fc1 b/txscript/data/taproot-ref/31f2c4c02978ae42e16425ad8313162bbbba6fc1 new file mode 100644 index 0000000000..540cdd4834 --- /dev/null +++ b/txscript/data/taproot-ref/31f2c4c02978ae42e16425ad8313162bbbba6fc1 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1b020000001b786e618bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ea01000000fb510c0860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700f020000007a80c8d8019ead11000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d2de3b4b", "prevouts": ["ab2348000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "bb733b0000000000225120c52c9d5db69f3d85ee35b65e5555252fc0470ab9a3dcbb72267f75438b29b283", "885a110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_18", "final": true, "success": {"scriptSig": "", "witness": ["3bb82bc9855bff63b0806c30243ab6fe6426048089fa359853a43727833a71eb8712e3f23c61d5782e5762c682b7d2d1b04e38eea97d8a5f947b34b3833f7d9e01"]}, "failure": {"scriptSig": "", "witness": ["d03348852a55ecc7dc459389116e8735107f690dbaf8c2ea77bb4f79999764cc561318fa63ba00c1fe8c4e700c4aabed736d29a2f98fbbcb5ef197bb2bca048b18"]}}, diff --git a/txscript/data/taproot-ref/322e55f03866ad2580881660af953e8169abf66a b/txscript/data/taproot-ref/322e55f03866ad2580881660af953e8169abf66a new file mode 100644 index 0000000000..d0234e0b2f --- /dev/null +++ b/txscript/data/taproot-ref/322e55f03866ad2580881660af953e8169abf66a @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cca01000000beed76a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfa01000000006e98b98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b701000000b215db96035f51d900000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7f08c9e1f", "prevouts": ["f6c5510000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "2aaa4900000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "ab2940000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "success": {"scriptSig": "", "witness": ["84ca13405546924e6c9fb74dca48f76bd877f7208e82a83f2d23f23e1ae0d8b1c15b7c59a5c02eaf1fb15469bcab66cbba1ccb96702af7e47dc9b055183e59f202", "50066a082476af20f64504b01d23ca398afc25473f9061260e2559285294e81f4623d810a196f11f5a4ac85f7bb0c40855b443fd323fbfafc83ff838a6e618ad2316f92962a697139191dfedb3f1f475a75b58bf545bd9ad6c2e183ad7f5b35c0d8aeb66806582f8a9375c2d46327142d816ff6faa4621eb8fddd96c19d2eb4d3adfc7c20e5106beb9bf106a8461e04bda524b17bc460c606628137fcfb4dc50a1acdde2219f744447b0096d70cce90d25c417b2888425252a0697421bb4c0af15121e2aac2eb597937a0c9cd3b00e6d527c17d31b8b045b77707b19cfc280e289"]}, "failure": {"scriptSig": "", "witness": ["d8c1fb3ee3067ac98df69fb8275cee5c1944a25abfcd509b44b5e0a9e35f47b1deccb1990859aefcabaeac82a3444d0059e71df69fc0a777100ce79221bb83e002", "503fd27fbd47b778410f167be796854ac258f606f5dd6bf4056e43ee08d466c389f40d33521f277645062a807748d8f42e7d064a6e61c9ec028ac755c835f719449be2febf6c70fc4534350b6eed3cdd399d05d7b9fbda5a6a153a20c2d799851c3e25287efec944a976d46b44a2d904422fe38304cf0d800d4c116f194c8c0507373ebd7eab9149c97d0120480b170fe80abaf915f541bbc584bffb5e25187874a9952ebb646df548a0c5dc7ce5a0ef2aa6"]}}, diff --git a/txscript/data/taproot-ref/32465695f8a85d30402f9b194bdf25dd6e21729d b/txscript/data/taproot-ref/32465695f8a85d30402f9b194bdf25dd6e21729d new file mode 100644 index 0000000000..0711e49f54 --- /dev/null +++ b/txscript/data/taproot-ref/32465695f8a85d30402f9b194bdf25dd6e21729d @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48f01000000072c8a9abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4e0100000043944632025c9eb500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1c4cd623", "prevouts": ["881937000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "7fda8000000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "797d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368e9ed2886e7908e27181476c22eef50b42616dd4d44ef70273b9f072453f43980793fbcba16d5416bd6f0933503ffe6704f239223875a49be11ed5869ee331b55be39dc57762be2d9b1a04aa5b570805d23104bfe4fa54c392bda5d51f7f4540"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa0b1051acd7c1b2d32995b3df0c6921af5f8ed3327e7e16cb8a5e0bd007230af127aec9530f4cf05d3554e63105b96634da39f3c52c35c251ce860693e97320b3"]}}, diff --git a/txscript/data/taproot-ref/3296dbebd697c68468c1215ff252b1da046d3d4c b/txscript/data/taproot-ref/3296dbebd697c68468c1215ff252b1da046d3d4c new file mode 100644 index 0000000000..32d72891b7 --- /dev/null +++ b/txscript/data/taproot-ref/3296dbebd697c68468c1215ff252b1da046d3d4c @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4e000000008f41f4e3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b450000000076427492dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cff00000000c272c0da025f6a97000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acbf96ea1e", "prevouts": ["4be92800000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "7fc7250000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "79b64a00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000085", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb43f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d4e60e987dc96ee5dbea4bc309cd424f3f3a0504752ed5a5936e8ec363297933734b3a7050eee065844830ad8d45a710891f78004f5e7f35b8fd72bf3ee94449"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641544759b35923e828b4a61445a8ec3755fffb3583722c19659f8e8298b40b1ac80cdf889f2095af4d324c92b00d2a9db5fcc0724b0f6f8ee9ebbd204938760cb2a240b376911c9876b3695f79f395ec3f2d97b1695e5c0e7f397f1ed982e79a1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}}, diff --git a/txscript/data/taproot-ref/32aba46093e0c1405d3a8229f68cefd6de6d9767 b/txscript/data/taproot-ref/32aba46093e0c1405d3a8229f68cefd6de6d9767 new file mode 100644 index 0000000000..42b9887ae1 --- /dev/null +++ b/txscript/data/taproot-ref/32aba46093e0c1405d3a8229f68cefd6de6d9767 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b07020000007adfb0878bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41d01000000b3b8bc9e0240305d00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f874d000000", "prevouts": ["43942700000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "1845380000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_cs", "final": true, "success": {"scriptSig": "", "witness": ["a57f02d016c39779e9ce1f4f3c48385533efe663709d72051b46f19328fc7ccce9f41e98fb5d98c2eada9a462c855f527a2d7e06a95441495a4b4cbf57f45d17", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b7922a9ef31868fd0bdd2720bc44a83a05911c979e226e14df12e43105fabe25154b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["a57f02d016c39779e9ce1f4f3c48385533efe663709d72051b46f19328fc7ccce9f41e98fb5d98c2eada9a462c855f527a2d7e06a95441495a4b4cbf57f45d", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b7922a9ef31868fd0bdd2720bc44a83a05911c979e226e14df12e43105fabe25154b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/32abfd2efb454436ddc75cd07a406d88aabceb2a b/txscript/data/taproot-ref/32abfd2efb454436ddc75cd07a406d88aabceb2a new file mode 100644 index 0000000000..f44dc6ef3d --- /dev/null +++ b/txscript/data/taproot-ref/32abfd2efb454436ddc75cd07a406d88aabceb2a @@ -0,0 +1 @@ +{"tx": "398e50c902bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8e000000003f6e1e85dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2f010000002f7459e501c7546300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac9689c95b", "prevouts": ["219d790000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "768d250000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a782270f3344e4a0806c19029d04ad520705ab352d941cef93688ee397cbe2ba37683ca92a47492765ed69e840601310475c5f70013240e7a67747a5da918187472d664747fea006dedee35c74318028ad9a0ae37c154fe8226ccc2af402983"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361387569eff5c8fdfbb47201101452628117e65be58c01e3fcd7a4762d833e9a33f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829640e65f27972e690b56e28a8f49ec76fed3450565b59143bd547c42619e148d8047789ecbd47ea83af97bdb87f8422a4707031714ddb05eaa38b24e158a7c35"]}}, diff --git a/txscript/data/taproot-ref/32ba176293211377a9ca30f7b1742a3102758b7a b/txscript/data/taproot-ref/32ba176293211377a9ca30f7b1742a3102758b7a new file mode 100644 index 0000000000..bb158831a1 --- /dev/null +++ b/txscript/data/taproot-ref/32ba176293211377a9ca30f7b1742a3102758b7a @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709400000000b5af37dfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdd010000009d67e5be0212197900000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac7c000000", "prevouts": ["48250f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6c8d6c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c9", "final": true, "success": {"scriptSig": "", "witness": ["130caf75742f8ae965a7d7e33c499d6bc2c28d159e9a4caaf044f94090728b88dbe0ed3d8cf70c6dac63890dd2fb23b6609ab4e55cb3e5ccf9dc54088421c40283", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["6a6ba0a6bca5ae864aac839be28c034df4c7ee67b75988f87ac47ec326a0a1a0980f34b312b04fd328f4d5ecc453ba46a5380409a1c72dc3195b3af264aa6276c9", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/32bcf37b6b3d15680600c81db467e1dfff6ce375 b/txscript/data/taproot-ref/32bcf37b6b3d15680600c81db467e1dfff6ce375 new file mode 100644 index 0000000000..7719391b27 --- /dev/null +++ b/txscript/data/taproot-ref/32bcf37b6b3d15680600c81db467e1dfff6ce375 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4baa00000000d7f864f704dddc25000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1302564d", "prevouts": ["b5bc270000000000225120d61496029c5d349efd8924002b7ff235d477ef1351b040da94f6febcd1852b9b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f33cb046b8eba7745a43a31b99cce8060d29a3cf40684a8ccadf7d90acba647f"]}, "failure": {"scriptSig": "", "witness": ["6a05616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/333dafc1d96971e2ccab51c8ee0d9e479decf78b b/txscript/data/taproot-ref/333dafc1d96971e2ccab51c8ee0d9e479decf78b new file mode 100644 index 0000000000..b2096c853d --- /dev/null +++ b/txscript/data/taproot-ref/333dafc1d96971e2ccab51c8ee0d9e479decf78b @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1102000000ac4cac65dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b710100000030a16be304f0b149000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374871ce85d41", "prevouts": ["40ac2300000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb", "0f2a280000000000225d202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["e7e1aae90aceb2e99a7b56eacd7f6d43c8002a6ca89f9e3208f45316cc2cb09dfd5df45bcde2574b895b928b7d66d079e6641938e46fd0b8a63fb5163ce25e4c"]}}, diff --git a/txscript/data/taproot-ref/334e3a237339fce576119749a9aa81f3d65211cd b/txscript/data/taproot-ref/334e3a237339fce576119749a9aa81f3d65211cd new file mode 100644 index 0000000000..76de4ebba0 --- /dev/null +++ b/txscript/data/taproot-ref/334e3a237339fce576119749a9aa81f3d65211cd @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a010000006c9b93db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d601000000fcf1a38ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b33010000009c6a06b504e4ebae00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987182a0b5d", "prevouts": ["29c3530000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "0ffb35000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "bcdb2600000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "a17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93654d5e9f128d5d45e2b514bc7d0582e1e8810c31523e6a7d498e7ed4fcc964510a4fb15e70bbc27f4f9ee6ce894c5f8660c4bc0a21501abf5c583e18e279746b733479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae668dba12609f1dce2a1e29faaa62ff248d54f408b31ef31944f67a579d4fbb4"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692ed1d8a723f26614ad38a5a6bbff83804b2df3c5c12fea7853938e6cfd441ba04a5fb755beb1eb88fd06fac279ccb2aada241654186a69e6e0c04e3255c18f895176026b3e005afce4c10b5e59a002659822bde369bd64201565ae4c88fc95c"]}}, diff --git a/txscript/data/taproot-ref/3352986afb9bc33fc67eaf72f47be64e3c6ccba3 b/txscript/data/taproot-ref/3352986afb9bc33fc67eaf72f47be64e3c6ccba3 new file mode 100644 index 0000000000..7852e9bba2 --- /dev/null +++ b/txscript/data/taproot-ref/3352986afb9bc33fc67eaf72f47be64e3c6ccba3 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270910100000002ee48babcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6301000000681f3bd404a77680000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac689bb04d", "prevouts": ["d5e912000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "11686f0000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["be4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4c9baaf460c9b08d8af0a53251cd8db921d22667fbf74eb915957e4e9d1c209d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51f60e2d3154f769650886384bb096233f0069490aec77c98efe910f3ad816f81d7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}, "failure": {"scriptSig": "", "witness": ["4c52be", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e118b1142f6c6f685b07aa6aec8ab7e3e6024758bf09974a9b2a7615fb4927a0f7d3726db1c97dedfc82502578948b1d779eb886e6296c36bf50b8d2fe25c32b8a344cebdb8ecd56ef01fad0911d9d88482970ec36d3a04b84eda7f5b5c68ec938"]}}, diff --git a/txscript/data/taproot-ref/335b7a860725ca4f2c467a8b034060d0ce6b3bb4 b/txscript/data/taproot-ref/335b7a860725ca4f2c467a8b034060d0ce6b3bb4 new file mode 100644 index 0000000000..f76e5c642b --- /dev/null +++ b/txscript/data/taproot-ref/335b7a860725ca4f2c467a8b034060d0ce6b3bb4 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cad010000006f1f83aa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702302000000807b5d64015f1d3700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1d010000", "prevouts": ["3a024d0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "f1401400000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["964c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456bbb2d2aacfa419948546f2c8aa96b4ab4a80289c3c8034e795f45f733cf7ae0b35fa22f4b25dbc3a6b67e691e1ba7f45df255baed4abd058cf23fbf36a7f21681a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1ba1d7044f76185c852e3494a6fce96de1fdde778c7130ed924b07f57193456c18c78e356042728a8dc5293f4719d9544479381d7bc53161d8023b722566e5250874a9774daa89f30be275a1ff5113653dfa1548b9628ff9725cf694401ebdfe4"]}}, diff --git a/txscript/data/taproot-ref/33848da9a02cc62be9f5a84c5ce6e33bb6aa8a29 b/txscript/data/taproot-ref/33848da9a02cc62be9f5a84c5ce6e33bb6aa8a29 new file mode 100644 index 0000000000..b0c8739451 --- /dev/null +++ b/txscript/data/taproot-ref/33848da9a02cc62be9f5a84c5ce6e33bb6aa8a29 @@ -0,0 +1 @@ +{"tx": "c37ec3c302dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbf01000000556bab88bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc10100000073720da201fb286d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdac25b29", "prevouts": ["55e22000000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "e2aa6a00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "fd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa4304fc86dd976b0937fa56c41f386d806abfef37789b2eae5a350cc5f24e0b07f4148296d57de26c46202ca6ca2132af69ac5e2240f6410455c1127b810a8937"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c1b9bacdca57d9824556224747bb261aea2ae7ed0ce11a73241cde6387669db02c6cefb1e181eefac563b15a866f5ecfc3c81e54821b9e81f79abce745f7d95962d72dd1cd8804fbc0be1dcf6a22214dbfb5210e6cde6f2a41edfb954edd50fb"]}}, diff --git a/txscript/data/taproot-ref/33aa1588445e9cbbedd1d4a629780bcc8b4a8e9d b/txscript/data/taproot-ref/33aa1588445e9cbbedd1d4a629780bcc8b4a8e9d new file mode 100644 index 0000000000..e618184668 --- /dev/null +++ b/txscript/data/taproot-ref/33aa1588445e9cbbedd1d4a629780bcc8b4a8e9d @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d70000000095241478dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7c0000000022e144c003cb9d2d0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7c0000000", "prevouts": ["839b0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b091210000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "2c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a969cf06ec193d0358c31c8afad5bbcd547aa0657673b5bb10a44e38c372c44cda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef5981cd58c469d4842aa56f101a76a4447dba55ab7a128197943d7701f95f2823b7ec1fb3aca1c665feb629f75b86bc6796ed5eb830658d68574ea157b89fde9"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667e3c1aa8bd39d6182a2299f940d076e52caf4ade4a085ff8961d11623e68188872b08559f184ac3ac9956d54e492d7f98285a254bf010e00b63b6bbe75054353b7ec1fb3aca1c665feb629f75b86bc6796ed5eb830658d68574ea157b89fde9"]}}, diff --git a/txscript/data/taproot-ref/33aa91e75b0cc39daae8eb7a1f0889075a667617 b/txscript/data/taproot-ref/33aa91e75b0cc39daae8eb7a1f0889075a667617 new file mode 100644 index 0000000000..cac670e260 --- /dev/null +++ b/txscript/data/taproot-ref/33aa91e75b0cc39daae8eb7a1f0889075a667617 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7000000000a124ab458bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4260100000088e9d0d702bff683000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874b010000", "prevouts": ["493c4e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d06538000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ace", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828def8465bc2f3cbc3837b9c231547f51d7c9e247c478e05a849822285048dd5e0ea67bdb3398814286540937ec364df004af879f987225ad05d036a51e8223e6d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c90a0cbd53f67dc3e255e72ef3008af6a84b6163b55755c05c159eced1c9429125e7936dacf44c2cc5542287b329619dfaa06ef235a847d66c9c2df863225da6d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}}, diff --git a/txscript/data/taproot-ref/33d0d39d6ce6ced2a0a8dc5d8c47e5f5098d7aaf b/txscript/data/taproot-ref/33d0d39d6ce6ced2a0a8dc5d8c47e5f5098d7aaf new file mode 100644 index 0000000000..e0f5963cf7 --- /dev/null +++ b/txscript/data/taproot-ref/33d0d39d6ce6ced2a0a8dc5d8c47e5f5098d7aaf @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6f010000000801f9338bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44e00000000cafb6acc04e6afa2000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac06010000", "prevouts": ["8cea640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "606d400000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a5", "final": true, "success": {"scriptSig": "", "witness": ["344e52e99b8621c7551bc3af9c82142e9503431eb3e7e9a005b520c2d0c32ded2346ee64a63e101d224fed8af6f5e5b8ceca4f99fdaeea8a586ca29820309da601"]}, "failure": {"scriptSig": "", "witness": ["c1c7b8e70017ef7a6e69330630f8e1e0cf604cfdbc220833df0657bf4dbf7f23b2fcc00879bc9246d15046067af1493a3ccdb7c714b02f344235fce1c36f1d1da5"]}}, diff --git a/txscript/data/taproot-ref/33efade4e6970da9cea78a726935e5443e0d1ba3 b/txscript/data/taproot-ref/33efade4e6970da9cea78a726935e5443e0d1ba3 new file mode 100644 index 0000000000..96ad668194 --- /dev/null +++ b/txscript/data/taproot-ref/33efade4e6970da9cea78a726935e5443e0d1ba3 @@ -0,0 +1 @@ +{"tx": "e8d0e7300260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127071000000007a5fcead60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705801000000c2c69bd103096b2000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487b8556127", "prevouts": ["487a12000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "e3b0100000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "867d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e97a330f28472054f17ba9fa881f8fc7a87b4cb8666ce3273442871f099d80d74fc7631352e9fb39bf71f46c116b968047934be68cc4b25c7eb80a8b2383cf163ac108bed01ff7a3c4482bdb9637a0c08eda3eca9d378124f08be0fd1593c53eb98f84b0d7d6fcb38bca0562970da4fa4ac9189daad947902c07179846baca90"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da88b8ff2a82ba0fa3daef634fc59634370b0e98c0a294a285f81b50f56bd3b735e7075953fd5a7e7406fd0d1347280992625a2d2de29c104ee1b42e523bd7beccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f4576b069f256e7b53185a64c953a8831f99a2248244dec917c9fc219bffc52b204f"]}}, diff --git a/txscript/data/taproot-ref/33fe1028443f16cce6d9858c8501dfb0a7ae5816 b/txscript/data/taproot-ref/33fe1028443f16cce6d9858c8501dfb0a7ae5816 new file mode 100644 index 0000000000..9724e40c82 --- /dev/null +++ b/txscript/data/taproot-ref/33fe1028443f16cce6d9858c8501dfb0a7ae5816 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7f00000000ec0883ebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf400000000af6e853204717b76000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487e7000000", "prevouts": ["408f560000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "d3d9220000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d968", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004520e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d13faaaba0b83fb431d1a23feb7d5de22e491a7fb36e5108ab00e1ac0e7366690e1c61743bed8ba943c0dc40e80402f7423773c7111097ca9c5a140b1b3c94b9"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363cf7d6c7dbe5925b37da22fc3f9b29f912bd281d5a092b1ed7e24ae2c32a8d7520e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d13faaaba0b83fb431d1a23feb7d5de22e491a7fb36e5108ab00e1ac0e7366690e1c61743bed8ba943c0dc40e80402f7423773c7111097ca9c5a140b1b3c94b9"]}}, diff --git a/txscript/data/taproot-ref/33ff2ff9d9aabf2865009fc3701058f954184c4a b/txscript/data/taproot-ref/33ff2ff9d9aabf2865009fc3701058f954184c4a new file mode 100644 index 0000000000..75468e408d --- /dev/null +++ b/txscript/data/taproot-ref/33ff2ff9d9aabf2865009fc3701058f954184c4a @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c290000000006481d8560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e0200000026bb47f7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5601000000f8a95f8803a645cd00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79665a0ac45", "prevouts": ["bc855900000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "782b1000000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7", "077c65000000000022512007a606ac1d369bdfe9b32b88a4b0d4c507785f2481b337f6b3340196eed3e896"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d79df6a78da0f5e7e8abe67a937df0199bc2719081f435200b4d9406e022e7e11ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045a58cdb730d5140e8751cef937639de4f5fbc77d98986906c68a7616d2fa212f87d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365fb6cdab2e5dc224d99eb40cef967cec823dec47795ecc7beb7ac0a6ad6c13edbb0de8cab6875867027c85350e6845db37b89c1faa2a12b075d8db116249f7bd2367bb7d11bbe7d9666c447942212a409021a53e3151df7f84d090727acdc4c9"]}}, diff --git a/txscript/data/taproot-ref/3400d35bd94547fb613f1aa5cd2073fdca146533 b/txscript/data/taproot-ref/3400d35bd94547fb613f1aa5cd2073fdca146533 new file mode 100644 index 0000000000..23af9070bd --- /dev/null +++ b/txscript/data/taproot-ref/3400d35bd94547fb613f1aa5cd2073fdca146533 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2e01000000c5dd29acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca2000000009f8c9bfd026dc5c20000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3aba894c", "prevouts": ["ee7c6700000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552", "cd325d00000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "e47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cfe8c2630d2e6dab45dee7e1e2c518d990c791dc0a4f80f5d66c62d1beb467aa455476c3fa5bfea733d4af800001099064b64c061f8e2c0be311cfe06abfabc5158e114954b29a1fe443083941979d23a0210cc324956afb3dcce424fb4eceefbefe4cc2cebe7bba8b4a4f82666342333b91a450af49acc0f1954b5763bfc142"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c0476de9e93667ef708e6684295477581821e44eb6d19385f240ec9b8d96232c13278694ce96e600b1b1379af0dda4dcee22bd0822513808885cb6e68b7803daccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457ea7c8dd4a05a6083e4a7ce3fc20cde94d430ec03cbfbe8017e9dc8ef3bce99a9"]}}, diff --git a/txscript/data/taproot-ref/34038f296d87d228ac46a39bb072cc03e4e585bb b/txscript/data/taproot-ref/34038f296d87d228ac46a39bb072cc03e4e585bb new file mode 100644 index 0000000000..0b1480f4e5 --- /dev/null +++ b/txscript/data/taproot-ref/34038f296d87d228ac46a39bb072cc03e4e585bb @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca1010000002f81b9ab60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c9010000000f201065042881640000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8764000000", "prevouts": ["a46f5700000000002251207c84ae2d9063cc63412a30e00823aa01b05bc54bcf6d9936dc1c650bbdc9e98b", "d71a0f0000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/trunc1shortcontrol", "final": true, "success": {"scriptSig": "", "witness": ["f133e35be334aa55fd1a4020103c95306ba81793663788cc311ca541d9085f594f3c22c0a650975083c14ce3a50ce7df37c835d59be900ba7eeab95ea31598da", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20"]}, "failure": {"scriptSig": "", "witness": ["f133e35be334aa55fd1a4020103c95306ba81793663788cc311ca541d9085f594f3c22c0a650975083c14ce3a50ce7df37c835d59be900ba7eeab95ea31598da", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", ""]}}, diff --git a/txscript/data/taproot-ref/34264b99b16c56793e013d7d2ac3dc83c0c07da6 b/txscript/data/taproot-ref/34264b99b16c56793e013d7d2ac3dc83c0c07da6 new file mode 100644 index 0000000000..9ee263c252 --- /dev/null +++ b/txscript/data/taproot-ref/34264b99b16c56793e013d7d2ac3dc83c0c07da6 @@ -0,0 +1 @@ +{"tx": "db1a6b1b02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc300000000730c61b260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127017000000003c7d6ccc044728720000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac09020000", "prevouts": ["5f59630000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "986311000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "867d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e35e7075953fd5a7e7406fd0d1347280992625a2d2de29c104ee1b42e523bd7beccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f4576b069f256e7b53185a64c953a8831f99a2248244dec917c9fc219bffc52b204f"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823f28332fff4e521a34f62a6094c9ca083df763bc212ee1a103146f1ea11bafd96b069f256e7b53185a64c953a8831f99a2248244dec917c9fc219bffc52b204f"]}}, diff --git a/txscript/data/taproot-ref/342a92cea02c320154d0894d36811870581b660e b/txscript/data/taproot-ref/342a92cea02c320154d0894d36811870581b660e new file mode 100644 index 0000000000..7b629c51e0 --- /dev/null +++ b/txscript/data/taproot-ref/342a92cea02c320154d0894d36811870581b660e @@ -0,0 +1 @@ +{"tx": "4f48ddde0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704f00000000ab8735e8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1702000000c289f8a9017946670000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7cf020000", "prevouts": ["0633100000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17", "bd2f790000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "7c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93618bfa1a0310c6e7995d51524289b510664f003b8075315c96b030a9e98a309f23f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08208eae3f5bf5f4c26def68bde658fd1412dc2dfb494d39d6b1bd4ba6a274f177d9a711983bc616996e2ac47b27808b31a9b7e87f7ce1f3571999dd3a2a57f1080"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93671c1d10f8373edc2c4abf147e4b905e718eb9e3a7a7d82e3fbe9489fbd4d31fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8742f7aec0ae53a52a244a2c0c214837ef2ff67b990e770e70b44d703b0bde01fd5e8f79d631fbf207b458b911c1cf4efab0aea5316113aa9c93bea92caa9fc9"]}}, diff --git a/txscript/data/taproot-ref/346b40c03454e4740323b5b0422908722f9a4ed8 b/txscript/data/taproot-ref/346b40c03454e4740323b5b0422908722f9a4ed8 new file mode 100644 index 0000000000..6b364e1e90 --- /dev/null +++ b/txscript/data/taproot-ref/346b40c03454e4740323b5b0422908722f9a4ed8 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b820100000031e5a6bd03e4231f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48727000000", "prevouts": ["3cf2210000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09029799e9d74897279c0afb8c38d5d3c16e364d203dacd3b9fd2ad8aa0c72b731c7e4fcd79c21bcdb17fbf7bd2112c9d486e90a022725fc9f30344ef75a1b6dd33cb5f2111f382512a428b9f0fb7bc037e4a0f29c9d98c64cdd64685e3853ebad79eed2c24e82fc94a901215a7b5eb7242c0d0932a071d8da5b20486970826ac1abbab96b40b667a0b4ae4414c7c90787ddcde93816e7197135b1d0a2337416f3885412c406b29b892f0c1ab57e8cf18db0788f91e464eb3cfec3da5c6e4539f0ef7880e0f1e26dbc5df4b551b09137d16286ce162e356a631e48945957b196ddcaf053cc16daeff06dc24759765904c36b55bbf3007146ee520e6706cd5b2646b96c4e73bc3627802a1f28bd4d51f16c04b21dc0b1bdcbd4b89ee8169fbe86500f2705652fbc77ba0090f1fbe2eb5ea4e731ad74636ac8fc4a8a0642489201874b5653f5a8d5e036142ccfd96ea5eabd0440feb5070a81bfca23bdd5b90f85fd374f99dc5bc1e117affe5743e897cbbe8c3ec27b5252c3adad2374aec2ef39f8f11c7040b779c4e551a5445bbca7441a68c0a4d3fcbc5a5db86fe37275eb260d3de6b600937bb0e7fd37d289f337dd2aa4b5e96fe22604d0d353db52f9d394c38ac9a0d4d457cf10d09d54e51b88a55bed3a6b98a1a4bab32dcd1760a8b682a7b9b19c91ac135f5d5b4d0cf0efac5830df35e1bedbf0ef463a1ee09fb66c51d318f3bdb96e67872e266e75", "c37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361a3ba70448446526157b81f30e62eedc08a9d1c5eab7e26d94d9d479cca132acce42d201fd753cc19d7433434234602e4af838ce265353441a761579b9ecb89c78d53ca9a9f93e78db88a883cc9c42dbf55ad09041fa37b21a93adcd191d7180"]}, "failure": {"scriptSig": "", "witness": ["4d09026c74214fedb3c7322ab8deb285da3f4eaf36590572a02a0471ac6700c60b4fbba804cef111caa1d135cfed8192f8a3a9c71335e677dafaa6a1454fa01cc882e4e703966f63ff6944157619abf269bba16dd6853a4c28f5639e4cec96a21e15efef9558a84fbe42d4529630c9dd9fbee8b70c99b88b4db03ebe42f9d640252333ad746d0e195badca5f265af64caeba3fbbf3bf0c79c4691660e077dac6b7d9f8dabd1d4d69bdf211b2f688d55b4bd84a062ad63011e13857facb392df8b004adc222e718c60c385d14c61bb7d58d8ff202545288c7819800d45f480e117495143021017900e671d3e7acf12dfc0852513d3d1ff0d6bbeac4302245c9b993020e9a058b930a328896f712a8b0ce68bb9aba288225bde049fc0c9a97a1577d338682662fd7f335e6bd59bc9754fe14c236ba0427ddf200fe5fc0c2957e692acc71bfc07419a16a9a99cac0e59e9576b387ca11a96fe8586832654eb833cfeda083ccbee194e981378b8acaa6623ffdd1d4618276cf90f1b923900ca8b13f0bfdf4187a6c15ffb5a1ba7f95d006c7bc2779d348b00ed719f489acc459abe1f37b357c1d45fb353bdfd88cda73b10577cad0407ad1d82c8a3da825d62b22ad4793e96227eeb0e078825b8148df33233240a025080bddbdbedabc5d7611a12a0d93784898d5b9eb433d4ff5fed3fc00d1f14fd630022e23f79d7d2c332b3272a3dd79d8d67deb39ded4605b75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082638c14f042a58a31b61c3859e3b726944cfc511dd17ecaa68ed5dba7522a36ac78d53ca9a9f93e78db88a883cc9c42dbf55ad09041fa37b21a93adcd191d7180"]}}, diff --git a/txscript/data/taproot-ref/348d5c1f7c9f5084425a506f649c65b2f31946a0 b/txscript/data/taproot-ref/348d5c1f7c9f5084425a506f649c65b2f31946a0 new file mode 100644 index 0000000000..eb6f95fb83 --- /dev/null +++ b/txscript/data/taproot-ref/348d5c1f7c9f5084425a506f649c65b2f31946a0 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9600000000431e98c960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127048000000008ede57ff04e6946e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987ddbdc542", "prevouts": ["320f5d00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "6a0f130000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "cf7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea56bafcb4adbf2751227cb38af2ee857892c1346189758b7796ca4cc3d2e44b46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdd6c4167c25132c432c9175336dcf34ec1853eafcfbd891c58e0cd045b8bc4542"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e82a853d9097b45eb0aab266931969d1621607f85e2073f603093b953a54be8539d6c4167c25132c432c9175336dcf34ec1853eafcfbd891c58e0cd045b8bc4542"]}}, diff --git a/txscript/data/taproot-ref/349341420dbe9b22120760aa5b91a9099c7cdcea b/txscript/data/taproot-ref/349341420dbe9b22120760aa5b91a9099c7cdcea new file mode 100644 index 0000000000..8844ff3ce1 --- /dev/null +++ b/txscript/data/taproot-ref/349341420dbe9b22120760aa5b91a9099c7cdcea @@ -0,0 +1 @@ +{"tx": "bfc6bdac0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705d01000000a466cbd7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4901000000510497b3033a5032000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8700643d2b", "prevouts": ["e9d1120000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4", "0ded210000000000225120803c4cefbfa0d88ba71bbfceadb0978872c77a948bd70ce562f9334bcd1dc6dd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "137d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4c49796db8bc731ce4ba3cbbdd752e7baa135113f8e0f4a7981e8466556ff5d9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e7c43b740c0608ac721897ca7a4b0bbd2ef7e62418d1fc20274bd386c7c0d4d7e"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368bd2abfcc71c7b73097e9a5763f21997ccd1bd8d9582aa36e06c3dbfb6e67c306a37fd9f079711aee2dd395c4f9bf6b9cf1f54b1a82846abc908addbbb61fc725d0346f0de7f7080f7758bd86c81c482f81ad0c7703311f4b65ab9d7b77c9f00"]}}, diff --git a/txscript/data/taproot-ref/349bf68e15d8f14b4a471b7ab402784c1077db21 b/txscript/data/taproot-ref/349bf68e15d8f14b4a471b7ab402784c1077db21 new file mode 100644 index 0000000000..5911f4a461 --- /dev/null +++ b/txscript/data/taproot-ref/349bf68e15d8f14b4a471b7ab402784c1077db21 @@ -0,0 +1 @@ +{"tx": "398e50c902bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8e000000003f6e1e85dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2f010000002f7459e501c7546300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac9689c95b", "prevouts": ["219d790000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "768d250000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09021510852cddac042e61fc3d11e3311df0733ceaf7eb5c20e6d6190f0679d34e8954349e8fca335ea52133f96e208119c5e773ae431a3fc66d668e6987b684fd85d0341e4ac362efd11da618f0ae4a33f61fbccc73a20750a8898bd18ec36d338fc66d1ca186284c0197ff435c1031efb775f5a149c7fe43090f7c57f2bc8287da6efacb67c76d53c573dbcf1eeb190f8862e27a79d2b20f0cf19722fc7b69fcfebbd6b568f7acc9729802ebdf3c09a32fb9da6babfd4f3814e0724a4614a38b68655210d07b58fae306538a7fbdfaa451280288d2b70f2e57864eaf9fda5b7842b8af7ced1545fa1f4d83e67b299231aecaa1885d3e2e278a988f2a10a052c79d6a5ee19b2108611dedfcdde3bab2859d085ae90fd92f369c96245476bed223f9e9d2f2f6625a510b1ae39c50160cad32f9eca9e2f98ebc780bbb38c292f4f0103f706d680d6d3368330dc82a4fc4e5ce7f21722c8b6269627b79675c38ef4cbc015c3245431252b00af0217e18dba78dfe4bceff542753c64810f03efd6e14d95edf35d88d5433e130bf6087cb55b368361289bc2c70c1e87076b72e11375b5c6dd6de25eff532ea47b708cedf5946556379bb60cd88ef3b345f636814e497c2eb53d2b4295c79b1927576ddddf4a39644addce18e177fe6b59f0b214e6f0e3e19f1bee634922c4b00cd19c4b4aae9732184295de06813084d294b205e3166b52049f35cca15ddf21a75", "217d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08256da9396880b08a11a17662bac4a7b382e749572eea29fa5ac5793c70e2d18ea5bb5ed745f7425de3873ba37c460c85acd2f4f50490d9d3680fc958bb85bfda6f488f9b2dd04714e2920653c1afab7d010d81355bbe53edbfcaebea15ff1da48"]}, "failure": {"scriptSig": "", "witness": ["4d09021c456d981e5c3b017b4453317e1084985c411e0374eebcd13639455a4bd4cb054b1fffc89b944c9abebb8ad086bbdb188d6b122ad0597a0e23561ba43687f52aa25252aa0bf87be1540ffed38500ab81ea44feeca7797f3b22d47bad9e0a1253a46208e0bc5937b5161b8fe85f8691648422f371aca8153460b32460ea179e8fe6a31a08ff7cab8bda7bf491b53c2c6261ad74511579a5fd97c2eebf92acb284206d872345b1cf850b562f2873a1e6e71df99dd6cb996d939affd6c950c7c5d40ea76e2e2a36b9c71d8ecf5424817aed0efe02c0767705d86521bed0ca3fc24609682970a23517a769f8bbe6f078252ccaf5ff2d7fddca1f86b93450b99ac8fb727523de11eb977069480646fc92cb59a1ef5ea39a6137ea8bf9937afa3bdcbd365350c295aa2276927c2741b41c50948c03e60adfd3683dc74a3238b9977e1ca638fdcb04d92fd5aefce0bab9822498dc4088b74b506d624f476c1818f7d54e2d5665daf9d63cb5ae1d4413bbb029c2e111dca3b7338582219a404d1780fa92e3d0f3e22e4945181679f60ce7812123463c5eb11a8c055bda24fb9d5938e1302adf1066cdfa68db38f1f1ec8a5c8b683d2ae16c23347b50e0f792427a2583c5ed6358250293e5d36632585a202d3f476e76855560844a3010891e72402f9ca7c1ef8dae3a3d8aaf20f4cc47830fd0a6bcd9adcbab196fbabb30c439eef6208a55497785591b3170b375", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8dc39cab162b5ecfeb387365be0497ecf3ceb69817352d9280526c0f75de7c14184bdfafc9427bbc75e549436fc0749ee4f6acf063a9661c81b3024fc653ae79a"]}}, diff --git a/txscript/data/taproot-ref/349dc9e7f879b45a530ea9ac4a5ee92a83b80b64 b/txscript/data/taproot-ref/349dc9e7f879b45a530ea9ac4a5ee92a83b80b64 new file mode 100644 index 0000000000..91adde0e48 --- /dev/null +++ b/txscript/data/taproot-ref/349dc9e7f879b45a530ea9ac4a5ee92a83b80b64 @@ -0,0 +1 @@ +{"tx": "2b7a7ca6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4700100000089a957d260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707900000000d42a2be001ef6b390000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79653020000", "prevouts": ["076c330000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "f6b10f00000000002251204c956d2ed9840e95134d355554a887a299d70036ebf1550bbadc52fbd9ddc36f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365c2c02039e1e8eda45733cfa19a15344bb0ca6a0e9236d9dcb31644a405809ec"]}, "failure": {"scriptSig": "", "witness": ["6a9d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/34dee51305402e7e6b502025f00f29abbde3cb18 b/txscript/data/taproot-ref/34dee51305402e7e6b502025f00f29abbde3cb18 new file mode 100644 index 0000000000..de99f8861d --- /dev/null +++ b/txscript/data/taproot-ref/34dee51305402e7e6b502025f00f29abbde3cb18 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca0000000001422ed9c02a9f24a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac7edaba35", "prevouts": ["61b24d0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902475f66f483f4c6e7b20e1b16a1d2064a82f252c8117a7ca458b3ff3d51aab9be705f73aae5be6e70f0fe05ccba31ff8a440307e6f18cc7081041ed4b81abaaf1a12e6b5fa427aee1c1ecc074d19b1fbb031d6280e42657dc0eb83d1fa21a9b432991b5f7d1d471ca28ae773dd19b2e218f21a8a3adf4f0ece04226e48d01ec4d26f078b46ff5719a16237517bbf35b5a164097fe733d5973f5e1a9a91424755d4ea17d6bd2459ccdf52a5468bf1cbf5b3413c1f799cb59f731a66229a06c1cdeee53af08bdd3e641d204a229c2f1dd4dbc1aabd7b460a1b157695cfde157aeaf1887362baa734e82bf73642c3c6c57fb07da34ee35ba51795053309e41014fe6eff5906741fa51dbe6fd47e6436935c0e956dfb5cd52f04259ec76b737f1e8cad11ae0d1279268650e3e4ab23a148c79b3423eac5119a34d42b716aa32db32f8aabfa156b6a7946ba3c65515e13fd06a871a851278855da192cb5cae8dcffd76f8d6504390a9b08593c5ef7b4a79d6e5f9063a92ec78cd43c6cd36d2cba6dbe43c02e94b956f291ce0159448aaa20be2d8d40761017078558278e02bf074c2e224832557286fb997596f529dd80c0ff86c45ed6fb5fe866f5ee66260777e6326dc6e90b2e750214233f385affd17e4f8ef63a4c4e227a8a060d621db34ab81036acb37d0abb6dc7a3ae97a6b337eb802d0f4285f3bcbb9329a9702e94dab04299e94845aec0a563ff17583", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08299aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb439b32d44b6ff86c799acdff23ced11a294722ef2b8af6951bf8429e3bda52b31af3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}, "failure": {"scriptSig": "", "witness": ["4d0902c579f8af5ad6cf79aeed517ec77400fa5ae2353ecb0ec200b08c233d23b36901469edd1eee449acc62eefec3271e63f3758c66545059a6b2cf6ff59dcf97e1776ba998c71a2be633fad8275f7f05694a7f90d660a61bd8302561dd5d9fd4b6da5405fb4f4733cbf76ec120c93e00c13d269d1a47937797f44a8a93d86aeae0bbfbbf66468b3ec9cc6d91fe321bebc96f40009dc71fa4485e4f8ded6c631e4f0f289c478dc04b620b5ec72cb2ea20b13503aa4e150f93fb8381d404e3d41977049aee2fb4f3c49dcc572f1eb640b83e7b82385622db518b185a05a8f4fd37efea2b3271e2dbbf6140ae97baac4cc04a632e51834806b3f3768d340ae0d7408298d695318e4e435d90d1af5b103836513906dbd072c9dd943944c25330aa6d591ed8bfd881d245770eadd8f0eccc6dbc01099d4801848fa6e09eb0cff638384541b01b55299b4f83fc09e13b97e3f8dc6192f7bb1130099a2cb7a69fda912108bf8a91c675cf99b1c768f69a4bc30b141da96a396f38c2652690909941f3f4e1d54991b865afe0709db772ed53f8e74057dbb71c2cfd12d2840b11e44fdc74bc276db2a6c7d5c2b74554450ad9291e12c513b758e3e41a7a768e6098a9841cf61a4a3676df32a0d122a55c5f5f0c46cfc4b25d68942c303dc1bdd2a2ee4ed5026bfe694d39847b0779496ad07751c1fccad377bc18f661e3786ce1813c8aec4e1225aa6ea88244b415af7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d518f4301bf594f01c0bdeaf5c3d617f0344f5f915f3ffa16d6ac31751e310f3332b0bdfd7fd43775a37ae3e20c8f8514aca25517db969733cf8d9f690f9b6d8ea23f980255362d30444bd4a09dfd60422f4fe5b70b7cde78729ca8cd52cb50aace"]}}, diff --git a/txscript/data/taproot-ref/34e0f433a921b809a71c9924e9c0956dc34bc220 b/txscript/data/taproot-ref/34e0f433a921b809a71c9924e9c0956dc34bc220 new file mode 100644 index 0000000000..c77a992921 --- /dev/null +++ b/txscript/data/taproot-ref/34e0f433a921b809a71c9924e9c0956dc34bc220 @@ -0,0 +1 @@ +{"tx": "4b61cf630260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270550000000048887186bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1902000000afa4fda102cbb3790000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8728747447", "prevouts": ["5c850e000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838", "74946d0000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d94c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363223f590d275dbf98f3959a26c5345f553357b5bd8a825b42274d58542b11fc5131be74f8e69d59b35718025ad78971477354696379895e31ee13c64e6c94e9a3a6c94bbfbe0c8d8162307ea587875a7b29cdfde589bfdf70042a40a3445f95ec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}, "failure": {"scriptSig": "", "witness": ["4c52d9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f2df3669f0ebd61b1abc5e44d231fc82a1446c69bb597cf670e574f96771c819131be74f8e69d59b35718025ad78971477354696379895e31ee13c64e6c94e9a3a6c94bbfbe0c8d8162307ea587875a7b29cdfde589bfdf70042a40a3445f95ec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}}, diff --git a/txscript/data/taproot-ref/34ebf584d708a418710a1466a3dbc67b82146196 b/txscript/data/taproot-ref/34ebf584d708a418710a1466a3dbc67b82146196 new file mode 100644 index 0000000000..9a55c5f761 --- /dev/null +++ b/txscript/data/taproot-ref/34ebf584d708a418710a1466a3dbc67b82146196 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1000000000e348ed568bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44e01000000d194e30f035234630000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709ed1724", "prevouts": ["119624000000000022512048dae93b9a8752a11e2bf9d811f71f83e914d496dade834e573813f3fedfdad6", "607441000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ce60b07daa005e7e961b1cd1197a880b0926a9defc492f43af4f596fa4d95286ebf10485a7565da4888b0296454aba30a39a8416dd3eaaebe7fea4a18750e931ca477f7eac6c013e182e33a949b526b028f901138401b50189d2a4f50cede7d4a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b205b49dca00d66246302f0b0e6aac7e300ad432a7c010b19b7b2f949f7f012a70b4d2addc31b8421907b0cff80194a5513593e3802bd921239c9c6063ea806bb655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}}, diff --git a/txscript/data/taproot-ref/34ed3c4ed5af89953d2e81d21f7c1e45d2c7dc87 b/txscript/data/taproot-ref/34ed3c4ed5af89953d2e81d21f7c1e45d2c7dc87 new file mode 100644 index 0000000000..99738d0603 --- /dev/null +++ b/txscript/data/taproot-ref/34ed3c4ed5af89953d2e81d21f7c1e45d2c7dc87 @@ -0,0 +1 @@ +{"tx": "e3469bbe0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706700000000c719f5ba60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709f000000002924d0bd01b5301900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac88030000", "prevouts": ["17b91100000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81", "09fa0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902e1118f7cca20da1def9023630ce16f7f5835312be8eda360288bfea17af2b584c5a23e00a9a7dc2f353ba7896709dce82fc16191727b3183f782d36735c96099fe64b50e43d59716fcc3be7bbe76dd3ffd7b0c48a52f5c0065c51f7798af8586ae4d7b94e431407c6b932957460eeee4db73e5697831eef08d4f1c36482c0a73a1c1c7db964d2cd7ae17cde2b332730f90fe27c014cd537d33df94f2efe0792be51a2e13404233f292d33f559f283a1fb45c05d9be9c0733d3f93a3afc8519aa4891fd45fa45710583e767aaca334942360bc823166e2d7bd1f7530b639b6405dfef02e05314c9ef5f74d0d6366228a109c3c87e1633456efd01d544bc972af7b44f12ec87ae432486f66f46cfac9e0643fc4119fba979519851fbb256dc52d8e21cdae6a7955be486547c097041e2096f43818dffb0537ae1286a8c19b65dc777407f853d6ff9296a920deec6ab9bab6cb8818a144597b0a5667d2562f81a9bfb6afd454c0c4934557edda2945543fb9aba37a87fbd38ce2f39689b7476595afb012ddf72298d9e8d7d157a25c9fb1b49a00cd3177dd4c61da1097588a69a464c517b1154f12b35e50848eff7e37e88103a076e5e132736e422ed915aef44a07ed0de6627a7ba5792df9cf79b300b8b7e3aa439e839c2d99ddecc9bec47c8c33a9aed652d5a60e14695ebe74cd093fa15fab53bfbac61d4f32be775f298d610e8030d84c23ba6e8de7596", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b28c78e356042728a8dc5293f4719d9544479381d7bc53161d8023b722566e5250874a9774daa89f30be275a1ff5113653dfa1548b9628ff9725cf694401ebdfe4"]}, "failure": {"scriptSig": "", "witness": ["4d090208e2fff581ba5a50b839a109a158f1ae9d512e8b8b5141a4d95106120a8a86d5bec55e773653bbcc8f0f7e0557f9b3ac7f0c8c187908d8a9dba5c3fb734073a30e8d8f527aa72ef8511b79ded506b5deb47352adb253a20fa8f286640a39ee2be0f79c9600f0efc763a1a815adbb227812c2ffd46cad34a865714dc5c07d86a0d54e7600e0902552780d4424de339261b55188228557b692619b645486beb36322fb32c3c7fd431bd41309f5f4f7caba891b1b50671f24ee6751cadb0c749a43e23556e634e8a66907523b220127214718be0f0eb003b05a277a35cc26c2fc284c71a2f938c866f3b3e79c5ddb4d2ed1fb2e13076181367db83194072bd57c9b59a465e00023e5a4181a5bdc61fa69009f198b6adcdc6aaa2b30469c453f9ef5eaf5a63ae0ef2bf1b2d3c68ebaa80238764b6fd117b90b3f9d961d38d670eeebfe4a13f7e03ac64bbcc9a77b30c94416bd9b073e8c50ea87b5b6e373772acea1566d3b3c5ea5b962d223c3b7e2e4aaa16c9ad32ea14f6f4209d8eab409766bf1c5d1c9144a49e319263a1a0785d9b5526ce4c073561f604a4894f6bab7d2069166ea7cd73d2ce5c187fe5f2528cda247e341c3d15978a9954b2da9bd74bc0ad5a2511e7d86c41efb5b7c2ab404fcad2073cec1fba48d8f2bffe3f2d05d519fa964bce785d18c47b961972bc1afb784a3509f2cbedb256e3a73c089e5df3555408e543b1dd309dcbb867561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821bdee2e16a63898e861f6346f98a8f5f2a90fe2be47e52912f18205e56fa5c07b35fa22f4b25dbc3a6b67e691e1ba7f45df255baed4abd058cf23fbf36a7f21681a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}}, diff --git a/txscript/data/taproot-ref/34fe51570c93ab7b56e8955a00795a7af3eb88c3 b/txscript/data/taproot-ref/34fe51570c93ab7b56e8955a00795a7af3eb88c3 new file mode 100644 index 0000000000..7ebc19955f --- /dev/null +++ b/txscript/data/taproot-ref/34fe51570c93ab7b56e8955a00795a7af3eb88c3 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2301000000aad2904b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a6000000003d041d050193d671000000000017a914719f78084af863e000acd618ba76df979722368987d0c74728", "prevouts": ["5b7f6c0000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "663a0f000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "a47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93662a72c7361d2eba7ec3a19fe348f0f06b8ad5a36127d626cba43309febe57ca2d5e071d65b1ff2cbb44adb2a0836dee99e48dd3c256c0643eaf2d4db2ac89d0f9da521cfc521edd35405d6ff7b10120e980b699014de05f8e600b437ffa9c347"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa1a56f6cf7d9f4db4b4e32634d67c1bdca6b80e06b787823c0e4d06c57c1163a2ec4f69e5cd9a0f0c1fda8eb2f54297e33bc5edab35b299e65e2653a923d6ca55"]}}, diff --git a/txscript/data/taproot-ref/350219ab2d9d1993c2e0ad903f92eaaf6318f133 b/txscript/data/taproot-ref/350219ab2d9d1993c2e0ad903f92eaaf6318f133 new file mode 100644 index 0000000000..b00ce11752 --- /dev/null +++ b/txscript/data/taproot-ref/350219ab2d9d1993c2e0ad903f92eaaf6318f133 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b85000000009369fd8bdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce3000000008641938a0366ee8000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce86e6736", "prevouts": ["6ac7250000000000225120c1ae6350d5e25c8637e3643ccad16ae3a3009b1bad8c1dbb165abd62db3354a2", "98df5d0000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364dc685ecbd8fbb467f50be3541444cace52e2a96f82f6e3a97ffe7c20b40a1e235701ef224ad20174d0190f97f9f6d3f23a41bbc27fc82fd96c9e1fc2f7b2cb81ef28805a30acff873fd9260c6b3bfee2b626467fb0ce04f716d513a8a4b08b6f288028cdab461d62f9273620b97315e6e9af9458f777a616c1bade2d3f6a89e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f183944a14618fc7fe9ceade0f58e43a19d3c3b179ea6c43c29616413b6971c1fd87b85adb72b018dc8118730af51fe2e1fc2345a45c291032ad5ea0f36db09afcaf82673e7b509fa61dcb6f9390da3a7ce1e18401449d1277235bd9d9c04d9a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}}, diff --git a/txscript/data/taproot-ref/351979da8be9a1fded3861db5068a083d50516e7 b/txscript/data/taproot-ref/351979da8be9a1fded3861db5068a083d50516e7 new file mode 100644 index 0000000000..020198bceb --- /dev/null +++ b/txscript/data/taproot-ref/351979da8be9a1fded3861db5068a083d50516e7 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270780100000092a442168bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40500000000ac1f958adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2b000000009c4898ea02e6d16d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875a481120", "prevouts": ["2b3f120000000000225120c10f9a5287d6d37684b1ac107332d66417d952fdf60fb9cd3e9fa5de48c339b4", "fcef35000000000022512070bce5a25570b494d89a85af7ba09d895150a56587b7f7acec0c02ca42514b39", "91f927000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93642a698c787d1b847cde6e98849bca61e9a55d0a1c0c2fad329979ba621c74795"]}, "failure": {"scriptSig": "", "witness": ["6a44616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/35210e4f9eb6f063e680746037b199244fe0997c b/txscript/data/taproot-ref/35210e4f9eb6f063e680746037b199244fe0997c new file mode 100644 index 0000000000..2b863dc5fb --- /dev/null +++ b/txscript/data/taproot-ref/35210e4f9eb6f063e680746037b199244fe0997c @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e00000000082a1fedbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b040000000078251ec4037e9167000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac33248d4d", "prevouts": ["aec841000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "e5c4280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_31", "final": true, "success": {"scriptSig": "", "witness": ["a158bebfa7f7e39bb3bd9f2c9bcec51c834aa081291ebf0fbd28b4cd7fe4042fd70875e62105e87be40abc44c6f11600c4be1ff516e1b55e28cc2c81f9951be883", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["dc1f40d2c785e4e5e2450796e46fff01d27991a54698f5782ce784108eb1c5995e082e94bbed1262006a52eae43a8836c65a0c8c1ed15a944cb9ce5050fe8eae31", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/3569acb6b68f7aed0054e44b1fa854e2ef33b96d b/txscript/data/taproot-ref/3569acb6b68f7aed0054e44b1fa854e2ef33b96d new file mode 100644 index 0000000000..a0746f4585 --- /dev/null +++ b/txscript/data/taproot-ref/3569acb6b68f7aed0054e44b1fa854e2ef33b96d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4e00000000a4ee171060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708b0100000082b99690015cef6a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc8000000", "prevouts": ["f6f17d00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc", "84ac1100000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "317d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936baa8b3b4b8a0b13d474f8e303d1fb88b1f31b08e2de6caa1fb01bb3d4c0176023f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08228c5b97b98364e562d83f29d0f7226f72eeb298058e828607471d679ccabea05a4517c545b323e839a783e2c84e61e1f1046ec65ac2c085bba4fcd3b8ecf0c89"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936848a98c8453c3accedd5d6c98b5c0c5ec67507e057504b5eef02067a388f801228c5b97b98364e562d83f29d0f7226f72eeb298058e828607471d679ccabea05a4517c545b323e839a783e2c84e61e1f1046ec65ac2c085bba4fcd3b8ecf0c89"]}}, diff --git a/txscript/data/taproot-ref/3572c1cebe263656185dea9403422e9884954499 b/txscript/data/taproot-ref/3572c1cebe263656185dea9403422e9884954499 new file mode 100644 index 0000000000..85998c60a0 --- /dev/null +++ b/txscript/data/taproot-ref/3572c1cebe263656185dea9403422e9884954499 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba800000000d44957fc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127059000000009e3999d502b1992d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ace6010000", "prevouts": ["9ad1210000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "92710e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["814c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93649f82d663a1e447420f2cf05179af13964281439b8b427a6cb4b09af5b0cc191d3571a06a1d33120289e06483b2785a7356eedf367170ec7792d3587508789d4da9670c383f4b71f5a22d48df0589bd68dfe195935a65f1aeaa80f10f8ca6973"]}, "failure": {"scriptSig": "", "witness": ["4c5281", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366acb6639dc224661965f1c40d35e3666caeb8dba1d8ba77ab5b688daa06db8e499aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb419c228cb7ae814d70beabdb725e2cb3ba4f8af3a16648b1300fc97d27ac433c5da9670c383f4b71f5a22d48df0589bd68dfe195935a65f1aeaa80f10f8ca6973"]}}, diff --git a/txscript/data/taproot-ref/3574aa7865915325c364ab1364ae532d35ec2952 b/txscript/data/taproot-ref/3574aa7865915325c364ab1364ae532d35ec2952 new file mode 100644 index 0000000000..43a5092d62 --- /dev/null +++ b/txscript/data/taproot-ref/3574aa7865915325c364ab1364ae532d35ec2952 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f601000000901c05e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9900000000916fb3af02ceaf58000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a622010000", "prevouts": ["07680e00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "90344d0000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e868e9a99c27257089f8586472cc94222e874ab5c5b462fc98ac1b045b7a37dce65323990ac9ba96640afb66df99f25054f5788ad16157a03b33c6c26a70bd925e21136d3d9ecdf371b2101a7e86edb56e15b10ef185a8506988239bb2b5a4c43e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a48ad409340116ac239d5c746dae159519851dfc1ab3c3ad2152d495f5f1663b52e804f6a261e09ec86c0fb6e6ff5b26564af7d86f56b1539029a07a3794a04021136d3d9ecdf371b2101a7e86edb56e15b10ef185a8506988239bb2b5a4c43e"]}}, diff --git a/txscript/data/taproot-ref/357c3aca3897a104f6b209ff00a90eb8f93c11e9 b/txscript/data/taproot-ref/357c3aca3897a104f6b209ff00a90eb8f93c11e9 new file mode 100644 index 0000000000..abbc024db0 --- /dev/null +++ b/txscript/data/taproot-ref/357c3aca3897a104f6b209ff00a90eb8f93c11e9 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe101000000a64555a502d9916e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e74d1fe352", "prevouts": ["a550700000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a2964428c5627bca847605afc80c1617e4aeb928b4472ea19d347e6adf351dd82af60a6b1ce41c85915f4ec0899b6d6f1cca85ed4f86462d464658804bb71b3aea89f0fbfd9dd813268d111dcf81525d56b9783f0f98125d92d41e0fef09748813099d5e1d6a1ba1decf29eb688da21dc9d8f2c43b15e6199aa8fdcb835c5d013c3f13ba0d2d2f679a59679c3f4e557898e02e9b4640171ddb37a28c20a2d3f299647e3e99a9d82a3e4571ea170ccff2b5ae28b402531a470c9ba2e2f8cb91cb3cac4c3f939ab8bb450f63f4214684ebca04065a69d63da74880d4c482873322a12e073835179fe80d1d481ba4fa541e5ded02eaaf75bdc032dc4a39584fa3d7cae88d29bdc72627ebacb9a3a1a370e60549108e373be901ee4937394990431f9776fb597d72e3b1496aa7d124535fed9eb9ec83b411a60dc970eb8328d9a87626967c21f1ce316d5d7616306c899e91e8a63a79cf6689506895bd41428005561ffe726c9f3aeded4f91f7f99bbebb81d93eb1648cad1949731d9db76ef0d77838941151d4539edfaceac81dba7d39a20975c58775fea38fd52b219475a923a18da65fd0d805a5c96ece838500d5f987cbe1d9568079589dec9632deb75affd0d4afee73f71787065b1e3f4f5301a418b90f4bb0787b94e54e54e68746bd1851e638fa1cf691d53017a976db98982361716cdeaf67ee2bd89276446a851a136f92f0d66d90533eb98b75", "da7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fabb1bf216bf716c84a1c7f4bdf291db4b4c93f804d437ac6faff07f214860f972566ba3404d3656bfd0df4a55f82c254cdba579fd51be164a5cd21fa2faf92a44"]}, "failure": {"scriptSig": "", "witness": ["4d0902a7f4d0ae60acc87b60720ef208df3f6881c53b5b422ec367d4193d1a9af76b29d2ca7f2ecd176f59a79329a7e0aa40ebc4f4103eaf89d8e3ec96cde7c400212b07fb2a449f35e6f15c2aacc9e33bd2112e6ab98ec76dd1993b76bc932da5a093a64c84fad222d73b29f67c86003da9a9fdffc4a52403e2dad01fc3e590d3c438e6ebbab48d2ae356c0b8ff11278c8440fd5d9dcc4806e14526848b1abba4b7e6a88f5eca475b3349560b54ed0b2b7926341e5ab86248a3d94cc27292473b85cceb17a27410c30802de7e0505232f0c474a976d6897c96e88b8959e8bb9a8e66672ca4a5902d55011ffd3bbb5cca1f5da1eea9a30a97723bf78a37be3fe3fd6669903e1f2b29b7b1f85d38c5a6f5a6513860d2d4cd3cc9a9b68d2c04881b5d13505e9eca66a752990cacffb536c49ee32745cbec92fee57e0c481c66e1ad1b2ff16ae7c8b8c748bff30e0b916749de47c50b6eebac7632340a986c0ab2073919132b3126c4df6588a46b79d1ae0cc73ae2f423bc123e4f0ba8c33113196e39bf00803ea0eefe5f269741fcb84d3b9abf0478e34109cbb792f1267de62d68656448e9841f99a94a5f0135185ae67a830ba0b3e5fb620c145b930e51467fd29485e3547fb2df0d9b15d6b91b8112d18c6eda105f61c207bfe80881de30906598e40ad121088843e1e6f9d7f774852a94be5035bbb0d30be8f054791dddbb71de9dec85639c7e5ecea38d775", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93619e18d071110c5abaa139a6d0bdd1af7c8aedfa20831714d5471a7b6fe83dab09a29f5cb7818ea23e4b491695dace811707e8772e99626d3237c076ba9a076d6566ba3404d3656bfd0df4a55f82c254cdba579fd51be164a5cd21fa2faf92a44"]}}, diff --git a/txscript/data/taproot-ref/357f1e298d27372ed2fdb360e6ecf4b4f93bf38f b/txscript/data/taproot-ref/357f1e298d27372ed2fdb360e6ecf4b4f93bf38f new file mode 100644 index 0000000000..b40f9aa55d --- /dev/null +++ b/txscript/data/taproot-ref/357f1e298d27372ed2fdb360e6ecf4b4f93bf38f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffb000000003c3851e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2b01000000a55d69fe016a56890000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796cd000000", "prevouts": ["ae147e0000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "731e4d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["de", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f9ea8f2e65eb73025cf4611eb81b9bc973c238c936328a8046b3068be11236b1823ff0d5c6a769fa09e08a59a2485b611e1511239bba2f80aba2b92be945f1b811034f174cb7bd77652d345f06878a8d4eb3ae1b92590cd10e2563bf228d2d6bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb423dda11617dc042479e1d576056805c31872018ddbd603e5e1ceb926e90a3395bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}}, diff --git a/txscript/data/taproot-ref/3585f3da19dc73f07d513f4d5e06b3af35381aab b/txscript/data/taproot-ref/3585f3da19dc73f07d513f4d5e06b3af35381aab new file mode 100644 index 0000000000..f05923ee72 --- /dev/null +++ b/txscript/data/taproot-ref/3585f3da19dc73f07d513f4d5e06b3af35381aab @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705400000000d43674c0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0201000000aeba28e203296f2f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df97972236898731a52e29", "prevouts": ["cb58100000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "f13f2100000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "b67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368f91b6c4c13aa4ec71d33e29eeb31c6a6eee39b0d151b2bf968ac977aa50b78419cfe9d552d59ccbadc4f3846c4b5c3686f3389826ed032a892d1ca338e6ba63ca37f8027c2c0b0d436eabba5be8b19fe8a47d5b17abeebfa31c0139f25f704791244d1d955381053a5c36db6928ef13bb9242569ee84b58d7018329936aac78"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b4dd63163ec3072393586c7919962509f9d5e063bf86457cbccc929d8e7b42d23bc00f369fc994f47536ced64d5e4f722a68c2ed1128957c24de4b5158af0ec621d9a3f11774810afeba87c9188100d693899e640a37210c96e3be6a00ac01d4"]}}, diff --git a/txscript/data/taproot-ref/35995d78575bb81724c123126ae84f04c1ef1324 b/txscript/data/taproot-ref/35995d78575bb81724c123126ae84f04c1ef1324 new file mode 100644 index 0000000000..7af830af2f --- /dev/null +++ b/txscript/data/taproot-ref/35995d78575bb81724c123126ae84f04c1ef1324 @@ -0,0 +1 @@ +{"tx": "561ea52603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6001000000363305b7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd501000000b8f01b8d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c442010000002b7372e904bd41b000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748703000000", "prevouts": ["f0d7250000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "3f614c00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "cdc840000000000017a9148462ed29696925d7688e1db8e76ef9e6667f05b287"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21551f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["80972288adc6d7cba75001f1141141eb3686c9d3391523c89ec8a5d51191b31f7ec18951bd568e4fbba5d6e4cc84462a06b1aeaca08f8e5c0bdb85d868bea8bd", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/36107f7e7692414cd4ae5e7ee06a1e46821b107a b/txscript/data/taproot-ref/36107f7e7692414cd4ae5e7ee06a1e46821b107a new file mode 100644 index 0000000000..e196f02b75 --- /dev/null +++ b/txscript/data/taproot-ref/36107f7e7692414cd4ae5e7ee06a1e46821b107a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3001000000a624d4cc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700802000000f83632e9019e1b0000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac56000000", "prevouts": ["d9161f000000000017a914e18c03fb168c1c1b3408ffb477de8ff77b0fbd9587", "c0db110000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["e04c767dfd5b7d04a7575a895a890a96fec52479db16d1360413e16345dd2561ec60f703c0d427d470048b256f382fe9264326d51f90733814b5cb3a78703739", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/361314e0baab060ff8fb2888efad4f841ee2e65d b/txscript/data/taproot-ref/361314e0baab060ff8fb2888efad4f841ee2e65d new file mode 100644 index 0000000000..37a39c7ee1 --- /dev/null +++ b/txscript/data/taproot-ref/361314e0baab060ff8fb2888efad4f841ee2e65d @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127090010000005ac683e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c380000000038d3a0f20107b609000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87cd821a49", "prevouts": ["b65e0f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "d17c4d000000000017a914a68ade9e67dbb5e8acf044461cfd5bd8dcf592c387"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1652142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["1c57dc5cae11418538bd0d2602bc9033ee944789925249b9dc13189e5fdda2d00395bf36c138544c40aeded5fd16f11830dfa8931a56fcf656d1480713061d0b", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/361c2bf607441dd9ae1d9e592d08aff1c4423aec b/txscript/data/taproot-ref/361c2bf607441dd9ae1d9e592d08aff1c4423aec new file mode 100644 index 0000000000..2e28eeedfe --- /dev/null +++ b/txscript/data/taproot-ref/361c2bf607441dd9ae1d9e592d08aff1c4423aec @@ -0,0 +1 @@ +{"tx": "a812a8340260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127011000000001b84d5c560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b90100000047458cbf0119a31f00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acba000000", "prevouts": ["7909120000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "c8670f00000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "697d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89363a1a9e3455d5e541eede6f35654fff6287ec2d2087da21729e13d6d7b575f3b3c2b944ff5e8034ac7518513c5ca10ab4eec025a723136fa482de383e24ff1"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936af22b4901457eb456597ad7be41b200460b2a53b5535b5af1e9b3a1b5edde2e99363a1a9e3455d5e541eede6f35654fff6287ec2d2087da21729e13d6d7b575f3b3c2b944ff5e8034ac7518513c5ca10ab4eec025a723136fa482de383e24ff1"]}}, diff --git a/txscript/data/taproot-ref/361e67ace54dd8058e82517e87d5a294ff0e2430 b/txscript/data/taproot-ref/361e67ace54dd8058e82517e87d5a294ff0e2430 new file mode 100644 index 0000000000..d5a9c31ad3 --- /dev/null +++ b/txscript/data/taproot-ref/361e67ace54dd8058e82517e87d5a294ff0e2430 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8e010000009d47f8c3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9c00000000643f149804cd20a300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac550ddd44", "prevouts": ["3958230000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "01bd8200000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["8d4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368b6d963912b4b21c343ab35d829758acd38b20aa323c58d3577851a32d8d38189886f85ebb300297009aa959255e1f8e976b091c7e06b33477ed400c40a83b4c185c953dbf0a33402e724bbb72e47d874a897a0941d53d9706dc82e2e14efc19f43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5188d314ba4ab03912e470cb461a645c9914779a4907e0bafc42fbc04fe8b44a37185c953dbf0a33402e724bbb72e47d874a897a0941d53d9706dc82e2e14efc19f43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}}, diff --git a/txscript/data/taproot-ref/36225523764ce0fcf4a54ecc157c7a9ee0ca5e1c b/txscript/data/taproot-ref/36225523764ce0fcf4a54ecc157c7a9ee0ca5e1c new file mode 100644 index 0000000000..d2802f6feb --- /dev/null +++ b/txscript/data/taproot-ref/36225523764ce0fcf4a54ecc157c7a9ee0ca5e1c @@ -0,0 +1 @@ +{"tx": "bc407aaf03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6600000000004780dadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9500000000b762a584bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfec00000000c46558bd01b5e525000000000017a914719f78084af863e000acd618ba76df97972236898718b7f726", "prevouts": ["d3706e00000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "a20f210000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "60e3700000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6afb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4006cb24f353cfca0d245645f6b16ad599c212098eee86bd01fc37c5c4a863127c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b29f7cabfb957bba526a47fc91b61b10aee27eddba24db724dc3d01c8c4f31434c1cf5ffa00c6c7050afc353617823cd679ab4db6c6aacae1c16f62a2980653852b51aac478484d8a075e848b67a41ce9b347e1249fa49816f898b909a6d4bd5c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}}, diff --git a/txscript/data/taproot-ref/363516e81c7327e6e8535e74da1cf78a4a939bf2 b/txscript/data/taproot-ref/363516e81c7327e6e8535e74da1cf78a4a939bf2 new file mode 100644 index 0000000000..7ca225962d --- /dev/null +++ b/txscript/data/taproot-ref/363516e81c7327e6e8535e74da1cf78a4a939bf2 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1101000000c10c2513dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4a000000001013795b0240fdcd000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac35020000", "prevouts": ["660a7d0000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "ea8852000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "final": true, "success": {"scriptSig": "", "witness": ["d728ffd3b4e5ee0b6ce4d3eadd407ec13a93466db8301b27f68be80942b82a09ec004eb01a79e36188d5e309ab6f1597fc4d1a9e686b0cc6c52861d6c281ccca82"]}, "failure": {"scriptSig": "", "witness": ["0a2eee076946409f4b97aa446498e63db0bfbc131467921e8e2eec44a70ec8a3b539782dd8d7da4b23add8948b476438234ac66ae752aad19f5b9d8bb103609482"]}}, diff --git a/txscript/data/taproot-ref/363d3439b183bb0f2c6a0d1238057e9beb398f18 b/txscript/data/taproot-ref/363d3439b183bb0f2c6a0d1238057e9beb398f18 new file mode 100644 index 0000000000..242632cee6 --- /dev/null +++ b/txscript/data/taproot-ref/363d3439b183bb0f2c6a0d1238057e9beb398f18 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c415020000008b24badfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0400000000376ef8070205c49700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689878c020000", "prevouts": ["92b3310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "adb367000000000017a914856f7c6a5a6a1ac0e553b769a4c35bcb9fb6f50287"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2353212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["5ec4552ffa2184dada89e5707a20eba875f5638aad7b361827fb125646ac0df368e7301ab8264c017a2e8be4bb09a7bd7f9d1d0a3a74617310f6cbbe76ce09e7", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/36415fab25c89139e82b030657b2f8d9f5d9bfc4 b/txscript/data/taproot-ref/36415fab25c89139e82b030657b2f8d9f5d9bfc4 new file mode 100644 index 0000000000..e972f9d8f8 --- /dev/null +++ b/txscript/data/taproot-ref/36415fab25c89139e82b030657b2f8d9f5d9bfc4 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127016010000005a40fda98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cb010000005cc4a369dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cab000000003c7930a40216509d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac25272e3f", "prevouts": ["2ae70e00000000002251204929a185ed20b7f7e86ae8920b068b5e7d5df0975bee6bbfbcd97b6bb81e709d", "b3c23b0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65", "8b34540000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "7b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bf376daee13dd63a085ad58e4a789e980aa4a44dc2b29700e972d7f3e78897bcd15ee116aef2a5177f7228fbf74f7a33b70e884325424982f9125cdefb107591d34322f35809060e9857f404c38bdcaf402c3d07c78e42a3b4d1eaa304dca88a"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93627167632271a67f79806a6d1eb3003f6a6b2caa9b61c2ff1392a9bd62be206b9e069ba5eeb0bec6bb336aeedfc480da3e66ab61ed5906063fe5b68f45dcb12952affe3792374ee751e9779d236e331236b2211c0285bb070b7e5d58aad1c033f64fb6de85916ce1333b57715a419fbbb7fd448155796c8af09a2e4a2bc14d947"]}}, diff --git a/txscript/data/taproot-ref/36608fb81d55d07d46c2f7849cd926ee3b2544c0 b/txscript/data/taproot-ref/36608fb81d55d07d46c2f7849cd926ee3b2544c0 new file mode 100644 index 0000000000..91f52c327c --- /dev/null +++ b/txscript/data/taproot-ref/36608fb81d55d07d46c2f7849cd926ee3b2544c0 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4baa01000000f77c2d26bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0c010000004f4f1f22031457a20000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f870d020000", "prevouts": ["3c312800000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "f4397c000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100d9aad57a3b6ffbe01e5aa610c80a31dac0435ed9ab6bc77300028978a0dfe9ab0220693cfd0fb01370af7d07b4fecc8b192e1a2216e94d42da27db6649c7fb4d3f4101434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "483045022100d2bf2bba76cc40c83e4fa88a78cca0a51d823926708c32ceef76f50f0480e74202200846b9fbbed97d2ae1c9ccb73e86cb58120d894da0f2c2486b67b3bb842a071f01434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/367c9b1f3074839cbe7794421f5a5a30b5392887 b/txscript/data/taproot-ref/367c9b1f3074839cbe7794421f5a5a30b5392887 new file mode 100644 index 0000000000..8f97f56573 --- /dev/null +++ b/txscript/data/taproot-ref/367c9b1f3074839cbe7794421f5a5a30b5392887 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c36010000009d36b71e047ee44d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88accceeb831", "prevouts": ["4bfe4f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b7", "final": true, "success": {"scriptSig": "", "witness": ["a4063c93b08049b6f9535c3fe361cbe0ba81ccf1de814e064ae40969d880a544336437e95c43e1308a425be13c2eefcb039e905154e344d7a65a50cf1defd24d03"]}, "failure": {"scriptSig": "", "witness": ["788a54b3f2fdc816b53744391b0112b0dd7da2e0905556986fec63395814c0b5ca80404ed642a2a031dcd2230f2d0b26dfcf9b3fd6ccf8f655c623f047ad96a1b7"]}}, diff --git a/txscript/data/taproot-ref/368c81b84650d4644c983e3209d93ebe140d375a b/txscript/data/taproot-ref/368c81b84650d4644c983e3209d93ebe140d375a new file mode 100644 index 0000000000..3b52341fa9 --- /dev/null +++ b/txscript/data/taproot-ref/368c81b84650d4644c983e3209d93ebe140d375a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caa0100000063e069f98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49701000000410c148c017dbf160000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e712fb6959", "prevouts": ["8d71480000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "40c43200000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ab7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936868a8b5d4fa4ebb812e9187140be33b96106da21b05039089cc432e85b6849d0588819b06684552554786b2b49e7cd3d9dcfc0725dc4b3b93f8768a6a84fb31b7c07bb1aa10d02d314eb70c923196d0e49e71087637e2d5a1d7fe44c2440c398"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93686c31dcf8859245bfdb2cad1cc94d16ee0f95fa651e4b9f3d702e098ccaa2b3aa05ea26d8201abb1a5c146c7fb3e541bebd813f78d5cb214a01f0b6fbe6f45888cb303569f28fbe8acbcc2d27d183e3a68170f5392df28f40a03efea695d856e"]}}, diff --git a/txscript/data/taproot-ref/36918d3941b615417b367e0dda84482198335469 b/txscript/data/taproot-ref/36918d3941b615417b367e0dda84482198335469 new file mode 100644 index 0000000000..2f5e0f791c --- /dev/null +++ b/txscript/data/taproot-ref/36918d3941b615417b367e0dda84482198335469 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b12020000006f9651d88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42401000000bdfd4f8d034fab5c00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ae07c92f", "prevouts": ["8131230000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d", "82de3b000000000017a914f7f3eae48087a4952a984cf9c1f2f12f8785754687"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "9a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93610630b77bb4590cf218c5051e5309756c31e53d1c2931037bcb12349387772a4703c0353c01e1109d81375c08919405978bc042794caf82a403da05ca89d0cdeef17902325999cb16876d9e124f321b7a2400c6233e0b61b95917979ea167214"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bf17dfde2600b0767befdacfef733adf21854ac1d2a618729f77c0302a39a08774224dbe9932044562df2f9dbf2ed3a87afba7bd9cf6855f9f40e4c24add8036ef17902325999cb16876d9e124f321b7a2400c6233e0b61b95917979ea167214"]}}, diff --git a/txscript/data/taproot-ref/36a94d7bc5dc9af664df029d9cacb70d1662178f b/txscript/data/taproot-ref/36a94d7bc5dc9af664df029d9cacb70d1662178f new file mode 100644 index 0000000000..d8a986b607 --- /dev/null +++ b/txscript/data/taproot-ref/36a94d7bc5dc9af664df029d9cacb70d1662178f @@ -0,0 +1 @@ +{"tx": "e40f700a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5d01000000e6a4029260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708d00000000b040e98602ca483700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72b040000", "prevouts": ["7b45280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2d0d120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_60", "final": true, "success": {"scriptSig": "", "witness": ["be007a4e43895b378db7bcd4461d8c69ace0ce7fd51d0cfdbdacc69ac4e742321e220ae6597c6a425a15f621abb7aad75636ce79d1d8a63a3446f3f8fb921e6881"]}, "failure": {"scriptSig": "", "witness": ["a9574ec4f482f856bf12b749da5c724444abe5e5e99aa9fbf424151d0089dac86fb575cc267a9769644acf5ec84080d9c5d6f56687885a6548bf37baa825ca3160"]}}, diff --git a/txscript/data/taproot-ref/36bc60267ff97612610797a43fa5e7b371687229 b/txscript/data/taproot-ref/36bc60267ff97612610797a43fa5e7b371687229 new file mode 100644 index 0000000000..bb1c215eda --- /dev/null +++ b/txscript/data/taproot-ref/36bc60267ff97612610797a43fa5e7b371687229 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e00000000082a1fedbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b040000000078251ec4037e9167000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac33248d4d", "prevouts": ["aec841000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "e5c4280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "867d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936926f2b50f3fbd9ffe22dc41af4426bcb82a03b8aad9cfd0cba46d108de7a4ac73ac108bed01ff7a3c4482bdb9637a0c08eda3eca9d378124f08be0fd1593c53eb98f84b0d7d6fcb38bca0562970da4fa4ac9189daad947902c07179846baca90"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f28332fff4e521a34f62a6094c9ca083df763bc212ee1a103146f1ea11bafd96b069f256e7b53185a64c953a8831f99a2248244dec917c9fc219bffc52b204f"]}}, diff --git a/txscript/data/taproot-ref/36bd6cf68074e03b5642284ce7d493af28e048a2 b/txscript/data/taproot-ref/36bd6cf68074e03b5642284ce7d493af28e048a2 new file mode 100644 index 0000000000..c966424c68 --- /dev/null +++ b/txscript/data/taproot-ref/36bd6cf68074e03b5642284ce7d493af28e048a2 @@ -0,0 +1 @@ +{"tx": "4013c48c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6201000000bf7eceeedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca901000000a70f748001caf00c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac9a82d82a", "prevouts": ["164228000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "eaa954000000000017a91439ec132e1466f40f0086baa7ac253013e83c7dc387"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffaf172eeb05afc6853709009cf0d3b6d15c8aef7da615bde3873221decaaac449f82d663a1e447420f2cf05179af13964281439b8b427a6cb4b09af5b0cc1910a67b80b81ed02a57999348bdd390384d424a2522cd0278ffab5313e035bd402791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045360c8600b70daaa5cf8f525cd2d4abcf69506a056a119fd926e23bd8684708da0a67b80b81ed02a57999348bdd390384d424a2522cd0278ffab5313e035bd402791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}}, diff --git a/txscript/data/taproot-ref/36c7fd31d411d45f3d03143f9a36158791a29660 b/txscript/data/taproot-ref/36c7fd31d411d45f3d03143f9a36158791a29660 new file mode 100644 index 0000000000..29aaaff465 --- /dev/null +++ b/txscript/data/taproot-ref/36c7fd31d411d45f3d03143f9a36158791a29660 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2c01000000a1ebc3e504f5da1e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac66000000", "prevouts": ["3858210000000000225e202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["b118a16a7c37649018445f821f07443fcc9bed7e28a4df387e18cbfe4f1ec41ba81f27a4055bdc437628c8c6f9c25381e0f582bf5b351b1c66d6d310404a4c07", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/36cefffcad6493e933315f78db381ff7ecc43bfd b/txscript/data/taproot-ref/36cefffcad6493e933315f78db381ff7ecc43bfd new file mode 100644 index 0000000000..97c8f3e02d --- /dev/null +++ b/txscript/data/taproot-ref/36cefffcad6493e933315f78db381ff7ecc43bfd @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6d00000000c3f473d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf60000000080c431b7017add220000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796f31d0d46", "prevouts": ["61587600000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "76ed4f0000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "fd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e850656d0bdb94b88d381f7a82b87984f770e250bf999894456706d2524183d15d62d72dd1cd8804fbc0be1dcf6a22214dbfb5210e6cde6f2a41edfb954edd50fb"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93648de95c4bfc2b10e0b5b509c1c28dbcea1b51ec6e9d986bf948a619cc01a5e2a50656d0bdb94b88d381f7a82b87984f770e250bf999894456706d2524183d15d62d72dd1cd8804fbc0be1dcf6a22214dbfb5210e6cde6f2a41edfb954edd50fb"]}}, diff --git a/txscript/data/taproot-ref/36db1eaf5e186f36042dd8afeeebfabe675c620a b/txscript/data/taproot-ref/36db1eaf5e186f36042dd8afeeebfabe675c620a new file mode 100644 index 0000000000..10b5c0eb08 --- /dev/null +++ b/txscript/data/taproot-ref/36db1eaf5e186f36042dd8afeeebfabe675c620a @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5f00000000392891fa03dd4e1c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48725e0654e", "prevouts": ["98d21e000000000021571f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["bc14b9cc54dcd0d113ada2eefbf6fabd4511fcba5923dff3c44b88c1b06bddf574cd80d1110e2cbd1bc459f4f3b0bf4b81ba3001b188d703c2400398343c347b"]}}, diff --git a/txscript/data/taproot-ref/36e7b1c9920f0e9a7c1c52c380c61f6b44246ce8 b/txscript/data/taproot-ref/36e7b1c9920f0e9a7c1c52c380c61f6b44246ce8 new file mode 100644 index 0000000000..5d71076be2 --- /dev/null +++ b/txscript/data/taproot-ref/36e7b1c9920f0e9a7c1c52c380c61f6b44246ce8 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce501000000881946a160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270870000000050efa3a7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb100000000ea994684043ae79000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487046fe641", "prevouts": ["b8fc5900000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5", "d298100000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "290d290000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "e07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366a34314d49dd780a407fa75b4326be002152b42e0347e780a2c6960ad067bedf3bc00f369fc994f47536ced64d5e4f722a68c2ed1128957c24de4b5158af0ec63ccd0bea79832f66dcec0cbfd0592e3eb2d999b46ac697170d667eb8939a9687"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd73d9d375b530aa22fee240902ecc7793689bdebd58e9771ff3d6e92b1aa7f5c13ccd0bea79832f66dcec0cbfd0592e3eb2d999b46ac697170d667eb8939a9687"]}}, diff --git a/txscript/data/taproot-ref/370f93aec0042473af8eda625b8e55afa266cf0a b/txscript/data/taproot-ref/370f93aec0042473af8eda625b8e55afa266cf0a new file mode 100644 index 0000000000..94f421d402 --- /dev/null +++ b/txscript/data/taproot-ref/370f93aec0042473af8eda625b8e55afa266cf0a @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d4010000004448e7b2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7e0100000089d641a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a0000000083a09fad0354caca000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acfa030000", "prevouts": ["5e70100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8e686e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d1414e00000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_79", "final": true, "success": {"scriptSig": "", "witness": ["68e2f257581e84c6f9db8e854b0819e47d32393ab66b3d2e241d05dfe5644d274f787cc0b514c60657514693aea2da275941b2656801468ae0f76b282fca837502", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["6cdf3a7f7d2142f98f64f3a1e1a2e2392a4b7314983aab1a2c95ea317742c0333168797dfb82249cc68846b2b8a2bba88de4e932a5a60ebac9d459ced3c8dcd679", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/3711e5aa1c94f1b0f835504e4dc9cfac933f247d b/txscript/data/taproot-ref/3711e5aa1c94f1b0f835504e4dc9cfac933f247d new file mode 100644 index 0000000000..f95ed901a0 --- /dev/null +++ b/txscript/data/taproot-ref/3711e5aa1c94f1b0f835504e4dc9cfac933f247d @@ -0,0 +1 @@ +{"tx": "7f02f66c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701001000000807656f68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43a000000004a3e6fa701c6143f00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd3010000", "prevouts": ["bc16110000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "a79a400000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090238aac846cef107dcfe5b06d54f7a835f803b8f46e9bbfd86772e71fca902bbaef77735fe5859ac6121d74cfb39179104ecceab851f1b7aac77d10ec2c713982da98749799b0a605fa46aeff5b6cf7705a70ba64133eaf44a2723dcb162d2c8a6bd696af167c2a62fad5c89d3f27ee0b5a5ac111549d7a09c84e7ec84a6e0dc828bacef37a198c4f10b47b0be848d318b02aecbc2a49ddb9063a855e1a8d04101eae0154d5d57af82f22bb1ea2ee1b98131867e796552145f42cd26018f13eadd2c8e0785663de4caa6f8f7a956712cceb704f4b39d5621bbde0c85e1b6e56b96c826e0b5f5d6303cb9c5e9918551913bd26ecd7b77d119d5985655ced9cd8abc8f7d2b7162eb8dbdb504c3afe009ce8e010fa2bb58d136094f1a955968db6f563c8587d8d1eedd183918a6fa2e0b45b2076d3eaecf49ceead718f6315c2f9177ff62f9488478da13d6ab1eca9ee10dc36b875b807aab1b8086aa564a39e2447b233133bfc8438da324c38c252f2656951623ef0d96cd8c3e71f7b5df7816c96ed987dca87c955a1ab9da9b45208e24f9d422141b194af646606209b0a7cac9b3e640760ce4cfc6cd40b0245825cd73e47028eaa55953680728c6be7395ea409248d069170a6106da7351f3dc37c3ce475d0365b380e0d6f50aae1f37324b5fd3e500766961a3e487db20a19844639df06065c9c22bee111599978607db5aee0b84bc90f821f7eec7157585", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93655a6e6bedacbdfd967c24f4020a4dae166c9c259a03b3ae16ac1a87dc32929381ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045952384bfcd198c969b60204543b8b578741ae3068409132e955e5c7af181f3d3734b3a7050eee065844830ad8d45a710891f78004f5e7f35b8fd72bf3ee94449"]}, "failure": {"scriptSig": "", "witness": ["4d09020a3ca49792f29cf339b8b3a8faaf531d4c2380b2466dee6102aff920557b65a1adcf05f51430b694be7045ece13921851be291038fac1ae725fae16218a8395489b659901af584ccd3fae26b52119d7395fd03b9573f21de0e4ab692fc935defdd8a8b510ecf405dc4112101ebad92cbdf603c211fd95cd9f12c1237228a37236a414f62204aa9125fead9116dbfed6f162712f9a2af18c9331ece4814db23f9c0fcc717581e62650dbb8dd85c8fa667416ab73f932a83d22cbcb9abdb2a49c84fb41ca764f1fb89628c3b7e82a39df6a12b9fbbfee836cd66fd1111323afb155ca7a625bb59cd3c0386c9bbb0d1431b24281500b89b0192240b61188c052a84265904815ac5447b7a56d368da651ebd6d0fe8ee39c4c655b2a997071befc5282c806e9fe3abcf8066692b8fcba4e12d3ddaf40ec146855c29d86ce1c765348f8d95969f28c9a312b44c61ca29d7ba97aee06d4bbb74d3539441417b29ff9e4d965003d1ec5118f2cfca86726fa8b0cb4eda5d730b9633a5c5e822749832699ae95892bab2cc6d7ee570c6963c1b04e776db2b1bb6ba1a71336df225e58de6efbb786989bf34ce30b5ac8340e521cae7c1f43d638ecea3d3d4de6ec90107f844919c4103f486be7ccda29866e4537e62656b18b1345f91d2708d158f0d7165a26a9913874570728d95c087b072e1b936743b0c85c1be53de3a0051c0404bb813c6f638cb56a42af77a7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cc8c0c7594f9800c68bdab4939f24615b278fe3bf8441cb0c501e2d28dbdb31cd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51f1361648aec2fada6693d9b39e398a39a20a7ec02f5f37d94bd6d3a28893e48e1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}}, diff --git a/txscript/data/taproot-ref/37178f03fde09a06a32ec4e778874ec6ff11c8c3 b/txscript/data/taproot-ref/37178f03fde09a06a32ec4e778874ec6ff11c8c3 new file mode 100644 index 0000000000..bd489d4d0c --- /dev/null +++ b/txscript/data/taproot-ref/37178f03fde09a06a32ec4e778874ec6ff11c8c3 @@ -0,0 +1 @@ +{"tx": "56711c2a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b55010000007a913ec4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccb01000000598666940321156700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac6c010000", "prevouts": ["f4382000000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e", "6595480000000000235a212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["11a3d09719fcca2565f6327fcabf0ca212fe094dce436586689b4974f57f1617ccb5deae62d77f37fa23314a360daed67993799d4f7c07e68efe09d1c52fd2e1"]}}, diff --git a/txscript/data/taproot-ref/3722cdc62a8920daf88999d381d42a7424417843 b/txscript/data/taproot-ref/3722cdc62a8920daf88999d381d42a7424417843 new file mode 100644 index 0000000000..49207e2a8f --- /dev/null +++ b/txscript/data/taproot-ref/3722cdc62a8920daf88999d381d42a7424417843 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c98010000002f66bab2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9901000000f66711d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf84000000001a4b64da03373c3901000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac8e020000", "prevouts": ["d1295e000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "7c9879000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "e9a063000000000021541f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["8ebebe2a7fa1a40637b1d39a565324cbb6d10bee6139bb959795df334617057c6e72ecd601dc2b3ffb697171f3f7e380b907435292fd3efe07d08431bd0845e6"]}}, diff --git a/txscript/data/taproot-ref/3745a800a4b496404473a26dd593f84588194471 b/txscript/data/taproot-ref/3745a800a4b496404473a26dd593f84588194471 new file mode 100644 index 0000000000..2d944437c1 --- /dev/null +++ b/txscript/data/taproot-ref/3745a800a4b496404473a26dd593f84588194471 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e00000000c57d4392bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4d0000000052ad4c7c030fba7b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8b92b750", "prevouts": ["9f611200000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5", "65ea6b00000000002251208b7fe9d4f09d2d8e7a4070c707b9c580ba6935dccb7bf02b3c8420577f22e1d4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ed", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900453e4c13dfee647a17f9595e8b3c65969e7c880cfffed6449fdebc16325bda3bb094cc415af9f84001a6feea45646803cad285186914838c4558edfc97d3166e78fd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361516cb28afaea3109ac1b2a6be9ee9c1349c985ebc1f094f91933a3c30e1118979a506f75037c50a9ea9c509d8c41e46c95fdf651773b41e5feb3da8f515025ffd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}}, diff --git a/txscript/data/taproot-ref/374e3814357798251b0430dc4cfb9f212c1dddd3 b/txscript/data/taproot-ref/374e3814357798251b0430dc4cfb9f212c1dddd3 new file mode 100644 index 0000000000..f78da89652 --- /dev/null +++ b/txscript/data/taproot-ref/374e3814357798251b0430dc4cfb9f212c1dddd3 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706c01000000ba310ba08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41100000000bb14c6b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b42010000002e7adaf704ccf9680000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987d84ad23d", "prevouts": ["3b2c110000000000225120e0fbe9053c6d2a439b1df3d9c89ed0e68b8279a92dae6907e23437dbb3b4029a", "a9cc330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6891260000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "success": {"scriptSig": "", "witness": ["bf547b49954bc50d0726baffe4902a07de414bdee0da2e167e9afad61312c1f45a986e2212a999b32a35e1e8cf7353b8c6d8e90b0efdebf9415893ea2f7ff7ed01", "057e4421e4452c4b7f376dcb03157853348c23cf7b32b1c447a60346de45229034e56168d2cc2d47a1162cda1c03108db0730de5b058866954418c066bf059c81a5ba2479a9eb079ad0038f0350648", "753535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a26ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93603873753c288255b908fdaadf531bc1d68ff88416a14514d21f880f381496ce6109f3f9fed7a7850479575fe09819c514312532a101591e70b3ca7a41015d315abb6d11f6afe1d94d9d9f8c365772775719ce7effb301ae3ad4c4b3953942c9a173da251af8551a60e870972ffb93c31d944da40128e84f75b2100254c09f1b4de06e3cd6f3b0b209a8fe563fc0d7d5531bbe10145b72019ee6951325ead69740e6aa5d2a3313b034bf7c50dc92f197b6f924bf5d188e80f7e83cc6b1df9a9200000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92bc58659211a4beadd8fa11a9845ff332b73538a93df84322b83e2be6806aec4a61dabd15e7c32b6ea531d34a692667bed8d7204672e2f2f1175218c050f78a3171dc5c5350b795a66ce38c1722adcba1fc40ef925faf53527faa391efe98bb3a827d6aae010ac333a59a738f4411490fa0ed048e3c7afb8a22b835690661deffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc817f1a371e950a12722586a5229873fcf0aed07489c9e7da60a05e7299def8194ed79115f02ce018b07d4bed9adffd7b00af1ea21eb1006ef232ab168648ba44c4c1787758d755a6445f19dd41348f06ed1b0f8a96cc9a729e5fe6ebc20288a3a2bdda781484822fd984a6a476ae7a39923a558edeba7b039c0d3c8536b086e0000000000000000000000000000000000000000000000000000000000000000976851de7870b0dd0dfc5cf582c477ae966ecdcae30037866fd3d0fd03f206e173dc23d909d6175f94b12ab45f393f9fe7a6f3281c8997a9ae1bd4f7db60083c4eb455c7273b5f737b59d0edaf7c9e9cb4a21445e45d447adb0b9139880e08bdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ae5a10d69adbf68cf45d94a7b63f55ee963a9d6bb6dfbb0ee85755a753bde2b5d299b1ba4ccae6aeec9e68e19e2fe8f4070fba2d6c319364523390600be50900718f0e3bc67fdfe6ca4a65a01208d4725c4d9dc6e4c76e45eafc218680aeb39f2e83e2744d4c42c6dc631532134ce32363bdcfad46e7021c6ab562ad02e139f383757a2116a3f40f905ccca878b1151065c4304d44d7214775e69609d520ca72461690e1391a8c20a93f0aa34b30976882eb1aa32ab6d73c80d9cec2dc39c1aa55fda5fd77e4d7054b3d01ddc184a8a78b5d438cb71b048410f6673f5ed219fbdbb454d8a8c8facc9f3d363959565a3c3ca6c0952d6b13e55d66c0853030d9dbecbdded1aa2df877d9cfa28926ae570873cb1f411227d40f07bdd07803ea1b289167b641608c5b160857f960f8f014662a6455b25d4e20b21aee6545b5dacfcf1cdb5a27ec69ca29264ca65fb287c293e794fec15ec0cebf88e6eb59f062821"]}, "failure": {"scriptSig": "", "witness": ["bf547b49954bc50d0726baffe4902a07de414bdee0da2e167e9afad61312c1f45a986e2212a999b32a35e1e8cf7353b8c6d8e90b0efdebf9415893ea2f7ff7ed01", "3436c6e08ef4187db8091d942d4aac3619e3793a65bf66e411cfedf9b9dd145df699e5f536a0ddf39c4a754d3c5a74c5db6445381f4ef02842e426775f7fadb1f6d8e807ac8595c61760d5055d2c", "753535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a26ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93603873753c288255b908fdaadf531bc1d68ff88416a14514d21f880f381496ce6109f3f9fed7a7850479575fe09819c514312532a101591e70b3ca7a41015d315abb6d11f6afe1d94d9d9f8c365772775719ce7effb301ae3ad4c4b3953942c9a173da251af8551a60e870972ffb93c31d944da40128e84f75b2100254c09f1b4de06e3cd6f3b0b209a8fe563fc0d7d5531bbe10145b72019ee6951325ead69740e6aa5d2a3313b034bf7c50dc92f197b6f924bf5d188e80f7e83cc6b1df9a9200000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff92bc58659211a4beadd8fa11a9845ff332b73538a93df84322b83e2be6806aec4a61dabd15e7c32b6ea531d34a692667bed8d7204672e2f2f1175218c050f78a3171dc5c5350b795a66ce38c1722adcba1fc40ef925faf53527faa391efe98bb3a827d6aae010ac333a59a738f4411490fa0ed048e3c7afb8a22b835690661deffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc817f1a371e950a12722586a5229873fcf0aed07489c9e7da60a05e7299def8194ed79115f02ce018b07d4bed9adffd7b00af1ea21eb1006ef232ab168648ba44c4c1787758d755a6445f19dd41348f06ed1b0f8a96cc9a729e5fe6ebc20288a3a2bdda781484822fd984a6a476ae7a39923a558edeba7b039c0d3c8536b086e0000000000000000000000000000000000000000000000000000000000000000976851de7870b0dd0dfc5cf582c477ae966ecdcae30037866fd3d0fd03f206e173dc23d909d6175f94b12ab45f393f9fe7a6f3281c8997a9ae1bd4f7db60083c4eb455c7273b5f737b59d0edaf7c9e9cb4a21445e45d447adb0b9139880e08bdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ae5a10d69adbf68cf45d94a7b63f55ee963a9d6bb6dfbb0ee85755a753bde2b5d299b1ba4ccae6aeec9e68e19e2fe8f4070fba2d6c319364523390600be50900718f0e3bc67fdfe6ca4a65a01208d4725c4d9dc6e4c76e45eafc218680aeb39f2e83e2744d4c42c6dc631532134ce32363bdcfad46e7021c6ab562ad02e139f383757a2116a3f40f905ccca878b1151065c4304d44d7214775e69609d520ca72461690e1391a8c20a93f0aa34b30976882eb1aa32ab6d73c80d9cec2dc39c1aa55fda5fd77e4d7054b3d01ddc184a8a78b5d438cb71b048410f6673f5ed219fbdbb454d8a8c8facc9f3d363959565a3c3ca6c0952d6b13e55d66c0853030d9dbecbdded1aa2df877d9cfa28926ae570873cb1f411227d40f07bdd07803ea1b289167b641608c5b160857f960f8f014662a6455b25d4e20b21aee6545b5dacfcf1cdb5a27ec69ca29264ca65fb287c293e794fec15ec0cebf88e6eb59f062821"]}}, diff --git a/txscript/data/taproot-ref/375599a0689231a316462d64f42ec6b33ccca33e b/txscript/data/taproot-ref/375599a0689231a316462d64f42ec6b33ccca33e new file mode 100644 index 0000000000..dec48caa1d --- /dev/null +++ b/txscript/data/taproot-ref/375599a0689231a316462d64f42ec6b33ccca33e @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be50100000063a870e860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705a01000000ecf01f0a0126bd150000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c32f391f", "prevouts": ["821b2600000000002355212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "050211000000000017a914a4e57198280c195671631f8b9014214c2f083b3c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2260202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["55db540a25196391be2d65ae0003c1f649c60f07711f400f13c53bae7ea5ef0981d564739cece5df3646e9f1aa33842655e984da96aac911801425ddaf0cec6b"]}}, diff --git a/txscript/data/taproot-ref/3771c3d9e542f846b3c206c6719246bde5cb472d b/txscript/data/taproot-ref/3771c3d9e542f846b3c206c6719246bde5cb472d new file mode 100644 index 0000000000..075a5ca9cd --- /dev/null +++ b/txscript/data/taproot-ref/3771c3d9e542f846b3c206c6719246bde5cb472d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf49000000007d987b7260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270eb000000000aaa262202847d7500000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac22010000", "prevouts": ["8e0b6800000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "b7e20f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4eae6bd6f52ba0e132a99199dd52ce9219533a45594ec0ae315984b9ce8f4516684d91d6a25611b98f9525cf8030045f0e379e1e6360450dcf32f11d35fa349c2fd9879a2ee2ae7d76224c991edc718b1729f7f1922f570a67a21926d2cc48d"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f46ef7c73612c270119b2372d340af405f58d8345e16456a531c474619d8ce41fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e26684d91d6a25611b98f9525cf8030045f0e379e1e6360450dcf32f11d35fa349c2fd9879a2ee2ae7d76224c991edc718b1729f7f1922f570a67a21926d2cc48d"]}}, diff --git a/txscript/data/taproot-ref/3774905200290499adbbac9b674c43b82c3af04d b/txscript/data/taproot-ref/3774905200290499adbbac9b674c43b82c3af04d new file mode 100644 index 0000000000..0828d764d5 --- /dev/null +++ b/txscript/data/taproot-ref/3774905200290499adbbac9b674c43b82c3af04d @@ -0,0 +1 @@ +{"tx": "5fbef0bf0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e4010000002fbbd3ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702400000000b17fc38b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4020000000022f32a9201149c1700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6691b05e", "prevouts": ["0bd8110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "02e3120000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2", "37553d00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b1", "final": true, "success": {"scriptSig": "", "witness": ["2ce88883ae23b521d480265d741aa13b4b99b2c417116be02119435a96e0d178b86c39ed0c550f3362b4ad4212bef0b2e0c1f06cbea9c9c12ce924a65e25aa4881"]}, "failure": {"scriptSig": "", "witness": ["62b0ad91da6bc00cc47a6a7b5e44ba05b57d486d00ea2523ca960328e47b22c8706f48ee3dd242341ba5c1c899ee487160feab52e87fa32c3f8a03dfb40e4735b1"]}}, diff --git a/txscript/data/taproot-ref/379b89135a99972794096065de8e1072473b7cdf b/txscript/data/taproot-ref/379b89135a99972794096065de8e1072473b7cdf new file mode 100644 index 0000000000..a84e2012e2 --- /dev/null +++ b/txscript/data/taproot-ref/379b89135a99972794096065de8e1072473b7cdf @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b700000000eb5b4d300435280d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac97030000", "prevouts": ["5624100000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6acb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5112ea1c769bf4ed96f58121c83502481562485a40fea0bf2693d01f3a88662b8b1937db199a07e1996385ab03857d8e2ee63e136796e4b408281aef544a937c0c73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93671214783dac4295bfd807e673d52a384d4e362b63aa9a14af3c4920cb220748712ea1c769bf4ed96f58121c83502481562485a40fea0bf2693d01f3a88662b8b1937db199a07e1996385ab03857d8e2ee63e136796e4b408281aef544a937c0c73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}}, diff --git a/txscript/data/taproot-ref/37a26cf98e0cb201f2e241d6a41e267821078fc2 b/txscript/data/taproot-ref/37a26cf98e0cb201f2e241d6a41e267821078fc2 new file mode 100644 index 0000000000..0693a054ca --- /dev/null +++ b/txscript/data/taproot-ref/37a26cf98e0cb201f2e241d6a41e267821078fc2 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6a01000000d4b6778c01ea400700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac3942b943", "prevouts": ["a87e280000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "d67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb1986d7e8e27273be987a3f59c249d736830c7b6f9b487df38f4ee68bd2c5d06630d95c26588949f1b3ae4e4e429080b434b995fa18047406852c727cd9e6feb"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630ca117f3a3f5d0edabc733225eb4a624a098c8f44ec26e7a92d0c8239372396e4fd5de156dec52418d0df8cecdd3495838e4d1d1b80598a34f381ec5024e2c9bd0211bc754da142cb3564162304068e34e33074851a6380a45a2a3191e3f102"]}}, diff --git a/txscript/data/taproot-ref/37cfd491e753f20291c4606a4bb007cf1aa69eaa b/txscript/data/taproot-ref/37cfd491e753f20291c4606a4bb007cf1aa69eaa new file mode 100644 index 0000000000..d1ca25762b --- /dev/null +++ b/txscript/data/taproot-ref/37cfd491e753f20291c4606a4bb007cf1aa69eaa @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e02000000912e21dfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9a0100000031b47cf98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4980000000092ee46990448da0101000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd8010000", "prevouts": ["ac7a4e00000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "3b7a79000000000022512065eb0ad8f24d6d8eb63c7f85eaa52926e45dd0588dc97971df796ca5c67918e7", "18b33b0000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ff7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f59f882dcce043ab5273f79d0d152c35fae0f251a6812c7f2d3daa07c20029a516c082ffd0388de178727289f9edc245ed8244bc4e4186d1c7a66ea621fec0ad"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362bd3a471ee044d9d1aa58d9f4f966cc5745c7ac5592ed682143181a0f47efc0bcba978c9f8bb8ad08bb333d68e8bfcd03859985a79755d391cef5d6f406deb57187b9e30f7e626b28b6dbe2d7b101f74e326290698090dbb0a7eb7a50daae87a"]}}, diff --git a/txscript/data/taproot-ref/37fdd34d221df947a4dc6a40f91fe044f88c8ca2 b/txscript/data/taproot-ref/37fdd34d221df947a4dc6a40f91fe044f88c8ca2 new file mode 100644 index 0000000000..5ec5b0a458 --- /dev/null +++ b/txscript/data/taproot-ref/37fdd34d221df947a4dc6a40f91fe044f88c8ca2 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c5000000006242d66edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd601000000ddd1212b04e58899000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb2000000", "prevouts": ["26f83d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "36595e000000000017a914856f7c6a5a6a1ac0e553b769a4c35bcb9fb6f50287"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2353212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["20b89804e90837e9dae02d7437fa3f983016fe8a2e1e34e1bf5c5f8b58315efec2c51214a9a3dd71eb0d1b24b1cbd3564045a6b128679dd391a8647ac3469548"]}}, diff --git a/txscript/data/taproot-ref/381cf7c5a9c44f989bb97ebca54137b24a0c5102 b/txscript/data/taproot-ref/381cf7c5a9c44f989bb97ebca54137b24a0c5102 new file mode 100644 index 0000000000..8edba384b4 --- /dev/null +++ b/txscript/data/taproot-ref/381cf7c5a9c44f989bb97ebca54137b24a0c5102 @@ -0,0 +1 @@ +{"tx": "64c16f4c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700900000000414b74a060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700d010000005c64f2b20470e81c00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc733000000", "prevouts": ["d259100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "40f50e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_54", "final": true, "success": {"scriptSig": "", "witness": ["5439d7332f467f04095a4ce246f4a56e02d8d830afe42a61b7b5b06e6b2f4bc600fec9385c9ad471c115b070607e613deee2c0592220f954a84827b42f8904c2"]}, "failure": {"scriptSig": "", "witness": ["b940d74f3172475f5b8173d396b319e2f9d669d27321a5873b5b33d83561112ea32d3f55495b78d3e199ea220e88e46d7583d4888bc892e09ed4d3fa000d976e54"]}}, diff --git a/txscript/data/taproot-ref/381d7b2c554124f48f833d5bb44cb65d6a4e69ae b/txscript/data/taproot-ref/381d7b2c554124f48f833d5bb44cb65d6a4e69ae new file mode 100644 index 0000000000..e27f0ff083 --- /dev/null +++ b/txscript/data/taproot-ref/381d7b2c554124f48f833d5bb44cb65d6a4e69ae @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfad00000000a2a222a28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40602000000952b84bebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0c000000007b93a1dc01c8cd08010000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487078ca733", "prevouts": ["be076700000000002251206e4088e3ab3053e34fa9f42678349f51acfd745de3b6b8ba599a97db56ef8c25", "59dc4000000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "0d6b780000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "067d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93637a925bc8f704cad671189518c9abd151e4193d3e419ccb499565ec7319392f89a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ed1973e93f7ad3f562801731a237f358bfce42fb636b2a0dab3a823989e87b4ae"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2edee9d6f4a8cbfbb4a0af0dddab94d753895c3cdd7995db9d6f3e266cdd0bebd1973e93f7ad3f562801731a237f358bfce42fb636b2a0dab3a823989e87b4ae"]}}, diff --git a/txscript/data/taproot-ref/3849d609dcd2299e85caef8d7aaf0dc4cbda60ea b/txscript/data/taproot-ref/3849d609dcd2299e85caef8d7aaf0dc4cbda60ea new file mode 100644 index 0000000000..20122c8f56 --- /dev/null +++ b/txscript/data/taproot-ref/3849d609dcd2299e85caef8d7aaf0dc4cbda60ea @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f00000000aee490c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4b000000005f173cce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703801000000fe1cc3f8014c7b3000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac9c041628", "prevouts": ["5139310000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "560c2100000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "d2ad11000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "557d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b85439bc36c09324b2f69ee8bbc5e2d848c6dcad09b29c0021348708068368e9c6f5bbec45690fe95363697d7c9a9077046b35079592ab1dc3c0638990956b6a4c5d50721208c85113b157b4dd4688510f63bd33d4c90ece0d9e0afcb8224b1"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93651741a4e3e2a3e44a80e6912aaf8177301e30f939f3b8b538bb3a1c1c4af3209283c6292a6ae3f7cd2fa90a42d11f5a54bea63a95cab37375097c35ac3f3911dda77d1c2cfbe9569ee5db2c51580a9857624040db9177af617be0771cc5b8a1b"]}}, diff --git a/txscript/data/taproot-ref/385fb0d2eeda5f4790eeab09a29ec612150cd115 b/txscript/data/taproot-ref/385fb0d2eeda5f4790eeab09a29ec612150cd115 new file mode 100644 index 0000000000..b21488bc59 --- /dev/null +++ b/txscript/data/taproot-ref/385fb0d2eeda5f4790eeab09a29ec612150cd115 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c00000000addaa5ecdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0b01000000d5f25f580315f46d00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acf284905e", "prevouts": ["41ae4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "91ef230000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93686e10009f826ae98be2091575903ddf7d5bec40ff77526fea2822b8bcaa021aa41d10d6c1f57e693407bbcd98ddd5bf64931b5565c89b36e50f161e759967c3e172c8da9bdd43b70cbab8912ef1aa7926e5ad7e47a4f7b71ac936200cc947dd0f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082716f66701312fe6b613a3a288c903128f650d73beac5c480044fdeaa8466574a9dac82751ef42f4155e8d0286eb609cd4bc8c8b3be93c107754fe282612bb362f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}}, diff --git a/txscript/data/taproot-ref/3862864a68546884d4ae2ef7644d75b814fd279e b/txscript/data/taproot-ref/3862864a68546884d4ae2ef7644d75b814fd279e new file mode 100644 index 0000000000..e50cd5f941 --- /dev/null +++ b/txscript/data/taproot-ref/3862864a68546884d4ae2ef7644d75b814fd279e @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6d01000000b06dc58edceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4c010000002a7e2e9adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc90100000011c898bc0363a0a1000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a663000000", "prevouts": ["3c7c220000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "23ef240000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "d7255d000000000017a91498e55eac47e04767f832d50008ff18559102c9e787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364e1c80865788996a05c5a9f6b0900b0096f6056de983ef887886ef5950a10b0c0d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3ab0398bc4828dee75def1007ce877d708ab4ca86c9734bfab291d4bd05bae3eec1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4aede7f6feac32430a03a6fb4ca18c03b66145006034584e3a19904465ea1e66424cf807c4b041deab506320299ff116921971164ef72b2742896e58a89a98f91cdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}}, diff --git a/txscript/data/taproot-ref/38633120561625bae7ecb1c951acd585717ee56e b/txscript/data/taproot-ref/38633120561625bae7ecb1c951acd585717ee56e new file mode 100644 index 0000000000..fb38df49b9 --- /dev/null +++ b/txscript/data/taproot-ref/38633120561625bae7ecb1c951acd585717ee56e @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b440100000090a859b3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf91010000003771e53e030b83950000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d8030000", "prevouts": ["0817280000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "86656f0000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "", "witness": ["3044022034335162d737f158c7b3c25f5b5563228f612a7993a0bb0106e6c330fe32e537022004e8ceea10ee54e560a6c6f44459a98742d29a9cae1e7046d27a56836e997aed01", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["3045022100e78e92208d7cc2b5a9773c800e825f7ffc0f76077497e7bce6d279d89f75387a022018496549e67be8c0892bc711eeaf089a7166ee2caf0684f3a72e59f09c76403f01", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/387db60867784e48a23882557f34fd3e8df5fe60 b/txscript/data/taproot-ref/387db60867784e48a23882557f34fd3e8df5fe60 new file mode 100644 index 0000000000..7c63bc136c --- /dev/null +++ b/txscript/data/taproot-ref/387db60867784e48a23882557f34fd3e8df5fe60 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b340000000077941edf0434921d000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d3ec1d3f", "prevouts": ["8d7b1f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_1b", "final": true, "success": {"scriptSig": "", "witness": ["c5faeb9a347692f3a996631d94d3dd98f32295ddb59104cb542ed4f87b30b9a9d759815bef1affdb5bd2c312d659ac5eeb1fc69ea98787477d5ec772de0a113481"]}, "failure": {"scriptSig": "", "witness": ["e36505a5b181292a8650bca5ea7be6bee32cd9a15ad053212d1dee15c825ea1736a5dce27ff6ef989e028d31bd4b2ca27d54484fc7537c0446c34acb9cba871f1b"]}}, diff --git a/txscript/data/taproot-ref/38a77bbe28f3ce750b32c16df488eb5970d28d51 b/txscript/data/taproot-ref/38a77bbe28f3ce750b32c16df488eb5970d28d51 new file mode 100644 index 0000000000..9292e39dc9 --- /dev/null +++ b/txscript/data/taproot-ref/38a77bbe28f3ce750b32c16df488eb5970d28d51 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ae0000000047920cabdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5301000000a1ccabe104ac0f5b0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9e8d6f25", "prevouts": ["14790f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "910b4e00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_fe", "final": true, "success": {"scriptSig": "", "witness": ["8ba0e90615127c5d9ea667a5ba5c26b9f66f237978ad352924773ce4f1ebfe070d43b0ca019fbad9466159f4ecd21cdbd58cebb97d1f64945fdcf2350be04d8d83"]}, "failure": {"scriptSig": "", "witness": ["9bdb91e89dcbfb39b42a321d60edbb8319f12d05f9faa426ff7badfde3ba30977fcb1128f80e3fd4e90d401861bc4b6c4c85aae92226ba310d49fd85261a7f61fe"]}}, diff --git a/txscript/data/taproot-ref/38b2b86e0814487d32eb0a49aaa091c527c67a39 b/txscript/data/taproot-ref/38b2b86e0814487d32eb0a49aaa091c527c67a39 new file mode 100644 index 0000000000..1d26b0957c --- /dev/null +++ b/txscript/data/taproot-ref/38b2b86e0814487d32eb0a49aaa091c527c67a39 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf0000000009f8bce5d04818f1d000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df9797223689872aed5655", "prevouts": ["f2921f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d8", "final": true, "success": {"scriptSig": "", "witness": ["2aa16639104c78cee7439634edac568733e8bb275edc2ebfc43f6585b5b909bb413c02e57c3b029edb3eeddffbc9426a31f9b0c92cb8db331fd35df209edb1d7"]}, "failure": {"scriptSig": "", "witness": ["c68a740536f42dd9506b682c99896b8c2c5b85fe2341890dc9ebd9a6fe897378677f0c4e15efeb53375353f8a1d9c6583bd18c6d7fba3d92b7deaeaff5faf680d8"]}}, diff --git a/txscript/data/taproot-ref/38b7d993272a54c03a7adb7a046e8485546ebd0a b/txscript/data/taproot-ref/38b7d993272a54c03a7adb7a046e8485546ebd0a new file mode 100644 index 0000000000..c82f36382e --- /dev/null +++ b/txscript/data/taproot-ref/38b7d993272a54c03a7adb7a046e8485546ebd0a @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43b00000000ae08b4eadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c51000000007a44b5c0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b640100000061c4ffd403bdd4b60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac57010000", "prevouts": ["f0d03b00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "96d759000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "3c68230000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a8d", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9b0461d232ca8cbb85f9cff4edce544795cd9e38a4d0e90220b3cc21716164820e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b25240bc46c035392207c1076e816011b96fc57f286e81391f52d072a1ebea8b62cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb488d314ba4ab03912e470cb461a645c9914779a4907e0bafc42fbc04fe8b44a37185c953dbf0a33402e724bbb72e47d874a897a0941d53d9706dc82e2e14efc19f43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}}, diff --git a/txscript/data/taproot-ref/38bce0395152e8d2a60a95b4642bf3700934e4e9 b/txscript/data/taproot-ref/38bce0395152e8d2a60a95b4642bf3700934e4e9 new file mode 100644 index 0000000000..5a34ec9f72 --- /dev/null +++ b/txscript/data/taproot-ref/38bce0395152e8d2a60a95b4642bf3700934e4e9 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f80100000079124b848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4320000000067ebebe7049dfa440000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a666010000", "prevouts": ["2ceb110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9c753500000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ed", "final": true, "success": {"scriptSig": "", "witness": ["9274ac3e0212f0c0646326e538e9bb9746925b878e92d6ef93ceffc41a6bd160763e2f55764446188879bfeb643cc0328d99caf8fa2e628b62fec59f99c8fedb03"]}, "failure": {"scriptSig": "", "witness": ["f3d479d4e56ad59dec938dc0253f1dd338753b740fd1f9c836f4fe34b86139c9a255aa3f21ba6fc48bf682df4af4f2e0926dfa53c82f038fcbe6eec1c6560afded"]}}, diff --git a/txscript/data/taproot-ref/38cd5b3045252d1ad4ff3cad40d838874891506c b/txscript/data/taproot-ref/38cd5b3045252d1ad4ff3cad40d838874891506c new file mode 100644 index 0000000000..09e7bbca09 --- /dev/null +++ b/txscript/data/taproot-ref/38cd5b3045252d1ad4ff3cad40d838874891506c @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705e000000007f3b89fe60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127009020000009be7daae0426b41e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7968bbbee5c", "prevouts": ["67bf12000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "58640e00000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "4730440220543ded75984f10631c547153e668339318316b46a6acdc95b72565db39cba06102207bd76bd6095de8a6d7d49abc9874100ad9c264dab5e542aff87f9fea8824389f822102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "4830450221008e236e8514424afbf80254518324c97bec4a1c1d931f1983b1db672606f3981002207ea1ba5c64fd50d1b4e97d729fe5a0cf08253ea0f7c2480ccb11ca60ae682bd0822102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/38cf290b09eac905ac4bdc5ffd7fbeb55b28d0b1 b/txscript/data/taproot-ref/38cf290b09eac905ac4bdc5ffd7fbeb55b28d0b1 new file mode 100644 index 0000000000..0944278103 --- /dev/null +++ b/txscript/data/taproot-ref/38cf290b09eac905ac4bdc5ffd7fbeb55b28d0b1 @@ -0,0 +1 @@ +{"tx": "a804d40e02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b96010000007c2543a7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfb00000000e7fe5fb603e9bb46000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79609000000", "prevouts": ["332f26000000000017a9144370350f30aa8f875e3d2a13be81f25f19bf1a6387", "6b2623000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "165b142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["ec464e0adc042aec0c2faacbf02be14e36edde4da057690d617cb47dc12d8b7ba4531947887a1c1a8f04971eb2b5b269db89a657828cdc1823307d26652693f4"]}}, diff --git a/txscript/data/taproot-ref/38fa5cb2147069b9e33e21d621935d45486c5345 b/txscript/data/taproot-ref/38fa5cb2147069b9e33e21d621935d45486c5345 new file mode 100644 index 0000000000..bb86d6d625 --- /dev/null +++ b/txscript/data/taproot-ref/38fa5cb2147069b9e33e21d621935d45486c5345 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9b01000000744771be8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40100000000c8bd0fb801d2b675000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c37dd022", "prevouts": ["f61b7b000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "8dc2360000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_24", "final": true, "success": {"scriptSig": "", "witness": ["199a4a926b83803513647ea69935f13837f11bc1a627235ff4df4609f3bc7b25187093e20c26621b83142edcad4473094b6bc3e7e566975c20b7b09cf23ce4ec02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["11857143302617a4e0e926197b5d993695d4ab736d03ce678f550cceabd099a4fa044e495fc36a0ae89b476a2668705dddcd95435b05dcf9ab2175d4dbcdf04424", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/39016f47ee6449811c8a18548ba14d36d60f1a15 b/txscript/data/taproot-ref/39016f47ee6449811c8a18548ba14d36d60f1a15 new file mode 100644 index 0000000000..52b537f7e7 --- /dev/null +++ b/txscript/data/taproot-ref/39016f47ee6449811c8a18548ba14d36d60f1a15 @@ -0,0 +1 @@ +{"tx": "85324522028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47f01000000b61021addff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4e000000006b4b3e8303a56079000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7cfcfce3d", "prevouts": ["153b330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9946480000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d9", "final": true, "success": {"scriptSig": "", "witness": ["b58ef2299b49b53498f3dfb343bb0147fdfdb16bd8f72099145e74a58299f7f28aa78acd40e2ca3fd7752d6b8a4c6837804f400f27b31cf02f81d77c1c3c70f403", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["12c9d1142090c955e04a1e837957073fbf4a1b811b4103f6875742b7efe793ff244c751da96c6c4d7db0561c824a216d184a26c0bb4fefadcc05b2f04a36b64dd9", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/39095ad3e086951d38e9de71ed6390bf4a910ada b/txscript/data/taproot-ref/39095ad3e086951d38e9de71ed6390bf4a910ada new file mode 100644 index 0000000000..90b86a12c5 --- /dev/null +++ b/txscript/data/taproot-ref/39095ad3e086951d38e9de71ed6390bf4a910ada @@ -0,0 +1 @@ +{"tx": "5212986602bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe100000000b6aa49efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcb01000000fd92fc8b04ca0fa200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acecbfb437", "prevouts": ["7f66820000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1060210000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_4c", "final": true, "success": {"scriptSig": "", "witness": ["918b36466f94075e9be07c490788ab309ab2b31ef7692a2579398980edfd07c42cd18bef348f9a554c12fd8e2d95aa197d4f226a507c5b41d47af8db260ba326", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["dbdfca1c96978198be6393361c25561d12cc32b2eb3a2f69da676369f104f6281a43643b74dac99c0c8cbe3d234acea9d21fb67d650d6c7f60e1935f3e614f1b4c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/391ae71a3b29dc703963bfe3a4d96555cac94848 b/txscript/data/taproot-ref/391ae71a3b29dc703963bfe3a4d96555cac94848 new file mode 100644 index 0000000000..d2706c775d --- /dev/null +++ b/txscript/data/taproot-ref/391ae71a3b29dc703963bfe3a4d96555cac94848 @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf00010000008635effe02de03710000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6bc000000", "prevouts": ["aaf4720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_47", "final": true, "success": {"scriptSig": "", "witness": ["2c2708559a3eac7d1c852c6d9edb35e6f356e28a50abd47bd49df6cf6c68173b278c2db69fb0762f2a08749e634024f08a177f02bed811f322990e047717359602", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["27b04ec8efc1299e07da1299a63a337d4e94af12e6c97e5b067c59f88a71fdcaf411c75619806c1ac7f4dc2ed22095c97ae4424c1db8510efe547a7464349b5647", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/391b89f7a6069cedebf4da40cbd2e894c4e4e161 b/txscript/data/taproot-ref/391b89f7a6069cedebf4da40cbd2e894c4e4e161 new file mode 100644 index 0000000000..45e87bdb4f --- /dev/null +++ b/txscript/data/taproot-ref/391b89f7a6069cedebf4da40cbd2e894c4e4e161 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf330000000056a475b2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cba01000000746cca94dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cca00000000ed67c018043edd1c0100000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88accb010000", "prevouts": ["e2be7c000000000017a91441ce0eb0e6e5800ced23a872818e5aaa63be0d5b87", "3be74d00000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "38fe530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d3", "final": true, "success": {"scriptSig": "", "witness": ["d04ffb72469ddc66ae082eddc4392c14d71e085d8ae83352f9c37ef680d0d7c04a059b4b5d64a85511f4633d52ad3ff4e608962a6bfe962b3f7514aa8dc5540382", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["fa6dc37c2d78322782f92650882c7402e3ac4056be9adf851c3adb5a3e1c7dccecf623a09bd1c2efef20793d0691a8f0e18d079d014130018b741a7e715d062ed3", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/39261d0b29bcefd21020cd2c24c872c070c66ae7 b/txscript/data/taproot-ref/39261d0b29bcefd21020cd2c24c872c070c66ae7 new file mode 100644 index 0000000000..9fa795266a --- /dev/null +++ b/txscript/data/taproot-ref/39261d0b29bcefd21020cd2c24c872c070c66ae7 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c730000000007e7cb39bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4a000000006802958d0482acd60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac15766851", "prevouts": ["4500580000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c9af80000000000017a914b0b53ba433a336ced94ed75e23248458a1c69fab87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_4e", "final": true, "success": {"scriptSig": "", "witness": ["76b51f7d8850e815a2f29a132d69601c7c9ed5b7a71560008d7edb776cf04d05d5d11d79e9e5c1c0255a60a72f9770f3ecc3f21e1f38d199448c97228703abf602"]}, "failure": {"scriptSig": "", "witness": ["813e1ebf75e3a78dbe6c55892a1191280240a6f802a60f2b538e5c5cbe99b3890572000bdbb583b8cf2831fe4476599330ed9294ce42cdf139b46c28ae9b166e4e"]}}, diff --git a/txscript/data/taproot-ref/39427d9b3326e6d242f88c30c5337e28e60ba2cc b/txscript/data/taproot-ref/39427d9b3326e6d242f88c30c5337e28e60ba2cc new file mode 100644 index 0000000000..d15630d58f --- /dev/null +++ b/txscript/data/taproot-ref/39427d9b3326e6d242f88c30c5337e28e60ba2cc @@ -0,0 +1 @@ +{"tx": "ae141b9f03dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bab000000003d92aca3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0d00000000851034978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c445010000004f05579f031209c70000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e741700146", "prevouts": ["27c222000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e", "30c5690000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "23df3c00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a8e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ec5722d02b8b9029442961cc3fd9a7a94721ebefae4f707bcb621aeba142f8aeb7a2231cf916c441aa882850e5209a465c1bf953237149df21eb7dcd7136fa198d550033184c6424688af85d43f5bf525b7f6d8111e731f6e2359cae2801b117ed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1e707b6995f8993c03f45183b0bc1e0ebe72a0445f3f0cf57f2d95712f279e1c2be0cdb6e99edcfec16766ec5847d1f54ccd051e23ee2b2272cffaae333295d1b30b2981ae69232c3f6c5ff759e9ad4102f31f3fc5e7a3a4ffd34dce2e2e06026"]}}, diff --git a/txscript/data/taproot-ref/395284f8211e771929c6abd17a1e39b471bad2ac b/txscript/data/taproot-ref/395284f8211e771929c6abd17a1e39b471bad2ac new file mode 100644 index 0000000000..9d70f625e7 --- /dev/null +++ b/txscript/data/taproot-ref/395284f8211e771929c6abd17a1e39b471bad2ac @@ -0,0 +1 @@ +{"tx": "543aa354028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44a0000000011a31ca4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7401000000580331d803fd42a9000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acad535e40", "prevouts": ["137f32000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "1a62790000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "d47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b93338c7d107e01cff6d052285c57a3fa3547f5f14e99776c0371239cd8619173eef830f28a0ecbd34c70640f7829eb7d86b0cf2da24853f16b74ab53bbfd728ea84370bdaf8fbfa2c728119f306db95ff534e2e627fabf0c000f69380d4e93e"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e3e1af50e9fddc5b40f5692067c8c7b9556942ec16723cf5c6b37b54adcf255bb970f6251c63bb7d52d2f522a2f2041b3457429d11106abd9da97a7fab7a15d238c2fd1368e2cc97a2933efae2d13561032948a77b2cd5d87b5e0b8010cd9f32"]}}, diff --git a/txscript/data/taproot-ref/39702f9a29cc5985ccdbae18da3583e3a98271be b/txscript/data/taproot-ref/39702f9a29cc5985ccdbae18da3583e3a98271be new file mode 100644 index 0000000000..9c28e84b09 --- /dev/null +++ b/txscript/data/taproot-ref/39702f9a29cc5985ccdbae18da3583e3a98271be @@ -0,0 +1 @@ +{"tx": "c9c8ae8802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1d00000000fad144c4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9c0100000062d84ea8013cd619000000000017a914719f78084af863e000acd618ba76df979722368987428c8e4e", "prevouts": ["70f55500000000002251202411d699451e61c2ae1e9b07727f82864d3d401db7c2ec25b77e3a65ecc346bb", "fe6e240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ca", "final": true, "success": {"scriptSig": "", "witness": ["ccfa4da731767429392a91fd269dc432b468f89fc9b4b5543afb9aa8ec596ddf03a339bad380617e4c1befad93475d6c0938813865aa4ad6657fb60c902cfedb81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["768dbee09895e6c1d0577e8be1f8677fcbfa1129e799134e2bac6ccaaae02573c177af4a7c3eed92dbc70bd8e2f072c0da227d768dd37b26c1c7bdf7365b1e05ca", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/39a530e81b2ae6640a22eade59df3f302ebb0806 b/txscript/data/taproot-ref/39a530e81b2ae6640a22eade59df3f302ebb0806 new file mode 100644 index 0000000000..b77f132f87 --- /dev/null +++ b/txscript/data/taproot-ref/39a530e81b2ae6640a22eade59df3f302ebb0806 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa90100000010059b838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4580000000033dc898602dc7baa000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac08020000", "prevouts": ["31d1760000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "c135360000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100b718c2791c2badb2b8e183fafda2cbec3d198dcdf6b6a67e53351bbb2646fee4022049a083af5b7cbde125b03df2f12afb821cb9d9650fdecc4e618e91bcd88bf75302", "witness": []}, "failure": {"scriptSig": "4830450221009742d27580e3aec93fcaca396886a5dae6b834799f783836a6905f8403e21a1a02201de072fc6889deb35d5720dc03f976a8430e57bd09c40b1f8c2db48e836dacf002", "witness": []}}, diff --git a/txscript/data/taproot-ref/39c2d78974b78a945ee5325ec03d2a9842678371 b/txscript/data/taproot-ref/39c2d78974b78a945ee5325ec03d2a9842678371 new file mode 100644 index 0000000000..d1c39e687f --- /dev/null +++ b/txscript/data/taproot-ref/39c2d78974b78a945ee5325ec03d2a9842678371 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccc00000000943576cf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41600000000780387a8028e4e9c000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac10010000", "prevouts": ["a4b05e00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67", "293a3f0000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936043ca414401d02c8bceed194a0f5859ab7579e0546fec32e9f1c40942706c7e55813d9fe920e311eca68d9da8ac683d4c5ffd57c03f9174ce1b6c58fb2e14cca376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d3c7e324ed429231bc80df899753efc8e6aec2cfa09e5404b20e527324b481ee2c6725dd4617fe2c0113ef50b93a252f15ac43c20ed2eeb851ef9070637abf4dac8db205c7d3bb0390b2e22910f5d1cbad00807eee3325f4c4e7f4412ed3064a1c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}}, diff --git a/txscript/data/taproot-ref/39c6fd26ec7474a9addfe549df2cb8ee610ecb51 b/txscript/data/taproot-ref/39c6fd26ec7474a9addfe549df2cb8ee610ecb51 new file mode 100644 index 0000000000..3c42d7ced6 --- /dev/null +++ b/txscript/data/taproot-ref/39c6fd26ec7474a9addfe549df2cb8ee610ecb51 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2d0100000067095e1ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b00000000b27fd181049eb8c90000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df9797223689876a020000", "prevouts": ["9d75660000000000225120de7c17758b854fc68d3061dec4ffef020214eb4d128d0a0aa1b6bff82dc51d5a", "f6a1650000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["da4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d5de9338381cd304b2738c8b1f6fa31d15bcfc9fae7d40af04401c68f4d5de3473df9812949ea11fa7cd8f7a31f5257bc4998fae53c5743d03c7cfeceae664b355d713f01682c54eefc137cacda341f8a928ca67657dd1895f9a847e54f584f6ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367f6a5a2baa8cd252fc4ab850ea9e4cb81c048efc06f172ee1268b682f3ed0b1b1dc38fa67d6e370c9f405c2af01822f370dc317d6e78d2f71aa14f0ce4de56d6ee4d75780d36bffae9b56136e6d27c02b8d233efdc800bb260bfbba6a6f94b87"]}}, diff --git a/txscript/data/taproot-ref/3a48de373b5922e0287dcbaa10361aa1464b3eff b/txscript/data/taproot-ref/3a48de373b5922e0287dcbaa10361aa1464b3eff new file mode 100644 index 0000000000..58f6b2c3dc --- /dev/null +++ b/txscript/data/taproot-ref/3a48de373b5922e0287dcbaa10361aa1464b3eff @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c43010000003f472588bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4501000000d3e842e9032ea2ca000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac62000000", "prevouts": ["20175100000000001659142540f27e90740933c99d4f17ab2dfc6c82951cfb", "d2437c000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["91828a2f001425c1625387988a444090750bf791918c2207b1a3dea73b12df8da6bb09bc2dde7a967fde5f43a9deee757818cef0ebf7bcebdcb8a1fff3bcdb39", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/3a4b7a4a72ab611ede23f7e04e2c7e0300d1c7b6 b/txscript/data/taproot-ref/3a4b7a4a72ab611ede23f7e04e2c7e0300d1c7b6 new file mode 100644 index 0000000000..3918d4814d --- /dev/null +++ b/txscript/data/taproot-ref/3a4b7a4a72ab611ede23f7e04e2c7e0300d1c7b6 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8f01000000e85c06ea03f6e652000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4871011e341", "prevouts": ["4422550000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c94c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900453bd2bf476d5c79b80d1dc385df1320868058b4af6871225604d123c25805c1374cc0fc2e3b1a564cf058e89401e888e3d8222f635de2bcbc595bfcbb872403dfb24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d3c147557fd4654830368843709159d459528293d28ab2736e9587eb54fea08bf48725aff660a72fd31f8e9799fbe605d57d774c031cecd8b6989780acb581b6b24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}}, diff --git a/txscript/data/taproot-ref/3a5d1711382ce031d27b85c9d0db96a8d322c0a5 b/txscript/data/taproot-ref/3a5d1711382ce031d27b85c9d0db96a8d322c0a5 new file mode 100644 index 0000000000..f575eb2b8e --- /dev/null +++ b/txscript/data/taproot-ref/3a5d1711382ce031d27b85c9d0db96a8d322c0a5 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe601000000c65799e260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ba00000000d4786d82dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8f00000000fcfa74ef02a77fbf00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d5000000", "prevouts": ["6bf861000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407", "d5740e0000000000225120f53d4d34de47a5fffffaf2fc2c78ea776a7cd8d2ae45e19539d143c70b3fc5d0", "5eaf510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c0248df00e7a4dc0c1a55899dad6646a67c262377c42a818f3ac26470e7b94e3"]}, "failure": {"scriptSig": "", "witness": ["6a56616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/3a8258d488d60df9cd2d2e0f3fbfda5aa2916b1a b/txscript/data/taproot-ref/3a8258d488d60df9cd2d2e0f3fbfda5aa2916b1a new file mode 100644 index 0000000000..fc1733d229 --- /dev/null +++ b/txscript/data/taproot-ref/3a8258d488d60df9cd2d2e0f3fbfda5aa2916b1a @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708900000000676b3469dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2101000000e54ad34c04af0b30000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6f000000", "prevouts": ["d015120000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "65ee200000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6afe", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694e0e7acaac641668fc05305801328759974c78d394b9aa0618ae365ee981a7dd800fc56907ebb8e18291aa6f74a5d7a46b4d60066ab44c243b43072452172e3365bb68c3eae5e6cd9b20289e581f52d4e8c0cb4ba58bcd8be9e67bc80fb920a1e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900455ba7b576a8dda08f1b482f8c289e95e9d52783e5c439690d7dbc8078ddf6e59ab44d8b0f62b2d27de7be259100200d6da1e5303b29f3eaa1b6a4eeb0c96a42f364ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}}, diff --git a/txscript/data/taproot-ref/3ad5eb51c8c2ea66907d5c7b40ef6cccaee711ce b/txscript/data/taproot-ref/3ad5eb51c8c2ea66907d5c7b40ef6cccaee711ce new file mode 100644 index 0000000000..126238e9d5 --- /dev/null +++ b/txscript/data/taproot-ref/3ad5eb51c8c2ea66907d5c7b40ef6cccaee711ce @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d401000000e688dcea8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ff00000000123c9dc8046d667b000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac3fb5d441", "prevouts": ["915f410000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50", "defc3b0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c6c67fc5db5a48a2d95838acbbf8c02666a57f9afa4a196d8a1c4266fd607a20516db74e79dae20b980131c66ab5c6b1103d5696c84aae822ea57ed7abba6df9c47c79f10eddb86c5430be5b12cd56fd72ed72b8e9fd97b27cb9d8794e4fe0ff0c9ad624fa170605f055a7e7fbd776e840af1d4eec99d8c4672f60d35ac95da2343630e58d0e49d036a3d4c9d64dc660614aa3786242cd0abe4e5b8c5de301bd99af384c5ecc823153c1606e81b61c7d31027375ed835726d4c754f4ffcf383b11d28fe5eaef856dca99fb118187042ca7f59e0195b603d887a814e7bedca5ddecdcef5ab57af375b6f50579acc4d0b5927db9b61a1f2c7d3fbde6d583d9677c339bbacbef59193105c5306550def281332bab47830626009563cb60164a1f5f71405bf8de6d69dd3349b1e4d7c5f9f162eb1de22307ecb9a39d5ba7ce03abfc178600a9275ad26a1ce43ddf70f6da741beb70154bec478a630e3c5e76560c66628d099c709af5e18677bd39bac44d435b0a8a3dc23bf7542271b963a0c934f56870afc62d4cc92eacd9f302dbe974b221d5a70b3d3158bbd7533f1063e6c96aff5e83c814e1bc9fa53e7ff85ee81ffd84deac9a05cb7be108ae7e61fe2ca80bb1e7f8e13bbc94e06cbf11f9621cc7fe532bcb12673a0ef50e147d8612e8048e30a420f6ba5b2225b033f2823300c438ea2e79a21c0ebbeb537507d49edd356511829fafeea17b33ee75", "227d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9f2d7c582f83634cd135c0c41a92af063e6e0eba35e5b92273f4e04c23802be6b7b535eacb46044525b0033e262a0686af8b44a8254e1701bb4a9d0d605b263fcb15428af69077ee4e47ddc8bd2adcf7d97a29fc56c75a24a213a103a1e3586"]}, "failure": {"scriptSig": "", "witness": ["4d090203c94a49e5650f882b71a8b54b11d86841939712125f5b05d3ccdfee26b4c27dfb753ce79127dc1aa67b20a61753c5d52b70dc756138f22fa2e7c075e1bd43f023265deaf540ffb5051b07d4ce8197af06649cf1e587fe9fef4b0e2b60714f687de029f6a678c3645702d03d3649f313600f50d46809233fa1950d9a22f2a73182ee6969a65c23d509792933339081d2fc9e9ac858c28f6bb7b36a2c9f92289df76ce76dc13974c0cf9e3d3c10ee65f5f703a3517e9f4af94d0693aefd00ca3b5c69db4ddeaf232b25a0ca0d8f89cf8a7b4620eb8de35f631631b46e2947478bf1e9ec9c69c20868a2d0010b829df85848e5e0689d7b6146b4b376ab3233fb4ccf256ac705544c3d3e5823b817a4844cbf1233173e4d3e06d1af5714b473494e14188ec6a22c616f10a8f070c55416f55769638cb897345e0f963bc52f77a49e9109ce25da5950362f948f64b751f0ba748558b53ec42ba631aa20d09fd1b7774930e868ada2139848b649923bc857c292c6764e78ad14a8888c3f450940e009dac1f7bf7baf0358b02ffd4322a11d1ba5a41ff46f1bb8e8e17dccf878cb3cf49246b21c42b74a609ad4fcddc0d8303c4bd22b2b08be732a51bf172c708584b24fe6066519efce8319555bffe443454fa1dc682c4b027d7cc110f2da20fd768757ba6724945cdf5832b30383f6f7586bb8c84f12d160041a3e218770d950a5b8f4e2f3c8afe1cf467f75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef76c402a4bd1fd97ec7cb0657ebc265c6b14283a23241722901633641a1252aadc4c18ce03381be5d83370dbaee0482c0440aa7aa94902a00244e0237bd29478fcb15428af69077ee4e47ddc8bd2adcf7d97a29fc56c75a24a213a103a1e3586"]}}, diff --git a/txscript/data/taproot-ref/3b055324162a840bb031e742e417383a3c2b9fff b/txscript/data/taproot-ref/3b055324162a840bb031e742e417383a3c2b9fff new file mode 100644 index 0000000000..93cdaa7eed --- /dev/null +++ b/txscript/data/taproot-ref/3b055324162a840bb031e742e417383a3c2b9fff @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a020000005f503664bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3a01000000af22f6838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45a01000000ec72071c0131d9410000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc7bf29061", "prevouts": ["8127570000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "5719770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4e193e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_67", "final": true, "success": {"scriptSig": "", "witness": ["9b79da4e610ea8d97803a99b4865bb086bfedb92db6d09a9c17507146a4095ea4be7ae4ba991c21a7701da4148762a0c34b23eaf38228ee9c4dbeac1a8374ad1"]}, "failure": {"scriptSig": "", "witness": ["214fcd315f91e6ecf985f4bd4dfe6fe5eeb75f82a37b5908f0238cc3ab1326017c5088c1ed806fd8247045efe366dcfb875eb8b7f12ff9e544fc6f8881d5885766"]}}, diff --git a/txscript/data/taproot-ref/3b6174c02c9421bd7512cb0b507ee81cbe621e8f b/txscript/data/taproot-ref/3b6174c02c9421bd7512cb0b507ee81cbe621e8f new file mode 100644 index 0000000000..2e1c5de204 --- /dev/null +++ b/txscript/data/taproot-ref/3b6174c02c9421bd7512cb0b507ee81cbe621e8f @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4601000000944c61c260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706800000000ba4a2dc30216b76a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966b000000", "prevouts": ["4bc55b000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "f1b4100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ab", "final": true, "success": {"scriptSig": "", "witness": ["8f7f754dc6d102ee359d2cd6eeb3c0a87f330a5d54e15e8e1d57cdcf2ae84b1321af4ab4a8771d0340f6a82423a8186482766759fb25271e9d15a509286ecfd3"]}, "failure": {"scriptSig": "", "witness": ["117aca326b17db0c910fa1c611ffe06726f46fdfcecdc130f573a4dc6990bc236c5d6f5b988da6e5da986029bd2211364b5e7db13a52af6ffa0b47a25d846529ab"]}}, diff --git a/txscript/data/taproot-ref/3b756b29419004b37c85b3e93c13d3f231e1eb67 b/txscript/data/taproot-ref/3b756b29419004b37c85b3e93c13d3f231e1eb67 new file mode 100644 index 0000000000..b1825443a4 --- /dev/null +++ b/txscript/data/taproot-ref/3b756b29419004b37c85b3e93c13d3f231e1eb67 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2c00000000a3ce2e21dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1702000000adcbac73bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b02000000deea024702e1a1c8000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ace21d5c2a", "prevouts": ["e96d23000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "ffd225000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "485c8200000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902cb78b3bdac8d11567c7dc6f2aa5b2ee71076ef2ddffba413e3ce848eb15618be522f737adc97fc90ba295e0727aa88e1696aa25671ff17692233f63ca1df4954b728825a6a0ce2da4774799ca8e2a5dcbafc3ac771c1a956234aafdbfceee834d356c2f129777a4398e354cf4e31c481ef8fe637971a2fbcc949eeb8e6bb4054d2c7c78d8f375b3e539ce67675343b80b177108de78dba18782b2225da8a599234e06c0a162419e01e0b04b7480db0fe96a523c1a7677d2aa2e544249157ca7b75fc4841a7ee073863a521315caf74241fcd3c7ed1dceaa89d8328f24f55aed57a85f7f2c94a5867cae4edcfe458e1ce3a1a9ada3dda198ffb11b8b231d6f129c5adef4bda7ee47edff05d26f21d7888f8a2c0fa3286dae7d20daa15b6573940cd0f7ec62ef6287760afe4131e32d00ef38757a9f8aae4fa78aef59b818633b428a82c29d4f2bd40d3a0b5780786fd644a0effd1a28a4067713b2fad3d6635187e1a3e7b27c7eeb6bea9b8d73810fbd9c60dd461cd792614569beb5440f193bd3de674d02b9674fb2ff8c12d114cda3b5b360967434a8c2d81cfadd021c8ee7a35fd27941c5c6b03088420cb4d79741b6e9d1e37967a35a3ef7106f6e3775b9b8ba4f4c1b111e20a914c7aba4caf80eeda8caac5378bff69c39479dffad6cb116db676b30cd78a4bfc0c3548ea30b0dca1b0f394d7ccd553d352b3436f5ae477dd6dcaabe34ca4848b75", "3b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f43516c2d68d132fac7bd8c90b108bd3a48adfbd6b0c62f8ced1a9f682d0b8d524213bc04a867e2e908d02e9cd05b1befa37bc2f591ad783cb0f6fd2a1a72397ef84fce916674b46359d0327d7b56c183d26d6053da1b16053a1f90da8a1d4e"]}, "failure": {"scriptSig": "", "witness": ["4d0902507d1ceddc54b77c465a747597375db581a193b47764273510b80b36a7d6b18cb8fae32f1b611da2a4d4fc716c2f2b1024b3534450a8b2033dc1f6c08e8e5f2fa1f867559fc5604a866e21e85d11f46cc874debb7bc0ab48788e81ea25c19aa1034e212616aa348429ed7d5c2a85027b60368bf4aa1010037d08acdd2071a02762db4a2c019e3ce2c444039915f71af5832530c89dc55334bebf3659e295f49889a58d0382fa4d969ab6588c28e5ed12747fe878c0e91d02ec9042549f2d5fdb9216cbcbbe39be42189c4f8ff854f28574191c172d47f025c83a9e463e5f59c27e30c6cf5ccf7c8be09beb6126c7b1ebed962bb9154f0e64760cfb2f5aec68e925c2fdb43c437615d5bbd083098715c448a0e9c11050a2824d3b464baaf48dc4efc7a79aab863283e98d66269c36b08a336eadbb2fd82e22b3be9c00c2f12116d9f565892b62d574a69307d52705f3c11f83cf174aee88a5dc24bf1b4903665683b3eed24068c03d7c38c75d3b933b15cea550701bc0202aaf4f3d93c3627c2ff31646694f90621b7a4932e076fdec416016b4491337e88233473e85877447a28cb9ae08bab119595d96e46686e37ddcadb60f74c9f6a52cc2015adefd7b294def59f55b0d1e27466c7a51d5cd75acfad7a0200f3d0ca23aeec056695d89da655d2f68ff2bfc5ca99de03433ee37496b3fb70e15d23fa599993fbe4043c42e03765c790578746abd8275", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed450a1526d7659d1d0ab8a304ec78556741ee62c830e21f1e920b63ff49823b3524213bc04a867e2e908d02e9cd05b1befa37bc2f591ad783cb0f6fd2a1a72397ef84fce916674b46359d0327d7b56c183d26d6053da1b16053a1f90da8a1d4e"]}}, diff --git a/txscript/data/taproot-ref/3b7aa5f0f9d0fc31f7be3558e9eae22f13652d33 b/txscript/data/taproot-ref/3b7aa5f0f9d0fc31f7be3558e9eae22f13652d33 new file mode 100644 index 0000000000..ab7b2eb779 --- /dev/null +++ b/txscript/data/taproot-ref/3b7aa5f0f9d0fc31f7be3558e9eae22f13652d33 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf56000000009d725befbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa600000000046d18dc04521cf200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acbc0a924b", "prevouts": ["e40573000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "c8ad800000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sig/key", "final": true, "success": {"scriptSig": "", "witness": ["bb2af8593bbcfac406e26202e5f13648fa5e664193a79fce786c89934a4c57c1aa81bbf0e1355adf76a445594d00db8c548820da4260010ea7dd5015aa3fe9f5"]}, "failure": {"scriptSig": "", "witness": ["ab142f24726777850cb9f9bd64c555e3fa49510332c574858d5c2186037810a7088199fd5a1b8cb033a262c4ab06d4a52cf54091cecb548a2ef5340170706d13"]}}, diff --git a/txscript/data/taproot-ref/3b964cb9d3464c3949a2e8a0f9edb54a4a9ce6c7 b/txscript/data/taproot-ref/3b964cb9d3464c3949a2e8a0f9edb54a4a9ce6c7 new file mode 100644 index 0000000000..1add070180 --- /dev/null +++ b/txscript/data/taproot-ref/3b964cb9d3464c3949a2e8a0f9edb54a4a9ce6c7 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1102000000e34a2009dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bde0100000060eae28fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c540000000002789cfd01dce73200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acae030000", "prevouts": ["6cbd6c000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "4c421e000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "b0574a0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6aea", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93622f1de47b063444ad2876036dacec053228c21a48fe4326b3b842e08dd2b252da2d42db82fd8c87bf94597052443343fe22a3a138f6b0aee44f71ff1c976f3ab32777cb2583add22ba560e78ee9942bfe3080d15b9172e7f2c8ac5adf5c65a1c36f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e170b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720f322cf06423056ff4efb147ba4330d28398a4f05a11ad98b1121aa54f60b594336f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}}, diff --git a/txscript/data/taproot-ref/3ba14a20059a5c8f8e184fb6d08736296adf21fd b/txscript/data/taproot-ref/3ba14a20059a5c8f8e184fb6d08736296adf21fd new file mode 100644 index 0000000000..6066bc14a6 --- /dev/null +++ b/txscript/data/taproot-ref/3ba14a20059a5c8f8e184fb6d08736296adf21fd @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb80100000095c037858bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4770000000021da5818dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce800000000a4b8f83f04b7dcdd00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c45bb44b", "prevouts": ["724b5b0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "d90c3500000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb", "294550000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e84c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93616f8948a019ae5ead2cd9d851c765ad0220b162570156f4a7dc6af8fd2e75e36f4bc19c05a4ad9ae05992168d490013403fc5515955a55899592aa66a61db799770b862ef93acb6091cb4ff8ef135b3065b278142aa4adab757f952a626e2b26c80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}, "failure": {"scriptSig": "", "witness": ["4c52e8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d39fd96f2153f8e279dd396423519f362f93616cb37cbc9b2f05e3e7bc75ada5276a8166e5256dc9010e53101dfdb6dbd4fafdb1e785ffcbffe7e4bfe923fbf99aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}}, diff --git a/txscript/data/taproot-ref/3ba4a606e430170b23a098c2ac6ee7213be618ca b/txscript/data/taproot-ref/3ba4a606e430170b23a098c2ac6ee7213be618ca new file mode 100644 index 0000000000..5ba12bd382 --- /dev/null +++ b/txscript/data/taproot-ref/3ba4a606e430170b23a098c2ac6ee7213be618ca @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccb000000001cfe6dddbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2c01000000c20cd2c40255c4c200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f877b000000", "prevouts": ["92f156000000000022512081f4094833c2bd1c8ccd20bca7d3b4bfd2d5ed628270e66be4011ac690e88295", "1a336e00000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "", "witness": ["304402206a130ea11521b20ceda33cfa589ae04f345a08c6f65264c643fd01917a53be5802206540524df34d1fb00190aba6674a1a63d89f4df10acd60eaba389de4d70adbbe81", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["3045022100e27839681f2e9abdb3566e2438767fa2c262e72a9cfa3b4e0d6b7ee7db147168022016fc9cdc28115d8737fe15fadf6be7f0c0ef5ded8d52bf5edb83bfc385a3377b81", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/3baa61730ba406d7fad296d7df24a9629ae0240c b/txscript/data/taproot-ref/3baa61730ba406d7fad296d7df24a9629ae0240c new file mode 100644 index 0000000000..4c2f11a981 --- /dev/null +++ b/txscript/data/taproot-ref/3baa61730ba406d7fad296d7df24a9629ae0240c @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4a0100000084436a61bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc500000000b28535d6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd2010000007e9916a503f4c94f01000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e77c000000", "prevouts": ["f56e7400000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "259f7f0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "acbf5e0000000000215c1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "dd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2823dff2991922f121728685824385d20f53064595141c17e375e09b6c17310e1f075c573bc42ff1b5fdcad1a87ebee849fc17bcfc5c414a2a4f901b5a19cd44f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d5adfb4b655ff7e7194216f0c9ec7a59b69961b08133bf278a8ed5672f2f6a4fc12d2886f924517b8c41f4755cb69ff55f68e740076f0e346dfe7ab1da23e202491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}}, diff --git a/txscript/data/taproot-ref/3bacefe15c3e633f44d830137c6fe22c074b155d b/txscript/data/taproot-ref/3bacefe15c3e633f44d830137c6fe22c074b155d new file mode 100644 index 0000000000..54e819f0dc --- /dev/null +++ b/txscript/data/taproot-ref/3bacefe15c3e633f44d830137c6fe22c074b155d @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c910000000057056869dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c47010000003cf378558bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44d010000006ea78b090428b4f3000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac70000000", "prevouts": ["9f7a60000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "8619550000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "478f400000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "597d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8e1a055bce30035b144601862be42e0b1f1d387c5344cafae4ff25a0d1808b56acd61c62feef9509bc7b3762bc81079411fa6867ea4986820580c60fa1e8298e9"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c551dd4dd159c7937eee09518212705b0904c5c3555f506114395535a1fb444ba393999847c63b69274661db27cd2e7bb4343911a06570db858c301dc754c7eb4be962498b383c32e8a84fa570ade752f3a2216469b10dbfd65078bd8e1b5998"]}}, diff --git a/txscript/data/taproot-ref/3bc46b0f49e132b39a7468c0eeae4f18c15a9e46 b/txscript/data/taproot-ref/3bc46b0f49e132b39a7468c0eeae4f18c15a9e46 new file mode 100644 index 0000000000..a3dc70266f --- /dev/null +++ b/txscript/data/taproot-ref/3bc46b0f49e132b39a7468c0eeae4f18c15a9e46 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdd0000000084353b078bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a0000000004495027302e6bfa3000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e791e25a5a", "prevouts": ["3415660000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "d8bb3f00000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "e07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dc752bbc00728dc9fc97a524e5c00d8fa73d20f44eeac2a564eeea9db1553afc3bc00f369fc994f47536ced64d5e4f722a68c2ed1128957c24de4b5158af0ec63ccd0bea79832f66dcec0cbfd0592e3eb2d999b46ac697170d667eb8939a9687"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e73d9d375b530aa22fee240902ecc7793689bdebd58e9771ff3d6e92b1aa7f5c13ccd0bea79832f66dcec0cbfd0592e3eb2d999b46ac697170d667eb8939a9687"]}}, diff --git a/txscript/data/taproot-ref/3bd1e196feb0c029ad908a2c989b46a4c75e87e4 b/txscript/data/taproot-ref/3bd1e196feb0c029ad908a2c989b46a4c75e87e4 new file mode 100644 index 0000000000..06fbebb7b7 --- /dev/null +++ b/txscript/data/taproot-ref/3bd1e196feb0c029ad908a2c989b46a4c75e87e4 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfac0000000017ce8cabdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5f01000000fb96d0ee013f6e34000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787bcab301f", "prevouts": ["18dd840000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4a3e5a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_87", "final": true, "success": {"scriptSig": "", "witness": ["8891ec441a8fed191cbe43605957eddbf420cccbfd1a991a80ba020b1199fc3c50f148118f94a379b38fa564bedc3193b03a93ad0a9baaedeeb8de153de85b7101"]}, "failure": {"scriptSig": "", "witness": ["5cb37f0a3ebda88880990442443905e0ae293ec30e39a0582b10dcc0d4def3c817d2a14a40048b38392f18f6a57b8fdef983215a7ef3b299be90ca0aa87b884e86"]}}, diff --git a/txscript/data/taproot-ref/3c0a722d83c61bffb4712e8bdb67f68d6757d30e b/txscript/data/taproot-ref/3c0a722d83c61bffb4712e8bdb67f68d6757d30e new file mode 100644 index 0000000000..abb9f1e1f6 --- /dev/null +++ b/txscript/data/taproot-ref/3c0a722d83c61bffb4712e8bdb67f68d6757d30e @@ -0,0 +1 @@ +{"tx": "36449a2c02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0f0100000000b960bcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3700000000576d43be01f4b34c00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac83000000", "prevouts": ["5386840000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8", "e6232600000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "997d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93659100ab1d99009eaf631522d0390412a62a32905c7f687f8ed538c1d75c8e249e3e7df71444e7cc76d8e211582e4acb0f4a71a503115fbd605db9d475b3b0609413afa0de0ff2ef52577d4c80443f6003c675907986908c28bc93ded208ca160"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93617fe6272c5fffac4ddc4c47d3a6fc8218dc4d9298ec687e863b37acdb8199f2e2e3b986c0375fedeed2562a6fa36a7b38b0ca47fc0125e42be2f4bc52e49716a3d673df10a8cc98fc65477367c7f3bb838b82569297570384f0d4df8cd49e6dd413afa0de0ff2ef52577d4c80443f6003c675907986908c28bc93ded208ca160"]}}, diff --git a/txscript/data/taproot-ref/3c11357c518486213b14a41e23ce85acfc7225b9 b/txscript/data/taproot-ref/3c11357c518486213b14a41e23ce85acfc7225b9 new file mode 100644 index 0000000000..e561ce8498 --- /dev/null +++ b/txscript/data/taproot-ref/3c11357c518486213b14a41e23ce85acfc7225b9 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a400000000bf14df5cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c000000002070b123bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd800000000fbff2f2002a8abd800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac05ebd32a", "prevouts": ["79d30e00000000002253202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "5ed7480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "853c8300000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["c18461cc346aa094096b342c10a66208d719576ebcac841c65ce6ba4e93f60ab55a13d8fcaac985f6aa013828744cdde4f51fcfd86f8c5dd481210b20804d5e2"]}}, diff --git a/txscript/data/taproot-ref/3c20247465b4757bf0758627c8b5e4839dd819cc b/txscript/data/taproot-ref/3c20247465b4757bf0758627c8b5e4839dd819cc new file mode 100644 index 0000000000..8bfeffd16e --- /dev/null +++ b/txscript/data/taproot-ref/3c20247465b4757bf0758627c8b5e4839dd819cc @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f900000000bceb13d28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dd010000007fcb8fed015e995a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9009232e", "prevouts": ["e33d3a00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "3bff3b00000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f968", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363479168552e0c3d7df5f44dbbb743296079984d081213225c4f28f061a2ab719a4dd4bfc6549e8d5e198b0f1e67d147f6db02444245a6cb27bc19444f2462468d332399bdd0fdb741da8d579adddb10dac50c4b595c0031ea1e156729d78e3487d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c5d39e9862e20f53a0e43cd42e822dc4fc6d6c3f6bbd1afa8e6a99e8abcb2192a58cdb730d5140e8751cef937639de4f5fbc77d98986906c68a7616d2fa212f87d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}}, diff --git a/txscript/data/taproot-ref/3c4f81b3cab5b54ca2ec122fa809fca650b47db6 b/txscript/data/taproot-ref/3c4f81b3cab5b54ca2ec122fa809fca650b47db6 new file mode 100644 index 0000000000..0c50b1adaf --- /dev/null +++ b/txscript/data/taproot-ref/3c4f81b3cab5b54ca2ec122fa809fca650b47db6 @@ -0,0 +1 @@ +{"tx": "d105fdc102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0301000000971ac2e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41b00000000099cdcd0044657a70000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79617aa1023", "prevouts": ["43046f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c8213a0000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090283a58b717bb09720c20d04b00847c5f2d0892ee1723208bf1c79cf95ad0fa074694042e6c4aecc8374c42f095cce586dea00c533525f82657cf57ea5944adfd927a660bf5bccf0a4ecf50680e29027294904791c8337089da38b64a4339bb54733b31e31f6b6a1c5be8bd3aae3aeef05a60814ead4c36a1bfa349b3095bc210d133446f83bb20ab0178fc796e3756cbaa257970ad6cf9939d572f227f6d66bf0a1b5a37a89f394a5431b5130ffaac17fbf8cb66f89dda17854f181796192e1503948bbd5b4589e4200bada6a99a67d26076d4c4ccac6c42963e9d738c05cce90e6b3796466220a85a11e420eaaa232c9a56e8b63514cfd49815d20f60faef72294dc85098d4563bc46d9ab322ba218d7e21293c44e143070606895228830c145b2970cd15ed172e83ffe27baa71808cb69ba4244988ce9f40728eab596c350481c8cf4c2fc40b3fcb6143a9f0d36895465496b76c3bf9a926a8c1ca7918554a3c104df9900ce9b93c0937df733c5e8712f6310708adbee79b3059ceb9be16d6a53fd82f30529e839e7f31dac797a4379bbb2afb5d994b77cd671c900688e42b05768229a531c909d26c0c0262b9c0ae2b0f31bdd3f0b8f221a9bdd64df8f99672734b47c6f6943d0f79885a55845febc6b149f526b63143bda37c542aa5256571601a0ecab128b84b582047edae7c8470d4552db589d926dfb5badd136a25cbb3976d6d878b368491b75", "a47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e298b057fcdff1fd9eedffab28c4b84177a993dd4b4edb713a819d49be9f33539a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100eec4f69e5cd9a0f0c1fda8eb2f54297e33bc5edab35b299e65e2653a923d6ca55"]}, "failure": {"scriptSig": "", "witness": ["4d0902b52f8fbb9de22c73b9ed1544813d415a787c2c5484a574fe3a4b3fb45b25cdefdc05d19065d57f8bac97ce3b21f37f1fa319394199461af2223057dcce1ddde5ecd47592ec6309721c864cad28933d42ae2f1fb48b649869b27575dc811dc7e18d0ece4115a24cd4b750a86441b1cb96ca61f5c6ea311be9d2d64bfc44ed9cd3abb5ed0d1a3d89a165876e302f484d6a85cc7e642a4aab569bdf090bb07f12f8c9db042c4fa5bb350ae1729e3b6b560d46ee37b20e4da5bc3ed7d0eff21f6a2cd6afea1192dde618fd1ea197b4493a513f09535ccb65a85d8f05795827cd7bde7eb93e6972269b72231c041294d7f17489847ed56c50427429d98eeeb47b3a2612060c0520c74cc73b7e808296c0c0cff51cf41901e13e0439c7df2b5998a6d3fc0434bce18ca6fefb16306a7ea0e9fadeff0a55980ae595853ad8ca181354f990f0f9f451d46225c62237537bd9582c13d3e672a1701b844b2fb1a910a89ef4d18c68196f60c3ddb8bd673fa35a38a0b484fffb1659928dfdb71178faa029c7119ad1d1ac76713976583edee3312e95f89949141bc9486c06c407c774c7320a54671a76980e81318258760d8d6ecfc179dc1c2e0808d4ec7209d5bdb243eaead5322b7bf3e85dc9091d448eead5e1de5218fb84e649eb188fcf462b9461443563b821affd1bd4405cf5abcd139a6c623649509ddb2918e04252637fad9c2181e61a5f847b81f571f075", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e6f2ceb64e65b7fe0ee2bcc907e6bb6457910dcb8068df083547398b80574b4f873bed7b94a92ccdf1432eab063a27f935bef099df6a1cbcf6734b218f2b6aa9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100eec4f69e5cd9a0f0c1fda8eb2f54297e33bc5edab35b299e65e2653a923d6ca55"]}}, diff --git a/txscript/data/taproot-ref/3c695558731a219357e99fced06f0c24b38b6c11 b/txscript/data/taproot-ref/3c695558731a219357e99fced06f0c24b38b6c11 new file mode 100644 index 0000000000..19d87aac45 --- /dev/null +++ b/txscript/data/taproot-ref/3c695558731a219357e99fced06f0c24b38b6c11 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e9010000001dec1589bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf260000000053ee53c504472cad00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac11ed5824", "prevouts": ["65a33900000000002251202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "ee537600000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "final": true, "success": {"scriptSig": "", "witness": ["88d65c168f8a0920214e83e6f345f559981529a1045602dbf8c6ca6b1fa3b5e90f59a018b3bb9d11709625a0997bdc1f558ffcb6f94ee82b58849a1287e5a68b", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}, "failure": {"scriptSig": "", "witness": ["39f4cbfd76887c4a92dca98894059cbc1979e2173137cbb57b75fe307704ee3411b9a854c4ffc10440b9df9b4cc6f1b0442da56d252efe435fd50c8a887ee622", "6a", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2072ab2582871329e6d2ee7428615b3ca131677fbf9a036ced2b197b0b63c7847f"]}}, diff --git a/txscript/data/taproot-ref/3c6b79f35456c42d2578553948e940b494865ac5 b/txscript/data/taproot-ref/3c6b79f35456c42d2578553948e940b494865ac5 new file mode 100644 index 0000000000..a52847e944 --- /dev/null +++ b/txscript/data/taproot-ref/3c6b79f35456c42d2578553948e940b494865ac5 @@ -0,0 +1 @@ +{"tx": "5d45ca5a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3100000000f9556abb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bb00000000953fe6a9045d685e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8eb7014c", "prevouts": ["0290260000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e", "4f64390000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "0c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7110d101968a4b58b88744c41dbbb4e2ad9f7c85e8f992915dc83ff5cca0b4028257bae22e6d8aedb31b43cfe467850e731fb88c1221782039a4c16ef44c35617d0d4fc7404dd8984f6a1705481d95654b515a34c586c99c11bfe20e9503459"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fad8b86df4811d5d33605da5981d7f94c5d3490296d8615b43f813528d1a3f165ada3d451ef6042e8b6b9e1a05667773e16935ec77c1049456c2d3709876bb0617d0d4fc7404dd8984f6a1705481d95654b515a34c586c99c11bfe20e9503459"]}}, diff --git a/txscript/data/taproot-ref/3c78b5bf3e8a594974afba095afac84660219f6c b/txscript/data/taproot-ref/3c78b5bf3e8a594974afba095afac84660219f6c new file mode 100644 index 0000000000..4b674f4acd --- /dev/null +++ b/txscript/data/taproot-ref/3c78b5bf3e8a594974afba095afac84660219f6c @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c370000000026ad1f6dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbf00000000f2e52467039292ce00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac85020000", "prevouts": ["88de5c0000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "035a730000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6add", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936737f38b389e91945a59e7d1a54cc6743fa202767b45d1f6a954572f10f069a57b6537362191d9a5e0aa3a730b93b6f98a99ef63ed893bef4b9dfa7e3451eaf360e1f075c573bc42ff1b5fdcad1a87ebee849fc17bcfc5c414a2a4f901b5a19cd44f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936077cc45fdbcc3c6a197d438d850d88fa7818ff45d2680821c93c0ab1e64d7a1e20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e18e3807b59d4390aa508570eca32c61fc450dce8c5cf98deda801e2e8c3fb4b07491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}}, diff --git a/txscript/data/taproot-ref/3c986463576a17cc12996a738a2cc479d1198df8 b/txscript/data/taproot-ref/3c986463576a17cc12996a738a2cc479d1198df8 new file mode 100644 index 0000000000..1a78176a5c --- /dev/null +++ b/txscript/data/taproot-ref/3c986463576a17cc12996a738a2cc479d1198df8 @@ -0,0 +1 @@ +{"tx": "6640765702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5f0100000029d0c5b9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1e020000000a5e90fd0143ee2a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7ea02a33c", "prevouts": ["6120210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0999250000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "e97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362896a049359ddc96fc816a03690dd361f765cb7441c784067b848ad4ad8c32711a6bebb6dd497db999161621b23fc9287dcbaa466f13da5d035327b94edd053dbd7d7e2e0b29bfb283546875adbaa200efb560b624d50a8165ce6ae8ed501592"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936615da7ac8d078e5fc7f4690fc2127ba40f0f97cc070ade5b3a7919783d91ef3fda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e0edd1eeef23b4191adb89e631380cd7acdd7acf00b470d5a9d9dc70e20df3f09bd7d7e2e0b29bfb283546875adbaa200efb560b624d50a8165ce6ae8ed501592"]}}, diff --git a/txscript/data/taproot-ref/3cb4479d7f4d2911b165d8e388cda3c7da36bd62 b/txscript/data/taproot-ref/3cb4479d7f4d2911b165d8e388cda3c7da36bd62 new file mode 100644 index 0000000000..f98d9831fa --- /dev/null +++ b/txscript/data/taproot-ref/3cb4479d7f4d2911b165d8e388cda3c7da36bd62 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ce000000004bd0f99e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270610000000097c65b8d01828a39000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47877a0b633c", "prevouts": ["06f4350000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "30571100000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902014e396e8146f3a3431562dd8f595ab074d6ec1d0d8287250ce946d6635b51732c0f9843d6bf8496532fc900dca4083dca6658d29c7851d1956b5e6dd23a3e0109cc34f511f59b7fce9d624b5ea3c3619e737bbf1dc6ba5a96c115b9d985ca16fc3021cf94c9168b0ff065ecd3fcca362aa72ee0828a5e816698ff4f54dea9e31ec98c9eb353cf8cb45d446278b35da3b70365a505dd1022f5d97572ffea03a986a7446cd33866256e06329c9f24e90f74962fe8488c893d564e3656a706f0d71584df1e676aa4280878f331a1ee40babc890ac22b01cd3ab5a3f2fac547c3ade431dde9520d483adf2c507b670bf4c3ae302ff2f2bcf5f67057c1dfe00c6c9ac143682031f8f330fd2cd11b5d02335bd79aae17c5bb42dd5ee6339aa970a2227258d3e77b617fe787aebd5ba159abbfad24de598593354ba2e889efd80101e45b2ae4aec4c4554ac153c6f6aa9e5e4e724e6b582eb3b525eef679a8a1e95513d6737c119fe33abe1c335ad3b7c7e8621047f8359fd79d789ce0362df3e573770e8e942eed9bac29a7ec4e9e08677f275a0d9fcd62fc8dcb3377067448a1d830fc16464538c6ace04f56bb514dd8b2eddc72e09876fe26f6f38103edd3244918cc58c76e35174c47cb8052858ec3d0cba8d20992312a4bf1f03dac9b7a5b4e503b77fb0992b4aec7a046f8a8a42d4fbcbb18844d90a463ada1871824792fecfa3365712cf8ab09e56475", "b47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db0523871f2cd538158ede77b2d54a3b132610dca27e4b1b70c1c98b9153bdc120cb1d3ba38961d99eb4dd4ca5f4423fa7ecc992e517adf4bcc7891fe49c1f0e90a6d927376acace3683bbc4ff9f5d15a4c9ee2ad4271a1fb38c29668c3ce61898ae4fb28ba039f9030001532aa52d54afebb8b1d186c7283d6707334cdf0cf3"]}, "failure": {"scriptSig": "", "witness": ["4d09024398a6799cc67492d8b06aa782f94519ea08f290828c71f6303a4d3376590129dac016694a5bb4fbd631420992ba42145f5fa1bb598cb3dde7011a51e3ce752187b464c878fd7a4ac072baf97592a69aa23590d8778acd8ac35aef8c6e19e3f81122b9926cc8c2f095e8746b507c7cf037ec42517540a65c528862d5df38be27b23f56aafa804a806cabe281b0323ad167a30945ac1929eb9c62a49a6729656a2f011a23f80e386f836c4a3438df5aa85ae8954a369192086238b3700c5e384f7de5b4ec5c11b5e868839df7b5650efc9d07480d41889da51ad7bbac1f40ccfa2a5bfed3e8c6364a9990154419a927d246b7a6d965cbf164bda614e2ef79b51b25e0b6433c89c208db07caee28aab62032d0eadf7acf748da7d0c57cd05cc7f34d83ad53604a31b1142251f53ccdd78552cfdc12740a27d2971895d16a50a536b1a15ae155da18614728e557d6ce39d0583a2e170d020319533a179033b26d1bb6b2e4ca8ad0cffc08c75a584c050499292b8b46657026239d133e669fcb0f6555a093ee8f3d852b89f33688993acb0fc18b0415f645c080dabd98155667f64ec5e63bf847fe488ee836270d9906bea9d05d0c824c5757f4d860a56a6f89b4525d2666b964a72df964b860abd1afbf84b43a9c9238927007ebfaa7f7e3c4ee7ea7931d73188a98b75a7cca86762277c0acd5ae1f0855dcab8107be4b6deaa8245c6c90b1fa425e050175", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363397305a46d15a1fbd1718c65c5b71233ce63301ff33254e27be79b1faf0455420cb1d3ba38961d99eb4dd4ca5f4423fa7ecc992e517adf4bcc7891fe49c1f0e90a6d927376acace3683bbc4ff9f5d15a4c9ee2ad4271a1fb38c29668c3ce61898ae4fb28ba039f9030001532aa52d54afebb8b1d186c7283d6707334cdf0cf3"]}}, diff --git a/txscript/data/taproot-ref/3cb7605604a629153b71183c4083311f53f6fee1 b/txscript/data/taproot-ref/3cb7605604a629153b71183c4083311f53f6fee1 new file mode 100644 index 0000000000..cf45280cdb --- /dev/null +++ b/txscript/data/taproot-ref/3cb7605604a629153b71183c4083311f53f6fee1 @@ -0,0 +1 @@ +{"tx": "2168928d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b680100000082a688d3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0600000000b79a99bf04f55a8e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ace8020000", "prevouts": ["0ab323000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "5cb06c00000000002353212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["30440220487d2d101ed150b62a24d7d92cfaf315ff929e30c8260139b5399f4cb0af74b602205eb352da3f71fe94ceda84c40c7d13af0053ac9a15a068b01b571f3585dbd04a59", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["30440220487e8ce3df65516fdd3d0efe2c5d41647a023ace5fe6bfda4987ef87b33806160220575ee889d7357643247894ce013d47555819059d4de0449041182149df31807b59", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/3cd91b4c3a1d21d1c90b1e6542ae78fd35091778 b/txscript/data/taproot-ref/3cd91b4c3a1d21d1c90b1e6542ae78fd35091778 new file mode 100644 index 0000000000..e7cf511211 --- /dev/null +++ b/txscript/data/taproot-ref/3cd91b4c3a1d21d1c90b1e6542ae78fd35091778 @@ -0,0 +1 @@ +{"tx": "778899b603dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c95000000007c54b39660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fa00000000b5fe039b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a8010000002867b9b101c0ee1900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2bb98647", "prevouts": ["325f4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1bc120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "09e33d000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b", "final": true, "success": {"scriptSig": "", "witness": ["38e7db28381c7f870e8f3ea9691ce2d38b31ff5050529ee2b45b9759224fe85f970c45de2c0d5885323318ce7ccbbef71b2993cb1589e8784f16bbf0cfae4a7381", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["bde7f721c522a28fc221518a19b4513e461cdf6e46bae113944acc8fd055dc77e37e75dd6c52c9bba0967fa57bb408d14a4c97f19b6f5de4dabdbe835a78ace40a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/3d4082e12a369fee00a97f5ee6a3b72ea6f15238 b/txscript/data/taproot-ref/3d4082e12a369fee00a97f5ee6a3b72ea6f15238 new file mode 100644 index 0000000000..fb5ecb0d99 --- /dev/null +++ b/txscript/data/taproot-ref/3d4082e12a369fee00a97f5ee6a3b72ea6f15238 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9400000000c44b13eadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0401000000a6db52abdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c54010000002c43129203bb4104010000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6b86cdd5a", "prevouts": ["b93560000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0", "27ca5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "17f34800000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/leafver", "success": {"scriptSig": "", "witness": ["b1d9a37f61f7c7a4c82bf219436c4f1927e6f76722701677d56a29acfd127e0e3ec0ccd33568526ed29e04a28bde190ad28971e0d1b6d595d41d375d411bea4a01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "500715dd98e8041b179cfb07"]}, "failure": {"scriptSig": "", "witness": ["1c7b30a5fd81a190827244ddb13b0f4ad8d3404e9741bac8d15529fca5cfcb7f11ce707b81d4da50f8023c7eaa6296aad320c7b6b4a053426540971565c1869183", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "508116c23b6787b2098b11682c9e8d20d9827696375b938baf0cffbfc4ce2cd059e2021f4d191b54cc75d49b52dd9406e95240b59332b6c16a74218182a06f7860c023aaa6dc5890e4ba1af1b997377a356d263d187885556f5d918b985e226740b3451d49c771216044a4a0ff2165554ad703ed3c401d2744234cf4d2f9a2760551"]}}, diff --git a/txscript/data/taproot-ref/3d4137ffad2b1c85003d032d19a2150f4b6517c9 b/txscript/data/taproot-ref/3d4137ffad2b1c85003d032d19a2150f4b6517c9 new file mode 100644 index 0000000000..308fb8c73a --- /dev/null +++ b/txscript/data/taproot-ref/3d4137ffad2b1c85003d032d19a2150f4b6517c9 @@ -0,0 +1 @@ +{"tx": "c830ab1802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c16000000003360f5e8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c650100000012a15abe03ce9c99000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb5020000", "prevouts": ["be9747000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "7bc35300000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826047efe14993a8a73b9baf7cd14f960037ac1d53bb1921fe06fa7eee8637040814a663af4c315d4c0e419951403071b67d2106b9ce8bb6d7e6c872100135a32b791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b9fcf0a7c92dd23244df9580e55d15e57255b9f51d71ced09e9b8172bc04386f6047efe14993a8a73b9baf7cd14f960037ac1d53bb1921fe06fa7eee8637040814a663af4c315d4c0e419951403071b67d2106b9ce8bb6d7e6c872100135a32b791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}}, diff --git a/txscript/data/taproot-ref/3d65682b1f434030f11d6815360c3d269d231474 b/txscript/data/taproot-ref/3d65682b1f434030f11d6815360c3d269d231474 new file mode 100644 index 0000000000..08f6f6d62f --- /dev/null +++ b/txscript/data/taproot-ref/3d65682b1f434030f11d6815360c3d269d231474 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3e000000004eecdbfd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40400000000dc744fac8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48801000000149ea6b603d7969a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88aca8a50227", "prevouts": ["6f9121000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "11d139000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "5094410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "657d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa19acac53f630ad836c1252ba923d9d3235c3c343fcfee9c8733d292c93bc64142bc2c7d802e8c870cc0fefcfae9d23d316cca1682651be3bf62b663d5ddaa443"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363d30055f1b2452a1671c6e1eba433b096afb8e3d3c5ba62baf7090afff22fc4e74d92406f86dee9f8c04bb958856db6cfc0bb7ea92d17397457214a16beb1de2302781454c6297f6b8a579760f4d591c0acf84ff9d038b064bbab8a5d53835db"]}}, diff --git a/txscript/data/taproot-ref/3d6fb8e46d4f9e03d6de0e295ec2e0e50df1aa5f b/txscript/data/taproot-ref/3d6fb8e46d4f9e03d6de0e295ec2e0e50df1aa5f new file mode 100644 index 0000000000..1df0cee865 --- /dev/null +++ b/txscript/data/taproot-ref/3d6fb8e46d4f9e03d6de0e295ec2e0e50df1aa5f @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42d01000000bdb630c88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cd000000003ebb08c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f400000000c26dee9901a9b60e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374879a000000", "prevouts": ["804a37000000000021561f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "47ba3c0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "dfe4400000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["be422925792e3ada801d54172a3f99503d375b2a7cbec506e7880aeea8a8340bd54c174c2df59760be6047ed0571ab8346cc9029b75c8f79bf2766c41724817e"]}}, diff --git a/txscript/data/taproot-ref/3d75756c8dd79c4efe056dd5435cfb6a2457207c b/txscript/data/taproot-ref/3d75756c8dd79c4efe056dd5435cfb6a2457207c new file mode 100644 index 0000000000..40fd73ab84 --- /dev/null +++ b/txscript/data/taproot-ref/3d75756c8dd79c4efe056dd5435cfb6a2457207c @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd100000000ec47e22bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfae01000000926ff007049a1bec000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac12020000", "prevouts": ["942b7c0000000000225120cebe24bd65f3df56aab440a71cbc9879a1b3f80f985a5dd97b0c93b61f81cd49", "6cee72000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["edfcdfbea3c23f3bc1b87a0fd8f36757ab9564c40868070b71e554f8dc9078d3ffdfa0dceee87a0780f180410e674c5db6c3fe142f05f91227a8a0889696a3d701", "d28b204afc5398e160cbfc089192d27fc37dd6d8d3dbc4d7f744d17909f23444246ea1af7d8b725890a1852f7ca0ebf6dbc0e050545f3910c5f8f8e34d82a6d0110fda7adaebc667887af53ae9c9008d66a94f06be60efeaf1e5cb2a0ceff56cc8a4a5037beda28f6fe6f92d4deac48aeb00e163832b5b9032ed05f1dea398c0aff5daf1fe2e2341c0d0b025e6b6caa31f019c1e1cf0f0c9a461d30fe2ed90a9b3ba541d8f09c3af97f025464fb0bd", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f9c5d7eb03b7f54c91714f607bb106c5a9d67c7c5b975a10fc82efdaa356df65eddbb0afdf37ab261319ce7a8e479c320dc2477983d69b93935705b3f3620fb8ac68ace3853064e722e1b1afd151878c5865be09478b565571c169dd243fb993bad14950d771775f4676bac3906f4b088a0db4dc3dc7eefd6e7ad257912098000000000000000000000000000000000000000000000000000000000000000007772bf51064c90c0e58f48f9db455f9e50b8d8b08ce5800938a6261ec8209eae90b7b6e61126f6d3790e89865ab4119d57119006a85e75cb22756b96079fe197478217f5739698d82667998ebd36e9a2911eebce53cafd314027d12f6f7d6fb34e19f2960ef96b8d186a912da3a133529bf4f01072411fbb38048cc022ea939683a92d5e9be0215a4c7bafb7df24f1deddf8e3e70654a2a0c11526f54ecb2bded6906ecbd007b6adcd2d3a9c180f477d4f1c53a85a3c2f4d888450ce3bd3af660000000000000000000000000000000000000000000000000000000000000000b08832c8ada8bd9ba25a569edcea6d0b0273a8aa79360f1e19c2d1a818c8ca09ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe65874829a6fca96a658b69cd99e9a6ca9e70e2ea5a3c85673e85a85bc71fae6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ff857e1fd6562469c8364952c860f1e45b452f421582252bca13798aa371f62853e97ade0634f6e230ff512547d39d8acef1caaf72f24acf577c27424c68925ee0a5ae304c259c27aadd9bc76d24195f749514a131e48c16792d10e8c2a8e485343f3af3562acf496328ab7e97fc4676c110ae7813eb9b70720dd24cd33338a0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4369e24008103d8c9e6c573f0264e51327bda5fd52ee79f9386fa14dc4c224b742ad2539f6c1874c2ef824f3863f2a8f8052c33072d847547bcd0f5e72f332f500000000000000000000000000000000000000000000000000000000000000007a045ba295822f4cf3608dedf74c453dbad7c9617bc8ece1adec3b86c5403c12642807f1f220d8f386d1ab0609e9a99cf8f1d43c97626e5962d2cc1a0b5af4eafb4e59df34d3d625e91de9c6d25c50026a81b8c20f7cf02fc47355ab870c527d1ba446c59d7334926c5d1dbe2f8a1e1913480ff52db2a0bbdfa86f9ec4580f3c99914b59be4c93f5567d5f33492a01cc2b8e4fed7ae5ce0fe2280a98bda1468d1a906c9c42c9bfaa0d1fc5f6cd71c6c6b161419255acddc046e94fcb824ffcc5d0e462527e0dfdf1dfec4afe30cebf6e6d88ff045127ceeaf75e2bc4049d4fce45158bf70b8138e021f56c9cbb83cba475f04a8a436b707cf9aed9b3a37ca431aecb41c179c688a28bc4eb67bf14294077467cd7feb09b627db9cfc2bf1ffa03816beeec1135ad37064f945160b3191972d8052c36f1397e9bf72ad4098dcfca5a4fe73ce09fb577a9d78c681f878a257248613d22d56c913109f02554ec7b5fa924f2dbb97153499dbb253aa235f5bf5053126d36e5138c04d9d0195b1b36fd00000000000000000000000000000000000000000000000000000000000000009700eae923f62337efa128c93ca75ddf6d9923f84eb457d4bd4625ee87aa667300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc98418a242151286df9f103cc91b4737daf3474bb060ca60897a5071c5cb13ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0700c3b3d3a3c9ed6f7f9c9b876d19986dec133fe4e23093a3e3ac2321f772c01dbeb5fc721e190f39925e73434c74a8a5fe462047b1e2dfed09c47bb4a116e0000000000000000000000000000000000000000000000000000000000000000531965327d21e27d9d2b918afcab2f3209c8d7dc10cee9e8f37b414c6327057f0000000000000000000000000000000000000000000000000000000000000000a57a09473d1dae69a4cf8423571bb06b901f37253cdaa6e948f92e824fe53774ce748e9f089ba7d5836bd2cb3dd575489d6e593416b7cc9b5925f90571782dfc0000000000000000000000000000000000000000000000000000000000000000795be99b998bb12ec6379cb80d2a5ba5e9fb78303d4d1c6dbe7b097eb266d2a98cf72ef937dfa60258e4433686f6afa93de6212056f4657dbfee7f338fc9277fa6889804ee8b98431d81a65f360f220263348e9c001e9c0a2104450849d5944bed1c9d5b7e3dccdf65674148f2eb44cecbae02a19bddedb6c57fdd48b539e9c8e2e8f6e0f6662045e628a81353e9d0de000a43d6896b152f026b7fc2fc4fef146db315e33d1b3bfaf53bdd19b81a22db5819c2ef1c9bb9cffed167dd590e576415829a408737b4fcf5f6c2ddae5d97ce9f8a129a6a2603b93744fe70a217be14ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99475c4fafedbb1ecb857f13fffc28b7f316b28c0fc88efc47b1cc4e52b8f0b26e6ee6234bbaa24d441ddcf185f186d6a8adbaee2f84527033438a9a89d859b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb565c8b6ca6fd3f80259dbc88568e44ffc1f0fdd139e5452c4506a5ab6a46818431d69bae4bbdebefe763d5cfb2404b1ba08fb0428c117caea304db70aee0c6d3b1e5943c2d0fb5b0cd32b50ff77324af6345e448e419c8e2aea7711f11fdb632ee771d395c186394417563da56bec3dca90ba3be085367b0664e7ef134bb2ad9702c541b0c4cc1fb44e45c9d1245c0a21ef808528820ba1b80892058b0c05579a12a9e32c3ad6af2463d5d03488875345078119f402d9e1d4c88e4dcd27513377695598d5238e4177608ead4d851e782c309dfffb316f240d019c5b19569bc16749d5177783ad509f99ee914289e4866ecf7ee28223cb85890dbefdc5bf75a67489ca239183c005d36675edc774692901f6229f73ceb4db07d7299ce374ae51e21e7d6da88b73aa8cc1f232b4adb5f5621c8007d07edf771fcd7dbceee497667bb079e3fc189baabe10c78292d9f9bb6273b63109c3083d411bedb78c3226bd0000000000000000000000000000000000000000000000000000000000000000ce47725597941674b7e8bd1ee969309592499f4f1ee4ac83d38834649a3c6523a932e52a4f963c304d828b42c0de38ed5d4fa7c89a2bddf97b64ad966c7b79dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb342ab9a519cdc07dd77b174acc17830f0ea8dfbab2073f15594f414b05c68e7df9ba1e754cc5c999baaa94b7d26f795d4153a238f2e329ea6da26f92df720c25147814778cb006069dd170d3611147781245cf5c03c564e714f81285a1ce6c4018d9e395df31e06a57c07065d5f8cb987b113ed9be344488c59eed27496792cfac4c01f702a704d993876bf616a89cab8911488be9eaeb3b8556b604297a75001c3c1288e65afaeccf1a83f1ac1b7744393b51fcc27297ab5cbdfff743d34a800000000000000000000000000000000000000000000000000000000000000008041f55c0bdc07af5d6c2c0ec4afd20fd042e64663daa99d6a3352ce0c7bf7cad397a496cfcf53857a5e0b8d861b2a23f67be93be84641615b5d82f4ba00d212690eaa87a6b8641686c102382ec3de9005ba359ee5914fbfac245ce48dd1b7b9e8837718c6763acec811ddaac0f572a99f876f557dbb40c0333903d0bb680659f403b5f131380e8dac882fcfee1480b4efc4e6475db1da71ddeb21f8abce3710be65713c1bf91fb6a50ee126da21bb6248d2897c1517325914ff59c2fb012cbb45f9bdac925ed4392fd350ccfeebcc481c08a911f558310acd7a9408c71ed063a541a121265934e85e47f10f377e07340bc406366247b3fd64fa61d13f5bc928fc32675e9e9148915a547e615c77048610f34a8a2944aca1c93b0e7e340298494ed729477b414a782b459dc5b91ddb3f22e5caf167d2ee39edfaeb7333db0898877ca6ccb4a88afa0e4c80140254b39c7dec208b865d962a7422468658cdacc472afcbed6a9d193e85f96d5273c5bb6c090f57d1a2c71c83d6db99bb64d6620f0000000000000000000000000000000000000000000000000000000000000000d5b6e753cb106da3c716a35df2d8dee3e417541b97f8f62bf1fe16a0a6fd319c9ead626369bd6d5f8484ff3da8a9b5c89c18b2d2d268e456150fb20549334cb8296673afbc702ea89fcf861b76b66b8746885fbf3668e09533eae1ed62fdec1179372bc439fe3e8ff996941583cdd821fa061b44ae3381420f4d5973f6a1c537e30df0147a77e13e708e03b38df52f197e2443ea7f7d686a34a47aa52642dc47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2ea7b694001f5f3d230108f2e954385b3964629545cf5ffb1c89f944aae7b97f0000000000000000000000000000000000000000000000000000000000000000ea3c55499635864516e47c9569140163ec17b994aed30db17408e09a0f05fe2c7f270490ccecaa24cd2f3a34592ac8eb88835240957395e87c881f69826bcf642a78d7bbb6057f8839d6b39afa757e8d08156e2b63ec70d0ba55a8312a8f1989", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["edfcdfbea3c23f3bc1b87a0fd8f36757ab9564c40868070b71e554f8dc9078d3ffdfa0dceee87a0780f180410e674c5db6c3fe142f05f91227a8a0889696a3d701", "6d1918b7181d68101b4626a6d6d42553e1ee298c0b5fbf25bfb05227c2d9a8a1faa81168b16ab8e2885fa3dab118c996164ef710bfa88cca1d09347c5683d360f59dc24a012f5abedcba8459d7fed5f145a63bb583b1c0a0932b95f9120bd8a3d0b9c2ac6f0f58af28d43a3a662c00bbf2cc84d17a3074149592c9909f721278df120872cf3d0ff9a3ca48a660201bba384678216494f660c98272b9570335f1ac1a167c479b5d1213841267eeae", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f9c5d7eb03b7f54c91714f607bb106c5a9d67c7c5b975a10fc82efdaa356df65eddbb0afdf37ab261319ce7a8e479c320dc2477983d69b93935705b3f3620fb8ac68ace3853064e722e1b1afd151878c5865be09478b565571c169dd243fb993bad14950d771775f4676bac3906f4b088a0db4dc3dc7eefd6e7ad257912098000000000000000000000000000000000000000000000000000000000000000007772bf51064c90c0e58f48f9db455f9e50b8d8b08ce5800938a6261ec8209eae90b7b6e61126f6d3790e89865ab4119d57119006a85e75cb22756b96079fe197478217f5739698d82667998ebd36e9a2911eebce53cafd314027d12f6f7d6fb34e19f2960ef96b8d186a912da3a133529bf4f01072411fbb38048cc022ea939683a92d5e9be0215a4c7bafb7df24f1deddf8e3e70654a2a0c11526f54ecb2bded6906ecbd007b6adcd2d3a9c180f477d4f1c53a85a3c2f4d888450ce3bd3af660000000000000000000000000000000000000000000000000000000000000000b08832c8ada8bd9ba25a569edcea6d0b0273a8aa79360f1e19c2d1a818c8ca09ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe65874829a6fca96a658b69cd99e9a6ca9e70e2ea5a3c85673e85a85bc71fae6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002ff857e1fd6562469c8364952c860f1e45b452f421582252bca13798aa371f62853e97ade0634f6e230ff512547d39d8acef1caaf72f24acf577c27424c68925ee0a5ae304c259c27aadd9bc76d24195f749514a131e48c16792d10e8c2a8e485343f3af3562acf496328ab7e97fc4676c110ae7813eb9b70720dd24cd33338a0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4369e24008103d8c9e6c573f0264e51327bda5fd52ee79f9386fa14dc4c224b742ad2539f6c1874c2ef824f3863f2a8f8052c33072d847547bcd0f5e72f332f500000000000000000000000000000000000000000000000000000000000000007a045ba295822f4cf3608dedf74c453dbad7c9617bc8ece1adec3b86c5403c12642807f1f220d8f386d1ab0609e9a99cf8f1d43c97626e5962d2cc1a0b5af4eafb4e59df34d3d625e91de9c6d25c50026a81b8c20f7cf02fc47355ab870c527d1ba446c59d7334926c5d1dbe2f8a1e1913480ff52db2a0bbdfa86f9ec4580f3c99914b59be4c93f5567d5f33492a01cc2b8e4fed7ae5ce0fe2280a98bda1468d1a906c9c42c9bfaa0d1fc5f6cd71c6c6b161419255acddc046e94fcb824ffcc5d0e462527e0dfdf1dfec4afe30cebf6e6d88ff045127ceeaf75e2bc4049d4fce45158bf70b8138e021f56c9cbb83cba475f04a8a436b707cf9aed9b3a37ca431aecb41c179c688a28bc4eb67bf14294077467cd7feb09b627db9cfc2bf1ffa03816beeec1135ad37064f945160b3191972d8052c36f1397e9bf72ad4098dcfca5a4fe73ce09fb577a9d78c681f878a257248613d22d56c913109f02554ec7b5fa924f2dbb97153499dbb253aa235f5bf5053126d36e5138c04d9d0195b1b36fd00000000000000000000000000000000000000000000000000000000000000009700eae923f62337efa128c93ca75ddf6d9923f84eb457d4bd4625ee87aa667300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000dfc98418a242151286df9f103cc91b4737daf3474bb060ca60897a5071c5cb13ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0700c3b3d3a3c9ed6f7f9c9b876d19986dec133fe4e23093a3e3ac2321f772c01dbeb5fc721e190f39925e73434c74a8a5fe462047b1e2dfed09c47bb4a116e0000000000000000000000000000000000000000000000000000000000000000531965327d21e27d9d2b918afcab2f3209c8d7dc10cee9e8f37b414c6327057f0000000000000000000000000000000000000000000000000000000000000000a57a09473d1dae69a4cf8423571bb06b901f37253cdaa6e948f92e824fe53774ce748e9f089ba7d5836bd2cb3dd575489d6e593416b7cc9b5925f90571782dfc0000000000000000000000000000000000000000000000000000000000000000795be99b998bb12ec6379cb80d2a5ba5e9fb78303d4d1c6dbe7b097eb266d2a98cf72ef937dfa60258e4433686f6afa93de6212056f4657dbfee7f338fc9277fa6889804ee8b98431d81a65f360f220263348e9c001e9c0a2104450849d5944bed1c9d5b7e3dccdf65674148f2eb44cecbae02a19bddedb6c57fdd48b539e9c8e2e8f6e0f6662045e628a81353e9d0de000a43d6896b152f026b7fc2fc4fef146db315e33d1b3bfaf53bdd19b81a22db5819c2ef1c9bb9cffed167dd590e576415829a408737b4fcf5f6c2ddae5d97ce9f8a129a6a2603b93744fe70a217be14ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff99475c4fafedbb1ecb857f13fffc28b7f316b28c0fc88efc47b1cc4e52b8f0b26e6ee6234bbaa24d441ddcf185f186d6a8adbaee2f84527033438a9a89d859b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb565c8b6ca6fd3f80259dbc88568e44ffc1f0fdd139e5452c4506a5ab6a46818431d69bae4bbdebefe763d5cfb2404b1ba08fb0428c117caea304db70aee0c6d3b1e5943c2d0fb5b0cd32b50ff77324af6345e448e419c8e2aea7711f11fdb632ee771d395c186394417563da56bec3dca90ba3be085367b0664e7ef134bb2ad9702c541b0c4cc1fb44e45c9d1245c0a21ef808528820ba1b80892058b0c05579a12a9e32c3ad6af2463d5d03488875345078119f402d9e1d4c88e4dcd27513377695598d5238e4177608ead4d851e782c309dfffb316f240d019c5b19569bc16749d5177783ad509f99ee914289e4866ecf7ee28223cb85890dbefdc5bf75a67489ca239183c005d36675edc774692901f6229f73ceb4db07d7299ce374ae51e21e7d6da88b73aa8cc1f232b4adb5f5621c8007d07edf771fcd7dbceee497667bb079e3fc189baabe10c78292d9f9bb6273b63109c3083d411bedb78c3226bd0000000000000000000000000000000000000000000000000000000000000000ce47725597941674b7e8bd1ee969309592499f4f1ee4ac83d38834649a3c6523a932e52a4f963c304d828b42c0de38ed5d4fa7c89a2bddf97b64ad966c7b79dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb342ab9a519cdc07dd77b174acc17830f0ea8dfbab2073f15594f414b05c68e7df9ba1e754cc5c999baaa94b7d26f795d4153a238f2e329ea6da26f92df720c25147814778cb006069dd170d3611147781245cf5c03c564e714f81285a1ce6c4018d9e395df31e06a57c07065d5f8cb987b113ed9be344488c59eed27496792cfac4c01f702a704d993876bf616a89cab8911488be9eaeb3b8556b604297a75001c3c1288e65afaeccf1a83f1ac1b7744393b51fcc27297ab5cbdfff743d34a800000000000000000000000000000000000000000000000000000000000000008041f55c0bdc07af5d6c2c0ec4afd20fd042e64663daa99d6a3352ce0c7bf7cad397a496cfcf53857a5e0b8d861b2a23f67be93be84641615b5d82f4ba00d212690eaa87a6b8641686c102382ec3de9005ba359ee5914fbfac245ce48dd1b7b9e8837718c6763acec811ddaac0f572a99f876f557dbb40c0333903d0bb680659f403b5f131380e8dac882fcfee1480b4efc4e6475db1da71ddeb21f8abce3710be65713c1bf91fb6a50ee126da21bb6248d2897c1517325914ff59c2fb012cbb45f9bdac925ed4392fd350ccfeebcc481c08a911f558310acd7a9408c71ed063a541a121265934e85e47f10f377e07340bc406366247b3fd64fa61d13f5bc928fc32675e9e9148915a547e615c77048610f34a8a2944aca1c93b0e7e340298494ed729477b414a782b459dc5b91ddb3f22e5caf167d2ee39edfaeb7333db0898877ca6ccb4a88afa0e4c80140254b39c7dec208b865d962a7422468658cdacc472afcbed6a9d193e85f96d5273c5bb6c090f57d1a2c71c83d6db99bb64d6620f0000000000000000000000000000000000000000000000000000000000000000d5b6e753cb106da3c716a35df2d8dee3e417541b97f8f62bf1fe16a0a6fd319c9ead626369bd6d5f8484ff3da8a9b5c89c18b2d2d268e456150fb20549334cb8296673afbc702ea89fcf861b76b66b8746885fbf3668e09533eae1ed62fdec1179372bc439fe3e8ff996941583cdd821fa061b44ae3381420f4d5973f6a1c537e30df0147a77e13e708e03b38df52f197e2443ea7f7d686a34a47aa52642dc47ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2ea7b694001f5f3d230108f2e954385b3964629545cf5ffb1c89f944aae7b97f0000000000000000000000000000000000000000000000000000000000000000ea3c55499635864516e47c9569140163ec17b994aed30db17408e09a0f05fe2c7f270490ccecaa24cd2f3a34592ac8eb88835240957395e87c881f69826bcf642a78d7bbb6057f8839d6b39afa757e8d08156e2b63ec70d0ba55a8312a8f1989", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/3da479f176b53c08e1248502a5bc75aed6c71746 b/txscript/data/taproot-ref/3da479f176b53c08e1248502a5bc75aed6c71746 new file mode 100644 index 0000000000..194bd264e6 --- /dev/null +++ b/txscript/data/taproot-ref/3da479f176b53c08e1248502a5bc75aed6c71746 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cab01000000c52c83f28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41902000000b66db99f0378a38d0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f874b030000", "prevouts": ["b33c4b00000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "74f3430000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d4", "final": true, "success": {"scriptSig": "", "witness": ["cc046d3ffc5e59b0b8de740e0d2de28228302d766dedccc174d524acdcc2ed89c895cb81a637b1f4fe04aa7e54cb8c1ee76ef66a352e363340888b71a94fbabe01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["12ecb9562664fc9fe8e7241ab3dcbd019ec2b56bd1e66261b7dd25629447514533420a00ba1cffae854a80eeec73b6f6d25c5e947862ff61b205e20db15e19a9d4", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/3db85c10d9886a1d664d6d3db26ae7961d66a4be b/txscript/data/taproot-ref/3db85c10d9886a1d664d6d3db26ae7961d66a4be new file mode 100644 index 0000000000..dea220436f --- /dev/null +++ b/txscript/data/taproot-ref/3db85c10d9886a1d664d6d3db26ae7961d66a4be @@ -0,0 +1 @@ +{"tx": "5c3eff1d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4f0100000047cb658a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b400000000b06c21f90234212f000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac25020000", "prevouts": ["6abb1f00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970", "fd3b120000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "417d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936625394cd07ac5332e9837d3d183b906354a4c6266a0b69bd6286a70cd041b76b45bbf2815375aaeee056e6b05e441f58ef8c911146e9d15e94b57fcda7a8d0b76831d286b681d36077bb0670e25d1d3b2bbe36e9d696c3276746d4ede397eb7d"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369e909eda73886f3ec8a47c266112c6e5fc7df5ec0f1bcf543e7d218ae8f9d61153f01d9cbc4ce44e53bf46e342c1ac713c14ac9ff1cc3e88a31c5570fba253bd819e00a9246c8c145cff8a91ff4546d478c6c8e3d7b4e3f7e61102a4388494af"]}}, diff --git a/txscript/data/taproot-ref/3dc41a3a65eecfb088cf236466ab9fb737a19b57 b/txscript/data/taproot-ref/3dc41a3a65eecfb088cf236466ab9fb737a19b57 new file mode 100644 index 0000000000..6d3e2513a3 --- /dev/null +++ b/txscript/data/taproot-ref/3dc41a3a65eecfb088cf236466ab9fb737a19b57 @@ -0,0 +1 @@ +{"tx": "23fdaf0a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b660000000016a519fbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3a00000000879540b203c8c28f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df9797223689877e1bf628", "prevouts": ["a61d230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "95886f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a5", "final": true, "success": {"scriptSig": "", "witness": ["5257acb12077e4a0cfdd11bb36bea1087fff8792c76a2bb7358071fdc265f3bb9aa43c86a11475e75689650c685417cc22040689941255f306e9a043e3585a8b82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["e70b535da6eb381f0563046cfc53c3c41e92dda54620396a8308c80a3e02443618e41919c1224794946240f717b0c81f81ccd67d4658e5ff6a05a150bf8a2367a5", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/3dcd87542c1fe27ba922187001739130ac6c6c5c b/txscript/data/taproot-ref/3dcd87542c1fe27ba922187001739130ac6c6c5c new file mode 100644 index 0000000000..f4098da273 --- /dev/null +++ b/txscript/data/taproot-ref/3dcd87542c1fe27ba922187001739130ac6c6c5c @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40001000000879be48fbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9600000000f30fa8d6019bf8a2000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e62e0b28", "prevouts": ["7d1a3c0000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "7f417a00000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "327d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8dc5eed1d7503ecfab0ed4d46e7cc50ff1de729365d43675c7ebcad838ce58c01620e954adb3b90d8c3597d54022d70f5af7b761a66be618c54dd56feea2be872"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93640ff68d439a51ee107fd83731a2288fde4c117a4005465377136bc1a4823e224dc5eed1d7503ecfab0ed4d46e7cc50ff1de729365d43675c7ebcad838ce58c01620e954adb3b90d8c3597d54022d70f5af7b761a66be618c54dd56feea2be872"]}}, diff --git a/txscript/data/taproot-ref/3dd2c473cd54ea601b15cc9840f01e6cec72fbd3 b/txscript/data/taproot-ref/3dd2c473cd54ea601b15cc9840f01e6cec72fbd3 new file mode 100644 index 0000000000..f9fee2ebf8 --- /dev/null +++ b/txscript/data/taproot-ref/3dd2c473cd54ea601b15cc9840f01e6cec72fbd3 @@ -0,0 +1 @@ +{"tx": "32a22d0702dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2500000000efb94c898bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46401000000695cd28101bdee5300000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acab3f1920", "prevouts": ["d04b53000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679", "5d2f4200000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b6808ca78b661bce204a3b17b7f3e8f2aa2063dcccc4cffe698227ae90135b9096aecf1c37a7131f7d59a248f44ceb50bce2e40baf9d4d5e1aeebfecd7c68de1c3935167daf605213b52b271f9e6a53725a69c71e98809d589a82fdf67815380f2724b50b68b4936fb2f7b513f82364d9dd2ccf414deca202e2eef9374045dea4b83545d5f0f8d552e1465fb40c88d4cd8c293fb2145dab48252f4df6a68a0342ca8463c38a1f1604f2a32f235f9fbd94c74b95e11ee52278594a144f8dd90888cd13eb642c3c10d17c6ac9b63886e361011ebd5915c34590f564d77fc3a7c15aca11359fae5b5630d0a75d10fc7715c6dc8773980cc9eb22c905d79cf9d58dd2b1184204353f56a4e46d09f63c64be304dd5693cd9aa08b2609b52ee309f40e65c7c49603b1a5c41273233928c568fa04cf2a35bd8b9fe7de9956e394c4a5b2899a477c8f71ea808155321e54be8eec7d2bb9ca55b9b68942a4a3a79e5f292d3c3a9cf243ab0b5d734ac1d0932ca89ab10c3c71f836f660ed23967efacc8420f9263f7a8dabb7e729d7ff900df6e19e463515b0c89fd48d00593fc1c733040e3bf33d09cbab71b555a8572c90b8b25961fcda27b78b609916445e5d8c0328e6f12679e309c48037ad4add4c871b5375afd3931f8f35e578756078ca47cdb79b78d966d308d23ccadc276bb7badbd4baaefd740dd04639a5bc24e6c73b23001bb64e7ed46dc98bfb9b75", "6f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4adc39ce81a6fea632ecf565fa45d7a7ca50aa2e3b548038c9066d72b539243596a6ef766bda57b4717926485a86d332fc460fd2733e6a54825f17015621dd4290"]}, "failure": {"scriptSig": "", "witness": ["4d090238b87369689df0d41cdac31b08995a5b5ce07b2f2182732f8a5ee13a8c46780a7c85e5c7dd9f03be4c603203eabb84a2ee8e277b2d1b214e1ab9c98ed1805c66ba91dd012c4b8201d2e8ce2a5798f2d88943fe0259141034a54590ee09c88fe1d7bc4dbd9fa306acef3a2cdb0bb049d37f94c42479e25a1ae0312dc68ef252f9eefaef6dc28107237690377498009a80915c5cb21c99330db43ee2d97b8c6d0d301e216db4ddd6a28602dc6e089eaae0ddd58d51cae74b1857d8a3acccf4a582e9db8824b23b412c96b228064952e1533cb9cfc85aa762a16439a9c5e8d8f4ce402316ebe911ab27241842dc750722ceb80260614ea65468508327e49c43cfd9a00569d1bfbbf457beba5e1ca922857ecb06e1d3fce829ee0a17f0759b212f1d747ded1588f92d9c4260cab743db6e3c39a225a552b3d7bb9d38f5d8f0a78f7eea7b3264cfdbe23ae86267349c9ba2d8dadb6422ecaf55f067d68034f0c2ef11a777fc32f817dad4917b435eb31731585dbadd9fff7d3561e197954accd4f7596b6f92e9e4a5331dc36cc554051aaeb4cdb7e0072217b9e87c96aa556ca317b0be58298baf2d898648417d8c5497fa22883b89d7a05d9e6cea31c148abe45ae93cd53cebbb6687826b8537fadef6ea42f09ef179e0b8c5b6aeb115fc6db5fbb590348674e614e791df6c325267d3a3852f04f6c094d916c80e7dc0b15cad867325f5c4830a2a6f1a8175", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ff7b311773aae467fec7730c03ca925f7d90d2d8851bbd9c3c07340c4c785e894cd3bb01e072d01d43d3082324ff6e625f5d569cbe89802b785fdd288bfd31c9a3f8f9fe88f0f431b5ffad473abfcf1c4b340e1c7daa1232bf4c86f035b8cc51"]}}, diff --git a/txscript/data/taproot-ref/3e0593c1054f6598bbf8297623874e58ed4f2f9e b/txscript/data/taproot-ref/3e0593c1054f6598bbf8297623874e58ed4f2f9e new file mode 100644 index 0000000000..1ab86aa7d2 --- /dev/null +++ b/txscript/data/taproot-ref/3e0593c1054f6598bbf8297623874e58ed4f2f9e @@ -0,0 +1 @@ +{"tx": "671d5a89028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46a000000006a1175f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41701000000b71cd6f70163c15100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac85010000", "prevouts": ["96443e00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "82ac3200000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "537d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee1ea8876939edcfa4030d01bff156fecefc420cd1c8fec8a2f14f09f14c187072e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fde150f8c7b4812d3362c6afa34922f3b5cc4b63cc9e98285537a088f4a7fe3bee"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d603694b1746abcdb32c29db50a1413ae8228bd62a4d8e06b3ca802f4bdf7f4d1d38f649aceaf83ba76018e55a1207707882be6904852f7ab0998fc8ad53a321d892d02e0db2d70aca72db86bdb1e35d04291625c81ec0b3d884b10be9f787fb"]}}, diff --git a/txscript/data/taproot-ref/3e1e6aa2f96548cfbcb05311c5d24990bb96a8ef b/txscript/data/taproot-ref/3e1e6aa2f96548cfbcb05311c5d24990bb96a8ef new file mode 100644 index 0000000000..36c671927c --- /dev/null +++ b/txscript/data/taproot-ref/3e1e6aa2f96548cfbcb05311c5d24990bb96a8ef @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff6010000004f498f07dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c860100000008441211dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7700000000fe3bde330149db9a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9fec5531", "prevouts": ["f6da7500000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "dde94700000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "c6d94e000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "9f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e93df6a2e62376e6a3587300ef2d1a395dd90428413a52508272625b5a1a189adb591a16be56540de55d9fbfa115de937b3aca1e4dd0f5a93f17ebd2ebda95183"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936327099b01b253298afa4f7cd9d288beb4aefe51868cce630b6f9dfce458fab5ee7391eb2542a03443f1c351bcd0fdf78b6f5cd40e118bcfcda3d325918034371ee453f7f7ccbda5a0ba96115b963083e4b2e9e93a3abf82e4dae88dd7e6a6b566f3617d560800e971f99646d89bd2028caf0c6d02b6f505a11fcad3ec349c801"]}}, diff --git a/txscript/data/taproot-ref/3e2370ff2103895a7c13f394468b1d7588a525a0 b/txscript/data/taproot-ref/3e2370ff2103895a7c13f394468b1d7588a525a0 new file mode 100644 index 0000000000..b374aa29a3 --- /dev/null +++ b/txscript/data/taproot-ref/3e2370ff2103895a7c13f394468b1d7588a525a0 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffa0000000003a2aaccdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6d000000009d67e03e033aa3a6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75b000000", "prevouts": ["4d2c850000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "6dfe2200000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09026bef139b8b79d9b15d958cbdc1f728486a1718f73e2355a089963e4abef9c0d503b1eeaab8cca325bf1cc68a7cb2c9007b6e3cdf7d90d077d3fdb5dea4014f92c79b5a7809b8bf0f99b1c26cafc5078f267efab1ac6360594a44d476debf7308e42d1fcd5422450c9582cea176c964e3dd81e6efa117624eec6a270289e54b52dc6dbcb1c1871cf31a3b082e5c263e32fe9abf6eb6dcc57b3a03bab8f0d9c10ddb444809c38e9008d328f48fe4a1789cc60ec6c29b11aefcd608361ac35c552d3d916f33e9f4cf10f781192c36d64c7c8a418e532ac353cfe8a4def250752ad04df9ea2656ef4c8cdacdb759c4affa372e05b789d209feec746223df4f9a426315f6cad337e1813a18d09c2554dd0a5ad63a9c523fff216b13d2f500acbfc4ad0de8f33624c87459f7fd881637d005f8d29cbfc6cc173e2db998d71e68f64a9c8c7b89c0f08fd72c86760ed05ccab90116ae3a35ed863898d491f7871a4d38f8db75efd3a04d2270c597ebce0db412c0a3cd3bca56d8f30254acb56bdb6ef26b29f2fcf25b953ffd201f32c68a7f183012522e61cedd35bd8231329b3dec0e1594bb77b39126b0acf16a6f636d9ddfc6fc2c28b3e5702f8cc6a2118acc3eead4eba8cb88cd566ec2e671b9ca1dcd533518eb6176ef3783690962ddeec7fbd68a36f9bc9e98a0787c05b5e506be860c242e07017f3244b62afc92f110fe3d8b3682a25f0a3f6b41736375d6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93605b68b7555431fb9df93ab122414b31e5279de2800baba6f217865faa01584b0c99cdefdc3473a619e12778c4cd588646c716d59e86e999fbd28728a66c3e7c6a7d0a3f3648f0d829df7cabdb8f0af96ecc09ebc190c461c6b5fbdc9f87abaf73acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}, "failure": {"scriptSig": "", "witness": ["4d09027fc358edd531085246ad04f485140848bbb9d22877da445cfc3ad769c9d8ee95e64f53eeca28db66fa027b0591e1c3ca61fe25c696897b3964e955bac48c6ad49a19c71aba49915e98f8e3d906c60e21726f79f81006f14b4852622007fab3ab7ad95d41188a1083ef45b64036be273829094a699ddb4e6d3ab1b90c7d1a91f20673fd72c8c3e1b8f51075efcb46386ffe516586ffe0ee295a40301bf816158d2289f3923f64efdf7a42cb069314c20dae4a200585ce8ff36fdaad7751a7ba1fee7ed082f64002900517df0f74f769fd79b9d0cf27381262cada3d0072c7b42b3580d1b544716ad0b0770e6b91e7aa5103d872efc3c375f5efb59e11dc1893d474d5f8c3ddb0b2982249603425c4f6a3145f12b3de2f2e6d0fed88b1f5c1bfb5d1d17ba34eb6e31ab53b9b06d7d8c6be8da8a181e88ed63ec1b6e0c9b8be43e2b0d5f3ebded902e468e02baca64940cd8a540c713e3fc113f5a7723762d5b534d63716178b90887e65557be9ce5c60d50bb9eb694f139049c6a6598fcc791528bdc63b58ddda9fcf95d8ec03f3b6da6f71238a7298ac7760832d2607be7da01b0a10f3e8fe9ed179e5b2ec31d04248c819ff1e94c2d5900e068dca4bb28d9405d578337cb16703ba3c9ec801fd37f9d2a85c8d199979152f454fcc08d585e96f86e8f2ba82697e954f51b1cb1aa01c801b46f4a2d96faea8b733ace2efa2f842cd69e486688e90a0907561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ca585b58cbea5a7207e2f9700bf95d02dcde0e3417cbd056c4efa914a582a327ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b22a5aef24b6a1c01bacd2a24a37cefc04a347b590d10f3bd98469f969c355217b0dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}}, diff --git a/txscript/data/taproot-ref/3e30536558f547b9ad4f09f367634b969078f719 b/txscript/data/taproot-ref/3e30536558f547b9ad4f09f367634b969078f719 new file mode 100644 index 0000000000..470b674571 --- /dev/null +++ b/txscript/data/taproot-ref/3e30536558f547b9ad4f09f367634b969078f719 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc200000000f7b7a2a260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700e00000000e4710aa80255ee7400000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca0000000", "prevouts": ["07906300000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428", "db0f130000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "577d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936959ca2c498f0f62da8da99e7dd3b27b348a55d74011ce858dd89c431589d8b6e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828cd69c149de1c0fd775c23d200817106db3811e77c5a94d49bd03e58d7bcfa223a8385792857b3824bc259fd95f469eb32c57805e5f383de6590f06749d208e6"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362130eabd9bb65b7301a0825f895bcb2d1ad88ce8047b79faf2c001ef0627842a1c685f9e7861cf217f0c3f090528b45399014026e5720182b0faf436212c9d85a66706abdbe591f97764059d8785051c12d40b9c9543fb83334d204ae23d8b59"]}}, diff --git a/txscript/data/taproot-ref/3ea9b3574203d1cc954fbb5b93f7588b765a4d0f b/txscript/data/taproot-ref/3ea9b3574203d1cc954fbb5b93f7588b765a4d0f new file mode 100644 index 0000000000..f0543fbfdf --- /dev/null +++ b/txscript/data/taproot-ref/3ea9b3574203d1cc954fbb5b93f7588b765a4d0f @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ec000000003f55e4d0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4d01000000793d45fa02b27535000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a15b323f", "prevouts": ["522912000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "43a8250000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "907d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8693163a47c3dba2861e33fa837573abaf06e3047dcd3f7c322d2576c3cfe3d489f4b63c6df7ef43e2db8ec562e1d1dc49232dee39216a09a14bc3b6a66d1e38f07d6dd053b835b300872a79bbaa392d17bbe19548a92a63c5948e9fc7e63dbc8"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08251b810e60c043042e0bb2eafa8cecc8c22fa830d489bdf7de51e14fd273b03e0ba4f11ff80ca9181e3d85997fa959accb8f97af45a52bfd0df916797673441f5"]}}, diff --git a/txscript/data/taproot-ref/3eabc6ab34a7c9a974850c1dd22c428aa05b1b1a b/txscript/data/taproot-ref/3eabc6ab34a7c9a974850c1dd22c428aa05b1b1a new file mode 100644 index 0000000000..bdfbd4b9da --- /dev/null +++ b/txscript/data/taproot-ref/3eabc6ab34a7c9a974850c1dd22c428aa05b1b1a @@ -0,0 +1 @@ +{"tx": "c500bd8803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6b010000005ed744c48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49501000000484908fc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43b01000000f2652ed601e58f2a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7f5010000", "prevouts": ["d29a240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d2823f0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "17283b0000000000225120f103da370e61120ffbfed9be73547691440e55c4664603c27eb9ef615a7ccbdc"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93677e41dab50557b5b20871f2553a2bc1c7b9ddf7d5b647a2744f571de9caa26f1"]}, "failure": {"scriptSig": "", "witness": ["6a57616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/3eb9a6cfe1aa2c1c02424702999504c5b096248f b/txscript/data/taproot-ref/3eb9a6cfe1aa2c1c02424702999504c5b096248f new file mode 100644 index 0000000000..b71c1b1198 --- /dev/null +++ b/txscript/data/taproot-ref/3eb9a6cfe1aa2c1c02424702999504c5b096248f @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127016010000005a40fda98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cb010000005cc4a369dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cab000000003c7930a40216509d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac25272e3f", "prevouts": ["2ae70e00000000002251204929a185ed20b7f7e86ae8920b068b5e7d5df0975bee6bbfbcd97b6bb81e709d", "b3c23b0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65", "8b34540000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cf152d63f1051f9385c5addf6d53db16062c84e9870929489e0718e5f0e91bd5"]}, "failure": {"scriptSig": "", "witness": ["6a01616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/3ebde48f5439e084e28144fd489296408e0dac44 b/txscript/data/taproot-ref/3ebde48f5439e084e28144fd489296408e0dac44 new file mode 100644 index 0000000000..a3628f3d92 --- /dev/null +++ b/txscript/data/taproot-ref/3ebde48f5439e084e28144fd489296408e0dac44 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c493000000004619122f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705600000000f0a051aedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdb000000009966758c01ba080700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac63030000", "prevouts": ["901e38000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "2cff0f00000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f", "676a26000000000017a9144c4b1fc943f04d775886b4f6d3c3c73bf7d3118c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6abc", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dae56aa441f4258abe9bcb76736e618cba7a98e5acbee529967b1ef4b09363f599aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d5154a115ce154f943bf3cf8f46c74cde664956f57cd29b00bedec3f53c1a73157ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd8f5962b372cb4e7f2fb078cf6d27c268bbba1ff2abc83942f0aa063fc70b686a0ed0b6cdb130b03f26b8a245e72d5247ee3941518d7e9956496f6ce27b97d7150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}}, diff --git a/txscript/data/taproot-ref/3ef5bed9863d50fbfa4dee5c776d36177e888adb b/txscript/data/taproot-ref/3ef5bed9863d50fbfa4dee5c776d36177e888adb new file mode 100644 index 0000000000..759cfffc22 --- /dev/null +++ b/txscript/data/taproot-ref/3ef5bed9863d50fbfa4dee5c776d36177e888adb @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc001000000cc3e5864bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf850100000023fe971b01f0091c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6c780bb21", "prevouts": ["5d6e220000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156", "f656660000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e14c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366ed0e779cc15e2a03d2e3d97c8cf6c7506658d81da92e90af03d7b12593133764b04f8f54a0a76ae0e4c7aeaaef28ce29fe1b2cd8b193a4d28e758ec231d2b883bd198ccbfa9c702c0592bb8c84a948c36ef9eddfd1aec8278a333dab45811656e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365bd9e6af64badc3bab736f59ea7db24f388eb048beb664b97cc6c7235b822e2c1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045f693e8696ee404d8be98a67cec2febef1e0f75b013501a27963a3fb4300a4da26e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}}, diff --git a/txscript/data/taproot-ref/3efcb90f4a83944731d1cbf69fcde8147549f8ff b/txscript/data/taproot-ref/3efcb90f4a83944731d1cbf69fcde8147549f8ff new file mode 100644 index 0000000000..04972702d8 --- /dev/null +++ b/txscript/data/taproot-ref/3efcb90f4a83944731d1cbf69fcde8147549f8ff @@ -0,0 +1 @@ +{"tx": "fca5d31203bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb801000000d35e6ddfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4001000000e5f842af8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49500000000cbb138bd029ea525010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b6000000", "prevouts": ["208c780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "859d6f00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "eaec3f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100817ec35acda74ca63193961fbfe82d53b1e97ee57ddcedd61b88c3e49cd38570022025b39d8bee72e545be9bdaa5255eccc67036b5aa1f5c0417168f798dd7e15e3e012102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "4830450221008202765397f684b91dbc2d69586666f6c5f1f0012eb1dcc5235401e6bc3818a302201970e0bdfcc3817f49d88aeb11c4317a096229ed3911f7d9d1eb55fe179e99de012102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/3f08853267dab46c6370068cbb68b228923ff0b3 b/txscript/data/taproot-ref/3f08853267dab46c6370068cbb68b228923ff0b3 new file mode 100644 index 0000000000..966f7327fc --- /dev/null +++ b/txscript/data/taproot-ref/3f08853267dab46c6370068cbb68b228923ff0b3 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c601000000236a23f860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127010020000006b91e6da01a7a13100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3e000000", "prevouts": ["83e233000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787", "2cb5100000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["304402200218967cc003c22e4af7b2444fe390eaf3c6457bb906b8a209a59be641896c3702205b4b4ab9d6b72bc0b58a7a3fccd57cba4bf5597292f8e85dd97285406b239b3681", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3044022015ee4b743fb8a158aad5b103be8d9913d0514f9bdfed33d482ba580d2b60a2ad022059a6dcff80e0a020e01b2dd65b7b2b5871d1f4648b20673721cc9956c8a4edef81", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/3f1549e9384322e64380cd38621193a46900a116 b/txscript/data/taproot-ref/3f1549e9384322e64380cd38621193a46900a116 new file mode 100644 index 0000000000..33c2bfaff3 --- /dev/null +++ b/txscript/data/taproot-ref/3f1549e9384322e64380cd38621193a46900a116 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfe010000000fe2765760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ea00000000cfd16a8c01ff36080000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796ba030000", "prevouts": ["92fd270000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "b4031300000000002251206c786b308a9c6a675d6ba645c0b3fdb6ef76f1ce96e6f31b784e53054a24ec87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "a47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630a51e3ee68449166d2da506d8de0f0b7ef39424ebe5f034d615a238e9b2a225f873bed7b94a92ccdf1432eab063a27f935bef099df6a1cbcf6734b218f2b6aa9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100eec4f69e5cd9a0f0c1fda8eb2f54297e33bc5edab35b299e65e2653a923d6ca55"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8df22966d6a6c55ca54713f7180fb521ad1601010bda1f1af87739ba1b0e44e80ea84c8431ee0615517346b97932410ca977012a316263f78a9edf0a452e478a09da521cfc521edd35405d6ff7b10120e980b699014de05f8e600b437ffa9c347"]}}, diff --git a/txscript/data/taproot-ref/3f1d506b154892f06d439bb90ba5202e723507eb b/txscript/data/taproot-ref/3f1d506b154892f06d439bb90ba5202e723507eb new file mode 100644 index 0000000000..4998b86d0d --- /dev/null +++ b/txscript/data/taproot-ref/3f1d506b154892f06d439bb90ba5202e723507eb @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c130200000021444841dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3a0100000069712e0e01f62b6b000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787a59c0849", "prevouts": ["bf775c00000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f", "e8922000000000002260202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "187d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93606a629bc116268be1a17da3f53dc5135cb0ba720860d61650af2ab2ef2f0d65c919a726f5226a1e5e752df6df7fd59ca609863b1a6d095747bbc103e423fb93280858ffdbef3a81ff8eaeb69bf692b0617d2bdcb9145576d5843e6d9e5e1cb0c"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364394e80ff16ebdd0b8084d2a2ac0d9fd937ef7443fa96a9eeb67a82d8ebac460b6019e279bd309d4b7ea698da82947cdf92f55834d49ec05c8520ba423c90b8e919a726f5226a1e5e752df6df7fd59ca609863b1a6d095747bbc103e423fb93280858ffdbef3a81ff8eaeb69bf692b0617d2bdcb9145576d5843e6d9e5e1cb0c"]}}, diff --git a/txscript/data/taproot-ref/3f512330103073dbd4f58e82fee2f316a4b0c171 b/txscript/data/taproot-ref/3f512330103073dbd4f58e82fee2f316a4b0c171 new file mode 100644 index 0000000000..cdcfa60652 --- /dev/null +++ b/txscript/data/taproot-ref/3f512330103073dbd4f58e82fee2f316a4b0c171 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4f01000000b02ea1ac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e30100000099b12a1b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703401000000cc4e3d950314417100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc757020000", "prevouts": ["0fb65300000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "2ac5100000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "03740f0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f98b4fa7d70ccacaf149110d37e14afa465a4cce5ea58b45c718aa129bf119442eae45bdbc332bf5a978667243b49c9b979fe92ee1d9ed3823912cc17c63e45aa06b7dbf505033281bc2802f60ea73c6b6bc1ec4f50a830b90bf520018ab39223a7745587804ad8af30810436e9dbff8c3bc66323fb3ea116bdb1b433155b8cfafc20e31cb64906476b2a49674dcc56dc839ba3ad707cca79aadbf462217ddc44c41ac963fb5f1bdb0606d2b6ed11195b99988395877046c99550680e0a941e5e450695eb554e43952678f73e19842e91c51732f2d32592245befb41a7a633df89e310fc546102273713727bc77812093d115b4bd3c7cf5ed4c5f32271b3ea9048d6897ff72cc6d2aba20069ee681b7d46efa95eb60872f3b25eb768042251766e9498d9ffec2ef72ca2be3485cef961547f4ed4f3e82a48dd8f9539ab7efd9dd442e303fafe3bc0f871260ccf1b86851b9d36408f254a47713818c8bd1276285efa3bd8c6702c2a71d0f23cf1a40253feb86e037fc80c875b7b85d2d40808f04dd8e71a76cf127a75a898378bf3c29b120dc4cfaffc8ac9943ad1a7da34523adc8e2d4f3fe5888ece2e6cd48deadd6d46b4dd99f11e7cd0bc9ae3f5f1e0f89302c3408f24d23d8baad092e0ccd4837752a31a3a924d62fd3e2af9c5e12a1f7ae611a0f59670322afe19b2786e4010a9f0a2c29302b14e006f4d1ced3d16a49ef31b30e97ab16fb25875", "ab7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366fa2c694f390b743554f08be0c7f2328ba8b079239bffe76afe54da1858b8f590144ecbe7fb1e6c18f5b14cfe26e6e35ca66fe7cdb676ad740673ee849f6d44e7c07bb1aa10d02d314eb70c923196d0e49e71087637e2d5a1d7fe44c2440c398"]}, "failure": {"scriptSig": "", "witness": ["4d0902c3c94536c8f4da8e5efc8cc87881a5bebb7ed90a9f2d9c743344c030e370532771538f4e57e2d07a516488e39af25bb3da3817bfe5ba4e2f14338112ff799177b19c6f4d69232d1f310a3af5ddf4ff5206eadaeb6fcce8b84fefae069efe5af5703a7409d69a44056ed0e7b8e986e6e40cd1f77c415ad7cd7c37117d0ca07a392435a4a204222a4dba5929e800d317d04272d16ed139a337879c2294e886132c361082ea278181be93b8fc048cba67e2d295a51a26790b207b3a73aa3b1bc9dda9fa49aa3d0b131080f38342311c3f5480d3a361bd37f10e82453ea2875e79426d3780cced736ba8f9a09a951fe7e1b83df0f10e19a297456677c3ecb1d5c861b324d9ba2ae9b2c912b0c589ddb26ace771915921eec798420b874594b9ed9885dd63ffa3ec327b4263cac5fec7ed49c66a747efddc70fb09d3116f942f71cacda11a41a50c61d51ef97cb49d214d7de0940482bb090bdae946ecf56783b0693f953cc7ddcb9d716a89823e48c5d53256811c81a6749e79a3605bba2e9a47e0e41be9cfef7d3fa0de904e1964ee823cfba8b1092030ea6cdc12c0f3e26d85ae27ac8fe24c0d175bf4961faa95bd4395675727fc84629284866fd7e266446908522d69d97b7e425df6f99eb6334ae5f76a3a8d9d32f7d2d0ca62238376341edfecbe37c2eca14c74c404974bf387632efec9f1f0fba009055e8a5ddc3e811eef63506d274592bb2f4ae75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6ef3dd0bfdeb3f64daf38e1101738c14790d5f1c68393c583b55b6fea5718d19818cb303569f28fbe8acbcc2d27d183e3a68170f5392df28f40a03efea695d856e"]}}, diff --git a/txscript/data/taproot-ref/3f513698f389965cd3f800cde5d06d6742166c96 b/txscript/data/taproot-ref/3f513698f389965cd3f800cde5d06d6742166c96 new file mode 100644 index 0000000000..9d168e517c --- /dev/null +++ b/txscript/data/taproot-ref/3f513698f389965cd3f800cde5d06d6742166c96 @@ -0,0 +1 @@ +{"tx": "2c3a87c40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ab010000002b52538260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707e00000000bdae3c9301fb521000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72c010000", "prevouts": ["b42f100000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "cc000f0000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f34c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364b47e9b9572a2fdbea0003eeba5c6c5df8476b78e561177a43bb360ce14ca93ec9fc6c767d5aa72b6a61d813f4dedd67fc97d91e71acf86e276ab6f41d1da0fa8c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ff3c01f4eb155968cc3221659e149da2e0b6684938cae443a11b820562bc19a4e05de1aec4dcfd94364dc697d2506f2d3dcb95f0b1cd2734b3ed6d289f30b19a3cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}}, diff --git a/txscript/data/taproot-ref/3f6985d5b0c8658ee84900aef20ad6b450f6f3e9 b/txscript/data/taproot-ref/3f6985d5b0c8658ee84900aef20ad6b450f6f3e9 new file mode 100644 index 0000000000..f5ea419704 --- /dev/null +++ b/txscript/data/taproot-ref/3f6985d5b0c8658ee84900aef20ad6b450f6f3e9 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707800000000d472c2ff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47e00000000b22608f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbb000000007c5fb0ca0254669200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8e01af3b", "prevouts": ["ab600e0000000000225120a2c28b736583e5896e4a53bfde129100bff930ada42454ee2f7bef5a60a371d8", "deef37000000000017a914c7d65cb5025eac8b5bf295baac9287994ab34b9b87", "28374e00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93696c243d178212e8777fbc993402db4381baa5ece36ceffefb611138a29c3f415"]}, "failure": {"scriptSig": "", "witness": ["6ab9616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/3f6a1b44037f9a0ecf95cd3d23ce8bde0b02ff8e b/txscript/data/taproot-ref/3f6a1b44037f9a0ecf95cd3d23ce8bde0b02ff8e new file mode 100644 index 0000000000..b5ca9dc471 --- /dev/null +++ b/txscript/data/taproot-ref/3f6a1b44037f9a0ecf95cd3d23ce8bde0b02ff8e @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca801000000af0593dadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1e000000003ce8e7810303907300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b3a96d28", "prevouts": ["2743510000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "27ec2400000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "", "witness": ["3045022100a6d030e6236df5287e6444afbc3138d4def56ce2acbb80c3a7930eda90da5bf0022054202da46b6bf32176850e1a63cd3aa7ceee558ff527fb963fa1bf405e240f8983", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["30440220422fabd2f6b6feff4c2386182e09add737f0f5870e761c08d4dcdc3ef78c38ef02202f180c439dd9b7c92a996dc1a0f19ba231e1bb84372db366d9ac04ec7daabff783", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/3f6da0ebdeff4ba77b33c2c2d3b962e7dc353570 b/txscript/data/taproot-ref/3f6da0ebdeff4ba77b33c2c2d3b962e7dc353570 new file mode 100644 index 0000000000..87eb0841f9 --- /dev/null +++ b/txscript/data/taproot-ref/3f6da0ebdeff4ba77b33c2c2d3b962e7dc353570 @@ -0,0 +1 @@ +{"tx": "f43d36db02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1700000000fe6134a060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270be010000003e5d2c98033b5d8b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac2b000000", "prevouts": ["170b7f00000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989", "32960e00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "47304402201b1b051e73431f017ee5f51654862cc3e77a553eb2632799f978414d05093b0e0220051a3de18d2bf627cd036e6489216ae87038231777b1f90cd3756bc15f259b918300", "witness": []}, "failure": {"scriptSig": "47304402203638dadfbc3ffec5bbc6c80b9eede4b8e941cec5b12f91faa3aa5bfc6cdfbc1502200f50849d3234ac799332b6f6c6fd30725a31746076feb16d59a5b8bce7a95a47830101", "witness": []}}, diff --git a/txscript/data/taproot-ref/3f7737e152b00480f6b1e13136938142db63c3bb b/txscript/data/taproot-ref/3f7737e152b00480f6b1e13136938142db63c3bb new file mode 100644 index 0000000000..e4cf9270ab --- /dev/null +++ b/txscript/data/taproot-ref/3f7737e152b00480f6b1e13136938142db63c3bb @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270170200000079ce70c5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf31000000004c1ea1b001a9b353000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748760020000", "prevouts": ["7ff80e0000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "541766000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09020da30906dc4223c30c356b2e1a26c196af1d396fd7f5ebf060b38fde6f589fe587db80d1f7df68dda19e57c8fe86c4ae7defdfdae761407a694e4eb28a17be01de68a7c1e36dfc1fac4670abed59fef0ad6dad16cfc9918a428398fd591c027e08daa77779fa82ac171630b23fe1f5fb25b52fcbce65ff3b2b2587958c31fa4b387e1193adfeeabf919e081d91104acefa870421240fe460f763962d61d30ece56c3a01ce5ad7de454a166229d011f3550cb0f30e9d3847b5d190b147274603bbdb78cd0fa81f3d9834734eaefe30c6570790c6081839ea1401c4057648ba81b2d8b53fd3c79867422f854d803ca2f357a8a0f75424e7814d445d63d6e4d622e5210f0052e70d2800e2f8e5b2fbdffe8b324ddb15833ed9cf2c27914e3d9706208e25faf90c078e5cf9233393ba92b92be10e63dfbaaf45dc5876b53c1c9778cf7b44783d736667fd219fa87fa6372da3afac3bf18596f01d8745fa34fd0a6eb5c1a758802845e391573c6f76891ba2cf433e0bc2aa2578d4e8d5af5cc538621dd2c08b2c224de89cab8aa12f2b832c8bc92a63d91aca8cbfaead4331ae09286c83e6fc0ef357ec64edf280f39db9cfb9421f4848373717957a01fea3e57b26f13fe300ff07df9cb7dfa4ba786c3f03b35af174b3a8fc9e76e5445af96a02a35b322692b06010a1b70a40a0c953c1cb442fb589645c4d74554c742cc18bcbfb0a16beb29f1be429ae675d9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f2e968ff58e95ba8bfb88f713127f2c0a83030ac0ad8720c76044b40e2e6afdce051b2f792b2f00393c750e2f5c1724429883d9e1fb30c50e31a79f17241e62331a3099151dd9022c8ab6721206c57c00ed937e9f62099522c543aef8c2ea8dec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}, "failure": {"scriptSig": "", "witness": ["4d090268aa11dd125163f48e7c3bc11c91e0bd82a3a578c8bcfd9f5b6cc5257c749c59b1d4cb1e4aeb7b01ecda1692fbb464e18a29b2147c9b2d21b6c71c5249e286ed856e078000325efd1bc6b68d2d171d4d200e79b776ae802d55bc20a99acac99171b584bd56eefce23864306dcc7029f2f8666e8b98ff7a4135d8aa6bd5be32b7491bfd15149a818c90ce3452f2caf1a665902d9651b56d33ce3a7f60fd28a2f474348a9fafd3b2a96109cde6441c11dc2a9e33211a62a122174d40aea7390ffab5a03623ec681c6adb5bb0121c558e3c4484384fa58703844e42ae81981bbc1b142e5809b7021e6a1233e4733ba72f89c38cff6db5c321c6e4b773845d8eb31192a0fbc554c89b6a3b3d5ff22ea9c10d01099cefc100d7dfe1d146c16d99a69a4830b2ee11e561490fc6c8b85c31d8c05b3b97d86e9555a4d2325ac8fed45e2b80ddfa03bd10cc44f584e85043ac2070a88f27d5cd36d0cfcbe46c9509e55d1ec7068c26b2171000f22aeb3dfe10e2e8eaa063b27cc940afe0d8412a9feebeb0cb16f56e76dda69dc0fdc50976b0e9094f55a6c8b83d238ea44a457f43b06c5777867df76e7b67c79e1f1ae3b4c82efbcbf5f42105af61942b789b968c2116b62bc049575b1b05e3d9b0f44eda5c601d6a498eb154235615b9c31084c2f5517c42d12a13d88a60d9d4d4c5ff0b4ca726aa894326cbc315c7926f7973aecdbd0cd3e3ead0c86b8a46447561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365bd9a855ff120153a9708859ceaae16898e3111e3492b3f2130b56cfe36cb4d3e051b2f792b2f00393c750e2f5c1724429883d9e1fb30c50e31a79f17241e62331a3099151dd9022c8ab6721206c57c00ed937e9f62099522c543aef8c2ea8dec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}}, diff --git a/txscript/data/taproot-ref/3f7dd25efaad7cb28967f110fe74e5e38a763ca8 b/txscript/data/taproot-ref/3f7dd25efaad7cb28967f110fe74e5e38a763ca8 new file mode 100644 index 0000000000..be11bc8813 --- /dev/null +++ b/txscript/data/taproot-ref/3f7dd25efaad7cb28967f110fe74e5e38a763ca8 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46d00000000e4e24797bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd0010000006cf86596dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbe0000000039bf39d9014d7b6700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5e010000", "prevouts": ["b9ba3900000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "cd767b00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "7a8f2100000000002357212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["894c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d26d1004a8019ef2e1188b07306b9375b4b58b003610908a9f3451755ce03441ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454b1cf341ebb9351320fe3e143ffa2dad1c15696d7ac983fbe7e302fe7a073e7ecf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51d8b8b59ec9330d10cfd242c1699350bed4f76e625017108107d5490f0b0ac19bcb3e0a345cce78c1fe891e9b22b966ce84a8b12623d949f63d5e15e148dd67959d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}}, diff --git a/txscript/data/taproot-ref/3f827b95772a69cca7924e0a2e6ed2cef8755536 b/txscript/data/taproot-ref/3f827b95772a69cca7924e0a2e6ed2cef8755536 new file mode 100644 index 0000000000..e04b1f74a1 --- /dev/null +++ b/txscript/data/taproot-ref/3f827b95772a69cca7924e0a2e6ed2cef8755536 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be50100000063a870e860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705a01000000ecf01f0a0126bd150000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c32f391f", "prevouts": ["821b2600000000002355212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "050211000000000017a914a4e57198280c195671631f8b9014214c2f083b3c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["8f1ded8b1cd3477bc520967937fd94eb82f6b542ee85528386023e89fb107d527ab78a30ef63c3319ebabb576fd3449b575a4676437710f9914ebc505dc74930", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/3f86932b9bd5a8f673b4dd4243ebb78bef50c888 b/txscript/data/taproot-ref/3f86932b9bd5a8f673b4dd4243ebb78bef50c888 new file mode 100644 index 0000000000..bb7b44a992 --- /dev/null +++ b/txscript/data/taproot-ref/3f86932b9bd5a8f673b4dd4243ebb78bef50c888 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f200000000d11a06a1038d133200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374871d010000", "prevouts": ["a7d134000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063fd68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fdd74ee01a272cd292d2b3c7cac8438ee48f053af121a9be8314077ca1dd604920e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1e0a7be32fdcca7a506e9ce249f658cc089bc7a3d23614d55e872a83e7956fea4416efa3a61de7db58e4e5b27e55eab88df01883130071a88e8c07ccbf4e37c61"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51cf0ef20a11005175256561cf2f67252fad6f828fd45e261da47aa072728c1e1d416efa3a61de7db58e4e5b27e55eab88df01883130071a88e8c07ccbf4e37c61"]}}, diff --git a/txscript/data/taproot-ref/3f8e06a01cdada6071275fb451a2ba624eecf6b8 b/txscript/data/taproot-ref/3f8e06a01cdada6071275fb451a2ba624eecf6b8 new file mode 100644 index 0000000000..20023d86da --- /dev/null +++ b/txscript/data/taproot-ref/3f8e06a01cdada6071275fb451a2ba624eecf6b8 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf59010000001611e3da8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4100200000040147ee90150805700000000001976a914c629d61df58baceae110d15eb5b55e144268615388acc4030000", "prevouts": ["854e6f0000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "53a039000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4bb0b9e3baaec320f7de46eda77f4fdd2cda08039a1867e75a703bfdee0f4ff6d1cafc3da456d473afb79353f7068dc1822b24dbf9d7eaef6a0c8c9b611b05e979feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b6ddcef20c10c61d9e21e2293389fb4d83401974c63955ae345dea7dfe41530ea78a04935edfb84e1b4b71380d58e01ed379cbb21cec8f8440ec0fbfce597ab8cd941a6bc152cbea0496b075d4b2611b435301778200e60e8b4147cd93749673"]}}, diff --git a/txscript/data/taproot-ref/3f9e6c510733a54871b5b12db956530901898fe5 b/txscript/data/taproot-ref/3f9e6c510733a54871b5b12db956530901898fe5 new file mode 100644 index 0000000000..dae878e0dd --- /dev/null +++ b/txscript/data/taproot-ref/3f9e6c510733a54871b5b12db956530901898fe5 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702601000000580e63a5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5101000000d93ed2df03842435000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac1f000000", "prevouts": ["d487110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "eaea250000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "477d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8af5253a3ae898682e613588786a672ae77746787ad628dd74364be19bb5242936657009e9173c5ef8826379cea4b8c999e3ae37a5805e4cc6da117a3d2ee0eec"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93624f7d08525b5d52815de985e807035e6f0110330bf2d62b1ce3b9c92499c7c7ca24674935b347637fb115fbceef28e6d08e5e47afc6eaa336546ee2e891e964bfd9e929a06047270fff43ba4c6b47136464c62381aba7ed74ab98bc69d199aa4"]}}, diff --git a/txscript/data/taproot-ref/3faa53c6eda1becad9cec3442b7069bc2083f057 b/txscript/data/taproot-ref/3faa53c6eda1becad9cec3442b7069bc2083f057 new file mode 100644 index 0000000000..a3e9573439 --- /dev/null +++ b/txscript/data/taproot-ref/3faa53c6eda1becad9cec3442b7069bc2083f057 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2c010000006700468d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701b02000000de835db602815d6100000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6f3010000", "prevouts": ["61ec530000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "4ef50f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c0", "final": true, "success": {"scriptSig": "", "witness": ["c6c72c36e1b7b923a19dd384dae60627dfcdae430b0916158757f7c29ec316c5885a62a834d4db79520422d1ac58f56d8e747f3b96d9fe570f63081dfe6c6a4903", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1d214d6efc01024016deff46b5272504c03a8c3c1fe6c5320f7c4f805d13562ce163e560a75928452e9e532913d0dbdd8c2aeb3892889ece2ba25fdc97da0ae4c0", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/3fed18356adbd733c605b538f4fbe6434ecad6df b/txscript/data/taproot-ref/3fed18356adbd733c605b538f4fbe6434ecad6df new file mode 100644 index 0000000000..d084673be7 --- /dev/null +++ b/txscript/data/taproot-ref/3fed18356adbd733c605b538f4fbe6434ecad6df @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e900000000852477de60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704301000000434e8635dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bab01000000ef552e5e0380634000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875e020000", "prevouts": ["f4eb1000000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8", "4b251000000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "e5f4200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "437d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f74173222da8f55f8c3eb790aea6942ff700236cf5dc88f69953ed52b194a9a0d9a73345c989c90f21221bc9fa2fdbe5d62b34ad323157a62317cd84046f2af72db79fc77699d349d3583c063c1ca5cb78d93faef419ab336fa45db1a25ff641"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936532662ef0d829b3b02e134f996fb7ab3a2665cf7ae2b3d0e4b000d9e17d468433f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824274b5900613cb2e14ccbb49f92be42e903262ce34f92c4d0a103e0ecbbdfe862db79fc77699d349d3583c063c1ca5cb78d93faef419ab336fa45db1a25ff641"]}}, diff --git a/txscript/data/taproot-ref/4017ac5f35612181926802d0cfd9e7f6a5aed8a7 b/txscript/data/taproot-ref/4017ac5f35612181926802d0cfd9e7f6a5aed8a7 new file mode 100644 index 0000000000..fbf4ce8806 --- /dev/null +++ b/txscript/data/taproot-ref/4017ac5f35612181926802d0cfd9e7f6a5aed8a7 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf300000000050a1b45adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2002000000d5142d75026c9a980000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac27030000", "prevouts": ["3ca17900000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "03c62100000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["7f4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b6d9476ecc09d849d3c16682d4a6fd2c22d5514554f5544b52408747bbaff174e17cc42fca95eeef15c2a149426edd48c8eb93e73982ab4fa8378007bf5ef888ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824a1c4274957806206aadadfd15cabecf517c42c49a66a44e84081097b7475aac480120d5a477c096fbef97d1ee2aeb957fc425ff8aedf322b93097b3a97db744cf5fd42f9969f7f2472ed1fa62ffa49909a09466cf06ef7c57cb1be351156c54"]}}, diff --git a/txscript/data/taproot-ref/40198d56b45470dd3064ec201e05ca4e3cdca930 b/txscript/data/taproot-ref/40198d56b45470dd3064ec201e05ca4e3cdca930 new file mode 100644 index 0000000000..fc7ceb79bd --- /dev/null +++ b/txscript/data/taproot-ref/40198d56b45470dd3064ec201e05ca4e3cdca930 @@ -0,0 +1 @@ +{"tx": "db1a6b1b02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc300000000730c61b260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127017000000003c7d6ccc044728720000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac09020000", "prevouts": ["5f59630000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "986311000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e148d44b3b8b580a9f727722e46acefe6d67c1e6b80ead7c236fb066c3dd6b0bfbdede6356752267b6a4958657c43b99b93cfd40f762fcdaad4937ef48d6413f31b5843f54915b2c97abdf26ed2d562b36c2375ce95d63af6aa508e6368a687449"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a576d03eca93f143feb7e152136a467cbd42f46620dff7de4663782cb270610348d44b3b8b580a9f727722e46acefe6d67c1e6b80ead7c236fb066c3dd6b0bfbdede6356752267b6a4958657c43b99b93cfd40f762fcdaad4937ef48d6413f31b5843f54915b2c97abdf26ed2d562b36c2375ce95d63af6aa508e6368a687449"]}}, diff --git a/txscript/data/taproot-ref/405cc03a69b95e49ca66bdd71055159a13f437eb b/txscript/data/taproot-ref/405cc03a69b95e49ca66bdd71055159a13f437eb new file mode 100644 index 0000000000..e1452dafba --- /dev/null +++ b/txscript/data/taproot-ref/405cc03a69b95e49ca66bdd71055159a13f437eb @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3101000000baf8229cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8700000000f34c48e804c866e000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6bd667b36", "prevouts": ["9873650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ffb47d00000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_bf", "final": true, "success": {"scriptSig": "", "witness": ["d10005f5b799760d6db41be0413cfafa254653405363deb3b3a14f8189a21ef604ee04cee3d85eb8c78772aa62bec509e3843b5b2b165f2688903e173de565b382"]}, "failure": {"scriptSig": "", "witness": ["ea71e794c0856062d55971af785ba96a89374e7fcf007bacd1d0ba6298e94f17e25fa3c93eba4ec23be2d8c9813808de14046230563f43d64726eee6055c49e0bf"]}}, diff --git a/txscript/data/taproot-ref/405ecda072acc56c38f0eae072ad858ec1097d36 b/txscript/data/taproot-ref/405ecda072acc56c38f0eae072ad858ec1097d36 new file mode 100644 index 0000000000..72dd93ba74 --- /dev/null +++ b/txscript/data/taproot-ref/405ecda072acc56c38f0eae072ad858ec1097d36 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1800000000666e3e46dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf200000000f1d81ac101a24f220000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7fa698e43", "prevouts": ["befa55000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "f7b3550000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "8f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c1a7bd15ecdb2694ff0f0300be9147ec1d2e75e3b8043d2543f57834df42dd6da79f40e3d51694d686dc3a1ae4413ff10533c43d32121e1e1cac9518583e4de2dd5f972b05e2f18c3e7c797b604beeb8879a3af7f1e10968a0ac8aaf9d489fe7"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936df7ba38e6eab303ff43446256dc29f9eb9d122fbc3cb1286684b6b478f0d16a61f261744aaaab7b61bfd8b873ce05c274059b1d1cb072d2d2c67e8900f407405dd5f972b05e2f18c3e7c797b604beeb8879a3af7f1e10968a0ac8aaf9d489fe7"]}}, diff --git a/txscript/data/taproot-ref/40637530cf642a13aaddd88b9e805ab9eed711f1 b/txscript/data/taproot-ref/40637530cf642a13aaddd88b9e805ab9eed711f1 new file mode 100644 index 0000000000..9acff81639 --- /dev/null +++ b/txscript/data/taproot-ref/40637530cf642a13aaddd88b9e805ab9eed711f1 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4100000000ade270268bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e300000000586a0d6902a64ca4000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c5010000", "prevouts": ["d61a740000000000225120e5be1c56293dbf2401662c2d3a0e5c3ad348f091e23d387b2bf628c220dc03c1", "b02c32000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["304402207a350c25d0826856f93150b389d40f87965b91b00344eaf7eb19aab90f15a5ce022008560bc36a0fbbd7668f9a0803968c795c4340bd971436e82e7840676c3d6fbc83", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["3045022100f48533e761e43d0e20046043f1bb776bd6dbbbef4cbd83a29940511d1b6a83ea02203abc4cf86259af1158580eee83eb73412b4ff2880a7f198acccb39ca67163e3a83", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/40815dacf70ec14f7b8a062c9faaf258058731fe b/txscript/data/taproot-ref/40815dacf70ec14f7b8a062c9faaf258058731fe new file mode 100644 index 0000000000..aac3f4487e --- /dev/null +++ b/txscript/data/taproot-ref/40815dacf70ec14f7b8a062c9faaf258058731fe @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce2000000001a4c53f502057f530000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac79511752", "prevouts": ["fd145500000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "047d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84030e911897c6e4798122efc4265e48d96402783f565c89ff2a62155c020859d8460181b685601280cbfaae0e90478ea5ae6fea73a2d03f5a79a14a3e0c6d503"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93665f2789c044d6944fb0be746f461fd1d8ebe7179986f1cc1563b6f682e3c1e51e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84030e911897c6e4798122efc4265e48d96402783f565c89ff2a62155c020859d8460181b685601280cbfaae0e90478ea5ae6fea73a2d03f5a79a14a3e0c6d503"]}}, diff --git a/txscript/data/taproot-ref/4088fa75fe995a05522f18f9b0e6945552611611 b/txscript/data/taproot-ref/4088fa75fe995a05522f18f9b0e6945552611611 new file mode 100644 index 0000000000..14b733fbee --- /dev/null +++ b/txscript/data/taproot-ref/4088fa75fe995a05522f18f9b0e6945552611611 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706600000000263fbb6adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1a00000000cebe71a7030bb62e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d5afd460", "prevouts": ["9659110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bd0c1f00000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646243844b2829720c8a21875c1e5ebb7b78aaf54c61f95ffa067870b404aebceb3b80bda1b133ebf5523b41a15c88aa3d5202619e06dcb6a8f4a5442678614e2fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368e895c8970650c6085b3331045ea781cb4c0c0a78535361d77c53655614766db9aed6a34821d65edf69e9d12354a87f406d02be059705f92363392a057792142e401215e29d5d13de3b6ed62165bc3378402ce71158bd1208562fc299f33fc22fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}}, diff --git a/txscript/data/taproot-ref/40c7820188392556b1df313d7fe8ad00eac4965f b/txscript/data/taproot-ref/40c7820188392556b1df313d7fe8ad00eac4965f new file mode 100644 index 0000000000..18d1c7f8d0 --- /dev/null +++ b/txscript/data/taproot-ref/40c7820188392556b1df313d7fe8ad00eac4965f @@ -0,0 +1 @@ +{"tx": "4a229c5502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc200000000278d4f8dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9301000000fe6f74e00168477700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac24030000", "prevouts": ["784b60000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec", "40117a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "bd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082956f78f875a4cff3dc955be6c960f7b458e90648c2291f520c96d2b85cf15d2941cfbdca9cced9a9297ecbc29dffc929789a1848311039b5a24b338cddf0aa70"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641dd31aa852e6f71aedc584ccf1bdf704b326c74e68fda16d455fddcb9868622956f78f875a4cff3dc955be6c960f7b458e90648c2291f520c96d2b85cf15d2941cfbdca9cced9a9297ecbc29dffc929789a1848311039b5a24b338cddf0aa70"]}}, diff --git a/txscript/data/taproot-ref/40cdd6d34a71ec60c962c3ce8c6408731acebed3 b/txscript/data/taproot-ref/40cdd6d34a71ec60c962c3ce8c6408731acebed3 new file mode 100644 index 0000000000..97d5810e3b --- /dev/null +++ b/txscript/data/taproot-ref/40cdd6d34a71ec60c962c3ce8c6408731acebed3 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708a000000006cad66f9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf50000000010b9b10002826d6b0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca5000000", "prevouts": ["c136110000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "bf2e5c000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["cd4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5148aa6a6dbcb4c7060082480e3e536b464146150e8b2e96d2b5eabf2aaf1fe24e9f4d7ab890a2001a7be6cb25cf630fcd24657943ff80a7c5a11988ecbf9e80e4620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f454233ea8ba792ff851233df40d07d043b6f28307e4b5e8da83231ec75b1673f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820aae41afa256ed506dae95e698e8dcc0fa26e2618e50e74a83d05bcf51ab890d620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}}, diff --git a/txscript/data/taproot-ref/410f4c522606d7e3dd362eafa5a5ab9d9811a338 b/txscript/data/taproot-ref/410f4c522606d7e3dd362eafa5a5ab9d9811a338 new file mode 100644 index 0000000000..0755696578 --- /dev/null +++ b/txscript/data/taproot-ref/410f4c522606d7e3dd362eafa5a5ab9d9811a338 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2a01000000f6816db38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c467000000004c8c3ed5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa300000000092b0a9b015b3c530000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7962ad43c56", "prevouts": ["4e8f5e00000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "562e3e00000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "81d36500000000002251206ee7f50dd8b37aeb440050df10921bea288340730b764e02d5c3920c65efa447"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "", "witness": ["3045022100e6f32e5b47ffd07975ddddc3ed46ce9308d56bce465f2695c2182b84eca5b58e02204d0396a8b1af0de29eb1a068b196d61e713686feb1e31f473d0a53665d041a9c02", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["3044022001ca27f7fe0468534cf19539a3552f08da74acb2427cbc10521b29b1cf6e8bc502206c077774878a2580a86ccf18828dae2fc0cc9a89f2026b13d7c0deb1bcff15f102", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/41114b51cf4fbb2b1beee4e0cc3047fcddd88c2e b/txscript/data/taproot-ref/41114b51cf4fbb2b1beee4e0cc3047fcddd88c2e new file mode 100644 index 0000000000..47376885c0 --- /dev/null +++ b/txscript/data/taproot-ref/41114b51cf4fbb2b1beee4e0cc3047fcddd88c2e @@ -0,0 +1 @@ +{"tx": "bfeaf70b038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41d02000000f8f102f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270de010000002f563892dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2d00000000c1b137a404a710660000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac34000000", "prevouts": ["f4c73700000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "a13c0e0000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "0f2d22000000000022512022abfe1c27b62198bb616e4483022cc980778bee956a61d21a3456cf5e2e41f8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "367d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93610840586922c5e53ad9a63266eaa24e185b5e485f667ba0f3e18873b1df80384d4d2cf0b4a04f3dfea651ef6d0b2c4d5fffa0a14be5e227661027bf8174dd263cddd84017ed719a58f336e1892f80afe07727626533c4c78318e44c39862ffd3"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936898ebd438ad33d3fdb6724497cc3faaa24f87c16c7508697e3bc38420604e532b94a5b3352296838f351f650ec3ca72e25dc2a412f5bb92aac76541fe277cb7178448a7537869648343bbbdc00eb4ac0785a5f2aec0111e81b0d25ebde82a92a"]}}, diff --git a/txscript/data/taproot-ref/416cc4828a6c9b5f1667ac7ad0d2684eb23cac38 b/txscript/data/taproot-ref/416cc4828a6c9b5f1667ac7ad0d2684eb23cac38 new file mode 100644 index 0000000000..979e43619b --- /dev/null +++ b/txscript/data/taproot-ref/416cc4828a6c9b5f1667ac7ad0d2684eb23cac38 @@ -0,0 +1 @@ +{"tx": "d07c79b8038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41f0100000018502eebdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9a000000002d3f28d1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c170100000063ffc498030747e700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47874de2e530", "prevouts": ["a595390000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "51a15800000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "dec15700000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["894c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d26d1004a8019ef2e1188b07306b9375b4b58b003610908a9f3451755ce03441ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454b1cf341ebb9351320fe3e143ffa2dad1c15696d7ac983fbe7e302fe7a073e7ecf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}, "failure": {"scriptSig": "", "witness": ["4c5289", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93653442b71edc232265c61904a981e049b0ac07d3398e540c73595bf275af3e5a4bd8f71710e2f4773b226617f0b144a9d046788db13e8347a383f909c13421323cf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}}, diff --git a/txscript/data/taproot-ref/4184d22015b6c9b7656f411782a4484efd87060b b/txscript/data/taproot-ref/4184d22015b6c9b7656f411782a4484efd87060b new file mode 100644 index 0000000000..d32af2588b --- /dev/null +++ b/txscript/data/taproot-ref/4184d22015b6c9b7656f411782a4484efd87060b @@ -0,0 +1 @@ +{"tx": "14fa46cf02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4801000000d70bd4f0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c64010000005783b2cd023169cc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac6b25ab25", "prevouts": ["0c20700000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a57e5e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_53", "final": true, "success": {"scriptSig": "", "witness": ["a42c53fdf9f147990456e9027106f116b1fc8a253ba540763629b00db180057ccf534e0e745dc4e6c2b6b9eff978c43bb2f0f03f249aab6bce94a2457150fe4982", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5bda1280c946d68d6d4f69e81e61b4b6ee4cf2f7b31b7026f7f31db7af35c26ca7b2173339444bd8bb5235cdd690516a66893441460ecca848461c0c4486193e53", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/4186f82b0ef77212271ae59a07d75a5f370f8add b/txscript/data/taproot-ref/4186f82b0ef77212271ae59a07d75a5f370f8add new file mode 100644 index 0000000000..e10973959e --- /dev/null +++ b/txscript/data/taproot-ref/4186f82b0ef77212271ae59a07d75a5f370f8add @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701f02000000c88992c38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c471000000002bee261f02805a46000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e745311638", "prevouts": ["43bd130000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247", "ae50340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a95b51142906d61fff9b6eb19048f2d78beaeff0d809d50241b6dbf74fcc47950fc871d26555c201dd33550300448d4ae64e8667b7b3a5ff0d1457418fd85d97d231b10243e4e269236a618881f024b863ef2cf3de7e16691a59c4df3ad0ff8945b1cd0e9c9eb09b3e99ba2bf4b5bfd19b37e1db85fe20bde69649f3393dcdb499e3e973007cce8228168676134670d0baff825958c666e75c0cd396ba06e797334dda1764c3bff0081b1c1cf24ee069df2bec5d18d164ac2a6ac88c5f6895b9ab4639719d231b433427cc65e8e6b995184940f4ee67db13c86e23de7f882018c70c39edf813811d7daf5e937c4e903792e3bc08adcd4fc29f253b9cde001958746d321d48e3fef7562dd8c8a3ac864dac2d432c424d8ea7119dcb85c5dfc935777d015910e546ce8e9848abc35d583c07b8315bb8a76146797304a1148f4bb8b50968d698ce1d0418e6c736c63324f80a9f6370519a5db88f2f10e6d4acef75dace76a9dcd0e15a1890fdccde6a074e6c5ddc92c08eb9b13a9c74ceb69afb0a637ba9470fe37ea11f85520a810f4b6374e705a54707e8c81830f5a044ad849a488d8a427c4ee1951de23f092ca4742a34955297212e6fc0f37660fcb97c598eab9282c2f8829fc7e047ee3cc93fb86333a7f0009eb5bb1c468de6148c3b7d91783b4eeda3d47e74fd604178d7cef6f2c473826ab5148ddbc73364a006ca3589188d71467c8055be2f75", "847d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d67be0b3ed085d8229f99ec7120ac293144efe6be4aade727ce45146ba4b7b4fda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e9f6b3154707dfd0cc47160c458b5d6bbad5dbae79d1b1aff02b8c8f076d5395a9f31796df107fae040796e44aea27c7a7d41418cdc7206378fd34089f9daf951"]}, "failure": {"scriptSig": "", "witness": ["4d09021295e9ea5c3ed71a319ca66f39cfb76fbea35e76d485921c2ef0ea8f0ad5a6043a3bdf0cb1ae4e4864c117597b63ea6cae6f8647c25ab11d2f5e9ce0ae7f47b823c91a19ae552fc9732686d9a2ec73150a993eff0473f96f650dcd3e1f6b6e5271d4e1e3dffed73c51842ef9024a9800f692a08dd4a713ceedb0806e71dc5002cd1dbae7fdbb1e60ed3841db20e1d87535054c949c109ef68f84064f9948548dbe4b31257d230c91157157ae52eda33b8c1cd325897bed3e31ff1ca53c6b68c9d6f95e72db39537acbc5f3438e58ec75d2521915103541a0f42a85460ea1819e120a4352f877cdceb7b424c74df422f9dd8725aaf6dd3abb1ba57db2ac1eb76ad6ab222fff67c578cd3a6a010252713fa0096ad49e62007faa12bc68946234297dba040157e648e1afa77c88043ef0c7e4703b4cc4a9f2049318f7d0e7a342d8f02f40a57845778386c52a6c398a0491c0d2f6f52486dc36058a0ddf0b81def12b9866bad19e800439fd8c48283c84ea0ce66c90959b16670822cec55eb16257888441f266f48356bab6883e55140556907eb0b98985602b74d07896c9e187cc3ec206ad403bee59eef2ba6196210e471747aa0b96991aaacd5dd7ec232d8f8ebefea9a86bf118dc3ee3acd1c8cc4d9a291af29ba5f794284ef9be82fb329454e7076556d14b6a180e2ccfb04f5201e7e8510a649db36d8af96268c4fbd60528b82f9683e1720aafa775", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361950e9cd3056fae57f4e29cba5f1c37ec5e51ffeed67571dacdd2332e5e5df68cc3b36ccc81fe4912a925ea2b1eb99a41bced4468215b0c94e7bf4feca6759c79f31796df107fae040796e44aea27c7a7d41418cdc7206378fd34089f9daf951"]}}, diff --git a/txscript/data/taproot-ref/4194caf8692db4d7109076c5dece284d07e06cbf b/txscript/data/taproot-ref/4194caf8692db4d7109076c5dece284d07e06cbf new file mode 100644 index 0000000000..8cfe708bcb --- /dev/null +++ b/txscript/data/taproot-ref/4194caf8692db4d7109076c5dece284d07e06cbf @@ -0,0 +1 @@ +{"tx": "9a15a34503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6700000000b98902bb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47301000000b91d6fd260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703d00000000c51f3a80025f6e7000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964c000000", "prevouts": ["e6fe26000000000017a9141582f8bc3490e924b143f387e99eced40303eaed87", "fca73d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "973b0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_6e", "final": true, "success": {"scriptSig": "", "witness": ["dfa56b053bc5d80a69aef617f2475e8e09f446e7efc5ee7bd1a231c3a4a64e3d765727f42b37a9f7104332797ee53db8dbed629d668d59f05832417e9faa288c02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c8e6efa90e1fecb749468c4e12dabd2f1ac0ea03c231a8145cdafdee296c24a6f7970a06c21ff5ef9d4da8e5354acfb3c34b52c991228d4a6e6f1a4a1b68c7996e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/41a24f98a0882fe70484f5006c4b6b9a37bc85f0 b/txscript/data/taproot-ref/41a24f98a0882fe70484f5006c4b6b9a37bc85f0 new file mode 100644 index 0000000000..d7a8f4f5ec --- /dev/null +++ b/txscript/data/taproot-ref/41a24f98a0882fe70484f5006c4b6b9a37bc85f0 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7000000000ec9b048ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7301000000231716990186d7ae0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e776040000", "prevouts": ["2956780000000000225120e126375bd164d085eaf078f7c968ba0351125367548e57f6cc6688a24dc88c09", "3cd947000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "347d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faa00efe7e15c1e643e9e1cfaff50670e7cac10128754f4af7dc416953d80cca2b070c3fd2cc03cfe72ec91581f9e22200fa4c4f6deb8dafcd335310e90efb11e5"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366956433f4fb745717b89f2dabf7821b404dd73db8a334af9b6b63fb319135fc93ac03c85a7bde4aa83325c4e9fa3803d6178be55885bf5b72d341e036ded0599070c3fd2cc03cfe72ec91581f9e22200fa4c4f6deb8dafcd335310e90efb11e5"]}}, diff --git a/txscript/data/taproot-ref/41bb837acd47aa639c62f7986ff46af86a6c36d1 b/txscript/data/taproot-ref/41bb837acd47aa639c62f7986ff46af86a6c36d1 new file mode 100644 index 0000000000..b71e0d57a4 --- /dev/null +++ b/txscript/data/taproot-ref/41bb837acd47aa639c62f7986ff46af86a6c36d1 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49000000000575c18d0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6e000000009b12d9b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6201000000323bd29c036d5608010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6ca6eb94e", "prevouts": ["b77b360000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17", "a9315e00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "7c80750000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "7c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364a60ea8a26b95179b8a81cf8791033c1de4a7f8dcf3286d999b7c941f2edf7811202adea3ba63b8efb220ed0b92cf765f01931ebb31f4963f663d14c15b1e6099a711983bc616996e2ac47b27808b31a9b7e87f7ce1f3571999dd3a2a57f1080"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699b107a70635ffc73d55a58255f55b6e906e17a6659bcc3b92a6a185be68db381941f75e5ef6b91990230755a95e91c03e6de7762e861be9dda5623c3157397ffd5e8f79d631fbf207b458b911c1cf4efab0aea5316113aa9c93bea92caa9fc9"]}}, diff --git a/txscript/data/taproot-ref/420a24fcbd56a2a2791e7238666b8aa34e2ccf16 b/txscript/data/taproot-ref/420a24fcbd56a2a2791e7238666b8aa34e2ccf16 new file mode 100644 index 0000000000..88fac822b4 --- /dev/null +++ b/txscript/data/taproot-ref/420a24fcbd56a2a2791e7238666b8aa34e2ccf16 @@ -0,0 +1 @@ +{"tx": "2072d98802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1502000000525dbd8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704d00000000be747faf02cbaf2c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71c86fa53", "prevouts": ["2ae61d00000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "45be1100000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["864c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4a89eab7efa8b8df17a82e815a072b99e340ac1768e499ee92fb25d88959474e250636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93611dc1db4058b7df57233984f644c48dd57428e5644aa1c5e18e4c2c7e9844a80a89eab7efa8b8df17a82e815a072b99e340ac1768e499ee92fb25d88959474e250636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}}, diff --git a/txscript/data/taproot-ref/42c6d3a78f584cc355a0bac6f309e105089332b8 b/txscript/data/taproot-ref/42c6d3a78f584cc355a0bac6f309e105089332b8 new file mode 100644 index 0000000000..70fd9efec8 --- /dev/null +++ b/txscript/data/taproot-ref/42c6d3a78f584cc355a0bac6f309e105089332b8 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5400000000ddaec8968bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d5010000003ef568afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4900000000daee1d6e0386b1db0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac56000000", "prevouts": ["92bf790000000000235b212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "309640000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "c96623000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["7c3697d5de3aa481d64fd5f75484d4994cbea6af6a5e3d8391bc5c52fb3307999ad91102540ca3f8757641bfc1d36dd8faf913d9874937fc17baf6ab4db99eba"]}}, diff --git a/txscript/data/taproot-ref/42da32b7dda49d356987402249a3bb67a0b53529 b/txscript/data/taproot-ref/42da32b7dda49d356987402249a3bb67a0b53529 new file mode 100644 index 0000000000..d7174ecceb --- /dev/null +++ b/txscript/data/taproot-ref/42da32b7dda49d356987402249a3bb67a0b53529 @@ -0,0 +1 @@ +{"tx": "22713f2202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca30000000021b16c8a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4940100000024a82fcd0387598700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487a073772b", "prevouts": ["af76570000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a", "b7733100000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ed7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a7e5e7dcc199a2f568fd88e83eadcc582fbeb8fc2cdeb8c853fb2288d51fac1b4d19f2c0f6744ba7ac1f5ff1e4bbd0a31d1cdb1f5d58d1dbc476492d0098121b5"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e1749aa0b5d70f518b926cb476468410836d749f7ea53df886cb06228889683d97e5e7dcc199a2f568fd88e83eadcc582fbeb8fc2cdeb8c853fb2288d51fac1b4d19f2c0f6744ba7ac1f5ff1e4bbd0a31d1cdb1f5d58d1dbc476492d0098121b5"]}}, diff --git a/txscript/data/taproot-ref/42e412a1e895536ef1264d7ee08902b8e37a53a0 b/txscript/data/taproot-ref/42e412a1e895536ef1264d7ee08902b8e37a53a0 new file mode 100644 index 0000000000..793ac24cd1 --- /dev/null +++ b/txscript/data/taproot-ref/42e412a1e895536ef1264d7ee08902b8e37a53a0 @@ -0,0 +1 @@ +{"tx": "0996bdbc02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4201000000c4343cea8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46c010000005a7cd0e60191ac45000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48701283e59", "prevouts": ["1283730000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f", "21743a000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "657d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d46ed5c88be999b027defe78826bdf9f79fd708eb8b2e1895cb28c5d0d8f8cf07a9921914746f344d752c7034b32810721c9853c38c376ca018a4c3c5bab65757fdb01d6ca2155f5be7a678ca6a1e1d0c436995e81f878ed9c74997cf4fccddd302781454c6297f6b8a579760f4d591c0acf84ff9d038b064bbab8a5d53835db"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c56699834a23a35d7a8a8e446f06483c0f6f4014465e54b19938cdc9d35914e3da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e38fd10ac28b4a0ae18793cce60e7e7ebbedf1e3488ce0551c956bc9cf517ba032bc2c7d802e8c870cc0fefcfae9d23d316cca1682651be3bf62b663d5ddaa443"]}}, diff --git a/txscript/data/taproot-ref/42eddccf89cbef79a5adffb7eb5ea1523de5b3b7 b/txscript/data/taproot-ref/42eddccf89cbef79a5adffb7eb5ea1523de5b3b7 new file mode 100644 index 0000000000..6cef0448e5 --- /dev/null +++ b/txscript/data/taproot-ref/42eddccf89cbef79a5adffb7eb5ea1523de5b3b7 @@ -0,0 +1 @@ +{"tx": "3229dd7102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfca00000000dbcb3ddb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704b01000000c5a717a901a974190000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963a010000", "prevouts": ["a632640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ed0d13000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "4830450221009754527738b581abc4f8608a913b98b874c4626f53374f198140d73fe623e4b102206aca3fabafc73b33ab683eb12e436b9835fa0788572f815a6f7bf4c3201c654602434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "483045022100e6b5f7be8ae69f76d84286005a58fcbfaa1ea530557e240582c3f4ecc4d65abe02203e1e941e8f87f8354381d67578c031d30a398c6f94b29aac09adbb7af5522a1402434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/42f1cfaa89e0e558cc339a4adfc253b4108d5843 b/txscript/data/taproot-ref/42f1cfaa89e0e558cc339a4adfc253b4108d5843 new file mode 100644 index 0000000000..f0a74b0a54 --- /dev/null +++ b/txscript/data/taproot-ref/42f1cfaa89e0e558cc339a4adfc253b4108d5843 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701c0200000078a4abf760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e80100000013f5b7250110821b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac9f000000", "prevouts": ["51e6120000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "458a110000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4a3ea69b746c966c84daf122809976a6bce8b1d887b17a6e963c4c690b8a790e73a6c94bbfbe0c8d8162307ea587875a7b29cdfde589bfdf70042a40a3445f95ec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5174c6ee35a9af327fa74c94c4ba87a09a7dd613a1ede58e30654f1c4a24a66737074cc5cf84a1d913e1f5647d3427cc0d6d469f0e5b86c78a49890e87126542fa0e1c61743bed8ba943c0dc40e80402f7423773c7111097ca9c5a140b1b3c94b9"]}}, diff --git a/txscript/data/taproot-ref/43532b914ad45faf56c91ef34b9b696012326b2d b/txscript/data/taproot-ref/43532b914ad45faf56c91ef34b9b696012326b2d new file mode 100644 index 0000000000..6f7a81536c --- /dev/null +++ b/txscript/data/taproot-ref/43532b914ad45faf56c91ef34b9b696012326b2d @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c290000000006481d8560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e0200000026bb47f7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5601000000f8a95f8803a645cd00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79665a0ac45", "prevouts": ["bc855900000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "782b1000000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7", "077c65000000000022512007a606ac1d369bdfe9b32b88a4b0d4c507785f2481b337f6b3340196eed3e896"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "f47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa056823e3960e672c2faac6672d149a4ac5db30e5c30fec842c5078845a2fea890bfc944cea42013591059ba9f4ec0a95c62699d2133b38017223ef90bcb8e42b4a87a36ff2ed7228bcfc2438815b30cc1c98339504e1b834e10aaf4a034051"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682115a2dfa9b95e696b2e1876a43d90a8957d7c1a0aa8ff9ef276528e0707301bf93feda87a2a10f8ccaf134f5ef6c2a0b95d03f8827da72e1e875b6e78a8a5e876f4540117e7e2fda63f7a015ec774d613b8932caa4388fa9ce7145d42cc7f6"]}}, diff --git a/txscript/data/taproot-ref/43a09bc93d6d45b6cef903b1341a287624b825ca b/txscript/data/taproot-ref/43a09bc93d6d45b6cef903b1341a287624b825ca new file mode 100644 index 0000000000..326f94ea60 --- /dev/null +++ b/txscript/data/taproot-ref/43a09bc93d6d45b6cef903b1341a287624b825ca @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb201000000cefb2422bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfba01000000810ff78403a63af100000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac7eeaf121", "prevouts": ["54e3820000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6", "8c2470000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "4a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936153aa193df228982a93d719b91a9ccdb5e9bf3da7f02bfb3b6c406cdd69a7eb4615c38a9f4b3c26d8dcb1a4c3fc9e68202e120a4fd7f06c3d33071ff6316723f12efaba1d06903f148d2465ca4e4c6639d336576fa6993c6ca48823372648a44"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652be2b7d343b6ff8f1db316ffadb0e63f1ae900c6a55aa5e53be2b7079034d4d9a5f53a99550b57470dcc4d4233d312935e71f0fec8998bf9150bf0a5d1b49a4615c38a9f4b3c26d8dcb1a4c3fc9e68202e120a4fd7f06c3d33071ff6316723f12efaba1d06903f148d2465ca4e4c6639d336576fa6993c6ca48823372648a44"]}}, diff --git a/txscript/data/taproot-ref/43a12820d4dfa937dfdbaa0843372e901ec73944 b/txscript/data/taproot-ref/43a12820d4dfa937dfdbaa0843372e901ec73944 new file mode 100644 index 0000000000..d0921be676 --- /dev/null +++ b/txscript/data/taproot-ref/43a12820d4dfa937dfdbaa0843372e901ec73944 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8000000000896880f4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2302000000409c9b9802fd1ba200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdfcb3a45", "prevouts": ["2ca35d000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d", "3634470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ef7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aa6323c0295bc5775a3404b3aacf7082420dcfdcb982829d77fe55ccdd4d869082a8da46561b857dd56ed73270ec2a55b69a5f7c1db8df98b88468b2be2ca2b7eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac8ef60344f111a9c34d055af59cfd42b130acbf4987ee3354719b7c9974e4d449"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb1d33bd2ec2ef2b80e561b3c30cfb99b356a60261a599d7e1f2ff199de481a6e8ef60344f111a9c34d055af59cfd42b130acbf4987ee3354719b7c9974e4d449"]}}, diff --git a/txscript/data/taproot-ref/43b19c13ed8e58e70071e063750e8fca7a9f05e0 b/txscript/data/taproot-ref/43b19c13ed8e58e70071e063750e8fca7a9f05e0 new file mode 100644 index 0000000000..0b9186989b --- /dev/null +++ b/txscript/data/taproot-ref/43b19c13ed8e58e70071e063750e8fca7a9f05e0 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f80100000079124b848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4320000000067ebebe7049dfa440000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a666010000", "prevouts": ["2ceb110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9c753500000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_csa", "final": true, "success": {"scriptSig": "", "witness": ["c5a268386538f5dcdc6b32fd437e7aa0f1ee1100b7fb5ecfc40d276cb9007ba505c108bc9acfdbd25afecb6ff023b17e11b1564ef22b16a4136dc00086742954", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef32555276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}, "failure": {"scriptSig": "", "witness": ["", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef32555276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}}, diff --git a/txscript/data/taproot-ref/43bfb11c19ea9173f4b0185fbc6a622fd0787c68 b/txscript/data/taproot-ref/43bfb11c19ea9173f4b0185fbc6a622fd0787c68 new file mode 100644 index 0000000000..4965614181 --- /dev/null +++ b/txscript/data/taproot-ref/43bfb11c19ea9173f4b0185fbc6a622fd0787c68 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fc01000000fc7cc7ccbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfed0000000086d73080029a989400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748768010000", "prevouts": ["e92f130000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "09138300000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51419220fa8a7a918b3857a082d32be9fa2ecc61d36b58eead0239ee9c5d9d4afcd5a470b8497850c3a230fee464eb343180400453804118582df887251250b2f1"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ef65a7bc88e8caa9953fbbe68415f348dc7b3deedacdb598041f1438fea667b18959ac4fa8a57d164b76708dc6f63c2efb2484bc5a77a391ceb66b2f5ad6b35f745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}}, diff --git a/txscript/data/taproot-ref/43d1fadc7620820efcc941a68f7696480649c13d b/txscript/data/taproot-ref/43d1fadc7620820efcc941a68f7696480649c13d new file mode 100644 index 0000000000..672d74c9f9 --- /dev/null +++ b/txscript/data/taproot-ref/43d1fadc7620820efcc941a68f7696480649c13d @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127052000000000b665d8edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c200000000084914c6603c36969000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7a37d794a", "prevouts": ["2f9e0e00000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d", "ceb65d0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "e47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366bc9e6400471d4508039602a6371cc2fb521d342dad10229cb10d12c2b95e76f158e114954b29a1fe443083941979d23a0210cc324956afb3dcce424fb4eceefbefe4cc2cebe7bba8b4a4f82666342333b91a450af49acc0f1954b5763bfc142"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa0d58db0463b9d01080baa2617114f2c0459e5723b09a0137090d28117705b675ea7c8dd4a05a6083e4a7ce3fc20cde94d430ec03cbfbe8017e9dc8ef3bce99a9"]}}, diff --git a/txscript/data/taproot-ref/43dae97b688afba43b6d88389a78b979f1181c34 b/txscript/data/taproot-ref/43dae97b688afba43b6d88389a78b979f1181c34 new file mode 100644 index 0000000000..881c1c22c4 --- /dev/null +++ b/txscript/data/taproot-ref/43dae97b688afba43b6d88389a78b979f1181c34 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8301000000820c50a18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48c0100000021f32087dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbf01000000a91f7be901ef40c600000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acac07da2f", "prevouts": ["4cf95b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f456400000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "d4ce59000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c9", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936643cf28b3f57e3e135ddaf8a1f03437647ba3161555e3c3b2dda50db56032ea077878475803065420b5149b394b9f2a263406aa3a3cf62bdb9b13e67809a83ebcc9238bf2d7dc0bcf11838c34785251ea2fa5f3bb034bc98e2e8efb0909b7dbc17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d3c147557fd4654830368843709159d459528293d28ab2736e9587eb54fea08bf48725aff660a72fd31f8e9799fbe605d57d774c031cecd8b6989780acb581b6b24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}}, diff --git a/txscript/data/taproot-ref/43eea0f55cf11052527d14c3cf0f96e55882c4d5 b/txscript/data/taproot-ref/43eea0f55cf11052527d14c3cf0f96e55882c4d5 new file mode 100644 index 0000000000..931e6ff59b --- /dev/null +++ b/txscript/data/taproot-ref/43eea0f55cf11052527d14c3cf0f96e55882c4d5 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0802000000f4ac4498dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c370100000052b315f604819bde000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac2c000000", "prevouts": ["1d9887000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987", "206059000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100adc3d98ee8e5c1787d2b85ce1fcd1e29a503d298d390f63e89972f1760dbdbfc02201b1f6a00bb9a7de1c0b4a3ea0441662cd0dbbfeabac21ac68d8821da5c2f7c1f024104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "483045022100bc7217801168eddf5a58a3cfdda97c542a04cdeb3abf6d377edd9649a977664b022075af2dc74696f76798c77103126ab30dce3626b501c2e4213e1bc19da6b1d404024104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/43f8e70fd6ed448f6cd62609f6e4a9d03a0e083a b/txscript/data/taproot-ref/43f8e70fd6ed448f6cd62609f6e4a9d03a0e083a new file mode 100644 index 0000000000..c36f2aee1e --- /dev/null +++ b/txscript/data/taproot-ref/43f8e70fd6ed448f6cd62609f6e4a9d03a0e083a @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706201000000f53fbee960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127004010000008b79075601f01c0f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac54000000", "prevouts": ["cf231300000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9", "bfe7110000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_mis_83", "success": {"scriptSig": "", "witness": ["626a18a6eec2972850c19be268a6a52e86ce74e005009e75ca6e65c08b5cc41eac5c023a6102bad84750eb48fc3a79616a6684cfbd93d151b77a18eaadee0dcc01", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50db6d8b93e424a50fb110d4d237683ac07e6c07da9335a8132d3538472fc0a13fdd63a4f7258a359a055f2ed67b177d56cc00fceafd6c0f973773ba6c49bdb0aa3b"]}, "failure": {"scriptSig": "", "witness": ["3532dd22bf65057d8863cfd93b0944cf39b5bf0e2f42d8725589592fb56bb7c3abe7515ed71127424fea7de0caefbadd41cadd3540b967c06d2b813cd375f81f83", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50cd54dddf5c435e73def586bd9097cdf835f7188234e6520787964681739d4478193466ac3f5ebdbb9c4b535b3350feda5611f645"]}}, diff --git a/txscript/data/taproot-ref/4407ad4a37ac5667b725ef07db2b1b0ebbe6db1e b/txscript/data/taproot-ref/4407ad4a37ac5667b725ef07db2b1b0ebbe6db1e new file mode 100644 index 0000000000..7edd8ba2e7 --- /dev/null +++ b/txscript/data/taproot-ref/4407ad4a37ac5667b725ef07db2b1b0ebbe6db1e @@ -0,0 +1 @@ +{"tx": "706e0a0002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd70100000024a962a960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b600000000b076b3840399c468000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2b971d54", "prevouts": ["cf2e5b000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "ad3810000000000017a914613e66961ccf40c7c83ed07cc80b2528cfe51edb87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "bc", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900459312a224ee6564b861c658371f7a6f0026ad2c58d86ce869dc9b432e830a527104966f092bf1e4b4348fca11e7254311373308f7fc15e3d44d6a2afffa343c9657ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b04dbe1d7a597ef7e58582d6b28f055a2f440add2d85f9dd7bf5919989399b7220e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e14a8563068286881d42b1c4901d93a483973910fd5653bf7ebbf040741f7cd837150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}}, diff --git a/txscript/data/taproot-ref/4422ccfb3a652df26350f5fd43cab32b4a6db9bc b/txscript/data/taproot-ref/4422ccfb3a652df26350f5fd43cab32b4a6db9bc new file mode 100644 index 0000000000..e440c986c1 --- /dev/null +++ b/txscript/data/taproot-ref/4422ccfb3a652df26350f5fd43cab32b4a6db9bc @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0601000000cd66d1bebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf64000000002ad67cc0048a99e0000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac56000000", "prevouts": ["9ca76c0000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "71787600000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "85", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1c80cdf889f2095af4d324c92b00d2a9db5fcc0724b0f6f8ee9ebbd204938760cb2a240b376911c9876b3695f79f395ec3f2d97b1695e5c0e7f397f1ed982e79a1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364b0900bf42a492e6d84803f411d6b7283b14689911cd75fb3ce169ea1a2bbfe0d4e60e987dc96ee5dbea4bc309cd424f3f3a0504752ed5a5936e8ec363297933734b3a7050eee065844830ad8d45a710891f78004f5e7f35b8fd72bf3ee94449"]}}, diff --git a/txscript/data/taproot-ref/443de93ae646f545525c4a8177964caee78a499e b/txscript/data/taproot-ref/443de93ae646f545525c4a8177964caee78a499e new file mode 100644 index 0000000000..ce9a947405 --- /dev/null +++ b/txscript/data/taproot-ref/443de93ae646f545525c4a8177964caee78a499e @@ -0,0 +1 @@ +{"tx": "1fa8cf3401dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5701000000ac034f8802b8c04b0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac3f558d5e", "prevouts": ["83824d00000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ed", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08220e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e179a506f75037c50a9ea9c509d8c41e46c95fdf651773b41e5feb3da8f515025ffd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364239bb564bb88fab9cc8a68fc985ce74d0a60efaac94a2193d617d4650dce2ca20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e179a506f75037c50a9ea9c509d8c41e46c95fdf651773b41e5feb3da8f515025ffd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}}, diff --git a/txscript/data/taproot-ref/444bdbc8e2a3f36427b9ee3bb33b639f3d06010d b/txscript/data/taproot-ref/444bdbc8e2a3f36427b9ee3bb33b639f3d06010d new file mode 100644 index 0000000000..8cd0f9fa23 --- /dev/null +++ b/txscript/data/taproot-ref/444bdbc8e2a3f36427b9ee3bb33b639f3d06010d @@ -0,0 +1 @@ +{"tx": "4296b05c0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d701000000192c02da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703800000000b70f74e6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c010200000054072fbe0445ff6e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e4cb024e", "prevouts": ["0526100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "099f120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "39c14e0000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype0_byte_keypath", "final": true, "success": {"scriptSig": "", "witness": ["da1ab9c302402e20432a4594d9fa7f497ccad03de081d4a84d17f40df1570448874889de2f0b8df815ff234416b9b1192d30e9e894a6aa52d0bde4a7a13bb3e7"]}, "failure": {"scriptSig": "", "witness": ["da1ab9c302402e20432a4594d9fa7f497ccad03de081d4a84d17f40df1570448874889de2f0b8df815ff234416b9b1192d30e9e894a6aa52d0bde4a7a13bb3e700"]}}, diff --git a/txscript/data/taproot-ref/44513b5ccd5d2993d98b0f606e24c3363080118d b/txscript/data/taproot-ref/44513b5ccd5d2993d98b0f606e24c3363080118d new file mode 100644 index 0000000000..74f75afd57 --- /dev/null +++ b/txscript/data/taproot-ref/44513b5ccd5d2993d98b0f606e24c3363080118d @@ -0,0 +1 @@ +{"tx": "363a05540260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700f00000000e95226b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b34010000005888338d017b9b0b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac4fb5bd44", "prevouts": ["c009130000000000225120440c37f254c07fa4cc41897f3d6c7e819f00ad5f6c5ca97225bb132b6849e94a", "0cbb220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a5cb231d20a79dea39c1cf40c1bbfc5417f53129f0b8bc111b3a1988e404cce5"]}, "failure": {"scriptSig": "", "witness": ["6a18616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/447e0a4f2c9391201bd7abdb3935d959277ac93d b/txscript/data/taproot-ref/447e0a4f2c9391201bd7abdb3935d959277ac93d new file mode 100644 index 0000000000..d363e035e6 --- /dev/null +++ b/txscript/data/taproot-ref/447e0a4f2c9391201bd7abdb3935d959277ac93d @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ee010000002a96f3a28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f4010000000cf823d504af574a00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fced92f55c", "prevouts": ["dae111000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "57623a0000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/inputmaxlimit", "success": {"scriptSig": "", "witness": ["4ea734ebfed9e69b2eeabc3c8a8761f0d2f4dcfdebb9b46aa28d0ca18ac4b29ca59e5a06042fd767120cdbdc4e7a8693b6dc0641a9c42c3c2731660eeb65b67c", "ed6c5c68dc20c4d81e1a9fd4f9a1cea561e6ce4dec463534c9f79be0649c9a14df0481b53baacd38acc07370660cb0ea06bad30ce9c81e3b6982f71742eb0bd16c73134323b6182c28c7cfa4b5d12aa1f1eee3575b62951c78426cde80eee3b1ead621334e200b7705d1db822abb4e8ad641f7a9629e50a120ceee9728ea567175ef04a6e1ffcf03230c9c83f73d3c0afb317bac9b3186dd9fa61ece7d173f6fec4173243c4054f05a9c45710b9d23c31e252369b2e8dfa9b2c526f0fd6d4ed9552d8df2fddde0f539084cadc5eddd5586a40b37a9db1f93e20c82ef5fa0b9291fb75deddd312f29336718aab29d0fabdd12f3e194cc8fa6c7e4cad213e4d0fb992568206ab873bdb40fae9f7d67742eaaf2c6efcb4fccbcf1b5e81c64e41c04ebf631366b669f629adb57c24378754ef7d5ae1eeedc9a4498eca87e1a1dbb78b16c0247a05da6804dcddfca27b44f897f24394e44a18cd30fcc59587236d2a8f696d2e2a62176200c3b33ce2d07a9b0c47e025df6319a3c0b0de94b5c85bcfb96b599217f8c4842c1f26838bad5d96b0fc60a357b24c6e35fe07dba659eed38928e5df01e33cf75d6f34c730440719a97dc95593d31bf6c970d7dd3380d07da9f9daae0a1621c36bfd51dfec939aca5054dd5c13f78a309aad147e1e1b0dc22896b3f0cf905f6a992958dd77aa2e8279a8b516b3e76f566f72fd4144aa59133c9666e409bc99fa3", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93633f145906eb3b0b9144503b7e952fa7ac030804bf21818b76946b0617a1dc901d4021eb67a5422f2c264ab2e161e443ad68483a924a10f3067064f47bfc1aa823d0cff3dcc0a2d4e46fc30f48a30ceeaa99fba3feb9f110c8632a3b2fa3f4f4f8fbdead7f8de6a8aad36d37b0d589bc9244c1684fd5ac3294cec67c7c6e587a6904ede5a53833ce5d447360be78b94add963f9070eac219e9b04ee2bdd400ddd04364ae3f3c0d48023a93d8481ba8ff7adab87d79476f69028f3fb22b08d057964bbb3ea34308947c748760264ee9e03eb1f98d2b66028dab654f580a418be99661f479a6b0f557293064f4a690bd09af98d8bd3a778ce8944b23259946622ee8f58700e34290ee018923271c5b5338c26b1c5ef6f25154ea2cb21c87cb2bddad45cd3b88d2dbb65b62cf977bb614d0efb5c9353a8b35cfa01122561253231744c2c32064ddb3ff0f538be34c536787771f8aa5aec123a81e8014a979ffa6906075479528a5b4db5d683c0884af4c8976d652dd9505f85dd291fe0843ffd0ff27865ba15c8822e63cb0be5982c1ef15a41fad555080e76aad0b72a8aa15726acd51679a62f62b306cf011a5d1358e6ba8e189d7358bc43376d46dcace83895e75b2934214492b999e4970e4990c42fb0eac353aa09117e3e38145bdbc22646e577b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["4ea734ebfed9e69b2eeabc3c8a8761f0d2f4dcfdebb9b46aa28d0ca18ac4b29ca59e5a06042fd767120cdbdc4e7a8693b6dc0641a9c42c3c2731660eeb65b67c", "9522d307fd40d9be4d4da051ae6910c605180d33f1668ebe958499d5bb8aed34219f719d4498b6375b4d334d66be19c5d26b8210eb751bbb87ede327c69546f4a21dc527aa6d682777c3ce17d0038712b8ad3be26d8f457357b203712a559ccc869d2069cd3e6656d0b631bd15ddde355cc941c79588655b4ecb28d931ad72c2f24dd0bdf93d07c1df0f9c6a5d30613a2d3e30ea5bc367b15539870364eda18ef77b5af3a6aee8ac4a78bbfd581cc8673293945993260ddd9a3c7f238f80de87fd7df5e4a2ce8c292d296c9680b44457ec8fcd7e299b19318d7e17a0f233bb64475751f0f46e46abf37bfd6b213ff556bb885fb08e99a92235668e3e8983daca3efef2f18660eecf9102d8e54a40dde7f8106e25bc9bf46dc549842c6d88fee2c1baa3affbc0d30e8285b8fb474718ba4480eae8fdf4f704df7e1d4d9558ec09e534e2499f64ad12855cd4362b72d7a3552f3d2319df4e2782220654aae7a12ce6e81b8b1b6fc751ad61e60a26dbe6949e1827fa35068b754729a01ecd041771fdfab7c97b51ff5e8768e9b4bc41afcba0f5fcd5817a24110c0447e5e5564af9f032ecf15207d1643a04d8e65b50abd42280fd47593c69ef6489cdb399a8afd44a827bdf173b1ffe8bd57dfb4e7be65aebf2ba543d12629d1475b024713f6f18bba3efe2ae7c2f6efb3418162414164ec7a6876d68a934ac7c5709447412724313e5f8651e8dd36b73", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93633f145906eb3b0b9144503b7e952fa7ac030804bf21818b76946b0617a1dc901d4021eb67a5422f2c264ab2e161e443ad68483a924a10f3067064f47bfc1aa823d0cff3dcc0a2d4e46fc30f48a30ceeaa99fba3feb9f110c8632a3b2fa3f4f4f8fbdead7f8de6a8aad36d37b0d589bc9244c1684fd5ac3294cec67c7c6e587a6904ede5a53833ce5d447360be78b94add963f9070eac219e9b04ee2bdd400ddd04364ae3f3c0d48023a93d8481ba8ff7adab87d79476f69028f3fb22b08d057964bbb3ea34308947c748760264ee9e03eb1f98d2b66028dab654f580a418be99661f479a6b0f557293064f4a690bd09af98d8bd3a778ce8944b23259946622ee8f58700e34290ee018923271c5b5338c26b1c5ef6f25154ea2cb21c87cb2bddad45cd3b88d2dbb65b62cf977bb614d0efb5c9353a8b35cfa01122561253231744c2c32064ddb3ff0f538be34c536787771f8aa5aec123a81e8014a979ffa6906075479528a5b4db5d683c0884af4c8976d652dd9505f85dd291fe0843ffd0ff27865ba15c8822e63cb0be5982c1ef15a41fad555080e76aad0b72a8aa15726acd51679a62f62b306cf011a5d1358e6ba8e189d7358bc43376d46dcace83895e75b2934214492b999e4970e4990c42fb0eac353aa09117e3e38145bdbc22646e577b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/4493e5053e8c93d7133c12033db30ab0fad02eea b/txscript/data/taproot-ref/4493e5053e8c93d7133c12033db30ab0fad02eea new file mode 100644 index 0000000000..513ba502b5 --- /dev/null +++ b/txscript/data/taproot-ref/4493e5053e8c93d7133c12033db30ab0fad02eea @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd901000000f31c8ecadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6f00000000c116dbd404db3d7a000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5d010000", "prevouts": ["1ef55c00000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "0fff1f0000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "0b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ddf344411e2a803e2f014fc4dbbd34487be175b3b72a6822dae0235404bef0ad6eee185c5450ca8ff820874ed786a77ca41a0ece110e4e1e272b53628d0f659ee0d9bed60e53dfa6fe8b58229f37daf0597893c765c7b30814eb9e16fca89b86"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a7a0146d222f7b4b0baec19231a96a69115ffe6b14d39b17208bbfe466e36783da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ea51646124a2b4386d840e205fec55c7cefbdbe9c75e9c45dd558741f313d2d0ee0d9bed60e53dfa6fe8b58229f37daf0597893c765c7b30814eb9e16fca89b86"]}}, diff --git a/txscript/data/taproot-ref/44b2a5681330965efa5dadccd65e4296cb9bb54c b/txscript/data/taproot-ref/44b2a5681330965efa5dadccd65e4296cb9bb54c new file mode 100644 index 0000000000..9c74042b93 --- /dev/null +++ b/txscript/data/taproot-ref/44b2a5681330965efa5dadccd65e4296cb9bb54c @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1302000000a081f487dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0500000000e4f110110337dcab000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48777000000", "prevouts": ["c78166000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "7f1348000000000017a914971b3e5f9ac480bdcebf6ea71a9fc7de0ab164e287"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/emptysigs/checksig", "final": true, "success": {"scriptSig": "", "witness": ["", "36228bbe2462ebf9b44d5743a161bb8b43dec7d353201064a04696e3c5074c9f7e1a0cb72ee02e5eeaa1de3f2b7657cbfdc9ee34efa9d9859d04c40a6b4ac1df", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac91", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b87c3d13bda4bc96912d9e1d3614b88ea00288653983e5946dd79f95cad56850892bd312bf555f4ddaee895b667ff52e0154e570fb3b21fb70ce55962eaacfa82b8a8694f12869a73a7c9258692c0a516e36ca599c5440cd48185ae688899f972334d1082e7cf9fba1fb8bfc554039e0d30e1d717d7bd10b1687557faeaf94ec531fe2ceb6eb6fc38e892c8463543d75fb6857ed3555003db7d30631ee24ce556745e6d5f13398b82293345b14639057cfe7c9133f3a817857bdff96787ef39c49602cf62409ee25e64fef6eaf4f70b438998ea376bf89aac812460edc6098d5da36431739388703f162bfd6be43cc18929921c1c825eeda473da76ec1d4f9fb59fb388f102ea0ad67c71defac059c7c8b93c58afe1a654026c6fac78536b8b1901243e25851de0d6781e7f528327af4772fe14b340f1eedd75761d4eaa742157b0a6f9680ce7f5ca5bec9338fe334e6832114c99db2b4b78f7605856e14f0f922c7dab2635ca4d983bce69908efc2d6c8e3a4e02d107fe54b591d6c8cbc0ea2e862ced977f81641729beff04e69bc449bbaee4ae229138f125e8f575c30a32bf5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["", "a7f2f47ede28e2e8ce69a17fc3a01f3298b85f5485f6bebfde16c89eec7adf4f6458a7a46922f2fa766f1dc473c0616e81c3b9adc97dfe98f3e8662e0fe06ee1", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad00ac91", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361a911a84ebfe90f85cb95d912de296e406a83e6bb64e40cd5d5446ea831b1e6ec0a0aad722561a657b32c771837934bb172c5e60445fda6f61f0549ad59d168a4a21c5ad207b7d947881fce7c77c2c558bf7d85da25db7933f453b6e11590535e632f05d2f265193b9649a5ef1618ecbe44f766924f0669492df39f8d13b141c3c5693f833d18242b72bcb57e7e060bce728ee6c12c1b8c82231a7efa18d9c9385b2a4b14339866bbd34bafab4a7cc7e6dc675bec351f64691ae0675794190c7171848de06ef9560cb93bd963649849e184ccf9b661423d2aef42d152a6744ce6c2706eb27a56bd81931fb0b15ae24da807c7aa33efa89f4760659c3931e68d37676dbcd6ad8e64a0f0b6ff3a833ffebef72be2857da7c20fbbefad3c0710755dd17badd9d086330be6b0297d0fd804a34aeab6728d2070e6393f90b7e2f24c098ac1853f441446cce5c977f35bdabac1c454ad75f42d53ffaa130b2c28a234a15ef11190bc97bcc8d0e99d5656d0891e3984baf383c021195a3f4accb96a873fe0d5c32a15e7fe92b17b2b8c3b841359f1b14625d34ce4c46a1c898e5b74301d7a21d399a47140b6711788aa4ac5bd9e63ac239ed45da28e932ea3acd6bd9f7f5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/44bf61ffe86491dc47531baea9f4722fed205885 b/txscript/data/taproot-ref/44bf61ffe86491dc47531baea9f4722fed205885 new file mode 100644 index 0000000000..517d32b420 --- /dev/null +++ b/txscript/data/taproot-ref/44bf61ffe86491dc47531baea9f4722fed205885 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2301000000aad2904b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a6000000003d041d050193d671000000000017a914719f78084af863e000acd618ba76df979722368987d0c74728", "prevouts": ["5b7f6c0000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "663a0f000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["304402206fa6f76e7f571b86a43f0ae206bd48cdd783d877db586d4f37fb4760e5c4980a0220618ca643df307b2f1380f43e2bf1a6765f434929345aa169aeb602cf4651a2e301", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["304402206ce32e5c2078e6996c69dc4263d8d2e08152b7fe43f583f89aaf4640cef0af5302206e2886860b00947eb4547ae247456ad24509c864d70af1623552bf48faa9629a01", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/44c41d5a9ee6d3836c4cd959feb9946950a93097 b/txscript/data/taproot-ref/44c41d5a9ee6d3836c4cd959feb9946950a93097 new file mode 100644 index 0000000000..8b550ad076 --- /dev/null +++ b/txscript/data/taproot-ref/44c41d5a9ee6d3836c4cd959feb9946950a93097 @@ -0,0 +1 @@ +{"tx": "2164258c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c801000000643e6ce4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1b010000002e5c44cd0201878c000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65633f05d", "prevouts": ["e17b11000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "ecc07d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e144d0ff37a890039c0ba21f76704f7cfad8b9e86a035546ebb7c5a6ad2c2135a28cfae4f24e00136258a4229df9ce1533cc743f70cc4e5c0214ad74c09f63cc0b9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bd5fb013d649a0b113a2236243da0be0326b44fd96f8b22737f30239849c7b4bc63b209b29a3611ab6267155884a7f894b498570c9db6a86ba3046458c9f77af637f7085334bd6ace67733ad5f759fad65febfe656f63b2b30abaed1d2ea29dc9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}}, diff --git a/txscript/data/taproot-ref/44d03ac572cc57f5a15470cd97f15bcb5b9aae1e b/txscript/data/taproot-ref/44d03ac572cc57f5a15470cd97f15bcb5b9aae1e new file mode 100644 index 0000000000..0c11333727 --- /dev/null +++ b/txscript/data/taproot-ref/44d03ac572cc57f5a15470cd97f15bcb5b9aae1e @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5c0100000075641680bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8a0000000017e471b5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf300000000ac1340c303f3d21d01000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79694c84f5d", "prevouts": ["ad2d7f0000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "7d0e7e0000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6", "9da622000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/disabled_checkmultisigverify", "final": true, "success": {"scriptSig": "", "witness": ["9a2f7f0b58db0a89e0561ded91d28df1269c2b5f285435e6da4020731219553731994f4e17695e91b6a424f2ba383093cac617f6c1f2c1e622d8d6d129e78aeb", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d2db232a58a684473efffe5f8be15c17374986169cf18c1adb110b544d48679b6f3543d66dd2934a4b4b5b83f3181725b5ccb68f1096ac62351c7c97bd1fb9501b8110e709da1864e3fbcb3b5249515c34bb807e7a52bfe6718950e769cad388c56ff404b78dc0a0b90d50115d89846b94a2b0a1f0895318a364e3dc179dd61f9b1e0d638a311a5be1486a7a4c42f89ed43ffd1d5b18820f631006aab35c0b2a02b593180c53027b35b862cc29f04a25efce114c7682377a83dbcf64f6fe42598064c72ae707f2b03b7d69f3c0306a0bb5edc9aa2d90aecbb96bd412d5b1ee8f00d68262204427d46410b755bc31a6012df0b06b921e6cd021b936d3d4c99eead90212921e1142bda8cb81c5ff3145b34391c40797432570ad9a88a0958a1b955fe09784706370c5f6fd13c48513ab6cc16af1e04504ea44462b93ae24aca3b2228a833ef2c51accd6ee09327b5cb9ad2975d597ee135bfef0964473e20f824ec199d2a72d3d5f5ff6ee974913584144656ddfc893ea617971c4925fe8b7e1c4f556906203221bddfee6deb7780e80a3769637a05bcf2efe708f1aaa4a6ffdc17363486d1e033637af9f6d28292a4f4527a2090bfcb5efca2ed9c0d63c01e16c98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["be73b35f48d93be86cfc0cf74d6d137772570bcd0a4f9d668ba07dbbd44f07e00e58c348cdaa53a47740620b9ad3de92bc80674de5efd8f33a2f0de0021553f1", "007c5120871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051af51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936163a2cc881d2817d2aebbfe172137e370cba72169135b49668e6c780f04e982af52d98203d7275fad400ed3b197c4c0e8622d77cbcb79cf7a2a00d2fc972bf5088fbdd48b7d094f4d49d8b1839b74dcc4dbc013e4a19a5571fcb3060ef9d19df09c62f41d049064138a9903b85876dd9717333b851facc249a6324496924ccd19bda959ee64a0e521086eadef560e007b812ea93c38fe6696cd23c9dbfec9561aa0b9584501d37df2cd6ca13872aa7d8e15f2d972cdc457728ab40ef8953a50d3001935f957d09ca50115598022aa673264713d6b6dab663f57d1ec4e21ca3f1bdd904199a671bb3071cf8c371a0277045925ae6969a91e37c13fd037f6d30f33fa29f5bf4150ae3c3f10f01b96905a4bda7f9c787f1e1f29b743fd45b74a0ded3f6d02e18608fcc5d3e47e21e030a7d2d6f4e266ec508f5b1b295a661225ac65f234c9d20f0c91cddcc015657641c02499e0969ed1c799bb7545acf49ce097d4bb8d89f21761581480cc9fb789613a87d31235185f9da4b4384725e898ebf0d2c5eddaeb8557ce0f7cc7880e698091ab104cabb34aeeeb5d0f57ea86d1ebc555dfde575d48d1eaafa8343c63d6f5425984d2425aca274be02e47a5142e089ba2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/44d081e51884f8d702e4373433bcf56a8a7ad583 b/txscript/data/taproot-ref/44d081e51884f8d702e4373433bcf56a8a7ad583 new file mode 100644 index 0000000000..5f905c01d6 --- /dev/null +++ b/txscript/data/taproot-ref/44d081e51884f8d702e4373433bcf56a8a7ad583 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd801000000e90e4673dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c17020000001ba48a0c0414137a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdbfcc93d", "prevouts": ["a9982800000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "c1345400000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902154269b2599e692e7e67455049f2a70cb852434fc1ab386df0f0e61f2e1fda7986033017a4113acd645d6fa3ff6f32f674dea0d97b1bee2d66bf2327ee1824c826b5212e5cf384eb0bd49c7175a7a4eac52c621a6d38fb842b40a6637fc1462170ecb40a604235e08652c2f4cb86773f405d84ddd92920485d8ba82ce2a2a8a0757df116d1e5dca6a64c4d59eb3081db86e2923a3458f00c9f5d5594cc4ffa6a358d5a4269845c3b36db8b044f2e33e52d567a39dc38efe3bc680fa9bb3d87077be5b3c71a06658795e499dba6f12260724b0e9f705236404d579065ed0e9c6adb4797ebe32688107f544bfc814561216dbdf7c679c1174d3048794b4cda9bf1a6dd7a43a44fe0f31b648af40eaa3e1f65f5bcd3fa20611d5ea5133271a1badc9e2621c4f7990cd54294eb375f77a6a6503b4d0944b9fac940cae17108a6de2ab9bda6023521ebd6e2734e4a6d932de7dfe21b1db6afa0074f3567ae0cb58144da4ad0bf76278a6a92f3e9be26ce18124b1a9e2fbf77c260bbd1b4d2a06bcced79478b2cace2232dbf4d130305d06242f702481f722cdd4765188dbfcf5110877db2b4a9934de0b6e1e788d68ee70adda3f9e8715a35725f99dc496c51ff6478ac3e60ae6f7763f26b0a011023d429220839400165ea82b02e138b0290038e39b46a53a632dac987fa0456355d524f41e1087a6852e10a72cca4151873f2b7a59932da8b975e8060fe75", "087d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8b5a7915446f123db4170aa52497de96e23eeb94b1c6e08805331c597130f97392ef61cba24ca089522adfb015944d93e6e298b3bdb8572d6b7e61874c3a207520a79ac573d08fada6e0a495a70546abebfe2eb256837e38d30334686ccae33"]}, "failure": {"scriptSig": "", "witness": ["4d090204e3625c781a3e70b2a310117b40d85d0e9bffcf3d61259962771f28d027f66362e244aee2c8d21aa0ac0987257de1036d92e23a5192bdb47b193286bb782146767394732dc303be0db1c7d25c3287f7c5ed49c4a3f2bab8e2d57bf07bc244b23abe30083d7e1f37433849d25464b3b5b744eccb0e8845f0ce82fb69e1a4b29026ab3ac1a59211f76b5c9254e441110d2fa814f7f61fd549b55ace752bc9c8be5e532fe394027b79d2349cfb1bd2adc6142769bd0494fbf48e5f07411123e0e58f410b653728553e502123eb35bc452e5eed2848b3a27f05be581a23acbea610e1b695feccababd08747aae78b03d75282bbf6f7f604e32599191f64d5c7fff6a907d053f9b7a9c10dcd2d5d4c26218eb756b64f2c0732033a3b9f94eed61df904e512080e7baa5e5e9781f8749407823b9526cc6ce63ddbdd3425e840a597087d3c0e82ad5e75c5d3cdf97604135c8b1dd0802ec73f982aa6207610d6bf21dbd9d0a95a35552430112b6e151f5e416b7e7be52291ca5d100e5105470a1241aca7eca11b74057789b38fab803477a113480e47f5a9a73f6638ddcfcb184fd36c0abf5302a1234d30a2b14cc844003debc8475770016ac37119a5e89af4fdc24e9b17d40d008a5be1f29a9e156a3be25517a3747a08d15a5e71c55a1d7265c204708df349d11119244284b379e64f5edf55d9c5ca2811a702323ff35fee4ecc248b262e827d8a00627a75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ebc0204111bf7e5d13e3ecd3b1c8f71c6ecf5827e1a757374a2d5a102d95777fd392ef61cba24ca089522adfb015944d93e6e298b3bdb8572d6b7e61874c3a207520a79ac573d08fada6e0a495a70546abebfe2eb256837e38d30334686ccae33"]}}, diff --git a/txscript/data/taproot-ref/44d277dff113e85feb1b0da733079ba007e9ce3c b/txscript/data/taproot-ref/44d277dff113e85feb1b0da733079ba007e9ce3c new file mode 100644 index 0000000000..1fa6a3904d --- /dev/null +++ b/txscript/data/taproot-ref/44d277dff113e85feb1b0da733079ba007e9ce3c @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c489000000005bca01bcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba70100000054f58ac701aac509000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487adb94525", "prevouts": ["3bde380000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c", "b5601e0000000000225120dfb9bbe67fbb4eb318568f7b177f9ecde078527d023b90a4ec13e543e4037efe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "f77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee1b135a17580d142a9191c3b85b2fd298f3e09062f6f11151feab86e1334277f9411b885fbcd56b4d2cd2e695cafde2fa2de7097172cb34b20e1fb870aea9a6a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93614bc388ca930cddc1c81a27ee7343eb0c7b6fd8e7416418176eb400a30a42e0c75fbdc6cf2e777e050e79c533e418db275d42efba7f8dbffba71190cfdc033660f5943df1a7722c938328966c7e5ac747f85bf050d43cd9195f6df88860ae066"]}}, diff --git a/txscript/data/taproot-ref/44f204855343e69fdcf5529e0a6cb7ea5dee9741 b/txscript/data/taproot-ref/44f204855343e69fdcf5529e0a6cb7ea5dee9741 new file mode 100644 index 0000000000..aff72888e5 --- /dev/null +++ b/txscript/data/taproot-ref/44f204855343e69fdcf5529e0a6cb7ea5dee9741 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49801000000f2d4614a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270130200000074abd946dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9f0000000045a6249304c5089b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acf499373c", "prevouts": ["31f4380000000000225120d7db2432b77440d39106fdcd5c35c463320f36611b8bc46e3633cb3a8d85086a", "83da110000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4", "30d0520000000000225120c3b9d8e50d42de1212377aa9427da72fe17222669efe5204fac1f05c34f6e65b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367962369c05be87b1a218c7edfefd1f740a3e06cdf8be2eccb1098b418ade5b5c"]}, "failure": {"scriptSig": "", "witness": ["6a88616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/452689d60be7f0c8bbd02b65a8c9841ac076b913 b/txscript/data/taproot-ref/452689d60be7f0c8bbd02b65a8c9841ac076b913 new file mode 100644 index 0000000000..aaf663ce09 --- /dev/null +++ b/txscript/data/taproot-ref/452689d60be7f0c8bbd02b65a8c9841ac076b913 @@ -0,0 +1 @@ +{"tx": "3969ed4802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7b0100000059dcb48ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4101000000052af5c1039b12b0000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acdb000000", "prevouts": ["a65d5b0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "6f45560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c2008843b41165efefa966ef86e5b17069112b4e8811936aac919af7c5cbfc0d863909619a9e5e3690b76be6b1d45a6f641895d036112b103d4a996c01584c34e2dd9164a263db053f999206ee7487ce868bb2edfcde9013ab8828341c83c1860ff9b2b65556c799caacb19ce7174550227ecda758458da932d0e28874d59dbf539e83f0021a1a7375fe3c6a9002e3118d86ec55884c001bd301c3d0640515a62d38b6388937e66e425417d7b1268e89e8f731508ed3b090b9de7d63503eeab79dfd2c9b9acd8446b8c7aca6888a4c3a75dcab570a0b8d5727c9513354522d6b5c2023d0e3d37a341987b71832a732c508924bd4cfe79e3561a5f6b7a6abbe9363d2a71ae58029ef1fbd00680c24e9517ef155cd72f728c2947ea2827403c3cca6a355993bb92d68b49226734d45854f1da196f489fcbe62de470f15ac1f37d969606c93dfcddd44bb850f4a47cf71544452081e2e184dee5f4a8636c24c800177fec87385add0f8f4ee3e5d5ba4ab562118af504ee97dd57732c0ec5e31972c869eeb6ffb7e3dbdcfd96528cdf8def3734b837b295f6c77887eddeccad8b2022215c07cdae9702d2246fa159483674c798d5394dd79633030de667839a72c9cb5eb3773f907acf000256cb7cdabf05e131ffeb16a9e490bca644f46a06e7f100905bed108a2bba43d702900ae46f0145bddeac952a85f4accb3b2d2643ae0a0c84d7bb392a8fc8c9675", "1a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8febf22132d9643e24ed9082227473dd30d4d39a0b990b222eadb4d87d4a2f8740b87aa3d77021654e9bdded249075f42755a492250fa9a6a44787c57353d93e356798b11c96dafc2935d577afad31a6537ce4b1a48ff27833822cff5fe95a51e"]}, "failure": {"scriptSig": "", "witness": ["4d0902b112b41944d8bd451ca6f3c4409a4448e82c100cb323999c9a9d7a5655e4ba06c52cfc49e90b3ac8054f4fb5a96bc92dd92f0bf377f0b2d221a10e0c78e7e0cf9c80713a75f1b7a66a506f1fb57e8471d263ca0cd6c052c5ce2d61f79503dcb1df6c9db66f71bdc182aafb5c9d4509461bcf23ba1d455ffa3cf473a61126819ef40002bbf682eff05e7799664e696fa123f7f1dc0b947d1caf4710c976656abe5f300dba88b76e6c9c02c37754dbebf5acbe50e495c5b275d2290051867bf0cdd8077b8fd3bad713be2d7db19e637f2eaf2e1943c1bad05e8399c8a82b2c2f28e12c8adb8719d0546bacb395d9674b872e4d1ccaecc0044d6fd2724c434ad345c9a4f496d7869c0adc35703b2bc3a7fb193e0e4c4f5297774840c5f7e238bf0b1f1a865a2acdea462ccd2988a3de72fe284ba74e371ecea2ff194b2f0b8f1490f8ea080d1a211ae006dddd8141c6f7c9d4d8dd88b039b823ad3248d6ad903b9859aa91b38459a5421956077025656dad3a8f328a837f9df63bc60e4d4bec481292c263798be4574565971f098f876c25eefa45f8f361449d43c0ca65e4a06dfd8cf16dd9533f919599b45300f89c92f9d21345dee13de8223a167de041716be99d9076c66c916fb4f9867ac0a96f1a37493c7c707d21384d0aea007de708e890945d6cd23d0326c041f54d9251605c6fb0fb985529f995a3e109fa54845a17999c1cf3ea4e9ea8bcfc75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3ff5c5d6186003b3e6d49f1c6ac4dc5a625cd45316b0701f0e70ab94b228af6df2727a08c83da142d000f7f66d34a23554b296f940ffe81022e50f50dcfdd8b9"]}}, diff --git a/txscript/data/taproot-ref/456d04cce86b68e35302afe4c3345e7531aa7304 b/txscript/data/taproot-ref/456d04cce86b68e35302afe4c3345e7531aa7304 new file mode 100644 index 0000000000..8e34a756f4 --- /dev/null +++ b/txscript/data/taproot-ref/456d04cce86b68e35302afe4c3345e7531aa7304 @@ -0,0 +1 @@ +{"tx": "5c3eff1d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4f0100000047cb658a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b400000000b06c21f90234212f000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac25020000", "prevouts": ["6abb1f00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970", "fd3b120000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09020a9ed6d0162fdc26a45d63ed84b116e59a5362606f5cd32f4fba084b119446c61d24a4a6d1bafe9b46a76a819927a541c99244a840cace3799afa924a348bbf31d303441b9e968c652d5dd0ed337604ec9bce7ef399c6ca38b45e324cb2b7fdb7ea38da7c59b4c210db0addbb1d4f040a4f5a9167081a91e95ae73f514e22fc5f170e66853b80373ca579ba03365a963ae357aa6facb72ff9a4958fbc63f40e04108b6069677614e99cfc4b1d6afa7b4f26b5aeeefe828f81571b16586ccf589eed7aebfd560c893971fca999b0e4024848aca661aa8002aefd678f3b668facbd7950facf098772c3579adef2e84eaac7fcfc34f558387d1343b57b66b89dd664d96ea9e56e7e69801c996d550fb5357a41dc4e9a3a6dfa56e76b607204ee34b4004c9feec2b53e8bfe30b9285ba2212545fb006b2e1ef0850097d902ef8e277807ddeb23c4c97a35ade7ba9910e801b174d3c6c5f5deabe73aa24bdd6f8070ecc63e3a40b2ede659bcc5ce00caa70e44481665c925583467c190f857d742fa8e3b1bad3133dcd1a2f5b460567377eaa7f5f5b431c6153c23b3b00936a425af67e60cd68c30bfa740356284d8f65f3c95b2ff5186e0718beebbc5cfa6bbd2aad45393e7918205f86fcc3d521e3dc430d76c548b1e134492af5aeb72fbc3a69382361a551ab370e01a71424ffbd2fcebdfc8b1928b8112249b3b3bfb9f5dde4baba70a687ef880e33457599", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51379b42341ec85aaea9ba53764a308ad79e21ba1c6bfeef93296a10f4c0e568eb3c50effc4608d2c714b1f589c510b82e2cb4bd2fb333954004903b4f08f38a79"]}, "failure": {"scriptSig": "", "witness": ["4d0902fc7ba2315efad43456443393f9eee65bfe67ead2686f2acbc59651624b753dae58d2b67bf211311d334a34761c9bd63dec663422fbb8c61f01c005f56c5e29efbb290b3b9ca5eb659c66c002ef42f452a0979ea19f3c2d11d8f023c151ff33cd338143a85fe818a812b13468ace78761bb990a13b8a4652a7c0be267747717d6f66c5ec05ea122aac2c4cfe8d1e36b277b388fe02d22e9882c3ece3dbe62c9231648e26ee5136a4672eccc74e7f29e9b9fe2c750c6593e8e5dfb08923bcc0ee47cf691c67cfc9273158d772fe6315785d28346e4b0118710fa3032fccd25cfa0a6a00b0e027ccceda6c8b1c72bc17b492d5dfc8f1c00c078359b65292d757ec6584f106800624b055c26e68fcbe76df8ccbfd3227a284f1cf99131edf1acc38f9f5b9a8b275c8bdfafe77634fd3ba2e59d482f06169cc091af4e82e700fad7fb66684c024ec55f8a35c909e336fcbc795c6ce6460444909fd0190b7e43507f88450b4cce6efc7ca9f0f027271cbd1812a40f1f7e320c84eed0fda2e26ac5d9524d0ac8b479ee89984fef260f3bfd1bd2ddb1cb4e59afabd34b7e58009248815d72a9553355b568faf0963a7c385c20f22b1f9da858636c938f6a99cfd4651ae70b711eba68e7b284977d631e98edcabbba860c28a652c267125675ebfe411f0af4e15bf8ef29fb0d3d2a695b60dce8d386ecff512402497845c3030b530a831d664be9ab0798e71ed77561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f4927cf48427f778f6164e8488ebda7b6882b6008ccde3c7191d70c6abcfa8cdcf0c734edfbcac159d7813ef9562f4df1a796390e1a91bb6f745d3b9c841d624c8fbf2363a77354fc9c61d01c3ea3e8806c47304e5a0571bc5a832b63c4c4c93c50effc4608d2c714b1f589c510b82e2cb4bd2fb333954004903b4f08f38a79"]}}, diff --git a/txscript/data/taproot-ref/457a9522f60a63cad613ce6f45ab52147b5a1871 b/txscript/data/taproot-ref/457a9522f60a63cad613ce6f45ab52147b5a1871 new file mode 100644 index 0000000000..1e69470fa1 --- /dev/null +++ b/txscript/data/taproot-ref/457a9522f60a63cad613ce6f45ab52147b5a1871 @@ -0,0 +1 @@ +{"tx": "0f80966902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0e00000000ea3117d060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708f00000000ee3251bc0203da6600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc722010000", "prevouts": ["a96a590000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3efa0e000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "dc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e87ec7f48ddb853ff8ec7c3ca68869c312ba33903dcdb15647a5295c052617846c86395c8bc923896e22972506a7f348d4e1ec7a5bf3aa363c117ffaeeeab3b8c4ad29df8a0e62e4f40897f8996914b12118c918ca2851b639742aeab01f587290"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fac1c00ca223002bbb4a77b296f490434ed2387551884308e16e8dfcb52ea12e9f3bfe8b0458382ba4f4ce4b13b8b707c198a710172b0004e49e202e4d70abaa7b"]}}, diff --git a/txscript/data/taproot-ref/45afd60d642320c756621d0d193cd27de023f243 b/txscript/data/taproot-ref/45afd60d642320c756621d0d193cd27de023f243 new file mode 100644 index 0000000000..0896b460b5 --- /dev/null +++ b/txscript/data/taproot-ref/45afd60d642320c756621d0d193cd27de023f243 @@ -0,0 +1 @@ +{"tx": "5bee4af203bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2200000000c005eba660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ed0100000060fdda93bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf65010000000bf347b903f07aea000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689872898922a", "prevouts": ["c7c87a0000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "d53a0f00000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "1e11630000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902ea30927e3351644c00e8bb9074d5f41820840987fa10657656c3ebbbf4a3ebb7c56246497e5735e52993543a5d89ab846dde66278d9ca099ae882db2da31b924fd2ed0fdceeb1c915ddc0246d99df59eede8544da09c20791208d8e9ecd6d46314991226ba8ccff2dd20f656026969338807e0899fe6d7b9edf6f49864e8a117b27ec025baa7c6a1dd154aa465369c3107e309ba0816c29e84a9ecddcb7bb2a7b1f2445e3230ddb8bdebfa4dc7fc1b70e31a9dd3b5aa063859970c42b1f55c3d3b4e9036ad3d62c50258da97b21415ab24fec02aa04f50c8f97dd8cf895482dff8478fef82195378d4154eaa26c8a77c4f2f4bdc801bf8743dbb97fd881f27b5434156e01060031fd1b94b3156379deee84bb8df2b8a8b2901d6174b259e72c6ed446915499ded265eb8035739a04158d7a8ced365b182b3ce80584ac3f4a907ce89d4620d84adb82c840b0c147d8da988cb882f6bb8fa49f048f35c2e3c88718e26b400feb458bda5793ff9b00036565d411b23be3ed84653ff5ff456dc82f271ba350867992674e76a6cf9e360538453157d00a1294a067c69f1d10acad95cf1f67f2ebaa58fa4e4ba002d862fe8a9b2af4b93e97d3338b556aae79a29e3a91c5ca2f99424b2137276b9dd49ba3b92f09f26262b5e29637ada7d1818b3de799e41d4dd052adfb4cdd89992e8d24b208a27f68e275d2b215dfb4dc1c5c90ef64ee0ab7d52589d0a2c75e6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb42f8e5029e924e7d935b65d329b99c619ed2851847f9f95e76ebd19c6b8448036f7205f064a536655663faab66bf2e716758d251376e4a55710082b6d7272244791bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}, "failure": {"scriptSig": "", "witness": ["4d0902091f234eccbbe679615d46a2a9889ab42a8c486ef6b0fb5066bd6792308d0242e247f4facf7248fe098628de1eb6c66b62104cf36216eea85acb3c0ed207f367515b19b6610ecddd1fc17e5cc21c9e753c2a422d1ca6545868270e7afd0c535936329513cbf0431ae42283f388d0c6cb8d4b03604318f066f7bc4e2c0329da075c6170363047da9328c1d87a095e33fd5e4d8607a607f943714bd888223391dc149735064cc3cd57292cbe9c01043c9c58d32427535deee94c01c6e8e0ac46b15ab4a641a86f88e2e6437e0ade6292037c0ac12e165bb208e592f0054b960c411e2e19c63f04bab79b5aba7fbd768f0ef2a6e9684a6b578aec52ffec2b104ad58403fe3cf9accf0be89c6879748d5c04adc986673ba8bdb3038cf00f0b5becc2870178991082c669049fd50fa5e9cabd137d6880e93bb6845e7a7f243d4baa6825a83e573fd8aa53f951fc6c536c415678d97201cf70d958ed41b0a5f1c2006f927365907cf31e64556a2f73c8f9c86a6a7101f8e231e5adffd657be1538497c37c04e4b2da53d877f3c70697e1a11177f3975bc5bb731d241c3ce1d60c66224716039b14d74eb4d79179c90777fbadc711d1fd4334005d9a979ca5957424407b950a2b8d00dc735387cbfd8ee1ca657615f2240c47caf35b292f76e4c9d5446905e07338196f5235c5c3eab5bf448adc14f3a9237d7b207bfb761408a1427a36f85cee5bd2eff0e7d7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936920eba80c2f9213151a31ef0a132999efa50e46ccfec391e06fd49d7fb9341681ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045bd4c1b076909910aa73b6afb36aebfd26014933f900bad794466c6fcd625cde53ff737734404bbc9015f34371be38b9f5376f1a60720e7cf7da81354011ad4f7"]}}, diff --git a/txscript/data/taproot-ref/45b86557bbe4fb210901de818886b7536f396562 b/txscript/data/taproot-ref/45b86557bbe4fb210901de818886b7536f396562 new file mode 100644 index 0000000000..ede9019c39 --- /dev/null +++ b/txscript/data/taproot-ref/45b86557bbe4fb210901de818886b7536f396562 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbf000000007c50ca91bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf94000000002da740f8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0101000000229667af01daee3f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963a040000", "prevouts": ["27a64c000000000017a9146db815d9819f256ca5d1e70b15558a98689cc52e87", "24147c000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "aff2740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1660142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["cc47afc87fe7e8d7b05810557d398c7c6f0e422d590854faf4d3aea996538b47150c40e9edfa5851e1f642438811c8380333a2d98b1d78fa264d476dd3011794"]}}, diff --git a/txscript/data/taproot-ref/45babb1803fdc9834a37bce496e989425e2fe9b9 b/txscript/data/taproot-ref/45babb1803fdc9834a37bce496e989425e2fe9b9 new file mode 100644 index 0000000000..de0447226d --- /dev/null +++ b/txscript/data/taproot-ref/45babb1803fdc9834a37bce496e989425e2fe9b9 @@ -0,0 +1 @@ +{"tx": "9264652d0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703400000000317b18b403a20d10000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd5000000", "prevouts": ["dc5a1200000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "fa7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692144fa78a37f9d4158f2341b3f64ea9d93b698f8b61fb7d7e21bdfd4d5c0b363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ef1076b289256cd19daa60d704e81db3a39e457bb71d9d0e29c4cb2075820e5e1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c5b5d638e62e1ee83083719c01950228b7d23e6528a32df7f751a90376aaaf3e9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ef1076b289256cd19daa60d704e81db3a39e457bb71d9d0e29c4cb2075820e5e1"]}}, diff --git a/txscript/data/taproot-ref/45c14cf9149717468bed37e1e419020555c5f927 b/txscript/data/taproot-ref/45c14cf9149717468bed37e1e419020555c5f927 new file mode 100644 index 0000000000..f9d5f8b399 --- /dev/null +++ b/txscript/data/taproot-ref/45c14cf9149717468bed37e1e419020555c5f927 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270db010000002e0520a960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bc00000000add0448a04b7351e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac07010000", "prevouts": ["c18f0e00000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "51ca1100000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["fa", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bbf1d1d3d3f3a5ef5765b8348d5c92141ed2621e0ac73cf7baa1850fff99acc06081f43f8c34257025162ccf1daca48ae61c99356c3eb24d5601d3c52dd9de2a6f5053dc49cb92d20c30fe5ab09c589302aa9886b9c794d18405aff33121a169"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a1d35e36d71f4211ee8dcb476ced8f16f1af9e215de664588adfe8e8df5b115526ad4257a22b62302a767a5b8896008d1af7055b6fcc30f1a04cbcad06de5cf2f8b8afd7beb88d43ca6c6d2d58dc9425172bd95ccf582b2eeeba83616a9d27d33bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}}, diff --git a/txscript/data/taproot-ref/45c97ab53324162e66ed1d4c64371055d966b691 b/txscript/data/taproot-ref/45c97ab53324162e66ed1d4c64371055d966b691 new file mode 100644 index 0000000000..0b32c6da20 --- /dev/null +++ b/txscript/data/taproot-ref/45c97ab53324162e66ed1d4c64371055d966b691 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba101000000a9a32afc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ce00000000d3ee6bbadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf600000000f28de0af0335865a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb813d458", "prevouts": ["5519240000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "15bb0f000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "0239280000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "d47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8b970f6251c63bb7d52d2f522a2f2041b3457429d11106abd9da97a7fab7a15d238c2fd1368e2cc97a2933efae2d13561032948a77b2cd5d87b5e0b8010cd9f32"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dcde3d867c97d7a18e651bca5f63606f08ff12019e315b301fde84bc4d24cd8ff9197423ce94fe6d3a105485c3c73b77ffad3b95ed69b8a8a6b271b9e98a9e69ea84370bdaf8fbfa2c728119f306db95ff534e2e627fabf0c000f69380d4e93e"]}}, diff --git a/txscript/data/taproot-ref/461af17d337077781b7e49d203e17cf7cdd7781b b/txscript/data/taproot-ref/461af17d337077781b7e49d203e17cf7cdd7781b new file mode 100644 index 0000000000..3b973c0ee9 --- /dev/null +++ b/txscript/data/taproot-ref/461af17d337077781b7e49d203e17cf7cdd7781b @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb700000000d737d52860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d300000000aa1153480339fd2f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796741c1828", "prevouts": ["d3ed200000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "6e931100000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363e76fda838f76382ae0d0bdb253de0cdef8bb5a3eb9bc3b2e59c371abae55d530d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3f2a2968b4ea0558d79f1ec3cd2b8a530982c6b5ad0be17180e93d11bc09903133cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361cc0b7b7d6ad7930d95e3200c68d1443ca9c709d86c4485118a6574c598e644fc145688b3898d8a1374847539a36067c996b07f78d82debe95e7e288000a7bb1b9cd72275efe6b477d9cf0b54cc21959221ed58300fa90def59e56d53bf5ae178c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}}, diff --git a/txscript/data/taproot-ref/464a9d31b63ef5f4fe0f193acff3f7a8251adb7f b/txscript/data/taproot-ref/464a9d31b63ef5f4fe0f193acff3f7a8251adb7f new file mode 100644 index 0000000000..29647b92c9 --- /dev/null +++ b/txscript/data/taproot-ref/464a9d31b63ef5f4fe0f193acff3f7a8251adb7f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa00100000085aa13c060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e70100000090538ffa0198587a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964401975a", "prevouts": ["395b84000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "69b7100000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["ce", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900455067193501824fc7e1f7f904c1e32fba78339d7701e72316b16feebc15a414abab692e734634bfaf43d653c1e6f6d8e8d14797d8e4fda7a04cf5eec270202b46d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367d1fd0be73b6182e4cd51ed7a2b120ef2cd5ccabb8492e6bf7f26137f064f14b8def8465bc2f3cbc3837b9c231547f51d7c9e247c478e05a849822285048dd5e0ea67bdb3398814286540937ec364df004af879f987225ad05d036a51e8223e6d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}}, diff --git a/txscript/data/taproot-ref/4656d9b9e1003224e094622d9723247d8e53ca72 b/txscript/data/taproot-ref/4656d9b9e1003224e094622d9723247d8e53ca72 new file mode 100644 index 0000000000..07c24b4fa8 --- /dev/null +++ b/txscript/data/taproot-ref/4656d9b9e1003224e094622d9723247d8e53ca72 @@ -0,0 +1 @@ +{"tx": "1f1a48c703dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9b00000000fdf160f9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c03010000009968b6f760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270150000000060f62d8a013c37600000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc85000000", "prevouts": ["5a1a200000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "f39b5b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b0fe12000000000017a914b0b53ba433a336ced94ed75e23248458a1c69fab87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2252202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["fba8faafcf8b7630fd262a54ff27f6dd7ae88c99224d5ec07684f74d9e49fe888c0efe36ef2e1d2bb45d110e5dc454e7826a5f40f50f158e6b10389b75e0f6de", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/467ac05fa481edab9bf207738a0fdf308bb097c5 b/txscript/data/taproot-ref/467ac05fa481edab9bf207738a0fdf308bb097c5 new file mode 100644 index 0000000000..98cf273400 --- /dev/null +++ b/txscript/data/taproot-ref/467ac05fa481edab9bf207738a0fdf308bb097c5 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45f00000000788b972abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf02020000008b773e1560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702b00000000fdffac0001b6184e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8721010000", "prevouts": ["39113f0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "8f097000000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e", "d0ef0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_4a", "final": true, "success": {"scriptSig": "", "witness": ["afca39b475d08f31f02c6438e4e3ef89f87a5d88b9653c638a2dd902b3ddad93515dd0ef8705f3130f913d7cfcccae267ca87bd72b40796166c52b630fc70bd402"]}, "failure": {"scriptSig": "", "witness": ["a00c7c0b622457becddef0664e7b133699f813a54c5a66c7778b4e3f0e704406820e9a11a2feb0a7449e51fdcd2844b9526915df881fcab0a0396128617bbf374a"]}}, diff --git a/txscript/data/taproot-ref/469213f3d0a4e2171977ef67184aa5af2a7d259a b/txscript/data/taproot-ref/469213f3d0a4e2171977ef67184aa5af2a7d259a new file mode 100644 index 0000000000..dd6f0e1fd0 --- /dev/null +++ b/txscript/data/taproot-ref/469213f3d0a4e2171977ef67184aa5af2a7d259a @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0d02000000419a5faf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45e010000005e59f2d60130516600000000001600149d38710eb90e420b159c7a9263994c88e6810bc72b000000", "prevouts": ["73ad7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "046131000000000022512094bfa417ff7fec0e1f7b84edca83ca6ff73ff5ab901944aa69a26f9bdb9b300a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_43", "final": true, "success": {"scriptSig": "", "witness": ["d4634c590066bea2959548add44f4ae748221bf303a7f07f4745efb4e1955ee42f2e834c20834610c24d9cdf32adc32a97088f33fd3f4edd9148eec585314ade"]}, "failure": {"scriptSig": "", "witness": ["88728b962159bffed4371671c2d066c044a618f74c657c6b8c85726f35e276f432f9b08211f4ba207b8133b661c5b702ae66c53347109789524bc954f8592ae343"]}}, diff --git a/txscript/data/taproot-ref/46a14a2d2ab594d5d1917b16120cf28258bcd02b b/txscript/data/taproot-ref/46a14a2d2ab594d5d1917b16120cf28258bcd02b new file mode 100644 index 0000000000..4febc8f985 --- /dev/null +++ b/txscript/data/taproot-ref/46a14a2d2ab594d5d1917b16120cf28258bcd02b @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf59010000001611e3da8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4100200000040147ee90150805700000000001976a914c629d61df58baceae110d15eb5b55e144268615388acc4030000", "prevouts": ["854e6f0000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "53a039000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638568", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360696f5b4f1dd7045c4bac67803efea85e4be4911fdec759a69cd2bdfd360ad05717b4e30a5884e3e55754911c167a338fe4fe766d1d9ad9fb23fde5d0da8b2aeb2a240b376911c9876b3695f79f395ec3f2d97b1695e5c0e7f397f1ed982e79a1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366fd39b63ba8e52e90fd8a07b9cb05832c173e8838fd172658667cf8878374d8c952384bfcd198c969b60204543b8b578741ae3068409132e955e5c7af181f3d3734b3a7050eee065844830ad8d45a710891f78004f5e7f35b8fd72bf3ee94449"]}}, diff --git a/txscript/data/taproot-ref/46b30a46669909d38ddfd379180d9b9e4b032d30 b/txscript/data/taproot-ref/46b30a46669909d38ddfd379180d9b9e4b032d30 new file mode 100644 index 0000000000..9636a99fb3 --- /dev/null +++ b/txscript/data/taproot-ref/46b30a46669909d38ddfd379180d9b9e4b032d30 @@ -0,0 +1 @@ +{"tx": "b516eae002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3801000000c3f7c6c8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8800000000587ace9a0352bb73000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4872f7d0b24", "prevouts": ["9917220000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "91ee530000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e7", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368f5cdfcf40d08d1ee6c8b33ae5ec5247fdb56b1282308d0d349b07692bd5bf381ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045809bd2604b63a9913b428e9bd239a7888c90ad67a336710c360335112147f5da391a14412c925771c32fa4c7776d5872be2a56fee9c5a8de868e7e6e5a4c84da"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4dbfe159b7f074423d2fa61e8a9b5231056855b78cb68876c387837662b8c070f92a4f502e305109d81040f98432632ff806e9beae33e8faa7e022234476532106df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}}, diff --git a/txscript/data/taproot-ref/46bf3a742f868512007f33d6092b25ad9851abc5 b/txscript/data/taproot-ref/46bf3a742f868512007f33d6092b25ad9851abc5 new file mode 100644 index 0000000000..d38e69d741 --- /dev/null +++ b/txscript/data/taproot-ref/46bf3a742f868512007f33d6092b25ad9851abc5 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9c0100000086f844cdbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf57010000000f4c07bd014c2ab2000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48780020000", "prevouts": ["ab6b560000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc", "09216e0000000000225120460dfd59ffac97f33cb704e62d40a80655c52408ecad6b881ea54a9bb408923f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090247300d269ff90ed5a8fc056a9f4039ace7956bd2266496c395b3f3bf081860e552a40053b948e6efbdbba3519c987fd8b22f029a3c6ed021aecfc84090657657308dfc28c4e589a5690b2a59259903a1d31f3df33c5a0b0c4f01fd370a439453e105749b95ff347b880234267c6b3f0e5e51e77e73a3b6a4750307b0258ab93cc3e20bf6a4a8e2517dd738b729836a4597f6467f665562c9d287f1d34c013038cac1c435d768fd42150a3a691acf2429439f47c3f3ae261a0340895635c2984af00cbff42e287276f7dee31d6da2db71ee5b8f8a921f2d63f749a41d1d99cbcc03e5ecf1b38f095daaf28d144ae432343e55692abd16b01457c5f3eb27fe7bef3817b71d6d3aaa575d5183fe3d85b886966b183bb59162e55060dc25b85ba8ab98b3b36fb62c960ce82cab0d6e66e4dc5a2051249fd7aa153a0945c2574a772cfd85bfa78ca18b594948c391d4b1d72ea544875fc54fddc81a66cff18f5992aa23493d78edb4d229bf84ef70e3f262f5eaa66e6b48045931bdb0136115ab78ebb65f9add46efa738eef38c0178a52f386cfd733dcb92b606be4d38b051d77136651f4740024bde98733a46153c83ef1bce9c42c9c0389a4ece0109e5aba1eebbccf4ee8eaaaa0ceeb05f08012b322ce8536dbc3261806d7b4b5ce8ac40ee87df3184ee1f4e9fb6b37a38ecf1627d9cb494d9077d4448b8c23f2dcd4f7a031b73eaaa6b14ae2c0790cd75", "d67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c254a8ac6899858608f160ab69db89bb24ee8208e13d5ff22518d57ffad270f18a47f828b5683f18d8d2a0301cf32ab60b8042f73dfba3f43f347d91ef120fb4bd0211bc754da142cb3564162304068e34e33074851a6380a45a2a3191e3f102"]}, "failure": {"scriptSig": "", "witness": ["4d09021df5defed6b9f3a531496d7ef3200d910bd8f37c98089593d53cc00aaf846087b410b368f872fec06c4fd320cadef3f0c360361fb8818058d67b2732ee6c0e9fc00620a25bcd84be486f363566796320a62b31cbbecef30406a07c134f320b997a64d98b2b24d418a3d6a6042bc7e916f3d7a7dfdb84c867f7b30e5f35337ff6f8f33453eb4aec5605b47157fe0dfc4ce3873ba6319249c04fc558f04a57dca2c0bd2948b68f2c76dcccc261adc60c77815d7f3852b5a642deb5b650ea487c8cec1a8184e1773a6e5a6be17fbfdae06f442263328bccbe1aa37f4620c4533c1c9d2548c639c2209ddc2da85d985063b304e83d97a1f38319dd37d2906ee4c46d159ee253e59f45e69a6ec34d739e141c939036ab8f2f049342f5a34e69a2a3afc0e2b767dd70bb119499639f356e64ce4a9bf10a0765b35ef1165d3f364e50df6d75a87ab3987708f1c3133957bcd0bb552427c0b1f1d352bb7f728f30ae5fbdf41bdf7ea0646087a1f576ed884ced0e3863582203ad85f357d8f227c39b13d607c43037d77e8f1b21356238f8e515470b78821c9550c5f453483e1ad75d799da93e6e9865fec07314f67cb51787c5b86de39718271ea8dd5b44a18703dafe8c8d1d36039351c90bcf7adbb1b1c804f334d708eb35f889da72fdc94b3938c414c9011870ca102d6c8c8bf4fa7a3c2a05f38f19168a124086d7fada507279699a48d38aa8a60b147bd175", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faeebb44c2a26e7d04d06be9441726cfca165ed247b802be55a42fd4c1a57db75ef0c0cd32dca2782b49e872f77a6f41a631e1b6bec2669bf2370bfbcbf3d4a769630d95c26588949f1b3ae4e4e429080b434b995fa18047406852c727cd9e6feb"]}}, diff --git a/txscript/data/taproot-ref/46faed608cd8553355e705736f5883a865bdd1c0 b/txscript/data/taproot-ref/46faed608cd8553355e705736f5883a865bdd1c0 new file mode 100644 index 0000000000..cfa591e1e1 --- /dev/null +++ b/txscript/data/taproot-ref/46faed608cd8553355e705736f5883a865bdd1c0 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46d010000007fc9e944dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd50100000032d28935bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9401000000353048d30172b24c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ee4b014d", "prevouts": ["17883d0000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "4e40240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c40a6f000000000022512026ecbdce513e5cfeb779eb6a118aa90fae67510c7ee9bff64af6ca27f9068c2e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["994c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367643e13e483d98b5cb4a2dd9b2a8baf365ffe94859ab503c911dc21978e6d7804c8fbf2363a77354fc9c61d01c3ea3e8806c47304e5a0571bc5a832b63c4c4c93c50effc4608d2c714b1f589c510b82e2cb4bd2fb333954004903b4f08f38a79"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b39e544a8e3d2b207cd38626a9bebd6ccb5f06d994574d73902ada6a510f1a46d85ffea93b39ff48f026a1de615f9bd5d9d5cb27805fa051e581b49afd71e8d341e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}}, diff --git a/txscript/data/taproot-ref/476140a4869c363ff59de15ca0b3dddb33ee16ea b/txscript/data/taproot-ref/476140a4869c363ff59de15ca0b3dddb33ee16ea new file mode 100644 index 0000000000..43553778eb --- /dev/null +++ b/txscript/data/taproot-ref/476140a4869c363ff59de15ca0b3dddb33ee16ea @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cce00000000e19e8a348bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ef0100000011e89353dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c02000000b3dc5d44043c69d900000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac92010000", "prevouts": ["d9e6520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8f6b320000000000225120d70bb5030b4517d64d2a3c38713515b320a06334d0ff9db76c903984d8e384a2", "bcc555000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "success": {"scriptSig": "", "witness": ["7d160ece680f4a8418caf812fb42769b5e408a02105b9a68896ca83a3171b8a53cf93c9ad110707d9e14d443259d5d290d65209d9000c9004312c9d2450a212f01", "0932f4f5d101937a49b2930a1d013cdc91254422cbfcf6f75303c2819f807770914d758b7a9656f312141aa9194210761099ab021ccc7330a2cc83259482407f1684db0a0b3a460b0f3633fcb20f3250353255562bd39c9ac2ddec7ed3ccf2bc2b80f07306", "7523fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661c8486f195c1a3ef65b05b37e21a103ce642eeb740a8caa78a5c1ae370e33e4badc187240961080422bf8276f0a29eb125316a15ec8974d553de5fce36f3bec253415b71957175c16169c49198cd3f0a862455b885e0e35e372fdad520e05c077c3f65b74130262b35e7ddcb26a78aed79f034d7bd147773940bee02cf44653904a03ada378a2a6776c9b245e4a0092001043bfbe5bfd30e518ea25f18ac33ff7f4e9e15e76c636b150da06993b5f6de96a2e1fc090f2c7907997e1d5fa996a51f24777e7b300f38d6ac44a3faf36c476f4e61fd05c7a39a19b078a2b755ce8afa3e5e87451f40747520aa94b1c95a6038cd1e021072105441c983913767b9a3bb2766bcac675bef0bca1c7bda289c172bc7a7a61650a894ef287625c85677a18f2a30f20b7667ceea24effea42161391d26cf59961eaec6d3852f2dd899663ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb475c2965818d83b7e67d20b694a799e76d91799e7c9d242e585855f03d1b3f3a317c237fbae01a7712c5ce36aae4d53315cb1f6d58a4d4a7268d3ee086533d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffead926b6aaa264f5eef0c2799d712a273681ef3c5162836847eab383546f5ad83da61e004ebac3f4f176fc2fc0c028c8cba9c118abc2ca84e97e1628f00a76f88a9fe018c5a0f50159624ac39dd70cb9487a42ea86e1ab8f7384ea643dd37714827b4b176729dbc4c206dacf4816a37404955c1bd1de44b38c66210020711ff4624343830e54cfb3610465196c2c7499f5c337c03ec74f3acea427504fd7e8a8b0ee0c43bd6793d1598918c2dac05c9908803c7b523bcfd439579d1dafa142fd5f51dacee2a17a5dc8efba06eff0416613cb73850b2889c267f9ef13f780748642ec6bae520583dade36096f88449a4e0166653db943e03b0cab3a9847762884ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860e33487a6aa09e54aa4f342cc7a411a8ef7f6afa6f34d822f4dd0f7e6978c7fa71a1d448e576f7bc8eb2a93f77db90f74289c7b16bb694e2f60c2ae7af96efa4e741f628ff10a1d626052c5b96dd204f2eeee4144e384fcb0f1909b6f642fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9dc24862adb5cce7096a62db5f314c590b5340a9a69760d3ba528c6f4861b35301a20d17517777d4ce8a96339de05cdff73e4c7918682ead0cdd9afedbe6df38ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28c226ed3ff213133af90d017729877c6ca93ea3d2f4c4ef04cc926a7d2c9dce6b90123d0c13965cbc94a8640b832dc9ecf220d399fcdf833ee978188a0e35e1922ea0efc49e9c9ea2964f58b8825b7edcafeaaa29a53efc52db0e01650091a9e8587a191ca71cf2c3286ee45fb294be949e05e0ace18dd6f0b004f85420edd1eb26af0a5fdc50853c20222041699340e30804b62ed136f631ab79b2ca6e2399c93b9c6ae7b93ec96914f7845b510e34d6deca37679658371c2ed877f0bbff67ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146423451ed710d7875e782a5aab0af9c9ea2f5be99c037f7f68c80f19bd6a4d9b48ed8147bf711ea1497e58e2b87e37ccd0c69af656d39595032a9358ea9167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb410f2dc5ef8ff73a6320dfac7906626a65cafedcd6208c29103b800d8169ec0efa0ee3964ad3fb78afcd63d08e12dd4923aa3b8b702f7d4d59f7f16172d2ab0000000000000000000000000000000000000000000000000000000000000000fbef2d3df302890842449802b25db8f790749e3fa39301a71efca2eaa0ffe0d20bc08cdace3b2cb38cae679a43fef7183c04d1da78593e91545bd1516babf780e4a1283f5fbe1e73fe0c924d0e63b8250355f37bdbdc68bb59d43746a54e18a3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff593d259514a1eea6eb45841da20e8538cda29e9c068cf2bbf9f6928942e8acd1e03e21750eb40ccf85663c686bf9c9f5a7b8c00c308b081883cc8b3e5a2fc573b30e90f2428c17ee7c54b30800f70536049cfcf3ff7a371d55cbd3255898b068787f39dfcfb5de7a52763752d75e73ec9f49d5be2c6c6b313e13f7c716a4a1f114e6c43d920687090561e291bcc0a781bbe20849c55303416cd89bfb48b24ebcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b1268a56dd0c7e5973326b41543a37308d8a4e6341fa595bc8ff6281316871878caa4516115d1b43b10e9f59762ef9f6c0c07dc30d0d01d50ccf4804af19ccd4fe104c9600bab531746e5efef35e26b6c138b46f2d68f01da70c1a65c0344d224b5e9006c7d5087bed656d559dbf12820bde2f21c6f6add8b4da618eaef8e090716b0ecd7aa43e45edf6bf8005307b8ee94c9d0ea4d0a4c67c652e5cf415cf40ae826539b2dbd0c39086794802b427f7e40aa1846b5973570f402c043dfa2b1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94eb16e8928ef2c98a9739e333343d1c8f559841efe8379299e82c553ccc6ec926f39dc306592ea8ae4de8ce433a4c25f4deeda2fcbd2c2b45b7c0a29f35ab7600000000000000000000000000000000000000000000000000000000000000007359ed95dcb850fc1d84b29b77a5df73488d568934f5d8a345296334750d6de3c2e5e21ba55fb31bb677804e259424c38866491a0dda2e316d998c1bd68a82c8cf37fd5412e92947c5bdf1989938f20fe49730eed2b693c9aa6a330546bda40400000000000000000000000000000000000000000000000000000000000000000f5bab539dd4dd5a555188568ac4b1cbdde0e4123d7d118d3c31408a3a7ad3b6e7cfaddae4283aa121d19689597dd5ed0256579d7ab8a9fe416aa1f15cdfa00e", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["7d160ece680f4a8418caf812fb42769b5e408a02105b9a68896ca83a3171b8a53cf93c9ad110707d9e14d443259d5d290d65209d9000c9004312c9d2450a212f01", "f92790b4ebd08bef1de8e1d9a8afdd70938b7507ec1beb7c02216dec03e01d1d912b194ffb1fbe579ccf9980c1f9ac8d570eebe418c98a5037d8b0884595507328c5bbdea1015b055b74a4618fcb3e0f1cca81132b9f120f67a23c51161b186a7630baa6", "7523fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661c8486f195c1a3ef65b05b37e21a103ce642eeb740a8caa78a5c1ae370e33e4badc187240961080422bf8276f0a29eb125316a15ec8974d553de5fce36f3bec253415b71957175c16169c49198cd3f0a862455b885e0e35e372fdad520e05c077c3f65b74130262b35e7ddcb26a78aed79f034d7bd147773940bee02cf44653904a03ada378a2a6776c9b245e4a0092001043bfbe5bfd30e518ea25f18ac33ff7f4e9e15e76c636b150da06993b5f6de96a2e1fc090f2c7907997e1d5fa996a51f24777e7b300f38d6ac44a3faf36c476f4e61fd05c7a39a19b078a2b755ce8afa3e5e87451f40747520aa94b1c95a6038cd1e021072105441c983913767b9a3bb2766bcac675bef0bca1c7bda289c172bc7a7a61650a894ef287625c85677a18f2a30f20b7667ceea24effea42161391d26cf59961eaec6d3852f2dd899663ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb475c2965818d83b7e67d20b694a799e76d91799e7c9d242e585855f03d1b3f3a317c237fbae01a7712c5ce36aae4d53315cb1f6d58a4d4a7268d3ee086533d8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffead926b6aaa264f5eef0c2799d712a273681ef3c5162836847eab383546f5ad83da61e004ebac3f4f176fc2fc0c028c8cba9c118abc2ca84e97e1628f00a76f88a9fe018c5a0f50159624ac39dd70cb9487a42ea86e1ab8f7384ea643dd37714827b4b176729dbc4c206dacf4816a37404955c1bd1de44b38c66210020711ff4624343830e54cfb3610465196c2c7499f5c337c03ec74f3acea427504fd7e8a8b0ee0c43bd6793d1598918c2dac05c9908803c7b523bcfd439579d1dafa142fd5f51dacee2a17a5dc8efba06eff0416613cb73850b2889c267f9ef13f780748642ec6bae520583dade36096f88449a4e0166653db943e03b0cab3a9847762884ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff860e33487a6aa09e54aa4f342cc7a411a8ef7f6afa6f34d822f4dd0f7e6978c7fa71a1d448e576f7bc8eb2a93f77db90f74289c7b16bb694e2f60c2ae7af96efa4e741f628ff10a1d626052c5b96dd204f2eeee4144e384fcb0f1909b6f642fdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9dc24862adb5cce7096a62db5f314c590b5340a9a69760d3ba528c6f4861b35301a20d17517777d4ce8a96339de05cdff73e4c7918682ead0cdd9afedbe6df38ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff28c226ed3ff213133af90d017729877c6ca93ea3d2f4c4ef04cc926a7d2c9dce6b90123d0c13965cbc94a8640b832dc9ecf220d399fcdf833ee978188a0e35e1922ea0efc49e9c9ea2964f58b8825b7edcafeaaa29a53efc52db0e01650091a9e8587a191ca71cf2c3286ee45fb294be949e05e0ace18dd6f0b004f85420edd1eb26af0a5fdc50853c20222041699340e30804b62ed136f631ab79b2ca6e2399c93b9c6ae7b93ec96914f7845b510e34d6deca37679658371c2ed877f0bbff67ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff146423451ed710d7875e782a5aab0af9c9ea2f5be99c037f7f68c80f19bd6a4d9b48ed8147bf711ea1497e58e2b87e37ccd0c69af656d39595032a9358ea9167ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcb410f2dc5ef8ff73a6320dfac7906626a65cafedcd6208c29103b800d8169ec0efa0ee3964ad3fb78afcd63d08e12dd4923aa3b8b702f7d4d59f7f16172d2ab0000000000000000000000000000000000000000000000000000000000000000fbef2d3df302890842449802b25db8f790749e3fa39301a71efca2eaa0ffe0d20bc08cdace3b2cb38cae679a43fef7183c04d1da78593e91545bd1516babf780e4a1283f5fbe1e73fe0c924d0e63b8250355f37bdbdc68bb59d43746a54e18a3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff593d259514a1eea6eb45841da20e8538cda29e9c068cf2bbf9f6928942e8acd1e03e21750eb40ccf85663c686bf9c9f5a7b8c00c308b081883cc8b3e5a2fc573b30e90f2428c17ee7c54b30800f70536049cfcf3ff7a371d55cbd3255898b068787f39dfcfb5de7a52763752d75e73ec9f49d5be2c6c6b313e13f7c716a4a1f114e6c43d920687090561e291bcc0a781bbe20849c55303416cd89bfb48b24ebcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b1268a56dd0c7e5973326b41543a37308d8a4e6341fa595bc8ff6281316871878caa4516115d1b43b10e9f59762ef9f6c0c07dc30d0d01d50ccf4804af19ccd4fe104c9600bab531746e5efef35e26b6c138b46f2d68f01da70c1a65c0344d224b5e9006c7d5087bed656d559dbf12820bde2f21c6f6add8b4da618eaef8e090716b0ecd7aa43e45edf6bf8005307b8ee94c9d0ea4d0a4c67c652e5cf415cf40ae826539b2dbd0c39086794802b427f7e40aa1846b5973570f402c043dfa2b1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94eb16e8928ef2c98a9739e333343d1c8f559841efe8379299e82c553ccc6ec926f39dc306592ea8ae4de8ce433a4c25f4deeda2fcbd2c2b45b7c0a29f35ab7600000000000000000000000000000000000000000000000000000000000000007359ed95dcb850fc1d84b29b77a5df73488d568934f5d8a345296334750d6de3c2e5e21ba55fb31bb677804e259424c38866491a0dda2e316d998c1bd68a82c8cf37fd5412e92947c5bdf1989938f20fe49730eed2b693c9aa6a330546bda40400000000000000000000000000000000000000000000000000000000000000000f5bab539dd4dd5a555188568ac4b1cbdde0e4123d7d118d3c31408a3a7ad3b6e7cfaddae4283aa121d19689597dd5ed0256579d7ab8a9fe416aa1f15cdfa00e", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/47678ed5dae9d91220f82b512192c03161458d96 b/txscript/data/taproot-ref/47678ed5dae9d91220f82b512192c03161458d96 new file mode 100644 index 0000000000..6b53460080 --- /dev/null +++ b/txscript/data/taproot-ref/47678ed5dae9d91220f82b512192c03161458d96 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0302000000e24818d4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9000000000f9f348ce017c48060000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961c030000", "prevouts": ["dec2220000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9", "964c5600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b21cd3eccb1078808f504a0ae9d7c98d8587addb87e97e44101fed206146f041397c930f8b1a350a59ca429b0fd379960979d81cfde5ec584df3b9ebc58890893eea997a0110941a5969b29cda4ab73ccfa6f2fd6e912ed2c1a2d2967497c6fa4915d9725d4d8db5018b5c71ac226416665c86e6e588f7af4bc1f346c66c53c2f2e96c2af1abecd7ec70592c666b70af2736296507164e3a59e0554b9ed47a8b14c678ca98cb4ff6e74801a9057f9ef2aa64047316f13310422c564811bc57ca090c9e7f51fa6e58cf7c2ab965cf4deb74ef5b8f205e30158c7918625b9e004e0a6d7afe29e77c8a5b7d39dc48c521b3c2e0e56a90a7290f68a7a8e9cd2259f6af255e941ddf060cb57c34d3f8692d1eb2d40822c90b741229cb84deb42ac72d6164d94a5a5bc6b42dde89904edbd913771c68e817d4bd13ce172171d532edb3927a967249675621a2ba38d32d4c71218fe8f7eeaa4a486963b0f6be94b9df3082a5bff5da77ea999c39f1886fbe83b65c3c294bd84d923931966794f0ed4c8eb2275e760f51748790687e4eddd8f48fdb5bf4b387de57a7f0ae2bdc5ffd7161bdc8337bb78f423569f0fb3898d21833e02384be4ac11a8f8ff0457ab59b60b870d015fbfe17bf01c6d26bd54a822ddb3265199a0e19ecfe8c163206e432e92c1b6b16b633663741e6c9c7e93c7ec5e072d717e28fdf36b6c22688a4692cc3086ce41309523f20962775f2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936855634eaecdc9d9ac50e15cf1cceda1e94c28cba9dcd92e65bcab0ee1c3b94463493aeab6959567855d46871d1975f827c269435f7c9757b13dbaeb906d5d20b01b5a419c18d23e8c03ade77009761f1ea37c255231895048329572c11717ad56187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}, "failure": {"scriptSig": "", "witness": ["4d0902ec2584955cfcc968f1671bc170893f3f1d670ae5f3bace663ba6a17899595941ff280165f60d561d360401efc472f2dd97f8b59e3b00925e42a1abec8e328ae896f35511e1dc83b8186dba62a5df93c4c5793fcb840e7eb24f0baa740fb35e170fb4c400ee08ac5023a913d1b21796d5dd74de8da6ba15f022a7400394750208cd8c7b49645be052dc0ea47498fb67d3ad7ac2b813992b7760a9a93a6863f807aaf4686f7ca4bde93d6f05940f17586d42cc57a7b1d40702115b04335b56e2aca100b328fd6c49b3db208564066ea7143a53bb9a9eee9780ba43ade0b77cc90cedb39c7a9152fa082ea04e62812bec435ea21455b5a02994b3c281bd79529203a4984ec581ac07c954af11c32a28638ffdfdbc4d21e47af66c0ed217dc1089dd667d864339d10e8b4bb0998c928aafcd6d05549a54cd2699fa2f3b254f4f3f502d2f6a25988e244b0df660f8c726d582d28db295aeceb753da2bacdb958651029b46541aaa6e3cf630ea2371e737a7ed998b2457e8bd85dfaedfe0e675e846a47cf7006b66fb69d528c238838faa2e33eb6d712447da34883ba0d7c3f2ad6f87f86b0b181bc5026a6af6191d084e31a457bb14df8c523a614b36cbdfcb2ce044c2760b12638c3059c857db01d0d374c8d6ab6b2be6ea793e93e0fa3b64f718a8c79065a8e65f3856efe264c04c3af5ec294f09e96cf02d52dea1df8d613eae2f6fd023376961b36d707561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d513f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821de3578bd50e4aef3f42172206e28aaa53f32c3941b8b4ddcf806814652917426187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}}, diff --git a/txscript/data/taproot-ref/476e1eb3a45bcd3c87728f4a5f152341fc41c6d6 b/txscript/data/taproot-ref/476e1eb3a45bcd3c87728f4a5f152341fc41c6d6 new file mode 100644 index 0000000000..853e3d3b93 --- /dev/null +++ b/txscript/data/taproot-ref/476e1eb3a45bcd3c87728f4a5f152341fc41c6d6 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9c0000000073b9617bdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caa00000000e018eef0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf8000000009055c6ed02596ab6000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8cf5391e", "prevouts": ["56552100000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "682a4e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d136490000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "557d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e283c6292a6ae3f7cd2fa90a42d11f5a54bea63a95cab37375097c35ac3f3911dda77d1c2cfbe9569ee5db2c51580a9857624040db9177af617be0771cc5b8a1b"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8cf2f607c60f6c156b7df40b9550df6641a796550f01570d3040f84cea15217bcf33eaf0e0e2046a2b327db0183a88d397c5be0a86c812e98815a20f9da9843a2a4c5d50721208c85113b157b4dd4688510f63bd33d4c90ece0d9e0afcb8224b1"]}}, diff --git a/txscript/data/taproot-ref/4775847b1966e3acdf5bf21407d223d54512c0aa b/txscript/data/taproot-ref/4775847b1966e3acdf5bf21407d223d54512c0aa new file mode 100644 index 0000000000..4d2c63df87 --- /dev/null +++ b/txscript/data/taproot-ref/4775847b1966e3acdf5bf21407d223d54512c0aa @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4600000000ece899acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6b00000000d1ceccb003347ea4000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e754000000", "prevouts": ["de454a00000000001655142540f27e90740933c99d4f17ab2dfc6c82951cfb", "7c0a5c0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "5e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71edaba019801d089772adec5c5b59e5bcfed03a63e4fac904ae7f3c905b717bc6fd7bec169038f6fbc2f311373c62d75738dee89ed934d1dccaea4579b1c053aa90a9249c0485c0b349be2068ea39eda6d50f7b6c474a6d5eb714296c91a9f24b9"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe3a991642405641833a7e7ab1d7538152ae68165bb1749fa1b8edad905e55795d6d6d3f2cd85347736e7cd11e639ac781ae37e103c2c2842f248c73b61e825b0a9249c0485c0b349be2068ea39eda6d50f7b6c474a6d5eb714296c91a9f24b9"]}}, diff --git a/txscript/data/taproot-ref/477812c3aa633968c3f508ea4a64f6240b7c1282 b/txscript/data/taproot-ref/477812c3aa633968c3f508ea4a64f6240b7c1282 new file mode 100644 index 0000000000..29034688fd --- /dev/null +++ b/txscript/data/taproot-ref/477812c3aa633968c3f508ea4a64f6240b7c1282 @@ -0,0 +1 @@ +{"tx": "716b8db702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc4000000001e7a2ac28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40b02000000e32d47c101a5858400000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac93010000", "prevouts": ["3afa6c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e140320000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ca7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8f1383fd7477c38c90a6990274ce9dd13fa2e04ff8b9e6fd75bbda71e156ecd1d8a21256d264232ee00f93dc1ddd051bb1479704967786b363cfaf3cd40418b0ce21dc20c2e8df5336572f81421322a354c6d32fb525b1159d1e49b1e9404bf5"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93662cf871ef72e744ac21df2ae1dca341db6636f118cea74203d61b4d210926c308f1383fd7477c38c90a6990274ce9dd13fa2e04ff8b9e6fd75bbda71e156ecd1d8a21256d264232ee00f93dc1ddd051bb1479704967786b363cfaf3cd40418b0ce21dc20c2e8df5336572f81421322a354c6d32fb525b1159d1e49b1e9404bf5"]}}, diff --git a/txscript/data/taproot-ref/4786bab5e3fdd53811fa094d64658a869323943d b/txscript/data/taproot-ref/4786bab5e3fdd53811fa094d64658a869323943d new file mode 100644 index 0000000000..cb78875080 --- /dev/null +++ b/txscript/data/taproot-ref/4786bab5e3fdd53811fa094d64658a869323943d @@ -0,0 +1 @@ +{"tx": "c78d28c0028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b900000000714907ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709c00000000d69c6cbb04d88644000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689876b010000", "prevouts": ["d6823600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "c2831000000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_csv", "final": true, "success": {"scriptSig": "", "witness": ["77f5d13a5f86ca1707350746753a8d93371add02ed5bf24e662743beeccff85eb72191882226016ef4e4657bffb5f8029792835bf3f531e5956c876c2cab7c92", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313ddd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["77f5d13a5f86ca1707350746753a8d93371add02ed5bf24e662743beeccff85eb72191882226016ef4e4657bffb5f8029792835bf3f531e5956c876c2cab7c9200", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313ddd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/47975b43d53b5ddfe8aebbb719cb70af90f9ca56 b/txscript/data/taproot-ref/47975b43d53b5ddfe8aebbb719cb70af90f9ca56 new file mode 100644 index 0000000000..4e8395b7bc --- /dev/null +++ b/txscript/data/taproot-ref/47975b43d53b5ddfe8aebbb719cb70af90f9ca56 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40300000000adc681c160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b301000000dee1962b01d87c34000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478764020000", "prevouts": ["f8753600000000001656142540f27e90740933c99d4f17ab2dfc6c82951cfb", "65390f00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["7978dde698ec2ffcbe18d31e2b3e1930a62fb25b10c61fab7b5bcb7c9958caaf1005dae1442a6f45bfa98dbdd682397b3b8b78c167932e94f80d4e7c40292eaa"]}}, diff --git a/txscript/data/taproot-ref/479ddb4cda1c95a66132ba2891f8deed16e1e31a b/txscript/data/taproot-ref/479ddb4cda1c95a66132ba2891f8deed16e1e31a new file mode 100644 index 0000000000..2c614098d7 --- /dev/null +++ b/txscript/data/taproot-ref/479ddb4cda1c95a66132ba2891f8deed16e1e31a @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4de0100000044be49a801b7d116000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8701a0b651", "prevouts": ["e7be3100000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "387d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d03a0e2dd976c032df5ba11c8ac0ec783bfd7377fb7304a38f58a019219dc2e3f7118923d14a9704f5c6065ead9bf1df659362e443facca38f7fc54a29b18e2b8fa601fcc68a78472d280e0a6f10ace0c22dad9ad93c154f995d1132d7b2f793"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8f5321bd3c280560a6e93f009006b65547a58d72ede42c89f2f760c3bf47a1d1aa12168afdb4ef286e7748ddb08cf408d85b089f504486378d2bfb535c0d2875b"]}}, diff --git a/txscript/data/taproot-ref/47c96a95d6bd928e3390068b3c94db28d219e9c7 b/txscript/data/taproot-ref/47c96a95d6bd928e3390068b3c94db28d219e9c7 new file mode 100644 index 0000000000..9802830672 --- /dev/null +++ b/txscript/data/taproot-ref/47c96a95d6bd928e3390068b3c94db28d219e9c7 @@ -0,0 +1 @@ +{"tx": "6ce4a80902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0600000000fb9a44d08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4aa00000000cd2115bb0257a88400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc0a7ea020", "prevouts": ["59204b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7ea13b000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "fc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cb6beef37ee5dce9a0d87dd9110e965067099d7e22847272a5a9481e46004ae8aceb16be1ebf4fc69deaf064fc7bf5d7ff2149818b5ba4c28c799d30ad567cc959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8f9b91a8bd77dea62c47e49d062c2fcfe01875e2df978edbcee5db59c7daa26cb6beef37ee5dce9a0d87dd9110e965067099d7e22847272a5a9481e46004ae8aceb16be1ebf4fc69deaf064fc7bf5d7ff2149818b5ba4c28c799d30ad567cc959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}}, diff --git a/txscript/data/taproot-ref/47d2125494edd0e8f737339160fc2c2bbff13239 b/txscript/data/taproot-ref/47d2125494edd0e8f737339160fc2c2bbff13239 new file mode 100644 index 0000000000..34b3c91a89 --- /dev/null +++ b/txscript/data/taproot-ref/47d2125494edd0e8f737339160fc2c2bbff13239 @@ -0,0 +1 @@ +{"tx": "d181cd7103bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1f02000000538bccd660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704f0100000003fd78e5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf30010000001a08da8c020568e0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ace80c3a31", "prevouts": ["725f600000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "3713110000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "e23c710000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f5", "final": true, "success": {"scriptSig": "", "witness": ["29b2c78e49ab0e4c1da797ce959ff3729c64b8780327e6e38b44b6fafc92fa2e3343e9dd1bf22830387165b20494522eb04cf25cc768a27b069e4593777de80902"]}, "failure": {"scriptSig": "", "witness": ["b32297a833b7f3df8b1030409a31e3422bf382c6aafe4b596b6b507193f0d6a68b61f60e8ea53cdd4794ae56970ba9298884aa1fe55dc5c25ef7536b39dda4a0f5"]}}, diff --git a/txscript/data/taproot-ref/47d754aabbae7b0b019240479e872ec641a71606 b/txscript/data/taproot-ref/47d754aabbae7b0b019240479e872ec641a71606 new file mode 100644 index 0000000000..497b442656 --- /dev/null +++ b/txscript/data/taproot-ref/47d754aabbae7b0b019240479e872ec641a71606 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ac010000004cc6bcc202066b37000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478736000000", "prevouts": ["8be139000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "8f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936963dc86bc71687ecacc1e5b8f2c4145fceca424a4eb02fbe2bf7a8e8f9bd1024e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e81f261744aaaab7b61bfd8b873ce05c274059b1d1cb072d2d2c67e8900f407405dd5f972b05e2f18c3e7c797b604beeb8879a3af7f1e10968a0ac8aaf9d489fe7"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa458187dbd74455692a21727c8254a8cae6fcc3fc3c7e883861248db6e64d9919f8fae370a255a677f2f729010dbb329fa966ed9a0dd82e5083dd7ea90426dc47"]}}, diff --git a/txscript/data/taproot-ref/47f82c71674923da07b7c082409faecaa9d932d1 b/txscript/data/taproot-ref/47f82c71674923da07b7c082409faecaa9d932d1 new file mode 100644 index 0000000000..475b9e4d36 --- /dev/null +++ b/txscript/data/taproot-ref/47f82c71674923da07b7c082409faecaa9d932d1 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1f0100000024be6dac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708101000000ce3435b90165bf2400000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4f45d043", "prevouts": ["f8be21000000000017a9141582f8bc3490e924b143f387e99eced40303eaed87", "53cf10000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["db", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936158dbdd04fc8b1597704d885de388d9e8396e20d8d1d942e0680de9f689953519f09ad02cb012ed2091760f4e9ad26775ad10447e2b9e598a8be746abc4727fb4e3966518140ddfb4b2a9d93e012e33d80f6a3bf7f24f1b44efe84ec3ac236f0e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93674592b4fb9d11d06e04aedf373a859381c5b821797864f536763c5371283881ca04823906532712c3d4cb334ae6c7c41a1294a824a25b5277d43f47953a1da33e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}}, diff --git a/txscript/data/taproot-ref/4849670c7437aabe38ac365b533b2cae10e1c316 b/txscript/data/taproot-ref/4849670c7437aabe38ac365b533b2cae10e1c316 new file mode 100644 index 0000000000..9558fdbf7c --- /dev/null +++ b/txscript/data/taproot-ref/4849670c7437aabe38ac365b533b2cae10e1c316 @@ -0,0 +1 @@ +{"tx": "fb2bc47d028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43301000000be89569360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b101000000f904b380013e3908000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8790010000", "prevouts": ["4291310000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "39b01100000000002360212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "f37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8196b2ad6d6b5bc7837f2ee6018d0c442079551bc2d8b1220df512cb455d716d94fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6ed93ab99c02c1580916967b23bff6c51eda165404bd9578af086db7302f1c7275"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c7f90985649f4f780ddde68fefeeb82111abffafbe26556b8bb88918199344b8196b2ad6d6b5bc7837f2ee6018d0c442079551bc2d8b1220df512cb455d716d94fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6ed93ab99c02c1580916967b23bff6c51eda165404bd9578af086db7302f1c7275"]}}, diff --git a/txscript/data/taproot-ref/4877a47b68dcd97455dcb8cd52e27309ec642b93 b/txscript/data/taproot-ref/4877a47b68dcd97455dcb8cd52e27309ec642b93 new file mode 100644 index 0000000000..412ddb3f9d --- /dev/null +++ b/txscript/data/taproot-ref/4877a47b68dcd97455dcb8cd52e27309ec642b93 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c13010000000be331e3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6a00000000b0cea3c303fd75cf00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb3030000", "prevouts": ["6a5f51000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "eae27f000000000017a91448964eab407ad5d6e123f59d9280ca7998f71bce87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["fd4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365f3e79e727db2ce69498c039b8b655f97a15b215378db35ebb03872d036f84823effc93d9a59775ec6af4eadc6f66e855123af6e736654ec63572366f38b17272c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}, "failure": {"scriptSig": "", "witness": ["4c52fd", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a87f953251f51e981abdf2d54ebf7b5574cc2fb47742874145712c569ad8b62fd9f77cfc3030f4fa2d9551f14353e565e33cb9a72a19e79fd0e4930553ab0cc3a3aa70c847d82166fa4c32b27cb78dba1a5c77b2d4b8269442df723c9129fb762c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}}, diff --git a/txscript/data/taproot-ref/487deb88a57dc3cabdf497fe30220136e593d23d b/txscript/data/taproot-ref/487deb88a57dc3cabdf497fe30220136e593d23d new file mode 100644 index 0000000000..fa349fe0ee --- /dev/null +++ b/txscript/data/taproot-ref/487deb88a57dc3cabdf497fe30220136e593d23d @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c45000000002883818660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d100000000f7bd9f9f0118376100000000001600149d38710eb90e420b159c7a9263994c88e6810bc75b020000", "prevouts": ["6076550000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "c041120000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "477d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361659200379fe61c8b5eb790a44eee46ca3c7c7a86d8d14f6da8b993c764b3aaf47adf318628644459e7d8d4ba81b7833f70746497cdf0fced2937ab961dc2be46657009e9173c5ef8826379cea4b8c999e3ae37a5805e4cc6da117a3d2ee0eec"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d5c45d46d04b15e6ce2ec10bbcc0e8edf35633863cef84b3ede2af6eac197731af5253a3ae898682e613588786a672ae77746787ad628dd74364be19bb5242936657009e9173c5ef8826379cea4b8c999e3ae37a5805e4cc6da117a3d2ee0eec"]}}, diff --git a/txscript/data/taproot-ref/48a74bc4e405cef7fd774039eb79bdfaeafeea6b b/txscript/data/taproot-ref/48a74bc4e405cef7fd774039eb79bdfaeafeea6b new file mode 100644 index 0000000000..bd63f5364c --- /dev/null +++ b/txscript/data/taproot-ref/48a74bc4e405cef7fd774039eb79bdfaeafeea6b @@ -0,0 +1 @@ +{"tx": "2fa783c901dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf7010000002889a1aa03e5041f0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796bc000000", "prevouts": ["fe29210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e5", "final": true, "success": {"scriptSig": "", "witness": ["0df3e4ccb04abe113a16997829890435cf4080e0da36fe75ff9e8c9a2098101b3318f60a1e36abe4c4f9cafd095f3f3c083f506b7bad766eadcd21d9fdf63e2081"]}, "failure": {"scriptSig": "", "witness": ["0d9c9acbf56db53388b66c59513222528675d5d7d81475c655877fd04fe00675bc89543f2d1aeb04da715be1ee6c7d5de4b4ef67e3521322647de18fe29dbfb1e5"]}}, diff --git a/txscript/data/taproot-ref/48aba9a0a8d38583f02db4ffbfe46b11affd2459 b/txscript/data/taproot-ref/48aba9a0a8d38583f02db4ffbfe46b11affd2459 new file mode 100644 index 0000000000..c9ad3fa116 --- /dev/null +++ b/txscript/data/taproot-ref/48aba9a0a8d38583f02db4ffbfe46b11affd2459 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cde000000009f5d27808bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d201000000283e3bd98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42700000000da52b0940417c3c800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e52a3644", "prevouts": ["6fb15200000000001653142540f27e90740933c99d4f17ab2dfc6c82951cfb", "55f23f000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87", "a8d8370000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["09538187137f32ace2930d2911fe4e69cb81e2d6cf9d93ba927edd3d795fd0bc31fb8767ac49f0dc96b05675635124546f959376cf867517b6eb37681f27883c", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/48ba4204d31335006c77c0a0c393c5424c5c89fd b/txscript/data/taproot-ref/48ba4204d31335006c77c0a0c393c5424c5c89fd new file mode 100644 index 0000000000..c9c9d9066f --- /dev/null +++ b/txscript/data/taproot-ref/48ba4204d31335006c77c0a0c393c5424c5c89fd @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1a00000000fcf1cbccdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca4000000005c8d71ea02dd33db00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69c733a34", "prevouts": ["bd928000000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "adff5c000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "4730440220446c1176deb9a74e6522ef0c3260bef36aa5b8b9df80bb648482b35f4fe4ea2a02207f75fd0de7e84b77cab8c275e6d4a00f68e108ef84d2e194961c45e5f118a6f901004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "473044022004dcccbf9b8dbbf6870669aa306086fa649fec5b0f66a16d000084501e14ee6f022043eb9c6c2c26cfef35efd30a0e0da2e86a46c67114375e111fe17d0baac21e9d0101014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/48bb02ef59af281b015aba26344a918d3e949c98 b/txscript/data/taproot-ref/48bb02ef59af281b015aba26344a918d3e949c98 new file mode 100644 index 0000000000..e4b70c3a1b --- /dev/null +++ b/txscript/data/taproot-ref/48bb02ef59af281b015aba26344a918d3e949c98 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd401000000c607a19edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc70000000014b61f7a0255067f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc783000000", "prevouts": ["a10d260000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "1c935b00000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100d9cc1260c7352652a2effe8a3455a2a83f456ff83dca9efd3f638a0da6683fa0022009ccaa4281d1ed02854c7dda662a6a3cea157e67f3d452d5d30e4fceb000b7aa81", "witness": []}, "failure": {"scriptSig": "473044022073f273b579378c36efe55e9015e3b7a6154e8fc038472f618ca4214e178e8e6802205d004726202f168eb0fc2fea1d2f6dc130e459280d6067589fae6b2d0b4e262b81", "witness": []}}, diff --git a/txscript/data/taproot-ref/4907d4a7edab4d2d57ded00e95a654d47f9d823b b/txscript/data/taproot-ref/4907d4a7edab4d2d57ded00e95a654d47f9d823b new file mode 100644 index 0000000000..f258ac7b8e --- /dev/null +++ b/txscript/data/taproot-ref/4907d4a7edab4d2d57ded00e95a654d47f9d823b @@ -0,0 +1 @@ +{"tx": "c5f01f0f028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d50000000053b9fe8c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ea00000000961af2b201963241000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a653040000", "prevouts": ["1b69330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5a393e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_9d", "final": true, "success": {"scriptSig": "", "witness": ["02e5d1da73ca87ac166454b9542ee7450b2e2f0adc84a09e0b7b670942a86cffabf3a960bcdca481a8ec476265849fa865daefed46452eb7ee3605aa1c6c12df81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["769d0599c3383468ea37dac9ec9ab3ceb4d0b3594a956c65fc845ff1b0de01f5ed8c3d56f73f891524663cefbf18b67f2b6fd279c13072d787630c34541e25e79d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/491492c2f48c07bca9ef88c9fd36bbd272563b73 b/txscript/data/taproot-ref/491492c2f48c07bca9ef88c9fd36bbd272563b73 new file mode 100644 index 0000000000..3d24de41cb --- /dev/null +++ b/txscript/data/taproot-ref/491492c2f48c07bca9ef88c9fd36bbd272563b73 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2800000000ffe4807d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705201000000dbb069df02474e31000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7bdf76d22", "prevouts": ["1acc2000000000002351212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "f970120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_46", "final": true, "success": {"scriptSig": "", "witness": ["c8a6fe54273bf9a667aa0a75d690f199de72bc771fad53250c17629e9888a392d668f25c37a353140bbe462503f85899f1e6b9f38a472e10d13e052f75864e10", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["36d2fa472f06d1d67c5bf8516403f19c64bb670885d335265607ee55d098d2575ab678a0fae7eb1b5ea75de3340079099e92b633bef7b66392b6ba4fafdb9e6b46", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/494a7c765d815e6adc6d4e66a57225322bccde6b b/txscript/data/taproot-ref/494a7c765d815e6adc6d4e66a57225322bccde6b new file mode 100644 index 0000000000..b8281d9662 --- /dev/null +++ b/txscript/data/taproot-ref/494a7c765d815e6adc6d4e66a57225322bccde6b @@ -0,0 +1 @@ +{"tx": "3df0c2550260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704d010000006102a8938bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41302000000e3c820940116cc37000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478714020000", "prevouts": ["5eaf0e0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "39193c00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["ca4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb460e4b742334a3ba05c34377629280dcb4ee1c5981341754674382732961bb035dc18898993c284d2f731b7495cb62c60e8571430965d040562487638e1f1fd248a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}, "failure": {"scriptSig": "", "witness": ["4c52ca", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f6cae3bfd98fc5a984de3df319deccf414966302f09ea14347630e5855742cc8eba4e75ed92f6e82baf0cd6101dcd67879c020ab703e3dac001fd69a24240ecc7034c4ece6ceffdf067bd97d8bd2a80e986f14e8b5dca33ff1523eba7a77d63"]}}, diff --git a/txscript/data/taproot-ref/496ed2b73e932787fe91d418b240c466ab6a4075 b/txscript/data/taproot-ref/496ed2b73e932787fe91d418b240c466ab6a4075 new file mode 100644 index 0000000000..66c38cd5e8 --- /dev/null +++ b/txscript/data/taproot-ref/496ed2b73e932787fe91d418b240c466ab6a4075 @@ -0,0 +1 @@ +{"tx": "15915fbf0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709900000000fb88b9dc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47d000000000fa7e7b903fc313e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875b000000", "prevouts": ["55970f0000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "ca62310000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93621b43ffe028ee9d7bfea2cc09a76d3908c6fc6c62f09d6722d68ca530544f92fb79b88164a8f67b1298a482dda9483af1363bdf02371c7e121a2c285843f3f1e449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ee5a0294560109b8131d2c42cefe472f9b95bf0b422f14b3dda035051434b22e7387e8fdb6e1953b8492ce494f93b549856be52be3e0b2251aade3a72c8c2c0db79b88164a8f67b1298a482dda9483af1363bdf02371c7e121a2c285843f3f1e449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}}, diff --git a/txscript/data/taproot-ref/496f687a93323cea34ef1249059c862f9397c645 b/txscript/data/taproot-ref/496f687a93323cea34ef1249059c862f9397c645 new file mode 100644 index 0000000000..30fa462a0a --- /dev/null +++ b/txscript/data/taproot-ref/496f687a93323cea34ef1249059c862f9397c645 @@ -0,0 +1 @@ +{"tx": "c830ab1802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c16000000003360f5e8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c650100000012a15abe03ce9c99000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb5020000", "prevouts": ["be9747000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "7bc35300000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360f369a784a8897def013640f6b83ddd8e7b013fb685e4cb805a2938f63414ccb99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45d26c3c7079b274e62542512e39807ee92511541c708e3b51bc61366b8def992ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93649f82d663a1e447420f2cf05179af13964281439b8b427a6cb4b09af5b0cc1919d9c6e51540aa9a09fa82ae61189b3f4badb16bfd2877ff7bde730e5687247de05f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}}, diff --git a/txscript/data/taproot-ref/499184ec78a677697ab3ce5b0a87dfbb5ecce65e b/txscript/data/taproot-ref/499184ec78a677697ab3ce5b0a87dfbb5ecce65e new file mode 100644 index 0000000000..6c60efcdef --- /dev/null +++ b/txscript/data/taproot-ref/499184ec78a677697ab3ce5b0a87dfbb5ecce65e @@ -0,0 +1 @@ +{"tx": "ea9513f50360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e500000000325a22e960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127099010000008f727e8160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b0010000007ad921c20200f131000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e789000000", "prevouts": ["e680120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "519e10000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "67ba1000000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_bd", "final": true, "success": {"scriptSig": "", "witness": ["be991662c79405c44c84daf3d0637966754207abe3b78e1e951955a225853c8254ab8f912032fa2fc2eecef1cc456b3d627d082a97b8a31438045ae7e4c4fa6301"]}, "failure": {"scriptSig": "", "witness": ["3324cbbfdf7f4456c9a027d935076ad0f74d7b6d947a7fd7868e9e81f1eafa0f7e13a3a1b8d399354f048c99db1b699f360cf927d62226504785d303869b6e9dbd"]}}, diff --git a/txscript/data/taproot-ref/499f8c99044f5a7eb9940853f276e5ed7a9894f3 b/txscript/data/taproot-ref/499f8c99044f5a7eb9940853f276e5ed7a9894f3 new file mode 100644 index 0000000000..8a99b6a902 --- /dev/null +++ b/txscript/data/taproot-ref/499f8c99044f5a7eb9940853f276e5ed7a9894f3 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700100000000d4506fd8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0100000000c19213868bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4df01000000e0a85df0028455cb00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acece8b33d", "prevouts": ["2e421200000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "1de97d000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "8ed73d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_5e", "final": true, "success": {"scriptSig": "", "witness": ["d2e866302eeed47d01f0d71c41372587d156c5717f40b41c9d0ccce3a2a242efce91c199d20a8de8244a25d3351c04f395104d6e6ff5e8180e5e98c8f1b624a482", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["78c695559095f0aeff271e86a5569ca642207a7289216004d23149426003338b4ff248ea940076ffa758606d04ffb6f7268a8c94d2cbbfcf718594472b1d3ae55e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/4a015d179a6415548a65aa75d68b1927fe2b0738 b/txscript/data/taproot-ref/4a015d179a6415548a65aa75d68b1927fe2b0738 new file mode 100644 index 0000000000..17a31f804a --- /dev/null +++ b/txscript/data/taproot-ref/4a015d179a6415548a65aa75d68b1927fe2b0738 @@ -0,0 +1 @@ +{"tx": "a54aff3a03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf37010000008bb7459d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702700000000a6f955b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b590000000057ec95af02d213ac00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689873f816d5e", "prevouts": ["87ab7b0000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50", "d308130000000000225120efe1fa8c8643b06748235620ecfbc876727366244fc928e9c2000087b14324f1", "17ff1e00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93645c60550b35bd9d705a4e6aa4d32c67750084623e9a280cf31189ad299fac6e7"]}, "failure": {"scriptSig": "", "witness": ["6a17616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/4a46cdc5c3a288a4eead1245fd3b0bfea974ea21 b/txscript/data/taproot-ref/4a46cdc5c3a288a4eead1245fd3b0bfea974ea21 new file mode 100644 index 0000000000..b8d72a7c64 --- /dev/null +++ b/txscript/data/taproot-ref/4a46cdc5c3a288a4eead1245fd3b0bfea974ea21 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707800000000d472c2ff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47e00000000b22608f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbb000000007c5fb0ca0254669200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8e01af3b", "prevouts": ["ab600e0000000000225120a2c28b736583e5896e4a53bfde129100bff930ada42454ee2f7bef5a60a371d8", "deef37000000000017a914c7d65cb5025eac8b5bf295baac9287994ab34b9b87", "28374e00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360df6be8a46bd533a7a93e37944fe1fe70edab0d92eef636eb3f909ab0fae0ce898751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d56e427c91532996b84ed2c37f8a26be8637de11530a49bfc255181ba6103e3464915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93669ad745ec8c5686e271a78eda1c132d24041cdcc23e8fee83101a0367275b2af99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4572db529171a47fc33c2e4ee960be7fb9400c27bdb6fae7dcdae272f7c7daab09b045cee6f1e54629d213b8dbfcd9de8aba2dd7f34fe21c75d81b8576e463c6b"]}}, diff --git a/txscript/data/taproot-ref/4a729815cf7a0f3947cdf502e425da1b2392d6b8 b/txscript/data/taproot-ref/4a729815cf7a0f3947cdf502e425da1b2392d6b8 new file mode 100644 index 0000000000..4cf36facdc --- /dev/null +++ b/txscript/data/taproot-ref/4a729815cf7a0f3947cdf502e425da1b2392d6b8 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c98010000002f66bab2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9901000000f66711d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf84000000001a4b64da03373c3901000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac8e020000", "prevouts": ["d1295e000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "7c9879000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "e9a063000000000021541f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "3b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fafc7fa9328de6285e10958c6b3d6f5d3c073b4c582e31cb42904dcf82d4bed78a29f15cefa9911251712bcf83078e1db490f7db40c14a26e0e577f39f7cfaf11f"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93695b1ebd19a72b38f1278a5ef71d649a792e7e469dc9bf05369ce582ee090883f9a1daf2fbdc5eba8a219f1f8635fe45cf0e30925345452464a53096773d109ba7ef84fce916674b46359d0327d7b56c183d26d6053da1b16053a1f90da8a1d4e"]}}, diff --git a/txscript/data/taproot-ref/4a7e2f54a225b7edfc7761d52940b39a3702b9d8 b/txscript/data/taproot-ref/4a7e2f54a225b7edfc7761d52940b39a3702b9d8 new file mode 100644 index 0000000000..4fadaf8d51 --- /dev/null +++ b/txscript/data/taproot-ref/4a7e2f54a225b7edfc7761d52940b39a3702b9d8 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7501000000e6d878d9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3f01000000a46d7fa2018ab5160000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7e2c51b57", "prevouts": ["edec250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "902024000000000022512068a70acb8902a9bd7a8a0bf24e1b522fed50855c0b1040069930cd3d961acf32"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_5d", "final": true, "success": {"scriptSig": "", "witness": ["70374e2003fcb3638b453dafe36f1386d0a1b71f9bab5e82cd7cfc7925c159be17ce35bccf4191fedbcd84c08eed2681804fb8a09d742d11de2ff214f7860ba102"]}, "failure": {"scriptSig": "", "witness": ["e1192e7df04cc54143c59d2e435000fd068852d9f7b6b45c9577117068119ea02e0e1d8e2566b8e0a0e52db261f0cb485d08fc222b1ac08d8b067a91f4a9e5f65d"]}}, diff --git a/txscript/data/taproot-ref/4a8d82dfb1750aa99deb48b58f8c91a30cc703b0 b/txscript/data/taproot-ref/4a8d82dfb1750aa99deb48b58f8c91a30cc703b0 new file mode 100644 index 0000000000..e4193f2e91 --- /dev/null +++ b/txscript/data/taproot-ref/4a8d82dfb1750aa99deb48b58f8c91a30cc703b0 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700001000000f3c0e6a660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707d0100000038f3cdae03080d1e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc63000000", "prevouts": ["aeae0e00000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "dbf0110000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f368", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363c3687187a66b80fafb5b0277cf05dfcb566c0733f5897c37ccf352960211e89b9cd72275efe6b477d9cf0b54cc21959221ed58300fa90def59e56d53bf5ae178c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51a6e9c603f7f99515daebfc2839154302ca67407333b540c062b355b85f19a07ff2a2968b4ea0558d79f1ec3cd2b8a530982c6b5ad0be17180e93d11bc09903133cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}}, diff --git a/txscript/data/taproot-ref/4ab1d0f5d83d7343f225dc40c2a3a9940dbe3f7c b/txscript/data/taproot-ref/4ab1d0f5d83d7343f225dc40c2a3a9940dbe3f7c new file mode 100644 index 0000000000..78c166592f --- /dev/null +++ b/txscript/data/taproot-ref/4ab1d0f5d83d7343f225dc40c2a3a9940dbe3f7c @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c413000000006d7c0687bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0c02000000532d33930418b6b700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc996e2420", "prevouts": ["69f4340000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76", "b9e8840000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["da4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d5de9338381cd304b2738c8b1f6fa31d15bcfc9fae7d40af04401c68f4d5de3473df9812949ea11fa7cd8f7a31f5257bc4998fae53c5743d03c7cfeceae664b355d713f01682c54eefc137cacda341f8a928ca67657dd1895f9a847e54f584f6ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}, "failure": {"scriptSig": "", "witness": ["4c52da", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004544455204ada9566561196f14caee307d16123ffe4b49d60aeadbae3e053e0a80355d713f01682c54eefc137cacda341f8a928ca67657dd1895f9a847e54f584f6ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}}, diff --git a/txscript/data/taproot-ref/4ab5fb6756c937560dc91ad579231800bcb605f0 b/txscript/data/taproot-ref/4ab5fb6756c937560dc91ad579231800bcb605f0 new file mode 100644 index 0000000000..f87110beae --- /dev/null +++ b/txscript/data/taproot-ref/4ab5fb6756c937560dc91ad579231800bcb605f0 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4600000000ece899acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6b00000000d1ceccb003347ea4000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e754000000", "prevouts": ["de454a00000000001655142540f27e90740933c99d4f17ab2dfc6c82951cfb", "7c0a5c0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["5a0974d832729731c41798c33c7a1c0300be4dff93f440d652a3257fbb5da0e4e77fd5c4c8be4c487baeaf32f951980eb2ab4372177d3bd01d49de2560a2e8b7"]}}, diff --git a/txscript/data/taproot-ref/4ab75e6d0cbfec5617026ca0e5622cb4be8d69ea b/txscript/data/taproot-ref/4ab75e6d0cbfec5617026ca0e5622cb4be8d69ea new file mode 100644 index 0000000000..f1832e1f94 --- /dev/null +++ b/txscript/data/taproot-ref/4ab75e6d0cbfec5617026ca0e5622cb4be8d69ea @@ -0,0 +1 @@ +{"tx": "d2c4031102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe40100000010467ce9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9901000000770146d6038921dd000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac0b000000", "prevouts": ["11f6810000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842", "b9f75c00000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090263ae34b455e59724eb6ef57cb0e0123d910934fea3aa0270c9aa1b955a5eb73c6c8a169af2b4646004f9e69faf0e3f03f3151659b6d62a8435c55dab98c6ab3fd86fd69a2c9c4a5fb16dabce31351840564b2becc9f94c7c594240c37f787a1dae71bc58f1349ce3f460f2d1f507caffbca0bc680eb90552b2d0bb87d8f7117759f8c427c6a3a29b7e241b5f53f84a08036e15db3b5ed6c5da0990475968169b6e02036bdff3a4f8300b7d9b259f39a19b554fb2e009ea4cfd28b2fc02b563676510c3e6be086962d3940fea09719b9b655196c6bb5ebe208a8b02c2ffb8c596d7f5755b5ff4f417a32a2348323eb2032d1e08c954808ce80acaff7ae0f7829a13ec60a31a1ddfab6ab817ae6f8ed42f8b2d0262152aceb218b16f795c1473de264a50c12c48c36e7c49527616e71d5cbf6cdd88c881523a403425f1a44a1aa97e7b4fc58b0135cb52452803453c243d89934e02b8dfe9ea01387a7c6d0dd0fbd96c5c2dfc358f911cc5336b4de088ac0325f6f4fcf2d4fa9f9fd40318a642f3d154b2754ff200ce1943395e8dedb1b21af62e0e69f647691ae305bc2a2be53bd175361a8451596ca5b3b73e07b06cf6d3a59cf935afbba4134e4af8a75dcfad9a97fe611d303612a0f76439285b7903ea30dd16f1c53e98513c0aad1ed98e167726e37dbc4a173386642dc265a3ee677051f6028e9fce64ae14a1e5c5f03894080ee7352d72ec477475", "b87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bc4cb601b2ff3e4c8eb7bf71eef003c1241e07142df84ef0b259f821b2a43f68ab6940ee0f3b13da6463e2f516d6c168d9c5d733b385f1180629b82031abf4ccad8c3985a8e2539d42260561cfa7167d8724d0e4cbcfaa47665e96933724a3d86960f5e71abb11fb1594f725adbdd26a9f61c928558a58ca58d11d05eb565d16"]}, "failure": {"scriptSig": "", "witness": ["4d090299d45006867b98eec01e1bfa2ead1933035d70a408fbebc560c94fdbed6390098932fc1a21be0ee96c3dd621378d91ae870f2de932098d60568ed8cc613e2cbe3d9925a67ab7686157f2138fc18a286211c949e6024ef952d533a19af2b09b823679c96550c845a56e52d75c6556994db6589e9bfa0b259aae06437f510049489e528ddbd35e36fd1cdabca57af51e350c3a5d9c71bf30ae28ca04f0004bf4170b613428a653a26551337bfba63f98e387b59b513b407f4fb6ecc3a86f97f16439ed22a2fe8eac7a8262325ca83bc07efb982c7308508c13d96fba61a65fd0d1c56a69bc21faff7c695d03b03b77f0e1ab6fc4ee0cd892735f0ceabd4d99a7b78ea803b0a3595c912598b738456bd953d3c546ebef357b50b933d1f58af1f46330419637e710d6c3ebbb64bf3eb9abfeefc1b81b85466d4c1139e845d84bf0dfbc933fecc7a933038bd6b9307ab44993d5696b7f7d07e0504cc63535f6fa13905cc67a1cba58a4ef23b0bf13fc0bf1e9095c2c1c16b7ee013fffecdbf3537702a566b575cd164d76786b72e7c31200b105c12ef52e90a04e58e36d681282de2b43f3b7db892c7e3941a890a33520283f27c5f2aed23babac38c5bace95ff98f3636204016a3e36e0efad68a4fc00a94833bf6d693d71d34855b1c135e16f9548c7f9e33d6cbcac9bff8cf88643d01815cc6402bf1d5443aa9ecb6f32be71b3290c3c35b786342199f875", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365e2e8335e76e899befc23e40fb6f9c6307bfd84edbd8f2adc0fb5ac8d6288970ad8c3985a8e2539d42260561cfa7167d8724d0e4cbcfaa47665e96933724a3d86960f5e71abb11fb1594f725adbdd26a9f61c928558a58ca58d11d05eb565d16"]}}, diff --git a/txscript/data/taproot-ref/4aef881f37b09a5f41876628452dac08c70a5c3e b/txscript/data/taproot-ref/4aef881f37b09a5f41876628452dac08c70a5c3e new file mode 100644 index 0000000000..c923fe2198 --- /dev/null +++ b/txscript/data/taproot-ref/4aef881f37b09a5f41876628452dac08c70a5c3e @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1402000000ff7187b9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8600000000e2bd2fabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b54000000005614c499012d9a5900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388aca876a75f", "prevouts": ["cc547700000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "b4db27000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "aafc28000000000022512008ff927e8178e20f38298d934a97845982dc7c5901b7d815cf7926413ad6b4c2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "557d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2a116e3d98c0753c1b4fce835beb402fe845fa277dc01c5b4ae7ac2a0861d05e2d0ae3a8a51f8512ed3183c6b189898e3d13807be8720838a97bd7135cdf46e7da77d1c2cfbe9569ee5db2c51580a9857624040db9177af617be0771cc5b8a1b"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cf2f607c60f6c156b7df40b9550df6641a796550f01570d3040f84cea15217bcf33eaf0e0e2046a2b327db0183a88d397c5be0a86c812e98815a20f9da9843a2a4c5d50721208c85113b157b4dd4688510f63bd33d4c90ece0d9e0afcb8224b1"]}}, diff --git a/txscript/data/taproot-ref/4af1e59e48ecbb8bcf5f8c2a739ffe2d47054b4a b/txscript/data/taproot-ref/4af1e59e48ecbb8bcf5f8c2a739ffe2d47054b4a new file mode 100644 index 0000000000..4f74d2b5ff --- /dev/null +++ b/txscript/data/taproot-ref/4af1e59e48ecbb8bcf5f8c2a739ffe2d47054b4a @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5d000000006fb370c1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa501000000e51bbcae03ddc2c000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc7ee3e34d", "prevouts": ["52205d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6c5565000000000017a914ca8d66b8079fd8386ff3ae1d10b869f5605e693b87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a9", "final": true, "success": {"scriptSig": "", "witness": ["f2c034aae270d3ab92348aec07cc220b325344dd915672c5c288a0d3fd433fbecfac0da44c094be3e305e1c1ea78680b37dde07a3c9b401d91d05f8e63ad03d203", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["cb41401717f090464cf6d9fab9b14c5004c8dace3497baaf46531a844a764a3cfdc5cf3d2e7f2a77e7bb300ac4a24ec23b38fc06598f259be7ec15ece228a8c5a9", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/4b22e5ee8f595d1440ed41006d8e611da06d0c13 b/txscript/data/taproot-ref/4b22e5ee8f595d1440ed41006d8e611da06d0c13 new file mode 100644 index 0000000000..e53d188397 --- /dev/null +++ b/txscript/data/taproot-ref/4b22e5ee8f595d1440ed41006d8e611da06d0c13 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708100000000b5ce03e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6f0000000017b9b5cd04deb385000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87ead3593a", "prevouts": ["0888110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1a5f760000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a81", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364125f1cbae1c36a714ee021fd4164bcdcce073dab8e1136386d2993f5734f22399aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb419c228cb7ae814d70beabdb725e2cb3ba4f8af3a16648b1300fc97d27ac433c5da9670c383f4b71f5a22d48df0589bd68dfe195935a65f1aeaa80f10f8ca6973"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d650279aec7c7c5fe6d77189aeacda2bfbbc50f6f488fcb7bb6e3e093d2538718137b75632fc8469b6d274d74e13d397486217d72038875bba282e5d91314c39823c6bcc0c06b1ccedd8f3302fb965778bf11fdbd4830d29cbc62f32a77240ccdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}}, diff --git a/txscript/data/taproot-ref/4b537d79f1a6255185126b99325e3917dfdc7885 b/txscript/data/taproot-ref/4b537d79f1a6255185126b99325e3917dfdc7885 new file mode 100644 index 0000000000..22dd3277fd --- /dev/null +++ b/txscript/data/taproot-ref/4b537d79f1a6255185126b99325e3917dfdc7885 @@ -0,0 +1 @@ +{"tx": "0996bdbc02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4201000000c4343cea8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46c010000005a7cd0e60191ac45000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48701283e59", "prevouts": ["1283730000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f", "21743a000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "947d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa7085091e7b587d9e3d903161356c0634077d7e43e5aac1c0c25d5c3c805eac670235be472b05f11e998cd7dc8896eb16b23bac01933cdabddca8bd45937e3454"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936417d2d865202d20eebfd4aacf46381b0ece3fddc39ce14b62446cc40f8d1090e3ee723c85209fe64e13625f9e221aa1a5a0132ad156eaddb44490f9df3bced660235be472b05f11e998cd7dc8896eb16b23bac01933cdabddca8bd45937e3454"]}}, diff --git a/txscript/data/taproot-ref/4b57985dbb3b797fd0788cfb9513abc07ddad003 b/txscript/data/taproot-ref/4b57985dbb3b797fd0788cfb9513abc07ddad003 new file mode 100644 index 0000000000..096d5f5f0e --- /dev/null +++ b/txscript/data/taproot-ref/4b57985dbb3b797fd0788cfb9513abc07ddad003 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4a0100000084436a61bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc500000000b28535d6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd2010000007e9916a503f4c94f01000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e77c000000", "prevouts": ["f56e7400000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "259f7f0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "acbf5e0000000000215c1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["426430db3dc77ef08364b380c829f036f13d04383c75a0522b3440f4853d948e3eede99181d53675ad93374bc8c69a4162a18d7ebf7f1080a8b3d21b8a55195a", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/4b72ce01f999a32aedc950dd1804a8795ff98723 b/txscript/data/taproot-ref/4b72ce01f999a32aedc950dd1804a8795ff98723 new file mode 100644 index 0000000000..39982e1a6c --- /dev/null +++ b/txscript/data/taproot-ref/4b72ce01f999a32aedc950dd1804a8795ff98723 @@ -0,0 +1 @@ +{"tx": "47c0016f0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700301000000248adfaddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca601000000923ad6d7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb500000000bc64099104f8507b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72f050000", "prevouts": ["71151300000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "c3c7480000000000235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "db32210000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902718b1505bf73d8addb5f3c865c6ff14615556e200844aa8308c1fb610a0c09142a1ab31a38b5db43c100771565e3933f6bc6c3b7ee47f119f8dfdc0bf349552c3df18ee788d4eb0366bb8254555092289bcb8383cff15dcbc97d4e655719d5d8952e5ea5d42a45b5ae81820df54447b50423b6e1f71de4c7de9318720d6d85cb8cb4503a13ad35b58dd441107fff3eb51aea69a6699ce7c8793e8a16912e28bdc9a45cebef1a767c12163278116c0a956fdd4794da6a0915390afb0c91360614a389ab80b877d87a70c92fc526e0a6b191a3d0c83e74d4846e8102f06ebfa69f3fbd49be938a387433d000e3fc1385c06bd14ad69b6d29f60d2e8c190972e0fd39858fc7b097ed0efcdab96d17f8aef43660c9630e596f781826060c8f5342fbd810e176b5513fb77f63ffd1e2b050a19f81043394bb613299cbdc59e8f8cd86da92bb529fadb64e0bc9807c58ca4cde44f8d709d3b7b751060dd59c9ba279c224e9082123109741413277a4f7d1ce9aa184c51e35b3966352616ab9bfd3e9b064a81949a1391c2703b86069bb8171280269146e3eff413ab96c9c2d9b74bff2f5f9facf5e325286511c7eda3aa28f1652598597160c203edc65a110d1d23608603ff6307e3aa5724a6122a28cee8de245cb6aaf1fe476cdf64538950301b638886d511ec3e69da6898e5b615c0e30108fd83b4705441f68c5ad2ee33b50166ec7b6f0d987f6014f8f75fa", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e15d4b392b2e4c368022144328e009ed21ebc6df76a38c37cd5c7ada1ffb4033c71a4e7a29e9a68a1d6e5ccf500c3bde1b862f2704e441e939992f2bf5a528056a3bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}, "failure": {"scriptSig": "", "witness": ["4d09024a1d8b6f52c9bf374a22198b10c849f2de4d02124a70757da8118207f01855e57d43b5c69ea657cbf97743e20d0c7e15a72d102f193347c99ce69cd2e3b2b62d7f9524084ef1474ccc699b24a570f67ed33e6238f845c1a79bba1d55cf052dbdb18c6f776cb53faff034a7437dadbbb3d439344767afb2ca48aadb91892c791c7fdbf2a6d4012136d89179c6ff414a6a25e70568f904a527a2baafe467da4baae935ea62b03a492362877bf05f31a444c10ec34b665e3fa6591c4d7ce2b5df836da341bb9aa43fc680439dcef77420745e1eaca54bbd7d27784e28eee7880c77ab194ee4cd940901043daaf9df337a114efc4bd9989c0ee1979b5a8da4e84f0d9b7d457ca971693bad96ffc69ae3928920fd49d93f2686f5a46ae61d8cedc35e57f38f15d35657a8ab2c0af8f4da24faeaa47ade426fac41208de9cea4404ab8001e9cdd54ad7dceae4dd26efea0ecaf8242fcc549d514c99372feffa7805a49afd9447bb2f8ab0658f15f43bac176dae56a7e083fbbe2c77e2d26a3f8dc77a58ed0f70e3d965fa14824856e219e2aff02d967f999d7447e57780bbc4fd4e96032d903bebd5a807a3500a043ff6edead27d70a316dbb6d5f6f439f3e45935f39e56ac5391fab364d9109dbd88c6a0e466dbf08a5a1f416eb5ac7b7050ca7398ab259ec417cd8a2eff19076c0b8a54166e51852738ce5b9ce31df6e9a045eab0178ca9005bde051257b7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368e1d4621f5a2467af09fb339d917c3eaebf29ad88777f17d5401e6cf398d8d98319d91594da7fa35d5ac76c3396b108bc28aa6233c389d8680e4f0461963fe656f5053dc49cb92d20c30fe5ab09c589302aa9886b9c794d18405aff33121a169"]}}, diff --git a/txscript/data/taproot-ref/4b7e7a47d519d00fb5bb9332b6fb49586a4134f8 b/txscript/data/taproot-ref/4b7e7a47d519d00fb5bb9332b6fb49586a4134f8 new file mode 100644 index 0000000000..462f1a05c5 --- /dev/null +++ b/txscript/data/taproot-ref/4b7e7a47d519d00fb5bb9332b6fb49586a4134f8 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c452000000003b7dd6d08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41501000000cf2ca79e04c0e7650000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e702dfca59", "prevouts": ["4fb5330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9b2335000000000017a914a7d99db8790799e567017bcc9951f7f968dba70f87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2356212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["690731b1a0b6814b8fc7d32847d22e69a3fe5726ee1041af6d03555929f7f434924ac9287832f7b0151492da04fc8589593afba56b6c174e03cfc7bb8bb9d9a9"]}}, diff --git a/txscript/data/taproot-ref/4b8ea927af2611b4cf7fbab90c9f8ffb8bea3ab2 b/txscript/data/taproot-ref/4b8ea927af2611b4cf7fbab90c9f8ffb8bea3ab2 new file mode 100644 index 0000000000..3956ee7c2a --- /dev/null +++ b/txscript/data/taproot-ref/4b8ea927af2611b4cf7fbab90c9f8ffb8bea3ab2 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfff0100000064056d8d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700201000000167321d8034e0186000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb31b4546", "prevouts": ["9f5278000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "368c0f00000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/emptypk/checksigadd", "final": true, "success": {"scriptSig": "", "witness": ["9ea638a16318d7aead6b38111127507d170b8970edc6285e6b801a42574414a6873ddd68e7e040865548fef0018fda27e5d67a008c68fad6228db4087899f32b", "5420871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a034685013eb12d0936a5af43ae0e5638d7148ca8da311dd51cf2e290b05ed820ba5102bbf7fbeec60e292aba2a12d06acbee3d1ff3068be768a5f8ab1c15c8b5f95428243b01e6b613d868e39a3cd6f8053f3b8a58a5b42db19ed132d0fdc37ab205f68d8ec55f68ec14e7908e46173699cdebd091fbaa00eafb7815b9069cba262853dbe467a837dbe26fc7f3ad7cd7a62e462e47b7e1bb60054913e91ba6c655d89a1acb7a851de7428c381ead1ba6d1d417e8b953e51f7c670e3863576c3b88611529e8d8ac178c50676d0c91193955b6fb062740847f08c84da5efc29fd5abdcdd61aefa92e26b138e07522d025d19d1fad7762f9c1f70685829a115613fda528b23fc9436db397402f0e7a3d49cf7a01c31cfb831fc26b2262ab8efbabef6fb95525f08c0ad7b451d163f6e35eb4e415957ac629ef0511fe91c7e5e389d906758caa877012f69cc4f32b8c78b5f62c54ebb03c94d75afc9f0e4835f9336f422423aeb19ed8c37b62b0dd1dc6be563591d9481677ce9900692950fc288a25dd19e02d4685ba017b89767b5c8376f6b66370e3202d9e807c9c5b06b99c098acfa6a9da80a755a207eb5a3ad02b1a2cff248af93ddec122a727b43b9e8dbb8b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["cc9b62c485dc8c1de4ab827a7aa0545e4fbca86323408d5d7aaf066258f4c086044ae1d26566d10568834c6a36cb6134e0c545be7b3cd0970608b0b6326c8f2c", "5400ba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368cc4d632c25fb1473ebc2c4691dff712f1529879b16cf6e01c3498b371ad5643f043ba3d030a3b9cb1de0a60e5c22d352c9a6b0167bb0429c65653ad93c6b5ad75df7d692cfa002fbaff39a633e2a3d0c51d8dadcd4fcf0c857fbd83ad169fef2faba22bfc7a47f9e635144f510dd0bf27279d7f381c4c7abb10bfa7caa6f45212b1384dfb83dad558f50952f8dc7a4c93fc05bc0bf8f252596f3f99dcc4aa25ab6fe4c1776346de255528baa11f4624c0da11cd67d3944bc9e3c23527f253a174940966dd57e339c9cd051354c05cad3fffcfa87d89865f388df6a9793fb850795b387e411ef7ecd738a90c270a9e8b41d104f0901d65be980e017742035d2ed5a15550423aeac2e288a32ca51234efdd8592bd1b66a7f846be8561b7af73c90baa320cf1711a17ed2a311e1783897c17c40a4468373563049ba8a82c1cbe704bb8d89f21761581480cc9fb789613a87d31235185f9da4b4384725e898ebf0d2c5eddaeb8557ce0f7cc7880e698091ab104cabb34aeeeb5d0f57ea86d1ebc555dfde575d48d1eaafa8343c63d6f5425984d2425aca274be02e47a5142e089ba2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/4ba2921581f7a3560b6ec87297653fb165ccf969 b/txscript/data/taproot-ref/4ba2921581f7a3560b6ec87297653fb165ccf969 new file mode 100644 index 0000000000..b10866a716 --- /dev/null +++ b/txscript/data/taproot-ref/4ba2921581f7a3560b6ec87297653fb165ccf969 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf55000000004245bcb4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b17000000009c83f3e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3a01000000932991810400c0e700000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac6fe3af24", "prevouts": ["3f1c6e00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67", "ceaf1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "75615d00000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["cf4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936576dcfbd45e3fc8427f121d4200b68bae14bb12011fb1b2bbae78ffacf19fef2e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0decf70b79dd1be85a38988f8929e7263abb01bba95965800009381ed351eddb0fa653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670be4a0ca57acda4948961859806a1e82ea139c65a64667406163012635ee571197eab9a6b3049015e2aeaa64734336ddd9b9acdec5b1d6588bac0b5808dea8f5f88ccdecf77b0d26ba8d6f3209049de9d03155be73752c3625590c2269e1c4cf4a62e14d7fc4acbfb0196ec29a60565ac2b3043dda4cedec8cb1ff291b90d41"]}}, diff --git a/txscript/data/taproot-ref/4ba8a95b0f39aae1daf6e664542420657da72fa0 b/txscript/data/taproot-ref/4ba8a95b0f39aae1daf6e664542420657da72fa0 new file mode 100644 index 0000000000..4cc0bf36c1 --- /dev/null +++ b/txscript/data/taproot-ref/4ba8a95b0f39aae1daf6e664542420657da72fa0 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1b0000000022e6d7a8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc401000000b2de69fa047e0aa800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acb1040000", "prevouts": ["39ea810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2995280000000000225120fd40216dd29fb2eecdff7e4128bba3cfbee632fa2e745a84c0cfcf3475ca43df"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362fa354647588dfee660039a90ed403daafd6a7b1cbb30bd112b49394f93378d2"]}, "failure": {"scriptSig": "", "witness": ["6a1d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/4be8d76134fd3aa72fd3ecc702e88a4530fcab53 b/txscript/data/taproot-ref/4be8d76134fd3aa72fd3ecc702e88a4530fcab53 new file mode 100644 index 0000000000..385a6f3ba8 --- /dev/null +++ b/txscript/data/taproot-ref/4be8d76134fd3aa72fd3ecc702e88a4530fcab53 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff901000000939dafac8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47c01000000d2c3b2ffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2801000000052131c304cb62b800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c6010000", "prevouts": ["1f9b64000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7", "1e9b35000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "49a720000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1c75ad5b0c19c64f5d3a7fdf07b71b1a8f8b99e999958fe2a8fbfcbf733553f9475ca33d7e1e5f2997f74dd285eec8a0e5cba5080c4482d5b595e9662ee4b93be0a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367d0d894f81359a419367fc8ac631148e3eadd39a7159e1d5f784b52cce329de7bc80a3081e946651089c17942e2d2b7e0a2ba8b51162f8e9c4f29cb18d1603310a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}}, diff --git a/txscript/data/taproot-ref/4c0186fb62257335535a95ddfc34807b1f836154 b/txscript/data/taproot-ref/4c0186fb62257335535a95ddfc34807b1f836154 new file mode 100644 index 0000000000..1844d88e0d --- /dev/null +++ b/txscript/data/taproot-ref/4c0186fb62257335535a95ddfc34807b1f836154 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9f01000000d913cab760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127007010000005f0436fa04d7bb8800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac46000000", "prevouts": ["c4ba7b00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "ef5f0f000000000017a914b1a54d09172ecbb89289f2a670acc3fe14ced9ee87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21531f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["315c9a851d47e522491de1c1ba5d5322a5df750b02611d4cb50ed7000beb732301bc0bc1e59598d7fec28d19249cd55c8f6b8b2ee5a8a9abc8e53766e9e84962"]}}, diff --git a/txscript/data/taproot-ref/4c0a1b11b6e6b7691c115aa09cd92e8ee09a5076 b/txscript/data/taproot-ref/4c0a1b11b6e6b7691c115aa09cd92e8ee09a5076 new file mode 100644 index 0000000000..97921b1dc0 --- /dev/null +++ b/txscript/data/taproot-ref/4c0a1b11b6e6b7691c115aa09cd92e8ee09a5076 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dd0100000032bd211460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ae01000000ce12f710049bb81c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac34000000", "prevouts": ["bfb20e000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "9019100000000000165b142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a80286c58cbba2a57fb9b12a69a1841fc8a004e55302942795623103064cf9df0bdc2cfb102452c2a967c53504e9f9addd5f12bd635e8916083c12ec4bd01272c5eaa403f04c1051faebec20966ebe5a50352787073e7fb641e803eb34274f377517bafc24f597fa892a812af569f52d348c8d80cfa868d4eda235b04a983d3adfa470b7205d09bc3586dd6ee4d40e7bd04bded8747cad31bd2e83b1a28fd9453bf701c8b8dc5805234951ce989e309297c94893a9e6acd795c98ad6e618f844ff340e799251d0ed815a57e791c4643e3037c7ffc984a6ba839546f9d1e388d7eab0b0c88a5cf0804c7edc55e13a3add41ed3295857559e43910b7b1ca971061d4dcbf865e1736e4c57eea3bf11c89053e17121a2586624f736cc1bcaf54b293a15eee0e8e0994fb1f5513ef9448ce4c50fac6b384486a6794ad8b8ff952d36f46de70cf2811766de3a0b9b05e346714593ef1c11080a2606c90f1f82dd5103aa4dae7cc403a77b1342f9fb737615956d0edd03b686cf26d81292f46d485ead33774ed1f56c1a3a09729aa1a942588061f4287ee08b8d1a8b7ac13a130f5ab519b9787c2a0685743af16dc0d05b19bfb1cf08084ac1b6586279b9a47d25497ae77a4fa7c14ed55d27a2707fead97c4536754ba7b7b625726c8876a060181ce44591099fcd240d9fc022e90310827e64b4101e2e06676a3f0c9d7123f13232cdefb7701f761df0a8d0d75", "797d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8b1663b8b45656caee420ee834d80103f5ad80f9c4de199ff6879db0155217f4eccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f45727aec9530f4cf05d3554e63105b96634da39f3c52c35c251ce860693e97320b3"]}, "failure": {"scriptSig": "", "witness": ["4d090212f43ba80991e1c133077a9dbcef510636b40dc18c86830747725cb0f2fcdb6e39f6900e2e51c8f2e03a61c54e1307649458fd09074d5a564fa734d82876731e7fb23a07745f07cc8ccd22f79496f687fbc56738125a1c260908da013cd7aa69dd5fd80561ecd5caf4b99246b80d46c615200c400ca0d15e4a20fadd25e484c9cff13cca6f77f839e42931f32d371be0cb298f6e4a98ff9cc387695e8933bac89a59e1695cb219c12a6aff5b097d6f6dc9c2984d3ffc72a9ccd4acbd93d66c6ca9153f8d352f84715e5fb38c697cfcb9a1d77209d4162483182159b37a4fc48c147bf352c3f72cb13027495d899fff5e91113ac9b92ac95fbbc308c18b77ea646750735016c7c657aa27c01716570c5a37df176b4ae105ffaefb3a12744c966ddf459af3dae74364cea80b6bc31d42e3c534e5eee5f2e96563f576b59c13d0e2c3daf7babd412918e035fa4d2c7b05d69789897fce70b35a3cb0cc40f14869c4a691572397b8203b47d859356b266bce4ba19ddca7f9ba1de207e0d19b89f9ccb119f91f98553139b7e5f974002107d648f12ddc662208884ac6fad53940289be8b236e62c5200c54a1592c568e61f98e4f202b58574524f23b13c57451a0af784f0ec06933be63fbc48e718912186a5402fcc375dec7670382924dc2ff493e26c50b2dd32522ee89a2d596e30013d3cb1812ecef3192d5daeeb136ab59614722b82a5e98d0974219275", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e6301af72c0f0fcbfc62431a82320b93fda30ebabe1c669499e3cf52b4dc2b40fe711fb6ebac21c15598dc6feca0613664d86278cc532834585097123290bb3d45be39dc57762be2d9b1a04aa5b570805d23104bfe4fa54c392bda5d51f7f4540"]}}, diff --git a/txscript/data/taproot-ref/4c117e356638d628e5b841bc413e67c8bbf10384 b/txscript/data/taproot-ref/4c117e356638d628e5b841bc413e67c8bbf10384 new file mode 100644 index 0000000000..06c16b9e20 --- /dev/null +++ b/txscript/data/taproot-ref/4c117e356638d628e5b841bc413e67c8bbf10384 @@ -0,0 +1 @@ +{"tx": "0a67d5d202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf03020000001e51faa7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7e0100000001bfdca8034512b7000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac9d83214c", "prevouts": ["bb446500000000002251209884719338e1397826c7fc76b57dc9070e1ae6721fe0f4052d3f32cbc4476e6a", "857d5300000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "fd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d55b1ed4b01a6cd7629ecd20d44fed4dc17055f878d3dfd1e02408408b3c8ea2ebdb1eebdcbd8002197b9f44a9e59d0e9024523da319a2f3d109fa4e426d654ff4148296d57de26c46202ca6ca2132af69ac5e2240f6410455c1127b810a8937"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93622db97bf80631dfdf531579b6ec0d52fa26ef63a3bea7b809a4ece9c352aba3e4304fc86dd976b0937fa56c41f386d806abfef37789b2eae5a350cc5f24e0b07f4148296d57de26c46202ca6ca2132af69ac5e2240f6410455c1127b810a8937"]}}, diff --git a/txscript/data/taproot-ref/4c2d2d7bdc708a582093d11d189f7addae41c5b4 b/txscript/data/taproot-ref/4c2d2d7bdc708a582093d11d189f7addae41c5b4 new file mode 100644 index 0000000000..803f2fd44b --- /dev/null +++ b/txscript/data/taproot-ref/4c2d2d7bdc708a582093d11d189f7addae41c5b4 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdb00000000b104fec5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b15000000008f74357a0431b5990000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987d7010000", "prevouts": ["94b37700000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "04d82400000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}, "failure": {"scriptSig": "", "witness": ["c43931c0252ef35eed0164ab7b1b9c14130759b9113fce27ace9dfe7a45f145b3707d661b15108aed4b252dfdc2d8a8aaa002440096f77bed5f253495387a1", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}}, diff --git a/txscript/data/taproot-ref/4c66ad58c30b6404b73490df6a7aabdb4eb995b2 b/txscript/data/taproot-ref/4c66ad58c30b6404b73490df6a7aabdb4eb995b2 new file mode 100644 index 0000000000..fa690cb3af --- /dev/null +++ b/txscript/data/taproot-ref/4c66ad58c30b6404b73490df6a7aabdb4eb995b2 @@ -0,0 +1 @@ +{"tx": "c07ee00c0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270200200000062d802d1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cef00000000fd6645bddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3b01000000fb6fb2d2013a6d4300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac24ec9a3a", "prevouts": ["db2511000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "86f3560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "946057000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "c77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936791463836b54b358dc53f27671fdab223563276614e8972ade3f121fa536a5dd4639ba4332756735e08e9dd0c9395e600a8a67669bda3acb22644b013566df80a9fad2668c863ea9bd6dd9197c1c49c61c2b9d7888bac8bf6fef03fc3ace0a5a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f01d0d256ad0d229e53661481dce388404558ec2529e0bc1d85e0261a585159aa9fad2668c863ea9bd6dd9197c1c49c61c2b9d7888bac8bf6fef03fc3ace0a5a"]}}, diff --git a/txscript/data/taproot-ref/4c749139f91d4268578b998b4fc4742cfa968495 b/txscript/data/taproot-ref/4c749139f91d4268578b998b4fc4742cfa968495 new file mode 100644 index 0000000000..6c9297402f --- /dev/null +++ b/txscript/data/taproot-ref/4c749139f91d4268578b998b4fc4742cfa968495 @@ -0,0 +1 @@ +{"tx": "ac7f65d102dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c010000004de5a7fabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9200000000f76d37d202d679b6000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e1000000", "prevouts": ["25c3510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "397a660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b6", "final": true, "success": {"scriptSig": "", "witness": ["1aeb72305fff2e0596cac4c211ee8a821cc9e9d71be1d3e091c05f335b51c6933ff8e974f70e13dff4fb48ea6bed4b2b8da1d7a4e34aa22a4cd7df27a413254201"]}, "failure": {"scriptSig": "", "witness": ["f5fc6f58d98f38f1438f26533faca52aee64f9dc25c7246f0356a0f71e8507d031fa6930653073620664d566bdcc9e1226aee7680aec3399c5e61583fe04eb63b6"]}}, diff --git a/txscript/data/taproot-ref/4c9126df811790be522891686bd1fcd0a7fae560 b/txscript/data/taproot-ref/4c9126df811790be522891686bd1fcd0a7fae560 new file mode 100644 index 0000000000..bc673e28c5 --- /dev/null +++ b/txscript/data/taproot-ref/4c9126df811790be522891686bd1fcd0a7fae560 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf21000000004676830d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41702000000bbb7591260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707600000000094760f703733ebe000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc56f0646", "prevouts": ["044877000000000017a914b1a54d09172ecbb89289f2a670acc3fe14ced9ee87", "4656390000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "ea96100000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21531f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["48d22355c0de34fddfd11fb995a3e98c48a4574f5b1786c3527932b6c943da9e5fa6a02efc762df0cbab1d862eeb67ba867934720ad7c1e8aac69368b5386c27", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/4cafaf85ab316a592878f9e83a2be01cfcdf738f b/txscript/data/taproot-ref/4cafaf85ab316a592878f9e83a2be01cfcdf738f new file mode 100644 index 0000000000..84a80b3025 --- /dev/null +++ b/txscript/data/taproot-ref/4cafaf85ab316a592878f9e83a2be01cfcdf738f @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1602000000242acf68dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be400000000ae8b607802db5a4a00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac46000000", "prevouts": ["b1e125000000000021591f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "55a626000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["2a8b80e8a4f54d2267cf3d402978e8bdf420668ca259624885a6428db47c5d9e5f34f52c8c25435eb0d65ca1a580061a460ead8a38f69365bc452750d37d7f62", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/4cb7d23ad1e01a5e42d3c8d927936db03801ab95 b/txscript/data/taproot-ref/4cb7d23ad1e01a5e42d3c8d927936db03801ab95 new file mode 100644 index 0000000000..e464d39cf4 --- /dev/null +++ b/txscript/data/taproot-ref/4cb7d23ad1e01a5e42d3c8d927936db03801ab95 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5701000000bcb31209dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7301000000fa266ec5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd8010000005d4ca570010206ad000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d3a8b624", "prevouts": ["82e721000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "d0211f000000000017a914a5f28fe5532719f979169bfa3a31d5746f69452187", "fa38720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100a57375666e23f9777bb1d7f3053dd358a692ac519c36aeec52e51d1ef300e36b022015cc2cdf6d01de7cea07529bb7f0cc6fec832768b289795ee9747b70bbb4121981434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "47304402206b71489933a9cc6a40bc17e90a96b73f46c16d8021b1ab4f9882bf81fe40fe4d02201fa2f81e6e0021d2e593dff95c23ede143a9c4f78121af3328ebcf6783ff5e5f81434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/4cff2a8e93a415e0cd8f16313427db2dceea582a b/txscript/data/taproot-ref/4cff2a8e93a415e0cd8f16313427db2dceea582a new file mode 100644 index 0000000000..93fd5161c9 --- /dev/null +++ b/txscript/data/taproot-ref/4cff2a8e93a415e0cd8f16313427db2dceea582a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b23010000000184e7e38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b501000000906251e203788259000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2c010000", "prevouts": ["41e7200000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842", "14703b0000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "b87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac1ca511921a6acb6b52511c7e467c1fdb04a1d5dae2a81dbcc486709376a8609dd12296fcc73680f3617d8f33f0de746e19dcfecb08411ea531ade48d4ab609a0"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0825c7be958f18497b82a5f310769c8b8ace0436200d1bb32be05dbac5afb51b7c71ca511921a6acb6b52511c7e467c1fdb04a1d5dae2a81dbcc486709376a8609dd12296fcc73680f3617d8f33f0de746e19dcfecb08411ea531ade48d4ab609a0"]}}, diff --git a/txscript/data/taproot-ref/4d21f89d57587583f18ad029ffd268e08c6deaed b/txscript/data/taproot-ref/4d21f89d57587583f18ad029ffd268e08c6deaed new file mode 100644 index 0000000000..b4c2bac9b5 --- /dev/null +++ b/txscript/data/taproot-ref/4d21f89d57587583f18ad029ffd268e08c6deaed @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c61010000001257accddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c650000000012c97ec6018f237b000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374870b5af43b", "prevouts": ["bc124f0000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "a21c580000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a6ec201a93e79c82aebcb32c5742cba4049490cef67cba707365d2e1379631f73bd198ccbfa9c702c0592bb8c84a948c36ef9eddfd1aec8278a333dab45811656e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f96bfa32a795a0be15451bd7a8acafde79cf5d8ce79cbaf82150de20d1f80e0d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d513070c0d29d47e9fe7be7df27becdaf45cc7da31561e827162b16aa01fe84c4a24f44ecb3bab6b962a7ffa14a2ce082ec551943f33ce508b63a8ee30ee5e49264"]}}, diff --git a/txscript/data/taproot-ref/4d2c30084bbdec620ff06379849a52ea2e10b97f b/txscript/data/taproot-ref/4d2c30084bbdec620ff06379849a52ea2e10b97f new file mode 100644 index 0000000000..44e6f05ce1 --- /dev/null +++ b/txscript/data/taproot-ref/4d2c30084bbdec620ff06379849a52ea2e10b97f @@ -0,0 +1 @@ +{"tx": "db04e35402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b79000000000f3aa8f7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6a0100000042e6cff403695068000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d4ac9f56", "prevouts": ["937e200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74a7490000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a2", "final": true, "success": {"scriptSig": "", "witness": ["e9d0ce2741ebf8f3365d05aa4452a7f36e1f34b95fff8a910b459f6a4f00933320a44ec1e9a54516e8862067cd9d0bbf47891320902bf028edb43cdad41927eb"]}, "failure": {"scriptSig": "", "witness": ["6ad6c352c9c549a40d14ec920f77606e7cf01369ac3fce749645bb8f742c344f5e858a5fe628d07a77597fc4aa1abecc0baa5ea13e608d4f1add8d07ae2e578ba2"]}}, diff --git a/txscript/data/taproot-ref/4d72ed31959a5c8b48c6c9de682cb5364bf0cafe b/txscript/data/taproot-ref/4d72ed31959a5c8b48c6c9de682cb5364bf0cafe new file mode 100644 index 0000000000..b22610d639 --- /dev/null +++ b/txscript/data/taproot-ref/4d72ed31959a5c8b48c6c9de682cb5364bf0cafe @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44f01000000e8d79ef28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4aa01000000a7c6011a025172760000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df9797223689874bb33631", "prevouts": ["98d7380000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "af6e4000000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936de087c66081fda9663069b4c8b042046f39088626172b4c1411a7271e0f70433938b5973806e5396d9f6a2ad240022103fc2376d5af9a7129252a47c1a6405aad5a470b8497850c3a230fee464eb343180400453804118582df887251250b2f1"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e54b6b787f97e01f22483fa030d88163bddd8804c4bcb1ddbba44b373e5312dad300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51419220fa8a7a918b3857a082d32be9fa2ecc61d36b58eead0239ee9c5d9d4afcd5a470b8497850c3a230fee464eb343180400453804118582df887251250b2f1"]}}, diff --git a/txscript/data/taproot-ref/4d9a093d9de04fcd9c74eeb3fb252b4f762f048e b/txscript/data/taproot-ref/4d9a093d9de04fcd9c74eeb3fb252b4f762f048e new file mode 100644 index 0000000000..06233c8185 --- /dev/null +++ b/txscript/data/taproot-ref/4d9a093d9de04fcd9c74eeb3fb252b4f762f048e @@ -0,0 +1 @@ +{"tx": "a115863c038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48b0100000096e9c4c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49901000000144124f9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf9010000004abe32e30189092c000000000017a914719f78084af863e000acd618ba76df979722368987dc000000", "prevouts": ["e7c0370000000000225120975437f6ff12fc45d8ef3d74f3d05cfb35811edf79338d42e1008b4e2cf45094", "6ef4350000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f", "c869260000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ba4ba1186fc601afa0c557314117fee5cddffb95af3ab27f978a84c6b0c32f2"]}, "failure": {"scriptSig": "", "witness": ["6a94616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/4db56aa4ef26d2fbb9c74967c01012f86fb5c60e b/txscript/data/taproot-ref/4db56aa4ef26d2fbb9c74967c01012f86fb5c60e new file mode 100644 index 0000000000..2e6b189edc --- /dev/null +++ b/txscript/data/taproot-ref/4db56aa4ef26d2fbb9c74967c01012f86fb5c60e @@ -0,0 +1 @@ +{"tx": "20bdf86d02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5a01000000abe94496bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb8000000008c6483c501f95a620000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc21cc5822", "prevouts": ["e9f97b00000000001655142540f27e90740933c99d4f17ab2dfc6c82951cfb", "a723680000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["7dad6448b4411583ad8d2c2bf818b3c92438e9340c508ee2c4cae7d32a0e655689d8b77e92372bd5c63edbeb50f1ebe16a828c5f28f4cb0b53df526722b611b7", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/4dd64e2309c3e9efee2d5404d847b644329d1f7f b/txscript/data/taproot-ref/4dd64e2309c3e9efee2d5404d847b644329d1f7f new file mode 100644 index 0000000000..904770064d --- /dev/null +++ b/txscript/data/taproot-ref/4dd64e2309c3e9efee2d5404d847b644329d1f7f @@ -0,0 +1 @@ +{"tx": "0100000003d15657a619affff084fc6b1bc2cdf5e85e399bb207d84ace710aa8effb82232f0000000000378eeb7906f5bd527bde63f7c45daff54c390a64a59dabeafc8078a9bd0a050f54db6b44010000000038906fb3492909e056fa5c0ef2af542be68aba07da39583e95b43e24484150891b1d5323000000000077e0c98802d0235951380000001600146d764276c66fec1127e5074db5bff3aa6c52553358020000000000001976a914b2c48f336848c91e9c274b4615a238e127bb7e2d88ac40000000", "prevouts": ["24977ad110000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "1ad1d66814000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "14cf091713000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid_opsuccess", "success": {"scriptSig": "", "witness": ["5569b5a8669183bbf7a49db9dd9ffb9c4281fda50653a980819e4ca26d199e2f6977de349db0282af31ca1fbe0902025ac9066a24a01a62c320d2d6560605f63", "20159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717ac00635068", "c0159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f7173cf6535970adc1aa2e2cd04b60847ed9656d715af72d750ffdba18631024451b7902b78fc59ae74800241e9b7a2e0578a35ace37791478c3e04a51e81e708c61"]}}, diff --git a/txscript/data/taproot-ref/4df3d74d147d4bb7144799be7f96196f44def06d b/txscript/data/taproot-ref/4df3d74d147d4bb7144799be7f96196f44def06d new file mode 100644 index 0000000000..70818cc375 --- /dev/null +++ b/txscript/data/taproot-ref/4df3d74d147d4bb7144799be7f96196f44def06d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf12020000006d57da0d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40d02000000dae2d1f001858c5300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acca000000", "prevouts": ["52eb790000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "240d3b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "1d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea5e09f506d3786832e30b2bdef7e552adbbac598072ee50ea4bccda1394a3023f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08233479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a4bb2c7d85af23cd06361a8d9967d47c0827d7b479cd52e2216fb2d12a2ff38bc"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fc4cca0131d18d8150e9d666d72698d77b9db3880415ba5ae0e811c11ff8a05c33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a4bb2c7d85af23cd06361a8d9967d47c0827d7b479cd52e2216fb2d12a2ff38bc"]}}, diff --git a/txscript/data/taproot-ref/4e1c650230dc5d5f622303dbdb697b39acc5953d b/txscript/data/taproot-ref/4e1c650230dc5d5f622303dbdb697b39acc5953d new file mode 100644 index 0000000000..c8bc483eaf --- /dev/null +++ b/txscript/data/taproot-ref/4e1c650230dc5d5f622303dbdb697b39acc5953d @@ -0,0 +1 @@ +{"tx": "fbe4c329028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42000000000fb3c3896bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5a000000001dda1dea04b72eb200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac2d040000", "prevouts": ["268a3c0000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8", "fd69770000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08252e804f6a261e09ec86c0fb6e6ff5b26564af7d86f56b1539029a07a3794a04021136d3d9ecdf371b2101a7e86edb56e15b10ef185a8506988239bb2b5a4c43e"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936816862a3ca4ec462993bd240f6039fb5376ac85de732ed6933e2ec585e28dd4d65775dfb1ab8912d99abba269b246de78dce1dfa6fdc8b38f44f7be80bcbeb76c308d8e78b0cea59e70bbcac5990a047bb63a968328232757672e5e931dda055"]}}, diff --git a/txscript/data/taproot-ref/4e27213b2fb3cbd2c324c9d967eb6837151c512b b/txscript/data/taproot-ref/4e27213b2fb3cbd2c324c9d967eb6837151c512b new file mode 100644 index 0000000000..9f69ce501b --- /dev/null +++ b/txscript/data/taproot-ref/4e27213b2fb3cbd2c324c9d967eb6837151c512b @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c45000000002883818660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d100000000f7bd9f9f0118376100000000001600149d38710eb90e420b159c7a9263994c88e6810bc75b020000", "prevouts": ["6076550000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "c041120000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a5f69c5070a670eb4b1f18f2f2ca5111ff00de063a8ffe58727e3dfcc80e4d9921c3bad5225c42c0ecc3da53f98a2c7daf8df9f7b3fb65f74896047d7f1e7bb5619e0bcd71f4d839b5949e01b74e3a38882aeab134d3b043f234bd7c0fb20bd7e397323ba0ced905103554894c438cd3b300a3fd351248bccbe1a84f8e76aa771c90181ab4c7713e81fb73a7f6ea8e1be0dc1257b5b7e392d3d36ac1bebb5778a901db1343b1ab2b6aa3e9287e3e6b4afddec10c20b8032e07812f5cb31d663fe6a7e59820141d992fa653719eae90a72afdd7426e658ffbe75681c3a3601869d7fa15429aec39266115688f130faeb52c86ae4c11fae9e745d70675e434b674ed9ac2b7326ff6fbde3e563764c83495a8878f07eadbd17805479d1f3a0895e0f2fb85995f99ea079949c655955d35c5f8d4ac8ff249ba904b36a2af40c20bb69b18a4705c50ee94c429fee1d48abb6f9c2ebe6c92b329104284b1fde0c19d135cd0748a00a40a256a1fa9a442a27e900c52ee9c9364038779817a8b89a819a3092af96b419d543c9fc125220e8f574c3ee34bfb1a38d5908a735a456ec9b8c8b0319d2483b66e6f6535b39d6de47960fc1c1526ff5086d599cc5f1c33d157f50bade7baadf51f1eb23a046c47edaf735ba7ee786dca7b1febb5289cde4c6828636211b4924d4ca4072e136744ee10ab633925a22bb2d83ea2e050cdf9142161570b68639d0b6e0bb275", "167d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e93bd46d889920012fd3d654be778806775b1e6ea0b6836161b66543651907968afd13a3b2c4c421c5355668ae9e4eec8bcb7618363c6e35efd204a43726d22d6"]}, "failure": {"scriptSig": "", "witness": ["4d09027c896ed8d46430539ee5555fce2a157a6485859d27de823cf638edb528d3c516cf8bb2daa98e673b6c0c05bdf1a7848a11480f1b7d4385b31f8a268c061ccf50973260095546c2b3bb54b46b44a9f4ebee2504d8ebb2d8e96ecbda2cdca07a30dc9eb7d3c0d6ba5938bbb4d99d19f1e90fc53f77e11bc53c0bc63f64e207bd4f9725bb7af6944d50cbd4707f47f63f99ba045d9e361487ce7d93546646d4a1c83e1aaa4b074683d3cb846e92984dad986f4e7f525e04d84ed01cba48956e1cd8d1dfd686094981750ef846363864e34be8db27965df475178304405cdef9e71b42a30022859e5f98588d73e209ad43196ec31c46232d6c660523b54481c38937099fb046938913a034979bfc758fb81a2e2e29b5710b8964a9aff79e28f455cc58a988cb32767812bf19400fa13a26823ab838a418f1bd8d5068a4fd6d2c9a09ec2fb8edad228ac4685861de436efe4666e6b7bd2957e7701f727a994091500de471d99f70b7225ea1142b982be70140aae8e1321b31f10133dee142cbfbdc1b76160bbca1379db44b6d7cc503f3380808a4444f3bec4145d5dec38305ddee294c540bd404bbb35d501782ba646700f2e3c348c4bba2e93ad1fe51901fc6bccbfd0d8206a632fe12a14f0a4f5db42a042b48fea00608a0fb5c9a70cecdfad7e80209b0c5906dda82369f1dcf521147f0d57664337a11371e7f6fcb0764a7e694c8f4271ffa301d004b75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ccc651badf627d83c4536dc19a84e418ac77e4d8a40e4afa91bb66f57df18612d231140cd01d0310e585ecf2f38aee8d36f3a935cf5b06765b4319c9202713151e3355b9fad1d20bddcd1a8531bcd58c93c4d9ee4159d68db4e08ecdffbe17e"]}}, diff --git a/txscript/data/taproot-ref/4e442bf704b5166ed40da217a4f0a6103e117487 b/txscript/data/taproot-ref/4e442bf704b5166ed40da217a4f0a6103e117487 new file mode 100644 index 0000000000..72cea4bfce --- /dev/null +++ b/txscript/data/taproot-ref/4e442bf704b5166ed40da217a4f0a6103e117487 @@ -0,0 +1 @@ +{"tx": "ddda8eb9018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41e0100000049486be003053e3000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7968e65065b", "prevouts": ["d021330000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "4e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366eda255a985f9018ece0f2cdeb0e084c59fd6623beb306595ce95e3d71dbb86b9d8abe9ca6155576d0a7d6ce7b2728ac84476385b9c54c38b8a9cbf195895186ab153920b849b6028620ffd2b7e486a6f5e2411aa058dab621c72a45f67f5d8e"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f5f9e17620b9e5ee117d28ecc81f7c66357561166fee94fa9f70f6d3f1a5605d1fd3f29d710dd7ef94713df6d8e3b931ee02ef1dd830d0dcb285a37875735c080d03cc4210f6c8d536ca11754de7a86c068de81055f4750ba9e0b801f8560f6a4a8046f0466b39966676954eca5d67ee52b1615e6fe46612ea9ab4edfa131fb"]}}, diff --git a/txscript/data/taproot-ref/4e6bb871c5b2e524530d3675221cf34b2e598538 b/txscript/data/taproot-ref/4e6bb871c5b2e524530d3675221cf34b2e598538 new file mode 100644 index 0000000000..425a343d13 --- /dev/null +++ b/txscript/data/taproot-ref/4e6bb871c5b2e524530d3675221cf34b2e598538 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fe01000000955e53b2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4701000000658363c5011e667c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e705870958", "prevouts": ["b6c04200000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "09067000000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "4c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082126001c6c44c6d65a09c6d1b267ed4323a5b88ec68ff3dda19058d2d3d94a32d819d45740b1e9d6e416a8a4978331345395bf058ef0b936b66c7755017d83c65"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d840fd1b4336118158b49a207c7c1265147fcdb5164c3ca7c69b8b407af04dfd126001c6c44c6d65a09c6d1b267ed4323a5b88ec68ff3dda19058d2d3d94a32d819d45740b1e9d6e416a8a4978331345395bf058ef0b936b66c7755017d83c65"]}}, diff --git a/txscript/data/taproot-ref/4e7f6d1d5ff623f2b978feb61b0905320a14cea2 b/txscript/data/taproot-ref/4e7f6d1d5ff623f2b978feb61b0905320a14cea2 new file mode 100644 index 0000000000..b91cd108e5 --- /dev/null +++ b/txscript/data/taproot-ref/4e7f6d1d5ff623f2b978feb61b0905320a14cea2 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b200000000ea14fb878bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d000000000294766f002728a7600000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87bc010000", "prevouts": ["72c13d0000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f", "12c53a0000000000225120a7af56c53f6997dc9f888a8c6887a5f8ee9cb96a9d70fc301f3f9e386ed85991"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b4c2acc3f3dd22048883df4c6ef8926d4d7a863cb2abccf3932c00a61d7b20b7"]}, "failure": {"scriptSig": "", "witness": ["6a91616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/4e8673f1a272e7a4846b2b13fd4d6d699de0dd4d b/txscript/data/taproot-ref/4e8673f1a272e7a4846b2b13fd4d6d699de0dd4d new file mode 100644 index 0000000000..c8ea1a7199 --- /dev/null +++ b/txscript/data/taproot-ref/4e8673f1a272e7a4846b2b13fd4d6d699de0dd4d @@ -0,0 +1 @@ +{"tx": "9323717b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9f01000000a919a7ebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b380000000000b460fd01079d2e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6da000000", "prevouts": ["4a23220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "54912800000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b5", "final": true, "success": {"scriptSig": "", "witness": ["be514faad4f3c1d5b1c84ce536f35155e145ae5f45a7dc398aa182c4bbd1c6d6c992b79c2a13682f1442ef3230131f2c5bb67c9ccf42e2373e3d8b88ae45381e81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a636eea579fa3a3a3025ff72706dfff0b95d87a7bf40f0a5b3553671ed021b993faf2a1f7b44b0e8d1174841469e2134d1eb94fec8caa47c7874d235aecf5f57b5", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/4e8dce29e5e8dce89954f8535e95a66c4dec52d0 b/txscript/data/taproot-ref/4e8dce29e5e8dce89954f8535e95a66c4dec52d0 new file mode 100644 index 0000000000..8c7c374a7a --- /dev/null +++ b/txscript/data/taproot-ref/4e8dce29e5e8dce89954f8535e95a66c4dec52d0 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b76000000005231fa1703f1e32600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487b1392128", "prevouts": ["0e6b280000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "287d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e780a528759e22c32b672b3582ec3b98210a6d7cdb045b8c2f36dc39043db702a61bc10490c3b13d9c4f63caefcea4aba06d3a92ca8668ebd56c703a638058ee7"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ae0185d73b30cde4b6f847d95b0ec77b009b44599f3d33d8be12ed96fb030558462eebfc32d9e48af9ce92e50735d36faef083a1171bd1899835a9be2fa30ea55b4ae3ee914d52223472aa57f653ca8073aef0e7910b2553778e1ae03228475361bc10490c3b13d9c4f63caefcea4aba06d3a92ca8668ebd56c703a638058ee7"]}}, diff --git a/txscript/data/taproot-ref/4e98f79b12c1bcc786816c990038e187b1881a2b b/txscript/data/taproot-ref/4e98f79b12c1bcc786816c990038e187b1881a2b new file mode 100644 index 0000000000..5d9fb5e50e --- /dev/null +++ b/txscript/data/taproot-ref/4e98f79b12c1bcc786816c990038e187b1881a2b @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8101000000d15525dcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cac01000000f2c7c6da0498846a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acbf000000", "prevouts": ["b8cd240000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "6979470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f3", "final": true, "success": {"scriptSig": "", "witness": ["43867394a86759c616af12ad200d02086bbc5efacd7ec261476e75ba65ef99ce80bb987008bd7224c30a4eb00c40c5f9873ec3bf1c0140ca25aaf45edd96285b02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0fba4f1802ebb4446ea3bad58a8f7ef7b26b00af5348d8340103a6716dd120247aed3651d2b9a2b56eee0bd252c1bbbc0abbabae4094dca6d97c11c7b2ad0e82f3", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/4ebc10c30a1a1250dc40fd49051eb8cadd3eb677 b/txscript/data/taproot-ref/4ebc10c30a1a1250dc40fd49051eb8cadd3eb677 new file mode 100644 index 0000000000..51745e8e2b --- /dev/null +++ b/txscript/data/taproot-ref/4ebc10c30a1a1250dc40fd49051eb8cadd3eb677 @@ -0,0 +1 @@ +{"tx": "20bdf86d02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5a01000000abe94496bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb8000000008c6483c501f95a620000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc21cc5822", "prevouts": ["e9f97b00000000001655142540f27e90740933c99d4f17ab2dfc6c82951cfb", "a723680000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a3", "final": true, "success": {"scriptSig": "", "witness": ["9ce4dce770b5f580ab75751e45f91d42e90da09af3e13660dabd5c89e4365a5a8028d4418ac3810f295fe076998c8e86ebad13e00b0db526b76016058196cb6501", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["795ed4081216e0d2fc5dbc1c7e6cd5bdee1cf80bee75bbfe6f4ce03134550c43e1202e0a8a37e2f11b47ecacc9271059cb348399c9f33b7ea7e45a19d7cb3c78a2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/4ed19b212daaac7d9ddf8fbed04bd645b3540c87 b/txscript/data/taproot-ref/4ed19b212daaac7d9ddf8fbed04bd645b3540c87 new file mode 100644 index 0000000000..d78c1439ca --- /dev/null +++ b/txscript/data/taproot-ref/4ed19b212daaac7d9ddf8fbed04bd645b3540c87 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7400000000ed794b8ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2200000000422cea9001bc295b00000000001976a914c629d61df58baceae110d15eb5b55e144268615388acaf970346", "prevouts": ["1f3653000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87", "fdbc5a0000000000225120469ff3412c89f5805e53fbb9303c790a98dd32093d40e3b7dfe22bb05f85f37f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402205545430d2c1b412c1571a70f3df83420460c789d74754b91f8be4d1658788fa302202fe34318176878e9e7d56b3588928cc6d3eeb377221fb50d42b15df5ac062c0983", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402206455b13bba26b5ac6066c6a833d34727b3376fbdd36252d4566faf1b19f61f4902206b6b0e4c73215086cd19bbc0cbb69e4c3000ebeed73ba47a14b98c621da7a67883", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/4ed948d6df09636962a55dc16fa8141b57caf0a8 b/txscript/data/taproot-ref/4ed948d6df09636962a55dc16fa8141b57caf0a8 new file mode 100644 index 0000000000..66a58eead5 --- /dev/null +++ b/txscript/data/taproot-ref/4ed948d6df09636962a55dc16fa8141b57caf0a8 @@ -0,0 +1 @@ +{"tx": "af5f933c02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2d00000000e528e6848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c439010000007ad0089d046ddda8000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac76000000", "prevouts": ["1a906b0000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "abfc3f0000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["fe4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93679936465fe465f0d401827e55c2317c08ad696e5227da5899b92494a3d57c5ba365bb68c3eae5e6cd9b20289e581f52d4e8c0cb4ba58bcd8be9e67bc80fb920a1e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}, "failure": {"scriptSig": "", "witness": ["4c52fe", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3b44d8b0f62b2d27de7be259100200d6da1e5303b29f3eaa1b6a4eeb0c96a42f364ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}}, diff --git a/txscript/data/taproot-ref/4f01eb0e5c5b453e93d7259acca78110e06e0cdc b/txscript/data/taproot-ref/4f01eb0e5c5b453e93d7259acca78110e06e0cdc new file mode 100644 index 0000000000..e66d3f60da --- /dev/null +++ b/txscript/data/taproot-ref/4f01eb0e5c5b453e93d7259acca78110e06e0cdc @@ -0,0 +1 @@ +{"tx": "53f634e403bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8d00000000fb2721ebdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c86000000001da8c8acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5c000000003f491bb602892f0601000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7ad000000", "prevouts": ["2902640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e4a94f0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "e76455000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_1", "final": true, "success": {"scriptSig": "", "witness": ["83612559b0673fa4042d1e6bdb6d5f9b8451f0132ad5913994aa6774bab5bfb6490f9ae076c61e175b90db6e63400952c4150dc28fcf447661e34f82a44167ff01", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["4721cf3ab5cef3685ef13017a460e4d543b1d0d35ed7859204130c9c34254d2a9082b9c7393d2ba311d336b187de688d7e9bb6c3efd30ac3254d88839136a77901", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/4f043f492b006187a12d4a27a2fb711e089c21cb b/txscript/data/taproot-ref/4f043f492b006187a12d4a27a2fb711e089c21cb new file mode 100644 index 0000000000..a546c9dabc --- /dev/null +++ b/txscript/data/taproot-ref/4f043f492b006187a12d4a27a2fb711e089c21cb @@ -0,0 +1 @@ +{"tx": "ce36f33a02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce1010000007e650397dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfb00000000bd1a57b903916ea10000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374872b040000", "prevouts": ["e45c4e000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529", "90e355000000000022512009252952876a5c13cea12f753600009323d5e64530eb665ff4d131016b9c0911"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900458f435ba6abdf70be4dec7b2a0789d26eb9361219ce4916c9f3e2c2146b2213509dff863108f68b54d204f4b43b2fddebfd69630b8c1a20ba8be96c4e7e2557a5003e045cb689fe4fc6de332c618eb0cdce02c2dd8aae7c6dd6f70bdbaede2814"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363af132e2ca2e1ee00faae667175800cc2b7e8c9bbfff591958a2cb32b4e92f5d4c57128c8a67973c5c0637342f282ffab122f5a34eae9e616b37e48a600a7a243e02ad6eabd24d4d247e98c297de2a9d81d67e55d72d4ddf06c8e9a23565ad8a003e045cb689fe4fc6de332c618eb0cdce02c2dd8aae7c6dd6f70bdbaede2814"]}}, diff --git a/txscript/data/taproot-ref/4f31274445bc35aaf35c1fc3838142b83f4e4dbb b/txscript/data/taproot-ref/4f31274445bc35aaf35c1fc3838142b83f4e4dbb new file mode 100644 index 0000000000..8b695c0346 --- /dev/null +++ b/txscript/data/taproot-ref/4f31274445bc35aaf35c1fc3838142b83f4e4dbb @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3800000000d4d32d95dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb4010000008376eebf04e5a4bd000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac14000000", "prevouts": ["7e08700000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "c0bc4f0000000000165d142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["f9b86e355753a0f7d1178f44a1088ef38025cd452017401a4b3fce94aaa7151fd173eef0f43ce56565e4f7a6a39231826f79f45a6667b46547c758980615ab85", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/4f3b0d3de5e5a892c662d05f7df9b836b5083f4e b/txscript/data/taproot-ref/4f3b0d3de5e5a892c662d05f7df9b836b5083f4e new file mode 100644 index 0000000000..c5ef65d1d6 --- /dev/null +++ b/txscript/data/taproot-ref/4f3b0d3de5e5a892c662d05f7df9b836b5083f4e @@ -0,0 +1 @@ +{"tx": "2c3a87c40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ab010000002b52538260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707e00000000bdae3c9301fb521000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72c010000", "prevouts": ["b42f100000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "cc000f0000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "b87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8d64c15a931058236adef8a4965d2af6c40e751c52c93bf72b53dfa72cc6c024bd12296fcc73680f3617d8f33f0de746e19dcfecb08411ea531ade48d4ab609a0"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e5c7be958f18497b82a5f310769c8b8ace0436200d1bb32be05dbac5afb51b7c71ca511921a6acb6b52511c7e467c1fdb04a1d5dae2a81dbcc486709376a8609dd12296fcc73680f3617d8f33f0de746e19dcfecb08411ea531ade48d4ab609a0"]}}, diff --git a/txscript/data/taproot-ref/4f3eb1205832e452025bc7463ab84f005ccd56a6 b/txscript/data/taproot-ref/4f3eb1205832e452025bc7463ab84f005ccd56a6 new file mode 100644 index 0000000000..9bfaad59ec --- /dev/null +++ b/txscript/data/taproot-ref/4f3eb1205832e452025bc7463ab84f005ccd56a6 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127027010000000982f9e7020d680f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc1077a92a", "prevouts": ["160f12000000000022512088dde8afd13f0194fca36526be3687127f2e7cf17d2220794be262690544ab16"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cf710f3f6686759e0a7b7ec2e518295fe9deeba1571514a4091d7bbee9df99b8"]}, "failure": {"scriptSig": "", "witness": ["6ab6616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/4f444cefd89a49cf66c69836b968e18c893e6243 b/txscript/data/taproot-ref/4f444cefd89a49cf66c69836b968e18c893e6243 new file mode 100644 index 0000000000..90c15c92fc --- /dev/null +++ b/txscript/data/taproot-ref/4f444cefd89a49cf66c69836b968e18c893e6243 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c750000000034d93ff2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb10000000088399385027739dc0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac02010000", "prevouts": ["d9be5a0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a", "22ee83000000000017a914c7d65cb5025eac8b5bf295baac9287994ab34b9b87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "225b202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["c6a3f8462131ece7a4ac60951c40c9603b0811c484aa5c62e77f857913a067d7812a85f46e165f2f418a62fd4027001f434c3bf0800a2aa3069e845da792ca4f", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/4f4de778bdec3be4e7cc1f875680330eb9edda65 b/txscript/data/taproot-ref/4f4de778bdec3be4e7cc1f875680330eb9edda65 new file mode 100644 index 0000000000..23ea469845 --- /dev/null +++ b/txscript/data/taproot-ref/4f4de778bdec3be4e7cc1f875680330eb9edda65 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21010000000ae3668c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127048010000008de810588bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40d00000000fa4dd06f0403f6a000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870d92972e", "prevouts": ["96975b000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "3597120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cab1350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype0to1_scriptpath", "final": true, "success": {"scriptSig": "", "witness": ["2001921562bcace39e2b7522191d9d46e9564579cb9c9f7f10823e4b0c0914cebde959a558bbea6bfb69bc26dc8e041042c0546784c77c9a3639b8653838d338", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["2001921562bcace39e2b7522191d9d46e9564579cb9c9f7f10823e4b0c0914cebde959a558bbea6bfb69bc26dc8e041042c0546784c77c9a3639b8653838d33801", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/4f54816eeaa1958560b3411df01fd36e2cc3cf78 b/txscript/data/taproot-ref/4f54816eeaa1958560b3411df01fd36e2cc3cf78 new file mode 100644 index 0000000000..bd9cd98da1 --- /dev/null +++ b/txscript/data/taproot-ref/4f54816eeaa1958560b3411df01fd36e2cc3cf78 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c02000000d71284f38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a6000000003d5157d4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8501000000f9d154d30318e4eb000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33000000", "prevouts": ["bfc05d00000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428", "4d2b37000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "cbce580000000000225120aa00b33df18083b0bc269fd07ade71d6a19be5cfe3bbc4e226f77b4058e47cd7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["eb4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360c54e1ada67eb35c9fc75440012c0966dedc9197e6aa1f92cced4ba861a6e0736873018117c319506164013bcdec2d285df0b840d64f5a35ebdb06eb3e2afdaba9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}, "failure": {"scriptSig": "", "witness": ["4c52eb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f7503786cb7ee92eae5d70fa92690036da7bdf6692c5c1fbcf5def7599471201292070a98a4b0647c95affa8e1bd4aa189d67ab6e78b6f1cfbf1b9e41a8f8bf399891b33f3277cd8a2b8473e2e6079de1e6f51840c7864da48d9f2287dbe494cf9ce2244c675144b577c27c052f9ebd481172245e28e9502c6c6e8f12c64fa6"]}}, diff --git a/txscript/data/taproot-ref/4f5d2d6eb42d852d85a2d40419830ff372017208 b/txscript/data/taproot-ref/4f5d2d6eb42d852d85a2d40419830ff372017208 new file mode 100644 index 0000000000..98690482f9 --- /dev/null +++ b/txscript/data/taproot-ref/4f5d2d6eb42d852d85a2d40419830ff372017208 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe2010000006a60a6e6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc700000000333905ed029b4e95000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748789e0cf22", "prevouts": ["f9d2760000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2", "ac4c2100000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "717d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820b90ee144c073a081d1ef827361e7936248dbf88e4cb0dcdac45f51ff02f5de2667dde4f09f14471eadd81946489c41cf4fd01382a4947d773f1f2d4d0db4c57"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936934e71b25832c3b522010201f0ea45f4c2c0f78477650c948e369f9a59638b5a47c0542868f8d04f04b11c7797ac2650c695e4f1f1a83ba9fe9a249175e916721e193f5d3ae2ada43ea9223ce508afaffd6393e3458e5d7b2b04f710aee774aaf4fdc20f1f5535ceda7aadddab857a143114b7886b058839365016ac02e93c97"]}}, diff --git a/txscript/data/taproot-ref/4f692f08e2284094269303792599c3ca996925a1 b/txscript/data/taproot-ref/4f692f08e2284094269303792599c3ca996925a1 new file mode 100644 index 0000000000..3f6ae1623a --- /dev/null +++ b/txscript/data/taproot-ref/4f692f08e2284094269303792599c3ca996925a1 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41b01000000b82575a3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6501000000474aeda00135f745000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47876fa28731", "prevouts": ["0e6e320000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "0ef12100000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "0b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93684c23a4f834a7effc42b1c4f88dcc82246b0d4e764e461eb4f4db8348ecfb3306eee185c5450ca8ff820874ed786a77ca41a0ece110e4e1e272b53628d0f659ee0d9bed60e53dfa6fe8b58229f37daf0597893c765c7b30814eb9e16fca89b86"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef92671edfc08b1595b62488145cc68a42644b51379cbb9ed71181eed5e56f97e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8784d9e7ee919b8817f3904ff7d27b5c3a4ce3798ed5b994b75288b8e9341d9b42c78e40500fa05b550b7f6357dbf83024c41a574f6a1706762c104fa8aec3fcb"]}}, diff --git a/txscript/data/taproot-ref/4f967edf0f22d51ce89c007d5351844488bfc1d4 b/txscript/data/taproot-ref/4f967edf0f22d51ce89c007d5351844488bfc1d4 new file mode 100644 index 0000000000..9a3d3e2dca --- /dev/null +++ b/txscript/data/taproot-ref/4f967edf0f22d51ce89c007d5351844488bfc1d4 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c438000000001ea2ccb8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf180200000014118e3a013b6381000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748747a2fb1d", "prevouts": ["0dfa40000000000017a914f0ed99a28545ab2ceacee60b5537a9e5c34fcd5187", "67f27700000000002251202b6311c61a2a508a144ec510c52a71fff5d62c4fa86296d42faefa4fd619b162"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "215b1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["09e9fcaea32a4aa595828226e2229902d1d88d4c7faad932d9658fba57fc06a73098bd9f61f3b0a752472bed18c70cb645844935573e9647fad8ed6d42a89396"]}}, diff --git a/txscript/data/taproot-ref/4f9df26c7948631ce06cb7292bcc481337bff811 b/txscript/data/taproot-ref/4f9df26c7948631ce06cb7292bcc481337bff811 new file mode 100644 index 0000000000..e0f02f5435 --- /dev/null +++ b/txscript/data/taproot-ref/4f9df26c7948631ce06cb7292bcc481337bff811 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0f00000000fea24c75bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0402000000ffd0d85002b76feb0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72e261f40", "prevouts": ["aca878000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "3ab5750000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "473044022004040759a1961cfa82671ebd824d6cb4d62cfcc34da58a47674854aa3f3b49bf0220408c7f4d185c9fb520fbad8f1fc2fac04fdb40f0cb2bb22146d386ea7a8b553f16232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "483045022100ebeece7e8de8b04f144fb82fe9c6faea740fd4e5fd4091b93d66424b005e6788022035b3bfdbb28d5ee1576ae08be40fa2dc83ef49f24fd7e33f9a83014f2b6bafc016232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/4faee5238fb7a4ab5d716bcfb441ef4b0ab3f888 b/txscript/data/taproot-ref/4faee5238fb7a4ab5d716bcfb441ef4b0ab3f888 new file mode 100644 index 0000000000..e7c858cbed --- /dev/null +++ b/txscript/data/taproot-ref/4faee5238fb7a4ab5d716bcfb441ef4b0ab3f888 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2d0100000067095e1ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b00000000b27fd181049eb8c90000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df9797223689876a020000", "prevouts": ["9d75660000000000225120de7c17758b854fc68d3061dec4ffef020214eb4d128d0a0aa1b6bff82dc51d5a", "f6a1650000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f35a9e9183b809919681c9ebf7f5998e5393f3a0b75bd60b721d49b380be8117"]}, "failure": {"scriptSig": "", "witness": ["6aaa616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/4fc70db2882c50f92cbf554605f20aa8afdc9e7b b/txscript/data/taproot-ref/4fc70db2882c50f92cbf554605f20aa8afdc9e7b new file mode 100644 index 0000000000..281e866530 --- /dev/null +++ b/txscript/data/taproot-ref/4fc70db2882c50f92cbf554605f20aa8afdc9e7b @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c02000000d71284f38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a6000000003d5157d4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8501000000f9d154d30318e4eb000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33000000", "prevouts": ["bfc05d00000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428", "4d2b37000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "cbce580000000000225120aa00b33df18083b0bc269fd07ade71d6a19be5cfe3bbc4e226f77b4058e47cd7"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692171dcce0f83dbc374f842d6c29c40444bab2dbb43dfc5467e2257ffee5e878"]}, "failure": {"scriptSig": "", "witness": ["6a77616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/4fd09ff1c3fd39676f5029f8a82082c4a788cbe7 b/txscript/data/taproot-ref/4fd09ff1c3fd39676f5029f8a82082c4a788cbe7 new file mode 100644 index 0000000000..8b7e398b1d --- /dev/null +++ b/txscript/data/taproot-ref/4fd09ff1c3fd39676f5029f8a82082c4a788cbe7 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d901000000d5ab22dfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf98000000009e40c06902500e8f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796b4d1895d", "prevouts": ["8fbe0f00000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8", "f80a8200000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "997d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb3e0f47209c8bd03f9c1f4c84e35056958ab5882c2791c6ae554831739033813d673df10a8cc98fc65477367c7f3bb838b82569297570384f0d4df8cd49e6dd413afa0de0ff2ef52577d4c80443f6003c675907986908c28bc93ded208ca160"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cdd31c127df2ea056bd7aeefd91119cf1ab5be9ea7b27ebeefbd713a415465b774e6e02235f222bedd00290eb9daa035321655bcf09c112e5b4a77998f5c860a0e580b14ffff5bbee812c9f6e3af6b100c6b4cffaf41971c257964f1fb14f6f9"]}}, diff --git a/txscript/data/taproot-ref/4fd67112498e9041d549dca8902b4b18f4151e0a b/txscript/data/taproot-ref/4fd67112498e9041d549dca8902b4b18f4151e0a new file mode 100644 index 0000000000..72d2d88ba8 --- /dev/null +++ b/txscript/data/taproot-ref/4fd67112498e9041d549dca8902b4b18f4151e0a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7e00000000208666d98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cf01000000b7b13eed03661d95000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acaf000000", "prevouts": ["96b259000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "a73e3d0000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000da", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aa25749a9d031bca906e25f3e351ca93a9a7d139f4eba150a9b4242be9856031d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5148d61d9b48b1fd3c9dcc7ce9fbab23c91d7bbaaf6610449bdfa8b9a4fdaeae22ee4d75780d36bffae9b56136e6d27c02b8d233efdc800bb260bfbba6a6f94b87"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08216c8ab92abfbe4bc2686b5b42764123e12e1b7fae7b64d8b1bf7005c7df7fa0a3ad7647dae649c97c815eebecc244cfd5d14ac6da92e0e18049c71625e2af9496ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}}, diff --git a/txscript/data/taproot-ref/4fdbb01ee1c89fea2c908ade5230cbf49b493184 b/txscript/data/taproot-ref/4fdbb01ee1c89fea2c908ade5230cbf49b493184 new file mode 100644 index 0000000000..a6d5d22e02 --- /dev/null +++ b/txscript/data/taproot-ref/4fdbb01ee1c89fea2c908ade5230cbf49b493184 @@ -0,0 +1 @@ +{"tx": "02000000017cacf58c1885ec7a53b7658a58e4f1dee7e8d7a954fb736b3a502279c0be18ef0100000000ddf8e0e404c5a5538b160000001976a91472fb0c729bce8fb851f92a5ad48d3d4231beda4988ac5802000000000000160014f2ca549f2f8613e81a7cb48fd110f37b7fb1529a580200000000000017a914ca5375a68588393c82c00f5d2ab21f91e99aa5ce8758020000000000001976a914a875a4732dcf342e2587f26f2b7b2ea4a2fd587488ac10010000", "prevouts": ["979f558b1600000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_invalidsig", "success": {"scriptSig": "", "witness": ["cde641a27c5267172f2757bdf093f55c990d9cef17568a37276c373b3597303004035690bf6772d6c9ff5401569850db8553020c011ff0530e988a693d5fea34", "20cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3ac", "c0cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f312f383ce02997bd7885b2023ff24b4d79c49e77348af650460f5903df7baafc9"]}}, diff --git a/txscript/data/taproot-ref/4fe78456cf82ee1f4f6bf880baf672a53376c62d b/txscript/data/taproot-ref/4fe78456cf82ee1f4f6bf880baf672a53376c62d new file mode 100644 index 0000000000..599a15b6ed --- /dev/null +++ b/txscript/data/taproot-ref/4fe78456cf82ee1f4f6bf880baf672a53376c62d @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45600000000205bddf760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700d00000000c8f1b58b0186fc1f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478744990c28", "prevouts": ["28b5380000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "36b6110000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090216c5c5bb97a54d41103c735c2b8c4a1a5c1039b3ad59da9dca82283fd083a7fd49f1598556e1afeaedbcd178daa05bb8ae60e78836b958581f7926b5c8623020d28ab9b179756e1536af0a4d93bb032b7ac64f81d807513c95471d2d2e8a73f0e5d7443d044b32bbfdd5a2329e73f35c3bcc60628fde61058ed3fff8a5556f8c5a3cc9a46004ca4a796c4e948f8e6f75e0715f49cf23e8ce4d0c92953fa6c2751530d24f44d4e5be183fca935312dab312448cd532f70bc4933caa524b30b317e15c818c9092052611ca51cbcb3e2efe25c2c330023a91d576b3bf35d26b94dad64886a0eb0fb9d4b56aedeca9e087037c5e74b3e1fcde03b0121a9fcb4ea41890efeaa41642118552ef6d5ebc3bff9c87c057882d23518fbe2b92c1b96c67bb29524bf13740a5a8382f668c5da6dc44e943235d2abb047923ae340c0249e612f649801bc971101f02c6b2cc6834bf79961b156e6564b132e0663cab7faffb55de954ca33cafdc1d1f9538b05b1d4983c0d2e7a64407486fa2449d74bd759df93b900fab2e244d563ebca286781f3c284f6d22815aa116514be590bd371626307fef8356068a58bf347a73b9260ddffb7fb726343d8b156e16729296004e5f08d9042b1dd5ba348847e649b7eb9ca7fb69217987db5b254d25197a9e1f51c15d78b760bd506c2ea5c242bf12ba2d73e491c814a6be544a73de8b25a6a31a8340176eb69bf0013cd09c75", "d27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661b2c7f111ba6ec1e70ffb2e90369bb1194c2022d0cf3fc398f654044cd38fea9a9c5d9290705897ef911507dd26b72756738dae23c9379fd676f365e52e00fbc5e1171eec0a28263e9818d2dbd976f4b8066e50dd8906a411b6a9dd47f52980e39f192d4dec24b48e9231a08b7d2e64fac2040aad69c16c1d9eedfe5fb62ebc"]}, "failure": {"scriptSig": "", "witness": ["4d09022f0997b23c3f9db654af0f95d661e3cad62b9ef2fe8e535048f918b94d767055604f13b5163000c19fd8df4b61012b40a425fec229f2e296106ed26a01296d5602d9d242f0dbdeafedfce29e753d580f7512631c167fc145887edc6276d626c50acd008c695efb4805293aca2665c1776f26835ac8a631f9b13b78726a8d29207ec8e768f6e0d0c6a55263d0c24a7d59393b4278e89ede22d5a12fa17daa8e0474a80b6b3014b2e49d0873ae3c86dcf34452e29244734fbdbcc0392127e9ae59e8ade19f9493e67c6ce59d58d9d45231bf4079341aa3e8a584d2498c6b9058e483a2b5f5ec9ef32215ba72ccbd029cbfe85d16229800ba810ab4da8dd3689b489aed0d7915fdaf8ba542188c2d606e3419b57d111b4a13600968f6c4fae8cb19edb97f05a901cc53ae57840679d099613c0629fdf9b9b9584bc7d13408270114ce46c12c4068028a10fd23dd7b856e72cf3594e00be636546c202e215c7ca18ba7e37fd35d3e456e06f2cf335ea2632c1f0eb4973ecef6ce50254addb814893b36489abf8d1b283d2d2bc4b3e89fd1af20f554d788727b09e190d29d6bd444e0d450b571612db7b5cd8859c338cab823bf9ef1ad02a08baf0b4698541944cfba0180e2b7b43cdc007409def61174877ce6426b3959b441f6d35ab4f58aaee3ec633f83fd20708c8d9632dec5edc836e5e145e358ce4902bdbfcf21d481d0a5db7c060ba1be69734fec75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd98210eae0fa98a1319e0f8d015acee739784c329755eb742bbe2450ea9c34cc5e1171eec0a28263e9818d2dbd976f4b8066e50dd8906a411b6a9dd47f52980e39f192d4dec24b48e9231a08b7d2e64fac2040aad69c16c1d9eedfe5fb62ebc"]}}, diff --git a/txscript/data/taproot-ref/4fe9d51c1a4a51db63ace4b7593bf4d0179da70e b/txscript/data/taproot-ref/4fe9d51c1a4a51db63ace4b7593bf4d0179da70e new file mode 100644 index 0000000000..44177aa804 --- /dev/null +++ b/txscript/data/taproot-ref/4fe9d51c1a4a51db63ace4b7593bf4d0179da70e @@ -0,0 +1 @@ +{"tx": "706e0a0002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd70100000024a962a960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b600000000b076b3840399c468000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2b971d54", "prevouts": ["cf2e5b000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "ad3810000000000017a914613e66961ccf40c7c83ed07cc80b2528cfe51edb87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["ffb7fe6f8c670a9fbcab42d8e49650ec5cbcc1fd92640bbcdbb19aec61302f2984e22b033cc8bec4b2e1308769422d14f23b55d485fd17856aeab0601a169b81"]}}, diff --git a/txscript/data/taproot-ref/5008a5b791ae73ec29ac0e451b2193e921d7d91e b/txscript/data/taproot-ref/5008a5b791ae73ec29ac0e451b2193e921d7d91e new file mode 100644 index 0000000000..7b1ab24d8e --- /dev/null +++ b/txscript/data/taproot-ref/5008a5b791ae73ec29ac0e451b2193e921d7d91e @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0502000000d16cb6e660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127073000000003ed0908104709196000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdfd17120", "prevouts": ["10ea8600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190", "a4a0110000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d24c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820ec8a0a1d660d587d93edd278a1416bd3a7fb5c67f78681973183382c988e9bb422e3784e386a40d51dfdc8b2696050c6780884f0aa6a0f3f5d0b1b514784d82ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}, "failure": {"scriptSig": "", "witness": ["4c52d2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ec61f623cabc1c59ae609038607190a38cf6222717d18f4a17cbb39cf7dbe2c9422e3784e386a40d51dfdc8b2696050c6780884f0aa6a0f3f5d0b1b514784d82ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}}, diff --git a/txscript/data/taproot-ref/50197b1f963b6c70cf02494a68b83252169b58f8 b/txscript/data/taproot-ref/50197b1f963b6c70cf02494a68b83252169b58f8 new file mode 100644 index 0000000000..303a1e2d59 --- /dev/null +++ b/txscript/data/taproot-ref/50197b1f963b6c70cf02494a68b83252169b58f8 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf430100000019be6fb160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704300000000dcce808e041afa810000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8795000000", "prevouts": ["d9ef740000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "78f40e000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a95", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a0f07cd9257033b6e222f9f09c7a2afab52c7da4cd2bd631f821ab1682d301643f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082adc7c8b3bda8f17728820267d55a41d559bf30f92e294931cb4fa644579829c4d4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93690a135c86aa9942f4732601386d1d91f18d87aa0ae76f08bfff5f90e314904dfaab45d9ee0154589058109bae8be3e72a724d93a0656d7cd013110f238c03b0975c046d699a38e7801f010fab6b697cc237a48311758c02bc29e281a6d7a682eab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}}, diff --git a/txscript/data/taproot-ref/501c6aa901d9b79489250b1e7c008dad90b998ba b/txscript/data/taproot-ref/501c6aa901d9b79489250b1e7c008dad90b998ba new file mode 100644 index 0000000000..884e172cf7 --- /dev/null +++ b/txscript/data/taproot-ref/501c6aa901d9b79489250b1e7c008dad90b998ba @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dd00000000e98bdfcfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8a010000001e3b31c4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf10000000006ffb29ef043b09130100000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd0000000", "prevouts": ["f1ac0e000000000017a914ff6a0b1cf86e786bc6de2387f1927f71fd08cd0c87", "cda7830000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c", "20568200000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "f77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa0bef6e20d4c5455f6a7eb766c9d2ecc1d4fc5a0b2a6436d41d520177b8d84d9981b72a8cc1600d8047fe8b56626831fcb5b55f7ee61ebb9b8b91fcb4b55947dd0f5943df1a7722c938328966c7e5ac747f85bf050d43cd9195f6df88860ae066"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e91206a13dce830cde2206e5f739521922f5dc18cf67a0e14634d1bdd9ebb3ed0a4dc25bef94d3da1f821dff96c297a1e496d55e040bded104527be104f359289411b885fbcd56b4d2cd2e695cafde2fa2de7097172cb34b20e1fb870aea9a6a"]}}, diff --git a/txscript/data/taproot-ref/501cdfc8b8bfd47787c30328084cb44010d48a2a b/txscript/data/taproot-ref/501cdfc8b8bfd47787c30328084cb44010d48a2a new file mode 100644 index 0000000000..503ec4421b --- /dev/null +++ b/txscript/data/taproot-ref/501cdfc8b8bfd47787c30328084cb44010d48a2a @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cc00000000b8f83b5e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b000000000ea20edd1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7b010000009599d10e01c5f72d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac71030000", "prevouts": ["f6d641000000000017a9141757f4686f091b43a46fa47e92d07c87fc7a205e87", "5b42100000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "0c43250000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363e76fda838f76382ae0d0bdb253de0cdef8bb5a3eb9bc3b2e59c371abae55d530d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3f2a2968b4ea0558d79f1ec3cd2b8a530982c6b5ad0be17180e93d11bc09903133cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361cc0b7b7d6ad7930d95e3200c68d1443ca9c709d86c4485118a6574c598e644fc145688b3898d8a1374847539a36067c996b07f78d82debe95e7e288000a7bb1b9cd72275efe6b477d9cf0b54cc21959221ed58300fa90def59e56d53bf5ae178c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}}, diff --git a/txscript/data/taproot-ref/5020bfad68bbf3d62a9901f11d582b9367ff01a8 b/txscript/data/taproot-ref/5020bfad68bbf3d62a9901f11d582b9367ff01a8 new file mode 100644 index 0000000000..723b1424de --- /dev/null +++ b/txscript/data/taproot-ref/5020bfad68bbf3d62a9901f11d582b9367ff01a8 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700d020000005955ac21bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1301000000b41584b4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b35000000009f42a30602486899000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c5b9435a", "prevouts": ["ac30110000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "f49e6700000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "7202230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_1d", "final": true, "success": {"scriptSig": "", "witness": ["bb5b83d7d8938ca101024dc3e7460b6b1181f2d63478fab90f85e9763ca6f94243fe0321568a8e77cc7d797b417e5d00c6a6a4da33bb69f7f3b7df3a62424e8a02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3e194e73315fb57b606937e0f2f037069d1004c6b7a4798eda6feb39a435a8c6e650b12b0eca569d65c1f1d0a6aff5a015f67430fbb6be3f7e95ab1ca5ff912d1d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5027b63206364f920f33ae41d244998d60e6d000 b/txscript/data/taproot-ref/5027b63206364f920f33ae41d244998d60e6d000 new file mode 100644 index 0000000000..a6950c87e5 --- /dev/null +++ b/txscript/data/taproot-ref/5027b63206364f920f33ae41d244998d60e6d000 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fd010000003193dfcfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b54010000005b35cfa901599734000000000017a914719f78084af863e000acd618ba76df979722368987f8010000", "prevouts": ["5c99400000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bf2620000000000017a9147e06846ce22cd5e23f7e03391c0538498e0e18ed87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_62", "final": true, "success": {"scriptSig": "", "witness": ["99d2157465caae90d91f9016d5319752015f5e5653b5fff8f3f4fe00ad496903b44e66b985d91d189da0e1d7a5766ce18069f9e1aa97f57ae6d7a0acbeef2c1a03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["325df9e2e4adeda8388b98b8d4aaf9125f309fce49bac19d1a494a9c2e0604c2cf80bbefdcfd15f56e262db17e839ad9a3ac959f8ba9119877c1ece2c5990b8862", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/502ba5490df10d7b64842c917be0cc8dce168153 b/txscript/data/taproot-ref/502ba5490df10d7b64842c917be0cc8dce168153 new file mode 100644 index 0000000000..8fc1f3f436 --- /dev/null +++ b/txscript/data/taproot-ref/502ba5490df10d7b64842c917be0cc8dce168153 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127011010000009512ffec60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dc000000001b1f74a901fa2f0300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac929f8435", "prevouts": ["9a331000000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5", "e0c2100000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "e07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac7aee4b44d5965a2155fdfc505fe91ce63bf32d9f7dea97d151efeddbb77a8d8e461ced71aca9bcca55b69078fb4637b626cf10c8373b915aa1b57bf9dc2b76cfc84644ef9fcb418936abdde9e6d46d404f44a19de7b4f5c4865233c46051e9a410273431f29264d27122ed0946ba884bbeaa1cf1ddeb7776ccdcb7bb2f1db0"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e73d9d375b530aa22fee240902ecc7793689bdebd58e9771ff3d6e92b1aa7f5c13ccd0bea79832f66dcec0cbfd0592e3eb2d999b46ac697170d667eb8939a9687"]}}, diff --git a/txscript/data/taproot-ref/5040561743c74062906a64802db725e7cb87b572 b/txscript/data/taproot-ref/5040561743c74062906a64802db725e7cb87b572 new file mode 100644 index 0000000000..c387e5c53f --- /dev/null +++ b/txscript/data/taproot-ref/5040561743c74062906a64802db725e7cb87b572 @@ -0,0 +1 @@ +{"tx": "3df0c2550260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704d010000006102a8938bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41302000000e3c820940116cc37000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478714020000", "prevouts": ["5eaf0e0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "39193c00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["ef4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fbdd38c28c61f1b7a6e8ceb22fbafcfb9b20df7a8d7411fb9f5b9067992d68d9921261d9825d6464319e11fb6c7a9f7c01f613629293fb1fa80574c155a587736c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}, "failure": {"scriptSig": "", "witness": ["4c52ef", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364d02a6944b3295a9081531191f8339678ef18bd6d1d93e67f7e41417715ae2b61aac465e0caf83cc75bfd3b0ee046dffa2f2de04035b6590b107e2b54cd5d5d2cd241e6bbc5ebedd8f50ae206f1f82a1e41ff5c139455a0ddb0d368f52a47602"]}}, diff --git a/txscript/data/taproot-ref/5047a7a4c5f22dc492d73a6de284a0603fc06171 b/txscript/data/taproot-ref/5047a7a4c5f22dc492d73a6de284a0603fc06171 new file mode 100644 index 0000000000..2ef8897f19 --- /dev/null +++ b/txscript/data/taproot-ref/5047a7a4c5f22dc492d73a6de284a0603fc06171 @@ -0,0 +1 @@ +{"tx": "d505974903dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7d010000009a3a5dc3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b710000000071f6369760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f501000000c7d508ab0473fc5900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487b6000000", "prevouts": ["a02e250000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "b3ca250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d95a110000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "947d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b94af649fd7e9693ff473420f733b57f9fdcc5cab1f492263ad73d963d21a7732e00206903aca02b9ef6b315776a46e2bb12ad4a7f610ddc80848357a2bf29da5432af4ca45b9bbe99b3e8be0ff589ddab81e08d94f2d38bc0283112328f69fdfe847a112bc0d43d64007e06b59459a0c0ad8818c3210afd17f00e931ed6a3b8"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ae0d38dbae0af5265a3cb082a237627ff1f83d25afb725954790e6416ead5eeb9828c38da3f3e346edf59d2f92319d23f93cd7e709e1c3907c38a06ec412d61efe847a112bc0d43d64007e06b59459a0c0ad8818c3210afd17f00e931ed6a3b8"]}}, diff --git a/txscript/data/taproot-ref/50701ea0af2da8b084ea4a3566db2cedf8dcc2b9 b/txscript/data/taproot-ref/50701ea0af2da8b084ea4a3566db2cedf8dcc2b9 new file mode 100644 index 0000000000..7c60673b1f --- /dev/null +++ b/txscript/data/taproot-ref/50701ea0af2da8b084ea4a3566db2cedf8dcc2b9 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0f020000000b347dcbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9800000000d4e7428104d53da800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79686010000", "prevouts": ["17065400000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f", "71505600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93626c391d5e47230d4b4e419da58037ce9505b07d9e5ed3742aee4172be09b65ae536798c57c197a746bb2ed7f28bea5bf32719d74447f5bf93d90a00b781807a2845c4b1f0ef9796b099f7837236ca3239de7da07050a4e4f568f49f6a65718f105f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d1b360dbc2a68556ffe995fa73d9491f5c7d1d4795c1bc7f06a4bb01cde3d3510ec8a0a1d660d587d93edd278a1416bd3a7fb5c67f78681973183382c988e9bb422e3784e386a40d51dfdc8b2696050c6780884f0aa6a0f3f5d0b1b514784d82ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}}, diff --git a/txscript/data/taproot-ref/50765c36b2c5b67d14ed6d3f1006bcac492b9d7e b/txscript/data/taproot-ref/50765c36b2c5b67d14ed6d3f1006bcac492b9d7e new file mode 100644 index 0000000000..9ed3f96c2b --- /dev/null +++ b/txscript/data/taproot-ref/50765c36b2c5b67d14ed6d3f1006bcac492b9d7e @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48a01000000668a29f1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3d00000000680a248b0199335c00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acd1918f56", "prevouts": ["64343f0000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "251a20000000000017a91454957ff2b5c5fa7ace3c6fb485b914ecf6ce0c8c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "0c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c2538f548eb9d319d165a467796d1e60ec6673916444f0d66e1a9edbb7d8ec4eda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e5111e542fd849c49f4d44aada2d8e1aab946c793c1d334242f5a6d1a51a6de2d5b0de380cf0ebf0fa9d17e1d1edb87a374b64935c1c67f0c5024fcc072643681"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f347fc09b13f9ab949e4d0dd849e76d18bd9ee465aaa47c5e053192723bafcd48d88e70532c494439586c1157b8a644f11fc532506ec8f5af612c230a11997e628257bae22e6d8aedb31b43cfe467850e731fb88c1221782039a4c16ef44c35617d0d4fc7404dd8984f6a1705481d95654b515a34c586c99c11bfe20e9503459"]}}, diff --git a/txscript/data/taproot-ref/50ade4cb2bfd78d63959c0c196702463020ec1a7 b/txscript/data/taproot-ref/50ade4cb2bfd78d63959c0c196702463020ec1a7 new file mode 100644 index 0000000000..af8042efb6 --- /dev/null +++ b/txscript/data/taproot-ref/50ade4cb2bfd78d63959c0c196702463020ec1a7 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdb00000000b104fec5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b15000000008f74357a0431b5990000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987d7010000", "prevouts": ["94b37700000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "04d82400000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "b17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa6d4441481b861885f5ed94900bbd5862c55ac99196b75719f05c0af3923d20525bc912f5bf4aa2c9ddbc9747d59c78f40d0a0aa0a8a4f22dc70e3f9cdb9b6ae3"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d5f4fd4f38de76daa30397659fc5eb995186dee5e848d8b406f0f064ef43f0c2e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8d9568d9f877f6ca0cee9df3d4970d26d0e286b65747316dde3c995de6e71d9f55bc912f5bf4aa2c9ddbc9747d59c78f40d0a0aa0a8a4f22dc70e3f9cdb9b6ae3"]}}, diff --git a/txscript/data/taproot-ref/50e97f4dc4e78ccd7491b23a05fec77e705d6d17 b/txscript/data/taproot-ref/50e97f4dc4e78ccd7491b23a05fec77e705d6d17 new file mode 100644 index 0000000000..0075b80b95 --- /dev/null +++ b/txscript/data/taproot-ref/50e97f4dc4e78ccd7491b23a05fec77e705d6d17 @@ -0,0 +1 @@ +{"tx": "143da98402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b440000000025c5a983dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1f0000000038ac8a9d039d224200000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e764451426", "prevouts": ["d3781e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "694a250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e", "final": true, "success": {"scriptSig": "", "witness": ["d9124b8647f3acb4689e4700a9599fc0bc513599668e1920e4bedc7a4ff8f237ae15e32d93778e93fd3702c8a475b974d8f95a6315ce7ebf3560de909a35e99082", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8bd90ef2e9c46dc6d962f61e4765ad430e6f14b7b174c413922efcb80f5e8681c3c222ce2224b789f04f2877a611ed2346d135007c05c7dd22fd824b1b114a770e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/512819dc5f866c4c52a96393d1dc161a298b58cf b/txscript/data/taproot-ref/512819dc5f866c4c52a96393d1dc161a298b58cf new file mode 100644 index 0000000000..b44cbca146 --- /dev/null +++ b/txscript/data/taproot-ref/512819dc5f866c4c52a96393d1dc161a298b58cf @@ -0,0 +1 @@ +{"tx": "d7f96b1903dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca701000000c90fb0fadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0602000000fe78deebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b92000000002e15949302b1769a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1a020000", "prevouts": ["3eea5800000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "d5e41f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "688424000000000017a91495eb8fe3d959e08a2cc279c1b4ede1921d14a93b87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_2c", "final": true, "success": {"scriptSig": "", "witness": ["cbdcc544b9cf6555405ea1e773a70c6cf70cc997c3adb4cad23abe14380c7065cfe563076597f09919dccc545a384d03421a884e097eddf324fa435083df25f782"]}, "failure": {"scriptSig": "", "witness": ["c95a185454bf06e40c9ca70a66723bf19eac83a2702717f5e64ff49f8c6c02914718103f316dc3dd282963d07b03b238afa922488820fd0e9b43336597df8d632c"]}}, diff --git a/txscript/data/taproot-ref/5134a98d252e038c84c184e2a60b3ab15541c32f b/txscript/data/taproot-ref/5134a98d252e038c84c184e2a60b3ab15541c32f new file mode 100644 index 0000000000..7afd4a0ac6 --- /dev/null +++ b/txscript/data/taproot-ref/5134a98d252e038c84c184e2a60b3ab15541c32f @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3f01000000b8a74f8a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44f00000000e90788d160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702a01000000ca5a428f0116f30700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ace4010000", "prevouts": ["45214700000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "d6963e0000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5", "aee20e0000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09026c8996ae41319caadcbf48a28b57f224cbd38d446d2467b4a10a4b0772f7b34cb5e4f581c04147436f22e81793836a4632580b362f43b531602850ea052da4516bbc5b4f689c052ca256fa308c869af00a681823df8b45438e870cc66642b39cf8963eb626019fb6362815b92a6c335fb3af15c99c909ba32496f22bdacd2af9983f09cdaa709d996c9aab70503a7ac17a428f90418959f654ccaa293e6e0d70bc6b79219070e0d959c0bf219fb2fc5685336f84b9c76e05066c772c5dfeabf42601130fe4ef32979200eb886b2912e323b8f9229a755156af3fe5f200f4c3dd56a26be458f4b0c313577ce4cf3569efe2062ea1c631913605e3eb3f6d1828b31cf3f01252528f464d272cee8be990696d0c267b10a584d422c42e6f230f9eb455a52ee05482dcde698772592f09dd7c2dcda5f143e36f0d0687a76248919418e65e9962ab66b988ba9364c5c0891a9ba251e4779d6d05314430a01e053b39d3098861dad21e45895e10d219e9ab0501f2e5e4dd26b2b80386031ee82d7b363788074d2c1e9ebaea1fdbcfa1eb6be6abccdca9a147b7e3848ddc4a257d74d354e8aa3360d31bad3513a9d7c2a6000227a2a51d6cf80ab5bca05425230f58c62a330f855f9e560cbd47112959af75204f852b5f2cd5053d18fcd9b96fad35e4dfdf90a9c5bdeb385f9693da7cefe5d96af6993fd23124b9992091710223e05fd52182a6b27a87c8c5b775", "7c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936440c08ad087e39b430304a4ad762f31ceefbef677acccb5a06e2c9abe9dfa4ef3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08208eae3f5bf5f4c26def68bde658fd1412dc2dfb494d39d6b1bd4ba6a274f177d9a711983bc616996e2ac47b27808b31a9b7e87f7ce1f3571999dd3a2a57f1080"]}, "failure": {"scriptSig": "", "witness": ["4d090215af9e4ab190a1dd0b82fd3a290972aa8d406638237717238d40dd22a33723616a87d580c4a856b5f3d2f2657cc1eeadf3e132f5a8733eb7e12b634d0be39b8cbee99af01aed909876a8defa580bdcab1525d41566c292ac583a885b3a10562aaf61abd5fd99e39e5e1509abef35bf9ab0ff05bdbb0120192245721deca95d3af3c7b1bd628c76e4235016af31c82d99ddf82a8f7bde46e5e8689741ff9a80fe085a56f7b5f7817de216133608ded926c44d8465c3d620b8a00d7a18d5da15e03e5b1760860b879ff57e2103f2a110a854150e6a4e454bc1c59453f02d8c5e8253a51ad005c9e73b26d21cd9d38253ddb6beae80317906cafda541cc9336b5d703c2e9d09fe7aa61dec161d987d181ed76742c396ec4e659c308e4abebddd471a16457f86eeb5e073da108b7e8b5f01be0327dd4597ef190daa232f5121b522cf7de7f4f6a34c32d99dcd829592d300fd2084025ae410cd05e54a446e42518954eb86a7c93ec9da7c67300ff14618b26bfae89383cc73694075c2ad53722193f6af5d59bbc294c1e5fd7f7e08edeae6dda6ad158f434377609b51bfb40d38af4b4e8f2dfe951fb625cf6c9211f1d24d83bc023b7bd7d79093c0828da1ab323da5bba9d86810e8bb155c66029796b904697ab5cf8eb471feaa183ce54dee4cb50cdb0e528c096ac37a3f644e5a9f91ade7ed4074c7f91972028f2116f4e9149f34a5a4cee2ed4508db875", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8742f7aec0ae53a52a244a2c0c214837ef2ff67b990e770e70b44d703b0bde01fd5e8f79d631fbf207b458b911c1cf4efab0aea5316113aa9c93bea92caa9fc9"]}}, diff --git a/txscript/data/taproot-ref/513b5b1cd7ae4a18b0684e98b8bea2445f0f267c b/txscript/data/taproot-ref/513b5b1cd7ae4a18b0684e98b8bea2445f0f267c new file mode 100644 index 0000000000..c2a74190ab --- /dev/null +++ b/txscript/data/taproot-ref/513b5b1cd7ae4a18b0684e98b8bea2445f0f267c @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2501000000fa3516db03e85f7400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a662e5a438", "prevouts": ["8685760000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["994c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367643e13e483d98b5cb4a2dd9b2a8baf365ffe94859ab503c911dc21978e6d7804c8fbf2363a77354fc9c61d01c3ea3e8806c47304e5a0571bc5a832b63c4c4c93c50effc4608d2c714b1f589c510b82e2cb4bd2fb333954004903b4f08f38a79"]}, "failure": {"scriptSig": "", "witness": ["4c5299", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef799b79a3787fcc1cc2e029bc49329c320df8be6585c07b1b866b22fbf64c2a637edb6ad97271a1ba84afbf70caa284b53510d77fb53cff70120791d9457d51af95302e7a08635545e6c64d05a20a7ff60718981ac8a997d809f6391d7b2d9241e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}}, diff --git a/txscript/data/taproot-ref/5145a2f823d50829addf9a923816226e49b73772 b/txscript/data/taproot-ref/5145a2f823d50829addf9a923816226e49b73772 new file mode 100644 index 0000000000..42253b3061 --- /dev/null +++ b/txscript/data/taproot-ref/5145a2f823d50829addf9a923816226e49b73772 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c580000000089646dbadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc10000000056ed9eb1035d779e000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc30010000", "prevouts": ["bfdd4a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a25e550000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c", "final": true, "success": {"scriptSig": "", "witness": ["829634fbe591f16cc6652c86a67cba77a6b184985d1af18139166edc4fe590f08ce8ca6b7a8e41c9c90cd53b49e3f4221044575e26fd3499e0041cf69294cc1281"]}, "failure": {"scriptSig": "", "witness": ["a6e2cdb8dbcb055cb8bff5523e2705900c6693f892078f35d623f2a922127af8a66e1a509f22b0d361382ddf77ba710aacf970ff0370f20686f2079438612c150c"]}}, diff --git a/txscript/data/taproot-ref/51585e660838f7655a9d3f8e62673ed896abc1b1 b/txscript/data/taproot-ref/51585e660838f7655a9d3f8e62673ed896abc1b1 new file mode 100644 index 0000000000..3d245907f0 --- /dev/null +++ b/txscript/data/taproot-ref/51585e660838f7655a9d3f8e62673ed896abc1b1 @@ -0,0 +1 @@ +{"tx": "19d3c01403bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb400000000d4d080ff60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700b01000000657831fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49400000000aa2e2a9604f321bf00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f871a000000", "prevouts": ["0c0877000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "894f0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "be6b3c0000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_39", "final": true, "success": {"scriptSig": "", "witness": ["ce90b7e1e1b3078f39a5ee0bf2f6f28ef7457299f4626e2a7bc3c62da383f0a494e07a07419603a3f64d2356bfe887519595ad6c6a5e755b648e07ddc82bbfea02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["00f14fca2bd71090c6f6e22b63b497a7f033b83ada84d3cd30bbca9a6897cbb84013d7d24b2b57e6bc9bc842fa74d0c110081ef00b2c69b7d93b5b0b5d3f232d39", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5159ef1765261a6a8967fe22b91be23bc4f7c672 b/txscript/data/taproot-ref/5159ef1765261a6a8967fe22b91be23bc4f7c672 new file mode 100644 index 0000000000..1e236dcb3b --- /dev/null +++ b/txscript/data/taproot-ref/5159ef1765261a6a8967fe22b91be23bc4f7c672 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c98010000002f66bab2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9901000000f66711d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf84000000001a4b64da03373c3901000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac8e020000", "prevouts": ["d1295e000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "7c9879000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "e9a063000000000021541f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00639868", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6acbc7404f4a64833bba86ae12a250fbd4270c03a4df3211800a65b426343c7b806b7a00459a4c1bc30a7ac808d25283aa8d21c996014515e9974f153b7e8517bb22a9d6ce3a4416076bcdc0e15ff24e2eba93ece471e96a0af39f5a01dd3ec6e2c0067d6235544c969c57bb6383bc4dfe8083fe3443e336f29d85bd1c9f087"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41f4c7988b5621a2b4ceb0e4a0295b5522bdaf57a14af19f5e9873d8ccb0a4f054b5563559956b4521d685614895115ff3b761ab3fb4dd1d8def3bf310bb092b594c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}}, diff --git a/txscript/data/taproot-ref/516e8f247c632cc97a34b088b9b9c5522f6b4b7b b/txscript/data/taproot-ref/516e8f247c632cc97a34b088b9b9c5522f6b4b7b new file mode 100644 index 0000000000..ed4fb6213e --- /dev/null +++ b/txscript/data/taproot-ref/516e8f247c632cc97a34b088b9b9c5522f6b4b7b @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8a0000000030d2549004c35d4e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875add8536", "prevouts": ["5912510000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f74c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e6bf3ef0c52029538d60b405bd64e2cc9734303fd934f9ee1f37723dcf17f67fbe0beccf8b53a38f7a20d51eb008bdc60f78fac094fdd23935202ece673d8622376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900455438ad321f710317d8f3678f772f8337c845de7a4601c479cd7219e318503b74fdf1522df456d7fbfe0d29a7744cbe637017dd01cd6de5bb6b2c07ed06f430b01c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}}, diff --git a/txscript/data/taproot-ref/51902d7c0dc3e60282faf7c3bed70ad3588b79cc b/txscript/data/taproot-ref/51902d7c0dc3e60282faf7c3bed70ad3588b79cc new file mode 100644 index 0000000000..b4e821a92d --- /dev/null +++ b/txscript/data/taproot-ref/51902d7c0dc3e60282faf7c3bed70ad3588b79cc @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cce00000000e19e8a348bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ef0100000011e89353dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c02000000b3dc5d44043c69d900000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac92010000", "prevouts": ["d9e6520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8f6b320000000000225120d70bb5030b4517d64d2a3c38713515b320a06334d0ff9db76c903984d8e384a2", "bcc555000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cc9987f9f1a0b217068c5915d51afe3a2b0e8487705cf8822368d5c636743cdbfb640520cc13bd7f4751eea589bfdaf463667e9e3eebb3331ccb48f0e9ad4c4d3f52a2844c5f7874c7d430ecd2ddfcfe713e30c56da5784f950db6acb8f092a"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1360c8600b70daaa5cf8f525cd2d4abcf69506a056a119fd926e23bd8684708da0a67b80b81ed02a57999348bdd390384d424a2522cd0278ffab5313e035bd402791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}}, diff --git a/txscript/data/taproot-ref/51cb6bd8e208996ef5816ab2e4a5f0a4392acd9f b/txscript/data/taproot-ref/51cb6bd8e208996ef5816ab2e4a5f0a4392acd9f new file mode 100644 index 0000000000..5428630041 --- /dev/null +++ b/txscript/data/taproot-ref/51cb6bd8e208996ef5816ab2e4a5f0a4392acd9f @@ -0,0 +1 @@ +{"tx": "a54aff3a03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf37010000008bb7459d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702700000000a6f955b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b590000000057ec95af02d213ac00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689873f816d5e", "prevouts": ["87ab7b0000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50", "d308130000000000225120efe1fa8c8643b06748235620ecfbc876727366244fc928e9c2000087b14324f1", "17ff1e00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368191df1e8a6412a9133547ec8d3321f9af52362f72a65d356b4413964c57ce831e80b1f8b709fd7e9f8915460d72d278aa0d12452680dedc295e1cc62d069d9c5f8b38696f7f521c781f821b55aa4ff86c04fbebd102ad129a9d47907becd36b4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5183e343f15a28f9ad1157957559cb0b6b8ddccd5d64405c8ba15aa31cdad4142c00ae7d77688765097c61dd6dc7203a99b1de19633b0fe895af4a245d0fe1ab9735478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}}, diff --git a/txscript/data/taproot-ref/51d22c9e318035b292b06c7e92cff7a7dcd2ef46 b/txscript/data/taproot-ref/51d22c9e318035b292b06c7e92cff7a7dcd2ef46 new file mode 100644 index 0000000000..ba600f1a7f --- /dev/null +++ b/txscript/data/taproot-ref/51d22c9e318035b292b06c7e92cff7a7dcd2ef46 @@ -0,0 +1 @@ +{"tx": "faa2764402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c11020000009f2c27d5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b77000000005ce06ec703e2aa73000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6fb35962b", "prevouts": ["7b284e0000000000225120e0ca4cb327604d8bb54d855256413a632bce5e2185126ca2f73680d7829d5a91", "ad77280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_1e", "final": true, "success": {"scriptSig": "", "witness": ["97f4f2cfd939ddd0434001233b05794237a4d684cdb12fb123f26584e9bed16d1659f6fa989a7665f51ec2dcea27584c6e7f3f67c3d02d5db126b8be3a69a4a703"]}, "failure": {"scriptSig": "", "witness": ["e3e0778281cb047d0c31055580c8b439d833aef9225ffc93a89ae1e045ae7fdd93c88b9ea86cfc0fa20f20d804ed853db1bc2a8c6e93371f82db4262f6d895531e"]}}, diff --git a/txscript/data/taproot-ref/51df77e1f5047cc73d62f6a82b06c76b2f2dfcf2 b/txscript/data/taproot-ref/51df77e1f5047cc73d62f6a82b06c76b2f2dfcf2 new file mode 100644 index 0000000000..c447a5881e --- /dev/null +++ b/txscript/data/taproot-ref/51df77e1f5047cc73d62f6a82b06c76b2f2dfcf2 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c78000000003e1cfcb0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c87000000004eb3e1eebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf930000000022a849d80147e877000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487a8000000", "prevouts": ["f2d35400000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "17484f00000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4", "72f17a0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "087d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa55b45b3af2af0c7a238665fed9a70950b75abf30a3f75b50a7b1cc61308c32d3371e41a07562523a12648be26bdba66be78ce7e249298c356e66cf29847872e0"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08281f944ef569cf36d808a56aaa75ca2fdbdf4182c26b1d87989a6b5ad676759bc691c2a9908d9e7287fb91837cd9c32b2a21ac331bb306f4648aa27bb40422e45371e41a07562523a12648be26bdba66be78ce7e249298c356e66cf29847872e0"]}}, diff --git a/txscript/data/taproot-ref/51f4a12afbc5c09d84488a09c1ec4fad2f8ad55b b/txscript/data/taproot-ref/51f4a12afbc5c09d84488a09c1ec4fad2f8ad55b new file mode 100644 index 0000000000..2ee0582420 --- /dev/null +++ b/txscript/data/taproot-ref/51f4a12afbc5c09d84488a09c1ec4fad2f8ad55b @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9400000000c44b13eadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0401000000a6db52abdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c54010000002c43129203bb4104010000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6b86cdd5a", "prevouts": ["b93560000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0", "27ca5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "17f34800000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_csv", "final": true, "success": {"scriptSig": "", "witness": ["39d172cedc87521fd3bd91d949348abc24a61074248eae2c541efab24fe7ab4ba11e64d0aba143b7b86543d0ef485368b7b3a002a8bd5f98bfb00c4620bf61f7", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313ddd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["39d172cedc87521fd3bd91d949348abc24a61074248eae2c541efab24fe7ab4ba11e64d0aba143b7b86543d0ef485368b7b3a002a8bd5f98bfb00c4620bf61", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313ddd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/5201220ebf5a752ed230ba1c4660d6768ea0ab37 b/txscript/data/taproot-ref/5201220ebf5a752ed230ba1c4660d6768ea0ab37 new file mode 100644 index 0000000000..8f2917f7ef --- /dev/null +++ b/txscript/data/taproot-ref/5201220ebf5a752ed230ba1c4660d6768ea0ab37 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1f00000000624a02eb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127095010000009ed305a30279d36200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac70030000", "prevouts": ["fa02520000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "73761200000000002251202ea95065368f678e25a669a7906e1051ddb7c321fda55e7bd6b39829f3117b75"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93605468d6fa5e4634f58d2d208976b5aab4a73e083c36d6c2e411848e44297e02d"]}, "failure": {"scriptSig": "", "witness": ["6a3a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/52406f743dd8cf468c8739e0e49a5e8c2abe890d b/txscript/data/taproot-ref/52406f743dd8cf468c8739e0e49a5e8c2abe890d new file mode 100644 index 0000000000..dd10e3ac3c --- /dev/null +++ b/txscript/data/taproot-ref/52406f743dd8cf468c8739e0e49a5e8c2abe890d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6900000000070fc07ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf680000000062cb832204efafcf000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2c000000", "prevouts": ["0697650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "24df6b000000000017a9149d4bcb1ed806c9beed692a78614f8b90a68c708187"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21571f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["522e46c0721863b9e3cb7bde3b95912a12c893d3166766d12d02c50c88cf2c328c62350de66dd9e6ea9d65b61b1b69b771583fb4afa450d9a9c5b28b82bd164a", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/524a8fbae511284a4b3feffd7e69391eebfe5fe3 b/txscript/data/taproot-ref/524a8fbae511284a4b3feffd7e69391eebfe5fe3 new file mode 100644 index 0000000000..4b495282c5 --- /dev/null +++ b/txscript/data/taproot-ref/524a8fbae511284a4b3feffd7e69391eebfe5fe3 @@ -0,0 +1 @@ +{"tx": "2922ebe703dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb9010000005c19b4fedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b13020000001998e48adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b010100000093d904b504fad96600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac67c6fe2b", "prevouts": ["deda1f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5841230000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "70472500000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6aee", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f6f920dc9dcb98ba04cff112f583969b4fa240bedf781759d6b6e0f2e74eb7fa05e01deb44bf60eeaa09a037ba0d53221083944f657819e2d2b55bb732cda3dfdd207214d6df2d18dfa237afd6016520e9e6ed6636ebebd182087bb183877c35439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d8657209b8dfaa69151d05ccddc10c8c1e468eb7b78f9ad17f99ee1b916fd61bdfbcfce40899fd8696dac9e3afc960f0a100b615a3c324ed3a125e98af98336f748ba56"]}}, diff --git a/txscript/data/taproot-ref/525afb4266fbfcb9a9457044ffa429e6345aca74 b/txscript/data/taproot-ref/525afb4266fbfcb9a9457044ffa429e6345aca74 new file mode 100644 index 0000000000..bd2e90190c --- /dev/null +++ b/txscript/data/taproot-ref/525afb4266fbfcb9a9457044ffa429e6345aca74 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4a0100000084436a61bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc500000000b28535d6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd2010000007e9916a503f4c94f01000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e77c000000", "prevouts": ["f56e7400000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "259f7f0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "acbf5e0000000000215c1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["8a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4572db529171a47fc33c2e4ee960be7fb9400c27bdb6fae7dcdae272f7c7daab09b045cee6f1e54629d213b8dbfcd9de8aba2dd7f34fe21c75d81b8576e463c6b"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045141ceaec0b62943b85ddb54ef2037615ee2bfdc3c88602ea27aeaa6ef1c2e0ef6e427c91532996b84ed2c37f8a26be8637de11530a49bfc255181ba6103e3464915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}}, diff --git a/txscript/data/taproot-ref/526b41de4d7b2b6cca5b8cca2aff4e05e1edd180 b/txscript/data/taproot-ref/526b41de4d7b2b6cca5b8cca2aff4e05e1edd180 new file mode 100644 index 0000000000..f26bd58a60 --- /dev/null +++ b/txscript/data/taproot-ref/526b41de4d7b2b6cca5b8cca2aff4e05e1edd180 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cb00000000e2137298bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4b010000003490f9c1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5901000000e9b952fd0237c4c2000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898757020000", "prevouts": ["30081100000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335", "bc186b00000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "22bd48000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "e27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b1d764645ac829a889ede7ad8db127382a24af0c39e10b540dba9512d84645b5eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7acec7827d9bc9e4e8e39cc141cf7690ea6843d6b50eda1fc8d5571fb149b2aabab"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367c93f7c29ee74358d9798874b9f1b1bb2a78bb36471717798dde9f0a020d10aae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8512c582a906b097cf6fdaec64d2651566eff10d9e5eded90f3aff95e690654e4212021a26ea5e00fb993aa3d0fc1bd1e431f365db69035b8e4625845fc9b697c"]}}, diff --git a/txscript/data/taproot-ref/528808e08755d1c4badf200ea1e46b471e697367 b/txscript/data/taproot-ref/528808e08755d1c4badf200ea1e46b471e697367 new file mode 100644 index 0000000000..f524f43a63 --- /dev/null +++ b/txscript/data/taproot-ref/528808e08755d1c4badf200ea1e46b471e697367 @@ -0,0 +1 @@ +{"tx": "ec6f545702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9e00000000a8a25b8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705000000000f22c0df9034f438b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d3020000", "prevouts": ["85f87b0000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "97f8100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_56", "final": true, "success": {"scriptSig": "", "witness": ["4df118ebbf8fce9da1d6256db5a49c86b2be621827c36591ba5dbb47b8b72795d0d5ce31638322488a9e35909f70df7b8caba4d07418e26742c5863e90ac10d601"]}, "failure": {"scriptSig": "", "witness": ["943060a8657df6697aa72fd099b4c197987b2896f09ff25bac8696a619a8ac4034766042a89d3e7aac55734e897069c03558557deaa09c5fc15a85ed42d6f02556"]}}, diff --git a/txscript/data/taproot-ref/5292dd4bbfc4ed134ecca359a50042487bdab8de b/txscript/data/taproot-ref/5292dd4bbfc4ed134ecca359a50042487bdab8de new file mode 100644 index 0000000000..2449e979bb --- /dev/null +++ b/txscript/data/taproot-ref/5292dd4bbfc4ed134ecca359a50042487bdab8de @@ -0,0 +1 @@ +{"tx": "d97d1cfb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46601000000d2c0dabe60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703900000000021a8ba701f3112f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964a030000", "prevouts": ["4aa7410000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "15ab0f000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "99", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364d586cb5de2dd3058dd7e227544d59b90431907c0aee9f3c45dbe5cd5ada47d3637edb6ad97271a1ba84afbf70caa284b53510d77fb53cff70120791d9457d51af95302e7a08635545e6c64d05a20a7ff60718981ac8a997d809f6391d7b2d9241e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4db2b7303d128165c3aee76333e625284db46e202d1b30be35d2598f7d6b886c0b317c85b837bc971133c463a5a02b3e438f62c623f33a660d87550a4209620af95302e7a08635545e6c64d05a20a7ff60718981ac8a997d809f6391d7b2d9241e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}}, diff --git a/txscript/data/taproot-ref/529e15d7495022b3928ad252f217ff7066f4a8c4 b/txscript/data/taproot-ref/529e15d7495022b3928ad252f217ff7066f4a8c4 new file mode 100644 index 0000000000..0cb8d34b7b --- /dev/null +++ b/txscript/data/taproot-ref/529e15d7495022b3928ad252f217ff7066f4a8c4 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c409000000009364ac4260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ac01000000ed34be6e039fbf50000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709310e52", "prevouts": ["e41f420000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f4301000000000002251205fbb8ac28e580fb39d87ab9ecacdc52316773607abc8ac10a5707b0a5a311000"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["5a0ba866675f7dcdd69fa812d8bc0b7100417c09ed26f11d1fb1ccfed13bb8753885813c383a73f49a51bcc12c9a797e6834d60a411e3a3610bc9402a8c57bb401", "3fa4524396f75e78ea91e3f7665db7f8cf5e898b2c61d61c31c5785ccce34b72d1b26bee966617925934b5d796b60c04fdc6c69f7f1b4cb888ff0a89c3b3371f2ebd1303f3f2bd8a9f20fc3d45bc87817b1212b702c8f759e11e1ae29c98f921debd49d34f6fb4c98830602b73d94de9275c5973b3c64af620cc48aaa400ab8bf5f11e7aa5c75f9f4c9975", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ffe2f9e7651e9c582230805dea6ab3f770391f72340882880a9a66d58587497760d14537d26c6420044fa8ebd38475257ff2b21d84f4b8d09ede551234536ca57d36b4a575814cf54685ac704a7dcbc10721e1ec740698e9dcfb57c35e77ff55a5c396eed87ff772ce52825cdc495e9c04fb7ca8a067211a005b28f4578544029f842240c645949adcd0f10466b378902fb744c393ba4780cc2212b976ce07bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c091b0614ef7942ac3712e9340eee8de2b5d5360d8f858faae197db1531a93d6188a98edee7ef4d72517cf453882e06807799415dfcb5fc26feb6712d5c215a9b05904167f78bd9da3adac10f2f4122c09e9f54abea648caad3c3b7e1f8aa100000000000000000000000000000000000000000000000000000000000000000d342f30abe252a2fc4ad53d00a9b547116ed2eac0fecb6536d542fb489aeb9a54016aeba8dd7ac26ace25c63f13a80d6dec050bffdddb0ac77cece5e83ecd21"]}, "failure": {"scriptSig": "", "witness": ["5a0ba866675f7dcdd69fa812d8bc0b7100417c09ed26f11d1fb1ccfed13bb8753885813c383a73f49a51bcc12c9a797e6834d60a411e3a3610bc9402a8c57bb401", "f0957755a9ca78dacae97c846fb0e3cf28c9561039ebc678c0c906641e97e75658c56d147d7ba53e6b7836bd7a3ce46a440103d137bbd3cd04574d165af7bd6d0ee056a29418370dab98207c63413ab8ef2e8c3afb82fb86dcf40bc3d65927b34aed6b5f5e5c18e715f2bb01de0606a5f6aa23b5bdadb6093a54952f989b844035f3d480247fd9413a39", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ffe2f9e7651e9c582230805dea6ab3f770391f72340882880a9a66d58587497760d14537d26c6420044fa8ebd38475257ff2b21d84f4b8d09ede551234536ca57d36b4a575814cf54685ac704a7dcbc10721e1ec740698e9dcfb57c35e77ff55a5c396eed87ff772ce52825cdc495e9c04fb7ca8a067211a005b28f4578544029f842240c645949adcd0f10466b378902fb744c393ba4780cc2212b976ce07bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff73c091b0614ef7942ac3712e9340eee8de2b5d5360d8f858faae197db1531a93d6188a98edee7ef4d72517cf453882e06807799415dfcb5fc26feb6712d5c215a9b05904167f78bd9da3adac10f2f4122c09e9f54abea648caad3c3b7e1f8aa100000000000000000000000000000000000000000000000000000000000000000d342f30abe252a2fc4ad53d00a9b547116ed2eac0fecb6536d542fb489aeb9a54016aeba8dd7ac26ace25c63f13a80d6dec050bffdddb0ac77cece5e83ecd21"]}}, diff --git a/txscript/data/taproot-ref/529e417f9521111e7e2b214bbe3a009fb241e0e3 b/txscript/data/taproot-ref/529e417f9521111e7e2b214bbe3a009fb241e0e3 new file mode 100644 index 0000000000..a5f84064e5 --- /dev/null +++ b/txscript/data/taproot-ref/529e417f9521111e7e2b214bbe3a009fb241e0e3 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4b00000000f912b3eedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5001000000e0efbb9d02305ac300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e775040000", "prevouts": ["b6b17500000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "bb5450000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f64c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e88526c13eb9f3ceda07aab2d6470ded7d71666b865703d69a451a4808570d93ab836f202d3609bf617cb7b4b7700532182ae3d2e1a09e3b3f38346196fd93b669cfd1883d9d94906422bb83623918edcd109683f826bcbf676882b31fdcf44192fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}, "failure": {"scriptSig": "", "witness": ["4c52f6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936061ea1cc303ae48ba58384e29824bd453e270f0d0a8b7b8fddbb1c01a6802b543f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bc80a3081e946651089c17942e2d2b7e0a2ba8b51162f8e9c4f29cb18d1603310a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}}, diff --git a/txscript/data/taproot-ref/52a46ce5d115709464d927bd868cb66e64d5d890 b/txscript/data/taproot-ref/52a46ce5d115709464d927bd868cb66e64d5d890 new file mode 100644 index 0000000000..07d5ec4882 --- /dev/null +++ b/txscript/data/taproot-ref/52a46ce5d115709464d927bd868cb66e64d5d890 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cb01000000cd9868e9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2b00000000cd3ed02203b4d76700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc734010000", "prevouts": ["3a08110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ba875900000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_9a", "final": true, "success": {"scriptSig": "", "witness": ["bd641174c8c9d5a320e5848603ee4e052442f7f72c6f46d5ed22e6d04533eaf85a42c05a9c170a3878c85512200e1192bf09ffcf7342394b41a1531d5a22520682"]}, "failure": {"scriptSig": "", "witness": ["a34328a2f6bae8f0c91edda5b2a87d6da408b1ab8ad1df672aee3e117bb732e8f30fb29a0509c41ca5b824d31b06f63143b7edf0be8f5317169ca7602f9e795e9a"]}}, diff --git a/txscript/data/taproot-ref/52b71f15e64724663db04868b953a0dd6f8ab01a b/txscript/data/taproot-ref/52b71f15e64724663db04868b953a0dd6f8ab01a new file mode 100644 index 0000000000..3269065b13 --- /dev/null +++ b/txscript/data/taproot-ref/52b71f15e64724663db04868b953a0dd6f8ab01a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce90000000060bcc3aadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8b01000000049096870147a1430000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d32e1233", "prevouts": ["141a590000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "33cf5e0000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "62", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8b553b0a6fa8101b21fae89df5dd09b18d30a3ef06025a3f9cb6b07028f8b60ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2a28c39ce330a19a0d6c22ddc640bc3609271e6194de475fecd1ad84a88d361935a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93608efc3524da3cce9064a39cd829c421044a59a48c5000df9ec45b645663b2d3865d6469ded31e8361d538153e3993104db0c9d480dfc3dcfe9dd6d2fbda5f8f6abc42ab3738335b78a2a7135de763706b017ef32cb75bc24ca1210f74f6e5b7b3fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}}, diff --git a/txscript/data/taproot-ref/52c7e56d194272214280372b7dbacf979b86a714 b/txscript/data/taproot-ref/52c7e56d194272214280372b7dbacf979b86a714 new file mode 100644 index 0000000000..971719a72d --- /dev/null +++ b/txscript/data/taproot-ref/52c7e56d194272214280372b7dbacf979b86a714 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8b000000008783f9a3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf850000000061d3980c048f94c6000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7f11eac39", "prevouts": ["ed4553000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "e55075000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["eb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936548e02ba2703ccddc552600e93f0a288f5116c529acb2e0434ef3486de3078ba3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821e09e6d24dde1e7a9afb38743b4c2dd55dbb58a3a1803a82bc7b3a42584fec8fa9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b965c838716597843dddd943276d0695a7197e96f70841ed980463eb99376fe31e09e6d24dde1e7a9afb38743b4c2dd55dbb58a3a1803a82bc7b3a42584fec8fa9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}}, diff --git a/txscript/data/taproot-ref/52da571031bbcc150454dd6be63a21c6a2dca5e5 b/txscript/data/taproot-ref/52da571031bbcc150454dd6be63a21c6a2dca5e5 new file mode 100644 index 0000000000..e277a30d5f --- /dev/null +++ b/txscript/data/taproot-ref/52da571031bbcc150454dd6be63a21c6a2dca5e5 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0e02000000dfbf3a19bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa10100000034a2a0af02fe7ad10000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487dac0f83c", "prevouts": ["fef26900000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "568269000000000022512030fd389dfc6b7dc5f4caf58ddf04b54dbb338c7b69e334c29cccf1a655d02655"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "8a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4572db529171a47fc33c2e4ee960be7fb9400c27bdb6fae7dcdae272f7c7daab09b045cee6f1e54629d213b8dbfcd9de8aba2dd7f34fe21c75d81b8576e463c6b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045141ceaec0b62943b85ddb54ef2037615ee2bfdc3c88602ea27aeaa6ef1c2e0ef6e427c91532996b84ed2c37f8a26be8637de11530a49bfc255181ba6103e3464915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}}, diff --git a/txscript/data/taproot-ref/53045f62216e6dd1d7b2d1c05dbda813f59f4d38 b/txscript/data/taproot-ref/53045f62216e6dd1d7b2d1c05dbda813f59f4d38 new file mode 100644 index 0000000000..129001df8f --- /dev/null +++ b/txscript/data/taproot-ref/53045f62216e6dd1d7b2d1c05dbda813f59f4d38 @@ -0,0 +1 @@ +{"tx": "cc2a29fc03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8901000000c830c9abbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff100000000746406a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9601000000bd8ec8fe0286b12d0100000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cc349424", "prevouts": ["6a2b66000000000017a91408247b8d3db4e641d0be1ff23f14280256870a5187", "2f55760000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0074530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_9", "final": true, "success": {"scriptSig": "", "witness": ["6c638ac7586e761b5544b7fa32d337502bf5593dcba4a8c48c81cfc9ae0af979c571e472a0bd876885ff99d9b93c69ba5829a01b2d479f6b665ec66aaca1efc083"]}, "failure": {"scriptSig": "", "witness": ["108737c5062c0a93d00afc4fc86c180d11ead1f580c3f58c6a58fb53d3daa06c94ecf752a742bda7ce980b1ba1a4a6fe745a367d21bc92075562df5e2671b9ee09"]}}, diff --git a/txscript/data/taproot-ref/53090ff0e10b029e37a0eab690a757a5f4c346ea b/txscript/data/taproot-ref/53090ff0e10b029e37a0eab690a757a5f4c346ea new file mode 100644 index 0000000000..9b9924c338 --- /dev/null +++ b/txscript/data/taproot-ref/53090ff0e10b029e37a0eab690a757a5f4c346ea @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701c01000000ec402aaadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0c01000000553296460139f8080000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79629030000", "prevouts": ["dd961000000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7", "f5212600000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "f47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa44a76e856afdfa077951e950d1b00a9b743b1044161111d30eb56bfa7ddab902890bfc944cea42013591059ba9f4ec0a95c62699d2133b38017223ef90bcb8e42b4a87a36ff2ed7228bcfc2438815b30cc1c98339504e1b834e10aaf4a034051"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936132265c4b43f7fbce1d2c14e001e4966ccfecb1b0069f6ee6ebbb69457f7bb48760cc2203422c55a835172c125a7e245d244f5477158f1701a7cdf5578cf79bddefbee90a18838bf61213a4f1f5f31a75e180b842cfb60d5f81d26cbd38f8652876f4540117e7e2fda63f7a015ec774d613b8932caa4388fa9ce7145d42cc7f6"]}}, diff --git a/txscript/data/taproot-ref/530e0b9098674994a45495cf1eb8c3fd36b04ef3 b/txscript/data/taproot-ref/530e0b9098674994a45495cf1eb8c3fd36b04ef3 new file mode 100644 index 0000000000..b2635d0e08 --- /dev/null +++ b/txscript/data/taproot-ref/530e0b9098674994a45495cf1eb8c3fd36b04ef3 @@ -0,0 +1 @@ +{"tx": "3c688b8f028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c501000000794a30f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c30100000090cacde503a0306f00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a61e4ba658", "prevouts": ["83f8390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8c143700000000002357212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["e9440ccff55d93379936d095be283dffe5541de496e585ee7250bbcaa943ffab41aba468e5c0aecd6a12d830b424289f15b0a5564fdc86e42e7f72d95df28f99", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/53123aee1da68a8b9619edd5140ab5c6aae10886 b/txscript/data/taproot-ref/53123aee1da68a8b9619edd5140ab5c6aae10886 new file mode 100644 index 0000000000..0c3ba945e8 --- /dev/null +++ b/txscript/data/taproot-ref/53123aee1da68a8b9619edd5140ab5c6aae10886 @@ -0,0 +1 @@ +{"tx": "861025b202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9b0100000044a148f28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a001000000788338a8029f0189000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acafa0f542", "prevouts": ["2c4f500000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e", "af973b0000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "7b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8e069ba5eeb0bec6bb336aeedfc480da3e66ab61ed5906063fe5b68f45dcb12952affe3792374ee751e9779d236e331236b2211c0285bb070b7e5d58aad1c033f64fb6de85916ce1333b57715a419fbbb7fd448155796c8af09a2e4a2bc14d947"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367588a9e23979d821fd29244dca8e20c36f5fbf7a2828b65ef7678089e87c8fd3565447efa486312fa493bc3efa8d0ca00e2c766484411258b08f0fec6b85156cd34322f35809060e9857f404c38bdcaf402c3d07c78e42a3b4d1eaa304dca88a"]}}, diff --git a/txscript/data/taproot-ref/53234e0beefd772757294c48658a6fb1b632e5f3 b/txscript/data/taproot-ref/53234e0beefd772757294c48658a6fb1b632e5f3 new file mode 100644 index 0000000000..517f71508f --- /dev/null +++ b/txscript/data/taproot-ref/53234e0beefd772757294c48658a6fb1b632e5f3 @@ -0,0 +1 @@ +{"tx": "d3ff18670260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127077000000001de5cfb8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6200000000bb5121f804c76831000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac74020000", "prevouts": ["23940f0000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "a9962300000000002251208cf8a45f10f972ce0940452c1be98364c363db2f13613d49d474bd7709bf6664"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe92aff70a2e8e2a4f34a913b99612468a41e0f8ecaff9a729a173d11013c27e"]}, "failure": {"scriptSig": "", "witness": ["6a4f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/5349c13d7b8dd8f692718b4ef221a21825fb04f3 b/txscript/data/taproot-ref/5349c13d7b8dd8f692718b4ef221a21825fb04f3 new file mode 100644 index 0000000000..d7e0aa66a5 --- /dev/null +++ b/txscript/data/taproot-ref/5349c13d7b8dd8f692718b4ef221a21825fb04f3 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b100100000018a6bf8ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc8010000001c25910902ab3e8900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875502f91e", "prevouts": ["12271f0000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "ba146c0000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "227d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93669991cc2f674abc382d5045b0eb857568d5c7aee4d0cb1a298fb8e785822f7d86b7b535eacb46044525b0033e262a0686af8b44a8254e1701bb4a9d0d605b263fcb15428af69077ee4e47ddc8bd2adcf7d97a29fc56c75a24a213a103a1e3586"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f4576a45def9951625cf02c88598f8616d12bef3cc01ed824d79a70edf31b7fbe0e1a4a9bce64ad1fc5af22ad5621933415c83e23766bbab20239912b691ace9dee2"]}}, diff --git a/txscript/data/taproot-ref/5366b2cab843c6f4979214e27b561d35321bd2a6 b/txscript/data/taproot-ref/5366b2cab843c6f4979214e27b561d35321bd2a6 new file mode 100644 index 0000000000..01862ae476 --- /dev/null +++ b/txscript/data/taproot-ref/5366b2cab843c6f4979214e27b561d35321bd2a6 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43b00000000ae08b4eadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c51000000007a44b5c0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b640100000061c4ffd403bdd4b60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac57010000", "prevouts": ["f0d03b00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "96d759000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "3c68230000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "de7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8856e164d8f95680a310901239278cf924747110c023e5c9b2077227ee61e12b7ac1d0874bb493d5b277fe586a1908760dedf191b70e37bd9b06448d9d8257f0a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93622949a7a9280df6a303321d653363fb1d0908af0005974b2d136602a67fd77b5827b55d11351c6fed41de6d200bca95500243dcc7874125f5161f5be208848f0ac1d0874bb493d5b277fe586a1908760dedf191b70e37bd9b06448d9d8257f0a"]}}, diff --git a/txscript/data/taproot-ref/5379718fd6733c3194547aea3041303f46159862 b/txscript/data/taproot-ref/5379718fd6733c3194547aea3041303f46159862 new file mode 100644 index 0000000000..1623271144 --- /dev/null +++ b/txscript/data/taproot-ref/5379718fd6733c3194547aea3041303f46159862 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0401000000bebd38a7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbe01000000ba854d0e04f3d9d10000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e790000000", "prevouts": ["474f840000000000225120ea467ace5d4e72e4b47248d08b4c7e21d4858a06bc17e94ab3d6153139c60e1f", "ee48500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_99", "final": true, "success": {"scriptSig": "", "witness": ["2217ca85f3cb5cf73759214cefb7c16ca214c69645df3c0601a0e6f2c28b28230e42ed2eeb67f3d0fdfe39b2b9daae238c68b07a4b11981d704ee41b0c35679683"]}, "failure": {"scriptSig": "", "witness": ["f7350416c0ec992dc10bab3387eefc5b0af7bef73c8dfa126aff9945e90642259910a0ca9c08f119ea96fb174da4381f41f15c63d5be20303b6efe53b3e78b6599"]}}, diff --git a/txscript/data/taproot-ref/5394689c5e237d677fa75daa48d897e73a858ecf b/txscript/data/taproot-ref/5394689c5e237d677fa75daa48d897e73a858ecf new file mode 100644 index 0000000000..c036804c3a --- /dev/null +++ b/txscript/data/taproot-ref/5394689c5e237d677fa75daa48d897e73a858ecf @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b600000000e9c7f4e6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcc00000000ae03d8a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b63000000004e7e6ee9020bc17c00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acc8010000", "prevouts": ["529f330000000000225120973a94e36a4a923b8d161b8fe153210f91b56b5e4fa7540d30da78859ffb8897", "1b20280000000000225120035d0d8894332b18eeb5087880b9b7fe7a878dc0e9a501d9b85908b60f4f194b", "d2c2230000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93687582901ac4ef6d8d45b4369f7aae1f1005d5e2602d38dd61436b2bc7435277b"]}, "failure": {"scriptSig": "", "witness": ["6a51616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/539798847b99eee00985bc1951275a98b55dd7fd b/txscript/data/taproot-ref/539798847b99eee00985bc1951275a98b55dd7fd new file mode 100644 index 0000000000..24e2adb643 --- /dev/null +++ b/txscript/data/taproot-ref/539798847b99eee00985bc1951275a98b55dd7fd @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700100000000d4506fd8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0100000000c19213868bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4df01000000e0a85df0028455cb00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acece8b33d", "prevouts": ["2e421200000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "1de97d000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "8ed73d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a98", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a9afd50783ddcef84deb29fa414f257c4b095e802047876f95e359846f2205c3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082241df2003654f0fe7fc4600eb797dff990a6f251f130f49fda58fcd5b0cbb08c94c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bc9bcf9ff3721a7f1ef5fd55aac47b8aba67e27589b60c20b5d7827ca859f31020e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1390e5640971602922d6b073671c4e08980ecd1f17d1da07e150f68606efdd1f96e2c0067d6235544c969c57bb6383bc4dfe8083fe3443e336f29d85bd1c9f087"]}}, diff --git a/txscript/data/taproot-ref/53a808e42f754a6b97d63d9648f1e9a70ef36421 b/txscript/data/taproot-ref/53a808e42f754a6b97d63d9648f1e9a70ef36421 new file mode 100644 index 0000000000..ddd672514e --- /dev/null +++ b/txscript/data/taproot-ref/53a808e42f754a6b97d63d9648f1e9a70ef36421 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703a0100000094624dca8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ba000000007ee534a402fc76420000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac6f5cb72e", "prevouts": ["1ba20e000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a", "c868360000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["854c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a8a30cc5f8be195df182d3a0e5016923565d012c99df51a6809fe7dcf26e6445717b4e30a5884e3e55754911c167a338fe4fe766d1d9ad9fb23fde5d0da8b2aeb2a240b376911c9876b3695f79f395ec3f2d97b1695e5c0e7f397f1ed982e79a1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f59837e6bc6752c676e29f45f07d44939857c9cc64ab4a8a9eb8303db51aabd13f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d4e60e987dc96ee5dbea4bc309cd424f3f3a0504752ed5a5936e8ec363297933734b3a7050eee065844830ad8d45a710891f78004f5e7f35b8fd72bf3ee94449"]}}, diff --git a/txscript/data/taproot-ref/53c007e4c811059c16e10ba22c2b8c0f4ce3d99d b/txscript/data/taproot-ref/53c007e4c811059c16e10ba22c2b8c0f4ce3d99d new file mode 100644 index 0000000000..306d3c2c8f --- /dev/null +++ b/txscript/data/taproot-ref/53c007e4c811059c16e10ba22c2b8c0f4ce3d99d @@ -0,0 +1 @@ +{"tx": "9141e8fb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c431010000009eecc698dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6a00000000ac6348d004e56f6200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca6173146", "prevouts": ["83e83d00000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "f83727000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "047d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93640482c4914218b901d904c5b510a4de9c03c595a6755b9edceca77409a5698b30d3ad511cf44769b6705694216a5b431b28318b130ebf832e7f6887216fa315d1a343680beaae3fbea53ecc49afe7cbe880992a117d636f336d7d159be7b446d"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936518a056f01b645db024b67c94355cf052bf827de3bece4ad5970bab770c22e93b6863138d45c5b9211ebf4039595f6572b1b39ac7fa7faf75aa7045d3f3541879de556ac6994112f2dbe51e2f18419f84f5e3afde46d5119f13558b672a3f6371a343680beaae3fbea53ecc49afe7cbe880992a117d636f336d7d159be7b446d"]}}, diff --git a/txscript/data/taproot-ref/53c3edf3601218d001c1e5074a2e608ca903fa25 b/txscript/data/taproot-ref/53c3edf3601218d001c1e5074a2e608ca903fa25 new file mode 100644 index 0000000000..3e1aa777ba --- /dev/null +++ b/txscript/data/taproot-ref/53c3edf3601218d001c1e5074a2e608ca903fa25 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701b000000000f33c6c8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8c0100000053d675bb027de5770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a63f6b2736", "prevouts": ["a2ef0f00000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9", "b26b6a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d1", "final": true, "success": {"scriptSig": "", "witness": ["2c734fe30938a19b22485defb62be791440be6d0aa599f5238ee0714ad4c25d82e1d8e254d9aea29b44addffe7aa101149b6b19e0f9b404f25c58aacefca61b603"]}, "failure": {"scriptSig": "", "witness": ["8e21721e91f7e17c912c1a6b87a900441dbd454d64ec58af73ec487ae16932560e3b85baf59e3bf28f84eca67a04f2e7ed9724fe715b715da2a6834998082b69d1"]}}, diff --git a/txscript/data/taproot-ref/53c8c5901bf8077df2161336a0fc9a5f774e1a5d b/txscript/data/taproot-ref/53c8c5901bf8077df2161336a0fc9a5f774e1a5d new file mode 100644 index 0000000000..0bf7d3e195 --- /dev/null +++ b/txscript/data/taproot-ref/53c8c5901bf8077df2161336a0fc9a5f774e1a5d @@ -0,0 +1 @@ +{"tx": "b063326b03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfd00000000d54304dcbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe900000000f78d71fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707000000000eeb7db83038ea0cc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689870b010000", "prevouts": ["daa652000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "f0016e0000000000225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "33870e000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "47304402206106ae63e7694ce86de3b32116175b3dc9faea35b32d1297ccc318332809ed5102203dbea36aa72c14dd19fba22971c865a95fd3e274968beaed784b73840b9007bc014104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "47304402201f971571ea8ee83397460eddb6fe47273155118e0dcffcb2ac0c493ca72511630220230d82887541d8d43784a193f9709e4eddd44afee0282c75a80948a3ff860e2d014104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/53d0cafdef4e74e058c9073bbd755b723f71207d b/txscript/data/taproot-ref/53d0cafdef4e74e058c9073bbd755b723f71207d new file mode 100644 index 0000000000..b5c6ec7fe0 --- /dev/null +++ b/txscript/data/taproot-ref/53d0cafdef4e74e058c9073bbd755b723f71207d @@ -0,0 +1 @@ +{"tx": "9cb7d226028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e800000000505ce1bc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43601000000043fdc9a0412077300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689879f020000", "prevouts": ["728d4000000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85", "e467340000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "107d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4ece29f6647eca10734c36d2b2a9c99580ea1b3b4606d409e3d27a25628f10946c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada7506a3091a1e28dfc5b9aac4646748f840add9c91a317c4120c5f1dff96d2e4520b5ceb13d27db1b37ec8ee9ee9482aafd08fc62c5401b1fb7c7b4ff374c3d"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f97335490236408107edf93c51ed34034fbbb8ad4f6b9a196e596f5650c1ecaf6665110f53a885bff43176a7d7b6b195840e7c84801cde818ee8fcc4f3857331bd940ade039b405c8439b762bfbc73f9441ef227e6f687b6d94ebcbac32155c7"]}}, diff --git a/txscript/data/taproot-ref/53dc16200f550b0ebabb6c5c132ae4191e1a1482 b/txscript/data/taproot-ref/53dc16200f550b0ebabb6c5c132ae4191e1a1482 new file mode 100644 index 0000000000..8a69945160 --- /dev/null +++ b/txscript/data/taproot-ref/53dc16200f550b0ebabb6c5c132ae4191e1a1482 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2c00000000e3fc62ca04a5c95c000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47878d000000", "prevouts": ["47075f0000000000225120c766455b5ae5e195764c9b332b78d097f842c4b058ff2966094b650eeeeb1f7a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cdb3d0d78ae173e351549f9bef2b17f5d16e4902f43c7279aa4f3f7b9b217ed3"]}, "failure": {"scriptSig": "", "witness": ["6a8f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/53f7ba7985ea8688080ed30b57d08c4ab91d4a7c b/txscript/data/taproot-ref/53f7ba7985ea8688080ed30b57d08c4ab91d4a7c new file mode 100644 index 0000000000..2a4d01a3cc --- /dev/null +++ b/txscript/data/taproot-ref/53f7ba7985ea8688080ed30b57d08c4ab91d4a7c @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0d01000000ccfbefbebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6000000000dc712be3025d9193000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5db0833e", "prevouts": ["4dd627000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "bd686e00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902aa32a49d685c694a272f72af2e558f9c5538a9ac8f1b7f5a8de0f1ce728a6552e4d50d90fe5723fc14a93f913e086bfa9675243b06d15ff82075b4785f46584b26563a65a96d8125fb3d6a37aef446fad780e6b10ee13d2692aeddbaeee69b4a58d9ea2b1192558e96f1722db664a9694058b8074bb7b214ef49c14c8f2349c4a51677831922b369cd4fa85ee3b792072df2f58ef05c09a24dd75d1f16a0c26bfc9800b7da89b2d9e90d05369a24743b85b7df678b4073c29ef53c7576f7b55e4e39f25a168b626e1a65ad0020c8a531b2c9f4b685ef34cd98d4daec49a9f70645b11e9c11e6ef6da14cff63968ec749a04c42808935188f30288800bbf67494cf36e5ad7d5ccd783f6f3681acbce1df0088012c244db592e364b29cc64dd4814db3aa42547bfe54d4c9c8c0a147d7999faa859105ba6bb4a2b0ff86c65dba6c8e359a72e86497a5c5cab851c083300b89dfc6a83e2199521b21d3c28dbfa37445defcb54f7d11e95dacad6694a67d88eea7cf169c6349b9b0ac7c634d71d9622acab9feeb08fdcc7b9d3077181406335ccaeba3200ad471231e04a2c2c6f195b9f845e5d2fce5f6a98641775b799f10fd8a222192005b8903844a36385fdba2c45abf26282a73c874b7f95cd5c610ff428c74cf0ba581303a0e2e29c92234d2a92940581e0b09a00aaf5f1337c9900c3d5f6e618842fb92d1c8885ff91d0e9c259ebe7d6a951edc2675", "907d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c374609570e32d34f993f11726b30429119b9dbd5f99ae31546f61854bcb05d1da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457ba4f11ff80ca9181e3d85997fa959accb8f97af45a52bfd0df916797673441f5"]}, "failure": {"scriptSig": "", "witness": ["4d0902795f5688fa8fa175c26bf326176d3c3339cd166d316d195ecb6bb0a3e465173821c668bdf363e3f2ce214b4798fd9bb5f05f5517f90d85d5fcc96d64ec37c8e360b0bee774514c24efc0855969a5f67df85e1bb21416b809672f1c4862b3d7ab2b8505d1e003ed4ae978d4536dd8a7252d4011d9bb9c442fe8b2a58a6b322af56badd671cef730ca8cba6910face9e6c3cd211a45384a7dda3e159898f0d3450aa092b79c31ee0f945fbc35fc842ba0ed0745cc7d2e6fb6c07b5eab3756c0a6cde0010f7ffa1f7fc3f8310f560ba69c0fba8a07e930d61ed5b47a6980858616a2444dc2d2808544533fb5b133e4b82f4878adbe78eebc99ea3654fb959be3e34b7891ce4f8c9faeb240d1f4d3c49c6cb125fc241c7075e68f76899ad637e2cbd4c7f3dcd6bfef69b19ffdb5277bb9062d75163e60fe4fd6e9b881f29aa75d30d7e45986ae30048e56cd8864963c94666ee7055332bf7dd43e02bc17d14fcf5c204a8b4fb6f1c83d0a3bd76a5239e4d1def2d36da063ef7e1bbded2297b71ea86bbd85d91f5afa9c434ec399b53e68c641db4fd3fde374601b70617d4209dc708edbf3196b7b9715b1796864179b71f1a215682f3e13a2da21176653a2f291e2b9f355a1d5b5bb1f54affb65fc0b47140036caec75846ca3aff2caa5478676cea70264e8468601cda7537983a09a4e747ab5cb5bbb1010267935d4c14aaf47cbf226aa061d4ba55d92c75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b538c086097dec7fff9cc2378d2245032c34a28bbf51320358cadf5b13a0d77c9f4b63c6df7ef43e2db8ec562e1d1dc49232dee39216a09a14bc3b6a66d1e38f07d6dd053b835b300872a79bbaa392d17bbe19548a92a63c5948e9fc7e63dbc8"]}}, diff --git a/txscript/data/taproot-ref/53fd1406ce1667cf7d7de3b444b90660d76871fb b/txscript/data/taproot-ref/53fd1406ce1667cf7d7de3b444b90660d76871fb new file mode 100644 index 0000000000..6a49d49007 --- /dev/null +++ b/txscript/data/taproot-ref/53fd1406ce1667cf7d7de3b444b90660d76871fb @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49c01000000fc23b6c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b040100000067f7ca9b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f0010000009dd718dd01c92f7a00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac43010000", "prevouts": ["ad873700000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "baf1220000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf", "f44440000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100e0a4d654bfb90b42ed8396f0b19a2923f65d70cdf9c17ad803a3e941babeeb9102203a20448663651d81d3f84b8cabb42872fa4c94ecb561b8d41240ec72610d456509", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["304402204dd268c7a63c16ab7f732046be3f0b6281949f30e8cdd322802c13809098811102201194a869e05bf7524d2e23d0815ec8c76c3963e40afd85dbac18decbc786757b09", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/540c6dd899720dbbc04e0f316f56549b4c1ea925 b/txscript/data/taproot-ref/540c6dd899720dbbc04e0f316f56549b4c1ea925 new file mode 100644 index 0000000000..ca473460d7 --- /dev/null +++ b/txscript/data/taproot-ref/540c6dd899720dbbc04e0f316f56549b4c1ea925 @@ -0,0 +1 @@ +{"tx": "c500bd8803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6b010000005ed744c48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49501000000484908fc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43b01000000f2652ed601e58f2a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7f5010000", "prevouts": ["d29a240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d2823f0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "17283b0000000000225120f103da370e61120ffbfed9be73547691440e55c4664603c27eb9ef615a7ccbdc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "1a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93610b0866e686ab02e02c75976444f2845fd6cde7bfef10e820cc3554ce683941d801cbe9d84ce1e82e006940c90d66235295537a514918e448d1b01c99be1031af2727a08c83da142d000f7f66d34a23554b296f940ffe81022e50f50dcfdd8b9"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93604a96bcdb01a6195bb6a7c9814761d079ee609b3dd4c3742d889e5f8a10b718d8e84781bad1ba81b7ce5b7be6cf9bec34b59091704d19096b61e5a37e7aa266c56798b11c96dafc2935d577afad31a6537ce4b1a48ff27833822cff5fe95a51e"]}}, diff --git a/txscript/data/taproot-ref/542c02db48e5517905eab16fd96de2d76702fe3a b/txscript/data/taproot-ref/542c02db48e5517905eab16fd96de2d76702fe3a new file mode 100644 index 0000000000..b5460e15d3 --- /dev/null +++ b/txscript/data/taproot-ref/542c02db48e5517905eab16fd96de2d76702fe3a @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1701000000233e40828bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c407000000004acef7c7044c5ca200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72614dd3a", "prevouts": ["a8956b0000000000225a202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "ca23390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["b83a6cc838fe4ff92a9af858d2efde524ed333cea01ebbc4b7f4773fab924030cf11433ef5c5edaafe13139710b3980b471a60ecd69fa7ace7bec388560a62f3"]}}, diff --git a/txscript/data/taproot-ref/54305f14909100e1757674ae16a759d855c4a647 b/txscript/data/taproot-ref/54305f14909100e1757674ae16a759d855c4a647 new file mode 100644 index 0000000000..6353dc4bb0 --- /dev/null +++ b/txscript/data/taproot-ref/54305f14909100e1757674ae16a759d855c4a647 @@ -0,0 +1 @@ +{"tx": "c7be2d510260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f2000000007a27fcd68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d300000000f23e2aa40213964400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898778fe3e3b", "prevouts": ["d736110000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5", "8239350000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "4e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8d1fd3f29d710dd7ef94713df6d8e3b931ee02ef1dd830d0dcb285a37875735c080d03cc4210f6c8d536ca11754de7a86c068de81055f4750ba9e0b801f8560f6a4a8046f0466b39966676954eca5d67ee52b1615e6fe46612ea9ab4edfa131fb"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365455e544596f3c60eab5a6f875fbfa3721cb31fe6673b63508e23ee0c4afbad49fcb6847defd4ab5435e313e937417091a847a9b6ba01e1bd1b0fdc0d1cd93789d8abe9ca6155576d0a7d6ce7b2728ac84476385b9c54c38b8a9cbf195895186ab153920b849b6028620ffd2b7e486a6f5e2411aa058dab621c72a45f67f5d8e"]}}, diff --git a/txscript/data/taproot-ref/5445a326ed6ffd6f95dc9cb3c9514a0e53f4868a b/txscript/data/taproot-ref/5445a326ed6ffd6f95dc9cb3c9514a0e53f4868a new file mode 100644 index 0000000000..b0eed9f1e9 --- /dev/null +++ b/txscript/data/taproot-ref/5445a326ed6ffd6f95dc9cb3c9514a0e53f4868a @@ -0,0 +1 @@ +{"tx": "b183537402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b730000000029171eb98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40a010000006f30ebce04500f4f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374879e627060", "prevouts": ["76491f00000000002251200e94bfc4da0ec878710fc6e63dfa8cf2888c96cc8603d6f04301c7800d453852", "9dc6310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e0", "final": true, "success": {"scriptSig": "", "witness": ["69afd9f2ddf550f3dd28592c7380f6c43b680e7036a7e1325978b3dda47c48a9fc9cc357a211b8a77a00c9aab0f07118928ec2ebd9374228306de27069bd85ab03"]}, "failure": {"scriptSig": "", "witness": ["fe7e2ce76ac9de3d83c57f6b8ffe06733f41ab6ba2920b76dc2b58409a3f33df5b3c3855ba7e35dd51bb495d54e8c4e7d48aacd1b8c6ae9156e40513ebb7b1e0e0"]}}, diff --git a/txscript/data/taproot-ref/545537c377201418fedef933281d2dcbea90a159 b/txscript/data/taproot-ref/545537c377201418fedef933281d2dcbea90a159 new file mode 100644 index 0000000000..d2438b6bdd --- /dev/null +++ b/txscript/data/taproot-ref/545537c377201418fedef933281d2dcbea90a159 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc6010000004f2f5a8ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf201000000518448d70270749900000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c5000000", "prevouts": ["81447d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e7081f000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "483045022100ca3fb19553c8baf1e000b5f9d1dc48f89e80310337390a5c8ac284f198bfb4ea022039aad2d42b72abd50815651f388ddfcf8665c85b154fbf5af5a0733c7ac9c64283004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "483045022100cf545cf82bbadd5f2ce6a14fe973403c54b610283ad94017a534545ac22651f3022078a099f994710d330f10db2334471551190563fd7bd9e2b9b8393931ca2c68ba8301014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/547539d40d65ab39026f065bc9152d96c7c4ad43 b/txscript/data/taproot-ref/547539d40d65ab39026f065bc9152d96c7c4ad43 new file mode 100644 index 0000000000..4f4d3485a2 --- /dev/null +++ b/txscript/data/taproot-ref/547539d40d65ab39026f065bc9152d96c7c4ad43 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1f01000000f063541e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bf010000003a54a79804b961930000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7969a010000", "prevouts": ["f0058500000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "6a541100000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936773136ea4d9f4c1bceb0dcfda29bf9f5f26c6bb27d9ca969f75ef19eed55ea123f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08225f2fc2293577bab1371dd996050d2a4e8a01eb34ee2db6c09974277461b3e6691bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f5e72664d40ec18feba23359c060b0289d5f21df5bacfea8d53f38e9c21f97b575d1df7a3e4c47ed4bae99c3344f7d42d0c4d3b112e8138771efc2bc74e29dd3ff737734404bbc9015f34371be38b9f5376f1a60720e7cf7da81354011ad4f7"]}}, diff --git a/txscript/data/taproot-ref/54ab5c42625d4869197c04f218c443750527c92e b/txscript/data/taproot-ref/54ab5c42625d4869197c04f218c443750527c92e new file mode 100644 index 0000000000..844de985f3 --- /dev/null +++ b/txscript/data/taproot-ref/54ab5c42625d4869197c04f218c443750527c92e @@ -0,0 +1 @@ +{"tx": "103e89be02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b830000000082ed4bd360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709600000000ede849cf0184480a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e70c17ce26", "prevouts": ["149c1f000000000017a914bf07e8218e5a3c93fa381357100b6dba1ff2a91287", "e7361200000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2354212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["f76e93c925e04e4c813605eae544eec8140e2351cd3f147a2f144173f57b90bf742eb4d523deb2161014d82e5c33c9681a1814e02147707e45695d7109d47601"]}}, diff --git a/txscript/data/taproot-ref/54b4f9842dadbaeb2ac90b0f6d8177f76ce3f9a1 b/txscript/data/taproot-ref/54b4f9842dadbaeb2ac90b0f6d8177f76ce3f9a1 new file mode 100644 index 0000000000..77f29ea688 --- /dev/null +++ b/txscript/data/taproot-ref/54b4f9842dadbaeb2ac90b0f6d8177f76ce3f9a1 @@ -0,0 +1 @@ +{"tx": "1a7ddf0002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1600000000f71b52aabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbb00000000a38578fe04d6958f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fccc000000", "prevouts": ["8900200000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "aa79720000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902388f390252817a200d6a40b588cfd04424d7c863834fdadf2a5db7f53d0c9dca8714303aea8393b95fb4f03ff7c6d8bd81a114e707235dd037520ca8be53b9fc3949a8a200c185a2ab0073e0132e629141577b84b734599034766f2bd19d19705f25dcfab7104448de0500ef7cb84860dda1b8f6d15bd93e83a23a206ec45dd013b1642c17ad3751e6dc8e6e72c20796033afff3200a40597292fbed0a7ca63c06636903a9bd8737354dd3a35ce5824a7d6409d43abd04d1a292be47a547a74f23540d7e7c315e59c7a1dd490565bca6bb8b89d01e5eccbbcbfc10b93d31ab705752a449b1f493bcdae4f9a494b781096876ccaad39c83330c07ed7217b81aa6d91d214f1dfd4dbea38292dccaa6034bc1dea4d0c58a3ab7d77734f3d1e7301ae0ff77b861f5f5e8c51a09656046e0c111c0d2d2b5062aface8dfa1191588d67d6990a6e2a3783328cf505ce47c443a415ef150f8b5448a66ad70e80120186d54b7d940dee872a677a7ce666e0b2c45c6cbeb76248639ca4eca5e7dd731eb542ba030fd6ae3bde665869e37a99d02ccb6b74d59a678dae7a95456654125ee24086dcaae272e76e75cb985f53cdc6c1143b5e18bafbb6eb09d44fa24cf97381a83c321856199f66ddf6c4fa4c4d9ef99b29bcb1ea83398ee8837cd56a969288cd21821e4cf91b22396ec02366273df529efa96eb5ad833b06903f0dd5c0a90691fc28a7df4b74d5aef475", "017d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad606e86ced54a653210e8da1037051c2b45f06b64d9f9b7dc936ee1cca52c733f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828874369940c44314cd428c72b977b6d1fa375b1e54ddd71363c505e3530065c38810a2a55ef559e3dd2f859359930339f67e2de31eeac841179b888fd41fd8a3"]}, "failure": {"scriptSig": "", "witness": ["4d09022d34c754e8621d84f7dc68399121c706d613dc2e9eff25991ab6830780143a43b36aad5ded905e3f3d9a7a80a5cfbdc8432f2e27b8b61adc8ff9026ac400580c62d0dc3f9603273adc4c50a26528a996fb7f50bef113005bb18a1c01e37f633e3ecb79f9a967672d37c616eeea812b04e498b569686dc40ee2434c42588d5eb9ac0750207f0bca4aa6fd92c179c6787658f75de6c5269d0984b0852945fe02fbde9d0436e8dfed7cc5309f95959d5243eb38a380a11907f31410c482e45f643dd664872732407a32a3dadd0586a8608d6bb7735c7356377b5221827c80c69cad2b1398174ca99c3f1a484a29f44e8a1b8547540ef2e65cb54a09d22c95fee64949a3185aa597378fd1a508b75736df72d2627f2002ec15a4cc107440ba80ebaf40966ee924391f7b776e003a444820bdd3f318034bad7b6665612f96e2f06b39858bbfeeb5ae83c3434f53f48bd65421ef2685bb5b164cf18c1dc21e1f33e64e7ffccb416ceee437ea50c7b59c8b64d0334415a78218dcda72f6711bb631b383c971c3c75e86f8d63171f7a939b17949a189a96d8cf6d1dc4652d85fd22b935edb6c8706c8b8ff56fdb3a3ee87c09f826d9eee80e5a2fa4a84287619dc0224b3346c6c2350e8b85d4c779a3bd398fff33dc8c3a093edf4736cd8315aa88a66dd47006b31affd5361fa5b30db1879c7a2a2367bddec86fa4dad85cd26f0091f856c0d38bde4f051fcbf75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361cd8248981863bf5208678f4a8be84ce1e7bd946743b34df66b16d7c3eaa91323f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828874369940c44314cd428c72b977b6d1fa375b1e54ddd71363c505e3530065c38810a2a55ef559e3dd2f859359930339f67e2de31eeac841179b888fd41fd8a3"]}}, diff --git a/txscript/data/taproot-ref/54b9966d625700d7ab8b6fb6e1c3e019b5a09f6c b/txscript/data/taproot-ref/54b9966d625700d7ab8b6fb6e1c3e019b5a09f6c new file mode 100644 index 0000000000..3c21d678d6 --- /dev/null +++ b/txscript/data/taproot-ref/54b9966d625700d7ab8b6fb6e1c3e019b5a09f6c @@ -0,0 +1 @@ +{"tx": "db5803d80260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e101000000d732cef260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d301000000446240800499271f000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac2c32be27", "prevouts": ["b1ce1000000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "4fef0f0000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}, "failure": {"scriptSig": "", "witness": ["b1f8db07571db89d159078fb87ed3ecf6e2f05159390af1113a68eb7e26caf0e06184d946290dda3ef2a7026fa03675e437c", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a25721145276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}}, diff --git a/txscript/data/taproot-ref/54bb653bb1662d8b2730bde1e4a255606fea193d b/txscript/data/taproot-ref/54bb653bb1662d8b2730bde1e4a255606fea193d new file mode 100644 index 0000000000..c42d67cf53 --- /dev/null +++ b/txscript/data/taproot-ref/54bb653bb1662d8b2730bde1e4a255606fea193d @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270350000000098af0dd360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701f00000000ce699485013f66180000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e77b030000", "prevouts": ["54ae1000000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "fe110f00000000002253202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["7e4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4efe8c29822d261ccff72913d153de8b886275dc8d15210ffbb43fd45d8b4e8e401215e29d5d13de3b6ed62165bc3378402ce71158bd1208562fc299f33fc22fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bdda9588126290ab75e3f97a29526139f210dcc234ab0ba271134ea4893d76ef82f3f1132320d0959751765567119a0f105dea34ff98e3a4034ab732ff09dfdbb3b80bda1b133ebf5523b41a15c88aa3d5202619e06dcb6a8f4a5442678614e2fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}}, diff --git a/txscript/data/taproot-ref/54c4a1f796d9ff3acf74d30faba1654e46cb8e87 b/txscript/data/taproot-ref/54c4a1f796d9ff3acf74d30faba1654e46cb8e87 new file mode 100644 index 0000000000..5e4ed8e100 --- /dev/null +++ b/txscript/data/taproot-ref/54c4a1f796d9ff3acf74d30faba1654e46cb8e87 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6c01000000caf387b6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0701000000d913f3dbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf000000000d47bb5d904ec5a0d010000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acef05f434", "prevouts": ["5591730000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "a0b64e0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "88954d00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368982585ef19be154a5d0887475e9222bb71fccbba422f418bf7ba462437a3b52233ca416c78a4619c687785de007f14a4879f9c7a0556256e1b46b2a7e5a39b3c2782374d67da9500785d400f7ef10ae84f146bbb568355094c68456b68f7a283b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0e6ddebd74405781922a3c06ec9e019fa66c9803c79b531f33e986452ce61d5d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51ab4aa5d5e3dbd00e7a6b81724e903c1ca482dc7bc8339f552afc52b4f38fc6a5b77966166a359aa5541e77c34a58fd9dcb7d88ef6e7e0cd0e140e1adf959d28b"]}}, diff --git a/txscript/data/taproot-ref/54db865605c4886df424d455f6674d7c9f904922 b/txscript/data/taproot-ref/54db865605c4886df424d455f6674d7c9f904922 new file mode 100644 index 0000000000..80da63bd96 --- /dev/null +++ b/txscript/data/taproot-ref/54db865605c4886df424d455f6674d7c9f904922 @@ -0,0 +1 @@ +{"tx": "4a229c5502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc200000000278d4f8dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9301000000fe6f74e00168477700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac24030000", "prevouts": ["784b60000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec", "40117a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/codesep_pk", "success": {"scriptSig": "", "witness": ["86b2803b04d84f0eb0060af0d56d7c94695f84ce42b701b577ff1355e93ec5b1f2364568ac950202219443dbed6f24cf5dc3d6753b4891db677aea328f69552b81", "ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b48512f8e6e82cca8f3eef972de21f1531c72d4d209707723bcdf2a49924bb9a", "50f3dc1e441fa570b2c205a4cbcd4936eb67a7d6a442efb819ff13ce3318b08c793621b40d973b62bb102fafa78f3d776ee86a9ae954d2894c881fb3607da72be48b173d4b31b54bcd9d3453cda3"]}, "failure": {"scriptSig": "", "witness": ["96e2526a50b6f736a62bb7e8af12381ad71571cde2da557b0011f006bf8fa823f96e9a5622a8100b6cfe6a068fb058a3b56f1f0dc0dbe256526e4061b54c3c1e81", "ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b48512f8e6e82cca8f3eef972de21f1531c72d4d209707723bcdf2a49924bb9a", "507412f72ab3d1c93d00e1664a84df69b93d8b3be23e71a919109a94bb98bf61eff93b4ae554c792f895f382099c31873c4c9d7666117b297303093b28c62cd83f299395514c19ebf1ae7e752082d59df36745ec5821b35b9e7b902584b4d7c2993aed093739984da7ece808984b829a0f708fc04a0f2d496d6b14c48aff278db51a819c0001f5c25bcff36fa15a499fe739ab20bfa3dce95bc60fdc0a778d154449"]}}, diff --git a/txscript/data/taproot-ref/54eef01ce1e7ec1e6b58bb1a7e192b0e5d3a98e8 b/txscript/data/taproot-ref/54eef01ce1e7ec1e6b58bb1a7e192b0e5d3a98e8 new file mode 100644 index 0000000000..12e3406c9a --- /dev/null +++ b/txscript/data/taproot-ref/54eef01ce1e7ec1e6b58bb1a7e192b0e5d3a98e8 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9000000000e38806fadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b27000000003c867fec04b7aea000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987b2879b25", "prevouts": ["4d15810000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "1f522100000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "087d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cb173d9968a47ba6c5c74f630df9011e2eaca208cfb301cadfc15d58ec381f47a9c5848e7797e88ab157cf3f92cb1e084ad7139395a6330a6d0efe4ec0158f0520a79ac573d08fada6e0a495a70546abebfe2eb256837e38d30334686ccae33"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e881f944ef569cf36d808a56aaa75ca2fdbdf4182c26b1d87989a6b5ad676759bc691c2a9908d9e7287fb91837cd9c32b2a21ac331bb306f4648aa27bb40422e45371e41a07562523a12648be26bdba66be78ce7e249298c356e66cf29847872e0"]}}, diff --git a/txscript/data/taproot-ref/54fe044e4c6d4dfed594e15518f9550df3910bc9 b/txscript/data/taproot-ref/54fe044e4c6d4dfed594e15518f9550df3910bc9 new file mode 100644 index 0000000000..7c04fa42f6 --- /dev/null +++ b/txscript/data/taproot-ref/54fe044e4c6d4dfed594e15518f9550df3910bc9 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49d0000000063080aaebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa801000000660303ee60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ba01000000be4370b5010fb78c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7d8000000", "prevouts": ["c21240000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "da9f8400000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "a0b10f00000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "557d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e283c6292a6ae3f7cd2fa90a42d11f5a54bea63a95cab37375097c35ac3f3911dda77d1c2cfbe9569ee5db2c51580a9857624040db9177af617be0771cc5b8a1b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8cf2f607c60f6c156b7df40b9550df6641a796550f01570d3040f84cea15217bcf33eaf0e0e2046a2b327db0183a88d397c5be0a86c812e98815a20f9da9843a2a4c5d50721208c85113b157b4dd4688510f63bd33d4c90ece0d9e0afcb8224b1"]}}, diff --git a/txscript/data/taproot-ref/55222bbf499234ced0243f0c54a06a8e01ee78e8 b/txscript/data/taproot-ref/55222bbf499234ced0243f0c54a06a8e01ee78e8 new file mode 100644 index 0000000000..78052ff481 --- /dev/null +++ b/txscript/data/taproot-ref/55222bbf499234ced0243f0c54a06a8e01ee78e8 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd60000000099b168e7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb2000000007a2554fd01db7f7600000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac30020000", "prevouts": ["05864a0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "291c560000000000225120327f04e65f02f8e03ce78ab2157c33b783b64287146459b669c40017b50fedbf"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e24c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93605be3ea16000e1e5d0cd0f286bdd228006eef88980c7cd756b0c9f357e0882437c6ac6071aeb5642f86cbd8c403a36f49b1ae971c310fa0b2c6d23cdcc52f9ae3b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c8536a7660b750cdfc13bd850c6f9f37445f5bbdab2263015cd8e07ff5f1c21f1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045b0bd2b339cdab1cb752df7db1bf10e0fcc4b57fed7d380ff50ba3a0b4b018724b77966166a359aa5541e77c34a58fd9dcb7d88ef6e7e0cd0e140e1adf959d28b"]}}, diff --git a/txscript/data/taproot-ref/55296a40c4a4eec0b8b959e6e4af29fbf647774b b/txscript/data/taproot-ref/55296a40c4a4eec0b8b959e6e4af29fbf647774b new file mode 100644 index 0000000000..45f702eed2 --- /dev/null +++ b/txscript/data/taproot-ref/55296a40c4a4eec0b8b959e6e4af29fbf647774b @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0901000000304617538bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41901000000d85fa7830225df550000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ace8000000", "prevouts": ["d42d200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "517537000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["30440220114488f8f5c7e9e144d29160202126703340e984a92b22cccd20706b0142ee8d022021ffa4d7437815ac5986054c7ec78518ff5ff7c6eca09782bba6fc69c443718503", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["30440220344a4119ee7599c9e9aeae585b1cad52c732c9eaa20dea4990ec34e8fd2939a102205d792198fa4ebef703067516c2b289ac552a5ef9aaa6868e237a0f5d959695b703", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/554254ae450e17abd46d3c290600e3620f888246 b/txscript/data/taproot-ref/554254ae450e17abd46d3c290600e3620f888246 new file mode 100644 index 0000000000..8c72e6faf2 --- /dev/null +++ b/txscript/data/taproot-ref/554254ae450e17abd46d3c290600e3620f888246 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41c00000000082f34b00462563f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8740972a26", "prevouts": ["732642000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09026ec1278f9175ea9964c62306ee2f96c56f3c68684d05706764e8959eac1b5c94278d497170172440f5b7d26901090663278279b1e81477650ef80cfa97271f3eb85b519bc44e0226f23d1d2a79836aa3f792eb7eb50e3c5d7a4cea0803d0635243a29f5b99a6d7a4daaf80317951520f213c8d090ff6a0e4e2ae7e95faca525d97ec42bd9de4027d1ae98cdba59971af909df2814bbc9fb58f4d717017ac6035eaac3ccdc2de8862fa6f7b2b1982105bed692dac05c49675343e18bac994f810665c87ce9f9e2788d6a54d5c94f6736ce00793dcceb718ee8d31e0a380f49129f62a0a8f895d2cbb38203224906587a7dede5edb4f4880ff642c2591bea0e90ff8d795de06e51e618d53b4c7c9c89d3f657533aad57390e8f4989e489b23c6f3621969f1f48155cdaa19b36f668bff036b894e944af6d381d52ee8e1439c86b9d1f7974a51bc084c30f3190264aada52154c85f4b8fc0b2b4eebd391a32350af604a788ea95062f8da07e4790fa52a2988586b964afac0ba57e5dcb529e1ea5409da8396df60271667f9c619ef715c570c743b3b85c9d41ac098d83b64c079740bbc5f1c085567ef6ffaed37b24922dd5134c63adb756ee4a1c1993f7d905790c5a809c75467b6b8999fffd208583bcef1a41ff4f241cb30cf4f3ca6c747f4cd1cd5ce87951b8b464f95eb95f62373b9f3eb7c4caa93b2c7687c81f3aaf36a4147d8af5fc41bb7a89175ce", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366964dc31804cc2f0bf098e3336240100d67f6f4f6698d2be2bda5f0de8a283d2a253f0d292bf616dfa5076ba7d0aea90d79076a752abe834699a79484c5e1632ab692e734634bfaf43d653c1e6f6d8e8d14797d8e4fda7a04cf5eec270202b46d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}, "failure": {"scriptSig": "", "witness": ["4d09028c2a3a94e400901a5d9568cbf428fb68b23dbd7bb7ae669cf90c06fcf43682d9e6846744ef634dc0aeb164dbda0eeef5a484a5eb0aba51c09f0dcc226b33f8285139e6958a372be06c0492260bfe3651eb86b2005fa4497a0a4658a0b25677304c3d0a348113392614ca63edc0f58a2982b29bfb23963681d029cbc73fc67cba91fcde9a7ebd424c061d732ad09ee638ddc22dc71ea4b756dc8ab0e0cbe7ba38649f84fc1afe16ab82d22dc4f59447c1ecc816e98516bec89b4b901b12913e2950c1fca82aa9d9639eb061264b731898032c2e57e2a6f89c199e5ba052e5d28d5a3fd2744baa6e9e53687a3aff6827b164695374932f4ef6b2347a34e7353e036cbb225353729997abb8eddc8246b149ae8b2c40a9b99396cec58a22d94f5408ea31e71d0b8680c02833404b7b1531c2475f33d852c5907a03a6df1b89cce8fbaf50a7a7728fbf820858c4f84bdb4e548a66e1a8aec0bd91f872ff5058d13f3754bf87507415e241cc322836baffd447c619d2fbdef394f0dd53de6af9a03f4b3f34a2b0bdf3f3d4cea8b920ae29895946b592876e8d7bf60d672a64c188575d5c420b502c7d1b5bcd756b4c8621951c28065c897aa8f4ceb70292c3db5fea94a3502b53ae587c16cff828d826e341ca5cb446d783c23bfd68835e158ff7addfac61df8b7bc154842033a2c6d5209105d96009c813e4a97c6e99c0b480505387e3793ea6093038b69d7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a9519128ceaa4d58cf3fb9f4d9c0523c691437b9e7fff300bc110a05f7f4d056a253f0d292bf616dfa5076ba7d0aea90d79076a752abe834699a79484c5e1632ab692e734634bfaf43d653c1e6f6d8e8d14797d8e4fda7a04cf5eec270202b46d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}}, diff --git a/txscript/data/taproot-ref/554ee85d50ac67df97fb01a2eb533f4a62a41c9f b/txscript/data/taproot-ref/554ee85d50ac67df97fb01a2eb533f4a62a41c9f new file mode 100644 index 0000000000..0159376fe8 --- /dev/null +++ b/txscript/data/taproot-ref/554ee85d50ac67df97fb01a2eb533f4a62a41c9f @@ -0,0 +1 @@ +{"tx": "1856b3df02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4e01000000bd0fc0dd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b0010000008f497eb404b1cd82000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c40df233", "prevouts": ["dc4e490000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453", "11a53b00000000002255202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["e5978118d5ab7952e4e6e4d5a8c98c5e9f64c85c89fdf7e3707edd32a9535f8ce29fc39d031b595a30ca3ad31811cebf67b7a27203d8b37a4c7ce5a7310277e5", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/555fcf75ef7ac731ace1cd81886b6cc1b013e911 b/txscript/data/taproot-ref/555fcf75ef7ac731ace1cd81886b6cc1b013e911 new file mode 100644 index 0000000000..4ae6dfbd41 --- /dev/null +++ b/txscript/data/taproot-ref/555fcf75ef7ac731ace1cd81886b6cc1b013e911 @@ -0,0 +1 @@ +{"tx": "35c5f7e30260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270220200000096b2ecaf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44c00000000bf5276d503061a48000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987c030cb56", "prevouts": ["02ee0d0000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde", "ee013c0000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09026973b5783f65fbdfbbb97c1e803fb4c9de0c7d1238f104174b03dcc9d587b2b9c7a82559d322149f38f17069afe237e939823f7faa63468e2fb6755a0f0b5067ced966a74f0d3ff0a8a381cc0535ec87eb62aec54d1d08568aea1a998ed54a699132e4cf163174a04f14bd280b10424ce95a02d106929bfb8fdde7a32350ccef8fc012c01e324d8834ff8988dd9e961973f66d0b3e6ece3151a74db71e4b406a4d9bd45cf7ee5c48004657fbb603b5f186643b9397739dea5870434c69a3a493795b619b5b89d74ac57db568992f7d1602f2c27c8dfc5466c7f15d04743ed9a153062c93039010ec75696ba888bd1752c31b842b4d96b0a868190e201bbd6b49d96a958e176f694d9dbecfefbfccb04f16b4e4459912ff369eee76e2d0ab2b4aa2cb9ceed00ee07d05dc1585556ea17d3aaa3b438e6cafdc28ae56db03a406ffd750acc125ed3f24b90d842e808439f4b60941a7d2125a81ec4ef78a7268f8b9ca6ce0ea9179ffd152bd48e8da676f9adeb3eb9b1fb7642fd37122da0e08f13317dcea0a0e3fba7019e29a821b49e39d29ce012b796648d42235bc1929e8172317bff6b2689e8937cecd2652a12bfb2e63192ac9014d9402cb7d18fac115019a543b759fd356b05a86517812e2c4ae4767c73844b1806d4d1e3fa2a4d97c3b1a356ead13e3f969fad22e951f8ad8d072a820d8ec5dae79a4b2926100c405a455481f2fb7348a65eda875", "477d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082a24674935b347637fb115fbceef28e6d08e5e47afc6eaa336546ee2e891e964bfd9e929a06047270fff43ba4c6b47136464c62381aba7ed74ab98bc69d199aa4"]}, "failure": {"scriptSig": "", "witness": ["4d0902a994f7cab56864b639d7532171fa7080452b27cc8e4b12c31b45397a6308c0f57382b72241ded327b4632b43f8273d85ed97108114527bbbe415ba0f43d03d38d27d899995919882cb51bc8776324deaa71ff4dcdf96920bb2d7144dbed4f89ecab199dd4b45f01847e18aeceb6769111cd83d93d08dbbf50a23010d21dd752d04ec47a002034ffc182d0b35cefe21873e8f0deacdee0e5e657a4c2c9e1001e31fb951d9e97d18090521ca92652320640bede5c8a221378d55f11611752a778860aa7e3c63a59557b215364415af71d7df84fe7a89917c52af5ea0dd579936fea81f1d0f22e7454aab7401132a5bcde5e26647201d92336f2bc6679a4d7dbf1f58bbb7773d7312f5b173e77b6c3382d8f62fc893466309baf14b8dd04f8dd6300fc213476f98c4b8dbc872395792ffe774e158a6e8ed74bba26b7710ecb2cb352993bf272018b05fb0b9aa7711a8c2452563bcbb1a23ecb614327a28ddbe85ec18189b62d977384f33a2184146f7c498e98e473d2f8bac35455d6cef9db022edc7eaa9be12223f1ec26ba88ff210c26b49d27e73bbbdfbc4bf09196f45904fbe71d1c2378533cc9e9f742b54f16c0152a9cbbc131f359e0456ba056ef192b47ef428af365e825b0bbf3f9bc63acf3f48328a80679c972e1487d7bb561ce6052136a63fc7d90562089b1785c8165f81567c0a365229737245aa03d8c663aa0ba438817bcc7766d3bced75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0d94273a00f5b73468b8b6c7a839b831dc0df283de3dbe2175dff60161da024ff81b1159cd56b1887f265c0d653f3c782f8c9b1bd8992faa992c6296a364de747adf318628644459e7d8d4ba81b7833f70746497cdf0fced2937ab961dc2be46657009e9173c5ef8826379cea4b8c999e3ae37a5805e4cc6da117a3d2ee0eec"]}}, diff --git a/txscript/data/taproot-ref/555fe6827560beb47e96016c2aae78850a4e345c b/txscript/data/taproot-ref/555fe6827560beb47e96016c2aae78850a4e345c new file mode 100644 index 0000000000..bb2494742a --- /dev/null +++ b/txscript/data/taproot-ref/555fe6827560beb47e96016c2aae78850a4e345c @@ -0,0 +1 @@ +{"tx": "26bea3fc01dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c970100000075c2f08501cec6000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7bc98653d", "prevouts": ["57144c000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "final": true, "success": {"scriptSig": "", "witness": ["2eaa8d5c089018ad5270968232d49205851ae61fce62758bd75b66eb5f615fa421a3365c10fe5f11234c962ded42d732ce69c3aa764a03d4d87b859c333e8a4102"]}, "failure": {"scriptSig": "", "witness": ["ab684fe283f2e3a6ba9ca683327d7f1dc3759c793bdf64459499ca596375323b89b4fe5ae5af3e190f35d63c5129b5192c5c417a5c6e1bae88139c0ceaab809202"]}}, diff --git a/txscript/data/taproot-ref/556a65730f4092db6fd77c12b631d10117d47033 b/txscript/data/taproot-ref/556a65730f4092db6fd77c12b631d10117d47033 new file mode 100644 index 0000000000..4e00d85626 --- /dev/null +++ b/txscript/data/taproot-ref/556a65730f4092db6fd77c12b631d10117d47033 @@ -0,0 +1 @@ +{"tx": "28a354820260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ff00000000be3b46b4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1a020000000e78c7d001ff502400000000001600149d38710eb90e420b159c7a9263994c88e6810bc79c000000", "prevouts": ["1ea6100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9e2f22000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["eb4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360c54e1ada67eb35c9fc75440012c0966dedc9197e6aa1f92cced4ba861a6e0736873018117c319506164013bcdec2d285df0b840d64f5a35ebdb06eb3e2afdaba9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51434501c222c2b9303845523b2a5615208b9d5e9b8dddf3d495d8511b54149dc414f0d108097d00934ef2973385fcf188ce2945eb833bd9e90fcb9cf025505833cf9ce2244c675144b577c27c052f9ebd481172245e28e9502c6c6e8f12c64fa6"]}}, diff --git a/txscript/data/taproot-ref/556db9cb87763f9c127e87edfb88a8e8443c00d6 b/txscript/data/taproot-ref/556db9cb87763f9c127e87edfb88a8e8443c00d6 new file mode 100644 index 0000000000..ef6f0a1137 --- /dev/null +++ b/txscript/data/taproot-ref/556db9cb87763f9c127e87edfb88a8e8443c00d6 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf48000000009d982271dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c76010000002843b97c03ee7dca0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787fd93ba45", "prevouts": ["a3c46e00000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "81d15d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b7", "final": true, "success": {"scriptSig": "", "witness": ["05f60808292ccef731638e9b9747c64e9435dbc9ba39b0e398d17e49dbebf458eee028085fff295713a4ce747ef3d6634c6a1108001022d25cb6881cfa3bff3681", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b7e65707080c7e7248f0619dda3bad03e440bb6597604bc9ba48730a7bea7f137df02784b49116fd665559aca61deb00c6e519c846f32d4dd1be10d8064350d2b7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5581fa4307ec84b987cdfaee72db964e4a304876 b/txscript/data/taproot-ref/5581fa4307ec84b987cdfaee72db964e4a304876 new file mode 100644 index 0000000000..2f5fe72de9 --- /dev/null +++ b/txscript/data/taproot-ref/5581fa4307ec84b987cdfaee72db964e4a304876 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47b000000002870fb82024be0380000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478780db7c61", "prevouts": ["c82a3b00000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["7f", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db342938b39be9e12773a9624b573dbb1df9d93500dc93058087a84b4280ff8e70f73741da43ca43557c58f6aa15023f4cf70566ac935702465d6fb0f93d4429f8d5397512e216c7ab52609f0ab27ccbbfd2b7e561d7599ada55e292956af911ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb44a1c4274957806206aadadfd15cabecf517c42c49a66a44e84081097b7475aac480120d5a477c096fbef97d1ee2aeb957fc425ff8aedf322b93097b3a97db744cf5fd42f9969f7f2472ed1fa62ffa49909a09466cf06ef7c57cb1be351156c54"]}}, diff --git a/txscript/data/taproot-ref/55944a2b94a2ca58cff331e3ef254a2869f5fb50 b/txscript/data/taproot-ref/55944a2b94a2ca58cff331e3ef254a2869f5fb50 new file mode 100644 index 0000000000..da041cb683 --- /dev/null +++ b/txscript/data/taproot-ref/55944a2b94a2ca58cff331e3ef254a2869f5fb50 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6701000000a473d9cfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cda0000000076ecb2df043144cd0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7edb0fd40", "prevouts": ["2b0574000000000017a9146f2d26adc5ad58653becfc45ce03a0b1167b1b7e87", "56ed5a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_32", "final": true, "success": {"scriptSig": "", "witness": ["0d0ab90d46e1643d1ec1fea1cadfb2cc8056cf235a7fe16e181860d7c2c2dd9bfba013dd7d8e1c981f5634e3824897f3a18707edfb4b969727b09a6ae64c731e"]}, "failure": {"scriptSig": "", "witness": ["a7cf9360233f1ea7d86199a6314b754746092474f24a0872e6ad147b010ab9a589c1835806f024834f0f92703a0ac9d6fd46ece753742dddc5994b5d66046cc232"]}}, diff --git a/txscript/data/taproot-ref/55b0896604f6a6b38c17cf95f8c053e19d26090c b/txscript/data/taproot-ref/55b0896604f6a6b38c17cf95f8c053e19d26090c new file mode 100644 index 0000000000..8aa0ec19e4 --- /dev/null +++ b/txscript/data/taproot-ref/55b0896604f6a6b38c17cf95f8c053e19d26090c @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4b010000006599e3b460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e9010000002319b8e0033a632e000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a3600632", "prevouts": ["b22e1f00000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7", "0de6100000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "b37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936903d2a659aad03c667a6b873e21cea168414c29d3474a9880634e3e12e550e8c33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a368ced990ebadb111ebc3982eac7e308f07f99a9264ca6c949f56162916d7884"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93613226b488a95574c43053209c9e6fe8a3ea8bc7dade3cccc06ee2b8f5d857db7ebec8f444f9538a00b5e533aa370349d7181cba703021b72fe611d481b359a8e62055c347ba5402321504576f6c37d0c6cb1d044ee75df535bc9eec0560634a7"]}}, diff --git a/txscript/data/taproot-ref/55c61e7a6bf6a7b27176d90e85c792e38fa47d95 b/txscript/data/taproot-ref/55c61e7a6bf6a7b27176d90e85c792e38fa47d95 new file mode 100644 index 0000000000..bad4053857 --- /dev/null +++ b/txscript/data/taproot-ref/55c61e7a6bf6a7b27176d90e85c792e38fa47d95 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c890100000045a341c4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfd010000000a8f2aea0184814a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e742cdbc45", "prevouts": ["97085a00000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a", "44315d000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "627d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457a979a031634820b293704e38f33c20e5acd9cb2a8735bda71fecc5f77708044027529efe07ed3ec82dce77345a5c0eb368b138839946732056b6a908dbf5f05c"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b02092f1126067d557fddf65a3b2c06c88f3692f671d91058df5d5c8f702785989c476762c97a1f480fe93da3602a750f62c0ee9bbab5a4ae1c7a4219e84dbc327529efe07ed3ec82dce77345a5c0eb368b138839946732056b6a908dbf5f05c"]}}, diff --git a/txscript/data/taproot-ref/55c9ce0b7ccbe8ff676abebe7761bee66f38e3bc b/txscript/data/taproot-ref/55c9ce0b7ccbe8ff676abebe7761bee66f38e3bc new file mode 100644 index 0000000000..c3babe95c7 --- /dev/null +++ b/txscript/data/taproot-ref/55c9ce0b7ccbe8ff676abebe7761bee66f38e3bc @@ -0,0 +1 @@ +{"tx": "17d518f302dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5800000000e32f0abb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48400000000644a2ed2022f4f5700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc20000000", "prevouts": ["c7ec230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b9703500000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f0", "final": true, "success": {"scriptSig": "", "witness": ["5d8de6d1280b5ba87a728e458102f7fec26e020d165021a26baf894cd1424d2bd56e5d09829f99a16dc6a7595e066c8cf463c0d412ff743f029baef8c146a30381"]}, "failure": {"scriptSig": "", "witness": ["48b8dbb88cb5aae0fe5e459a51a3b95dfe7e8cde85b9216a0ea4179884fe651e485ffb8a79463a62a77755ccb5b66f5c38a60dd7564181ca048303089316f134f0"]}}, diff --git a/txscript/data/taproot-ref/55cabf94b48b77fc7b0a87efd62377c6a44cfd3d b/txscript/data/taproot-ref/55cabf94b48b77fc7b0a87efd62377c6a44cfd3d new file mode 100644 index 0000000000..4542cd02b5 --- /dev/null +++ b/txscript/data/taproot-ref/55cabf94b48b77fc7b0a87efd62377c6a44cfd3d @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca500000000141df85c01b8e702000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48727030000", "prevouts": ["6eeb510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_45", "final": true, "success": {"scriptSig": "", "witness": ["b73e5396a76e0c5e3fc6e042edaa12f5a8a8be428d19c023c1afa7b5c9d55f14e0276261e40dd940704155e3015fb3ba68c2f62369c387a53e54c4875f79bb2901"]}, "failure": {"scriptSig": "", "witness": ["792486511c28a806d5c3b5d66dbc15d733e09e541e899e41fa1a7d986e85fe3ec8150262372dc884c8e357af5444fc592b1886497edb697e77b0ee53e892d53b45"]}}, diff --git a/txscript/data/taproot-ref/55db8d546fc7e337dd899c328c82a60b6102a7b5 b/txscript/data/taproot-ref/55db8d546fc7e337dd899c328c82a60b6102a7b5 new file mode 100644 index 0000000000..723b25901e --- /dev/null +++ b/txscript/data/taproot-ref/55db8d546fc7e337dd899c328c82a60b6102a7b5 @@ -0,0 +1 @@ +{"tx": "3f83490e02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf29010000004679f882dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7001000000ded352b204041c8c00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487ae53ff24", "prevouts": ["18d9660000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "dbd8260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f3", "final": true, "success": {"scriptSig": "", "witness": ["48de2e16b4bcaf95bd071a9832c7ce33fee167fcd6292e5eb8c6155a84a992ed9a88955a56979512b2ff872c353f5f3503e5954e524a2442f7b2db2e1cfb3cca"]}, "failure": {"scriptSig": "", "witness": ["61d9ec5c3d0de53d1eb1d56733a4abd08e9a31f376436e54b83b5a0cec7eaa03bd94cb128f620fd8cc43e0d9359d8d68f9e7bee462abb2999d6467e21fc806f9f3"]}}, diff --git a/txscript/data/taproot-ref/55f99e2d68ee85b75133f78cb948a5b7466cb4ea b/txscript/data/taproot-ref/55f99e2d68ee85b75133f78cb948a5b7466cb4ea new file mode 100644 index 0000000000..3de6eb57cd --- /dev/null +++ b/txscript/data/taproot-ref/55f99e2d68ee85b75133f78cb948a5b7466cb4ea @@ -0,0 +1 @@ +{"tx": "b07ccdb3028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40e02000000ac2245c68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48c0000000092334be801f08a5b000000000017a914719f78084af863e000acd618ba76df979722368987818e012b", "prevouts": ["35c53600000000001658142540f27e90740933c99d4f17ab2dfc6c82951cfb", "1c5737000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e868", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361b3d4b3c1d12642e7710cbf88d90f6ee341056f129c03c206ce123214db4cfdc886d39c7fd191823f2d71d70dbb2b614916cf5220a36a0556ea0e320955e8896770b862ef93acb6091cb4ff8ef135b3065b278142aa4adab757f952a626e2b26c80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93621ca571378a3ebc1b3d88db0fcc1864f60e2af1eb346e9dd3894589a6bf4e26ad39fd96f2153f8e279dd396423519f362f93616cb37cbc9b2f05e3e7bc75ada5276a8166e5256dc9010e53101dfdb6dbd4fafdb1e785ffcbffe7e4bfe923fbf99aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}}, diff --git a/txscript/data/taproot-ref/55faab0c69903138a86beca8e6ebc3e7a2010e0b b/txscript/data/taproot-ref/55faab0c69903138a86beca8e6ebc3e7a2010e0b new file mode 100644 index 0000000000..ec143a72a4 --- /dev/null +++ b/txscript/data/taproot-ref/55faab0c69903138a86beca8e6ebc3e7a2010e0b @@ -0,0 +1 @@ +{"tx": "85324522028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47f01000000b61021addff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4e000000006b4b3e8303a56079000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7cfcfce3d", "prevouts": ["153b330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9946480000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00639968", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082c0b317c85b837bc971133c463a5a02b3e438f62c623f33a660d87550a4209620af95302e7a08635545e6c64d05a20a7ff60718981ac8a997d809f6391d7b2d9241e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bda2b2a0c2215fd01cbae6f9632c297c3acc6ad2e282578e936cd31657d5fa84d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51379b42341ec85aaea9ba53764a308ad79e21ba1c6bfeef93296a10f4c0e568eb3c50effc4608d2c714b1f589c510b82e2cb4bd2fb333954004903b4f08f38a79"]}}, diff --git a/txscript/data/taproot-ref/55fc38b7d593fc118d407fcbd2ed49e3ea890734 b/txscript/data/taproot-ref/55fc38b7d593fc118d407fcbd2ed49e3ea890734 new file mode 100644 index 0000000000..068cc4d799 --- /dev/null +++ b/txscript/data/taproot-ref/55fc38b7d593fc118d407fcbd2ed49e3ea890734 @@ -0,0 +1 @@ +{"tx": "bf8398af01dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0300000000c148ada60492d14700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478711010000", "prevouts": ["cb8e4900000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09028cea88127acc9c3f2a83d257282d4867ac82e62fdd8fc2f26c7f55dde4b46178da6f9b7eeea9ed1a4075a058f3396c3c513042dccf6736926551eb4ec3cee4dd100810d8ef6d792acc5011fd662d8bc2f0fe53886c81144927f8192ed8de3b9abef690be184e86fb019e00f9a8bd5bca1553246e19f4ed6af61e58dbcc8447e7117521241c6c5cf4bb5d6edccf9e2bad1d3551b8d0f89e232a4ee684f80d27f58d173257551c40097c8b0bf7b307b58387fea6cc3365425788c6ff8ec43da3840fa9b2c2c534adb81c40df06ae5aa41c006ec9484d40801d6ffe871d2c95328f9cacfed0bd223f3118e6edd9d182aa038e1ca5f1dcf40ef73008d2fcb80064c56beea0991ea0bd8dc9c64040cabeba9fa63f3596ed60725d5083b15cf5ee10b4a75882777cd4af71795ac7a31563a091f242378afac315b06e421c31775fc30fddfa14a4ce0c16e968bd83d0c96e30071c4aa1c2a3e38fa9a42bd5a4de7e8780e29632699712ca95ae0d4ccd77963378046eea4e57d6e6b72cdbb4028fa07eb69fc662eb13855b2a2c969678c7caf78e69da9e996717decac9b6883e0d619b56ef3fa13fd82f42337e8acee185a31aa77903502eeda6c407874e9c6f8d5a3c62b75be4d57ce3b884924ac9787b18b9a6b0bb89d323c8092846413f09ae47dfc53a11b403a406c01e068b7e5d611430998b35e802ba1b42fb60f8f5fd0a3d95e4b6b28e173199cd0dbc75", "e27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366faa7d7d2440a55ec7d139a8964ddbb0355a79c57a8fc16181baf4c33ea43944de3dcad145b88b360fb9f51ed5363f34910a171e61f360dd6bdf047d4a1b93cb212021a26ea5e00fb993aa3d0fc1bd1e431f365db69035b8e4625845fc9b697c"]}, "failure": {"scriptSig": "", "witness": ["4d09025c589ef9398582c77991c45f56b5efc2fde50176ec588911636689f5d35522a0cb2104aad106d95202f371942be228197ef76d1b1ac32326f46caeea72b112cc7951803ebf5c711f2b7ae2dc3afb9db78a0742bb94326e2d74fd1b486d2cc60985f58f08420f0bc817014f7efb29c855f866bba320faea04a141a1e6337f1e58ad3253f466636a6e676f3dee84dcdcdfdb7bbd3d58be695e00961a8278a0f90383022396612925667479b4f45afc334a7a779461532a0c18bbe56bfbf6bdfd8da8aa2c3dd2a110e309a82aa347fc265ac0eee3216dd5ddfb255aacdd718685792db52995836f972461388537361de78848a9233bd94fb3f80c0197c2d2766c5aa1ef8894b3dc7a646a92e213af4431636394334e808e06b32886a68d7c2883a14eabd698a6efeb114766ba8d80d4bc1b2155135926ae23177afde428ec673e88fea8d1ae48d9cf68d97e649090a0d6e577357d0f859095304d0c49afa3288ee6148e6c0578f9d2949bdf72495eddadb407c26724ec5c9738e5bb9f6dd39da44f65068ea14592ed127304fdb0ff9c840d16252b9ac72433271f8a7e06d63524e54136b2f11556b7c3f019ab813eac9962a12b7cd305d650221b0a8dfc2c8fb195e66a8a79d1229f31d7e233debe0a284d2ae4cf26b45cd262870d9ef6487961639ea15bad889d136b10cd8c1ee5090f3f2f7a35ecef5c9377cd66ed751a8b12cd20678db29f7c9d1d1d75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694061612a85b22860c670ea907f0f210751112fdd19efc00b4f6773b6f7a9cd1d6719dae808d80c72548faab257df36cf98b115c53ace18df08612b967e5347aeebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7acec7827d9bc9e4e8e39cc141cf7690ea6843d6b50eda1fc8d5571fb149b2aabab"]}}, diff --git a/txscript/data/taproot-ref/56397a2ccd392deb6d3ed52e0a065fdde579e9d6 b/txscript/data/taproot-ref/56397a2ccd392deb6d3ed52e0a065fdde579e9d6 new file mode 100644 index 0000000000..2d9973ff88 --- /dev/null +++ b/txscript/data/taproot-ref/56397a2ccd392deb6d3ed52e0a065fdde579e9d6 @@ -0,0 +1 @@ +{"tx": "69e9ad9d02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6600000000c9d7deda60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f001000000c805afc401196533000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f871b91163a", "prevouts": ["17806000000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "eed7110000000000225120934cc30b71223b04aa2af20106e445bb93ef4a67adba137dbea8fd26e6a0b3fd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063fa68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb462b588f53b8753752456cb241f753d144ff0679dfcac60637407bf69aac4dc17f8b8afd7beb88d43ca6c6d2d58dc9425172bd95ccf582b2eeeba83616a9d27d33bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363d196519084bd9e912011a72f2be62635ef4baff1f9b0d2c0319da63472fdda3b9350299288462116e81ad139d1cf2552ad17a94ea609f697964ec86e4a0e9d9319d91594da7fa35d5ac76c3396b108bc28aa6233c389d8680e4f0461963fe656f5053dc49cb92d20c30fe5ab09c589302aa9886b9c794d18405aff33121a169"]}}, diff --git a/txscript/data/taproot-ref/56567e4be5618770bb97f61b1487c7d47cf8192c b/txscript/data/taproot-ref/56567e4be5618770bb97f61b1487c7d47cf8192c new file mode 100644 index 0000000000..a870acd8ed --- /dev/null +++ b/txscript/data/taproot-ref/56567e4be5618770bb97f61b1487c7d47cf8192c @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45b010000002378e255bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2701000000bcdd8d74044f8ea9000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478740000000", "prevouts": ["780d3e000000000017a91481d4142ddc5ce7a3de4047bd48b623419b5bc45e87", "ab0c6d0000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8dc8c5662064e2d9613ba0f54feafa13b4a8d810a28ca520b1cd1b9628c3c1add15eb41ce20b61903eca7e2f7903a7c5f76d50ccbb22a22a302188dbad2e46b28"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c1510f921748ad83649efcc17e75d7082e73dd380974088ab927571dfaea01cef9a48fcabec25982850a496e19df71982d596f167265e15d1ec282fb30074b91cb891527dccd7fe22077390053ac1c45ab6e7110116df1a30c9559411f432f5"]}}, diff --git a/txscript/data/taproot-ref/5658a8d8fb388e7c7e5f7c7fc8630d3de961b676 b/txscript/data/taproot-ref/5658a8d8fb388e7c7e5f7c7fc8630d3de961b676 new file mode 100644 index 0000000000..5405105a71 --- /dev/null +++ b/txscript/data/taproot-ref/5658a8d8fb388e7c7e5f7c7fc8630d3de961b676 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc4010000002b6191afdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21020000009884a17cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1c000000007c4b09c60226af4401000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd3000000", "prevouts": ["c299750000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "05cc5a000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "080976000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["30450221009ae58dd691f67621cb44ce3cf3e790a1490280b8d2f21b65954650b7e6ed671602201d17c98e967b79705ef30c47f115bf0d25c4d5c5e493aa026fdb46ca4725b76681", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["3045022100bf491b28ced4492824c5b34d7c4ea5a41dad5c9b629e549488b7dc11502ecad102207e6a2993212e567a96be68ba1a262b405cd70a2986eee40edd63104cb1339b8781", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/5687a5e9c47486c4d2f24f74e09c95a9b9139145 b/txscript/data/taproot-ref/5687a5e9c47486c4d2f24f74e09c95a9b9139145 new file mode 100644 index 0000000000..77e0f671f5 --- /dev/null +++ b/txscript/data/taproot-ref/5687a5e9c47486c4d2f24f74e09c95a9b9139145 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0201000000a5902247dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b260000000016a000b7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0100000000de383c3702a0e7a50000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4879304df5c", "prevouts": ["f2295f0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544", "0b62230000000000235f212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "bbe224000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["b8812ae4910f95e260c84c81cda42194f3c09e2266ea82252a16054e3bbcb7d4240112039594c42e43c0670591365309d35ebe3c03b5fc9f3695067e9afe9545", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/56c988fc520dc9a5bafa28ad83eb0e972fd70567 b/txscript/data/taproot-ref/56c988fc520dc9a5bafa28ad83eb0e972fd70567 new file mode 100644 index 0000000000..9fd3c8b0a0 --- /dev/null +++ b/txscript/data/taproot-ref/56c988fc520dc9a5bafa28ad83eb0e972fd70567 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bec010000001d0a2dc2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf00100000010fb28d503d0fc6b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac4d020000", "prevouts": ["5d3d220000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "c7244c00000000002252202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/bitflippubkey", "final": true, "success": {"scriptSig": "", "witness": ["a95f4b2151ef091df4c7d19cb4998a3268094cd7f4dbd6d056fa9164170de7c051d60afdd8a370783bed723d081aadd37629557316957f8141a2102bb99624b8", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}, "failure": {"scriptSig": "", "witness": ["a95f4b2151ef091df4c7d19cb4998a3268094cd7f4dbd6d056fa9164170de7c051d60afdd8a370783bed723d081aadd37629557316957f8141a2102bb99624b8", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5962d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}}, diff --git a/txscript/data/taproot-ref/56cc448ba82bed7220a831c4b05eabed0406386b b/txscript/data/taproot-ref/56cc448ba82bed7220a831c4b05eabed0406386b new file mode 100644 index 0000000000..95e88576a2 --- /dev/null +++ b/txscript/data/taproot-ref/56cc448ba82bed7220a831c4b05eabed0406386b @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2000000000868a0dee04630f6000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48766030000", "prevouts": ["93c66200000000002351212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["738bdbe9cd1a5424b7d83bd7a5e298273445228a286a1ad1a0ab62ab3a890fc0260cccb593eaa605fc1be61b5642b639897bc50cbbf04051dd29a71273e862b6", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/56ed4007baeecebd4a8905063055ace47704a0dc b/txscript/data/taproot-ref/56ed4007baeecebd4a8905063055ace47704a0dc new file mode 100644 index 0000000000..a8f7b72011 --- /dev/null +++ b/txscript/data/taproot-ref/56ed4007baeecebd4a8905063055ace47704a0dc @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f02000000edc4c2a1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7d00000000b6e37ef8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b970000000032ac10e903965dd000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c020353f", "prevouts": ["db0b40000000000017a9147e06846ce22cd5e23f7e03391c0538498e0e18ed87", "234c6c00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "693f260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_8a", "final": true, "success": {"scriptSig": "", "witness": ["214ddaacf7c31cec6634b8d1be5bd63b8250f22ff1390f4c27302b3f77601c3840fec9785a32a74e006b3d902e6b237129e8fcc6fca01f4f93d0805bf659293402", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a52ae61876ee07852f630d8c736bb794b957e000bf42ae6d711136e967f78160e04a61022330c6b25b68162d5ab0e7f8874955632d96ec784dfeec31fde965868a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/56ff467c9c6b5e3079baa559955ba107d89d77fc b/txscript/data/taproot-ref/56ff467c9c6b5e3079baa559955ba107d89d77fc new file mode 100644 index 0000000000..42ae461223 --- /dev/null +++ b/txscript/data/taproot-ref/56ff467c9c6b5e3079baa559955ba107d89d77fc @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d00100000061bcd71c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46200000000492c8d5abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfde0000000026f8a34302b303e60000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87ab000000", "prevouts": ["6f8234000000000021551f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "b983310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c2d5810000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e5", "final": true, "success": {"scriptSig": "", "witness": ["206fbc11d8471d1c21e61bb46107d8d1f4cf55982ff22f820131fb7f947746579cadb292d2426d0726e5451f0e79d620529e7eeee66f9b910df7ab2139b62c2f83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["67e0abac7e67c6ac12d86c06d9d916cfbbfaa3dc1220a5d266fb61dc7404582397859450a4aa65dddfc91ec49b34c57641f6c54a31e407eb362c6bbbd0a53315e5", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/570fb69de8afa341b54dd79455b6d21085c0334f b/txscript/data/taproot-ref/570fb69de8afa341b54dd79455b6d21085c0334f new file mode 100644 index 0000000000..8b848f797e --- /dev/null +++ b/txscript/data/taproot-ref/570fb69de8afa341b54dd79455b6d21085c0334f @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41102000000869367a3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cef010000005d951084021acb7a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2b040000", "prevouts": ["86fc330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8835490000000000225120f42b54ceee5422b98931ba4e4259b1fe0b973d9efeacc7f6f710ee118b027bcc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db6f858bcb140df281d7bcf64cb458d8641f6a6ea76b9d437d19719ea520e9d2"]}, "failure": {"scriptSig": "", "witness": ["6a65616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/570fc65b0c81c1473fc82b8545f5ae6efeb839ff b/txscript/data/taproot-ref/570fc65b0c81c1473fc82b8545f5ae6efeb839ff new file mode 100644 index 0000000000..9cdff3eeb8 --- /dev/null +++ b/txscript/data/taproot-ref/570fc65b0c81c1473fc82b8545f5ae6efeb839ff @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c900000000e4d8689fdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2601000000013a04e50458d53300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac3703122b", "prevouts": ["ff541200000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "f15c240000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d74c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366581f7b0ca6f1aed206970c0804a234f1a44041591cfc91f27f0238489d6aa9aaffae472ebffc4152ddce3f20794b01737e96becc2bb4a1a296a47c8ec0d29af569af0f9e86656db21fe5e74d4bdcdfc2cda5437bccaf9e3d568ba1282fc608d76e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f0f1548d1d073f6e5b14220ad2361e8ef5d38bb11452790f522d55796a8a82b3d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514c1a4ef98c473095d2df256e4c96a081ff076f8ed25b9a6c5f4dacfc5de1b1d157a61376c510bdd1fc860151a3b261939fa407ec1a2d0490cf2efc4278abc783"]}}, diff --git a/txscript/data/taproot-ref/57267f8aca1eeab5fdc28ec5f2cdbd6ce0d150ae b/txscript/data/taproot-ref/57267f8aca1eeab5fdc28ec5f2cdbd6ce0d150ae new file mode 100644 index 0000000000..fde1d631ce --- /dev/null +++ b/txscript/data/taproot-ref/57267f8aca1eeab5fdc28ec5f2cdbd6ce0d150ae @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9301000000b42ed6a28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d90000000081fe60ac049d5a9100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac47d04324", "prevouts": ["749a5a000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e", "d2c139000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100f3c2b9d005defc4d295be85b11319da089ffa512fcf591f4803c2232dddaa1330220615e3f019f504d42bf605cacf388b06c77d9f78ac76dd3299e3e0aa2724ec5d782", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["304402202d315cbd08a6bde5a6c500c965930630db122bbae9679d6d35450b128490a32c02202891c280ebda5a3fa930a72ea6ca1f940fc1c59cd690b89523cffce410bddd0a82", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/572c410d27df3156ea85e726a966af51c9cadf8f b/txscript/data/taproot-ref/572c410d27df3156ea85e726a966af51c9cadf8f new file mode 100644 index 0000000000..7f9042b2a0 --- /dev/null +++ b/txscript/data/taproot-ref/572c410d27df3156ea85e726a966af51c9cadf8f @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccd01000000309951c10172eb4000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7ca010000", "prevouts": ["0b135b000000000017a91468f63610c45a6790781558e4d5ce83e16e8f3f3b87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2352212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["0eb4b3e6ef96cf190e4d3359e19dad29fc52872294cbd7ae7630dd5a95d2abfdb7b008f9acdbba52783b9bc8c4a580b3e3e16f383c551b11d02a41f07a84aa76"]}}, diff --git a/txscript/data/taproot-ref/576476370370b5501ea6a61ac033110ea83ed7c6 b/txscript/data/taproot-ref/576476370370b5501ea6a61ac033110ea83ed7c6 new file mode 100644 index 0000000000..61cd4f07dd --- /dev/null +++ b/txscript/data/taproot-ref/576476370370b5501ea6a61ac033110ea83ed7c6 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe701000000566f672760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706e01000000333580ee0250697b00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb141a65f", "prevouts": ["7df96d000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "c049100000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cebe1805b4dd002a9656fd180b0893baf3654597c23b46cc67f3675a294fa085bbd17872a9d61e54e96dfef681da77b5399be78aec05b527019b8e812e967c33a95f177959a3d24a94a797d1e607e5550897d4e95d12a52323e6e8eeeab3383c"]}, "failure": {"scriptSig": "", "witness": ["4c52c4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9cbacfb9ac71e83a18047da934e295451257fe751eace0e6de3d0887f96ea29ca92fb159a7f16850def0f13a878cd04653ddced5aa57281dcbf7f9041e8663ebbd17872a9d61e54e96dfef681da77b5399be78aec05b527019b8e812e967c33a95f177959a3d24a94a797d1e607e5550897d4e95d12a52323e6e8eeeab3383c"]}}, diff --git a/txscript/data/taproot-ref/57731bef67046b96aa1a3f92ffbb41851e7b3353 b/txscript/data/taproot-ref/57731bef67046b96aa1a3f92ffbb41851e7b3353 new file mode 100644 index 0000000000..20ebae181a --- /dev/null +++ b/txscript/data/taproot-ref/57731bef67046b96aa1a3f92ffbb41851e7b3353 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c850000000050957517dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce601000000ac49e6a1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5101000000703ea34b033cef1101000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a641020000", "prevouts": ["59c348000000000017a914ff6a0b1cf86e786bc6de2387f1927f71fd08cd0c87", "fabd5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a3736d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_2a", "final": true, "success": {"scriptSig": "", "witness": ["962e277db60afc12b4bb4a72a705ce113f7bec80cbda252c3139ef94efa698dbe8d022a82d8b47ac21e1750b158786f802e4ab047f0c7940f0aadc541c95d8eb03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["e4fb10238c3981b649883f9f2e22b27fc6470b306ad69b2f4b82b7ec4f763c1c731063b92a47e8fca85eea1b938bfdb8857d6bbefedeadeda7aa3805531a34572a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5777068b6f7170fa6a505e9144aa3f6fc8625b74 b/txscript/data/taproot-ref/5777068b6f7170fa6a505e9144aa3f6fc8625b74 new file mode 100644 index 0000000000..19e3c122bb --- /dev/null +++ b/txscript/data/taproot-ref/5777068b6f7170fa6a505e9144aa3f6fc8625b74 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cba0000000025e7d69ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5201000000d3af49b860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701202000000fc825ac201084a89000000000017a914719f78084af863e000acd618ba76df979722368987398c0a2f", "prevouts": ["33da480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "65a5590000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "064711000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367952003d040c7265d30648e0fedf45af2112bf795f8359b3d6f1b95f924fe55e4f4a9cbf846248908cc3621c28de38a375d9ce3ef1fd8ded826daa29f51353851cafc3da456d473afb79353f7068dc1822b24dbf9d7eaef6a0c8c9b611b05e979feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b6ddcef20c10c61d9e21e2293389fb4d83401974c63955ae345dea7dfe41530ea78a04935edfb84e1b4b71380d58e01ed379cbb21cec8f8440ec0fbfce597ab8cd941a6bc152cbea0496b075d4b2611b435301778200e60e8b4147cd93749673"]}}, diff --git a/txscript/data/taproot-ref/578701a27b2e9321384f3e516f48fe5d2ebfad6d b/txscript/data/taproot-ref/578701a27b2e9321384f3e516f48fe5d2ebfad6d new file mode 100644 index 0000000000..be5941d138 --- /dev/null +++ b/txscript/data/taproot-ref/578701a27b2e9321384f3e516f48fe5d2ebfad6d @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2a01000000f6816db38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c467000000004c8c3ed5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa300000000092b0a9b015b3c530000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7962ad43c56", "prevouts": ["4e8f5e00000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "562e3e00000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "81d36500000000002251206ee7f50dd8b37aeb440050df10921bea288340730b764e02d5c3920c65efa447"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09028896e117af595dd9705c395be3304524f3326fb3478abb985ccccc07e8370b2e9c7e98ad8a1878c633df96638442506ae5a3eea8e092312b13480b01c654c634759653fe89282cf2b362f01b518c6fb6c1de8551ed14cb660924801ae88516a329320a5e18d8db90a660e2d775f9053c47d70815280ce3b323f09130b3a73597be2688fdac0a090647991836c98a037df01d7111fcdc2ce22b558df5cc89b339d18fc20a091dd22154159983edcd75e7a42a9b9e62f5cfa1050782a6766a4cceb16ab80fb42980559573d70c369471e307053340470e8c8c0055eb17c5617663687241fa9babe46a2865462f480c713e147302df7c28f551209bf926ce44b94054d2dbd11aa3ad8fdeda79b22fd2e8bf3e93de154fcfe21d20ca722d0aa58abfc596f5f11456ec9ac8f43b1453ff5091a32ba5fcdc218193a21eee610e998595426b582c8e94419de2792645568a5e80ba2294ed6bfafe10010919f9a75aa6093a1c3e467ed96a15c10c8a5bc6041d637d135249e664a077a73ef48fc61e8807d3276695576958046ce3d102482bb310a86886b42e0bf3b77aa9ad211c4f12e44437b152d30bf9930c2a7dc2ee2914f28865f1e811de1caa10c047f2fd5b0bdf2347fe086177c342b78cd1cffd36cffe9e10bcc0f5a3e6d60745b0f18d647843dc8161ab35d9eafb19babce364a41081b0c25a5267e79fc3f52598302d81df81853cfc46e37458596a75", "047d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3af26a389e120e94680e27477caee46163f2ffed4e6499d7dcb61a15b1d76a7c8460181b685601280cbfaae0e90478ea5ae6fea73a2d03f5a79a14a3e0c6d503"]}, "failure": {"scriptSig": "", "witness": ["4d0902ef9653cd2c33b2efda403841c7fb73246623be34cb46bd0aaced5451f10c6fbe9d50dd7277c2b035e2430dcda8810b0e8584ad371be4ebe16d6f002310bbebe35dbd251f91d17738ec0385d7dc4142edf110374e4434eed04175a82b399a61fe4fd84868f26a4a555c4a850da174f16a36ffcb3631da7a6aa146287e4504ec22f5518f4415f35cfa3338a5e9aea294bf7f1803433042442d5e9fe904f77a6027dfb02fdefeed29c12d5f71fa089a144aab28e710cc7a9a069d0528dd4df4291c63b1c77d16a6eeba92bfc6e73fe3713be4b38a268e38b55c6df93b02bd46f46146361e2db556a3d63530d87d38c5b517a78324133e226909a0e891811576e119301efaee047375cc6194560406e3a406ff43e4d36a277302ed308fd4dc9e8bb6d6736d632decf24ab5459404dd34cd67d356dcf5fa84c0ae2d18cc0bd54be2c1462ed825a51501f26276d1f5116bc838b15692bd42770430aeb126a35e7ad8e9b526e43b7c3d672bcac4b0cd8d4e2df4e0f4218a9b37d45804cda80d200e82ae81836957da821cef7a25c0701d97500bc42888ee8e67b1f186fca6734e3460c51c0c2a57ec5fb2508c7899fdfa0088b60dbd4905e6582bae7514231ef7ddb9edc161599a7bd72bc55d434b2944612f1cdaa47d57e8d9ef192f547d7b7cdb2afdb321f940f3d1d2ca41b4c9ea284806874a039fee9d7e5083986d301c8177d13b9320477bd4cdb0214775", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93616320590b22355b457fc3fa4c4fda2fbc5888b55a29cd6e30112b029eeab3dad9de556ac6994112f2dbe51e2f18419f84f5e3afde46d5119f13558b672a3f6371a343680beaae3fbea53ecc49afe7cbe880992a117d636f336d7d159be7b446d"]}}, diff --git a/txscript/data/taproot-ref/57ba07044f687929674d01d0c501e408072f02f8 b/txscript/data/taproot-ref/57ba07044f687929674d01d0c501e408072f02f8 new file mode 100644 index 0000000000..413e588377 --- /dev/null +++ b/txscript/data/taproot-ref/57ba07044f687929674d01d0c501e408072f02f8 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd800000000a44e63dd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bd00000000160a5735025a6d7a000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787fd27fe2e", "prevouts": ["f38748000000000017a914b0716f1bec91d4758ee97d9063c9da884dd2ba5287", "ebc33300000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "967d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e889b1afbd82754ccbdb229e33ad6472305abc54dae2fa9ac3a68b58b93ca8c8390ad15d5ff3e747c4643a2e7779e2cae74c1db700bc0de7d47935e7ffa6ea968f"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936393d3666f153f5444bbde9f12a33ca18bffeb96af6c3b3812e1be180585532ecbf86d7708a8015fd8c392d5dfda539be3c55b3d42b83ba5bec57bef080407e280ad15d5ff3e747c4643a2e7779e2cae74c1db700bc0de7d47935e7ffa6ea968f"]}}, diff --git a/txscript/data/taproot-ref/57e2edb6bce9815f7e92a1cacf2c42a1d8a5ed21 b/txscript/data/taproot-ref/57e2edb6bce9815f7e92a1cacf2c42a1d8a5ed21 new file mode 100644 index 0000000000..ab0a09d92c --- /dev/null +++ b/txscript/data/taproot-ref/57e2edb6bce9815f7e92a1cacf2c42a1d8a5ed21 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c1010000006ac7384fbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1100000000d73802e703a25eb7000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787b7000000", "prevouts": ["edca3c000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a", "b02b7d0000000000225120dbe65d5ea7d032bcaa5c118e4e1c91ea90d9063ab0b7377212d71cac34e27d50"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "247d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936274b6042ebb9d5348c83f5ca8de85b1be0d48f115321b174dec002a2085b4af312b5d836754160f4cb099c4d8b267e29847dad01b12a09dec3875f376ae126ea3506420e788c3ffd3d8d88ddb9154e82106737a8dd2b5d0940daf68f275cd0d7"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936195e60e91131137c7fc5ada885ec733e6b607a015084b0ea1ecbb763e672f30dbda2774425301130c379b9a863bac2b926fc4ec0dd6af03d15dab43b60e3a64c440784f6f41cc1ae323b623cf5dcb000da45020704fab66b6b5f2ff7d67a93a3"]}}, diff --git a/txscript/data/taproot-ref/580742d9b18b0603cb29360f8e7cbfef479c00c6 b/txscript/data/taproot-ref/580742d9b18b0603cb29360f8e7cbfef479c00c6 new file mode 100644 index 0000000000..9cb967cdf1 --- /dev/null +++ b/txscript/data/taproot-ref/580742d9b18b0603cb29360f8e7cbfef479c00c6 @@ -0,0 +1 @@ +{"tx": "2cdaf2c70260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127012010000003b999eed60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705901000000d23472a40318961e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5f000000", "prevouts": ["05ce0e0000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "bd5f1100000000001651142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["3577a9f5e5afd7dec8794ec90f5b30191dc3d1d03aff482e4b3dd0ad46069d3c1df5ffe05a93b0914354000c5013e139352c853c670c19dfdbe29a79b6a88351", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/5876822a1e4504b3dcd7a3ddd10ca0dafc4c9ce7 b/txscript/data/taproot-ref/5876822a1e4504b3dcd7a3ddd10ca0dafc4c9ce7 new file mode 100644 index 0000000000..37b0b70e6d --- /dev/null +++ b/txscript/data/taproot-ref/5876822a1e4504b3dcd7a3ddd10ca0dafc4c9ce7 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8d000000009628e1ab8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f10100000041654ba460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c200000000352cd7d102283e7a00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7eca46228", "prevouts": ["be4828000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "99de42000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "344811000000000017a914d574841bde7bf0817694c799002118e85acf040e87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_83", "final": true, "success": {"scriptSig": "", "witness": ["67b122669ea9d7a03ac499c300412e9a4808c17efdf9b008efa5cae7ffb3525adfe5f7840f42178b593fba90e1011296da951f40f07e6762457d4c69363de8f883"]}, "failure": {"scriptSig": "", "witness": ["0e27f11d7f93665a2300ffb2feac5bf9c0d8119a059919ac703db6df7ba006cf0adebe580bbc4318c6ccc92082edb6d8c928d4d1b4cae47a46e2abbbfe78479283"]}}, diff --git a/txscript/data/taproot-ref/58d98ae03e7b63b61749dae272899a7f41a89c30 b/txscript/data/taproot-ref/58d98ae03e7b63b61749dae272899a7f41a89c30 new file mode 100644 index 0000000000..77b1651781 --- /dev/null +++ b/txscript/data/taproot-ref/58d98ae03e7b63b61749dae272899a7f41a89c30 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf160200000050c0ec8560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705d000000008597bb100331928b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc94010000", "prevouts": ["f8447f00000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7", "18440f0000000000225120d1655db6fcb356decaccee2a8cc0c67c6e760726bed93f7ed1bf145bc7c6bd94"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902492faceabd608f860a47f22399d1864fe7d0d4ce3321cb876e2535b169e40c0f6893bce11d6feae29f33aeb33f16fb8a0c72d668d8817fbdf1339dd2b775ac0732f396358fe4d6117ebd38e068a3bb65c59175080482645e3daf525dd6af113075391da98059e95a23b704408ce4d3f781f311b82e669e9cfe3e07b3d8cd80c701be93d88f40bf336f2cac12691c3bdeac7e4337ce5a2eb3b8643ca096ac1835b1a06eef09b5aa00529246d5bb4ef7a170e9b32f1aee537b504d852f2df25efec7ff5dd543575b31e6d79f037adcc552536a9c122672dcd3cb3904a011a28cfefbe750bd7464748a217129cdd431d407d7333dc7dbac08daa00e073faa1cbe500a0a814fbc4f7812b8b22d58b6d133844717a4044bb8b1d950b40c34c9c095a290524c523c574957c878618e80fd77d4763771faf38b5fa5aae8e5ed1e2842915151d5b96d411dc06cf7a012af2af502020d5e42a5005cfaa26d21b8b6755b9e2a5d4215b4ded5ccc91869a3390c16bc736e283037c0d06f7a1f71a55f886ec679b2aeb88140d6ecd79865cc22865cc45e3ac021878ea9f32594a144219dfb8df3e9f4492c64daea879dbc9abfda230b1b1d02e64e516c30f6eacb0c15f35fb352adf9518c85371123fb8be9e5331b07ec4477f28cc743ff4a32a9b286a8bc5f6208cf77aed995197030de4740419f634268bc877a418ab0b9f20631daca7e06470c65a3868885809375", "b37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ebec8f444f9538a00b5e533aa370349d7181cba703021b72fe611d481b359a8e62055c347ba5402321504576f6c37d0c6cb1d044ee75df535bc9eec0560634a7"]}, "failure": {"scriptSig": "", "witness": ["4d090272468123f56270b4333f287cd1502515beab062f9e033575e93fcb2d4c5b2b60531b61e57d70d57171d03defe8b2385399ada175c6d235b79d6cc8281ed2116cdfb08261cc187de7185b5d6fae37c62585797544cc4e34d6945f5d04a3a9823960c6b55ea761237e10ccdeba6999731c218c5028dc51ee059acf495f31357d1f3a73058d87cbf6a2232d0b942f9b34388893dfcdaa1d38dc42a32c3c39d2443d8f5f7bac4ba8c3513115c73139bff8b02e8ff2e836b26b99312b4c689ae5d6872d6f8618c2d75a16b4b58d9292ddb7d6628bc5fedfab017ba5d03a8ea167f23e4b46c959282578ce472326f36b43a369294daeff4773aa42af1b2e54d07b438923d393d2c31146450f3634a211c9d8b4d1e8f52739d21e05ccc0b068d2182aea690bc46548dd0af9353e4f26fb7a1d839073cd66cabb352d9e5e40f035a99c0d6404bf430eebd59b900ea55a759bf7fb049f0c4845918710474168fa34e7f3f0239d6cae820434cc3377ca9bc5b199c9e149c37c89db262f7659f06dae8d9b26554f2c1b0bc51512411be4834599b825877108d495e4c640082f81f3b77c5fe68e1503b8ce987349d22f49613d934a02c06cfc98ebafb4d06854e87c7c28f3ee72b600c20f16c059fe266a349799ac0ff277743c3b4dd184d0f408e7a97881800e8667b6be3d218bc305a2e05f9eacbbf1b280e9088fe5c3d3f317727e332051083d4259ad2e0420f975", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936497c7e978e1ad8a50d6711ca68bc31cb28123919e82fa890ac36ad6e92fae3cd95b7d6bda25431cc8e02e54f2e1c95b50d23fb11d52c977ad7d2dfd588f90c1962055c347ba5402321504576f6c37d0c6cb1d044ee75df535bc9eec0560634a7"]}}, diff --git a/txscript/data/taproot-ref/58dd5844bf68fb5f47e929bf24c7d8dc2cab5791 b/txscript/data/taproot-ref/58dd5844bf68fb5f47e929bf24c7d8dc2cab5791 new file mode 100644 index 0000000000..28bc3d1f69 --- /dev/null +++ b/txscript/data/taproot-ref/58dd5844bf68fb5f47e929bf24c7d8dc2cab5791 @@ -0,0 +1 @@ +{"tx": "561ea52603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6001000000363305b7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd501000000b8f01b8d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c442010000002b7372e904bd41b000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748703000000", "prevouts": ["f0d7250000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "3f614c00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "cdc840000000000017a9148462ed29696925d7688e1db8e76ef9e6667f05b287"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d74c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366581f7b0ca6f1aed206970c0804a234f1a44041591cfc91f27f0238489d6aa9aaffae472ebffc4152ddce3f20794b01737e96becc2bb4a1a296a47c8ec0d29af569af0f9e86656db21fe5e74d4bdcdfc2cda5437bccaf9e3d568ba1282fc608d76e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}, "failure": {"scriptSig": "", "witness": ["4c52d7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369fb2550e1ed51643baef309f81b6f22207378bdcce142874e2eadbef60c073106e55e6cc099b3fd5cca65d40087200ff064f8f598dc371f61f8d957b472ffb5414746b6cdbbdbe747c087a2d99e7432ddfa1db1d7a6445e7dea3810e7475536557a61376c510bdd1fc860151a3b261939fa407ec1a2d0490cf2efc4278abc783"]}}, diff --git a/txscript/data/taproot-ref/58e9cc8b18e2ee0f4ef6cfa6222d9ba9c4e6999e b/txscript/data/taproot-ref/58e9cc8b18e2ee0f4ef6cfa6222d9ba9c4e6999e new file mode 100644 index 0000000000..4b176e65eb --- /dev/null +++ b/txscript/data/taproot-ref/58e9cc8b18e2ee0f4ef6cfa6222d9ba9c4e6999e @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f801000000038e6fa4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c00010000005e6f05c7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6c00000000737b03c302ffe3c000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac65fd242d", "prevouts": ["a82c3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d5b75e0000000000225120733adac9df449b2595d1b217303cc00a8e3c5ae4d51e5f74120e9d2d90d81fcc", "1b492600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936399ceda524fd992fa8b819159764767086827a3dfffa524bc5c8b2e9b363d21d"]}, "failure": {"scriptSig": "", "witness": ["6a29616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/58f607b447f90cc1f1f8626ebec53c5173658a3b b/txscript/data/taproot-ref/58f607b447f90cc1f1f8626ebec53c5173658a3b new file mode 100644 index 0000000000..3a1fadbafa --- /dev/null +++ b/txscript/data/taproot-ref/58f607b447f90cc1f1f8626ebec53c5173658a3b @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706d010000001db75c8f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e70100000040edebc3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf710000000010bd48dc0265f7b6000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc3fbaa343", "prevouts": ["9930120000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156", "dded350000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "1558710000000000225120ba259941c99089f87a1bc06d64ef249f01ab7891d30169746f94b5a6d9357ae2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d6ac5d894ed28d75919bd671c475effc497e0fec610bb120a5968a6df92db1bec343041e033fdd8af2791d16d4589ccf5e4c305832c3fe2d018b69b91776d5506ed2b07bc22bef869f4f341e995eaf352a79c5308dc80f6bc11fe0290b3c756c33a13fab4d30d9e0f2ffeeb52ba377416ce2a4b6cb1da7c5d6782dc58c5c0fe4b0392c86968b3d41e618e714536594016ffeb97e7a3cd0e245e50d4a83cc7ab7c7de629459f517413aa269570dfe96d60a8549a65ff365354db55a744afc461058622ad905639c87dc671ba58c4dc142ae356b1ad1d31968f8b5572d0de8d96171fdaab97030d7f1e106882f7bc902bf546464513c0ec819378d0ed0cd402f69808df7a2a762240b0921a5a6568df602b9db9b7f4a6233d93c467b205dab9a65a4fc43397d707c4553478fa797b584eaf9e599f2fcd26b85f932323f9956ee4a83e4b54a9e9c213ebe43a07e7d17edd7b6a73f403cfbbfbaead28edcd230967e9c36e6aa8d407b46a9f98e6f4bd6fd3ef5d951d4611fb718c339de9bf2b24cdcd9ab34d3080d4dee7565a582e299dd929cbe9427556e09f7289449be9fb1b12ffa5f1cb2ce5b3e2a838c6cad91c9f8d1868810f1b30972c1a9309fecbc430d5dcb35763b3a531b5ee3807fd5f2c9f5dc3d928c87c3e9469468cbcd9012fe3571124fa773bbabc2ebe2c79912803928b8ac265541bb67d9aa3c372780e40d4e53046e5728836e876a1d75e1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c3ebc90e5160821628d2c57ea2f64a4b98877001fa79d5fa719df35ccb90b6abbde4683e2f88a3942929fc88a4cafb8eec09785ff7c9f0b883255a650cf557ca66ee26669afb6dac63e75f53b4cae6cf36ae7535fe99100c6f349ffc46155d224f44ecb3bab6b962a7ffa14a2ce082ec551943f33ce508b63a8ee30ee5e49264"]}, "failure": {"scriptSig": "", "witness": ["4d090210bd435cbb1095a0ddfe7f366a184eb919bc03ec09d806934b20371460792c481b9e3624e1a14ed647b3c91f038dfe216992b567551b0ea0ae5c5413abcae573bd17fb973caf63fbdd2150881e49ca546b2952049a8c51ffa82e10f3c7de1e97f3fc9804b120e948635395fd5ff49876cc1d68987c9fe54a00ade931e4df10da96e2dfffebfaf434bda1ae88197b849d01af37a6468dafa477cbe2d84d81277e1bb9f76292c88cf7d6bd2dcb695f132837adea0a4bcb73e0b664fa7f81d33413b01da5692d24126a4db72185b0abbd9e569ba29be720203bb9f8d22b257cd6fd4b730f8b8b4590d38fdba766eca943bcbfa4ea0436dd0ff16251f17c5b00ff06f754ed5d609fdbfb745574f501bd1db5a42c2d62249de0d91349d8543bcd1c55614ed9748aa3e45fd46ec63eea7d154ae39e269f327b2c73229eaef5fe05875bb6fd8b2cca373df01ea817840d196defd912b3dac69106fe6fdf5a5e66803325142433c7d536e22c2585bbb913a3306c88b0c961105dce7e703902a59352eb28a6eaf8e247b4b2047ddb93fd95d0f197f66a67b591657f14fdd82bcac761485ae0859dba8c6c1d4245251461a8edca37987037897e5096e8f2bbbaa43a8c1b63ac8774f91fbaeb2117441230df32b46db6dbcbceb8fc2a0fb89d382dff6c8df7d17cc5f6d21a9e8f03ec8a9baa83102c93a7cd267e0b976d8e7d703fae183b831a5ba3d7fac85484ba7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d513070c0d29d47e9fe7be7df27becdaf45cc7da31561e827162b16aa01fe84c4a24f44ecb3bab6b962a7ffa14a2ce082ec551943f33ce508b63a8ee30ee5e49264"]}}, diff --git a/txscript/data/taproot-ref/58fb9dddb99befb27e93f61cc7346e2e320d4124 b/txscript/data/taproot-ref/58fb9dddb99befb27e93f61cc7346e2e320d4124 new file mode 100644 index 0000000000..59bd96f0c7 --- /dev/null +++ b/txscript/data/taproot-ref/58fb9dddb99befb27e93f61cc7346e2e320d4124 @@ -0,0 +1 @@ +{"tx": "363a05540260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700f00000000e95226b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b34010000005888338d017b9b0b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac4fb5bd44", "prevouts": ["c009130000000000225120440c37f254c07fa4cc41897f3d6c7e819f00ad5f6c5ca97225bb132b6849e94a", "0cbb220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_70", "final": true, "success": {"scriptSig": "", "witness": ["98ce72c2934e1dff341aa1715387831de345d4bb16004b8f58780e1c404c68d720614c644cb9bafe0d29812957cc389f434fc2a7b5e39c68cacfd7bea0bc993f01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["12ecb843497bd08656e85718be0e8f7172b533757165b010ac4a58b46c16fb40e87ae4d8decd61bcf02f3e0f247e4238ef3c725fa7c65c09f9ebedb75d1425a670", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5901e4b94bc2da63a3099505728106aad680aaf1 b/txscript/data/taproot-ref/5901e4b94bc2da63a3099505728106aad680aaf1 new file mode 100644 index 0000000000..1095acdd75 --- /dev/null +++ b/txscript/data/taproot-ref/5901e4b94bc2da63a3099505728106aad680aaf1 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3901000000d158bef104baa42200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df97972236898740000000", "prevouts": ["1790240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_78", "final": true, "success": {"scriptSig": "", "witness": ["7bfff1571b28d2b1951c409f8261b3c759aac2ad0dde259adef342b4a52fdec847942edecd7da47bd8dc8cd3a1ee8d61725ec929f78657ef41778ca50610e8b002", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["fe18afdc833986a8455155c2ef5458da646bcaa72aa7042cbdad9e8385ed0c6677318fbed10a32082e9c9ea26fa0c909a58ab0aa459e3e3eba9d79fa43c8f31178", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/59170b1799ffe9d1e085f2b8c38cf655ca14f1bb b/txscript/data/taproot-ref/59170b1799ffe9d1e085f2b8c38cf655ca14f1bb new file mode 100644 index 0000000000..0a95bb3cb1 --- /dev/null +++ b/txscript/data/taproot-ref/59170b1799ffe9d1e085f2b8c38cf655ca14f1bb @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702f0100000063a3e9c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700502000000f4bedc840447552100000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acae030000", "prevouts": ["fef7110000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8", "2a3712000000000022512077461b0e3955cce0a8e05b12e20464a062d47e96c909cad0353185349b78401d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93696a694b26b6349dc8b1d316bba0314d4d3dc947d10f5241ff95786180ff398b9e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da733fe71e3ce0c37752cc3ed22f63651cf62c657cae6a4db35497744053504dcc62bd398c27c2bcf203967681d855a98ab83c6f29a4f091e05b1c584209e732"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d966958a6a534cbe77cd310764ead8a0428b575df096895d63298a54d270e70ef5981cd58c469d4842aa56f101a76a4447dba55ab7a128197943d7701f95f2823b7ec1fb3aca1c665feb629f75b86bc6796ed5eb830658d68574ea157b89fde9"]}}, diff --git a/txscript/data/taproot-ref/592e17797674340048f2ec49023bde0febe810f4 b/txscript/data/taproot-ref/592e17797674340048f2ec49023bde0febe810f4 new file mode 100644 index 0000000000..5d31ba9900 --- /dev/null +++ b/txscript/data/taproot-ref/592e17797674340048f2ec49023bde0febe810f4 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c0100000093647caebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd200000000897280c9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf63000000009dfb36d60406682001000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388accbd14a30", "prevouts": ["e211480000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "22e868000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "cd58720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "897d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e0000de5fc6567ef06db1dece55569d9fe4e9fbe0d833ab67420ad09244343ad18ef0696df011c2e84d95b8f4877f40057090cebf81e873c0600d23ea60362df6c56da6b4a79dd49e001229b88fb5122d120ac43d63d1be0cdb38b208b21132e"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c13e8217f4df24b7ed05cd750bc2df5f0081699b55d294026679edf52b865a2d9facf4edbbf526ff5eeb12780b24daca1831089abc7bf461f974d05d276c4783ac632f1e88e109b3d5485dae08acb0148fc939094c3a94300b3efbd66c89bc20"]}}, diff --git a/txscript/data/taproot-ref/5930d2e1ddc70c728b1f219bfa14e4053fe56dbc b/txscript/data/taproot-ref/5930d2e1ddc70c728b1f219bfa14e4053fe56dbc new file mode 100644 index 0000000000..1fbd24aef3 --- /dev/null +++ b/txscript/data/taproot-ref/5930d2e1ddc70c728b1f219bfa14e4053fe56dbc @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cb00000000e2137298bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4b010000003490f9c1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5901000000e9b952fd0237c4c2000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898757020000", "prevouts": ["30081100000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335", "bc186b00000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "22bd48000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "087d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cb173d9968a47ba6c5c74f630df9011e2eaca208cfb301cadfc15d58ec381f47a9c5848e7797e88ab157cf3f92cb1e084ad7139395a6330a6d0efe4ec0158f0520a79ac573d08fada6e0a495a70546abebfe2eb256837e38d30334686ccae33"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e881f944ef569cf36d808a56aaa75ca2fdbdf4182c26b1d87989a6b5ad676759bc691c2a9908d9e7287fb91837cd9c32b2a21ac331bb306f4648aa27bb40422e45371e41a07562523a12648be26bdba66be78ce7e249298c356e66cf29847872e0"]}}, diff --git a/txscript/data/taproot-ref/59357c2c93a40183682393a898e6b58d6e81cb14 b/txscript/data/taproot-ref/59357c2c93a40183682393a898e6b58d6e81cb14 new file mode 100644 index 0000000000..20f47da858 --- /dev/null +++ b/txscript/data/taproot-ref/59357c2c93a40183682393a898e6b58d6e81cb14 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7a0100000095d9f0a38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4af00000000ea0b84ea030401b30000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1bbc2046", "prevouts": ["1ff07f0000000000225120aee326bed25c38bbd2065ec54ba80d7933aa4c88bcaacc9a661dae671bd05d2c", "3a2a350000000000225120cf1cdbebd76187b7cc76a29147a6cff8f4ffead99137b52e0c175bb15fb623b3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93632b3ef9681fb815518e003feddc929afb08e1672963f3eb536a9a38227c931cd"]}, "failure": {"scriptSig": "", "witness": ["6a4b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/5951e8f0a0cafab1db40426b854148481b762ce2 b/txscript/data/taproot-ref/5951e8f0a0cafab1db40426b854148481b762ce2 new file mode 100644 index 0000000000..f3069965c6 --- /dev/null +++ b/txscript/data/taproot-ref/5951e8f0a0cafab1db40426b854148481b762ce2 @@ -0,0 +1 @@ +{"tx": "c07ee00c0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270200200000062d802d1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cef00000000fd6645bddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3b01000000fb6fb2d2013a6d4300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac24ec9a3a", "prevouts": ["db2511000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "86f3560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "946057000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "7e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93601763a9a2ad9de81aacd638dcfd4fda3d0aea4cfecb2218c942c0044c1357ce3e4e9bfb46536bdbe14fd1969523d98350611f9c0fc6236e31514e2d43f59e146f2e4a14a40b0acbe20218e44481fe6660f01d2e0cf04e3bc8d4452bacd1080d1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e846c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fab95efb91d04564594d9dcf752eb8fd975bf01996a0bb9f9eb7163324924bcd44fa5d068ae686a8bb1ac9947127542ac866077ad522de57cab26ce701d52bc951"]}}, diff --git a/txscript/data/taproot-ref/595901e13730319ffed24982bd4ea8c12e89bc96 b/txscript/data/taproot-ref/595901e13730319ffed24982bd4ea8c12e89bc96 new file mode 100644 index 0000000000..c67f036e2f --- /dev/null +++ b/txscript/data/taproot-ref/595901e13730319ffed24982bd4ea8c12e89bc96 @@ -0,0 +1 @@ +{"tx": "6b2f1e3902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2700000000e8905cd3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba9010000008c35e8f9017e2c3400000000001600149d38710eb90e420b159c7a9263994c88e6810bc7445d4235", "prevouts": ["09254d000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "36be28000000000022512081b6fde8d6a32bf994f385f13e2db06adc6a69d3d570a785570e2b0fcec09f40"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936923488173528c4b9dde2293d2d6ae310180a9f48368b5c2aaa9bb790d91e7493"]}, "failure": {"scriptSig": "", "witness": ["6a20616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/597a6a03965d41f1179d6a45268ac32531a9c209 b/txscript/data/taproot-ref/597a6a03965d41f1179d6a45268ac32531a9c209 new file mode 100644 index 0000000000..01096d88f5 --- /dev/null +++ b/txscript/data/taproot-ref/597a6a03965d41f1179d6a45268ac32531a9c209 @@ -0,0 +1 @@ +{"tx": "5546a66c038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d400000000b5d77298dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b120100000066b879f3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfda010000004fcfbcc7041d3ac4000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf2010000", "prevouts": ["968f3a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ebe5240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d3e1660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f7", "final": true, "success": {"scriptSig": "", "witness": ["71388e85bc88682be2696b60a83459f4edd22d13a9bcb2f7a3ecaeeeaf7553b645508f8b3a36244108136f54e480b2fab00c85c3e21442fe475bd0201ad56f8d02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["348b3f4edf4fe977b6ad2261589d623c52430caf094f898fcd8e7e1874a979e49e4fc6b5e1cda0e5f957f89e2a1bb92c958d91aa030ac3df64cedc3867979f38f7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5981777edd562076958d2a1e4c80225a425eb08e b/txscript/data/taproot-ref/5981777edd562076958d2a1e4c80225a425eb08e new file mode 100644 index 0000000000..ed1fbea985 --- /dev/null +++ b/txscript/data/taproot-ref/5981777edd562076958d2a1e4c80225a425eb08e @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2e01000000c5dd29acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca2000000009f8c9bfd026dc5c20000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3aba894c", "prevouts": ["ee7c6700000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552", "cd325d00000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "537d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361e9dee4062f54961d8ab1adbb5855faf1c96da96092bd787cd156b5117b50716aee97a7dfb8acbc78fdce4694f8ba1e1e3bf612a81f34559c93e6dfd336d600fd892d02e0db2d70aca72db86bdb1e35d04291625c81ec0b3d884b10be9f787fb"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367092fdad059f732c7ea7ebad169b970067d4e4ac878b6bbd4d3081f11431e8f3e1ea8876939edcfa4030d01bff156fecefc420cd1c8fec8a2f14f09f14c187072e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fde150f8c7b4812d3362c6afa34922f3b5cc4b63cc9e98285537a088f4a7fe3bee"]}}, diff --git a/txscript/data/taproot-ref/598b73c14cf25c235e0cc5c5a3bf6a5add3b0b66 b/txscript/data/taproot-ref/598b73c14cf25c235e0cc5c5a3bf6a5add3b0b66 new file mode 100644 index 0000000000..a81af9b446 --- /dev/null +++ b/txscript/data/taproot-ref/598b73c14cf25c235e0cc5c5a3bf6a5add3b0b66 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffa0000000003a2aaccdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6d000000009d67e03e033aa3a6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75b000000", "prevouts": ["4d2c850000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "6dfe2200000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["804c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef50ce65e1ce97b405f0b78362b0983814277331f92d6e6fe48e5fe1e54fcd63d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b44d35a0b3fc5d8cdca17f6fd766b3b7f076a7a891ad519d38c56688c70ff9dbd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cbb3471782f6552fa4d140adb875524e3bffe9f0a11868cc08e8f15e249039b3e222414f291e7c8e231e07541c9ce63e3a938f40bc45d6936d3328c3939c0fbc26dfe099323fd489e28deb26e949bd9371fd3334eb17fb18f59b980c6dd72afd91585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}}, diff --git a/txscript/data/taproot-ref/5991f803b4df614fde19c2f5742b860c1a14d33c b/txscript/data/taproot-ref/5991f803b4df614fde19c2f5742b860c1a14d33c new file mode 100644 index 0000000000..12863e5db2 --- /dev/null +++ b/txscript/data/taproot-ref/5991f803b4df614fde19c2f5742b860c1a14d33c @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd3000000009fe7febfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b86010000005573ef0e03daf96e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787dcce0e48", "prevouts": ["492f4f00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "2c5e220000000000225120d0cab111a0a7736e4b6d77027eed86efb57774f05b322cfbf052f28c507b8b1c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["4a016cdd855ac098bbc95cb5c41d1c400c9a3c5eb2432ae891f1d0d87d9ad820c401cf59134e62152b6b5ed584501ea2e92ee734c561224a3a2d3e787c23e7c3", "8ee6b4", "7529dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b325000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f00eb87a4692b27acc4891d8d3e3cdaac6444510f2bb10f8271fef4ca4ad1c0fe23310ec75f77fca2c744850a143acb95dbca139f1193d320ccff9ac1780fb1200000000000000000000000000000000000000000000000000000000000000008cc5e62b22fc06ef194978040fbbf674b0e75abfea73fecf2b459c58ae47ad882a91134608b03876227b33925d69e197a18014be235f82e13f964d7e3ee38004c0291c475bee6e13b50480160389a299a4b8bfa7b163538b8d8229b0930e2e95d5f24a89f7554a816325f89504348a7d04aecf72acb7b3161cb42fa26a77326da2b24b755b3ef6773bc8621c5ba012fe8e00c045c6e2f4bb3ebb2f332ada06e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff988bdef943b15b140cdff7ec7804e0bb3df71f763a819e6085ab4a023dfd820948788096dca9fcae82406e083f7a5bedb7db7513a0157bb52bb26f5c29a9516bfb98336861334fb562d365d25a0295c02465abf4545073426ad34a74496923045bf3818d0d3e4c68b13105477d601411785766c22f357699c168d77ad7c8093345c7c6f664b265eb35797bac4e334f98b09f0ed0be5ad6a1be3ebf075cdb341c13eb9944afc357320db238b1601374cb5a7380109c721b09169a336fe81b19f65d395042b8d29122c2810648100d566e2be256d187c66113e3d167df245a4a80ca22df8ea9052a2067a5cbbd192ddd984a0553182843c9e58b5df2dee7f0e3ab69df084681e31896355d4ff4ddb8f66ca0776fd972ceb5b66681b6af4464e832a851a610b136b9d645a3aa7782aac993cb67f0aefce6ca930d24c633dc85b548c64429ca549dbc28b231a4785cac759b2e8f7f18cd068976879f23d2b39b902e480a98b31bc5fe0133271354570993f2261dbaac4ca480005e892c8b3fcad779a93c262a615e37fdaedb6906e28e4e46a511c8bb1abeadafe21ad4734af8de8cb842ca308a2f241ccc07a2c270e302afb6961b621c803a1e05a1dd5089f5568a924ee539b7ecad14df25c5c2d532eed053407eb2e5fcbb67f619bf374b9fe9a9b6ca5ea3a401b564c26b8ec057bfd5764fe1713031627bfaa66d5bac9eb4b50be22518d97c445c2666c3aae84fdc5fe5fd9d61b7fa8e1a9dab09103a97263c0a4753a77f450cb32ddd91f90c6be53fc26cee49206499a19a91266328d53c306ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff561e43e3a89a40edb4478e82f6a8df4d738ae87432ef72cb3eb5a3c401f8b967"]}, "failure": {"scriptSig": "", "witness": ["4a016cdd855ac098bbc95cb5c41d1c400c9a3c5eb2432ae891f1d0d87d9ad820c401cf59134e62152b6b5ed584501ea2e92ee734c561224a3a2d3e787c23e7c3", "598f", "7529dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b325000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f00eb87a4692b27acc4891d8d3e3cdaac6444510f2bb10f8271fef4ca4ad1c0fe23310ec75f77fca2c744850a143acb95dbca139f1193d320ccff9ac1780fb1200000000000000000000000000000000000000000000000000000000000000008cc5e62b22fc06ef194978040fbbf674b0e75abfea73fecf2b459c58ae47ad882a91134608b03876227b33925d69e197a18014be235f82e13f964d7e3ee38004c0291c475bee6e13b50480160389a299a4b8bfa7b163538b8d8229b0930e2e95d5f24a89f7554a816325f89504348a7d04aecf72acb7b3161cb42fa26a77326da2b24b755b3ef6773bc8621c5ba012fe8e00c045c6e2f4bb3ebb2f332ada06e0fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff988bdef943b15b140cdff7ec7804e0bb3df71f763a819e6085ab4a023dfd820948788096dca9fcae82406e083f7a5bedb7db7513a0157bb52bb26f5c29a9516bfb98336861334fb562d365d25a0295c02465abf4545073426ad34a74496923045bf3818d0d3e4c68b13105477d601411785766c22f357699c168d77ad7c8093345c7c6f664b265eb35797bac4e334f98b09f0ed0be5ad6a1be3ebf075cdb341c13eb9944afc357320db238b1601374cb5a7380109c721b09169a336fe81b19f65d395042b8d29122c2810648100d566e2be256d187c66113e3d167df245a4a80ca22df8ea9052a2067a5cbbd192ddd984a0553182843c9e58b5df2dee7f0e3ab69df084681e31896355d4ff4ddb8f66ca0776fd972ceb5b66681b6af4464e832a851a610b136b9d645a3aa7782aac993cb67f0aefce6ca930d24c633dc85b548c64429ca549dbc28b231a4785cac759b2e8f7f18cd068976879f23d2b39b902e480a98b31bc5fe0133271354570993f2261dbaac4ca480005e892c8b3fcad779a93c262a615e37fdaedb6906e28e4e46a511c8bb1abeadafe21ad4734af8de8cb842ca308a2f241ccc07a2c270e302afb6961b621c803a1e05a1dd5089f5568a924ee539b7ecad14df25c5c2d532eed053407eb2e5fcbb67f619bf374b9fe9a9b6ca5ea3a401b564c26b8ec057bfd5764fe1713031627bfaa66d5bac9eb4b50be22518d97c445c2666c3aae84fdc5fe5fd9d61b7fa8e1a9dab09103a97263c0a4753a77f450cb32ddd91f90c6be53fc26cee49206499a19a91266328d53c306ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff561e43e3a89a40edb4478e82f6a8df4d738ae87432ef72cb3eb5a3c401f8b967"]}}, diff --git a/txscript/data/taproot-ref/59a01c32eca07dea482bf25537b7d52b7bc5aaca b/txscript/data/taproot-ref/59a01c32eca07dea482bf25537b7d52b7bc5aaca new file mode 100644 index 0000000000..e31e1e5ea9 --- /dev/null +++ b/txscript/data/taproot-ref/59a01c32eca07dea482bf25537b7d52b7bc5aaca @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc4010000002b6191afdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21020000009884a17cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1c000000007c4b09c60226af4401000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd3000000", "prevouts": ["c299750000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "05cc5a000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "080976000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000de", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045591d3592ddb0f56a18929886f1890713028f922113494349427ddaa1ea39184e02b5f712fb146ffe69ff220cec8aeafe04d8a9d43d299b22043a34551aa1e56e09208a3d5cb0b20fec302022af702ea090b934668d0752a16a75cba2aae8c677"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360de7d78f78fcc1ab87c0aa695c1bfde682cf6b1e0f8cbb7a903d4a6ffdb03c46aac1f02719ff09c82d93c60ae8b21e31f1ec3fca4030b09dbe2604c5a66091c209208a3d5cb0b20fec302022af702ea090b934668d0752a16a75cba2aae8c677"]}}, diff --git a/txscript/data/taproot-ref/59aa7a8b1146af0061b9b9478ffb499b5e7f3229 b/txscript/data/taproot-ref/59aa7a8b1146af0061b9b9478ffb499b5e7f3229 new file mode 100644 index 0000000000..ec5fe8b440 --- /dev/null +++ b/txscript/data/taproot-ref/59aa7a8b1146af0061b9b9478ffb499b5e7f3229 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b85000000009369fd8bdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce3000000008641938a0366ee8000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce86e6736", "prevouts": ["6ac7250000000000225120c1ae6350d5e25c8637e3643ccad16ae3a3009b1bad8c1dbb165abd62db3354a2", "98df5d0000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369dff3719d80ed973188b1e18c406e7a882a557b83701af7fafb01b5e6c08518b"]}, "failure": {"scriptSig": "", "witness": ["6a9a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/59b9a0e1dfe394504f08eae69abd47bfab092572 b/txscript/data/taproot-ref/59b9a0e1dfe394504f08eae69abd47bfab092572 new file mode 100644 index 0000000000..7091d116f7 --- /dev/null +++ b/txscript/data/taproot-ref/59b9a0e1dfe394504f08eae69abd47bfab092572 @@ -0,0 +1 @@ +{"tx": "23ccb2ba038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d2000000000276dbdddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc201000000bff559ce8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49b010000003499f1aa02d96dc3000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac8a010000", "prevouts": ["334c420000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b5fe4b00000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "3fdb36000000000017a914aa4a4e70b11f4eec4760f77206dc93b02350fcff87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1656142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["76090b842d03017fcc3a54ee33291ec26151f7678de4792da9eb6ba5c5f8bc12f1cf6dc101a14ea93f5577908ded8f80c9b53785a1a89a38f47e6522c1e3fb4e", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/5a198317abb136510b17c59de5eaa7c880152f8b b/txscript/data/taproot-ref/5a198317abb136510b17c59de5eaa7c880152f8b new file mode 100644 index 0000000000..a7279a2145 --- /dev/null +++ b/txscript/data/taproot-ref/5a198317abb136510b17c59de5eaa7c880152f8b @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702e01000000a82179bedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf101000000b57106c802fe846b000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac32000000", "prevouts": ["b7550f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "45bd5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ef", "final": true, "success": {"scriptSig": "", "witness": ["f5259f26a46925063bfd0d33a1df0e884a946857efddf2d6a9b96ce25ab7160a9523c6d19b3fc533bc8a54a4f5bdb9de32e49a8ba0107501c976db88b488480302", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8f38202eb656ce07410e142d99a545511f1c2a6922f58ab00095360d409862b6258b14dee274181e99091174ec7f3f7cf5d404c0de070af16f0f8a3d2bff5f01ef", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5a53b6c3fb03892958b022df8a6e0a4cd3d8e51c b/txscript/data/taproot-ref/5a53b6c3fb03892958b022df8a6e0a4cd3d8e51c new file mode 100644 index 0000000000..8bb0020292 --- /dev/null +++ b/txscript/data/taproot-ref/5a53b6c3fb03892958b022df8a6e0a4cd3d8e51c @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb1010000006efd7897bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdf0100000078ee6cd803e00dd4000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc55030000", "prevouts": ["00c563000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "dc71720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/pk_codesep", "success": {"scriptSig": "", "witness": ["781cce034e47e081dfc6aee6d7a23af9df7a9c128799aadddf5edc10761334b8ff406be65cd8e25817cdab42a4e765a199b157d68aab2a3b46a7d6b50d7b0dce03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50fc41f5a2bd1748e2a7f00451b8b318fed29b9a"]}, "failure": {"scriptSig": "", "witness": ["910fdc32fa386f26136e3f934cd48eb062be1b19c61cf0b2aacd04de1f93386836cd074b132c8d9c7e8745393b31bd0ede6ae53f2fe21030ee8428b5acb36d3682", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50255c0fb59c91025ae877168f6f73e3860bb0f9863f2740801075fd4141576e5c3b6cbb8ae7252a1aefd0"]}}, diff --git a/txscript/data/taproot-ref/5a5abab97631cffda0f11fd3ecd87d86dc325f8f b/txscript/data/taproot-ref/5a5abab97631cffda0f11fd3ecd87d86dc325f8f new file mode 100644 index 0000000000..cc5ca6fe83 --- /dev/null +++ b/txscript/data/taproot-ref/5a5abab97631cffda0f11fd3ecd87d86dc325f8f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf79000000003b14d3dbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2401000000537929c80432a09e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48751010000", "prevouts": ["a0c57b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f4c4240000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_fa", "final": true, "success": {"scriptSig": "", "witness": ["e097ccb88c98bc5b320412d3824c0b7ebbd66b9acc8fa4536ade9d90a7db4875dec758916018f082985fff817c38bc79b6e5b92489c7fcb97f2c823d75a94bb182", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a7e58588e9e3f011a7aeec751f61cf2c36a22221a66678d803d2e6698db1696540e8ab9735b5d69e5690e6d1902590d02801aeaaad47db75fce701a887ec0676fa", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5a5d03ff40bbb94cac9b06c3d47e693d8db5af67 b/txscript/data/taproot-ref/5a5d03ff40bbb94cac9b06c3d47e693d8db5af67 new file mode 100644 index 0000000000..5ca23af06b --- /dev/null +++ b/txscript/data/taproot-ref/5a5d03ff40bbb94cac9b06c3d47e693d8db5af67 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb1010000006efd7897bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdf0100000078ee6cd803e00dd4000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc55030000", "prevouts": ["00c563000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "dc71720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "677d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a77b70c46c994a01ec5a816124f61e0f5d1b89a7d1384137283c1b5de2b508b62e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdbceae773fe677547a5f8be2986f5e4c7dc436c0d3f0e1e86711aa468c8778215"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8687eac120734a03ae4c27d3bf57e4c4c383799b8e878ebb1c20141d650e89e9fbceae773fe677547a5f8be2986f5e4c7dc436c0d3f0e1e86711aa468c8778215"]}}, diff --git a/txscript/data/taproot-ref/5a5efe209bb7d1e1b0085b1515836fcb2144c5f7 b/txscript/data/taproot-ref/5a5efe209bb7d1e1b0085b1515836fcb2144c5f7 new file mode 100644 index 0000000000..f25be87c57 --- /dev/null +++ b/txscript/data/taproot-ref/5a5efe209bb7d1e1b0085b1515836fcb2144c5f7 @@ -0,0 +1 @@ +{"tx": "e804ef7102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe80100000034edbacedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd1010000006fa7aca801349d22000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787f2e54f5a", "prevouts": ["e25f660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "146920000000000017a9148fdfffe253d045df4a2985902e5465482e50374187"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2360212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["3201faf0f008f4b991bde7c4e5a8e0151e32e6e436f2cdf4795a2128a90e73dcc7985f3467b350aefdb57ee932643e64353e10f0a4d7bf4c1a9cf1a394ee51f0"]}}, diff --git a/txscript/data/taproot-ref/5a81cfc3ec9bfa6d49dcb19b411b6a4b6043df15 b/txscript/data/taproot-ref/5a81cfc3ec9bfa6d49dcb19b411b6a4b6043df15 new file mode 100644 index 0000000000..3f738f36e5 --- /dev/null +++ b/txscript/data/taproot-ref/5a81cfc3ec9bfa6d49dcb19b411b6a4b6043df15 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705100000000fbf40f81dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be10100000028107fd004ce692f000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aceb524132", "prevouts": ["aafc0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "43d42100000000002255202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d3", "final": true, "success": {"scriptSig": "", "witness": ["63d7996c18222f1ff524042a5ddc4d277e17160cf398b4e9cedd99e2deb94b85dc7e7f89e866cf02d3ce88f082436eb3e543efe13992fdecb0da627e90d6d7e781"]}, "failure": {"scriptSig": "", "witness": ["ec45c4f58ae924054bcc114730678dd60e16539ae1c4966704cb386cc7e49b09b4cb6e333de6680a8ad78f495fd3c92e8689e64d7d1accf809150b74c9745ff3d3"]}}, diff --git a/txscript/data/taproot-ref/5a9d9ae70e2df49baefc66227ea1c1604902038d b/txscript/data/taproot-ref/5a9d9ae70e2df49baefc66227ea1c1604902038d new file mode 100644 index 0000000000..deb05b109f --- /dev/null +++ b/txscript/data/taproot-ref/5a9d9ae70e2df49baefc66227ea1c1604902038d @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270570000000087ad7513011c180500000000001600149d38710eb90e420b159c7a9263994c88e6810bc762000000", "prevouts": ["5fc60e000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "a17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93654d5e9f128d5d45e2b514bc7d0582e1e8810c31523e6a7d498e7ed4fcc964510a4fb15e70bbc27f4f9ee6ce894c5f8660c4bc0a21501abf5c583e18e279746b733479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae668dba12609f1dce2a1e29faaa62ff248d54f408b31ef31944f67a579d4fbb4"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692ed1d8a723f26614ad38a5a6bbff83804b2df3c5c12fea7853938e6cfd441ba04a5fb755beb1eb88fd06fac279ccb2aada241654186a69e6e0c04e3255c18f895176026b3e005afce4c10b5e59a002659822bde369bd64201565ae4c88fc95c"]}}, diff --git a/txscript/data/taproot-ref/5a9f746ca2d826a621e61152c995893027ae3dff b/txscript/data/taproot-ref/5a9f746ca2d826a621e61152c995893027ae3dff new file mode 100644 index 0000000000..b43be10c85 --- /dev/null +++ b/txscript/data/taproot-ref/5a9f746ca2d826a621e61152c995893027ae3dff @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc001000000cc3e5864bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf850100000023fe971b01f0091c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6c780bb21", "prevouts": ["5d6e220000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156", "f656660000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "e97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e88b8d8a8d8c003fabb93595bfceed403f9a1266ee95e7fa8447cccdf398ce498db8321554bafe286e6661652cf416d3db0b455024b23404eea069d656c79e4f25"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e84a72ef51eb7f1fd93b7716e160b4419190ea5192ffe31c8263ef308a11abcda602e473c0179dfd44294f4ddb50d827cec9d4b4e0c6eae7f68c0301f0fdfe7e6b9e5e4bd2cefcda110a5bf613694738c198174b403d264db4691720c8f18fc7b8321554bafe286e6661652cf416d3db0b455024b23404eea069d656c79e4f25"]}}, diff --git a/txscript/data/taproot-ref/5b000b738705bfd4a6198d22129f7e9f2ccf1708 b/txscript/data/taproot-ref/5b000b738705bfd4a6198d22129f7e9f2ccf1708 new file mode 100644 index 0000000000..31c5c70678 --- /dev/null +++ b/txscript/data/taproot-ref/5b000b738705bfd4a6198d22129f7e9f2ccf1708 @@ -0,0 +1 @@ +{"tx": "63a8de0b0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270400000000003003e95dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6000000000987504ec042540390000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478761b26b4c", "prevouts": ["d92113000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "f77028000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000be", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93627167bdf7dd6f113555fa8f4b26cff315296a536038735c5506a84f918c8c5ad61eb6e6fd21ad84d93c7a0474b2daf5b011002cbe34781a2a14a95ac7c4e00ae344cebdb8ecd56ef01fad0911d9d88482970ec36d3a04b84eda7f5b5c68ec938"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e44a95c71cca5173fb3cb918c324a06ae35450e2cf1a92910826d87005746c9018b1142f6c6f685b07aa6aec8ab7e3e6024758bf09974a9b2a7615fb4927a0f7d3726db1c97dedfc82502578948b1d779eb886e6296c36bf50b8d2fe25c32b8a344cebdb8ecd56ef01fad0911d9d88482970ec36d3a04b84eda7f5b5c68ec938"]}}, diff --git a/txscript/data/taproot-ref/5b08bfcfc4f7317c5e45fbc3a683064ae85a3794 b/txscript/data/taproot-ref/5b08bfcfc4f7317c5e45fbc3a683064ae85a3794 new file mode 100644 index 0000000000..723fb63b2d --- /dev/null +++ b/txscript/data/taproot-ref/5b08bfcfc4f7317c5e45fbc3a683064ae85a3794 @@ -0,0 +1 @@ +{"tx": "ec6f545702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9e00000000a8a25b8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705000000000f22c0df9034f438b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d3020000", "prevouts": ["85f87b0000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "97f8100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ac7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e5a9aa32e218bbd7702dd80b5ebdf509d58cd1514da294d038190654a927a1119f9ef29ad3e74b34f129235a64deb65fb580c2718ff9462ea3ca43b3a4f56170fc485b911b91245b46c320351c8e1d13bb30ee22c3f953d2224593bd4b5088ca"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93658c6fb8444bf3f1c71dc62d586de8f6b9f63c49598648e9eb416ba7b8eeb55d0f6e1ab16ab4bc20af15f35a7f6b67f82a67b85511624b76e02698979773111889f9ef29ad3e74b34f129235a64deb65fb580c2718ff9462ea3ca43b3a4f56170fc485b911b91245b46c320351c8e1d13bb30ee22c3f953d2224593bd4b5088ca"]}}, diff --git a/txscript/data/taproot-ref/5b33a7895ef81de11965a513bcadc8ee53993d21 b/txscript/data/taproot-ref/5b33a7895ef81de11965a513bcadc8ee53993d21 new file mode 100644 index 0000000000..21f7e199df --- /dev/null +++ b/txscript/data/taproot-ref/5b33a7895ef81de11965a513bcadc8ee53993d21 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf601000000eb15c2fddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7701000000ce8ae4fd044f5f4e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a64ae04558", "prevouts": ["5f3d280000000000225120768c54f13dde172f25cce5a33aed38e02f08031f35d73759f73c7d1a105e2823", "abac270000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a1e25a5a51de273a99a983b8dab5f9a449011b840b2876cc59d12f2fdfbcf4b4"]}, "failure": {"scriptSig": "", "witness": ["6a82616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/5b718764a0b56ae1705be7dcf35a2c639fbee6f4 b/txscript/data/taproot-ref/5b718764a0b56ae1705be7dcf35a2c639fbee6f4 new file mode 100644 index 0000000000..50829aa842 --- /dev/null +++ b/txscript/data/taproot-ref/5b718764a0b56ae1705be7dcf35a2c639fbee6f4 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1102000000e34a2009dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bde0100000060eae28fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c540000000002789cfd01dce73200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acae030000", "prevouts": ["6cbd6c000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "4c421e000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "b0574a0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4e2b448ed3f1969af8fffbdb3b73bd72fedaa98057d5c8b58a84426194002c6e029de37322ddf566a2356077a247b666bf816d75bd62d8842c555909c8a1545e03de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a6a8932227d021db8093e005e96d1e8927d5db9b23e7e4b1a24529d381170a492555fb599a2fbb7b206b08358b85e40a527ad21aa064f750df81600ff72cf4ef17ad4bbf375bb62f626ec8048d4347cc1eef977780228a6d2fc47294088d561"]}}, diff --git a/txscript/data/taproot-ref/5b72a3d1797578b12f235ecdfb8305d928514960 b/txscript/data/taproot-ref/5b72a3d1797578b12f235ecdfb8305d928514960 new file mode 100644 index 0000000000..a9ae70055d --- /dev/null +++ b/txscript/data/taproot-ref/5b72a3d1797578b12f235ecdfb8305d928514960 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42201000000a7edade360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702e00000000e8af8ed604cd3f4100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388aca7030000", "prevouts": ["d6d3320000000000225120bb5a47f5af791bd0da95f040450c31e81733ad36d8a4b487e3e6f1ab189dc604", "3056100000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["0dd15b60a933bc801626bd96989888c3ef766d4707939fd2fabe3dbe586b1cc2095a90a93de6471623acf924489310ea05bf81e35893164f663c55c0b5346f1a00", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/5b831888d2299bcbbe9bb60f6812a461f2da8720 b/txscript/data/taproot-ref/5b831888d2299bcbbe9bb60f6812a461f2da8720 new file mode 100644 index 0000000000..67bad7f940 --- /dev/null +++ b/txscript/data/taproot-ref/5b831888d2299bcbbe9bb60f6812a461f2da8720 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b23010000000184e7e38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b501000000906251e203788259000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2c010000", "prevouts": ["41e7200000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842", "14703b0000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "f37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936111cdf76836f174788069938d43a1f118e1d6048d7db416209f274b647d1178e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cfa000ce8b9790c39a5d5a4e1f475bb1ef714fb8e08d79945cb39f042227236d80eaa4a5149b34d26f0437dfc3cc15f8b829f232fb4e000d97f0d76bcdb6c884"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ad006099a5afd91da2bb050912b31486a1a5f178aed6fde7a35ffc349c590e4cfa000ce8b9790c39a5d5a4e1f475bb1ef714fb8e08d79945cb39f042227236d80eaa4a5149b34d26f0437dfc3cc15f8b829f232fb4e000d97f0d76bcdb6c884"]}}, diff --git a/txscript/data/taproot-ref/5b89dad22b6b9ad7d97be2de400eaaa8ab2a03e9 b/txscript/data/taproot-ref/5b89dad22b6b9ad7d97be2de400eaaa8ab2a03e9 new file mode 100644 index 0000000000..bb55fa5245 --- /dev/null +++ b/txscript/data/taproot-ref/5b89dad22b6b9ad7d97be2de400eaaa8ab2a03e9 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c440010000008819fbb38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49f0000000080656b9904c66868000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c7030000", "prevouts": ["455135000000000022512089bb171a5e185cc37daf7aa0871afa228227b6abbb83e8d3d329212a244ac814", "ebad34000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c0e369f272f9685ae2ab5cbec56c7922838a13e1e8a56851740c1aaff5717a80"]}, "failure": {"scriptSig": "", "witness": ["6a32616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/5b9296392fbbb89f20c46a8276795c3b237a921b b/txscript/data/taproot-ref/5b9296392fbbb89f20c46a8276795c3b237a921b new file mode 100644 index 0000000000..e7f99697cd --- /dev/null +++ b/txscript/data/taproot-ref/5b9296392fbbb89f20c46a8276795c3b237a921b @@ -0,0 +1 @@ +{"tx": "72ce730f02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbb01000000937aa8c7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd400000000e0a2bed102189b98000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787660da74c", "prevouts": ["89f4240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e849750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_27", "final": true, "success": {"scriptSig": "", "witness": ["685d25c1d2d17a914657bc9226bff699b0619edc946287c76d4e764d6e6522577217f42b52e8ea935a9fd4a8788a3e34d0a574570859d949cc06e893b3a91f0c03"]}, "failure": {"scriptSig": "", "witness": ["8b3d69c2884b0c8fefa4fd2ea1b2b2577a56b255e688a760517e88ce944ecd9b496b514563a8e8ac308b2777f14057cddee4d74e2a637c9ac7f68636a256ad2027"]}}, diff --git a/txscript/data/taproot-ref/5b9476567b263e9cd4c8455b1383c48f559cdd5c b/txscript/data/taproot-ref/5b9476567b263e9cd4c8455b1383c48f559cdd5c new file mode 100644 index 0000000000..6d4d006d03 --- /dev/null +++ b/txscript/data/taproot-ref/5b9476567b263e9cd4c8455b1383c48f559cdd5c @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1800000000666e3e46dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf200000000f1d81ac101a24f220000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7fa698e43", "prevouts": ["befa55000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "f7b3550000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366710f0898dc1486fa1452d6452d8e08d4e319f7bf9099dce0673c5abdae87e6f493e40fcef10fde3df13bbd1c2551f58461e5d74b1e1953624615bb6f8ad2778f2e441b555c43a724b579c479d380c278f8ccac4217fbfdcb96526a1dcd96287"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e8cc06f1f6f7ed6c588d622e74b9585b43038ad82cf2101cca86064972a6f81086a27b1635c4d20405f5eb1d8e1a675f8ac3bff005ffde1fde7fd53008c3096ff2e441b555c43a724b579c479d380c278f8ccac4217fbfdcb96526a1dcd96287"]}}, diff --git a/txscript/data/taproot-ref/5b95416a6aeb72fb134a6149c2103c7b4b8af54a b/txscript/data/taproot-ref/5b95416a6aeb72fb134a6149c2103c7b4b8af54a new file mode 100644 index 0000000000..8bbdcc78f1 --- /dev/null +++ b/txscript/data/taproot-ref/5b95416a6aeb72fb134a6149c2103c7b4b8af54a @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4201000000b563db75dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc301000000f098e3a68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c467010000003d1d4d040391f7a8000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72db95c2a", "prevouts": ["4e8e4900000000001657142540f27e90740933c99d4f17ab2dfc6c82951cfb", "f6a2260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1053b0000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "837d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c30d5e9bc30c4c4af9e4eb5b310ad22b2e60a98f718761077afb06a77f13bd7efcc3b58fc7cb9ae8c07f6b17b965d49129a74935af1e9f3c9d7206d9e0977573ff15e37d03bf407745d47da370f693bba1bd1439d95d9059575aa23ebc3ce6e3"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364e4b21485a97c5fd22d086acea81de731dd57bf1980b68bf0a0105c8b4b984177e533ff75a4d67e066dc739e50d12e058e790be330db290aa1a5b4fb647c89858163db171dbfcbf374971659a5a65d0378eae0ee15db360ca8cf80a8c2e13046"]}}, diff --git a/txscript/data/taproot-ref/5bc0284515461bcb5e3ebafccc633649bb1ec2fd b/txscript/data/taproot-ref/5bc0284515461bcb5e3ebafccc633649bb1ec2fd new file mode 100644 index 0000000000..a1a73cafea --- /dev/null +++ b/txscript/data/taproot-ref/5bc0284515461bcb5e3ebafccc633649bb1ec2fd @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704b000000000a65acfd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c465010000008cdf959c01c1fe0600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5e000000", "prevouts": ["d88a0f0000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f", "d44c330000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "147d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c26aa6cc7dbd51dcffea9f3cd500823e5cbc45e46e2b002a2a7ff91e8ab38dae3488b030fbb16fa8d50c4f1f044e6df81cbeac111f0be15e3f466e559374b3e5568dbaf979cca58396dcf271ee6fc736edd00965a3b0ecce9c87347ff88ab08a"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa7a317a052512b66d9c0a593db192e28ab9b1379143982fc432aa6f278435f8ccfb63111b06c7a0ce3f44d9f6906db8fc60057b72694cfd58ed25db88d188e5fc"]}}, diff --git a/txscript/data/taproot-ref/5bdb30e6f918889383a02c0269f0e346fb129035 b/txscript/data/taproot-ref/5bdb30e6f918889383a02c0269f0e346fb129035 new file mode 100644 index 0000000000..bc810eb2f6 --- /dev/null +++ b/txscript/data/taproot-ref/5bdb30e6f918889383a02c0269f0e346fb129035 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49801000000f2d4614a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270130200000074abd946dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9f0000000045a6249304c5089b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acf499373c", "prevouts": ["31f4380000000000225120d7db2432b77440d39106fdcd5c35c463320f36611b8bc46e3633cb3a8d85086a", "83da110000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4", "30d0520000000000225120c3b9d8e50d42de1212377aa9427da72fe17222669efe5204fac1f05c34f6e65b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09026fecdd4402cc53c7d16d3e939e8e3afcc9d3c59ded67f392425c6737bfa97e5ded722b8cf7d50550b459a9f46d0520b6a5540ce67caf543c0c5f28ee0a0c0f8990e36f730660a7d90aba2720fdc1d390985ec097cea1203b5fb3f9ff4ff0990e4e3c8b9608baae79d5695715f40811a721d607df2a0e7346194293135dc41d9ca6e5079ade54bd6f16c6f60a4c5d75968a3483399ffa1a09d5363025dbf97f57eeddb2ce4b991b5dff568b0e6058364884221a253c2c097b55ab5e57d75ab407ae4feb54c291dbc62df4419e053848666785366a2620d4b8141bca0e858de1d05dc6790ce0996d80b065f4fb5ca44a4eae36d7814700b20f2e2506a3993cf50a250944f44336d4efba1ad82cef4c31596942f3a83b0950f25e87408eb84c208d109a219a67fd5e92bbe75c9f21dce76ef84e9966e021722d28071ca0c5af4db33d603c2ad5bddb7b0951a805699f51b502461b24e5f5fbde7b9fb69ff0f27910dae63dc2be0e38aa2d0ccf6940dc7a636e2bbf85721b58017178bee6ec54f79894726e40825bc8a1d23d10e2390c09058116a6e7bfff9f7489b9069182496c3676b1bd369433435d35c2ee5111a8d0fba6a44dca4564f023a98d485193742c184a0261cc74d72801ce3b3d2cf17ad17375fac0a8c7903b995f93fbda44012a60d9d9c2430153344cb12346ae7a56fa33240f44c3373990981fd210a322ef5a84d141551864d24af56a75", "137d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361426daa4bbe5d8fcab9dd1197b7c9101d6becf10f586c66a38819853ce8b40c391993dcc568707dee1346cf3396ea5c7390afa7d45c5790b2352813dde91dd339a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e7c43b740c0608ac721897ca7a4b0bbd2ef7e62418d1fc20274bd386c7c0d4d7e"]}, "failure": {"scriptSig": "", "witness": ["4d0902158bc98498b37b7647654b0d28d7cb79dfd2016d7902738862e6eeb27c65385701547fc2025bb2be0d0fecf8794c1bba6442eebe3302b4c194dfbdbaba68bda53ea0984be5fd27a0571abd5c6bbe3dd7ff12cef3a4483863d788ff17f80e157301ac1772fedb30e5b20557b972e82e4216140ba93c5e896e862cacc79048077e4be5e880602f63ce49fdc5ab08b8ec5f119fb6cf7898d35eeb1802ee91a5b5015b8f6c6c6030da2164f0a82bdd6a67452ec8d27a88ea9cbec836c6c5b39f9cdebc6ff7fb84b08fd829886c027cd2884536f304c678b7e78827ee5b08f7d50c14490f80226e6bb504714ce85e5d6c7c342d3d263f08ec44baec748dcd8c6e6271cea772250c349fb10278f0a3eeab533d18fda98636c366cf058a612f3cb91279f3caa47cf7795c7b69f78dd8f2fb0a6aea9b6a8cdbc3a6d3fca5d20edfa01aec5077b30a387edf43b8abdf66e359c374dc96a42dcc5130c869580ddfddcc770ab46b13c77097a82fd43701c9577280825ccdb7f0c60d41ec362af39513977c1a3a0fe42c5f67f6d66b66dad330839d93fb66768397b607979d7e1295e76531598c2382393024cbc9c3285350d2379bd53b469ef774b01334be69acf57262c78d27090ddd5e641566438d79614418183e61a4e63fab91ceb2dac3fa9a1d94d83b9e4b7a7651d84d9317cb5fdf61dac9dc68b387890414970fc2bc68afb4b304bb5f74eaab0b92ebda3275", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b8824ca039286516426034e909501685a57dd231358ae092197a767d6d59583991993dcc568707dee1346cf3396ea5c7390afa7d45c5790b2352813dde91dd339a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e7c43b740c0608ac721897ca7a4b0bbd2ef7e62418d1fc20274bd386c7c0d4d7e"]}}, diff --git a/txscript/data/taproot-ref/5be7de136c7e263729c299d1617ae86dd468f91d b/txscript/data/taproot-ref/5be7de136c7e263729c299d1617ae86dd468f91d new file mode 100644 index 0000000000..109f1b0a8d --- /dev/null +++ b/txscript/data/taproot-ref/5be7de136c7e263729c299d1617ae86dd468f91d @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45700000000d443c5cb01040627000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870d90964b", "prevouts": ["b9ec3f00000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902be062cab72511239868c05d22706a5695f0e63841129712bf325d765dad23339b1a9810a58bf2c9bd69e3761daa1f83981df227a9b233d6d1102f6aa8b54a300185d607c6dc16ad92b87f1a440576ab30b3a7e7599aeb921a150f19eeae0c8f92937364734250b68e274993c387a8eb3e92b56ee12746286e20c96fe1743c62679cbb3e7648cb745b0366fa76cc938a1d82d56b483ffd0cd64a15eabfa5f9717ff3c0c168522dc81a5f1c4d6d336674deeb6139fd58bb477c8b329d335f2b5f35de0080e9fd3a5b912b190d328ef3c0f50738e71ef987e55880095366ea2e9701a1aef098439cf686caf4e3f51368166dc9761524256ef031d7398d141c709b8e9ec25870a6e3481a5b996d80017bce46db728198cfd180f9cce9181d17e9754a573dd439c580de353261f5e71796fb0c053ca3191e1d2fbc5fd168d42ca3111ac2bc5ca9112acdc48b7593a3abd4ae7d12cc9b62e82cb2e403687bd35f2908f8e60fa61e08f2170a39a40fdffa559a06ad5ccdf97e1b2cd4ed89a2cb1c1fcce13ba213fc8eb435e9e567b3d54b311e59afe7f7386b389adf5f922d6e0f2010b74ae79bb5dc32d63664a2d28d5acc3e5962c795881dec8f503b8aeaf51eb5a29ff33ed4a7dd7ba0d4ca856750084802e22696e6a25128fae9cfb04eff6f56afa0e1d1c1c8b849dca2dd886ed865a36652e4299ddd98cb679c21bc9a5a15f363a7a9bbf0308397238c1757e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d511f4adb00685858cbe7bcb6f491f781bc30000d79c976ba3736fd7b7a39329ee30cbb6a1bc9c683a9249ad6bea98cd3b225511a23bd3763b6594afd12d3e036b5faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}, "failure": {"scriptSig": "", "witness": ["4d090282cdcffc3f05c6977b0cd02c835b7eeab7a0f62e169621aa36f5740268d0acfa82f8e80f2f456c7093814f254fbc07e36c04447b10c6b6f48572a05c5fc6d6ced81e61fe075de523f0deb627041f03443884c4bd7b8c85ff128c899f9ecb39847bb9a971d498839358ec9f808e104be0de57640d5d02030948739e99eeb8e139b7832e3d20c939361c349a917c2135102087af2f628046463e0630cfd7e18cf19800164a0e06f4eff7f9c55dfcb441d1039163e518d83b182027b33eba77922f6c2afd463bc48e0c95691f185615860292902fcd23210c63f79b888c9a0180ca52f71874af6ad65bad70c71ee19984c9bec8f745c2a10ff8d0244b22ecbc5f5c1c2750464c14b0a9a39299b76d3a76c520b7c81e6f5b6b104260b65e7440f9a69ba1285e089174e371793af1c20ce0e191d28573eaa3c6508d16232357e637f1dee44caf389e65f336eda982d5a986432081392f9ac8ee4c6732420de1a2bdc9f75ec283a057c52a830ba3f10d243995f23137f9ffe7db82b424f46794efbe9d5cd32d5629716b9be1070af9dfc5d3e4cc99757dbea41189f4bf34c999440caf58538c5f1108f95c4d81e71e43ed22e5122b4a401bc5a16ff6e04853da0e49827ceac8d29f412176bdd5150faa16e11563e1253f59686181380f19ba3052901117082d629889ae4d5a6212ea7b7bec696a7f4f704504836dda729243ed307748a3aed8bc3042eca8917561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b9b4175db22b4058fbb32c1c98b401bd6f80a734567664ffaf4b869d5cecb8c8be9bce0da1a8e0eb2f55600b1edecb05394963f1d059e6505f0ccee9d28b62f6faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}}, diff --git a/txscript/data/taproot-ref/5c2aec0e280cc6dccb0aa9c3d4c5354a71c3d8e8 b/txscript/data/taproot-ref/5c2aec0e280cc6dccb0aa9c3d4c5354a71c3d8e8 new file mode 100644 index 0000000000..a5bde1d40b --- /dev/null +++ b/txscript/data/taproot-ref/5c2aec0e280cc6dccb0aa9c3d4c5354a71c3d8e8 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48a01000000668a29f1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3d00000000680a248b0199335c00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acd1918f56", "prevouts": ["64343f0000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "251a20000000000017a91454957ff2b5c5fa7ace3c6fb485b914ecf6ce0c8c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1658142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["7698efe28cd54922ea5e6da351039d28e1396fc2b3f262ce287a666ab6bad6f86ddc89802934ad992a50fcc287f7b187b9bf6084e175b85c15f2928f55af056a"]}}, diff --git a/txscript/data/taproot-ref/5c2cccde1ba71ca24440e1be3fe94d8b2abc9ba0 b/txscript/data/taproot-ref/5c2cccde1ba71ca24440e1be3fe94d8b2abc9ba0 new file mode 100644 index 0000000000..58de42aca8 --- /dev/null +++ b/txscript/data/taproot-ref/5c2cccde1ba71ca24440e1be3fe94d8b2abc9ba0 @@ -0,0 +1 @@ +{"tx": "b07ccdb3028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40e02000000ac2245c68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48c0000000092334be801f08a5b000000000017a914719f78084af863e000acd618ba76df979722368987818e012b", "prevouts": ["35c53600000000001658142540f27e90740933c99d4f17ab2dfc6c82951cfb", "1c5737000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["8767dc918e57c70b298c1e561d76c5e65deefece0466c1b170a15e69fa408a920e2b04e96f142cc6b66e76d5b89c9b25ae8fbe00cff03bbe00e52c31d1dfc2fd", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/5c414ad191f1a4f17701285f026d3be386795f46 b/txscript/data/taproot-ref/5c414ad191f1a4f17701285f026d3be386795f46 new file mode 100644 index 0000000000..a794fef6c5 --- /dev/null +++ b/txscript/data/taproot-ref/5c414ad191f1a4f17701285f026d3be386795f46 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb80100000095c037858bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4770000000021da5818dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce800000000a4b8f83f04b7dcdd00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c45bb44b", "prevouts": ["724b5b0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "d90c3500000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb", "294550000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "697d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b581e7745017096cad4c25a994b7b5383cb3ce53d5d9c99862d5778426da160494dcbc06ccecaf65037be0509f5fea40d87445fa254b78f124a4b8c5e16963b53b3c2b944ff5e8034ac7518513c5ca10ab4eec025a723136fa482de383e24ff1"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f50b5b5da10eb7d793ae86878c22918a1efc57934013172b8e322c1c64be3917945c33b167c9a8798707088659264fefaebd6f00f5f412ec268481dd4d0e7e4494dcbc06ccecaf65037be0509f5fea40d87445fa254b78f124a4b8c5e16963b53b3c2b944ff5e8034ac7518513c5ca10ab4eec025a723136fa482de383e24ff1"]}}, diff --git a/txscript/data/taproot-ref/5c4b2bd5199eaae65eb1b50ff2282715f285525d b/txscript/data/taproot-ref/5c4b2bd5199eaae65eb1b50ff2282715f285525d new file mode 100644 index 0000000000..0a10994ca1 --- /dev/null +++ b/txscript/data/taproot-ref/5c4b2bd5199eaae65eb1b50ff2282715f285525d @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c100000000dd110ca0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caf00000000071f80f3030b996000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac9d000000", "prevouts": ["b4170f000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "b5bd530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e1", "final": true, "success": {"scriptSig": "", "witness": ["2ff700f146833e50bf28334e5610247af6f4b97b05b9a0f0f79314c30ec3dbb53cf80d6a86a136445362be1371ac101792618ef950a8b828a1a79a3f9d08df9e02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8c2014f4da6230928cd9e7530606b065a82c4f8acb61cf3deec20497ad64645c1f39debe8750c4e6b7f811cf7ec1dc660416613234a87093140313ec80dfd197e1", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5c4e02eac5ec6bfd2aacdf25eb5606e7f1f8d245 b/txscript/data/taproot-ref/5c4e02eac5ec6bfd2aacdf25eb5606e7f1f8d245 new file mode 100644 index 0000000000..d5278a3d1d --- /dev/null +++ b/txscript/data/taproot-ref/5c4e02eac5ec6bfd2aacdf25eb5606e7f1f8d245 @@ -0,0 +1 @@ +{"tx": "d3c407fd02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf59000000008d3110a5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce7010000001d03cbb703ec85ba00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc53000000", "prevouts": ["c7df65000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "38585600000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100851e49b2e0a4973a6592637503937aaf2597822f72b7aa9873f81ec9ee3328d0022031d016a543c18c5389e366497d5e3c54b26e19434909d55de0ccb8f81b7cebcb83232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "473044022042cc82fb21e88a2ff8018f737d29058c0b0fde64c9e250f39f6efd3b4d21e33f02207d4262b4fa35aa8f608ba21c41583224d1f47160484c0dd731258526e71bbf6d83232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/5c58efa0b606fd3a9f5c4149f78312e37884f070 b/txscript/data/taproot-ref/5c58efa0b606fd3a9f5c4149f78312e37884f070 new file mode 100644 index 0000000000..5838f8e974 --- /dev/null +++ b/txscript/data/taproot-ref/5c58efa0b606fd3a9f5c4149f78312e37884f070 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1e000000007f87f9d660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bb01000000b381a6b20118072100000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac24010000", "prevouts": ["ef6d640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "076c110000000000235a212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_15", "final": true, "success": {"scriptSig": "", "witness": ["90aea01f2cc4cf5f9a75da5cf2a9c5a7fc3db62029872ee27f99e04c9003cbc137f8d0a8279114a4ab44e670db2c6ac13b3ac8d854a728f8d3863e6f1dbdfdcb"]}, "failure": {"scriptSig": "", "witness": ["ad198d9bf156fff4f37ed51c0e9b879bf2428f2658985b472707f7b6ce48d5de7677fe72cd05041414d28580686ba9e6083a804540325d847a3af0c54b681cfc15"]}}, diff --git a/txscript/data/taproot-ref/5c7526188d4edba67f479317b2da9ebd815e25d8 b/txscript/data/taproot-ref/5c7526188d4edba67f479317b2da9ebd815e25d8 new file mode 100644 index 0000000000..4090f4b31a --- /dev/null +++ b/txscript/data/taproot-ref/5c7526188d4edba67f479317b2da9ebd815e25d8 @@ -0,0 +1 @@ +{"tx": "0aaa8a4802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c72000000002635b9ba60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701802000000ce18a8af021b536e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac0651971f", "prevouts": ["36135f0000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a", "19de1100000000002251207ea7068de42e8dd8ec2d889eabca72799b94dd329861089e307e247da6412b8e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93618290ef83a776d63c84ec09e6a4fe5a6d7e5ff269dcf5fcfd50fd6b72ce0989f"]}, "failure": {"scriptSig": "", "witness": ["6a79616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/5c82173fb5f60e67f6c570773d0e7ca501b2ef2a b/txscript/data/taproot-ref/5c82173fb5f60e67f6c570773d0e7ca501b2ef2a new file mode 100644 index 0000000000..8ae9bc13ea --- /dev/null +++ b/txscript/data/taproot-ref/5c82173fb5f60e67f6c570773d0e7ca501b2ef2a @@ -0,0 +1 @@ +{"tx": "ad9cd02d0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270920000000053c5d9ebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b30000000008440aebf0409af2f00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487cb000000", "prevouts": ["15f4120000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491", "d2071f0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["95", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045cf76285204aedeb2e654c32bdcb90a470f0de651bfbe7b8c0c018e8a9ed468384d6fbd68a9aac62cc0fc4848936fa6d465cb32a19d5a751074f74d9c4f7fb368ab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e461b72f89a2c16bf6a5015001c0ff63d37cf9f24e8cabb5685a98f400e46d3aadc7c8b3bda8f17728820267d55a41d559bf30f92e294931cb4fa644579829c4d4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}}, diff --git a/txscript/data/taproot-ref/5cb8c6d32062773a2963b39820bf5c9c9d4d14f4 b/txscript/data/taproot-ref/5cb8c6d32062773a2963b39820bf5c9c9d4d14f4 new file mode 100644 index 0000000000..0753b7868a --- /dev/null +++ b/txscript/data/taproot-ref/5cb8c6d32062773a2963b39820bf5c9c9d4d14f4 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb201000000cefb2422bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfba01000000810ff78403a63af100000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac7eeaf121", "prevouts": ["54e3820000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6", "8c2470000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/minimalif", "final": true, "success": {"scriptSig": "", "witness": ["9b978a2871d60b5b8a11ae11e1772b43cce1611b53a5a2c808afd6c82be7a7e300cbd348c33dcc6f0762a107aab5305527f30be20afd52ffb31283fbbe819149", "01", "6320871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac676a68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692f0de23ee769069055d0d6d05652e1367445947e897223d0b74ba21bedb5258c23c60128fd3e7af8adaf4abc6718bf379ce4956c06c6d05419568a3b7fbb4becdfa5022fbf9ae5dfa56f4098acf4285bbe92d9aeb187fa2d4d396f6e0eee31df9d9ff7331949f40b876b1f64f1a10013ac65e222e2c8b225fa80db88dddb53aa6a2d9e7459765b4c09c28753bc2ff55d05ebac69a2359cac2688619c9c27618eeb68ce69b97818447ab7b9a4ba90bb798d21d9027f4de024baf5f3b5f4da875d446577c2ae0ff5873a151ab353523af1af4fb00651b9bde1c1989520e7d338bffb609e59d45c7d1e0be4118ae582299f3fc1b7f496d16d6ab2d0d6e0f7a455128ce34dda559eb1787d0c8deddf8f5f19f9fd4c2ccb2eb142b7063fdfa79ad71051bfd8661ff100df5daaf9353084b6d3751b20c475840529a2a7efac33ff2efdbb6b7c86f986531e7bd2af85df536ab9da539cb9ad98883aa4960532e755ead635b927ce0af32fb24943035d26d0ea88bbdc698d8d4264beb9c7e8103a368881360dc44ae3d69de3386cee559eb49e6c76a737e105f9117431d64c73a13a31f98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["9b978a2871d60b5b8a11ae11e1772b43cce1611b53a5a2c808afd6c82be7a7e300cbd348c33dcc6f0762a107aab5305527f30be20afd52ffb31283fbbe819149", "02", "6320871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac676a68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692f0de23ee769069055d0d6d05652e1367445947e897223d0b74ba21bedb5258c23c60128fd3e7af8adaf4abc6718bf379ce4956c06c6d05419568a3b7fbb4becdfa5022fbf9ae5dfa56f4098acf4285bbe92d9aeb187fa2d4d396f6e0eee31df9d9ff7331949f40b876b1f64f1a10013ac65e222e2c8b225fa80db88dddb53aa6a2d9e7459765b4c09c28753bc2ff55d05ebac69a2359cac2688619c9c27618eeb68ce69b97818447ab7b9a4ba90bb798d21d9027f4de024baf5f3b5f4da875d446577c2ae0ff5873a151ab353523af1af4fb00651b9bde1c1989520e7d338bffb609e59d45c7d1e0be4118ae582299f3fc1b7f496d16d6ab2d0d6e0f7a455128ce34dda559eb1787d0c8deddf8f5f19f9fd4c2ccb2eb142b7063fdfa79ad71051bfd8661ff100df5daaf9353084b6d3751b20c475840529a2a7efac33ff2efdbb6b7c86f986531e7bd2af85df536ab9da539cb9ad98883aa4960532e755ead635b927ce0af32fb24943035d26d0ea88bbdc698d8d4264beb9c7e8103a368881360dc44ae3d69de3386cee559eb49e6c76a737e105f9117431d64c73a13a31f98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/5ccd74670aa8f9270b7b6d1ec35f26366e24af92 b/txscript/data/taproot-ref/5ccd74670aa8f9270b7b6d1ec35f26366e24af92 new file mode 100644 index 0000000000..b125013e11 --- /dev/null +++ b/txscript/data/taproot-ref/5ccd74670aa8f9270b7b6d1ec35f26366e24af92 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fe01000000955e53b2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4701000000658363c5011e667c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e705870958", "prevouts": ["b6c04200000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "09067000000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c84c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93666ea2a418f0de61648f1846bcf7f8f7eac0e21721710bf1aae8a61bff50d06c920e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b553f13873b7614c747e02d52f281322dd98cc8d4ce789920cf593b75c6f05693959a095ba405700a8bdcb88c47f737d45523ad768f5b3698c80add34f2e764b"]}, "failure": {"scriptSig": "", "witness": ["4c52c8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cd4dbe16911bf8042e53b5984ba25563e24e4d01fb5e320bf03d1b64849c9db7460b19c0accce5a24a056b98cce949d671afb14dd91d0cbdd469fc3f22c90b1553249301ac20ee33639c015b4a618b106ac87c8ade2ff7aca8998bda2366a260c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}}, diff --git a/txscript/data/taproot-ref/5ccf6b63be9a26dc12ed0d8d9fcf8f9bd4d32aae b/txscript/data/taproot-ref/5ccf6b63be9a26dc12ed0d8d9fcf8f9bd4d32aae new file mode 100644 index 0000000000..a9982488f5 --- /dev/null +++ b/txscript/data/taproot-ref/5ccf6b63be9a26dc12ed0d8d9fcf8f9bd4d32aae @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c900000000e4d8689fdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2601000000013a04e50458d53300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac3703122b", "prevouts": ["ff541200000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "f15c240000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "847d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faff78d21b135ee37de5fb006beb46b85f4aedf8bacb6598da1f15171cdf92c209c568c76d6b344a062dd798f6575db1f1731d6a7ca3f2682e7e1b801cd94d3826"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c194e7775fd7c80d883f2d740f9e56e49ab9a06d8b2a8d7428d3ae945cc345b376735f386d1a4700f0e60fd19c47be953169b4ae01039887cebf253884ac2528c568c76d6b344a062dd798f6575db1f1731d6a7ca3f2682e7e1b801cd94d3826"]}}, diff --git a/txscript/data/taproot-ref/5cd441bea952394300fbb2b175630e939f70734a b/txscript/data/taproot-ref/5cd441bea952394300fbb2b175630e939f70734a new file mode 100644 index 0000000000..02afb63633 --- /dev/null +++ b/txscript/data/taproot-ref/5cd441bea952394300fbb2b175630e939f70734a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c63000000002fad8be6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9201000000a4949ed304f066a70000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcffb82f2d", "prevouts": ["8fae510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5ed3570000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "", "witness": ["30440220525a7845ce4b2f5390c5b7c8b9c0e78d50a7d94af7d53bf7f1af09b52160a11e02205d5573f2e64a87e919a821d051f32c0e44ce7b75eb0c647b09203872003b0abb81", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["3045022100e965a7e9c14fd31cabcb120624d120d334fd2f3e2eea64998f23d3e0f42f94d6022044703cdd9b3d1c0fa60e96ae026d437c6919a9c6124b6aa4ae6d598a303c8d3281", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/5cd9d11e72f21213a0cd5e3b000d85ffc71a267a b/txscript/data/taproot-ref/5cd9d11e72f21213a0cd5e3b000d85ffc71a267a new file mode 100644 index 0000000000..25ecaa257a --- /dev/null +++ b/txscript/data/taproot-ref/5cd9d11e72f21213a0cd5e3b000d85ffc71a267a @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c100000000e823d301dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc801000000d7978e97044cfd5d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac13000000", "prevouts": ["01ee380000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65", "2cfe260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c4", "final": true, "success": {"scriptSig": "", "witness": ["c1622e178ad7a6967ba48e5b0af3b29d709f4d9267a4fbe7a3f46b215849cc8f5651ceac82571931259ff1713ee50f720a1b1dfa57174be82f41a594e668597001", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["92133e4dc13ef643b6e4566c20e64b0cc9ad2c295b12314562b4b6538f708259e0f475f2d753002b57461f2bcd4d3799a9f0a237820010316e4fdbe9c8dcb8e5c4", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5cf79ca7fb6c27351843e8929c62c99f6d116b3e b/txscript/data/taproot-ref/5cf79ca7fb6c27351843e8929c62c99f6d116b3e new file mode 100644 index 0000000000..0cfab35907 --- /dev/null +++ b/txscript/data/taproot-ref/5cf79ca7fb6c27351843e8929c62c99f6d116b3e @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7e00000000208666d98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cf01000000b7b13eed03661d95000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acaf000000", "prevouts": ["96b259000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "a73e3d0000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89e517178a4498250bd09ce9aecd8afa5f6f049a9750e0fcac48ec3d6edc1b53ae8f45a3ac55dff4b7d62b0bc42204f13e92c55212ff162d480a58edc7717abc8"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368cdf980c8580c893c053e8f36fc601f79605cfc76c6b11fd2e35e7b5e626ae0524e037abdf69c22f44b0c591ad93651f749184eaa819a8a63a5d4092bdddfb78f243c72f4e074898aab8058b3c73fee97ec3b9723e213834a8398e97170c1356"]}}, diff --git a/txscript/data/taproot-ref/5d460d2d593010e8b116c549316144cec213da3d b/txscript/data/taproot-ref/5d460d2d593010e8b116c549316144cec213da3d new file mode 100644 index 0000000000..b3f530004a --- /dev/null +++ b/txscript/data/taproot-ref/5d460d2d593010e8b116c549316144cec213da3d @@ -0,0 +1 @@ +{"tx": "716b8db702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc4000000001e7a2ac28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40b02000000e32d47c101a5858400000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac93010000", "prevouts": ["3afa6c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e140320000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_59", "final": true, "success": {"scriptSig": "", "witness": ["2be37752447d6d3e61d976dcf448cedd3898004706b07bdf763c3498f8f1eabaffca0230eb3385451772fb25bfc84b34af12626e5c57f422a290b3163278c8ca02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ff05145a9ee0ec2d634ba7cb1b257143a03a283099a9f46575731511ec4d29e376b63bc24295183e376b83c8f422d3bbadfbc8f87530bc51352c30d068b606a259", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5d547488bdc33c4ba9f4eb64d9e510fe10c43b64 b/txscript/data/taproot-ref/5d547488bdc33c4ba9f4eb64d9e510fe10c43b64 new file mode 100644 index 0000000000..585afc76b1 --- /dev/null +++ b/txscript/data/taproot-ref/5d547488bdc33c4ba9f4eb64d9e510fe10c43b64 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706101000000587c2fe78bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c428010000007d05a6b102dfca430000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac31718742", "prevouts": ["d4c011000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "f5ed340000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/checksigaddresults", "final": true, "success": {"scriptSig": "", "witness": ["8dd4b96b4c1e16293541ea54ec6b33c8fe9a736c9f4696ca6656bde5a56404787c01f9fdfc65d8b8d90299e328e7a8496f72ae9827624ab8f344210387948ebc", "01b820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba01b787", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a4ab26b19b12dd5ed84675a14c998105d6f885db851af25affc21adf58dee419d170c934e59191828af4b443d621af5306292ce84d9ec7d56e4d5e95f4a2b883b6fd696714014486fd7f93eb277485a7e6b2ad9076f6f17fc1c22a649c512cece24022bfb434738800d6aeadbb65c0b5f1c54fd97b098ababd1df24d7362e80f41af64fbf9620aa43b24a95927199d6cd96f713b6c21c4241494f6ef0a4794b137108eeeef0d1cdb0bf8b9c7668f98c08793001c20de814582aa46fe17366f71bdfc32c1e1c145969abcbef65c26a893c9816b7a71a91b71dcfe4a49fffd792905e89fbc0a67267d9092cb76689d3f43e2e6846ec5193713df91969e861cb60c31b4d84c9ed58356d00f548e6c0b7494dab0ae598e30a63a373db1671630b0e008f7f368b69fdb42cf55796ee854208b1524a7b7ad1fac452c6296b4ad4fb087b0a6f9680ce7f5ca5bec9338fe334e6832114c99db2b4b78f7605856e14f0f922c7dab2635ca4d983bce69908efc2d6c8e3a4e02d107fe54b591d6c8cbc0ea2e862ced977f81641729beff04e69bc449bbaee4ae229138f125e8f575c30a32bf5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["2aefe7af812ccdcfd31cc887cf61877f9006edaf7684a4ce32c2629479aa31cce8b8b9af7f42bf706093e8fda891a7f683bf43ed7a22b722824351e67798ff31", "05000000800020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ca373a9284d9516d65ca57d42aeefe677abc27971d99a0e576ea3e033f0e37e18e226a88f8de1ffdbf8653e5e5c99d8ed6854f82ec6180716e498db4090bc6632eca1c10f6e29adacebae9c18d35728cfda46eaa96261d129acdc4b9e453cdf8e00a42427634156bf48aae55d12e65b2b6cdc4abb92f4ff102785641e1ad0d5b12d8443b4b548fc10604f059128cc28d89f7aec36eeec0a36f070495d2024be6b4d9c782523004c55b59cdfe76d2b17eaca8dbca1786e586c09b966ccead252fef997c426d9e949c5a3515b5e0042d45e4be44351c6f149d4fc020759a6f4b0d67374e7caf20322e7084d9546ded12af1d1c5a4e1ba9f0c95d59cab087df6e422f503472e6304a227f15c06c4bf90b77a0576afae68bfe51800240c398f7b74c3dfc6c9c46ba420c22a4b23a6e73e8909bd27f9a6cc2eba3b71442d590039c84de8a0e517ca4f4c263b0ab1b11f7cea6a468382fed8b4a21a3e6c2259e4be3735e9e781db25a304cb2b703fb372b5fb8e69d12880f4d83920da47a594e16bf0d7b8ad7363e0a6ef78402a031bc0a044f5a7e6c01a5c111176c74efd8c6d7787a57b391dd67ba025b9a60505ecd7fa3b5ed0808730285af9f495e709e1f92ab88b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/5d5955b5c12cb917cf3b4b20cef145f61555cebb b/txscript/data/taproot-ref/5d5955b5c12cb917cf3b4b20cef145f61555cebb new file mode 100644 index 0000000000..bf74245f6b --- /dev/null +++ b/txscript/data/taproot-ref/5d5955b5c12cb917cf3b4b20cef145f61555cebb @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c890100000045a341c4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfd010000000a8f2aea0184814a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e742cdbc45", "prevouts": ["97085a00000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a", "44315d000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["304402203a89f73cc889ae00a7a48cabffdb45543b73bb22e77523cd9d61e5ef9aa5aac402204c6faa9abca40836d371f2854dd6e0a6b4d7964d9d309e212607488b480a3b2d5f", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["304402207ca44b668c8c91a37d7b5be371dd0ed908d5974cfded513072e97cc55b15d0700220773f9e8c44b697a34f30aa0bd2270f130932ff5a63995200cdaba8bbdd7a910b5f", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/5d5d395b7d0d39e7e061299a0ac6d887b277e7f6 b/txscript/data/taproot-ref/5d5d395b7d0d39e7e061299a0ac6d887b277e7f6 new file mode 100644 index 0000000000..fe4c561513 --- /dev/null +++ b/txscript/data/taproot-ref/5d5d395b7d0d39e7e061299a0ac6d887b277e7f6 @@ -0,0 +1 @@ +{"tx": "bf72937702dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c91010000006ea375f4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd700000000a67e3fba04f02f8000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7afb7485f", "prevouts": ["158b5f000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "80a3220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_51", "final": true, "success": {"scriptSig": "", "witness": ["d53cb2aa996dfed6f2b90f6d1a3cd65f1f2cef383e2d9afcc9f36bda76fb7b12b810ddc1e47108eac36467f0f2bd088272242fc3442ec836c51623ac223f5114"]}, "failure": {"scriptSig": "", "witness": ["75c3dacada1a0aa2159dffb05ed62dfc83c7beed10f32d3730c2b4fff673935afa789a917e95169b6e082cf4a51e2986cf01ff022521149c24caecfc2b592eba51"]}}, diff --git a/txscript/data/taproot-ref/5d67205500c9fd9a4b6a49b76f5ba2c4bc80f718 b/txscript/data/taproot-ref/5d67205500c9fd9a4b6a49b76f5ba2c4bc80f718 new file mode 100644 index 0000000000..b7a9185fcc --- /dev/null +++ b/txscript/data/taproot-ref/5d67205500c9fd9a4b6a49b76f5ba2c4bc80f718 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0b020000000f6e3dab048ef750000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc7a814257", "prevouts": ["7cc753000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09029b250e9ddb4ef1d24523febd77857ce81814cae8c8a7688cb148874e1f1699616564df763ad6557f93a8243f6be9c3bae5eba87a9b1292c300e8180356d7f29e9fa7a022617ad7b782f04210523d7fbf71ad169d3372aebb443456e9630dc3b7fcfc44ea2e3f15419526b0a3a4f4ef10fcd3f4f5a9aa832e56eae1d76e6b6abba102b770c03f482fb69852509b7a45fbf3ec4e804048039872102450eeaafb9462de68efdbe65b6a5909ffab38f456c099cd94d5140e9e854f6004df2d6322f8f56f6be1c098204aa9464ecec7065bf74d89b9fec7116415bf3ea6dfb479474eb476f42743ec93fb34eb28f79020408b3f8723752b4b96b5b6808f17f803e4242a933f7a1432f6eb7d20fc2428c7ef9fb8aca69ebe66333ed68624d8757bffb4d3b70dea1544542640721ab736947f6a6c717f4a6a995dc385f658aff44b23f3a8a9214a2777dbbfc1cd761f281918ab94bef657db1db91f25f7c1b05880a9ff9c7ebdcb9616ccec23ba242fe3234bd2ab2fc3ecb4393f19b1d690dfcfb151fcf4c92a1ccea68b040c9eaef504eda43ecd157e02d309f378fea2f71a336b6704d5a0824f321c8ad90f6a81c6ff5fd53acd2f574c38f82535ceaa092867eb369e3aa874a13e1a6c6f26c397fa6cccf855002b3ebd05cb6aa4ec96c27d63f395643250d44712c71d4772d64a35a35087a68859a234e5e86180ea36d4a78f9cb3a10b23f656e7c041912175bc", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c671f46b5c4a8a91a91b52498ec1d50afa67569c2c9995041aa6fde798981e9899aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d5154a115ce154f943bf3cf8f46c74cde664956f57cd29b00bedec3f53c1a73157ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}, "failure": {"scriptSig": "", "witness": ["4d0902ff4628ba536955c325b011147fc1714a37f65ab397f7f99f0f14ace75448fd053fb38b0ca943cc4114eec77cc69c05760f01c70e1b9d5495b22ccdc96178f0b85e74c60078796421d1b77b50690deb93942db077130c3b47abc608e2d4c9c85ea2fb95e45183804e1893012c7f7e596047985120b977a82e6ef674a119cf06fb5198fa0e9330ec0d890651d2ce528cfec82d1549726a7a9c6da625bbe28ebdc708f5b98248534132faec965e5c6e7016b07b233cd94316cb788bf2fb74548d4c1b2e574636f8b171a29f898bff3134bcd4e4aeaa939111122f26ba9d829816f9333dc417574e74ce938da9f2cf2d1867a30afb6c6f1a1ebda548215189d43b3938b8fadb88e87e2f5d181c13b7a4488182983f0b695a9cb40113dfc996e57b6018ed4040bbdf6cb7be2d8d05f438a3b10d08b6e882e330977774b9447934727e5b5bf03540680fccb597f108f6e4340365bbb2df0a862bea9ee4286ac6bc3da1ef46f60318be286e333f0c1e44da18034dfda0fbf640a9ff6f3a063ae301d8b44eeaf2b43eb89b05c53eeff7b438f251f3b98d623f0f553aeac70e5480b83986a3cf6ba27679462f67083451d924ae1bc672e1aba419c8ab576cb3bff9a7a25aeb103121f0bf771b209daa74659c937cb4427b7faa8e39c7dbdd0c34a0000b90582fd0928d598e9a02ad80e2efb867ef12d921cb33de772ea35f249cb8155c70c73a889bded48133f07561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93617f3d357d262a0ace1eb8ae0982017753a860c00b575d1442d59c97716b7cc976628fbf290b9055f1812e9325160cdda478fd06188bac581533b5ab5319162eb04966f092bf1e4b4348fca11e7254311373308f7fc15e3d44d6a2afffa343c9657ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}}, diff --git a/txscript/data/taproot-ref/5d979fc0c97f4b30b22b3b449446ef2dad2f94fd b/txscript/data/taproot-ref/5d979fc0c97f4b30b22b3b449446ef2dad2f94fd new file mode 100644 index 0000000000..c7cccd89bd --- /dev/null +++ b/txscript/data/taproot-ref/5d979fc0c97f4b30b22b3b449446ef2dad2f94fd @@ -0,0 +1 @@ +{"tx": "3266ab6701bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0a02000000e846028402651c7300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac25010000", "prevouts": ["1195750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_33", "final": true, "success": {"scriptSig": "", "witness": ["f3646360c3bcb95287fb9ad8eb9c3e93ef3264837f7e1fb204524db415b6331de3502c29ba57470dc285c872fda22ebb207c509de013d6ee82de550bc7d76e4201", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f136f633413d0715a2d15cc0725683fe4e2735a7e56624cd1862384ecdd22f7a8054412af2ba6c3c43735223ab0254b075d8645762d536ebbb5e4bde77ce07d733", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5da06db4c347f603cf5309c3456c26cc7ff974ad b/txscript/data/taproot-ref/5da06db4c347f603cf5309c3456c26cc7ff974ad new file mode 100644 index 0000000000..4d72f3d8f1 --- /dev/null +++ b/txscript/data/taproot-ref/5da06db4c347f603cf5309c3456c26cc7ff974ad @@ -0,0 +1 @@ +{"tx": "b76923990260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270be000000001e0361fa8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40c02000000c541bcca04e7f550000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987fe5af33a", "prevouts": ["2373110000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "71844100000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063cd68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c9423051280ab0ba07278ceefb01ed123f8b9963758d62a87c192126ecaf00f1e22a66b502779d6b233f9a5a075cab3b2a5d3e595dfdfe607248b2d2d8734c7b9f4d7ab890a2001a7be6cb25cf630fcd24657943ff80a7c5a11988ecbf9e80e4620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936498acf89780080a2cd57bc0c10dce52b06266470b3eb2ef99b486159ea0e945d20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e11863a41bc3dc2a7aa524e62e66740ce82713c2a995d68e9803c1affe373c89601029910a453e765cd82c29c3b576a90579a453f3a941b6b6175fa922e9a13196"]}}, diff --git a/txscript/data/taproot-ref/5dccc42ff618aec2747273439401c4901ac182b8 b/txscript/data/taproot-ref/5dccc42ff618aec2747273439401c4901ac182b8 new file mode 100644 index 0000000000..ce174cbfe6 --- /dev/null +++ b/txscript/data/taproot-ref/5dccc42ff618aec2747273439401c4901ac182b8 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703200000000ac43b0a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2801000000ab411cb402bca15a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963af0dd3e", "prevouts": ["d08e120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "319b4a000000000017a9141d8eff3030620b266a8bb5e50900ecd7b2ab72da87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21561f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["974d25958931043c6b7cc3344c248be7a6ed9e6277f40fb672a1e4edd83a2bdff2a10e66e172c91858921ab17edcd9b8c1dc8a065c4bf5c8b78ffd8da66e47a6"]}}, diff --git a/txscript/data/taproot-ref/5e1b24b8be80cb985494cc5e6aad6e0169f302a9 b/txscript/data/taproot-ref/5e1b24b8be80cb985494cc5e6aad6e0169f302a9 new file mode 100644 index 0000000000..615c886ba0 --- /dev/null +++ b/txscript/data/taproot-ref/5e1b24b8be80cb985494cc5e6aad6e0169f302a9 @@ -0,0 +1 @@ +{"tx": "760cfce6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41e020000008082e1c6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1a010000009b10e7d2012db07a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478726010000", "prevouts": ["2967330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5d51770000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_cf", "final": true, "success": {"scriptSig": "", "witness": ["e4f84cbed1be1e786bb3b34e98127de2b0a6a7259622d003b8fce943f9b980b6af53025d56fbb380e3fa14b2ee267aa278a8af8ab16b81a9fddf10118423228a83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["dd21672b844dc5eef5313357d3ea45619805fc089aa275e3f4ebe4be556d468facd4bff2d5e9e5bf65ab7e678d041b43511869966773f5f1034f39c0c36890a9cf", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5e29c824e31a38432a78e51cb6163effbc1b7632 b/txscript/data/taproot-ref/5e29c824e31a38432a78e51cb6163effbc1b7632 new file mode 100644 index 0000000000..524836d159 --- /dev/null +++ b/txscript/data/taproot-ref/5e29c824e31a38432a78e51cb6163effbc1b7632 @@ -0,0 +1 @@ +{"tx": "324e93d202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9a010000002b5640d48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fd00000000938fb6ab03c0a05f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca2c5a437", "prevouts": ["7def240000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "57833c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c4", "final": true, "success": {"scriptSig": "", "witness": ["9600600e60ef1b30bff3a4e3b3a114d858e47100a069961c8c27151805892c80a161aeb9bde24150e004968b5d9c7660c24390db520b0990fa4379e4abc4a7eb03"]}, "failure": {"scriptSig": "", "witness": ["4813c8774af586abad439797395c106945eab2540f56d547976d0055ed4118881540eeec74cc6112ec540faf8eedca83afb82fe880ff5179c4d46dbdaf2f5ed0c4"]}}, diff --git a/txscript/data/taproot-ref/5e5cf1d19425ce321d71cf332626bab6bf9e5c44 b/txscript/data/taproot-ref/5e5cf1d19425ce321d71cf332626bab6bf9e5c44 new file mode 100644 index 0000000000..5340436649 --- /dev/null +++ b/txscript/data/taproot-ref/5e5cf1d19425ce321d71cf332626bab6bf9e5c44 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf92010000002d7002b0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb100000000c01dcced048b91e100000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79628eed841", "prevouts": ["b3f9850000000000235e212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "aa485e0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["b4f086362b79d90b8b59621bf6f80fc3c9e75f17a9109a8b9b2a68fc59cb536dafce45d091db8e55c50b7793462c89389e9b46a622028e2bbd3eff32815638f7"]}}, diff --git a/txscript/data/taproot-ref/5e7998196110af78479912905025c638163deb00 b/txscript/data/taproot-ref/5e7998196110af78479912905025c638163deb00 new file mode 100644 index 0000000000..075753dd4b --- /dev/null +++ b/txscript/data/taproot-ref/5e7998196110af78479912905025c638163deb00 @@ -0,0 +1 @@ +{"tx": "97ca34d70260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127044010000004c539de760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f0000000002921dd9f0244a22100000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48781000000", "prevouts": ["264b120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4732120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_41", "final": true, "success": {"scriptSig": "", "witness": ["de8089d8b74361b02bf2ec25842ca3a735e650a4ff654f87d7495dc0acb6f37b95b4faffd1186a23dcb3876e30f8d0b9d117f0d1d100223564dc2023bf0c6a2083"]}, "failure": {"scriptSig": "", "witness": ["3ae6dfca518aac9fdd2913ad68ff7c8b33b1f65ec7113cc40129c1725712e791c1ffc54da9a0724758798822f1a0e1aaca6389d0d41ea32ea9ce6ee2de5cfb3241"]}}, diff --git a/txscript/data/taproot-ref/5ec7eb46ae8e0891018b9848bc2341e3ef6ee62c b/txscript/data/taproot-ref/5ec7eb46ae8e0891018b9848bc2341e3ef6ee62c new file mode 100644 index 0000000000..c03c641ed3 --- /dev/null +++ b/txscript/data/taproot-ref/5ec7eb46ae8e0891018b9848bc2341e3ef6ee62c @@ -0,0 +1 @@ +{"tx": "f72903db0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708a01000000c27adeb40243be100000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48716030000", "prevouts": ["d4a0120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_37", "final": true, "success": {"scriptSig": "", "witness": ["a1a7efcbefdd3d042f1fe407442b72f7e36b1ba5a5eea8d82963b30e441d87f6eea093896f80738800382daf3a5a54da32c954b3d732d5b24fd22de8db29be8e82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7415f6159d193def5f543889775938ecda7491c83f1f4b5ebb21553fb0bed3f6ec0523428996d3b31a9a25fb058a2c45c2c13e5b014a06a66b58e7217a78554637", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5ef0bcd2fc8dc128e8583e90e1d3848ad698670d b/txscript/data/taproot-ref/5ef0bcd2fc8dc128e8583e90e1d3848ad698670d new file mode 100644 index 0000000000..19dbf9fa65 --- /dev/null +++ b/txscript/data/taproot-ref/5ef0bcd2fc8dc128e8583e90e1d3848ad698670d @@ -0,0 +1 @@ +{"tx": "971ef45d02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0e01000000bea1139a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127071010000003f3d64ce026c8d91000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6b0faa40", "prevouts": ["a3c78400000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "88c10e0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_csa", "final": true, "success": {"scriptSig": "", "witness": ["acda7a718582f92aee3759ab0b33eb532ace3f5e408f31b9ece6b7d48686d7c5d3694eda712aaf3aa86498832245544cac0f51bfaf3623b0f726f95b97c2895d", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439befee6fda3cb49175c9fcdc99039bdef34bed6f8c885214259c1ab60f6e0548afc8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439befee6fda3cb49175c9fcdc99039bdef34bed6f8c885214259c1ab60f6e0548afc8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/5f065a6b9d7bf300aef6fc736b6256c582fa075b b/txscript/data/taproot-ref/5f065a6b9d7bf300aef6fc736b6256c582fa075b new file mode 100644 index 0000000000..76fd668984 --- /dev/null +++ b/txscript/data/taproot-ref/5f065a6b9d7bf300aef6fc736b6256c582fa075b @@ -0,0 +1 @@ +{"tx": "7647552a02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfc01000000b71eb1cb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c489010000005bb7d7a804ae458a00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4dab3f4e", "prevouts": ["3c0e530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "85f03900000000002251201e1e43c91fff99f096580082345e8b6c592108fedec9f6a82472097138f3a147"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["542000d72ec43c4f8d706ce1405158876fe0de3e7b672a19800145de6bf211becb9ee8ff74f3ccabc3ffa061d019bf7e00828f5a4e0d54c62b8ad390217c598b", "b71a53f8d1ce3b1b4918fa70f5b7ae6e88675e644e955503751636355bb9e28ee41c315ba7b125074f36f2745c88cd10418f6867c98da30c0bc2c8cf74fcc3d4d9342f70d157a2506b0ecbfdecacac3a8e6e6e60a9c49491d4320e3f9494242fcda484aa13d6139ff187ce1d7bd0349b1fa3c89637198b10818fa758fc4f6f174adba206a83d88306e24aaced754ba733b4349c06e795366e8c94cadda1ed111c952f951047587aca4b64c5ed44d93378c1b972bfbb37c8a14d0e638c47c8f47d4deada61affc61872941d8ad3d1cc3193b645df427e43ef70a781fee7680575", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365c2ab5ec9fa482b6934284b5609962a0afc3aae20b96a93e54b5fc5dc02f16c60000000000000000000000000000000000000000000000000000000000000000467ba320cf76754858afbd0a410437dd45fec020789ba961ea4172c517f33629e5858531762eb6a698a1e3be7c8affa2992e03597c26e89af62e5a147b5ef486cb7eacdc29d885253cb6dc773ea1c82343fe772a2223138d156f7d07bac5cf2770ed531f6f86030bc09c893afdee98e07365ae576d295e36fde41ff5fa3efa73ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe93c61bf449d1ca5ba09a216d6cd0cac8515bdb9901cd5b78b17567dfed89ad71ee7dfe112bf56e87fe8d7e87f6c04ca1d0de94fff41d1c5e23f1527525e2e2231d4b39d818b1eb61c090a0ee418dff9e2ab8f7a724a413571adfa69b3fb6e40aaaad9320e8f9ad462969b6aa096cd4095dd78ac9a586a2c43a4d0876e9081bee56ebd7b46142dca84cdce3bb7157d0682fad18c765ce07405ecf3278c3ef0aee210a26d72fe0be22d4a0f76a2de486244f2b71417194e5440b7574ebd70d0efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020115476634b435782333af72ce400dbbdbacdea010bae619d3dbfa76cff88845c471c71870b81acbbb00b4afa4261a91d2a541cc33e35a5f0a79b9c45e3b760000000000000000000000000000000000000000000000000000000000000000a6c1b5866a6d69c6209ad23ef71d6a06094f27450e1b4e032183c409cbb411e78b4a687419f9c4ef9df5c78d65c634c1e27a28ac08f97d687d614b1828bc435c3907dd78ede7d267aaf41d3510632656f8817d048302547a9688ad7c4850539077b7573ecb3d28f5f5b092f4974a8043fef0520670f1c6a3ef58c60a72df8807000000000000000000000000000000000000000000000000000000000000000008837b8b6a3f8983afd89ec084ee3e9ee9c1e23306ccc468a29823f68a71d2c885a4620b4bb81d39d439aebd435b049188fd502d91eb02a197736995b7b681a9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b75fe9679abb4f3ef6c76f8204890d129fe5f8aacd42bf21d24036a60f4b7214e53f9f90c04a88857c4eefd545fa9220383d972e755ca1c092ba94faaf2036e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6ad5cb5c118b7b710a1d7e63045925c542f6c28041121c1f15f1b2d1e7ed743009a6e94f0c3e4bb5520dc8daaa5e4d45e49ef5a62610f471a6d59f01fee05586c53db31f55a06b0dbeb3ecd8b904c596f7f14c356da40f7b46e2c5f3f20ab04fa0a89b0ea28fb713dd005dcf9defc6ded1c1666aee548e7719fe58f4594edf5affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000544b68a665ca4c315187b7d594a11b6095fc679da480ae7c2a5a79b875ddd5e40000000000000000000000000000000000000000000000000000000000000000a2edc52c483d392e19d27b3682e0539df72431c834a1cf493299c3bc2c48e9d5645d79752f33e13ddc7686e3b5bcb624380465814527ab1a8a96f5edd2255ae8c4dced00ac498230e0697e32927170e9b4e2e460d9a8cfe2477e3d1603bb7adbcfef4409233e1d32a0678b176021a8eebb825448e83c35c00f41a3dc14c0fc9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c2ca47032e82458967123977e9bbed6a974abadd1477333c3cace184e3ac852aec05e2c2462d28b65e08830ee24c33e9659ca7649cc7e79f7d009dacd063380000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa22633b7b435bab136304e1af1fbdc5025b34d24306502d9d142511426e1cca7d3a4a8ee12f2776b9d9222e28d95839c9488639527171b1579145e96bb8bb4872b0935d8ed445848c17b7eae038d9b187cfb460a451b51d2f8bcef01ae97203d0000000000000000000000000000000000000000000000000000000000000000ce277f6aa795245afec21418da718cccde79d6abe906cb7fd0b0b9e7d8bcfee9af00a4b73dea1d7180fc16801899cf312761d03578288f429bf672eecd27857b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7ecc9a2324d4a2e5f2e11299983b026d7107849329dfdac1e2b04885277af1af59be8d4963d61780ff8301985f114a5168d163ba5c0f47cb07f42e77fb5a451704709ed649af2eaaf8a76d81c4e1f2bc9b359aad877a7d544f0da198be4189714a5388f9f8ebee45eb1ad56d0c75f3306214615107988ef5d09f5ed14fa037f76c154f01491897fd49a3f9e1730953cd1e02c1faaa441ac9918c78602713c67ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb92f5d52ff7399a99a72f1736f293950fb057b616bade753d632dc65769a006f", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["542000d72ec43c4f8d706ce1405158876fe0de3e7b672a19800145de6bf211becb9ee8ff74f3ccabc3ffa061d019bf7e00828f5a4e0d54c62b8ad390217c598b", "92f8830adfc90b83d616588b760ee454e07a997960c3f507ac8cfb561e60a218569cfb6c25d11bf935fbd489d8a30b5188ac545841d55f826061c35eb74c0cc1d0800bee575bb2c68143ec3d847f845893b2608e87a1f06d041f1ac0f7787782b53690f9e08e9e3b5d7343e94512cf0efb5a95eaf5205f932e3f9408c266c1617b39aeaefe69d71a5f5cbbbbd01403829decadd0da22097a1d2606ae88a5ed90a18470a1293776271be35d2ca14f7da0d4b9f0eee98a15f1243a834e68237f7427c4e5859b4777d4646ed8489daf898a03dca6063d273e5c1e8c516cf6148b", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365c2ab5ec9fa482b6934284b5609962a0afc3aae20b96a93e54b5fc5dc02f16c60000000000000000000000000000000000000000000000000000000000000000467ba320cf76754858afbd0a410437dd45fec020789ba961ea4172c517f33629e5858531762eb6a698a1e3be7c8affa2992e03597c26e89af62e5a147b5ef486cb7eacdc29d885253cb6dc773ea1c82343fe772a2223138d156f7d07bac5cf2770ed531f6f86030bc09c893afdee98e07365ae576d295e36fde41ff5fa3efa73ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe93c61bf449d1ca5ba09a216d6cd0cac8515bdb9901cd5b78b17567dfed89ad71ee7dfe112bf56e87fe8d7e87f6c04ca1d0de94fff41d1c5e23f1527525e2e2231d4b39d818b1eb61c090a0ee418dff9e2ab8f7a724a413571adfa69b3fb6e40aaaad9320e8f9ad462969b6aa096cd4095dd78ac9a586a2c43a4d0876e9081bee56ebd7b46142dca84cdce3bb7157d0682fad18c765ce07405ecf3278c3ef0aee210a26d72fe0be22d4a0f76a2de486244f2b71417194e5440b7574ebd70d0efffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff020115476634b435782333af72ce400dbbdbacdea010bae619d3dbfa76cff88845c471c71870b81acbbb00b4afa4261a91d2a541cc33e35a5f0a79b9c45e3b760000000000000000000000000000000000000000000000000000000000000000a6c1b5866a6d69c6209ad23ef71d6a06094f27450e1b4e032183c409cbb411e78b4a687419f9c4ef9df5c78d65c634c1e27a28ac08f97d687d614b1828bc435c3907dd78ede7d267aaf41d3510632656f8817d048302547a9688ad7c4850539077b7573ecb3d28f5f5b092f4974a8043fef0520670f1c6a3ef58c60a72df8807000000000000000000000000000000000000000000000000000000000000000008837b8b6a3f8983afd89ec084ee3e9ee9c1e23306ccc468a29823f68a71d2c885a4620b4bb81d39d439aebd435b049188fd502d91eb02a197736995b7b681a9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b75fe9679abb4f3ef6c76f8204890d129fe5f8aacd42bf21d24036a60f4b7214e53f9f90c04a88857c4eefd545fa9220383d972e755ca1c092ba94faaf2036e7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6ad5cb5c118b7b710a1d7e63045925c542f6c28041121c1f15f1b2d1e7ed743009a6e94f0c3e4bb5520dc8daaa5e4d45e49ef5a62610f471a6d59f01fee05586c53db31f55a06b0dbeb3ecd8b904c596f7f14c356da40f7b46e2c5f3f20ab04fa0a89b0ea28fb713dd005dcf9defc6ded1c1666aee548e7719fe58f4594edf5affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000544b68a665ca4c315187b7d594a11b6095fc679da480ae7c2a5a79b875ddd5e40000000000000000000000000000000000000000000000000000000000000000a2edc52c483d392e19d27b3682e0539df72431c834a1cf493299c3bc2c48e9d5645d79752f33e13ddc7686e3b5bcb624380465814527ab1a8a96f5edd2255ae8c4dced00ac498230e0697e32927170e9b4e2e460d9a8cfe2477e3d1603bb7adbcfef4409233e1d32a0678b176021a8eebb825448e83c35c00f41a3dc14c0fc9e0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000060c2ca47032e82458967123977e9bbed6a974abadd1477333c3cace184e3ac852aec05e2c2462d28b65e08830ee24c33e9659ca7649cc7e79f7d009dacd063380000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa22633b7b435bab136304e1af1fbdc5025b34d24306502d9d142511426e1cca7d3a4a8ee12f2776b9d9222e28d95839c9488639527171b1579145e96bb8bb4872b0935d8ed445848c17b7eae038d9b187cfb460a451b51d2f8bcef01ae97203d0000000000000000000000000000000000000000000000000000000000000000ce277f6aa795245afec21418da718cccde79d6abe906cb7fd0b0b9e7d8bcfee9af00a4b73dea1d7180fc16801899cf312761d03578288f429bf672eecd27857b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7ecc9a2324d4a2e5f2e11299983b026d7107849329dfdac1e2b04885277af1af59be8d4963d61780ff8301985f114a5168d163ba5c0f47cb07f42e77fb5a451704709ed649af2eaaf8a76d81c4e1f2bc9b359aad877a7d544f0da198be4189714a5388f9f8ebee45eb1ad56d0c75f3306214615107988ef5d09f5ed14fa037f76c154f01491897fd49a3f9e1730953cd1e02c1faaa441ac9918c78602713c67ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb92f5d52ff7399a99a72f1736f293950fb057b616bade753d632dc65769a006f", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/5f06fb75a8156e71669ca65d0d928c7effc223ff b/txscript/data/taproot-ref/5f06fb75a8156e71669ca65d0d928c7effc223ff new file mode 100644 index 0000000000..e818902f36 --- /dev/null +++ b/txscript/data/taproot-ref/5f06fb75a8156e71669ca65d0d928c7effc223ff @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4f01000000b02ea1ac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e30100000099b12a1b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703401000000cc4e3d950314417100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc757020000", "prevouts": ["0fb65300000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "2ac5100000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "03740f0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000080", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082280ecd46f67705e4464578fc0c4eafd6d20a38d5c68152a49fc5d0c6b2a7c87ed2fecf8564d6a652bf0232997fa790ca314d73b111c417284694cd1738ccb12191585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b632d9cf4e2aaebce128d72748304c39681d2bcdf15a688dfe7a1c2c48044586014c92f678e181bf1dc3c918b3709f7d7746b7ca1ad43207ed3c2b1249c00bdd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}}, diff --git a/txscript/data/taproot-ref/5f148693c5a6505500494101603fb4754464594f b/txscript/data/taproot-ref/5f148693c5a6505500494101603fb4754464594f new file mode 100644 index 0000000000..c0032ea05d --- /dev/null +++ b/txscript/data/taproot-ref/5f148693c5a6505500494101603fb4754464594f @@ -0,0 +1 @@ +{"tx": "66a8b84102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf440100000027cdb0cb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a301000000fbab0fe603154c8c000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc74dc3dd23", "prevouts": ["ff977d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8a63100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ef", "final": true, "success": {"scriptSig": "", "witness": ["9ab776834a7d51ff312a4d6538c2e273e8258cba8948a2e491d03eb95a2e5696b4578bdfc01b3ae2f4f313ac488b24d452da79dbb68b097c1b254d88a033ec8d01"]}, "failure": {"scriptSig": "", "witness": ["c6b7be766cff0bf9186ccc6e28d137811fea7b8074fa9ce3940ed235a2e65715b3af32dcb22e427036f1d2021bb516b1e7fea029f3d9eaf66497bac166a54bb0ef"]}}, diff --git a/txscript/data/taproot-ref/5f1c481f15b7e89e16871d58cd5784dc2fbfc8f0 b/txscript/data/taproot-ref/5f1c481f15b7e89e16871d58cd5784dc2fbfc8f0 new file mode 100644 index 0000000000..cce94cbf34 --- /dev/null +++ b/txscript/data/taproot-ref/5f1c481f15b7e89e16871d58cd5784dc2fbfc8f0 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7500000000bed07dca04c0871d00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898783aa7c29", "prevouts": ["d12c200000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["85", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1c80cdf889f2095af4d324c92b00d2a9db5fcc0724b0f6f8ee9ebbd204938760cb2a240b376911c9876b3695f79f395ec3f2d97b1695e5c0e7f397f1ed982e79a1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364b0900bf42a492e6d84803f411d6b7283b14689911cd75fb3ce169ea1a2bbfe0d4e60e987dc96ee5dbea4bc309cd424f3f3a0504752ed5a5936e8ec363297933734b3a7050eee065844830ad8d45a710891f78004f5e7f35b8fd72bf3ee94449"]}}, diff --git a/txscript/data/taproot-ref/5f33c80c85ea079ca0e803f9157053bb5cc26ce9 b/txscript/data/taproot-ref/5f33c80c85ea079ca0e803f9157053bb5cc26ce9 new file mode 100644 index 0000000000..9dd828755f --- /dev/null +++ b/txscript/data/taproot-ref/5f33c80c85ea079ca0e803f9157053bb5cc26ce9 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc9010000008569c1c7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b05010000000d6c2cfa0347939200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc5000000", "prevouts": ["5b906d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d95e270000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "017d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a70d9b275504125857cbaafe4a923049b33c80b4c83ac6cdbd36bca05abf17733479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae05873438be84f92d1402d5d55e9fb409fe52800aaeb5db180b239b834bc1ca2"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361819509e9671e02e7a4d8cb2e99fbc3fdcbb7d0847ecf4f66821ff751ef18b028874369940c44314cd428c72b977b6d1fa375b1e54ddd71363c505e3530065c38810a2a55ef559e3dd2f859359930339f67e2de31eeac841179b888fd41fd8a3"]}}, diff --git a/txscript/data/taproot-ref/5f49d9e42303e9fd5d3b3beb8b4f91d1d295e920 b/txscript/data/taproot-ref/5f49d9e42303e9fd5d3b3beb8b4f91d1d295e920 new file mode 100644 index 0000000000..fb702c57e8 --- /dev/null +++ b/txscript/data/taproot-ref/5f49d9e42303e9fd5d3b3beb8b4f91d1d295e920 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c78000000003e1cfcb0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c87000000004eb3e1eebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf930000000022a849d80147e877000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487a8000000", "prevouts": ["f2d35400000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "17484f00000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4", "72f17a0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d68bf7c140feaf8e4f60b8776bc2d1d8905ca34f4654213318f309611a791fb5a1ee4fc8dc3f50b1a7d3e5d21efc1fec664b6d43331f1543a08d774de08283d74b746d331d5c95ed01a802968db1eb0c81e0732cc306eb144cf9060c14b04a5c6a5e5061b73680a999fed0246f6cab8aa050c65d8ca054cbec9889d7184164e16fc8892d53c526e2d0319777ed8f82fb8165f3d4ef862eaa293789e9fa0908c057319c87d954e6274cb12c64f00e91cdc8f5145243a0189bfee992b27429d95021f953f23aeab4c6e7e7987c77378352a21d8b7fe4ebe28d113d8f7e0f662bd4bd4573b6e75c03493e72f22e525b5033e36f9c4e9b6e34a4c0342e539bfaa96c938c2477057ba1fccef550bf7f8d85f3f4eec2b7fc624e88884ad3bf1c32e839de0614b2cb30e81003c0620d9ac091d97c199bcaaa3c38faf2fb1cf1464e18eda2f4fcd7ae55c45a0d3cf2347cf9fd80afa78361c367fb700e17e7868e08757da8dcf9050b185e927d5c0cb7c9a80188884d03049231303cd03c23d9d6275abfe63eb720a423bf8926cd28ac0d416ffb7a866676825b560af653dd9a61be9389e375e1b9b0a117135099ecd9c11e0afaf647e1b9e90de8dd4f67b34a0823b913c66b98b2baff077dda4e21518a2317d1eb7274d9bc1fbded3844b9307ea03a8884d734ff9557ec92d29a1c157bf85c7e83dc0581a144a1e291e275ff5717a529f75ce3ca14b5c75f7275df", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045473717a4c1e901899f4f84b73650625e3fd5128aa3394961893ec6e831ca5ba551d880cc047c10a424f65fe9dd9096492f3efd8e08517d04362957faed36c3f852ff338358c59a252efd0a17af70f1cdfe194eb24c5d50483b26343bf89011bf"]}, "failure": {"scriptSig": "", "witness": ["4d090280dbce27bc6df840e8a2111bfbc544aa69a9062ac998d1aea9b5c19e4508542441b53073dac68032c2a7786a5fccdddc19a01fccd9c88dd0de26ecae8602b82ea65b88253f8f6103c1a1ad55cc629437d04b4ee6d3ccc0e33e3431927b45af53af61ee0593c59b469d553c6c4f550ecf021e07dbcf3981fe0d9a061583f90d6c00dfb5f3fd29fe895d9930c531bc2c5c24544e64b11f0f491320e2f80838a30268e491138071a849afb18322f676d06504ff1ac62d213ebf0330b754f0d96832509dbc5dd00dc9c5285eed78d78758d5033c95b8f38247af94cf64e855deb83e0d0e4a8461d9ac07de149feb3db55d0948f53120f3f454ec6b88f719e54c620163f49efd08813adf2d1fd450e57cb87d19d9c63852ce1c36d7f7eff5e089156971df45ea075b61f2792356059913df7f090cfa0dc801332be78b3ff8efde723f409a80c0f0b54b522b02cca7bd99642adc50ee3f9e1eea08938504b23cb8307a6dc7cf021b031dc32f6937082584aee4d7afcacd01a1479c0d89359b90a63886187849ede948546f367a85041b1546a118a7614488f915247616eef412263d436303c4228e2fea141a71ae0ad128f7d79b5f6c94e7941ee003e3ef6c0a9fb671fa79a6ff9e57143ee18e5bf70d107727b313561d7015477816b92bc41718fd89d5fb18667ef5edfcd3d391eea8791b0d1cfe8e8b7f665914ea119a2197e13fe3d0415ebdd2fbbf32f17561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45385991a3000310359e2a9adae84589f286ca8f4d4476598a0e772bdb8ecbe6352ff338358c59a252efd0a17af70f1cdfe194eb24c5d50483b26343bf89011bf"]}}, diff --git a/txscript/data/taproot-ref/5f617801a71e54b50b37fa8715f4acb9c710bc1d b/txscript/data/taproot-ref/5f617801a71e54b50b37fa8715f4acb9c710bc1d new file mode 100644 index 0000000000..3be642437c --- /dev/null +++ b/txscript/data/taproot-ref/5f617801a71e54b50b37fa8715f4acb9c710bc1d @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffb000000003c3851e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2b01000000a55d69fe016a56890000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796cd000000", "prevouts": ["ae147e0000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "731e4d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b", "final": true, "success": {"scriptSig": "", "witness": ["86c6eec7193da1b5455bcf273a3a16114ee645411225a833cdd0a32e9dfd78b089bbf36f4e9af0c6d026973e0f1887dd6d29e2337079ae5afb26e1cfcefc1b3f81"]}, "failure": {"scriptSig": "", "witness": ["dfe32bb06ebc64fcd737b27bc8bef0840e3dc7794ab25058705659308f1453cc9be602519eb3ae6bfe877b8f16dd08e96b708997382d53b2a6903546206a00010a"]}}, diff --git a/txscript/data/taproot-ref/5fae0f3d4ccf63a68fa6fc6ed2f605c153bc568e b/txscript/data/taproot-ref/5fae0f3d4ccf63a68fa6fc6ed2f605c153bc568e new file mode 100644 index 0000000000..5de7ba5a9b --- /dev/null +++ b/txscript/data/taproot-ref/5fae0f3d4ccf63a68fa6fc6ed2f605c153bc568e @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1602000000be453d33dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4c000000008b83fd6a01858b58000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748705000000", "prevouts": ["e5325d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0268220000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_mis_3", "final": true, "success": {"scriptSig": "", "witness": ["c677708e3196e905a65db1e859f10031e4e09b6ae41585884462f5e1196b3148d3fd4d0603e1d5a2a1d70f3f444fe2e1b8bc569009a5a4539dcfc4a21d3d47cb01", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["ba8509c370606f9c579eb466d05a04f13d5db0021bb6e138c306fe8a542cb505acb5b46ba209ff8c47b727d8e35a4de76702e00bdfc0d66fa3199164a105412e03", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/5fd0ea816791d944d140a7f5a132e628c4df41cf b/txscript/data/taproot-ref/5fd0ea816791d944d140a7f5a132e628c4df41cf new file mode 100644 index 0000000000..7530c47da4 --- /dev/null +++ b/txscript/data/taproot-ref/5fd0ea816791d944d140a7f5a132e628c4df41cf @@ -0,0 +1 @@ +{"tx": "58bcc4a301dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbd01000000dd85e9b602df8448000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac46000000", "prevouts": ["aa2e4a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_43", "final": true, "success": {"scriptSig": "", "witness": ["87d077961f8f2397c36aa4a99b46e0dbeaecdd032434c973d6f45c84a2691ed9c40af7f80d79d4cd13dcdbfc7290bd83538f2c1b89d8c6e68db84e3cb3ab03ab", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b91ae0ef9e93bebeb3288bf7e2817763246cb75874fc608094a8f55cf2a1db8b6dd8ea87a26aecb9b3b7df2299d0d8576b1ffe6c8dafabb79c2f688d6f89a4d543", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/5fd72300746767ed3942898b20e747b5e468bf3f b/txscript/data/taproot-ref/5fd72300746767ed3942898b20e747b5e468bf3f new file mode 100644 index 0000000000..31dc81be4d --- /dev/null +++ b/txscript/data/taproot-ref/5fd72300746767ed3942898b20e747b5e468bf3f @@ -0,0 +1 @@ +{"tx": "af047eec0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708d0100000035cba8a8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0500000000056a088502900d7b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca77d2341", "prevouts": ["67e6110000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "63c76b00000000002354212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["4734f7eefaabd240db74a20e895a323978e3541c66ea1e8b55f9b9cc3a956339431fb1d9ecf8acdc726ab83cdcc6c9a89a2e9a0edc755bacfdaf9d5d6db5d5c7"]}}, diff --git a/txscript/data/taproot-ref/600a49efd1ef275dd0d15886970d34f50ceb2cb5 b/txscript/data/taproot-ref/600a49efd1ef275dd0d15886970d34f50ceb2cb5 new file mode 100644 index 0000000000..b3b1e32745 --- /dev/null +++ b/txscript/data/taproot-ref/600a49efd1ef275dd0d15886970d34f50ceb2cb5 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127093010000002d19d9aadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba200000000c727f6d70274d23500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748705010000", "prevouts": ["f447110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3830270000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6abf", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d517a865b9233942981930f9f8afabfa67810a1f554556b3d8041274c095c748aa3aa736b6bec5c04b20c5b38998d4f897a7594adad2cf377758bae1284900c20e3219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93664b0019b93cb5fba4dac055f468adb936a6222806f746f4014a8a3f37639abc27a865b9233942981930f9f8afabfa67810a1f554556b3d8041274c095c748aa3aa736b6bec5c04b20c5b38998d4f897a7594adad2cf377758bae1284900c20e3219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}}, diff --git a/txscript/data/taproot-ref/600aee354a6065175892343ec14dc1eced5c33d7 b/txscript/data/taproot-ref/600aee354a6065175892343ec14dc1eced5c33d7 new file mode 100644 index 0000000000..4dd9b5542c --- /dev/null +++ b/txscript/data/taproot-ref/600aee354a6065175892343ec14dc1eced5c33d7 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d02000000cf6fd6acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdd00000000770059ed60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270030000000080b8e2a304c1997600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5997e11d", "prevouts": ["a72f0e000000000017a91481d4142ddc5ce7a3de4047bd48b623419b5bc45e87", "8cd95a0000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247", "ae2e0f000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "847d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faff78d21b135ee37de5fb006beb46b85f4aedf8bacb6598da1f15171cdf92c209c568c76d6b344a062dd798f6575db1f1731d6a7ca3f2682e7e1b801cd94d3826"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c194e7775fd7c80d883f2d740f9e56e49ab9a06d8b2a8d7428d3ae945cc345b376735f386d1a4700f0e60fd19c47be953169b4ae01039887cebf253884ac2528c568c76d6b344a062dd798f6575db1f1731d6a7ca3f2682e7e1b801cd94d3826"]}}, diff --git a/txscript/data/taproot-ref/60157ba4a7cd240aad985554d23dafcb6b99be47 b/txscript/data/taproot-ref/60157ba4a7cd240aad985554d23dafcb6b99be47 new file mode 100644 index 0000000000..ec1a64cf66 --- /dev/null +++ b/txscript/data/taproot-ref/60157ba4a7cd240aad985554d23dafcb6b99be47 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1a02000000688f084d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c2010000009ef8d859045db7a1000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acc63ed24d", "prevouts": ["8f31660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8f393d00000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_5a", "final": true, "success": {"scriptSig": "", "witness": ["0c322227924edb56429524d47975bec9661feced637da9488d938c579ed9d9f3f751e937ca88e77c996154191cd340a0ecff2647e9cef67303b4811bff21d623", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b72cd534632bcb423fd826395cb0170679cb69c34af86263d9fc29e106097cd0a2f0c7fe295147621a9d101cca84e4241d59b622c6d10e1a9651f22f5f58f3905a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/601bf2a7aa8b6c3a9adef4933fc515d494f4a95c b/txscript/data/taproot-ref/601bf2a7aa8b6c3a9adef4933fc515d494f4a95c new file mode 100644 index 0000000000..d8b6c58c63 --- /dev/null +++ b/txscript/data/taproot-ref/601bf2a7aa8b6c3a9adef4933fc515d494f4a95c @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47801000000d864d64160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706300000000b0448b2f01b9302e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8754010000", "prevouts": ["fb623f0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "33201100000000002256202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["7e6eff66ddca203267f8079794c4aa5cc3e46d949ac5d785b162a8c7acf888f7b978e1f3a0accdf966e42dfe4dd7cc59d4d6da856cd372a1bbf908a6bfdb3ed1", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/6030146df9ff31d1d977c2672cfc3792ad81865d b/txscript/data/taproot-ref/6030146df9ff31d1d977c2672cfc3792ad81865d new file mode 100644 index 0000000000..5db2bf3f4c --- /dev/null +++ b/txscript/data/taproot-ref/6030146df9ff31d1d977c2672cfc3792ad81865d @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4d0100000097b2f1d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff300000000335a90e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43900000000f069d69701a1ee2600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aceb020000", "prevouts": ["98775d0000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf", "e37b73000000000017a9148462ed29696925d7688e1db8e76ef9e6667f05b287", "74ed3100000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902cebb14ae0976d2a761e7312a258e5691aade4f58cee01a039414a95b2ad9366950f9d22dc2d56986735460027f83409b3d76a03ebb5acf5951b743755e38ef6f856d3330744f493bdbc242a87021e9eee73d256fd114103c90a47cdd9169889ca6d88850e3dc228fdec261be836ca0eca2a63643b5463fe3eca82100fb05a89c6fc7153b0691ed830eebaf4c4a5add6478f5c67a5b0352cea3f315e19bb0caab04878d1c87ad73229e35b16846e1541a378fa47c0136713b96c664e203b7f39736d6752340971b166baea7b7a1b64739802b3228e211a750a2ba6e46037db35828b8be5cfe71d75c54b2c1f4ca5890edcb193ff2f89e1a92b277d6180525e680f649fa1b6a7fb04c09ed5f1ded674c69a1a1f660ac2665092ac9cf44d1a0d83c14cc196b95fd27db03a317cd1ab19247e5ced20bcd1b658cfc6c134aa1094b6f5b311dac11c1ab606eff1a70a5041365e9822b572ecb58bb02d17b726875af11ecb742107be3ca7ad4f59b7b71fb9065334ad509ee37c9400abf4eae3a8ad0384fa350635f2eedff03e71bae11111a7d2495f629ffb888512a01963550bbc0350b863f413c96fac5aa4ac395495c30dfcb75ec7d3eea1bc672a38bacd23419a71fb38a1b2347b459e03ddccd0e32cc810313ff42e5768bbbbbf5a8faf88ec0876e4b67e7f7aa643271374a65005f04598c97dee9fd0968fcfe6371f59b631b2d81d16d8fced4a39d4d75e9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082c3950c17255228812280bec2d0cca04b586565374a97ee6c913745c9c1a159600ce9ba0618adb3ee44483a22999a54a4e1710b9846377d8164aaa29371d79f22a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}, "failure": {"scriptSig": "", "witness": ["4d090222a6561a0e906e5cde7507b9e35dda6a2608ec0600c213a66226848db87593fafa194a6a01d862b3e29dbeb40f502a22cafe5bcf5842c552f3aaeafc056d6113c418c285a38d4a625f94f981ad119b0f627e5418c08b471676dd18d7102d2330cc780645a7b0e4e7480172f20641ade124179be416c856f3ee7ffcc1c0f7f66a665ed3b779b9aa02c7df92c9eb3af8b2beb601e42b7cc9a8f696c1a81ea97e23451699214834b98f2b66ad6310664c466276408f754928ccf0fa72ff59193dc6ed0282290fc25205ad57bb0a9415559d0299bfe17b029a6cdb4bca0dd3ed14ec30187c90b4a883d7218bd0b996ff3e60ca83aab6d3279953a9137ddbb6038748f9bb2a83a7c39f18fff94eb2fa5d23a1b6c6db163943ee8fd4dffa4526326a6adf04530e299dfc99683d22677a00251842b6d798ba0fb88826a35f2fc72d04fa40303b66ca2e1c12f8ce6b1a27c9134d6e07a404caa0857a57aa76391558fb9fbb0c98c6df61aa4fa8aa0615e38591470cb0f60317fd74b6b754648f71e599e621438aa654b2bb937b649be08fae10bf953aa791f5a0b6aac76c9e80c61fb1d64948528d9fcae33b277e0506eed1c0785b7577688393914e39ca2cbf39e08c0b77d716db3266a9f902ab20488c091c0300a12e18b9f4f65f81483941ea1bca66c23307f14dad070e3bcefe2cf9da69a00229faff2aec5ccfd76009b3018b45249c00f5d20eb5840a647561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d60d23b5fa12cba50628f4886671306729110bc543fd454bef1f18df07be9211fcbd8218c9dac71a3535cf40d08210778548ef11a7c40c018c5ea1885d9980740ce9ba0618adb3ee44483a22999a54a4e1710b9846377d8164aaa29371d79f22a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}}, diff --git a/txscript/data/taproot-ref/60350336430acbd30d2f4a7afd671e1a676249b8 b/txscript/data/taproot-ref/60350336430acbd30d2f4a7afd671e1a676249b8 new file mode 100644 index 0000000000..68ecbcf327 --- /dev/null +++ b/txscript/data/taproot-ref/60350336430acbd30d2f4a7afd671e1a676249b8 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42d01000000bdb630c88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cd000000003ebb08c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f400000000c26dee9901a9b60e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374879a000000", "prevouts": ["804a37000000000021561f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "47ba3c0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "dfe4400000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "f07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363b039c0e9d8bf6e88a427a2ddf5980e431ac842cc97f6c7b94ab341d52b6d0fdbec2e27f579b173781717090b44a070e7a8880532a05b17dc998986213b0a92d21741bf2762a3041d275698fd56a81520b6404e88c31ed080bdecc36c09cb10e"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652dd3253268b521b8234f9a6c7de3fba7d5f203b8100eaddd2fc9e08d24fa7c435987c1d75c441670cebdf615816c6f42e3d99515a7a7b9841c20e75c916465ebec2e27f579b173781717090b44a070e7a8880532a05b17dc998986213b0a92d21741bf2762a3041d275698fd56a81520b6404e88c31ed080bdecc36c09cb10e"]}}, diff --git a/txscript/data/taproot-ref/604aa389e1cdb7844558781a66e69bb80e5f7ed4 b/txscript/data/taproot-ref/604aa389e1cdb7844558781a66e69bb80e5f7ed4 new file mode 100644 index 0000000000..c716cd364a --- /dev/null +++ b/txscript/data/taproot-ref/604aa389e1cdb7844558781a66e69bb80e5f7ed4 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270240100000016d9ce96dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b740100000085d2d2f90174352f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acc1040000", "prevouts": ["3fde11000000000017a9149d4bcb1ed806c9beed692a78614f8b90a68c708187", "7903270000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21571f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["15bb12fdf12c0e4a1e19ec0ed405846f8e030af8e2f45a52e90f8b4b848d733c528a438c305cc14eaafe646856418e70cd834fed506aa34c27265e7829ddc9ae"]}}, diff --git a/txscript/data/taproot-ref/6070c8050e46e845c5170ec25daefa937dbbdd11 b/txscript/data/taproot-ref/6070c8050e46e845c5170ec25daefa937dbbdd11 new file mode 100644 index 0000000000..a0d9486890 --- /dev/null +++ b/txscript/data/taproot-ref/6070c8050e46e845c5170ec25daefa937dbbdd11 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8b000000008783f9a3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf850000000061d3980c048f94c6000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7f11eac39", "prevouts": ["ed4553000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "e55075000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["304402207c3560a1b325f60608c03ba21e230e144c06005942eb9b208c676bb569b242e102201e3ab2f0c0137ba95e943535fe46234ce0fbf9143783044187046bc848149f6901", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["30440220590fd32adbcb6e036526a61ea254a11fa14d3319fffa382dff23e0b3395c509f02207ec326f9affa0aa6108fe6b4fb5534d50de66a021083aa3d6ace4bbd65568f3601", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/608151513d665821b3914810e70e9c1f957da187 b/txscript/data/taproot-ref/608151513d665821b3914810e70e9c1f957da187 new file mode 100644 index 0000000000..55b0d2b881 --- /dev/null +++ b/txscript/data/taproot-ref/608151513d665821b3914810e70e9c1f957da187 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702800000000800da0c18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b4000000004386efe703b659440000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1bd3c834", "prevouts": ["d1a1100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "46513600000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "483045022100a3b9a90f7f608d76fc20be55a2b18001ffd1d09a68f110e8f572715ccc89718c02202f88a2681be70195652e0cf90a000781c6e131e92210db2d4d8a77508a6c18e7852102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "483045022100aa9878010ce7dd01e0970ceabc1a33669e4adc188f69f35882800203fe1feca3022063d04c1b13e431fd4395fbb297ac2bf06dca4755dc60a1910855cd3c4215b4b2852102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/60a40b71e2980d806f6e3f1f604e1c25d8d684a9 b/txscript/data/taproot-ref/60a40b71e2980d806f6e3f1f604e1c25d8d684a9 new file mode 100644 index 0000000000..4b0aeea0c2 --- /dev/null +++ b/txscript/data/taproot-ref/60a40b71e2980d806f6e3f1f604e1c25d8d684a9 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfe010000000fe2765760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ea00000000cfd16a8c01ff36080000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796ba030000", "prevouts": ["92fd270000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "b4031300000000002251206c786b308a9c6a675d6ba645c0b3fdb6ef76f1ce96e6f31b784e53054a24ec87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360ed7b0b6321a9c82dfd18851526d308dc485f056f75d2abb96b2300df7f1dd61"]}, "failure": {"scriptSig": "", "witness": ["6a9f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/60c433ddebf0bd6ec3f44d608946aed9e843587f b/txscript/data/taproot-ref/60c433ddebf0bd6ec3f44d608946aed9e843587f new file mode 100644 index 0000000000..3720170c9c --- /dev/null +++ b/txscript/data/taproot-ref/60c433ddebf0bd6ec3f44d608946aed9e843587f @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfd00000000abc441cc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4220200000015f555c90339ce5500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870b030000", "prevouts": ["114527000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "9d7b310000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["fb4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514c1cf5ffa00c6c7050afc353617823cd679ab4db6c6aacae1c16f62a2980653852b51aac478484d8a075e848b67a41ce9b347e1249fa49816f898b909a6d4bd5c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}, "failure": {"scriptSig": "", "witness": ["4c52fb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93695454243f1cd73e7efe7199757ab68ab99257375d0485b32e96b03b75ee2089778b7d2e6e031ffcaa796ad02cee9894dc771f62b9a69e495a6b0c07c9d130bc643d925f8e6664e67417d113cf51c5b4c3126025efa5f83bf5b16dba6746279b738273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}}, diff --git a/txscript/data/taproot-ref/616a7fdb9927448c5c9e34f94d4f6d784f55ccf8 b/txscript/data/taproot-ref/616a7fdb9927448c5c9e34f94d4f6d784f55ccf8 new file mode 100644 index 0000000000..d62bf54c5c --- /dev/null +++ b/txscript/data/taproot-ref/616a7fdb9927448c5c9e34f94d4f6d784f55ccf8 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4160200000022cbc59f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700c0200000019f988b38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46e00000000d2570be0027ad87c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc70deadc2a", "prevouts": ["d5b6320000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "59ad12000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "5152390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "8d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829640e65f27972e690b56e28a8f49ec76fed3450565b59143bd547c42619e148d8047789ecbd47ea83af97bdb87f8422a4707031714ddb05eaa38b24e158a7c35"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360a8a801582dd903a75de5904df4445cb714185a34938b03fb7716e9516670c429640e65f27972e690b56e28a8f49ec76fed3450565b59143bd547c42619e148d8047789ecbd47ea83af97bdb87f8422a4707031714ddb05eaa38b24e158a7c35"]}}, diff --git a/txscript/data/taproot-ref/617d47ec32a898ac6e2b5bdd9b8e643408054596 b/txscript/data/taproot-ref/617d47ec32a898ac6e2b5bdd9b8e643408054596 new file mode 100644 index 0000000000..7e97511558 --- /dev/null +++ b/txscript/data/taproot-ref/617d47ec32a898ac6e2b5bdd9b8e643408054596 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708a000000006cad66f9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf50000000010b9b10002826d6b0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca5000000", "prevouts": ["c136110000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "bf2e5c000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514c57128c8a67973c5c0637342f282ffab122f5a34eae9e616b37e48a600a7a243e02ad6eabd24d4d247e98c297de2a9d81d67e55d72d4ddf06c8e9a23565ad8a003e045cb689fe4fc6de332c618eb0cdce02c2dd8aae7c6dd6f70bdbaede2814"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670ae177af992db50f31dcdf0d3e38cfa7e2e74b3eb9ff8cfcd46237e8c91da365f20acab37c5a5cb044828a71c51f411f3799e0c9201344692cb6121a679af6a96525fdd0eb5f3c5c39bf5b04d78b37703e3d3b538b36e17fa0ddbdeb236a5daa4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}}, diff --git a/txscript/data/taproot-ref/61ac7af8ebd0ac559618d67f23d159b57dce5577 b/txscript/data/taproot-ref/61ac7af8ebd0ac559618d67f23d159b57dce5577 new file mode 100644 index 0000000000..25849920c2 --- /dev/null +++ b/txscript/data/taproot-ref/61ac7af8ebd0ac559618d67f23d159b57dce5577 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2e000000004f19aad78bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a9000000008152fdb1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8b01000000bc4390e0033a13a400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d3c8e225", "prevouts": ["20dc4d0000000000225120ec87a05d11c16a148e05f58a688dc5bed4b2941085b66901aaa75337acfb52a4", "f0dc3300000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "0f0a25000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4e16c32678f9526b399cba9b784e72f2992f57e86dc0d30aed359cd8163f6c1"]}, "failure": {"scriptSig": "", "witness": ["6a6a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/61ad3f5b692481700ab46b1c77ecf7e1590f4f72 b/txscript/data/taproot-ref/61ad3f5b692481700ab46b1c77ecf7e1590f4f72 new file mode 100644 index 0000000000..48195102c1 --- /dev/null +++ b/txscript/data/taproot-ref/61ad3f5b692481700ab46b1c77ecf7e1590f4f72 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7900000000f330f40adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b590100000008d985f0031e937400000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac2cb95a1f", "prevouts": ["9343500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a6ef260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f2", "final": true, "success": {"scriptSig": "", "witness": ["6a09bd3b259d35714994da18e608796841604a3aa418b893979bc70b65d26913f37371cb50fd2d1bf67f3ba4969d4d43b8d018e122f3be7584b245da98c646ed82"]}, "failure": {"scriptSig": "", "witness": ["1b6e3247f48fea47a56cbc1391b4aa6d417090bb66e4eac3feaa66c163dc0ecbd1de148744174d4e5238a52a5cb80fa32e1d1ac598b302807f39a1f00d513413f2"]}}, diff --git a/txscript/data/taproot-ref/61ad53ecbb9e93b9d193624ee3222dd39af8c8a4 b/txscript/data/taproot-ref/61ad53ecbb9e93b9d193624ee3222dd39af8c8a4 new file mode 100644 index 0000000000..a6a5e0a972 --- /dev/null +++ b/txscript/data/taproot-ref/61ad53ecbb9e93b9d193624ee3222dd39af8c8a4 @@ -0,0 +1 @@ +{"tx": "865915d603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4200000000458456e0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9d00000000e0cafcf560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707a000000000805b2d203a5255300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4a000000", "prevouts": ["ed2920000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "3f51250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e9fa0f0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d2c366f5f09fc7681ee328c1d1e0744e3d1f6968f411bc983eafb1d97babb7357017647596b1d0b5d4400ffddc5cd50d9aaa53b080f112dfaa2c5985c87c2ab6054554b46e48c04e7631c61fb50d897e6202de7a2650e8e40522947bca33e6cb1402e8ea9ddce4852f0460c99dd3632d833d13dbf42d93b664b88a5ac58d27e9dd411dd68cc2a921a90710ccde304737ed292254dc1b1face00754a7ec9ac0de659194f441184ff96b2cad650d3f53bf15e9d6da8e325857d5aee2b252475d17ab0508ed4eaeae32469282e40f203de623d3cb895eb9bb084bc1304d98d64631cf422de97bfba40f0325e2086add112b420880c543fb742da4d8cdfc0b83091a5478a1b7d4fc836fe6b505f2163d79bbea0b9560c41feca534e9076f70d4481b18cb03b42242bd7987b6040d650f8a4bc410c78d6481ba58b633e3e60ae24d114645a7f0279eb111c4613279adc31608460cf8e526bc2d92a75c2c941b174d172281f4b5fe85af826f5e874e4b11e9900c07dbf8d5b47f7871b8db5cb853f661e8c6b1ab55854d0715ec68418a75887950f3776efc9cf312aef724f17fbec30bd7a5c191712fd1cd05ebfc3fb0f6d32ba36688067c260012c5564ee44b6983d7e284055be54a6a73aea1762b58339e2d48d84060d6049e16b58bb8f3e01bb3aad920e4b1b395c05a697d3e5f511f4d2062db1ff237e5672433a8e5da8c4c311413e31766f53f97f89b75", "6c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699ac01d1255123521c36b523ade2f83d5f7b8cfaacc623fc56a5e5790c6fa726582208a7b7ada7f1b97e8a78343d1faf2bcdbc0a6f50e4fc104dcbcaf06e1472e7ade389b5221dc8da0332285833f8f90d31bff9f5dd8cabba4bb6916c2c5f203000b960c1063a40dfb5dc510671dff140eefb73aa6757bc42ddda0d13c6b661"]}, "failure": {"scriptSig": "", "witness": ["4d09026294caed73fb93cbdc2d4cc7c05cbb2e5d67cb415e4bdd98714d6671da1da886775dfb9a1731b8b3252b535fee4a037cfcb44bd4e4af04a3ab23a63ee4e3bdc916c8d0c8abf69d82ad05b5ce0ae927de1f7942b63cba10ad8f5a996b56e998cb051e29f8ebba2a09643b0974c301c6768e85f363aee4376fd2e6a5b5c60b7234f0fdd44ba0670dfc50a13bd80821bfca84b1b0a76ad5aba6f7cd1d5b374ef3dc46fce9480c38472066d540b56a1625193741413aa339a484da5980a773544e2ea67a4a5a6c335e524ff8aaa5cab5e6a23bb41fe3898a8fec94ed42e1d73e965203020fda8fbcdf3a9fb55772f90a8215e9923be8201216d216d1d6915a827a256d0f4185b1b938ec5aab78fd91af7e8ff8042b23a072fa71aaac7f4f7162575bd9aab17780993b109029770444eba185a81b69436a8372d3df59b0d03c20c08111e0e38b5569a68c89002f5d099191b304a6a72b91e9829cadefc342a5bb0041abded379b05ad94118e34b464311fe10eb1fb398ad2351ec5431711f52def2426d268fc2098175e0734494f37385e454057f2feac6faaa5ccffce27e8af066527a7f05c49c755944d240e3223ef9b97b7dee6ab0ecb007c7dd47822121d80bbd8b7f02788d438d1f49551e88203dd130874e4bb9f0c2f798e9b416534d9b267e28dd24a3d5898443d0aee66a306338b26f99195ba7878c47253ad22d8a8977212669db090aec72dca275", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369b3812b1e99c6fdedf163c708140d27f446ac63a89153db0a9d90b526328f674582208a7b7ada7f1b97e8a78343d1faf2bcdbc0a6f50e4fc104dcbcaf06e1472e7ade389b5221dc8da0332285833f8f90d31bff9f5dd8cabba4bb6916c2c5f203000b960c1063a40dfb5dc510671dff140eefb73aa6757bc42ddda0d13c6b661"]}}, diff --git a/txscript/data/taproot-ref/61af1bfa70f27db871da9994cee2a1fa6dbfe915 b/txscript/data/taproot-ref/61af1bfa70f27db871da9994cee2a1fa6dbfe915 new file mode 100644 index 0000000000..6c663fb176 --- /dev/null +++ b/txscript/data/taproot-ref/61af1bfa70f27db871da9994cee2a1fa6dbfe915 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4200000000909948478bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47a00000000b7bad9750152878e000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47877d532648", "prevouts": ["407b6800000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "67d73c00000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e54c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b15c6036a676a492a4bf737064ce6a21b64de8ad159d3b2e60d879468caf8957d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}, "failure": {"scriptSig": "", "witness": ["4c52e5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4deb89faaac3ba7f5e16436fc8221b82cf02c075e22a72f26a59deb249ff0d9e9edc23a266999aa1773fe99be867e95cb2abe2d57657b7a4dc20a388644aabac6d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}}, diff --git a/txscript/data/taproot-ref/61cb3c37ef29bf5abdbf60157dd9334ea8578716 b/txscript/data/taproot-ref/61cb3c37ef29bf5abdbf60157dd9334ea8578716 new file mode 100644 index 0000000000..26a09e6eff --- /dev/null +++ b/txscript/data/taproot-ref/61cb3c37ef29bf5abdbf60157dd9334ea8578716 @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270970000000058396aee0262b20e00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75b869d3f", "prevouts": ["246010000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "6f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa250e9882e2e133b56af40caa5e77ecf964d6e28c7a51ea626a8db4d1e1f7bbb4a3f8f9fe88f0f431b5ffad473abfcf1c4b340e1c7daa1232bf4c86f035b8cc51"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d671bc8379695bd53537ac42fe7f6ce70c4715992c44bf872eb735ea6e29d06250e9882e2e133b56af40caa5e77ecf964d6e28c7a51ea626a8db4d1e1f7bbb4a3f8f9fe88f0f431b5ffad473abfcf1c4b340e1c7daa1232bf4c86f035b8cc51"]}}, diff --git a/txscript/data/taproot-ref/61cca434775b13627deda2ffc7b421cc834c16ee b/txscript/data/taproot-ref/61cca434775b13627deda2ffc7b421cc834c16ee new file mode 100644 index 0000000000..aa618207fe --- /dev/null +++ b/txscript/data/taproot-ref/61cca434775b13627deda2ffc7b421cc834c16ee @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127010000000008e090c5160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cd01000000885fa63502431e1c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8a000000", "prevouts": ["68d90f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "d1220f0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["dd4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb48439541955ba1ee927ac695664eb0a176a74cc392dce51705e9d682cc4042391e6ff37e966b1384c4d5bfa916e4482452180179a80b37f756d07f3e2976ea2d444f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dbb12e8fa457546fdd4a7d9164919411804187407b1d76f0315307aa97171b6e8439541955ba1ee927ac695664eb0a176a74cc392dce51705e9d682cc4042391e6ff37e966b1384c4d5bfa916e4482452180179a80b37f756d07f3e2976ea2d444f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}}, diff --git a/txscript/data/taproot-ref/61cd2f257a7e5a750b8f03f5aac0ffb2badc3aef b/txscript/data/taproot-ref/61cd2f257a7e5a750b8f03f5aac0ffb2badc3aef new file mode 100644 index 0000000000..ae8613b20f --- /dev/null +++ b/txscript/data/taproot-ref/61cd2f257a7e5a750b8f03f5aac0ffb2badc3aef @@ -0,0 +1 @@ +{"tx": "0200000001f85ef04c4139d614d10d1a30e75a9f6421df67317126da87b2f877c2ab20246301000000002a67d6e90189d4f84f050000001976a914a875a4732dcf342e2587f26f2b7b2ea4a2fd587488ac30050000", "prevouts": ["1acc45b01400000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid", "success": {"scriptSig": "", "witness": ["576dd7bfb72e5379a8317f3a54b9287d49891291fd96a2084e781943b3424287a63f413d1b4cccd89e1529deaba58b40aa10b57644af7a2ee55203e2c0244f02", "20cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3ac", "c0cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f312f383ce02997bd7885b2023ff24b4d79c49e77348af650460f5903df7baafc9"]}}, diff --git a/txscript/data/taproot-ref/61dfcc18f9bbed9da1c93970d11da1509777d17c b/txscript/data/taproot-ref/61dfcc18f9bbed9da1c93970d11da1509777d17c new file mode 100644 index 0000000000..84e267f312 --- /dev/null +++ b/txscript/data/taproot-ref/61dfcc18f9bbed9da1c93970d11da1509777d17c @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bae00000000e0364cf58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46100000000669af35004b73f53000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca91b3e44", "prevouts": ["43dc21000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "923d34000000000017a91482be44661ef9d172a86ea47619409ff206130f7487"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2256202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["a660fdb7c4037739f334e7e659b27905e93eaddab34558b64574115300f23f90816ae8cb635589087ba290c7a4fe45f90d9e077b34d78f553880d7ba813979ca", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/622454dc9deabc8438f95f3e6280211c37369c04 b/txscript/data/taproot-ref/622454dc9deabc8438f95f3e6280211c37369c04 new file mode 100644 index 0000000000..11e592195f --- /dev/null +++ b/txscript/data/taproot-ref/622454dc9deabc8438f95f3e6280211c37369c04 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270170200000079ce70c5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf31000000004c1ea1b001a9b353000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748760020000", "prevouts": ["7ff80e0000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "541766000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "347d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823ac03c85a7bde4aa83325c4e9fa3803d6178be55885bf5b72d341e036ded0599070c3fd2cc03cfe72ec91581f9e22200fa4c4f6deb8dafcd335310e90efb11e5"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e273fc53fb3c003aa1081c29bba6e2ce61bbe16b764fbbf36a77a34a2c2a6596a750add471e9b5b51db6817cb10861abf00379c9e2c8d017af134b88039c39e3ca882fe3c585d1ac8aa5218112791e3065e91b4e1e0362790dbd367cd44cec36e97124583e57aeab90707503ff0d8dae530166a9193c4517699e1743b45d7c12"]}}, diff --git a/txscript/data/taproot-ref/626dec99c8f47a95e864b2a31b4ca6b916ee594c b/txscript/data/taproot-ref/626dec99c8f47a95e864b2a31b4ca6b916ee594c new file mode 100644 index 0000000000..5f4393d3a5 --- /dev/null +++ b/txscript/data/taproot-ref/626dec99c8f47a95e864b2a31b4ca6b916ee594c @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127014010000007885ab88bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3501000000d8098c37dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0800000000ce51b63e0198b6c300000000001600149d38710eb90e420b159c7a9263994c88e6810bc7bf71183c", "prevouts": ["2537120000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e", "5971770000000000215d1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "58b05a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["b060881f6fee60f523a0890c4673283817e38433cc5cd4db7c376bb5c48f932c30e3141d824141d7176dcab8d3aaea2d82867678a23d6d379d141b4f9d5f637f", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/629399f535a4b780a7126fd274938c9e1bdd9b94 b/txscript/data/taproot-ref/629399f535a4b780a7126fd274938c9e1bdd9b94 new file mode 100644 index 0000000000..28e0524f1d --- /dev/null +++ b/txscript/data/taproot-ref/629399f535a4b780a7126fd274938c9e1bdd9b94 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd100000000ec47e22bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfae01000000926ff007049a1bec000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac12020000", "prevouts": ["942b7c0000000000225120cebe24bd65f3df56aab440a71cbc9879a1b3f80f985a5dd97b0c93b61f81cd49", "6cee72000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6afd", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ecf11a840f350f547c61b448cdd6e366448a3c04413fe40af096eb0d980da89820e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1e0a7be32fdcca7a506e9ce249f658cc089bc7a3d23614d55e872a83e7956fea4416efa3a61de7db58e4e5b27e55eab88df01883130071a88e8c07ccbf4e37c61"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173acf0ef20a11005175256561cf2f67252fad6f828fd45e261da47aa072728c1e1d416efa3a61de7db58e4e5b27e55eab88df01883130071a88e8c07ccbf4e37c61"]}}, diff --git a/txscript/data/taproot-ref/629683fa749137e2dfd6e82633d304ea6c124ce3 b/txscript/data/taproot-ref/629683fa749137e2dfd6e82633d304ea6c124ce3 new file mode 100644 index 0000000000..fe76f11a19 --- /dev/null +++ b/txscript/data/taproot-ref/629683fa749137e2dfd6e82633d304ea6c124ce3 @@ -0,0 +1 @@ +{"tx": "9f516898028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4370000000009665a87bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe60000000014113c8e04b9d8c0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac96dffc49", "prevouts": ["6081400000000000225120b10c5cbe32c5e90da6e76e6bf182a80e9130a66e1280db2d9eaabffb93bce832", "aeb98200000000002251205b7dc500a06d9d49351272d9ef7a52148a11476ab62e1647e512b05f260e1644"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da7a3882115c20da13b0db94a14cd63dfa5fecd118ec27d0fe3f55ed094799d9"]}, "failure": {"scriptSig": "", "witness": ["6a5e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/62c572a03d69a6b40d25947abae19bf6ce5eb385 b/txscript/data/taproot-ref/62c572a03d69a6b40d25947abae19bf6ce5eb385 new file mode 100644 index 0000000000..5b4fb69fa1 --- /dev/null +++ b/txscript/data/taproot-ref/62c572a03d69a6b40d25947abae19bf6ce5eb385 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c701000000252fad978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42f00000000e9e83d9b03a9ff6800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787f6dec441", "prevouts": ["e4a632000000000022512035c5e2b60676b638367c49c5274cc65e6feb881fb1407d2a5f35cf666d25b965", "0b5b390000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063df68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d5f68448c89c580d464efc0ff5819ac3386b6086c96d1a6f5384fcf87289b415a18b5f2fef84521b683d8aac742b48aa2197bd0282730b1a4f3a8fad5441e2c71c315aec02adde316e700f87e7c47f474d1ec7cdd06b196ee567d81a15967a13360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368461da0bf0f5688f9852115eae774a4cdbbb182b967d387ebd70cf0c7ed10d95473717a4c1e901899f4f84b73650625e3fd5128aa3394961893ec6e831ca5ba551d880cc047c10a424f65fe9dd9096492f3efd8e08517d04362957faed36c3f852ff338358c59a252efd0a17af70f1cdfe194eb24c5d50483b26343bf89011bf"]}}, diff --git a/txscript/data/taproot-ref/62d04745f9fcb76848b12153a162a268f14abeca b/txscript/data/taproot-ref/62d04745f9fcb76848b12153a162a268f14abeca new file mode 100644 index 0000000000..66b15aabce --- /dev/null +++ b/txscript/data/taproot-ref/62d04745f9fcb76848b12153a162a268f14abeca @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1501000000e3ee7de3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c32010000003f2fec4a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b8010000006499adc6032e11bf00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc77d690e25", "prevouts": ["38975c0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f", "cb9154000000000022512096d49a663447a0304343e0ca844d9bda5a7da8dbda233b650dfa03e219f7bd31", "eee1100000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bfe22090f7ab89ba3505a6a05ede881092e9f2c3b80d443c66a4d230bc2d602b8024f0f821479c34a3d08a46a80a2c380535e71b033b1c786baa16eef71e1977ae2f7927e5cc4d53e0e18212acda8d85e01e1da74473232947322e5e96654c18"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fabf8cf3051908396d96a16e21f9fb14717dee7b5dfac112f56d0746b9362fe4375cb645b004d221127868eb317b35b9739fc590ddfdd834a11f89e113e113367cae2f7927e5cc4d53e0e18212acda8d85e01e1da74473232947322e5e96654c18"]}}, diff --git a/txscript/data/taproot-ref/62f4696a4d80fd4c0dc13ef75f8bacef6743b8d7 b/txscript/data/taproot-ref/62f4696a4d80fd4c0dc13ef75f8bacef6743b8d7 new file mode 100644 index 0000000000..a6c9eaaedf --- /dev/null +++ b/txscript/data/taproot-ref/62f4696a4d80fd4c0dc13ef75f8bacef6743b8d7 @@ -0,0 +1 @@ +{"tx": "e61fc582038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45601000000c4e2b5b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2001000000c5b7f7db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41a020000002528aeb801fdae1700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7c4010000", "prevouts": ["f0893300000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970", "8b96760000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f", "5e9f320000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "c37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c08ab59be3ec08c5813df127e6171cab5e5b5b7ca033be6df840b5a39ed859095a2fb75442cf9d6444c8679a19413f9a060e476aaf84ff603b3b22173ec950d19a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e8d213d90ee48874bbf2b18160b4fefa78452fd9fac91ad5f640de90a3ceda28c"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936207c9c4f97e2dba2ec4fa9382e1eb978f292c30dbe8b8adc6375e7e52fe13859672094c3f08b9327f7ee48bb8899708766c48e78ef53e5ef370aaf6f5fa99ca1ce42d201fd753cc19d7433434234602e4af838ce265353441a761579b9ecb89c78d53ca9a9f93e78db88a883cc9c42dbf55ad09041fa37b21a93adcd191d7180"]}}, diff --git a/txscript/data/taproot-ref/62f8cb127c31b1882150c0c8effbd39c09119e5f b/txscript/data/taproot-ref/62f8cb127c31b1882150c0c8effbd39c09119e5f new file mode 100644 index 0000000000..d3a313cd1b --- /dev/null +++ b/txscript/data/taproot-ref/62f8cb127c31b1882150c0c8effbd39c09119e5f @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdd01000000e63665ac02286c4800000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc43000000", "prevouts": ["bfd14a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_40", "final": true, "success": {"scriptSig": "", "witness": ["14e16d7dcc2c719c7e163b2e5d81cd4aa9781946ba7ddf2b596d9e93222b1177898e01d1ab846bd1d0ea1ba179cf1ff545f5df4442282765f7d7ac4ec7cb65b502", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["dc9a39165d8459b1342428c6aa2e0ef8334459b37b5e05de37f9f6aae4988063e26e3bbc10fefb72cbc5b57db9c825f3aef3e148754155f667f9a6e541dc2bdf40", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/630f756a29287a797ffb5586566bc1d25758573d b/txscript/data/taproot-ref/630f756a29287a797ffb5586566bc1d25758573d new file mode 100644 index 0000000000..2033b06ee9 --- /dev/null +++ b/txscript/data/taproot-ref/630f756a29287a797ffb5586566bc1d25758573d @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1b020000001b786e618bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ea01000000fb510c0860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700f020000007a80c8d8019ead11000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d2de3b4b", "prevouts": ["ab2348000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "bb733b0000000000225120c52c9d5db69f3d85ee35b65e5555252fc0470ab9a3dcbb72267f75438b29b283", "885a110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369f66c13277c1dff86476ccc2b2410b8070d8457ffe942302ee55e774342eccc7"]}, "failure": {"scriptSig": "", "witness": ["6a9c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/63167cb8ba3874badf57f0e855e7f02478cfd49f b/txscript/data/taproot-ref/63167cb8ba3874badf57f0e855e7f02478cfd49f new file mode 100644 index 0000000000..b62f8c1ce1 --- /dev/null +++ b/txscript/data/taproot-ref/63167cb8ba3874badf57f0e855e7f02478cfd49f @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0a00000000de79a0db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48d000000005b9d85b103a002680000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787cfaf4061", "prevouts": ["7c9e2700000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "aaf3410000000000225120efa68a115895f942057851c042deb7d61335a3ab48b9e56d15cb953fb46ad7bc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "0f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663c49ee3ba831a9a6786c5c6320bc4ec5a81d02658bcf51f9bb482c2f495569c68491001e36edf91058819766439c3f31bd198abbe3d2204f458ac7743e1d61ccf16a5e3db9e2b81c974405e52c4661efcc91a529144e47e78be5814d4a09901"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d14083827bc4b64cda0a8609af1f33bf70388b2df5d24ede096953ad9366a4004be90cc292444734c987c78e965b1739d018b44a402c956c06fcfea30a9c442ccf16a5e3db9e2b81c974405e52c4661efcc91a529144e47e78be5814d4a09901"]}}, diff --git a/txscript/data/taproot-ref/6316bbbc6a41808b00262eab5f5262fcfa97066b b/txscript/data/taproot-ref/6316bbbc6a41808b00262eab5f5262fcfa97066b new file mode 100644 index 0000000000..f21fb881a1 --- /dev/null +++ b/txscript/data/taproot-ref/6316bbbc6a41808b00262eab5f5262fcfa97066b @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0e02000000b7c1fbd004b19655000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787b7799960", "prevouts": ["2db4570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_89", "final": true, "success": {"scriptSig": "", "witness": ["fa33aed19e7348584fb2e7883bdbcedd805b763539f1da675e6647cc47c7cf8245200518f107ca97e6847db03dffcd717091a918e649240547789614cda9158c81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["02fc920bb623b62a692aadd32a1663b38b7e38efd98892807e5637239f974e1273937b6facc07344e9ada57e9e82daf6c971dc41b047e3e9ec58afe26396fd1289", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/63254af008fbdb6301cc07058a867abb97610c66 b/txscript/data/taproot-ref/63254af008fbdb6301cc07058a867abb97610c66 new file mode 100644 index 0000000000..60c37fd7dc --- /dev/null +++ b/txscript/data/taproot-ref/63254af008fbdb6301cc07058a867abb97610c66 @@ -0,0 +1 @@ +{"tx": "17d518f302dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5800000000e32f0abb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48400000000644a2ed2022f4f5700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc20000000", "prevouts": ["c7ec230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b9703500000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ff7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e9987eb7009ccae8c65258c62e5eac53ed5016922d24407b897adc5526f33b91916c082ffd0388de178727289f9edc245ed8244bc4e4186d1c7a66ea621fec0ad"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936481f5e4c3fecd787fe4d3635c6d8b344fb02d1f9c3cab01b9a7177bb21a6fd3df59f882dcce043ab5273f79d0d152c35fae0f251a6812c7f2d3daa07c20029a516c082ffd0388de178727289f9edc245ed8244bc4e4186d1c7a66ea621fec0ad"]}}, diff --git a/txscript/data/taproot-ref/633faf2de8dd00d4d8b3bbdda4d9f2125613a89d b/txscript/data/taproot-ref/633faf2de8dd00d4d8b3bbdda4d9f2125613a89d new file mode 100644 index 0000000000..c56385f932 --- /dev/null +++ b/txscript/data/taproot-ref/633faf2de8dd00d4d8b3bbdda4d9f2125613a89d @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41400000000eed2c5da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fa01000000017337ee03ceba4600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc71b7ed33b", "prevouts": ["8c5c36000000000017a91454957ff2b5c5fa7ace3c6fb485b914ecf6ce0c8c87", "2b5b12000000000017a91441ce0eb0e6e5800ced23a872818e5aaa63be0d5b87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1658142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["e73fcdf715aa776aab30a3a370117f5b9829a61e46b42aef46f9dbe2cfd582db4708e22a37de45f7b5fbba25fad2da084132d00e1888740299f644cae68b1224", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/63428d34338ada0748fdd95dc5f6db204de7543a b/txscript/data/taproot-ref/63428d34338ada0748fdd95dc5f6db204de7543a new file mode 100644 index 0000000000..3cd8ad8743 --- /dev/null +++ b/txscript/data/taproot-ref/63428d34338ada0748fdd95dc5f6db204de7543a @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46b000000000540a8d7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd30000000018732d9204c7b2b20000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5c000000", "prevouts": ["9d083200000000002251202ae35af575feea0dc18681bbd0ec0494b44b5926493fa5426b4858bf97ae878d", "4972830000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a19e3b1d939cb6a23d473766b748a130ade8f2a056e565bff706cd0491e745bb"]}, "failure": {"scriptSig": "", "witness": ["6a42616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/634458fa7be2820b5e56c8ae2c193b953af0ad40 b/txscript/data/taproot-ref/634458fa7be2820b5e56c8ae2c193b953af0ad40 new file mode 100644 index 0000000000..3af8a0b6cf --- /dev/null +++ b/txscript/data/taproot-ref/634458fa7be2820b5e56c8ae2c193b953af0ad40 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfc01000000e1fb988b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4080000000022028f9adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bea01000000a94b1fb4012f9338000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748777000000", "prevouts": ["30532100000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "b5243b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9a341f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_da", "final": true, "success": {"scriptSig": "", "witness": ["cc61fb581a65202f50b21e47d9e6512cb734d9ba5f06c87419797443abcadc2635a00a7a7e41d9c7c8b5413245d784be457434462df76d27e0824ee448e883e081", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["adf0f76363b1edc4e497a309491f6dc98e6d1ad1ad455fe8c72a0dd71a1630a596543e0f40922612ec9f654784002c61ac9cf7bb45da655c711ca10d28adbcabda", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6360d46053a73eb3d4ae1cc875f022d5d461f571 b/txscript/data/taproot-ref/6360d46053a73eb3d4ae1cc875f022d5d461f571 new file mode 100644 index 0000000000..95043a36cf --- /dev/null +++ b/txscript/data/taproot-ref/6360d46053a73eb3d4ae1cc875f022d5d461f571 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b45010000005275e07903f06b1f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1a010000", "prevouts": ["975b21000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "47304402200e4c2a11ca32ad615fb9e488fb9cdf0efc97c07b809095d014306faa39c1706a02206c88c9f9bf9508ceb9b70db058cb52c3121c091c3a0324bfd0f8b32cfe6534c183434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "483045022100b7c2eeabd221d1d26c576a23e5c724ea87662555f661eca76a32b7d7ed8d3f1702205b778f07aa13315ab18107518b3759dce5d8f60dd1c8ef82162cf56a30278e3c83434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/636131ac174bfe63b118e739bb030a2fae2ae0ed b/txscript/data/taproot-ref/636131ac174bfe63b118e739bb030a2fae2ae0ed new file mode 100644 index 0000000000..123ca7f2b3 --- /dev/null +++ b/txscript/data/taproot-ref/636131ac174bfe63b118e739bb030a2fae2ae0ed @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c470000000032889c918bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42c01000000160157c404c8ce8b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac88000000", "prevouts": ["2b65500000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "d0313d00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f7bc8d0bdc62b39e0e9c19d19fe3396114a1c841c50c9d6fec174cce198aba7d6cf9133aa763ea773cdeeac140de5c57dceee670de232cdd7f30405a52d22152c579d688b4f95dbfb27db809d6672e68433faf56213dd258fc375d7f1025581eff39b384b66ef78da8b5e0fd063098e306be159c39b9bdddd361b672f78fcd4a613242676014fd3768df8f726d2404332d810bb7f4f63fd447db170e8ff867a34a9cccaa1fc93353cba8eb3475cfbda4e27185757a4e54e43226365dc0f001362302833007e228c040015b1174b8b4237b9305b896720229169522f72b3cc0bd80743828e7844f5937e757b79fec363ab9c816b81974ee2f4619264b2bc91182eda6dc4ae2623b8a1d441c67b140e9a05e99107003011fdd6f6634dd3bcdc7ea430fc98bc2df94555dc7a8ac328bf55ac32217dbc35cdda6eb371067d22417f2a2459f960779e3789eb2e1dc7d2336fc20fb0a5ccf274db57235300fa0f463274794e151a11054804ac0128d76605b3421c36860aa113d488503f68a3c4c3397bf8df2cfa3eab9145f1b94516af2808c8161eede6b1d695e470f3ab43d788ba58a9313fbeb34f758e619c5f570da564e0595a22bc3d8dfb57928bf8c3ac435718da6618e0ffdcd5621dc77c98abf0213aef4eb2e99c4a8e320c818bea2191f40abd0834e1892777424382df9310f9dd1f5cf781b44c2c6669952ff8343924ea9bf6824e455576c7f0075cd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb43f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820aae41afa256ed506dae95e698e8dcc0fa26e2618e50e74a83d05bcf51ab890d620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}, "failure": {"scriptSig": "", "witness": ["4d090237aa9b18b4a7c908c5ae34894588ab96e245b74fec1610a49973392d6eeb6c62c6b55ff2af982a6c76cc379da7e493b10624673a2a6066fb0be803b8621e0250d0ffbba6300bc37b3e88c8df9651a41a3bd39c21e18a47527df7c1f1811b3a853dd5c0da23ab87915a78b77947ddc576e6dd88cd23d852fd9f0be1071eadab098fc7c34bdb3fb71c0c78b3878a11d7879e701374ec5e5e7fa82bcb7eb3184aee94d64a30695e99b9cbe54e4e1f85adf00a77b25b8ee341fddb7f500a1a79b56eaa4c9b1e40db48d11e160aad7e38abbcba2cf3bc8370e2b2f02ff957d174c51f74d6f8890e956a1bff47324cd1d2e8a645ca5b93aba2422eff9aece190871e5f8d8ec150a9026df3deae44b69a8e232e45f4c492062e38b6cb50cb740073d00ad61f02db0723b7c8fe4bd0d684fbe14e52694a717b2e08cc661d6d7bc9a94c218fa998141a6b67f89d9439c6aaac1c09ba4650fce90b887224479f6eb3a7214bdc445b10402263516da19e5539bf6f1092bcf30b97f28afa77531d922822476e186e957fcda37c306549ec22653a1f0f6f9db877fd8ff8baf769a5aafc10771ed5edb13c5b00b09be23c47c4aa55fa4149f79b3ab283470802dec04e1aa292c7534484fe0fa5a193ee5d338ad4aae61c4e68b94a10284c1a5793d533e8b453cc7dc36f2fd157dc760505b14c29f24a53af123b970da92597069e0f2583333aa62a9f2afa3a4b2a42e87561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004520e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e11863a41bc3dc2a7aa524e62e66740ce82713c2a995d68e9803c1affe373c89601029910a453e765cd82c29c3b576a90579a453f3a941b6b6175fa922e9a13196"]}}, diff --git a/txscript/data/taproot-ref/6391af63a3bab91b1f963e133bbb54d1ec7814cb b/txscript/data/taproot-ref/6391af63a3bab91b1f963e133bbb54d1ec7814cb new file mode 100644 index 0000000000..5d9a1e3ab4 --- /dev/null +++ b/txscript/data/taproot-ref/6391af63a3bab91b1f963e133bbb54d1ec7814cb @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaf01000000ef6fe8da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703c00000000151d319e02c354820000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acb4e81421", "prevouts": ["e0b1750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bc630f000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_cc", "final": true, "success": {"scriptSig": "", "witness": ["06c67c2af3e5d7e192675c72c1500639a3ec0e5b44b307c185cf19ae7fd8dee755a6dd69b80e43b1c944369de37d14f6aee25ee59d3ae30109ac4123e23dd30302"]}, "failure": {"scriptSig": "", "witness": ["25f6e6831fac5efe19a55328d4265e5ab4f29d1e290240341433446d9cd7d119c5e7f17f665a5986a8924a99932b9f953f5915847b7e65e94c5883af0210382bcc"]}}, diff --git a/txscript/data/taproot-ref/639afaf27cd09001a498697b15842c3394f9535d b/txscript/data/taproot-ref/639afaf27cd09001a498697b15842c3394f9535d new file mode 100644 index 0000000000..192b7934ed --- /dev/null +++ b/txscript/data/taproot-ref/639afaf27cd09001a498697b15842c3394f9535d @@ -0,0 +1 @@ +{"tx": "2b7a7ca6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4700100000089a957d260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707900000000d42a2be001ef6b390000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79653020000", "prevouts": ["076c330000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "f6b10f00000000002251204c956d2ed9840e95134d355554a887a299d70036ebf1550bbadc52fbd9ddc36f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/invalid_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["532e6937d0b26d3c96951d6910ffa78e5bc2c3d0a11d3635f6fd0066e011d574610b77cb12c0dc44a621e269efcc4407c852f8e03b55638be401f087e800511e", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/63b0cec5acbe499ece5bd821c8af36dd0de95819 b/txscript/data/taproot-ref/63b0cec5acbe499ece5bd821c8af36dd0de95819 new file mode 100644 index 0000000000..e7ee124a51 --- /dev/null +++ b/txscript/data/taproot-ref/63b0cec5acbe499ece5bd821c8af36dd0de95819 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4200000000909948478bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47a00000000b7bad9750152878e000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47877d532648", "prevouts": ["407b6800000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "67d73c00000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063dc68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e122ac0f20434af06d5694002e66a328e774b08c17356336e0bf0019524f47df1a7470af5f469e43c444817efa23ad8740a4ec3822d36804e7973b39d521bdef59faeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb43f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08238e917535475cf2110d0b0ae2ac5bf0f6bfd0fb66e9319f96694509bbaa8cb206d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}}, diff --git a/txscript/data/taproot-ref/63b754b26183ec079fd02af865aea1d5c49d93cb b/txscript/data/taproot-ref/63b754b26183ec079fd02af865aea1d5c49d93cb new file mode 100644 index 0000000000..b327557833 --- /dev/null +++ b/txscript/data/taproot-ref/63b754b26183ec079fd02af865aea1d5c49d93cb @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49000000000575c18d0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6e000000009b12d9b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6201000000323bd29c036d5608010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6ca6eb94e", "prevouts": ["b77b360000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17", "a9315e00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "7c80750000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "b17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cd3d9bae846d1e9f19df02762e6d45be556a5a66cadc4939a21519cb29aca313804e0ef706f1ca5c8b2fa38155abc6bb5e2265734815bc03afdad0836bb7f05989f510e73a03c44610e5cde856f75a0d7582565d561698089d126c5e7f66809"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93609b57e90423a4849aac73da1b4bdfdd2798990ba600420d32cf466c1f0d36594d9568d9f877f6ca0cee9df3d4970d26d0e286b65747316dde3c995de6e71d9f55bc912f5bf4aa2c9ddbc9747d59c78f40d0a0aa0a8a4f22dc70e3f9cdb9b6ae3"]}}, diff --git a/txscript/data/taproot-ref/63c6cb5ef992299a9604582c39c7f956c65860b3 b/txscript/data/taproot-ref/63c6cb5ef992299a9604582c39c7f956c65860b3 new file mode 100644 index 0000000000..1ee2a6a8fb --- /dev/null +++ b/txscript/data/taproot-ref/63c6cb5ef992299a9604582c39c7f956c65860b3 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702b01000000563eb1acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfe0100000075a2baca015d162200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca7030000", "prevouts": ["503d1300000000001660142540f27e90740933c99d4f17ab2dfc6c82951cfb", "112b4d00000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["cd6080e32a37eed9423b6209c11b9115af7004c3f774d587368b784e2d008cb826acbfaa43d1b4f66476a1fa51cb847dfc530f1dbca5a3d261af4280ee787fcb", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/63c8bbd564a4a1648edf9f05d80a6b089c40883c b/txscript/data/taproot-ref/63c8bbd564a4a1648edf9f05d80a6b089c40883c new file mode 100644 index 0000000000..3d54c3c6ed --- /dev/null +++ b/txscript/data/taproot-ref/63c8bbd564a4a1648edf9f05d80a6b089c40883c @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fb010000009399fa4e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c300000000bad4681203ed4f4b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3cb80434", "prevouts": ["c70b100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "38fe3d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ac", "final": true, "success": {"scriptSig": "", "witness": ["0eef8040e6fb98e9abf015034e584ef1376f63fe98fd888c6c7365fe0355f1aa5f1f9a0a35e483773b76f251cc0f7d187c9f080de5f67026a8d4b6eb7ea802b103"]}, "failure": {"scriptSig": "", "witness": ["c4a8ca265e1edaf1797ae5c8dec8e3912ab289ecbcc62a92fd850f7404e3d5fe154e317f22a7dd63c77dfb8bb7e734bd39ca8584e6f54dddcff6034765110560ac"]}}, diff --git a/txscript/data/taproot-ref/63cc94dee9c6256ddfe004eb9fcabb932627fcce b/txscript/data/taproot-ref/63cc94dee9c6256ddfe004eb9fcabb932627fcce new file mode 100644 index 0000000000..24330e791c --- /dev/null +++ b/txscript/data/taproot-ref/63cc94dee9c6256ddfe004eb9fcabb932627fcce @@ -0,0 +1 @@ +{"tx": "044da27e03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdc000000001a07b0b4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9501000000bff781dddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bee00000000ac3a7bb4026db9df0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67e030000", "prevouts": ["ca4f73000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "2fbf4b00000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "e43e22000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3e1f31af440bd9528b56a4b582a327979fd28cb44b9e62075e623987b4c0f8e3992fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900452c1673aa1d348e5f2f8444d57c2e384a9e542f3652a57ab10bce8213eb35faa5e1f31af440bd9528b56a4b582a327979fd28cb44b9e62075e623987b4c0f8e3992fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}}, diff --git a/txscript/data/taproot-ref/63e781018cd701d6d445dc7c4ea28f9a53de825f b/txscript/data/taproot-ref/63e781018cd701d6d445dc7c4ea28f9a53de825f new file mode 100644 index 0000000000..6c4791f121 --- /dev/null +++ b/txscript/data/taproot-ref/63e781018cd701d6d445dc7c4ea28f9a53de825f @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4050100000060d5b89860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c5000000004169b1a9047cec4d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acecddd42f", "prevouts": ["b7923d0000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "523413000000000022512097f3f32bbea7bd397ebd6824dc6e34758f0b169a6c237662287beed33756fea6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["bd4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f8a7004a68fdc05e100340c712f74a3d62667ca0b5d0eafc5e716949571fe18725432b67bf7a212872373c5ea5ac6512ad650fe3d5c26e1d584bcbdba0083b9a9e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}, "failure": {"scriptSig": "", "witness": ["4c52bd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363dcaea11c13b9b36db1e711f26b17d850c4278eabda72c0bd6c73a20768b7a5e98751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d50e634e19498d3396bfa452af2ece499faa564dc4b58fae514f4ede8dd179fb909e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}}, diff --git a/txscript/data/taproot-ref/642e1fbd4f64d1ba035193a0100aefc8d436121a b/txscript/data/taproot-ref/642e1fbd4f64d1ba035193a0100aefc8d436121a new file mode 100644 index 0000000000..9e886dbf6a --- /dev/null +++ b/txscript/data/taproot-ref/642e1fbd4f64d1ba035193a0100aefc8d436121a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9501000000ea4b4ae9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c140000000035454f190291a37500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac963fce3c", "prevouts": ["e1f320000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec", "dab856000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "bd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936061ae028cfb8cb00b52e1357b0e7a5a4109afe42dd36cfc91bfdcaee18ccf3547353a90cd56d8edfa9d59a5341a6c829ef2ec5b70cfecd5055b0e6c18dd5375841cfbdca9cced9a9297ecbc29dffc929789a1848311039b5a24b338cddf0aa70"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea156570f3d071b1e4b25e8baffac9afb6306bbc5a1ad7382e42273c38ec7578357b0da8b61d649cedb8c014d8a901c8639aee676049f740bf8079132edd04aed797dd6acf95c24b81e793c9c81b0ab80d381fe8deb935e4a90684c96acd4587"]}}, diff --git a/txscript/data/taproot-ref/642f40f85c3e92c672ec038a2e238351c6c24178 b/txscript/data/taproot-ref/642f40f85c3e92c672ec038a2e238351c6c24178 new file mode 100644 index 0000000000..4d9e41f937 --- /dev/null +++ b/txscript/data/taproot-ref/642f40f85c3e92c672ec038a2e238351c6c24178 @@ -0,0 +1 @@ +{"tx": "cc2a29fc03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8901000000c830c9abbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff100000000746406a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9601000000bd8ec8fe0286b12d0100000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cc349424", "prevouts": ["6a2b66000000000017a91408247b8d3db4e641d0be1ff23f14280256870a5187", "2f55760000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0074530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_6d", "final": true, "success": {"scriptSig": "", "witness": ["5925493590a1b0ce31553c34efbce5ab7e562ee82229ecc93b7176d52e25172f384b4b102d066dd69f65ec2b85103529c9ebb44f85e134f28475a26d682940c981", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["29706265b3834a43fed40dcc0cd7e5e09c120a09a70af16e08e62e9a0b8f2ee4084015afc0ad3cce7b499204bdb19e59be7de3f63af528d8e5f3de09dbcfe82c6d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/643386ed0f556a2227416f5b32e310b70a2cf743 b/txscript/data/taproot-ref/643386ed0f556a2227416f5b32e310b70a2cf743 new file mode 100644 index 0000000000..a5b3aca4be --- /dev/null +++ b/txscript/data/taproot-ref/643386ed0f556a2227416f5b32e310b70a2cf743 @@ -0,0 +1 @@ +{"tx": "4c61934d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b570000000092d58fcd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45100000000baffc09e01cd1c3700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acfc59935d", "prevouts": ["cfa9260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1b133900000000002251200120da136b46f6e1c164adef9ba0d2bbe634d7767c7946122aa4909c89df2221"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369892bcceafa0b9465950a6b9b3f74549d7ae8a8c1917a73c91a30481b31306c0"]}, "failure": {"scriptSig": "", "witness": ["6a7a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/643f751fa11ea6d366ace6319feda720f2e8accd b/txscript/data/taproot-ref/643f751fa11ea6d366ace6319feda720f2e8accd new file mode 100644 index 0000000000..4839589471 --- /dev/null +++ b/txscript/data/taproot-ref/643f751fa11ea6d366ace6319feda720f2e8accd @@ -0,0 +1 @@ +{"tx": "35adfe970360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d5010000006640029abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf78000000003657cfe8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdf000000008532f2b1014faa6c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4871d222b1e", "prevouts": ["96730e00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "d08c660000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "f2fb7b00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93656b2e44901702d460c7de97890111dc615bb44671c92f59d31a1c2531c59c007affae472ebffc4152ddce3f20794b01737e96becc2bb4a1a296a47c8ec0d29af569af0f9e86656db21fe5e74d4bdcdfc2cda5437bccaf9e3d568ba1282fc608d76e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1f12e5bdadb74bb113beeaaa5995d4ebaa92337455ee51746db1fb6fe7db125e52d50ee9aa3de1fe988255b0d8b9f34dc2cecc4a96432b9f704e90359a06b468476e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}}, diff --git a/txscript/data/taproot-ref/64537ec43a7b2b59f2b936c7247b94e44e1bb551 b/txscript/data/taproot-ref/64537ec43a7b2b59f2b936c7247b94e44e1bb551 new file mode 100644 index 0000000000..c17f4e1810 --- /dev/null +++ b/txscript/data/taproot-ref/64537ec43a7b2b59f2b936c7247b94e44e1bb551 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45f00000000788b972abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf02020000008b773e1560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702b00000000fdffac0001b6184e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8721010000", "prevouts": ["39113f0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "8f097000000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e", "d0ef0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641cc9c8285f79db4181623fd29c0ee1439eb4e8d4cf6c70106fa0146ca9f07d3ad1faed220136b938a4936a71b98f5f9e86de449242d6a82efdf7a3adba2ae62745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ab8d96c33f2aebdb2c8ac1cafafbc25c65e9bfa155bf2db52d1cee9a44b59f1419220fa8a7a918b3857a082d32be9fa2ecc61d36b58eead0239ee9c5d9d4afcd5a470b8497850c3a230fee464eb343180400453804118582df887251250b2f1"]}}, diff --git a/txscript/data/taproot-ref/648fef1a9a568a6e98c2cb836193a18ec11b60ce b/txscript/data/taproot-ref/648fef1a9a568a6e98c2cb836193a18ec11b60ce new file mode 100644 index 0000000000..30766cecc0 --- /dev/null +++ b/txscript/data/taproot-ref/648fef1a9a568a6e98c2cb836193a18ec11b60ce @@ -0,0 +1 @@ +{"tx": "0b6fe83703bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffe000000007cacfbdb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c468000000009c09df848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f700000000774f468401c92a7500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acbd79e031", "prevouts": ["dcc37900000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "129d37000000000017a91439ec132e1466f40f0086baa7ac253013e83c7dc387", "bc53380000000000225120f3eef30b2db388e6b8a313ffb142e2e6ffc970ce6b6a81ae6dc1d81725c678ea"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "215e1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["e9df93b6b02ca0341b0345a2523cec9961d8ca0d900cfd5450582da4b60610363d1cc329fbc34c7929fa8007b99f10aade2fbebaa3985bca24226f56725bba88"]}}, diff --git a/txscript/data/taproot-ref/64b6416da57fa74cb892f8728aac8bc6064ac5dc b/txscript/data/taproot-ref/64b6416da57fa74cb892f8728aac8bc6064ac5dc new file mode 100644 index 0000000000..279ebb88e5 --- /dev/null +++ b/txscript/data/taproot-ref/64b6416da57fa74cb892f8728aac8bc6064ac5dc @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1101000000a081b3de60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127053000000000c7b5fdbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc5000000006f40e899046516ab000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c6030000", "prevouts": ["bf8d4a000000000022512074a4c3567b4c4ece2d1ea256a6bf2f85bf4dc051497bd8ce7ed8816e2d4c108a", "befc0f0000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "19b35200000000001653142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dd5c8e7f006a3ea431b7b4119ba3be3e8bd1aa47a62245ee7cd009a4a7fa39b4"]}, "failure": {"scriptSig": "", "witness": ["6aaf616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/64c1ab90001da13422d892838a22208f71109eb2 b/txscript/data/taproot-ref/64c1ab90001da13422d892838a22208f71109eb2 new file mode 100644 index 0000000000..ae7bba12d7 --- /dev/null +++ b/txscript/data/taproot-ref/64c1ab90001da13422d892838a22208f71109eb2 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4680100000014cd4d66dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5b01000000d231e7ff03efb58d0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc27030000", "prevouts": ["9db93700000000001654142540f27e90740933c99d4f17ab2dfc6c82951cfb", "7b045800000000002358212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["e306379641defa88af163715a7c95126d1913945bd4b8d1a728c7e37d4b3879888f06f2be13e87d68eeae13ce45da9a2c8cf25215a8c593795cbbd4bd7a3aedd"]}}, diff --git a/txscript/data/taproot-ref/64c86a5fba96a19af3d7f98cb11533d79ff4433f b/txscript/data/taproot-ref/64c86a5fba96a19af3d7f98cb11533d79ff4433f new file mode 100644 index 0000000000..762e10fa42 --- /dev/null +++ b/txscript/data/taproot-ref/64c86a5fba96a19af3d7f98cb11533d79ff4433f @@ -0,0 +1 @@ +{"tx": "c3d0c9e202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf390000000058e04188bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfba00000000df72ae8d014799bf00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf6020000", "prevouts": ["18f26900000000002251200f726ea607d510d2ad25fd6aa0b3aa5046595182e7375298ea583ba69075a433", "51817b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369c9b89f6cd1c0bc520f57d1b93bb5b773cda74c14172240a9ebd81fab92ee691"]}, "failure": {"scriptSig": "", "witness": ["6ab5616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/64c9c1019b362e31675420967685e3e5e1d92f06 b/txscript/data/taproot-ref/64c9c1019b362e31675420967685e3e5e1d92f06 new file mode 100644 index 0000000000..4204f71eaf --- /dev/null +++ b/txscript/data/taproot-ref/64c9c1019b362e31675420967685e3e5e1d92f06 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccf010000000c1a2eeadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce100000000a5df58b402ee86b5000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac3e5be55b", "prevouts": ["6a2c5a00000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "604f5e0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "087d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd691c2a9908d9e7287fb91837cd9c32b2a21ac331bb306f4648aa27bb40422e45371e41a07562523a12648be26bdba66be78ce7e249298c356e66cf29847872e0"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367afe96f638fbf89584e25dade4bd67dd7e08c3a6572904b143b56a75af676e5d55b45b3af2af0c7a238665fed9a70950b75abf30a3f75b50a7b1cc61308c32d3371e41a07562523a12648be26bdba66be78ce7e249298c356e66cf29847872e0"]}}, diff --git a/txscript/data/taproot-ref/64e713b456a3f23cd86eeb23d796639b7c85d2b6 b/txscript/data/taproot-ref/64e713b456a3f23cd86eeb23d796639b7c85d2b6 new file mode 100644 index 0000000000..b48f7fdf9e --- /dev/null +++ b/txscript/data/taproot-ref/64e713b456a3f23cd86eeb23d796639b7c85d2b6 @@ -0,0 +1 @@ +{"tx": "dd0484290260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127004020000003a1f3dc18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b2010000009ee9318602534e47000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c9000000", "prevouts": ["e68d100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f4e6380000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_9b", "final": true, "success": {"scriptSig": "", "witness": ["01b5c8ffe0fbe48bc5aca298e8db8dcc9ae87ba7f6984815658060ceb708fdc1c00550e225848d5053e613c4d9b2f0dd8328ce4568f7eef204ccaea60de2a66101", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["84337753e8761f22cf9b0f9af87f32d092bb5d8092d70fc83d5f9e833d4512fcd2264207937b6394e059327eb67f923d45b0cb194c3daf68579d656615b3aff89b", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/650b0fcd68979a929ceb682e9024fb7beb57c2b1 b/txscript/data/taproot-ref/650b0fcd68979a929ceb682e9024fb7beb57c2b1 new file mode 100644 index 0000000000..41208d2f74 --- /dev/null +++ b/txscript/data/taproot-ref/650b0fcd68979a929ceb682e9024fb7beb57c2b1 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb6010000005bd07d78dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4800000000f3fbe79504c03f770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cf000000", "prevouts": ["6300560000000000225120df3728be21c89bb919091ec65a63fe2d83dc46feb767b141518f7734e1cf94cb", "b400240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bc3a384262d56f91b8a88cf4efc3914e768fb5c0b907358dff504e87b4ee0842"]}, "failure": {"scriptSig": "", "witness": ["6a74616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/652f7178db85a30195aec38e5bed56f8d492b18c b/txscript/data/taproot-ref/652f7178db85a30195aec38e5bed56f8d492b18c new file mode 100644 index 0000000000..41dc25ac66 --- /dev/null +++ b/txscript/data/taproot-ref/652f7178db85a30195aec38e5bed56f8d492b18c @@ -0,0 +1 @@ +{"tx": "c9c8ae8802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1d00000000fad144c4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9c0100000062d84ea8013cd619000000000017a914719f78084af863e000acd618ba76df979722368987428c8e4e", "prevouts": ["70f55500000000002251202411d699451e61c2ae1e9b07727f82864d3d401db7c2ec25b77e3a65ecc346bb", "fe6e240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["1e61d4d855ac6c46c9a99357789b79a67c50ad0de37287346a5acebf771114a1c8cb61f569b8b43a09ba674e89746baf16e1641bf951ef5ec1e7f7bd5e8d9197", "727f14770010c2293269cf848fb9991b29f239d9c1f3ead46ea41aaabcb616b7be4fda6cf5e3a5dcb5f3218b23531158cc6113c61d383eaef8f87882ab91f065ddfdf3ec975aabeceab120e48ff5f8dd9b577221b0a1049448f1b8b1693b5640f5f859c963247f679f6d34f6d497a9807104871df6022d7a336f8272d601bce26894ae75be976b93c3b2812ec7071b7e4a3ce8928171501e40074666f47ef0e68d3f672d4086f5b8eb013076c595e6428e55dbf3ba5642f920abf9247c5932b69396a7b69eeefd26749fc8eb4235", "750029dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b3250ac916929dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32506eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0daeff790ac0750a5c97c555dd00ad0e25822157617ee0633a1c9b091c67347000000000000000000000000000000000000000000000000000000000000000054273997c6b5f26f691e4d5428bee747f4fb577690066e33fbb86cc3a2ec9b53342550c32fe8e6b835909b157b681845926ff168cbfd9ff5cfb54bd6c774fd9157c5d03f132c6d240068d51b30f30e3d7b2786a2118a8eec0900f5b646cc34a216bbd72ae4633ad4d3f914989b57cd89ca1399cd505a1fed4f763b0e00d4674c2353162f5cadf9b6f3c32b777520a5d562a965fe0a5f3e985bdf7f770a65a1983f523a753630238635a85401e644b6ffd443cc41b1b226185056bff8402c91513dcc58ee4dd7ea460fa36871f87f40a7dce08d15f9f39cadf4ce5d6057706e74a452cd80efddb984cb2088de76d83d12c012975f6f8909fb41fa3853970f3c67"]}, "failure": {"scriptSig": "", "witness": ["1e61d4d855ac6c46c9a99357789b79a67c50ad0de37287346a5acebf771114a1c8cb61f569b8b43a09ba674e89746baf16e1641bf951ef5ec1e7f7bd5e8d9197", "d0d93a35ab56efdcbb0a0e948031ef7643e0e563ea007031880d0109b960bd716dbe481be7067ae39e002abb4c1dd69ed25b0c0cfba0de2cab8de19782402fbeea47f63dc13713f9041abdb84c2c9952a35c9a548255dac8e524701ed1d10e5f045f9569142255c08b330f35bc671d289d3b8ec4628587812c2c5a6c36e67fd682e8dac3f882c7214d3c52ac6d6c621401bcdc6df27628735ab4407dbf32371b54fc8d5462a3c3f9caf35df9bc2366a5d89844d292e8352eed73b060af31b8b85e7bf937e73ad4aaaa00098bf8", "750029dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b3250ac916929dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32506eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb0daeff790ac0750a5c97c555dd00ad0e25822157617ee0633a1c9b091c67347000000000000000000000000000000000000000000000000000000000000000054273997c6b5f26f691e4d5428bee747f4fb577690066e33fbb86cc3a2ec9b53342550c32fe8e6b835909b157b681845926ff168cbfd9ff5cfb54bd6c774fd9157c5d03f132c6d240068d51b30f30e3d7b2786a2118a8eec0900f5b646cc34a216bbd72ae4633ad4d3f914989b57cd89ca1399cd505a1fed4f763b0e00d4674c2353162f5cadf9b6f3c32b777520a5d562a965fe0a5f3e985bdf7f770a65a1983f523a753630238635a85401e644b6ffd443cc41b1b226185056bff8402c91513dcc58ee4dd7ea460fa36871f87f40a7dce08d15f9f39cadf4ce5d6057706e74a452cd80efddb984cb2088de76d83d12c012975f6f8909fb41fa3853970f3c67"]}}, diff --git a/txscript/data/taproot-ref/6536f2a8bf497dc4fb07e6344571b041ddf3e9ce b/txscript/data/taproot-ref/6536f2a8bf497dc4fb07e6344571b041ddf3e9ce new file mode 100644 index 0000000000..ba973cf12d --- /dev/null +++ b/txscript/data/taproot-ref/6536f2a8bf497dc4fb07e6344571b041ddf3e9ce @@ -0,0 +1 @@ +{"tx": "927a8af202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0902000000a680769e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c499000000003a7254960188a41e000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47871c050000", "prevouts": ["48375e00000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "babb340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b8", "final": true, "success": {"scriptSig": "", "witness": ["7bc450271610fc51bd47f0c60788ac3ccc38fe9e467ede448d0778b38acdc3731284425f5489c5ab7f7c67fcf29bb992a5e0c77cf4d03024a99a46d1837efea882"]}, "failure": {"scriptSig": "", "witness": ["06299b3516f1110561ca47a7acf31b7d84b22b71657bd54a6373e08be5501effbc6d03ff8b4fca485c2326200e3c9628893e52cd992c11296cfcb6cc6df446c9b8"]}}, diff --git a/txscript/data/taproot-ref/6552bfcd6579a934948b7068b4c551a0117ad0f9 b/txscript/data/taproot-ref/6552bfcd6579a934948b7068b4c551a0117ad0f9 new file mode 100644 index 0000000000..7a2040fdce --- /dev/null +++ b/txscript/data/taproot-ref/6552bfcd6579a934948b7068b4c551a0117ad0f9 @@ -0,0 +1 @@ +{"tx": "57a8be88028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4360000000053d6dc89dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c050100000069ebfe9f022b60820000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65c37ec52", "prevouts": ["657a3100000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7", "1017530000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "167d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e83f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828719dd3b5606bc946287d150a5ecd03b0f8e892d08bbecd28ea2e3769111c28051e3355b9fad1d20bddcd1a8531bcd58c93c4d9ee4159d68db4e08ecdffbe17e"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93632f8e635991ab12ca03b6bac9af37eb87a63c2667988d569707a1da1ce4c2228654bbf7a6388e898988522fa7e5d2ba9e6951646cde29fc617f56e0c3d8e4d50afd13a3b2c4c421c5355668ae9e4eec8bcb7618363c6e35efd204a43726d22d6"]}}, diff --git a/txscript/data/taproot-ref/657e868eb96e89c02af5430fd6fd6b371011ad19 b/txscript/data/taproot-ref/657e868eb96e89c02af5430fd6fd6b371011ad19 new file mode 100644 index 0000000000..a66d6cbb8f --- /dev/null +++ b/txscript/data/taproot-ref/657e868eb96e89c02af5430fd6fd6b371011ad19 @@ -0,0 +1 @@ +{"tx": "3e1bd7390160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701a0100000098cd36e703a3950e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374872414a15c", "prevouts": ["ae6c1000000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ed7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082a45769ff8e70e4bb7b91d42acbbb62837b0e871ab760bcabf7dfb792b2e999f3b131de5807af4725e3fdc8c81388bc895736ddb6e799e7163e8586c833ffc627"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e81749aa0b5d70f518b926cb476468410836d749f7ea53df886cb06228889683d97e5e7dcc199a2f568fd88e83eadcc582fbeb8fc2cdeb8c853fb2288d51fac1b4d19f2c0f6744ba7ac1f5ff1e4bbd0a31d1cdb1f5d58d1dbc476492d0098121b5"]}}, diff --git a/txscript/data/taproot-ref/65883b58c6b3dd90d25b39f5ccc47be52f17c9fc b/txscript/data/taproot-ref/65883b58c6b3dd90d25b39f5ccc47be52f17c9fc new file mode 100644 index 0000000000..f91b386c9c --- /dev/null +++ b/txscript/data/taproot-ref/65883b58c6b3dd90d25b39f5ccc47be52f17c9fc @@ -0,0 +1 @@ +{"tx": "065bd6d102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4500000000c1b6cdc160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270180100000068d0aff1028cb48f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69a350326", "prevouts": ["373e83000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "e4e50e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "a17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364a06e2178fe69175d6529a39be816f8352bf9d327635b0fd8c53cf86695522e146c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa09531ab440e1705f1c4b791477abf2a4fd5d47d92b3cb9e3998348c9d3a452b095176026b3e005afce4c10b5e59a002659822bde369bd64201565ae4c88fc95c"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936054a1904d9cec18d14f2a24d862d1037aa0e706c94223624db69aadf9635fbba09531ab440e1705f1c4b791477abf2a4fd5d47d92b3cb9e3998348c9d3a452b095176026b3e005afce4c10b5e59a002659822bde369bd64201565ae4c88fc95c"]}}, diff --git a/txscript/data/taproot-ref/658ae5cbb0d9d2acbdf007a1d56b7a8d343343c5 b/txscript/data/taproot-ref/658ae5cbb0d9d2acbdf007a1d56b7a8d343343c5 new file mode 100644 index 0000000000..1f58253154 --- /dev/null +++ b/txscript/data/taproot-ref/658ae5cbb0d9d2acbdf007a1d56b7a8d343343c5 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b14000000005d6cd1b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bd01000000cedba4cd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700102000000d9229fe1044be13e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c7040000", "prevouts": ["a80a1f00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "1e3d120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "67ba0f0000000000225120fa0c69fd3dab50066606d386e9137466ea422a077bab3cf3dc61d0cdd59f488d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ba", "final": true, "success": {"scriptSig": "", "witness": ["32c2327693d0bd2a234db09703de879adc7f3dd8758108608a267983bfcddcee57a1c18ce22d84579cfe5276f155338373869c36d45321d80bf2428090bd137881", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3a549ce4fc3d62f541fffe6227d9843d2c6148b2aec9bd8421b176fcd9fa9fa334fdd185140d94f81b290fac077123231421d36f5e0c73203d93796a27124a0cba", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/659a2dd2fa1b9d801f3241e5ff84637ce06ccb77 b/txscript/data/taproot-ref/659a2dd2fa1b9d801f3241e5ff84637ce06ccb77 new file mode 100644 index 0000000000..71c94c3512 --- /dev/null +++ b/txscript/data/taproot-ref/659a2dd2fa1b9d801f3241e5ff84637ce06ccb77 @@ -0,0 +1 @@ +{"tx": "6f94846601dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c03020000003ac5f78104706949000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787b9010000", "prevouts": ["87e64b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_12", "final": true, "success": {"scriptSig": "", "witness": ["2d178e3d04e54c535c149078274098588da6c2d35df619db034506a0c82a0ac76f2ae668d37f220414d806b09f8af4099b0da5c2d0e0fe8bab1bddf0a29559ec83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8824c40d99be7032cf44d21d6120c667cdf875c012883e52a4fd04d392cfd2c9adbd68145c69f7a15ee008e99818e85b47c625cedba870b88cf90984d03dcf4f12", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/65a933e1d1978ba3bd2f831c22458a755de9ba53 b/txscript/data/taproot-ref/65a933e1d1978ba3bd2f831c22458a755de9ba53 new file mode 100644 index 0000000000..79c89731cc --- /dev/null +++ b/txscript/data/taproot-ref/65a933e1d1978ba3bd2f831c22458a755de9ba53 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9c01000000ddd5aec9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6b01000000ae192cbfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdc00000000b552f5a70148b11f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69aa3133b", "prevouts": ["dd388500000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "3ddc6b00000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "1416560000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3044022053656d62d779c74dff27537a5ce3d86d8b9e5d99ad68f61a04af5f116d902513022041173bc14e430cd2c93eefabba2723e971ec86ec6fc6275eee70a7edecc53adc82", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["3044022063ece51f9799d0b8f55cd8c7ce93603b6dee8d9d95b6fb525c22ecf63c579b7d02202ab803e9c6d77ee947bf17be7d388afe4d5c188274a12fe66c6b3d6dc9802a8c82", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/65b54fb91b4a1cb8c833485f4d132f6e676256e0 b/txscript/data/taproot-ref/65b54fb91b4a1cb8c833485f4d132f6e676256e0 new file mode 100644 index 0000000000..3d6d01cf65 --- /dev/null +++ b/txscript/data/taproot-ref/65b54fb91b4a1cb8c833485f4d132f6e676256e0 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c48010000008639869704fe1f4e00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df979722368987ae010000", "prevouts": ["dcde4f00000000002356212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["059ae24d6eb313597f458e4b902a3ab80888f6266fc76748d0059bfd693f46ff2281f631dbf4acbfeb5a2bce2a20dd8b768eac99932f285edb9e8017bd95a764", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/65b5fce87c9d43529bc25317899f3d88952342f0 b/txscript/data/taproot-ref/65b5fce87c9d43529bc25317899f3d88952342f0 new file mode 100644 index 0000000000..2d5dc10807 --- /dev/null +++ b/txscript/data/taproot-ref/65b5fce87c9d43529bc25317899f3d88952342f0 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbc00000000f53d232fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5801000000a868a14b010a422000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ace1030000", "prevouts": ["f757210000000000225120d65a03f65f30f95ff11470521917ac5fe759126fe5e56fe4b3d214d8fd101829", "af9c4c0000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e870bdf58d84db84346f382aca3e68185eb5f8924061d5e755b2af78706b040"]}, "failure": {"scriptSig": "", "witness": ["6a3e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/65e72ac1ffd20fc948eb9fd0715334a200044fb6 b/txscript/data/taproot-ref/65e72ac1ffd20fc948eb9fd0715334a200044fb6 new file mode 100644 index 0000000000..f84f19a1f2 --- /dev/null +++ b/txscript/data/taproot-ref/65e72ac1ffd20fc948eb9fd0715334a200044fb6 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffb01000000542e9722dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6100000000f28b12b601df1e4500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac50000000", "prevouts": ["54a96e000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "b69c1f000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e84c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93616f8948a019ae5ead2cd9d851c765ad0220b162570156f4a7dc6af8fd2e75e36f4bc19c05a4ad9ae05992168d490013403fc5515955a55899592aa66a61db799770b862ef93acb6091cb4ff8ef135b3065b278142aa4adab757f952a626e2b26c80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641b80b929874d7d784cf6595e13e696e00b78ea74d97600c5f575c1369dc95b1b4e321dfd5536232eaef67cd7779b0e400c7a17a369dbe44f6d3cf0436c0a34cc80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}}, diff --git a/txscript/data/taproot-ref/65f7ef2d10a182c5af3e4c60b4f23f13770b1d2f b/txscript/data/taproot-ref/65f7ef2d10a182c5af3e4c60b4f23f13770b1d2f new file mode 100644 index 0000000000..32674ff225 --- /dev/null +++ b/txscript/data/taproot-ref/65f7ef2d10a182c5af3e4c60b4f23f13770b1d2f @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2401000000b40d39bf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c00100000020db294d014c696800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2e5e9e56", "prevouts": ["faea5c0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "118d330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_eb", "final": true, "success": {"scriptSig": "", "witness": ["ffbdd2fbbfb826428699c1389760712bdb2ce33b75bdfad3abb0430d455144c5afb96118b91da89339b33e9671cbee8751bf95de1898f1e79c62c00ed6213649"]}, "failure": {"scriptSig": "", "witness": ["5cd37f6b0fabab584df62e1cbfb23b3e3116d5c4db95b23f0c4b36975a60bbddc6304c23de2bee8c9d165a252ad170de31abf28a0498dc599cfd4f40ccc9574eea"]}}, diff --git a/txscript/data/taproot-ref/660b8322660c10bb3072efbf02a01b028869f3ed b/txscript/data/taproot-ref/660b8322660c10bb3072efbf02a01b028869f3ed new file mode 100644 index 0000000000..8530efbd3b --- /dev/null +++ b/txscript/data/taproot-ref/660b8322660c10bb3072efbf02a01b028869f3ed @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8401000000120a51ffbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf340000000013508af90254e3d2000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4872f19bb23", "prevouts": ["9bc45e0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "17e67500000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090267f2f3c4d147d8d888ba9ad3055e1d0c4f91e37099949561274b79da16702993590f16ef275f5e18cf3c1f57ea9060a4302786577560e2280a1b9e9b7639ae59932737f8ebac42f59418766737dad1fcb68c8dd2794ee6e8fdc714c7365eca1be14d46b266f1d3b73cf31db4aa62e1bbad5c115c2dbd5a4a2c3068fe12cf7e94eb58eaff6afeed696ee2d19f14551e522ca781ce52a4db78609b41ec72d3eabc48207564eaf91acb8993893a71c19a112b57ed5e7f43c115b76e68bca823a3320598e6b3f1206b6f8a6eadc326e36414a118fcfd1daea1ba87346ddad309ce8faa2c158016cd3b93a4df536f5946eb7723f4b14560e43c33e750d883ef355ff6a48463483556be10825b2ed4209dcf01f8830ab7a34a7ddf4026d6b860be90930c10b337bc7f1a33f0d1971f03d905efdf923bb1504adbb4f86dbf7ce2e73f1e25c9673c6c598487971db5606b005bf04f99bfab8e96aff708819b58134f9e0f4683a242a249ef3418fee09c6d9e307dfd8d0cab5eed172a1ebf20054b569776ca7e17d050fad3770b66e6516595d54020a329da47e2049caf8acc5ea5bb3c5ecc91ff2d602619dff8c32d1660339af09034881469e0f5c717783260e4751123e2bec729ec58d01ee1bd3509cbcd8df821d6445fc58a2588c240f4aac1fe03c8aabc146a40d0a07ac23b0c0536a0f6dc78d036d0dd444062d9414b336abbb1dc8a61820c220d7870cd75", "747d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ecff906089186a2156752da0c3c16267cbd92a27eecc3bf322cbdfb883eaa82d667ed562df09fa99b9816795ca593030d6e2a26df3d36427b327259a2f453cdc8077aea6ccf316b47e40a0e3636c5ad4f7738b9bfce630d4a478a0dbfcb51ed93"]}, "failure": {"scriptSig": "", "witness": ["4d0902d06a09f660812fd857dca0ba2b82c3be379a62eebcac0eeefaf72e27d97e91762c658d0f3e24bb39059b1dccf075b5133500b9132e3b50b7425cbc7b2bde60b709085af1f73ae5b99aee56fc6d9f756a297a9280dabe2c97537c6f68788c19bd27a6923e8b053ab59543ffc0caedeba20dd12c1df47d8752f08a07d6ec16f50376e1c8da666b94340bf503c4b82a0be5015b5f6dd04b7a8f5bd26a7a2eb8840b0df9672259b94ccfda595bb43c29b1c5cec2f4d6b2543333f94c3a8510aa324cd5cf0816837892bc3fb2352a629f50ed742854471992ae6b0e0ebdce19c27a410b7010e86b121755aef935392bb0657526cd59aa1f1d3ae4bfa84a3b3bd24452e76789df9f093356ca9af72c0c69e6e8ce056c683c0009dfee42d4a73f321f2388f079567cbab984af32035d0e0153fec26985f4a9660b029bb18f2d9c7ffca185e620ae5ded8494b448b160f1fa9ea240d3d722435d21ea2ec257b3ddffb687f8f1a63c0d4ad3a6f7cc17c95a2379a558954826170ce373505ddf5d4e5d25ea142726f58725fbe4aab33244b2be46022a6dee3b68dc584a2a23e6e22ad39390430248f78e410b87c17bdec5b73ec3492c56b7d39f844eb2977248fb851db2a6979729e9491baf884ae255336c6f7d14d15f94191361f0d3e7f463ed7054d234ffe54d42ade6bcc126fda1c0ca2268d0193204b6f999b59d3011e286dcdeff132e6b651ac8feb0094775", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faff7c473e619e0ca75adf5145a8683277729cbfddbd5802fec00494435aa4942fbfbb1ef2412aee06f4b75b9e20a72d4d9707545a4ae77abc538f76b00105406a"]}}, diff --git a/txscript/data/taproot-ref/660ef1c053328676703178f6c1f1a9eab0eba34d b/txscript/data/taproot-ref/660ef1c053328676703178f6c1f1a9eab0eba34d new file mode 100644 index 0000000000..98dd793db0 --- /dev/null +++ b/txscript/data/taproot-ref/660ef1c053328676703178f6c1f1a9eab0eba34d @@ -0,0 +1 @@ +{"tx": "9808329802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd90000000006966cb4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0b020000009599b4af03d11683000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d2000000", "prevouts": ["6e94630000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d835220000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f9", "final": true, "success": {"scriptSig": "", "witness": ["07f68954ad90da8e4def4cb40a6b37438126f12b7920455f8c466dde4e42995e4ed138381b2e9f4945630e2e06ed6c4354414dd0b08ad22444f5aa9fdcde4d3f82"]}, "failure": {"scriptSig": "", "witness": ["a2ed8b675086ecaaa80c92425e96cf0c8ed0bd9316a765efbd2cd0f570fee91a4ef4a72bf52b69ceaf007c37fe76cd18469cdeb36a7ac794caafbdfeaa8af25df9"]}}, diff --git a/txscript/data/taproot-ref/66252c3d296124f1a894a2bef80eb0b8d2780c58 b/txscript/data/taproot-ref/66252c3d296124f1a894a2bef80eb0b8d2780c58 new file mode 100644 index 0000000000..e8610a3c36 --- /dev/null +++ b/txscript/data/taproot-ref/66252c3d296124f1a894a2bef80eb0b8d2780c58 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cba0000000025e7d69ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5201000000d3af49b860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701202000000fc825ac201084a89000000000017a914719f78084af863e000acd618ba76df979722368987398c0a2f", "prevouts": ["33da480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "65a5590000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "064711000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_21", "final": true, "success": {"scriptSig": "", "witness": ["c82f5e30d2af58a7297953a3aa68b33786c55fb79c1bba7ad94e14ab611fd39f6d1c6115218a650564925281dd8eca02da21a154036ec8c2bfc0cd64ba08e3d481"]}, "failure": {"scriptSig": "", "witness": ["4e48c844d794446185f579607e123395a9c1768c80e7bc95102bc79ccc2a613253b329923a586fd91885cbcdf59bc298cc150bc4223d20e6ac1105870a26d2f721"]}}, diff --git a/txscript/data/taproot-ref/6652466b4852d5b5fdaaa69e10880f1a3b76c3fa b/txscript/data/taproot-ref/6652466b4852d5b5fdaaa69e10880f1a3b76c3fa new file mode 100644 index 0000000000..fa4dc8b583 --- /dev/null +++ b/txscript/data/taproot-ref/6652466b4852d5b5fdaaa69e10880f1a3b76c3fa @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9c01000000ddd5aec9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6b01000000ae192cbfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdc00000000b552f5a70148b11f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69aa3133b", "prevouts": ["dd388500000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "3ddc6b00000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "1416560000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "777d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364f5cab98ec3e6c74091025ab5a3440b5db25728dfeaaa4910bbb1ab354164160ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457e2aee6c91b47bf7b7aff3c5d3800b2287c2f5852e09bca12781ffc191c1d4f04"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082fa584ded413e2880e88fe5cf9cb62118b35d382d99cebe394016833778f1470de2aee6c91b47bf7b7aff3c5d3800b2287c2f5852e09bca12781ffc191c1d4f04"]}}, diff --git a/txscript/data/taproot-ref/665eb41953197df4c60f261f2844052bbd0c48b6 b/txscript/data/taproot-ref/665eb41953197df4c60f261f2844052bbd0c48b6 new file mode 100644 index 0000000000..ec0497ea40 --- /dev/null +++ b/txscript/data/taproot-ref/665eb41953197df4c60f261f2844052bbd0c48b6 @@ -0,0 +1 @@ +{"tx": "81800ee502dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bad010000009e677df3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3d010000005da75ce303080a4500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e785000000", "prevouts": ["6a952400000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "9b09230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93690527042795390690a9a4478775b8c816aa4ae99e8fa73671741082894bf9ec6c99cdefdc3473a619e12778c4cd588646c716d59e86e999fbd28728a66c3e7c6a7d0a3f3648f0d829df7cabdb8f0af96ecc09ebc190c461c6b5fbdc9f87abaf73acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004596d09828da376c7d22ded5a4cf88780a729051831fc4ab0b26d0bae49a473f5539caad535bb8d51429d9c94edd44271a241bcdcdcd941caf815b31d1e73ac1400dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}}, diff --git a/txscript/data/taproot-ref/66726b80715835e1ff8fad96f3c76a0309586a88 b/txscript/data/taproot-ref/66726b80715835e1ff8fad96f3c76a0309586a88 new file mode 100644 index 0000000000..296f888af6 --- /dev/null +++ b/txscript/data/taproot-ref/66726b80715835e1ff8fad96f3c76a0309586a88 @@ -0,0 +1 @@ +{"tx": "613ba07402bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2b000000006ac1a3f4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9601000000db51c5bc04110dc900000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787e2e1e433", "prevouts": ["42e6670000000000225120531ded2803baf703e9b8f23e3d6d5459ce6d94a03d15c5d2addf83c32bf56dd4", "0c7163000000000017a91480e36171416c0f598c1c20ba17ab3a3cf10a438e87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2359212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["ad842b989b79bcb22880964d30e6f0693d7eacdbf868dc0520a5dedae5a1bfdc82290d27ecbe1ebb09109ae46ebd8b43f43bf9d8c9ebad19893df048576b5869", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/6699c94d11593280e700614b550ad835b0025476 b/txscript/data/taproot-ref/6699c94d11593280e700614b550ad835b0025476 new file mode 100644 index 0000000000..2b1bb778ef --- /dev/null +++ b/txscript/data/taproot-ref/6699c94d11593280e700614b550ad835b0025476 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706d010000001db75c8f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e70100000040edebc3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf710000000010bd48dc0265f7b6000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc3fbaa343", "prevouts": ["9930120000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156", "dded350000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "1558710000000000225120ba259941c99089f87a1bc06d64ef249f01ab7891d30169746f94b5a6d9357ae2"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "success": {"scriptSig": "", "witness": ["08bd160d956025ebe6f5241df6244d6e62dfe0fb88fabd8fa085f027cdb6e08983df2e90448c7730c3529d90b42004d80406a3b544a53f76563f17fd038125b701", "36a9a96f7166ddfbaa2dc5cc2c013de209470d0eba56ac9126090164a840d376e07351c961e97010316ec6e1548e8f5987cd6c7d628a1410e986ba2e7696973fd2fcf9065c502e4c997685aaa21bbd36bb2f0933550d2feaa95b2582702fe319d4b561ca31aa80f51e2586f843837d23629afd8abf0fa7dd6d46139c6716b1ee27ef18ef8444ab2f530afacbde61c335546991df2142dd407ba5d3228eadffc353e662951df94dbc8d36c8723efa603494241f5633173eec52b5b43be566", "4cdc08b90e8b86d07d7f45c20793efd1389f3568cadb6ab29e4af1d96d774d0a1ee8a681bac9322fdb94fe27887b44b1ebd7d6f11e080431dd709e5bf4c544a59fa92f389f3a96768cfcb1cfe5ceb96c5af9e4665b20aab4457cec76157b472d0d4e8942a1f85da73f9a133b83fda7a5e702ce3e1f11ae0365b7f9bae6af0b0140de6a1569666a392a1cb405d38c52544e393518b5339eddd388bbc4fff323bb1f750292aec93898be4a9bcc624dfe04fe036d2e965fd9e9ceacf4ecc3a1a3949a6ee75e274d467cb4828827d336664d3efb2fd8941873ed27b0d40f0adf6d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d30785dadbc4ecd3025a77df10d8adbabc260c7057e27b10584057b3d7f4fc016a21374ff720e76b2196617c9800913718671966153738a51ea73a6432f4ab3bf0dff5a84056750eac9adbb488cfc819afd45d7b707bec8a1e4196bb51be6e7bd60ae29b735f5eff4bd25fb4d4fb61a513a82460c0ef0ce3d2ffc7cbd94b706fdf3b1c9c2cf996feb8c879007ed7f4c68554a2e57cf8c8c5c0bc9ff388144b9a0fe770db21d58cf9191bc21575dfd0a2264c0cda110f7fa0d71b1290f1293823fbc4dcbde5dd13a9e9e1ffc890a0e959188c645bcd70a1a7b91384daa8cd0156ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94da41cbe840438f89a6a0ac625a9416d834b3f33b3770c38031be21b28da83f000000000000000000000000000000000000000000000000000000000000000025c6934f9eba9abbc53e94d34bbadf28debc99a4d2ac249ed5cea3d36fd546bcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9b8962a9c54525fb58487c69f3712663acda1a843da215ac10cf024cc5bd45ecac30bf82fa8df3fd0384c459caa1ee82314748e96cda38a9a95edf31e5fa007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56c166a818eb0f0885e8d6a1af6a547dddc2c2cc277a8dd0e175cda0f0b475cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4afe4d2fa8292491b04ac94f3579e07ea2820a2efe8c5d7cdc321fc6fd962531000000000000000000000000000000000000000000000000000000000000000095effff3d1a70c342441b75631ef902ddf2ddc837994e5043de51789538c4dbb000000000000000000000000000000000000000000000000000000000000000011f2eda03ba6d94486ade61d4f3c93b8e423cfe6ce1a1b01125141c24b6438c889c3acf9263a560421ca2bce10f7d163a8804bb321cb7da79c6321a29d03c0dde8f8a7d1619889b6e3a150d7bc0e637be3080ce9d6ccc38d41a83743dd1e2c51e99aad7db8972198620f4ea74a4494dcd65849b55fd8e1ece8f54fbf0af6816b24cc9cb0793d870b344ae56ddd355b2e771f235e3ffc12354bb39485ad36a7aa7375a32a5e045112cdceecb459c4995999b6db133269a7d7358d416abf805fcfe41bd9bcc97369e423325c88712161f18c3503205998885f063c0525eb5f2d8b4acc167957e4020e85ba25c911f06a2a8dc6065efc34ecb914e933ca3c949405ad791c3a9b80e8890ceec5a58c830f53df34478d164ac44a0e0c38ded2479bdeab5ce9e141632689e266f38e2c2cd8c2cd0b87b08512f9d8712ad93c7abe36d741bed2d0e51e90ac9d31effa23e36c43a2783e747d266c1c0c9bfb7c41188affb8a6bead3e55fe5b88ce81a3b922ca61c1f3f5ce9967c59afa752cd066039867b23027b82614047fc513d36169cb1d4cd347548cc3fb6e78e3f5970f5bb9309fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5fb087677d8eaaf50535cda0874680349d20471d186a6fb56b78cf68a2a396e137d25fa124369759976882ce3899c05a26dbeac25aeec1cf4620ae772020e459e6412c40bf85598a7b2a1d269735d196a38c98f2625b15518b3c4a9f2847817000000000000000000000000000000000000000000000000000000000000000050b8df1d68417e1955818ca12a80830f22a56ebb200b8a376c5b18036e5db64c32fcad9214e2a916766c9050c03ce1b67348c9073fd3867310ec223da95f7bd0b13f87ce275098f394f067f4ee6c5df7673ad84d84aeb0703124d5f489130e8d00000000000000000000000000000000000000000000000000000000000000004ac50d3072abf1778fec113c724452f518053c9f7fe8facce0abad2bf44141b30000000000000000000000000000000000000000000000000000000000000000d7fa016be04d7edeb2ad3d3ef4ce0bba0c2e776eacc0346960e841a0abcab630a5402b4c585240b9106c2d62657fcacd4f19c06b671b744e1ecbceb7e2c8ddb859497008e46106b80a8805ba5558973a878d97ca009957406bfcf4f3cc897d0103583647efc6a941c9cfe5d6b5b5f481578dcbf633127cfad95c9abba62bf282ebfceb33a113b5e22da86f299457aaeed9447bb0ec57ea2815b0eb353e5cd591ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ee0ee28d901acb47d6b2e3fdb5f6a537a4da791c67d65d18f52aacc08b00aae90470036e7c921d30f1e843ef44d9bc86f36517d22d60a331a4d1a8dea235e7f80d73c2905d263cb6cb17a77ae3a30e0837f63411f14c374b716b9c6bf0fe03849a4b9a71603529d25c66ce8682f296c1b91f9585d9bce4508eea7314182397340edbee6c00206f0e0de3ec6a1871aa8a719b84c9b6b8fb7463d3f99614f6d97374f2fd3ce6b410e81bfc9bc528da4cf5d9c55900e3bf6e86cd931768d3ead34ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff107205b80d68d90d7ab6bed69c85d506bfecc9129a6124719dd9259f9ca83d66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06718ff2b40ea9bb812d68372c657c4e7532ae9c339a045185f0387917cd48e13c5f4e9b318d0dd7d845bc8f57f6ae6f139c62bb692d8d719f358051e9248c01001f5ee4496e79d86e079c265acb5ad792cc2857f1209a998deb6bddd87ba3ef7f205ab1275eea909497773093891de01bbb4d8156133d83477d8fbca56ffa4deb34ce31eec3520b49735b8746a994b213b566af74c9c1fb7cbe5e620541610c95f5280707a1a0172908b6974840e0cf359cc126b37af177b8d7782a458af7783902143ad5dfd26a5bef60ce57360225212e86129c6f9f3a3270a836cebe5b0acc889cc1f77bd63c6735ba075f01207f32d19838517a7312739b05df7c8caf67793cb06c4e94ff4dbbfdc933770a06c250d228b385e7491459d5deb7a0ce0c8affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b96736d52acf68a3e5b7be814a229a3d9df7a7bf5248c1aeb12f78d0dec9d14da332e79ddab48e27584a8464eabda9f058099687b586c6a2fcb0c611940a702dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1fa44b17f3934485576cdcf58b8713527933168956c1c465eef29f1db88876d8487851be3035d8237006c63ae05685c20fbc14d0745cbfae1a17fa62d55714d92ae85994b3415c619b66c395869716600b3545e6f04a7d75c0ffddac9291bb1f754f557bbafb4940f6e54788495f56a1f54fa5f6aa9a82bd99d0be0f856b563b4ea4e734d1179aab74d5930f8fbb61515ee6b1b58a0ba829a2b1def4c1cff7898ed24b336b550b17055789d17a25b172537ae1455db70617c2b118ec651e0d1a017bae30ef06ee67f32da8a0cdb7e43b61dc49d24ad5a26720c83f5b363097fdf2f57a20a91be0e80418c95c7347cf587d43d81dc268fa8ed5f86fd32091bcdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5edabba63702f38eb276ca33af94b77993e1ba5f23eb3b7694279fad7dc0782faa00d8b92a9c7fe9a9dfcbafae4bb989941bce9b61bd618596de0668d488471cae72d0dc4fe68196d465d0209fe1b67054777bad876c563d524a2bad27847a6004db723030b3407c400759e494e54f84e95a798e6d7b6ef38d5d53f65115ecda6cba38c52ee68c6619d54bd6e944beba82747035dd0fbd77085e129c105f445e05a107367ba362ce285c83631f39881f8d0c4fa0e3f3cb2fed5f21932ea194cdc9ab2dffaa2cf5919398e71a1cf9a2863a86dcb10829e1cf959cfe4d00b6c34600000000000000000000000000000000000000000000000000000000000000003454f1097ec5491edd4f147033b634620ec5d0d80964113395bdee2320ba329ef00c4e734e3c6ce347d9561ed201ec77f8881bcb06775e12f9dd43dd028fae656cfa5ae40388ded790c34f9368e5a070bb1fb2c3a4db90309993e45db8c5afa1d4aad98abda7c8e28f3e634df6d4a3a0d87713d78cf95fb199e58383d7cc60f9016e7a0d93a40f984cae5e11618af8803d7397cefbc3d64e40c5831522f8ac297198bf4e3afbffac10a2104847b097edcf877f803375df6a74523fd598e491d458ae479d92e2ed7f073bcb9ced61b5d71df610122e42c8375479371a21f49c663d7599ea2c5554d0896ceef80302d058c9279be888e7b4f71796476ab7b22c77a28286392c4d0fff1b24a5df3c903ba128fd8345faf1c2843988b37222591093e67e4f1366a3bfc0e7a4e1a9d9bbc6821d1cc76282b6a8ac08652aa135d0e17c1a28329f1220195481046aa1c77488fba52c8bf7720bd50830db7130d77960cf8cab1103cf8a463558547838feec8e9963c40e20e79d41437ded67259e5aa2abf766655483fde84d7acabc45f067a2b7ef18fba26ceb1eb8e78aef99213de2d062c520ac10410a600409c7028e927e0f67c9341e32301a22408c0b63056a4c88733ff60f98087d4514f686719a7c163102f2df86cf29f8c93f39b7124a897908221d140f7bddda1cb54158603abac448e206755a5c88e48aa329b2a2a110301cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4c025675267608b16d73539d8e554eb4f1ddb834be786b27a2ce63fd997ef13a819061645333216a624cf08665a379470996c01670da635c11d17a0807db27e7", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["08bd160d956025ebe6f5241df6244d6e62dfe0fb88fabd8fa085f027cdb6e08983df2e90448c7730c3529d90b42004d80406a3b544a53f76563f17fd038125b701", "e2747c919a2159c67a575c24898ffa12c5493a737a14638ba8def1f3cd2d50732162b65ace13cd85007f6754d4373e287c35788e32f967a720b03bbd721f322e387495a3b2bcd0cf78934bf3c4c7c9665f7b3804734d4e95e90804539818ded992278dc24888eb7a825ae0044056f4b4ed2fb9a6a12ee22230fe3c3e3918022afa13d1a12002a337398f67a5af982b8fbbdcfcfbd7a5cefd09e652987f97edec4cbf8f91e13a91e5d5139ff8fa6c13f4d2d789d11dd2ff8332d6d647af", "4cdc08b90e8b86d07d7f45c20793efd1389f3568cadb6ab29e4af1d96d774d0a1ee8a681bac9322fdb94fe27887b44b1ebd7d6f11e080431dd709e5bf4c544a59fa92f389f3a96768cfcb1cfe5ceb96c5af9e4665b20aab4457cec76157b472d0d4e8942a1f85da73f9a133b83fda7a5e702ce3e1f11ae0365b7f9bae6af0b0140de6a1569666a392a1cb405d38c52544e393518b5339eddd388bbc4fff323bb1f750292aec93898be4a9bcc624dfe04fe036d2e965fd9e9ceacf4ecc3a1a3949a6ee75e274d467cb4828827d336664d3efb2fd8941873ed27b0d40f0adf6d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d30785dadbc4ecd3025a77df10d8adbabc260c7057e27b10584057b3d7f4fc016a21374ff720e76b2196617c9800913718671966153738a51ea73a6432f4ab3bf0dff5a84056750eac9adbb488cfc819afd45d7b707bec8a1e4196bb51be6e7bd60ae29b735f5eff4bd25fb4d4fb61a513a82460c0ef0ce3d2ffc7cbd94b706fdf3b1c9c2cf996feb8c879007ed7f4c68554a2e57cf8c8c5c0bc9ff388144b9a0fe770db21d58cf9191bc21575dfd0a2264c0cda110f7fa0d71b1290f1293823fbc4dcbde5dd13a9e9e1ffc890a0e959188c645bcd70a1a7b91384daa8cd0156ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94da41cbe840438f89a6a0ac625a9416d834b3f33b3770c38031be21b28da83f000000000000000000000000000000000000000000000000000000000000000025c6934f9eba9abbc53e94d34bbadf28debc99a4d2ac249ed5cea3d36fd546bcfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9b8962a9c54525fb58487c69f3712663acda1a843da215ac10cf024cc5bd45ecac30bf82fa8df3fd0384c459caa1ee82314748e96cda38a9a95edf31e5fa007ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56c166a818eb0f0885e8d6a1af6a547dddc2c2cc277a8dd0e175cda0f0b475cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4afe4d2fa8292491b04ac94f3579e07ea2820a2efe8c5d7cdc321fc6fd962531000000000000000000000000000000000000000000000000000000000000000095effff3d1a70c342441b75631ef902ddf2ddc837994e5043de51789538c4dbb000000000000000000000000000000000000000000000000000000000000000011f2eda03ba6d94486ade61d4f3c93b8e423cfe6ce1a1b01125141c24b6438c889c3acf9263a560421ca2bce10f7d163a8804bb321cb7da79c6321a29d03c0dde8f8a7d1619889b6e3a150d7bc0e637be3080ce9d6ccc38d41a83743dd1e2c51e99aad7db8972198620f4ea74a4494dcd65849b55fd8e1ece8f54fbf0af6816b24cc9cb0793d870b344ae56ddd355b2e771f235e3ffc12354bb39485ad36a7aa7375a32a5e045112cdceecb459c4995999b6db133269a7d7358d416abf805fcfe41bd9bcc97369e423325c88712161f18c3503205998885f063c0525eb5f2d8b4acc167957e4020e85ba25c911f06a2a8dc6065efc34ecb914e933ca3c949405ad791c3a9b80e8890ceec5a58c830f53df34478d164ac44a0e0c38ded2479bdeab5ce9e141632689e266f38e2c2cd8c2cd0b87b08512f9d8712ad93c7abe36d741bed2d0e51e90ac9d31effa23e36c43a2783e747d266c1c0c9bfb7c41188affb8a6bead3e55fe5b88ce81a3b922ca61c1f3f5ce9967c59afa752cd066039867b23027b82614047fc513d36169cb1d4cd347548cc3fb6e78e3f5970f5bb9309fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc5fb087677d8eaaf50535cda0874680349d20471d186a6fb56b78cf68a2a396e137d25fa124369759976882ce3899c05a26dbeac25aeec1cf4620ae772020e459e6412c40bf85598a7b2a1d269735d196a38c98f2625b15518b3c4a9f2847817000000000000000000000000000000000000000000000000000000000000000050b8df1d68417e1955818ca12a80830f22a56ebb200b8a376c5b18036e5db64c32fcad9214e2a916766c9050c03ce1b67348c9073fd3867310ec223da95f7bd0b13f87ce275098f394f067f4ee6c5df7673ad84d84aeb0703124d5f489130e8d00000000000000000000000000000000000000000000000000000000000000004ac50d3072abf1778fec113c724452f518053c9f7fe8facce0abad2bf44141b30000000000000000000000000000000000000000000000000000000000000000d7fa016be04d7edeb2ad3d3ef4ce0bba0c2e776eacc0346960e841a0abcab630a5402b4c585240b9106c2d62657fcacd4f19c06b671b744e1ecbceb7e2c8ddb859497008e46106b80a8805ba5558973a878d97ca009957406bfcf4f3cc897d0103583647efc6a941c9cfe5d6b5b5f481578dcbf633127cfad95c9abba62bf282ebfceb33a113b5e22da86f299457aaeed9447bb0ec57ea2815b0eb353e5cd591ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ee0ee28d901acb47d6b2e3fdb5f6a537a4da791c67d65d18f52aacc08b00aae90470036e7c921d30f1e843ef44d9bc86f36517d22d60a331a4d1a8dea235e7f80d73c2905d263cb6cb17a77ae3a30e0837f63411f14c374b716b9c6bf0fe03849a4b9a71603529d25c66ce8682f296c1b91f9585d9bce4508eea7314182397340edbee6c00206f0e0de3ec6a1871aa8a719b84c9b6b8fb7463d3f99614f6d97374f2fd3ce6b410e81bfc9bc528da4cf5d9c55900e3bf6e86cd931768d3ead34ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff107205b80d68d90d7ab6bed69c85d506bfecc9129a6124719dd9259f9ca83d66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff06718ff2b40ea9bb812d68372c657c4e7532ae9c339a045185f0387917cd48e13c5f4e9b318d0dd7d845bc8f57f6ae6f139c62bb692d8d719f358051e9248c01001f5ee4496e79d86e079c265acb5ad792cc2857f1209a998deb6bddd87ba3ef7f205ab1275eea909497773093891de01bbb4d8156133d83477d8fbca56ffa4deb34ce31eec3520b49735b8746a994b213b566af74c9c1fb7cbe5e620541610c95f5280707a1a0172908b6974840e0cf359cc126b37af177b8d7782a458af7783902143ad5dfd26a5bef60ce57360225212e86129c6f9f3a3270a836cebe5b0acc889cc1f77bd63c6735ba075f01207f32d19838517a7312739b05df7c8caf67793cb06c4e94ff4dbbfdc933770a06c250d228b385e7491459d5deb7a0ce0c8affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b96736d52acf68a3e5b7be814a229a3d9df7a7bf5248c1aeb12f78d0dec9d14da332e79ddab48e27584a8464eabda9f058099687b586c6a2fcb0c611940a702dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa1fa44b17f3934485576cdcf58b8713527933168956c1c465eef29f1db88876d8487851be3035d8237006c63ae05685c20fbc14d0745cbfae1a17fa62d55714d92ae85994b3415c619b66c395869716600b3545e6f04a7d75c0ffddac9291bb1f754f557bbafb4940f6e54788495f56a1f54fa5f6aa9a82bd99d0be0f856b563b4ea4e734d1179aab74d5930f8fbb61515ee6b1b58a0ba829a2b1def4c1cff7898ed24b336b550b17055789d17a25b172537ae1455db70617c2b118ec651e0d1a017bae30ef06ee67f32da8a0cdb7e43b61dc49d24ad5a26720c83f5b363097fdf2f57a20a91be0e80418c95c7347cf587d43d81dc268fa8ed5f86fd32091bcdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5edabba63702f38eb276ca33af94b77993e1ba5f23eb3b7694279fad7dc0782faa00d8b92a9c7fe9a9dfcbafae4bb989941bce9b61bd618596de0668d488471cae72d0dc4fe68196d465d0209fe1b67054777bad876c563d524a2bad27847a6004db723030b3407c400759e494e54f84e95a798e6d7b6ef38d5d53f65115ecda6cba38c52ee68c6619d54bd6e944beba82747035dd0fbd77085e129c105f445e05a107367ba362ce285c83631f39881f8d0c4fa0e3f3cb2fed5f21932ea194cdc9ab2dffaa2cf5919398e71a1cf9a2863a86dcb10829e1cf959cfe4d00b6c34600000000000000000000000000000000000000000000000000000000000000003454f1097ec5491edd4f147033b634620ec5d0d80964113395bdee2320ba329ef00c4e734e3c6ce347d9561ed201ec77f8881bcb06775e12f9dd43dd028fae656cfa5ae40388ded790c34f9368e5a070bb1fb2c3a4db90309993e45db8c5afa1d4aad98abda7c8e28f3e634df6d4a3a0d87713d78cf95fb199e58383d7cc60f9016e7a0d93a40f984cae5e11618af8803d7397cefbc3d64e40c5831522f8ac297198bf4e3afbffac10a2104847b097edcf877f803375df6a74523fd598e491d458ae479d92e2ed7f073bcb9ced61b5d71df610122e42c8375479371a21f49c663d7599ea2c5554d0896ceef80302d058c9279be888e7b4f71796476ab7b22c77a28286392c4d0fff1b24a5df3c903ba128fd8345faf1c2843988b37222591093e67e4f1366a3bfc0e7a4e1a9d9bbc6821d1cc76282b6a8ac08652aa135d0e17c1a28329f1220195481046aa1c77488fba52c8bf7720bd50830db7130d77960cf8cab1103cf8a463558547838feec8e9963c40e20e79d41437ded67259e5aa2abf766655483fde84d7acabc45f067a2b7ef18fba26ceb1eb8e78aef99213de2d062c520ac10410a600409c7028e927e0f67c9341e32301a22408c0b63056a4c88733ff60f98087d4514f686719a7c163102f2df86cf29f8c93f39b7124a897908221d140f7bddda1cb54158603abac448e206755a5c88e48aa329b2a2a110301cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4c025675267608b16d73539d8e554eb4f1ddb834be786b27a2ce63fd997ef13a819061645333216a624cf08665a379470996c01670da635c11d17a0807db27e7", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/669ff69c2c67c7765c32e86e0eda8fcf04bcdbdd b/txscript/data/taproot-ref/669ff69c2c67c7765c32e86e0eda8fcf04bcdbdd new file mode 100644 index 0000000000..e3791cdf8d --- /dev/null +++ b/txscript/data/taproot-ref/669ff69c2c67c7765c32e86e0eda8fcf04bcdbdd @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4600100000096211854dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0802000000ae1def8304d9f05c000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987ce010000", "prevouts": ["77073800000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "36a4260000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "9f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa285f58facbc555a1823ccf774e09bcf8bed00fa79ba622996abd47a227307ebab591a16be56540de55d9fbfa115de937b3aca1e4dd0f5a93f17ebd2ebda95183"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f61d84cff52e05d72c3db95a85d4c347800acb4eb97e10662f9f4ebff4d0f9e0285f58facbc555a1823ccf774e09bcf8bed00fa79ba622996abd47a227307ebab591a16be56540de55d9fbfa115de937b3aca1e4dd0f5a93f17ebd2ebda95183"]}}, diff --git a/txscript/data/taproot-ref/66bbe506485ecc1f5f29905e93bbc326b119a9db b/txscript/data/taproot-ref/66bbe506485ecc1f5f29905e93bbc326b119a9db new file mode 100644 index 0000000000..4635407fab --- /dev/null +++ b/txscript/data/taproot-ref/66bbe506485ecc1f5f29905e93bbc326b119a9db @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba101000000a9a32afc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ce00000000d3ee6bbadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf600000000f28de0af0335865a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb813d458", "prevouts": ["5519240000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "15bb0f000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "0239280000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["35", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/66cb36473c4a75d094b0c109710f2456a52e3ac0 b/txscript/data/taproot-ref/66cb36473c4a75d094b0c109710f2456a52e3ac0 new file mode 100644 index 0000000000..6f00d1f193 --- /dev/null +++ b/txscript/data/taproot-ref/66cb36473c4a75d094b0c109710f2456a52e3ac0 @@ -0,0 +1 @@ +{"tx": "21283431028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49b000000002471ef9560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701502000000ffca41f901f4dc31000000000017a914719f78084af863e000acd618ba76df979722368987c191064a", "prevouts": ["4e9736000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "2315120000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["304402206dabc2d6bfe31004ed9f9f46abdd975f09ecd1146f315c4ada6291e50489053502201a1f7b7dccc85282c319eb5ca4a15a5a4ed1ec63c0d96213179a93d74b1f67693d", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["3045022100843b44b877e5e690eca634f3e2b00c683f5b4729583f5424b36129def7d4248e022060472eda1d2b0c78a08cb35fe7d8a17065626c3e1bdea20da6640e8241b71cb93d", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/66e881b64f9e9007cc27f9ae6ea1d9c09b7ff1dd b/txscript/data/taproot-ref/66e881b64f9e9007cc27f9ae6ea1d9c09b7ff1dd new file mode 100644 index 0000000000..69deff653e --- /dev/null +++ b/txscript/data/taproot-ref/66e881b64f9e9007cc27f9ae6ea1d9c09b7ff1dd @@ -0,0 +1 @@ +{"tx": "b898faab02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd001000000322d1fc28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47201000000a12eaadc03c7936300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac82030000", "prevouts": ["ca39240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee564200000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f2", "final": true, "success": {"scriptSig": "", "witness": ["d80b9460896c552efa2f1db7d015f374b148a85fe90e13db54827f9424fdd53ced619e4db7464aebe5995e5e277c2564dba5a4d2f150140859697e15e199815481", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a2108ee9a4ce6f69b7e337fe1e767411b4d1a9f8684f868571813a41116df1c6e609fa7bf04a66dcfda1c36ad472f19e947902a5ac5e2248ade24c4a53978860f2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/66fd2e2f42f7b15c03f46c8f5852fc2b2a1288d4 b/txscript/data/taproot-ref/66fd2e2f42f7b15c03f46c8f5852fc2b2a1288d4 new file mode 100644 index 0000000000..f44c6eeaff --- /dev/null +++ b/txscript/data/taproot-ref/66fd2e2f42f7b15c03f46c8f5852fc2b2a1288d4 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc8010000005c7f094c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fa01000000ae244f4003c3a18000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76e000000", "prevouts": ["182d500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1323200000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_17", "final": true, "success": {"scriptSig": "", "witness": ["a557fb53d5dd4d98fed94cf44dc84912bc1fadd1b2aca3adadd333dd19a5140a9f9527657baa3b3c427ea0f353d50903358cce00544d502e89ae55ce8ebc1ae801"]}, "failure": {"scriptSig": "", "witness": ["44fb34676b9daad624cb34574a24c03c9c7462532b7af617679445f8f653e3bb135b83eb1acd5444328e785c0686ddc87a64a227412ecc3cfb7a4370e921d09017"]}}, diff --git a/txscript/data/taproot-ref/6723a627907cb1d91034b75d6a69d055a9d2a9b2 b/txscript/data/taproot-ref/6723a627907cb1d91034b75d6a69d055a9d2a9b2 new file mode 100644 index 0000000000..b38d733d28 --- /dev/null +++ b/txscript/data/taproot-ref/6723a627907cb1d91034b75d6a69d055a9d2a9b2 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c290000000006481d8560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e0200000026bb47f7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5601000000f8a95f8803a645cd00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79665a0ac45", "prevouts": ["bc855900000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "782b1000000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7", "077c65000000000022512007a606ac1d369bdfe9b32b88a4b0d4c507785f2481b337f6b3340196eed3e896"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93610658657c9e95ab5519a432137c3fc0dad6c728261b2de6e60ccb78b9288ef57"]}, "failure": {"scriptSig": "", "witness": ["6aff616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/674c86a431b193721af73dfdf07aeef65a7ef508 b/txscript/data/taproot-ref/674c86a431b193721af73dfdf07aeef65a7ef508 new file mode 100644 index 0000000000..e9278f1e3d --- /dev/null +++ b/txscript/data/taproot-ref/674c86a431b193721af73dfdf07aeef65a7ef508 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45600000000205bddf760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700d00000000c8f1b58b0186fc1f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478744990c28", "prevouts": ["28b5380000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "36b6110000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "9d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936efb1adbb630f4af208384c658773c47546649f7183045c3ea461c7241e38f37a96b892175c0861377cad04fa4faba87807216c52ab5a24eadee36522f056d83a72756956c694637235f847009e8e23b8c05283b4a047903b3fbdb647ae4209c1"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363e053c547386d418b4b4623c4b95365b560c64b1d3965d2e285700304f83aa6fa832c2593bdac0cb0b42624935007d1442180dae3fe4e49dcedfd3101f5729d872756956c694637235f847009e8e23b8c05283b4a047903b3fbdb647ae4209c1"]}}, diff --git a/txscript/data/taproot-ref/674e2feab074ca0240a6ca55826b14e434793461 b/txscript/data/taproot-ref/674e2feab074ca0240a6ca55826b14e434793461 new file mode 100644 index 0000000000..a83df62ffb --- /dev/null +++ b/txscript/data/taproot-ref/674e2feab074ca0240a6ca55826b14e434793461 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706d000000001f9bde91bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf790100000000c42cfc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48601000000dc5b1c9a012caa0c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc786000000", "prevouts": ["2d69100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0c5769000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "3b5e3e00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902324256e2ccc712f51e09bb2517115ef3f7d8a0b9905ddff3a19af56c609f84b271fda4c990677887bbec1909e2004e70b01999a19e0f45b9ca2937754ce280b0f6b15ab303eebe6ee7e8f525a07ad9f1e1d9a2fddace045a288801d86f6069f79a21230c4012acb552f4af8824477a6ebc0029055d84046afe75c9db4a4a3ddd864bdc9accd9f215ee739f9cd4782438b506a0abcdd6c4ccbfe5dd4121710991a16b48dc0e72c7274073c99b1712817745477d40abec6245cec3c2d7a09b08d1b90bbb6091faf2ee768ac019fe91cada18ca141aa15a18b67475b10b72af3fdab7411a9a718aafda9685801ea862f0b36937d976cfdf621634e8c4a45ca4d754e0cdc4ddee4d28a1588ae9915a17821f85c77516a8b2ce6412586dfe1df8300592e31e3624b97350d5a0b8eb0474b7f739ea2e5b8991bbfba615b4e2c8249f61455993d52150af9f9527d8aa9e3af858af12af1bde8dda5c0e5dd5a98b2f62d5198e7c1f3ef2c6bf0abe407d29c33ab2368eb52f70cef85cf2c44755579a9efe174ef85c74017bde4ca326f1fb10621744b566e005f1543680d6f392c23fcd4d9098e4528d8916bb05ebb6b633e8c7f950fde48aafd21c1f816e473169d6129f137a04e9db776cd6d04222236537c5aef746e4fe8b174a2e9b2f238918163d1d04a3af1c1e418733418e1dc192b528061e6dc99d67fbb0728541d1e94ecd82533e9cc129bd101cc29175", "867d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363cdaa0eb757ae0199db07cccbb4145c327e3e07b9779dd9bc3db969b58b973854fc7631352e9fb39bf71f46c116b968047934be68cc4b25c7eb80a8b2383cf163ac108bed01ff7a3c4482bdb9637a0c08eda3eca9d378124f08be0fd1593c53eb98f84b0d7d6fcb38bca0562970da4fa4ac9189daad947902c07179846baca90"]}, "failure": {"scriptSig": "", "witness": ["4d0902571c8fc7b5aa059399c097dd92a905775c5319d995c2a7dbcaba31488134af38d3d89b7616112e7a93845dc38d66ee0ac381b6497028b516f57418335a224065d23dd53729eab3be7b296b5de82801637397d7454dc2e25fa7685c7e38133a188f7ae057c5cbc019ce883f908a819c42a7b83e0dceb87224d5c9d387944d0a8b7ec6a77ba4d6214d9a42af110635a1333ed8be52af9ab59803c22da1c1f6cfdd09d387f18d5a80a2f1d90b58c25c32a2275528b969ccebfe6461cac4ae9b223603e48d7b14c21b63417c2034b2308eda9e867de2f2b65a4a461d5c55fe7489a536747587a9ca33d74c34ccb9f41f43a17ca1bf0471b069de785a10050a3b2650d69ab27354a5c3f3e1390a4cfeb2415180c4b9b2d356afe640fdd482c45f0f7f2218459c308b09d84326655ac4fa3bd995c64da57c81f993bdc8c4f1547c1a28d09fd18e95cbf1e6a3a42ca2110aa48b60b2a16daaf4eca7c00cf0849e843662083768fd24f17c0efa7524f9b6b6a179c45bcd5498ff08d7e19d1065261d869e0fab148298dfe458a63946b62018ff11e75d13f09f8414e8dace3a89558cbdca6affe97958092fcb5d95293055e1ad1811dd54a9093b60a43af84ca99363e595105e8095bda457165b6b03cbf5a7c9df7eea5c4de0ea59243665b570df78c47cee7d8901f6ceb06746475320911adbc77f16d3815b07a32d4ffb5f1d175cfbd3f69159b01fbe43d43575", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e80adedab43a8ab423f9b5916bd9a862eb4f524e14c7176baa6699ffba0690b6e8b98f84b0d7d6fcb38bca0562970da4fa4ac9189daad947902c07179846baca90"]}}, diff --git a/txscript/data/taproot-ref/6766fbe9f961609fc3c2e2dbb922ddf1dc771d96 b/txscript/data/taproot-ref/6766fbe9f961609fc3c2e2dbb922ddf1dc771d96 new file mode 100644 index 0000000000..021ca0fa4d --- /dev/null +++ b/txscript/data/taproot-ref/6766fbe9f961609fc3c2e2dbb922ddf1dc771d96 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c424000000004c7ffa9e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270120000000067fecfca02e2db4a00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc71c501441", "prevouts": ["8aeb3c000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "adf20f0000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063db68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0d54e6d4b188f4ba3829c97f16419e7d7896d7c05fe6215d1417ce194d9971cb9e3dda2dfca806ccc9c3ad62846e64b9ac16121de5d926db5bebf2e82f8dec8d2a"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936120d11d3534b0b29d9477622fa88775a27b386783982fd9652b8fcb86806fa8be4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0d54e6d4b188f4ba3829c97f16419e7d7896d7c05fe6215d1417ce194d9971cb9e3dda2dfca806ccc9c3ad62846e64b9ac16121de5d926db5bebf2e82f8dec8d2a"]}}, diff --git a/txscript/data/taproot-ref/677c2fb0bd66dbf157aed281b05b92ad2c197c37 b/txscript/data/taproot-ref/677c2fb0bd66dbf157aed281b05b92ad2c197c37 new file mode 100644 index 0000000000..f81e2f7ea8 --- /dev/null +++ b/txscript/data/taproot-ref/677c2fb0bd66dbf157aed281b05b92ad2c197c37 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700302000000ab56471b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41201000000d13155dc035cd64100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdd5eaf2b", "prevouts": ["b4e90f0000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "38243400000000002251207c84ae2d9063cc63412a30e00823aa01b05bc54bcf6d9936dc1c650bbdc9e98b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "a37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2f8f33b00019c5a92b78a4d0765b6724114f5676deb8014962e3b41b4c6baea3fd3695492b964dfcc45d3a474d456ab4db8430bda5885b2eccf08499e11263dad2054b94cb6efba565738f5dbf6ee5a67458962b65d77e1cf5e0d2c1c00b2210"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e1bbd263bb9b57787cc1695f6735ee6aa4874511c0d77def079ec8f767826a474cae923b25d556389dd5dd645f6d7ddd89a07a74a73dddd3d85d7b65ae33798aa"]}}, diff --git a/txscript/data/taproot-ref/6790425ac6ab89b1bf9e69e61d0a23def2470c84 b/txscript/data/taproot-ref/6790425ac6ab89b1bf9e69e61d0a23def2470c84 new file mode 100644 index 0000000000..a79455f15b --- /dev/null +++ b/txscript/data/taproot-ref/6790425ac6ab89b1bf9e69e61d0a23def2470c84 @@ -0,0 +1 @@ +{"tx": "0972a5e80360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702f000000002df915e3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0d010000005dcd57a3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc0000000008fb04dcc0287d9c80000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac77000000", "prevouts": ["915d1200000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "ec355c000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7", "26b35c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b1", "final": true, "success": {"scriptSig": "", "witness": ["d02f2370cc311fdaea8d390cfa1c63b0eef7d0ea0cb51421ecec6c381cd6cf992956c198c54e508542ddceb10ef1876b5a5fc8c5264bd02bb08e399775a6e603", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3f5405c60901045cf8fbd21b5f236cad6076976eaa41fb829aeb8c9ed18e1fda3c10a5b23d4bcb0d29cc4699811c7889c813758769510ca9297c0ce8bd5cfe35b1", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/679748203674073239d2e5a0f7f9da26bc60feb9 b/txscript/data/taproot-ref/679748203674073239d2e5a0f7f9da26bc60feb9 new file mode 100644 index 0000000000..ef8efec2d9 --- /dev/null +++ b/txscript/data/taproot-ref/679748203674073239d2e5a0f7f9da26bc60feb9 @@ -0,0 +1 @@ +{"tx": "a48d03e901dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ceb0100000038ff23fe03ebf15b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914719f78084af863e000acd618ba76df979722368987c7030000", "prevouts": ["47925e0000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090249269449cb326047a10e121b8baf579dfc910fc86d8756d3d64a30ecb902b60983a6acffde72b37d73ff805d4a067b5bedbfe5dd27718bcffa1f513bf206fe3bbd445eb62ec5e611aab5e81966239f9d22c150c70bce2542b910c00533d1e6c1422b34a4b9872249ff0e032b1cff26dda1215a8a65b8fc3a9c4916faabc1fc866f9d98d4941e5fe497f94b8d6295c6dadd9e6a2bec9afae7206d31784fb40cce579e518d3c72919c72abbaed9dc27e5dc690e202529f0923eaa67d0713611842459d1af9c8c203b30001e91257090201acf15969ab1014213dcaf3a6c0588bca46fb0b2428f48349c3aba1e9e9eaf55f960d9195af927770bbe5872508bfa63938d125a7cc7a745f5bda9a895981eac471b1e9ef053bfa85c1d0aa0c51a2f910868246ef88aa33c88d8acbba6e1e5d4ce1730d298ee2350e93125ab9b7a5d5f7d394f5290e5d6499d02968ebb90d19c22c3d331d0ed6190e756b23e246d840450f0183b41de6f839688c02083164ecb977277c95999208db8225a093cc11ecaf834b54efe26953d7eba8d5c35ade50bbab8e1835e8f14c9380038a8e77d7235490abb1e3773be0a8cf3ea5e5c8bb356d76acd5b0f03bf41e3110f7a8c159b060c9af9963c3f4c6b47603425ceefe47087cad7ea8165f01b577821038a8b4624d39272c18edf602e0569a235770f31a4b58cfe15bfb9a51b1f0165a98a57034057028413da99d88724775", "147d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369dd73bd5bfb795bb2efbe9fe3f0d415ac42feb9661e311246ef70ddb758e793a9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100efb63111b06c7a0ce3f44d9f6906db8fc60057b72694cfd58ed25db88d188e5fc"]}, "failure": {"scriptSig": "", "witness": ["4d090299631bf7d4f8df9b4cd3e194c46774ab087eb57a2a7a8d07162b82c319d70d52650ec87bff9d6bb08a7f411786e6f96a2468dec2f411ad741b81c63ac3618d37e32b1837fbe49be9bacce1d49b6fa3bdc190163b2993f77dfb8f0aeb0ad9b0372fbe9b5da046332153ef0f16d8f7c336bab5295f4eef3adcbbf10f9cf95d1d0a9ba283033f90873a908540b2dc91e6b3eda6b9c056bba2385e5e428d90f215ba411e685941f2690910fde28d427d5d837766fb1e7d9e7b517811e3642647e8bf345b2d07ec5bf3491d34a17cb7c2b91717e6b681433d892bce179c28f95054a99ade9e509600620efc81cd577f9ba7fa90b7ea844c5d1d22cb104c38032700293bf8bbe4ea3da72bb9b1c446c351ec9366e52c226f0784d4e94e489126de7351f1e13bae76efbe72ab2bb2ed864f77f061042896fc35aad9b08b6d05ee30c732cf0c4c87cf634e5afe6cc67912a18306c5f9df5073c18294ff832a16f1647e6c2ef6259d751b7eb5538365496d07f08450d06fffd6cc260e038a3a9d48907d9ff676471dd0b74b52e30d8d5a3020f1e398e73cfec7729acc0452412f43a95453e5b68da12be11d77f978e5693310dbb4589411997134cb5c4703b010120086dcdf5e253d4877ca62065237d1946d1aedbb650ea7137825ed36ace21e8cd60537a1b42561b26c428170d1ec4a67224394f7ce85ad8016777e39f730f2edbf57b24dc156d62826811e0f75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8fdc2d7aa80560d1a81b9ed628b4b72c1af718550327182f7e69256034992ba893488b030fbb16fa8d50c4f1f044e6df81cbeac111f0be15e3f466e559374b3e5568dbaf979cca58396dcf271ee6fc736edd00965a3b0ecce9c87347ff88ab08a"]}}, diff --git a/txscript/data/taproot-ref/67cfc5cf8010d9b1c152301eae06d149589112ba b/txscript/data/taproot-ref/67cfc5cf8010d9b1c152301eae06d149589112ba new file mode 100644 index 0000000000..d0e5f9ca08 --- /dev/null +++ b/txscript/data/taproot-ref/67cfc5cf8010d9b1c152301eae06d149589112ba @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be9010000003b4ab8d18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49301000000992f62bfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c36000000004f65d726032c18a700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5f079022", "prevouts": ["617c220000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029", "dc55330000000000225120884291612dcc22b2c0e2cf19d55719f5f9dfe9624bd12dad94712b18ad4d330a", "c6da520000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d5cfcb01809ee692b36a4c346827dc2d7fb8406b64058641986dd57c7b689372"]}, "failure": {"scriptSig": "", "witness": ["6aa1616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/67f26334e58a0356529496d89738359b7a8dd136 b/txscript/data/taproot-ref/67f26334e58a0356529496d89738359b7a8dd136 new file mode 100644 index 0000000000..d6651d3cda --- /dev/null +++ b/txscript/data/taproot-ref/67f26334e58a0356529496d89738359b7a8dd136 @@ -0,0 +1 @@ +{"tx": "896c810602bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfee01000000fadb3ee3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfee00000000d2cc268d0308cbd900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df979722368987e4000000", "prevouts": ["7dd76b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f3956f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e1", "final": true, "success": {"scriptSig": "", "witness": ["22b1a41c5ff182d73532b7af01acf7b278eedb842baa8d5673e0e1c97e39421fe359f38f6ba1508d7f043439a9be3f32fd916c5f31484fd84893cab9c98ae25c83"]}, "failure": {"scriptSig": "", "witness": ["5e2469fd440d3f05159d931cbd94637b1b549f11501eb3fd2e994aff16fdc10660caaa048399316d746ae8d25875ecd16764e28ff7c70aaab93fdcc6cdec20f0e1"]}}, diff --git a/txscript/data/taproot-ref/68052b4483af39b51b45980874124e3793c72420 b/txscript/data/taproot-ref/68052b4483af39b51b45980874124e3793c72420 new file mode 100644 index 0000000000..5a6ae99e4b --- /dev/null +++ b/txscript/data/taproot-ref/68052b4483af39b51b45980874124e3793c72420 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caa0100000063e069f98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49701000000410c148c017dbf160000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e712fb6959", "prevouts": ["8d71480000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "40c43200000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "b37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb9ecb57c15ba33b94e28a5bb7b52abdb34f711a224c068b58d3581d180ced2335a4766d58ec26ce2b4efcbf65574b66558d9985cca85178600ded982bb1eb8a33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a368ced990ebadb111ebc3982eac7e308f07f99a9264ca6c949f56162916d7884"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e46f47172cc098fd97d2a24de1b24a28ec1a07dba8121311e99b8793de3d58a2c368ced990ebadb111ebc3982eac7e308f07f99a9264ca6c949f56162916d7884"]}}, diff --git a/txscript/data/taproot-ref/680f37fd69b7d65b2bea1f6968d0d19d60d93bb6 b/txscript/data/taproot-ref/680f37fd69b7d65b2bea1f6968d0d19d60d93bb6 new file mode 100644 index 0000000000..839a0d3aa5 --- /dev/null +++ b/txscript/data/taproot-ref/680f37fd69b7d65b2bea1f6968d0d19d60d93bb6 @@ -0,0 +1 @@ +{"tx": "24ca7fe402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6b01000000e24a61968bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44500000000ca3ae0ff013c003800000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88accf07ac48", "prevouts": ["577755000000000022512054c099d7cf7db0853ef8782c8a4f2f22d5ed4b1e2f91866bde088ab8cd4c1400", "60373900000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000096", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e5135059a6e03da2faf37010c543c3df76a3376febfb8fd92f682776fb9c956d6fcd0fab6a67c3bf230276b49a6ca24f17dacdd3ceaaa340a5ba0b2ba475b0ee81a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ba1d7044f76185c852e3494a6fce96de1fdde778c7130ed924b07f57193456c18c78e356042728a8dc5293f4719d9544479381d7bc53161d8023b722566e5250874a9774daa89f30be275a1ff5113653dfa1548b9628ff9725cf694401ebdfe4"]}}, diff --git a/txscript/data/taproot-ref/682b9ef29382e2d77b5242e0860693527c825702 b/txscript/data/taproot-ref/682b9ef29382e2d77b5242e0860693527c825702 new file mode 100644 index 0000000000..ec68f31d63 --- /dev/null +++ b/txscript/data/taproot-ref/682b9ef29382e2d77b5242e0860693527c825702 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4d0100000097b2f1d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff300000000335a90e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43900000000f069d69701a1ee2600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aceb020000", "prevouts": ["98775d0000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf", "e37b73000000000017a9148462ed29696925d7688e1db8e76ef9e6667f05b287", "74ed3100000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d068", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a3792efafec61e3ae0d1fe66ad279b80b6a6067d0a217ee4ff0d115ccd768a971469e71666f51d71b691366cd88792f62b60965457ad0f8cff2baa31a91ced83d191de94316b2d555b882a7ea052cdcffb2858bcf3e9dcd4db66bb89a9914d760d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cdad8b7f4602765077dff9aa4c4351956f6937ba55252f34491fabec0d3f596721cddf589dd211ac28650b11a57c9c7761090d2defca181b3dbd9260ba7b6b1d191de94316b2d555b882a7ea052cdcffb2858bcf3e9dcd4db66bb89a9914d760d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}}, diff --git a/txscript/data/taproot-ref/68560332b36281ab2ef6e177361019a087666119 b/txscript/data/taproot-ref/68560332b36281ab2ef6e177361019a087666119 new file mode 100644 index 0000000000..10743cdd27 --- /dev/null +++ b/txscript/data/taproot-ref/68560332b36281ab2ef6e177361019a087666119 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703000000000fd549f910445780f0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e703030000", "prevouts": ["cc251100000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364c3da4617f1ee0f61cdd6b0c3800e0774a5e631cb6cd048785fdfa88f1b1ef57f81a0ae7b640e88bbe84e7c412f47337f1d12d37f95b062c539998fd28213cbdf3b3fb8d5121830dc5ea13d084a01bce62f4c2426ea7fcb92dda33a6ec3d9661"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef4a0b996a651997ca76f2d80ba069e4ceeac28cbc038cb062656a276693f78c3bd101e45a609d3b8e0b3b6f0b7594624f7e9102ef5d5dd3027418de40ebb2180d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}}, diff --git a/txscript/data/taproot-ref/685bad2808b9ebb6dd3bebf554aba2916e169a21 b/txscript/data/taproot-ref/685bad2808b9ebb6dd3bebf554aba2916e169a21 new file mode 100644 index 0000000000..b62fdb5b22 --- /dev/null +++ b/txscript/data/taproot-ref/685bad2808b9ebb6dd3bebf554aba2916e169a21 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfa0000000056f07197bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2e00000000e97e04addceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2e010000004e146fe30155a353000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6ed721a49", "prevouts": ["41e1250000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "b7c76800000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "603822000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063ca68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360933b5913dd2a3e84067c9c541247d08bdb55bc364eff1883b3d8a61fdf16b63d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c1012b923c15ff4ca5711684c82f77f7d0ace9e417918255ff860668826001128a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c1712c20a07a0457620eeaae766c8e6d37825c65d24f292e9d3da524b2ddb2c1be01dd809c80d07fbb65649666935b9712ecafc77e536b2a27c3cd6425d00c1ec7034c4ece6ceffdf067bd97d8bd2a80e986f14e8b5dca33ff1523eba7a77d63"]}}, diff --git a/txscript/data/taproot-ref/685c94cdfdc42c71493f0fbf86f6cc75a2bfe7f5 b/txscript/data/taproot-ref/685c94cdfdc42c71493f0fbf86f6cc75a2bfe7f5 new file mode 100644 index 0000000000..da7e77ac11 --- /dev/null +++ b/txscript/data/taproot-ref/685c94cdfdc42c71493f0fbf86f6cc75a2bfe7f5 @@ -0,0 +1 @@ +{"tx": "7b13900c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b76010000009ad734fedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4b01000000c5b820b103cef56b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e745000000", "prevouts": ["0177270000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "43f5460000000000165e142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692bef2ddc6a80d85c82e7a0acbf372ad032dbeb6650a3adfeab3820e5dccb400d7b73fe79aa50781a03db77b9e22252058e372f5a0275feae864cfaf4c2a217ec513aca5799d408eee0c275015e54cf6f255f9c56741048ad8672ad33d4825d8e26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93665e98030e68d3feb8f9ccbdb19e208fd51005dad116ab71fa8ee0a355037b3e1709247cbe4599f1b40c45655be9c4524e18ab036a38ca357e6d7c21966c7872b33cf35ac099042702f37424b07b91f05c9425e6e1d18ffa37c0a546b69cafd337007ac6d9f1365651a4d55e6df0dcb109d268cc6c386b355a4997173bc95c886"]}}, diff --git a/txscript/data/taproot-ref/6864a32b8e40345c0b76999afe5f1c070d474908 b/txscript/data/taproot-ref/6864a32b8e40345c0b76999afe5f1c070d474908 new file mode 100644 index 0000000000..5659876d09 --- /dev/null +++ b/txscript/data/taproot-ref/6864a32b8e40345c0b76999afe5f1c070d474908 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21000000006dfe2883dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc201000000b98404e201166f0a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a627f75b52", "prevouts": ["6cbb5b0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "dcc01e000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "f07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e829259a32967333cc74bf44ff096d479961194fa0f97de632ce420fba7b687b9321741bf2762a3041d275698fd56a81520b6404e88c31ed080bdecc36c09cb10e"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93615d9371bc52daa468585b81d9a616dfec30fa985244c10c6347844b2dacd11a03e6b1501de3c77a58ed25563289f7380fad902eb870a0fdd7293169316d7b75ff88c7bee1bb9c109f1c6365501285b6447b8ae029d34f47d1dd1efc50e8947b4"]}}, diff --git a/txscript/data/taproot-ref/6864d1927bc63a92a60460a41b2a104d48d49e0a b/txscript/data/taproot-ref/6864d1927bc63a92a60460a41b2a104d48d49e0a new file mode 100644 index 0000000000..d9e301cd74 --- /dev/null +++ b/txscript/data/taproot-ref/6864d1927bc63a92a60460a41b2a104d48d49e0a @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703100000000aae7c1ca60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127001010000004823318f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270060200000039d291e50304902e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e70b3b865a", "prevouts": ["076b0e00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "6753100000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "176f12000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "1f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e576fdfccd5cb93347e3ba64a7809a8c9fb7be90a7e18659d0b981582f285e98b3e02c0e1665e1d6a4b6ef98a6ef3a3632c98688db315e4c8eb8907479035d72"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936220439f899a0db699c3bd5563527680191a7809c0f178d96b69d6a5e01a1309ada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8a47d733f2ac96a3990499de942ef9a5afce6e4fdb28ae911c182ccc4b722ed2ed661e9ebd30f651fa020177c2a1e4ce51b505c9194e43d6074b392863f250ba"]}}, diff --git a/txscript/data/taproot-ref/687590a8d9eb9f62d77022572d103d4c5adc9867 b/txscript/data/taproot-ref/687590a8d9eb9f62d77022572d103d4c5adc9867 new file mode 100644 index 0000000000..3a2b29449f --- /dev/null +++ b/txscript/data/taproot-ref/687590a8d9eb9f62d77022572d103d4c5adc9867 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127014010000007885ab88bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3501000000d8098c37dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0800000000ce51b63e0198b6c300000000001600149d38710eb90e420b159c7a9263994c88e6810bc7bf71183c", "prevouts": ["2537120000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e", "5971770000000000215d1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "58b05a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ac", "final": true, "success": {"scriptSig": "", "witness": ["b4f7a89986206bb57be108f2587503325139625ec4adacf07a04d254fc9ada78e346601951c0ac808362b101028f3b8943716321a9b11ced5fefa304cdeb6ada", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7a608dc0f7d86f502dbcf40071a0824808709a0f90556d79dd4a8769a8f4382721bc45741c406121d867b44ea1636c09d50462631f6c4b1f522da1190f663f06ac", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/687648741dc59ceab592c14d35fa96ac27ef98d1 b/txscript/data/taproot-ref/687648741dc59ceab592c14d35fa96ac27ef98d1 new file mode 100644 index 0000000000..1749d6d0fd --- /dev/null +++ b/txscript/data/taproot-ref/687648741dc59ceab592c14d35fa96ac27ef98d1 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be301000000fb36def3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb301000000e6af33afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0c00000000754fa2b201d3161100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac7fabae57", "prevouts": ["c6bf250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b787490000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "1205240000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_39", "final": true, "success": {"scriptSig": "", "witness": ["0dab70a6fb2b5c835fc49da75566c5dd7d0d65403cdc08ce6a89060a5fa82e4319f8551389c3e13d604e9db9e69dcecb2e493ff5fc2de8225ed213d11b8d84b003"]}, "failure": {"scriptSig": "", "witness": ["f01f4ef223236aefb003b32d2e08eb5ec0d2bfaa4f7df8addcff85e63022d39078518400fa18b1ab5a59ea7a4d6b5faf3fe5a079d1fef82145f2bf3819f5e4be39"]}}, diff --git a/txscript/data/taproot-ref/6890f89ae85a96d458a2e92ae84db78ff5a3d8e4 b/txscript/data/taproot-ref/6890f89ae85a96d458a2e92ae84db78ff5a3d8e4 new file mode 100644 index 0000000000..3ad3da7344 --- /dev/null +++ b/txscript/data/taproot-ref/6890f89ae85a96d458a2e92ae84db78ff5a3d8e4 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0f00000000fea24c75bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0402000000ffd0d85002b76feb0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72e261f40", "prevouts": ["aca878000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "3ab5750000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e17387e8fdb6e1953b8492ce494f93b549856be52be3e0b2251aade3a72c8c2c0db79b88164a8f67b1298a482dda9483af1363bdf02371c7e121a2c285843f3f1e449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c8b4938871a8e43bb69010d25957b1b3dd5e0f775cf541eef5db4a9b76fa4cf4c71af5165e16a75a4d38ea496516a466796a1cbb48ef44578cf258de537130fb0277e21fac1036469cce09bee47dd6f35fd38d265061a05632a5c9d8280907c6449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}}, diff --git a/txscript/data/taproot-ref/6893c34edde19b9be594417a3321f7522c83713a b/txscript/data/taproot-ref/6893c34edde19b9be594417a3321f7522c83713a new file mode 100644 index 0000000000..f1ca122a06 --- /dev/null +++ b/txscript/data/taproot-ref/6893c34edde19b9be594417a3321f7522c83713a @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3d01000000da98460ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8401000000f6fde8a203bc4d9400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c147d44c", "prevouts": ["fc6370000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "5ab02500000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a96", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cbc2a23a7d8296d4ada3bfb9f5a799f80f89c8192169ead6b004adf320674e5033a51c0dffe7e5434825b6cc7212f0d90dea7a5d3b9982f8882f19203896a3c56fcd0fab6a67c3bf230276b49a6ca24f17dacdd3ceaaa340a5ba0b2ba475b0ee81a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bbbcd71201d7d2549d70d2328372419fb63309196d1406c01d663de3764feb62b186acb2a5feb9ca494b2668e3b95b217c5b1a118ef72c41b67fce4e6b051c90eb4e626fbd1c5a1d96a595c16e39be42f50aa7a1faa8ff1a1c0cc640b6e10eb9874a9774daa89f30be275a1ff5113653dfa1548b9628ff9725cf694401ebdfe4"]}}, diff --git a/txscript/data/taproot-ref/68ae4d6748f33706497031526da5fa76f0c923a1 b/txscript/data/taproot-ref/68ae4d6748f33706497031526da5fa76f0c923a1 new file mode 100644 index 0000000000..ed60de8803 --- /dev/null +++ b/txscript/data/taproot-ref/68ae4d6748f33706497031526da5fa76f0c923a1 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2701000000e971dabd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e601000000fb959bc7028d473700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a660000000", "prevouts": ["241d270000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "0c0a1200000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["cb4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936140d663498a4274ecf7f45240089a1df766efe22ae76bf8a987a78cbf23a246a1937db199a07e1996385ab03857d8e2ee63e136796e4b408281aef544a937c0c73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f551d5f9df51039c21b920ecc011c032a9913b031d76462e802a27cbd0d0ed8dd6d723e038e6335a667e0268d00f4826306437ee84552cc7f8172181160444ef73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}}, diff --git a/txscript/data/taproot-ref/68b62ec5b8680759a52e8934526dbf400162c104 b/txscript/data/taproot-ref/68b62ec5b8680759a52e8934526dbf400162c104 new file mode 100644 index 0000000000..431c5cc248 --- /dev/null +++ b/txscript/data/taproot-ref/68b62ec5b8680759a52e8934526dbf400162c104 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706d010000001db75c8f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e70100000040edebc3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf710000000010bd48dc0265f7b6000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc3fbaa343", "prevouts": ["9930120000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156", "dded350000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "1558710000000000225120ba259941c99089f87a1bc06d64ef249f01ab7891d30169746f94b5a6d9357ae2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ab7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e1084d1aecbe4c7880bb8a882fc35fa9ebdfb0d7259cb873bd54dfc151a0965e70144ecbe7fb1e6c18f5b14cfe26e6e35ca66fe7cdb676ad740673ee849f6d44e7c07bb1aa10d02d314eb70c923196d0e49e71087637e2d5a1d7fe44c2440c398"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa94b0c937046f490030e0d20905ef6ea85b70027c49d9391eab6e36e103b9e792f3dd0bfdeb3f64daf38e1101738c14790d5f1c68393c583b55b6fea5718d19818cb303569f28fbe8acbcc2d27d183e3a68170f5392df28f40a03efea695d856e"]}}, diff --git a/txscript/data/taproot-ref/68c6c0d42504385245c61282657b3afb267a068a b/txscript/data/taproot-ref/68c6c0d42504385245c61282657b3afb267a068a new file mode 100644 index 0000000000..1b16d382a8 --- /dev/null +++ b/txscript/data/taproot-ref/68c6c0d42504385245c61282657b3afb267a068a @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3300000000fd918ce48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dc0100000057bd5083dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf300000000c9b3ff710361ce9d0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961aad1f34", "prevouts": ["7dc71f00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "a33834000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "59974c00000000002353212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "5a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f5a747f2c0893f79fe153ae918ac3d696de9322aa679aae62051ff5ed83aa502db79ef349d3e4f05529a42271c6cf93f8e06fd8991a688edddf7288612a03eef8b5457f6f65490151d40d3d05d55f9c92d8dec73c7aa55a79aa7c51354918829c531ca70e78518003474f611c07657b0808402a053b744a80e6cf25146bdf24b"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0f84c5967c23664bae19475758c80d637c70256aa4f8440547e3702c69f37ebb4949da8d2968254411aebae49708200d0b19b59a844616925b107b397a8b89bee9c212f1ab0dfa1a42522b9ca3467b009d36f3b841f39cdc4da4a0520ce4fa4"]}}, diff --git a/txscript/data/taproot-ref/68ebe4901e5b73c0d6c376b14ab93cb27b6b9b29 b/txscript/data/taproot-ref/68ebe4901e5b73c0d6c376b14ab93cb27b6b9b29 new file mode 100644 index 0000000000..1b06240cf0 --- /dev/null +++ b/txscript/data/taproot-ref/68ebe4901e5b73c0d6c376b14ab93cb27b6b9b29 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3101000000eae4e7e90370872200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79619010000", "prevouts": ["5b7b250000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09022f9ad783d94518a53419533d0ba556a28c40c576bd961d392d21fecba958cd5ed244f61562037b43c30e20c78eb20b2bf5f2ba2fb6058f3e6e1fdd05c56e8a54d75571060e983ce0c5dc7ac0009c119ceaadcb3147fd13407074ae267fc26afce241cad575953b8cca2778894c709284b34dfe2956ac9985026f376388e418738fabf5c9f6690dd8587198f4e1ff7d71ec79f6e4dc95a66f6d99d2d7534a367f2a3b164269d3807c3f32a860066f2a4646fbdb5f1905cfb8450cc437b41c3014f1dd201e31d6f0ad531e7498fcea50deb7610b375fc44156b8b49b1081830c66e9e7fc7b86187dfc255966918178fed022908e386cde03521f70e85d90f6ab4391cf008d0df8b5d95f800770605c9ce9906362bc9d7e76eee2fa337a864dd52121591d0c5aee89e0cb8cce92bd26e309e8f2495fe57b24a8b950d98d0f9a0fee209b11bc1f96af9596219c4ecba28de97f0397601cf4c5dab3c91dd5f8f682d18806c13f63c78905f0c0a71f314abecc4a29c00a67467c42f5b2e55f3dced9fbe2b6836ac14c52517852792b7979b155996bcc54f993486b0c5213588d68557b52d1ed57dce4c483044c3e7e6258094ef129a63d6548121dc1481968712ee329fea3090f7903a7e5dab1262163108bc172cbaa307c503715cf970569950b41b0335e106d6a1ece839e2b78efb74f63059d5ba63655013c98ece82bad74b28f6a858deca40350649d6e75", "4e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef65db0c35e25312ba208c3242b68aa03b8861e5321a792f3566305ae352922e80d03cc4210f6c8d536ca11754de7a86c068de81055f4750ba9e0b801f8560f6a4a8046f0466b39966676954eca5d67ee52b1615e6fe46612ea9ab4edfa131fb"]}, "failure": {"scriptSig": "", "witness": ["4d0902ff5c2c0824edcd5ce542426bbd7edb7a2638e5bbd0353dc30e76d6911226baf2dd576cd43c0f12c6c4727ce90c40e551adc54dee75fbb28a41dc196e30ab91b63e831213926aa2bb5633804b904e97da19677bcd29c31618722851f5bcee66b289b775523eb782ae971fbbcc27eca67e2e8116bd42fc4018315d78835c1b2b51f342f86f3371836e9e321ebc03e4028d83fb66b10cced0a4a5573bba11bf02a3614bbd86555d53f494d5b1abaf414909cd68e899a3c65d2af3c93e4ac83c7e99dbbf5e8eb112a51314d557594843b93ed91cedc071a25fc38758ff0fc0ea874a7136f1bc6fc6d00ef58141fc0a37a0acfc6fd05728f434e2ed55732bad355de0e1e0369451d58ec35f689be86ba16473bba3afa0c36e9fb9fb5642b10f6cf649c96e81395811d8bdda0ea23612a08c202eb7c8141b6363a1de1a0119df8a2a4330358e6377f2dc0835e9f49cb0e9409638b39e7cd34488a1463e6e2a9eb71c6c4bc82630877a692a0d1a234bc6d03c35e2e85f6ed73f809df6e4227d8441dd82e4f9040d7d40fbf19033280d1883b24e69c1e2573d0fca560fdaaf14e0a8d407d46c91f4468f12e63394f2e2a813bad02de78eb9a72bbdb9e0e26b7586334bb9d62a7bf8082a5bbfdbca764c0976ab92ff16ab751652e0142ba0702ae8277f9dff9c6ea6ab0d64155683716242729023c0926cc9ab46e9b591330d2d6bd16535f7c542f4210c672f8375", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e9fcb6847defd4ab5435e313e937417091a847a9b6ba01e1bd1b0fdc0d1cd93789d8abe9ca6155576d0a7d6ce7b2728ac84476385b9c54c38b8a9cbf195895186ab153920b849b6028620ffd2b7e486a6f5e2411aa058dab621c72a45f67f5d8e"]}}, diff --git a/txscript/data/taproot-ref/68f2022142d8ce6c1188c67a635ce455d70e8668 b/txscript/data/taproot-ref/68f2022142d8ce6c1188c67a635ce455d70e8668 new file mode 100644 index 0000000000..c20811ca0f --- /dev/null +++ b/txscript/data/taproot-ref/68f2022142d8ce6c1188c67a635ce455d70e8668 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9a01000000b5f930dadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8d000000005ea06fac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127044000000007a558cdd0125890e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b1000000", "prevouts": ["5c0c570000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "7bdd4c0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "fc3d0e0000000000225a202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["15adfbdf2d9a81e924eb07cf93fc65631167ebeb7622328e77506ad9f633cbf6301c16517569b4b305066bdf9a44f200d00aca1696de04b0bcff77202ab867b4", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/68f3ade32553e6641d33ffec7c4bbbe70c966a75 b/txscript/data/taproot-ref/68f3ade32553e6641d33ffec7c4bbbe70c966a75 new file mode 100644 index 0000000000..9e700dc34d --- /dev/null +++ b/txscript/data/taproot-ref/68f3ade32553e6641d33ffec7c4bbbe70c966a75 @@ -0,0 +1 @@ +{"tx": "46adb1710260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709c01000000b5ef5db360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127053010000000d2fecdc02d72f21000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac59010000", "prevouts": ["9044120000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc", "d535110000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/branched_codesep/right", "final": true, "success": {"scriptSig": "", "witness": ["fa0524343816d323bbd31d2f3636430e704d2c13fc1e4184cfcd8f8926c91d01c732b89b2131ea4075dfcda5fd1c7b83816e9e0e666d2c0393563f2b58266e1b", "", "4d1301e76af030918e8d96a5e9c2094c9ba06d0ada8d0810ebc2f79ad890d92025a41b5cd08bdfc0cf7d4c9986cceba43fa0e9be5c2377c104330d94f07ea76f76de7aaa32e78ca0685201fb53e48ff30be8b782d5aacce7aecdb4508fb3a4147892070176fda3b74cad0a6f35c859d5e0d7627ae9b9ca8fdb5a4b5b652d3629350b6e6f11f7de2a627705b189459ee6bd1a593add61bffcce4e74b7b6af7efdd904948c80a13bf6734dd07387413a317d6a1134ecf76aae32aa7cf062cdb54d519d560c7a8549bc2fc161f890e330d20d78dced8994561d3d2bd7cdc1ede9bf9342f772d50abe38243c80d5649d81cd34a40ddfd49451e3305d4428e8856314a7308213c662f7f2d689b318f65bfcd530b15515dcf57563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ccd8c60a773165cc937efb02bc1b35e1115ac0671e1767a3af984f55e4d3c01bac00967532285e5651a233a5d3d97b0c986d2b78702c704bc34e0fc184218be"]}, "failure": {"scriptSig": "", "witness": ["ca47eedab1e22272267f0bbe91700822021f48b5888b39453d754b2bccf2f0cc3cef84fcd8b4969612016f023df66ead1d451d5c00ee9162fdadb086c2091e6701", "", "4d1301e76af030918e8d96a5e9c2094c9ba06d0ada8d0810ebc2f79ad890d92025a41b5cd08bdfc0cf7d4c9986cceba43fa0e9be5c2377c104330d94f07ea76f76de7aaa32e78ca0685201fb53e48ff30be8b782d5aacce7aecdb4508fb3a4147892070176fda3b74cad0a6f35c859d5e0d7627ae9b9ca8fdb5a4b5b652d3629350b6e6f11f7de2a627705b189459ee6bd1a593add61bffcce4e74b7b6af7efdd904948c80a13bf6734dd07387413a317d6a1134ecf76aae32aa7cf062cdb54d519d560c7a8549bc2fc161f890e330d20d78dced8994561d3d2bd7cdc1ede9bf9342f772d50abe38243c80d5649d81cd34a40ddfd49451e3305d4428e8856314a7308213c662f7f2d689b318f65bfcd530b15515dcf57563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ccd8c60a773165cc937efb02bc1b35e1115ac0671e1767a3af984f55e4d3c01bac00967532285e5651a233a5d3d97b0c986d2b78702c704bc34e0fc184218be"]}}, diff --git a/txscript/data/taproot-ref/692178574c30ecc0fe297e53225c7fe6b7047923 b/txscript/data/taproot-ref/692178574c30ecc0fe297e53225c7fe6b7047923 new file mode 100644 index 0000000000..4c95ed4d07 --- /dev/null +++ b/txscript/data/taproot-ref/692178574c30ecc0fe297e53225c7fe6b7047923 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700500000000d5fa4fd7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2f00000000fc361b8a0386bd590000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df9797223689879194515e", "prevouts": ["7158120000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "8aa7490000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "227d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e299ff42588850ae9aea87963ebfdf54b1866351a1c5b06174c8f3cba5c9b3108a2960a95becb1bbbe0636e0493c58f712af9b8da417013d797bf12c130ac560a4a9bce64ad1fc5af22ad5621933415c83e23766bbab20239912b691ace9dee2"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e86a45def9951625cf02c88598f8616d12bef3cc01ed824d79a70edf31b7fbe0e1a4a9bce64ad1fc5af22ad5621933415c83e23766bbab20239912b691ace9dee2"]}}, diff --git a/txscript/data/taproot-ref/692a5e26fd84eb7c487336a8ad5a27bbf550d3e5 b/txscript/data/taproot-ref/692a5e26fd84eb7c487336a8ad5a27bbf550d3e5 new file mode 100644 index 0000000000..2aeac14b1f --- /dev/null +++ b/txscript/data/taproot-ref/692a5e26fd84eb7c487336a8ad5a27bbf550d3e5 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5701000000bcb31209dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7301000000fa266ec5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd8010000005d4ca570010206ad000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d3a8b624", "prevouts": ["82e721000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "d0211f000000000017a914a5f28fe5532719f979169bfa3a31d5746f69452187", "fa38720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2357212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["23afd0f6352c489a263a48cf14d0dd717d50f486dc4046c2eb221875549b4056338600238683b6fbcf4b6791a455c92760fcb8f4ab092a15bba60baf978cdfdf", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/693b4e80b442d5871a480b72fc7f154489eada7b b/txscript/data/taproot-ref/693b4e80b442d5871a480b72fc7f154489eada7b new file mode 100644 index 0000000000..70051d8a6e --- /dev/null +++ b/txscript/data/taproot-ref/693b4e80b442d5871a480b72fc7f154489eada7b @@ -0,0 +1 @@ +{"tx": "9a9e95db02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7c01000000d1dd92ed60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b200000000832b678a025db336000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdfa28c60", "prevouts": ["c1f3270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a348100000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_9c", "final": true, "success": {"scriptSig": "", "witness": ["90b0d723931e2bb36780c33a4088d618e3b2a4b65f90c54aac0cca4b0f367c8803536b5d04eda010945d247bdc5fe6c2ca6d65d22ac962a4da49e11c5d412e52", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["19e4c4dc972df7e0765a345c3a8147c755b37dd40dbc3be82ca5fd75ff50ca5a5414c7a7b415cd8d2981de1b7b4b9ded00950847094007126ad7100fce95ca839c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/693f1072f030299b192b97d19cba8ff9e045ceba b/txscript/data/taproot-ref/693f1072f030299b192b97d19cba8ff9e045ceba new file mode 100644 index 0000000000..83ce6a336e --- /dev/null +++ b/txscript/data/taproot-ref/693f1072f030299b192b97d19cba8ff9e045ceba @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49d0000000063080aaebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa801000000660303ee60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ba01000000be4370b5010fb78c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7d8000000", "prevouts": ["c21240000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "da9f8400000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "a0b10f00000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b79b39d6cb61f48e6672b5ce685325f452f02f77d276e735b3392558c3ebee21de995344388049b948e4027b164fbf3fcb33b41e61c2f73c46060eaa1498de732e4881f4d906ebe4692161c26f2f86178cf5393c151301131e44f1cf86f8b21096ef7b1ca4b123dc476d04b2e3b6400f7ed578e17b2104739df24448a2eace6db9d6eaa43315a18a478b7fdb7deac7553c55f55a5e298f59e4d90f18f3b97de15b7a9211f342491d312d4640e2331123890148c67161c5502b31e8e2f0e268d6c139453a495e88797ecc12302c6d892337a0154e2b2d807662c6eb401cf063914114a603ae9f7d2d38002631449a759e0a5149c5faded1b7da45791f060974075dcd3047d4ebe3751cea6149f2ba8fa49fcd87a7135c1506b6707760362747da18a05fc7533b7c6c0600aa0f60ee7fa9b8b087b7b7c80eea539899d6a3b43454ac0bece29efc3e9ef95535ae3d3ed5087643dceafa5a2d5042ab64bce4d8547cc725c737e0c5143b19e107fd7c9eb5451cffbfe11d2f39bc089897f9e6ad2cdeaa91e221217fbaeadc5ccdddafcbd30432917c3b71915949017a9294e9f89a5a11b2de83f6e856071f064ba75ec27384d185ac5806ad33e0240f779de2fdab524dfb40c1a6c71a76e3f30547e604725a19dea1eff12cad7b9cf9f58c0b0e8f681923b4223a3cdd4e1479ec35a72017bba87c0bf4e5fa6f4ee091475a54e296e013a552f16e73a4040375", "4c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e891faf9d665bb151ea32d070ad80c7b31483dfb68e75e940e326e177970210d6f819d45740b1e9d6e416a8a4978331345395bf058ef0b936b66c7755017d83c65"]}, "failure": {"scriptSig": "", "witness": ["4d0902036721bed1287c33bbbb92e89e0eff42275c7a5a2e4fa4686175c3983daf57c190e9a7cebd60e38e9b04c0000a28da0c441dbe7221fae3c24e21f16b2174379e68e277c25b451dd9c144a523e056bc810bfc8eb54b8fd639e396a3620b38d5af0fadedfece7bd7eab6d55c7b8bd60dabb9bb508ba6b27f83e49f9ebcec5c0dfbca14072dd23125885a7ff1453f0d3d65b8217d3601f9dcfba2e7539a422f0966923cd0cee2a26c48f42e8558ada699cb0bcaff26d2f1d454b14cf33a6f32c907a47774461fa83a98f8130a8a0c6bc9fadbe2b5133ad348b3888fc20e1f0f8b690f0104501973435a46ed01508777e163e60589fd3dc792c22368311a7689c7860a825cca5edc2f116236d01ebba671b7301f57b2beb55e23ef0a5d0718905adf275234471a04656d9f4ef57a47b944d2b40d3aec62937a9273ebf1af5f887188e927ef492a18a53701e1b6f9d50118c43dddb6dd1bb36ae0bfa37d78766eee5ae0831ea5127c280aefa7bf984ce6797f7551ee29cd9b8b26ffad110d12b05fa3b0669a0d5fa19d7c1a775866d7c34f8b869e67c93a6795278b567b5ab2978563793623f81e1eb778c2d0bb2003d28db84870dc76d8507ea4fc3a7ea58661c0e2bcafad3590b3a4e4eb058bd0a92c4f0a8c833b8aeae47f35d70989862b3520eaf6c0833bcbe320489d55529826d1689c940b615a605094fa67ff28870a83ec26a867ff06cafd4ebbc975", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936188aba67a59ab5982a35b0b88af28c395ee73611f1233e5ccb71bc1279e708bb0315d5fffb9cd0a0ee84b5f33e057fa02d78cd067c105b2c4520fb43cbb3cdd0d30287fa60720c35e6546eaa391bbb3975ba5e1722a6124c426d678e7f784bd9"]}}, diff --git a/txscript/data/taproot-ref/696eb3cf37f866313a3dbf40b4af77d45f827d98 b/txscript/data/taproot-ref/696eb3cf37f866313a3dbf40b4af77d45f827d98 new file mode 100644 index 0000000000..f074342ccd --- /dev/null +++ b/txscript/data/taproot-ref/696eb3cf37f866313a3dbf40b4af77d45f827d98 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709e0000000047e9de70bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf36000000000931f20a02e0517500000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc22fbf46", "prevouts": ["e25a0f000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787", "c8216800000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["cc4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688e21e0ba4623d9f1238b4cab1fe6058b8adee7f586c209e41396c5ed78664fb1e80b1f8b709fd7e9f8915460d72d278aa0d12452680dedc295e1cc62d069d9c5f8b38696f7f521c781f821b55aa4ff86c04fbebd102ad129a9d47907becd36b4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}, "failure": {"scriptSig": "", "witness": ["4c52cc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0d00ae7d77688765097c61dd6dc7203a99b1de19633b0fe895af4a245d0fe1ab9735478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}}, diff --git a/txscript/data/taproot-ref/69763ca3d19be4c3d360ac96f990730c211450f4 b/txscript/data/taproot-ref/69763ca3d19be4c3d360ac96f990730c211450f4 new file mode 100644 index 0000000000..ba198cb03d --- /dev/null +++ b/txscript/data/taproot-ref/69763ca3d19be4c3d360ac96f990730c211450f4 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700302000000ab56471b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41201000000d13155dc035cd64100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdd5eaf2b", "prevouts": ["b4e90f0000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "38243400000000002251207c84ae2d9063cc63412a30e00823aa01b05bc54bcf6d9936dc1c650bbdc9e98b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/padshortcontrol", "final": true, "success": {"scriptSig": "", "witness": ["96edcf3d2ff03e75e15cb688a69a9145f917f18fc1907d79b682e3c5ae27ae90b87ff58a7f5fc74786825a9291da4f3f5615625de8f4fc43ca6766bab2c724ae", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20"]}, "failure": {"scriptSig": "", "witness": ["96edcf3d2ff03e75e15cb688a69a9145f917f18fc1907d79b682e3c5ae27ae90b87ff58a7f5fc74786825a9291da4f3f5615625de8f4fc43ca6766bab2c724ae", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2030a5a7f3bb1d8a36740590"]}}, diff --git a/txscript/data/taproot-ref/6977dc4cb03457ddcfe3fb5e4ebd32c7a60a4f4e b/txscript/data/taproot-ref/6977dc4cb03457ddcfe3fb5e4ebd32c7a60a4f4e new file mode 100644 index 0000000000..6ad45c6eae --- /dev/null +++ b/txscript/data/taproot-ref/6977dc4cb03457ddcfe3fb5e4ebd32c7a60a4f4e @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e900000000852477de60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704301000000434e8635dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bab01000000ef552e5e0380634000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875e020000", "prevouts": ["f4eb1000000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8", "4b251000000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "e5f4200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a6", "final": true, "success": {"scriptSig": "", "witness": ["6dc81c0e415de7c9f522a5abcae782ff177bd07390420ae7339bb131c7d0d5cf172296cc98dc31023c5dc0ae8da07aec290eb7c6a91aa8539187d44339d473dc", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["4b9fb81f9867a1b174e1b429a8aea705300f841a00c070da618ad4dafb7c24e280ce9d7e7b9213b692adf7276aba4acd804c8adad309cceae38da850ec1eb62fa6", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/697a7f07151aad714b88aad13a439841eb1d849b b/txscript/data/taproot-ref/697a7f07151aad714b88aad13a439841eb1d849b new file mode 100644 index 0000000000..b426e57f73 --- /dev/null +++ b/txscript/data/taproot-ref/697a7f07151aad714b88aad13a439841eb1d849b @@ -0,0 +1 @@ +{"tx": "66a8b84102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf440100000027cdb0cb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a301000000fbab0fe603154c8c000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc74dc3dd23", "prevouts": ["ff977d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8a63100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ed", "final": true, "success": {"scriptSig": "", "witness": ["82300fbea4eef67691c08244338531c3737a190699728b50381ca4992578a33ca38b3c3450038a813eee1c168a6bbd57e9228f9f672dec6dc57bd843dea76fbf02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["17d393fee9a3b7b3979e0e603de2353d10d9bcff79830d9b76d117cb93629dd7dba32261c6c6933ad072df9d347532d13d7ca5d88ecff20037169053cbb4eabeed", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/69c1c268224ffcce5d6dc13b49962a3c8887c2ba b/txscript/data/taproot-ref/69c1c268224ffcce5d6dc13b49962a3c8887c2ba new file mode 100644 index 0000000000..c78bf0b8af --- /dev/null +++ b/txscript/data/taproot-ref/69c1c268224ffcce5d6dc13b49962a3c8887c2ba @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bce01000000e9160568dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7d000000004acaea1b0404d97d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374873d020000", "prevouts": ["7f13270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "37b0580000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_4d", "final": true, "success": {"scriptSig": "", "witness": ["6342099a527d5a2f27f6c97be59bbba6bbe68b385e8beede02041a57fdea60eab00aa1b932374a0c44ba09eeb42d3524be87050645f97ac42cb1965fbfa829f401"]}, "failure": {"scriptSig": "", "witness": ["400b05938759609eba837076dc410cff019d984f61113e8dd2168b99ece14ca63316079a60765466cc00cef56d29a59088b9d1c1cc078b1fa649ee01fca03b9c4d"]}}, diff --git a/txscript/data/taproot-ref/69d24f5639ca8a5eaf58924722cc313b9936c330 b/txscript/data/taproot-ref/69d24f5639ca8a5eaf58924722cc313b9936c330 new file mode 100644 index 0000000000..85271df79f --- /dev/null +++ b/txscript/data/taproot-ref/69d24f5639ca8a5eaf58924722cc313b9936c330 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127095000000005c767951dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8e010000004a51eaed04d34b570000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc73b010000", "prevouts": ["4f500e00000000002251207642517ca6719fb19e4d50e91940e680bbab7ca2eac6cb77783eaa45a9fa38f3", "342c4b0000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936761301ea059e5d2efb2c92912ea7774ef29449812e7d265e858b6fd1c0b51434"]}, "failure": {"scriptSig": "", "witness": ["6a9b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/69f36a1e1c567e1d5e44edc58c355abb92e23f68 b/txscript/data/taproot-ref/69f36a1e1c567e1d5e44edc58c355abb92e23f68 new file mode 100644 index 0000000000..45e714fe77 --- /dev/null +++ b/txscript/data/taproot-ref/69f36a1e1c567e1d5e44edc58c355abb92e23f68 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b14000000005d6cd1b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bd01000000cedba4cd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700102000000d9229fe1044be13e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c7040000", "prevouts": ["a80a1f00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "1e3d120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "67ba0f0000000000225120fa0c69fd3dab50066606d386e9137466ea422a077bab3cf3dc61d0cdd59f488d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d768", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936abfe64118223b3c7ae9aa80074b53dd2a4e83d9249918438f788702c58e4386314746b6cdbbdbe747c087a2d99e7432ddfa1db1d7a6445e7dea3810e7475536557a61376c510bdd1fc860151a3b261939fa407ec1a2d0490cf2efc4278abc783"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f3613db4328df8356bb49396f684a07533c02af693a1f1370e1c4eec8af8b548908709641cf32dc4788f906f7e3621a0528df09509ddf1e9982e4479aa4b5d9a2d50ee9aa3de1fe988255b0d8b9f34dc2cecc4a96432b9f704e90359a06b468476e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}}, diff --git a/txscript/data/taproot-ref/6a35130e1e9674f6d1c241fd478fe85332fbdbb1 b/txscript/data/taproot-ref/6a35130e1e9674f6d1c241fd478fe85332fbdbb1 new file mode 100644 index 0000000000..d4a07492b1 --- /dev/null +++ b/txscript/data/taproot-ref/6a35130e1e9674f6d1c241fd478fe85332fbdbb1 @@ -0,0 +1 @@ +{"tx": "f566a34e02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbb0100000061ba5eab60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702c00000000845ff5f404e063680000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478735000000", "prevouts": ["da89580000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5ee4120000000000225120770a4859be8fbe7a841bd8e66a93f9515817dcc93bcbf3e365174d34bc6304a6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_cd", "final": true, "success": {"scriptSig": "", "witness": ["b7754e9094c652ebeda837bfa63d050337f67969fec6b0da1adcbb1d6189cacea5759a0b3bf1d641a9d344704c15dfc8d65e7303d48e2a2fb902e5f569c9144982", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["addedeecbf0a5978da663bb1e37be31f6a4b8c7cf48769fe49d2d8afc3194bd98b2616497deacbe55bb1d7c426829a3d1da1629ccd03e5f9e01c4b89a5143324cd", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6a37620db708370995281cf6c46512cd60efeda8 b/txscript/data/taproot-ref/6a37620db708370995281cf6c46512cd60efeda8 new file mode 100644 index 0000000000..1e70d29d15 --- /dev/null +++ b/txscript/data/taproot-ref/6a37620db708370995281cf6c46512cd60efeda8 @@ -0,0 +1 @@ +{"tx": "d2a4b633018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c80100000073d678ff03878d34000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acc9889e3c", "prevouts": ["be89360000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d2593bff1b0effa885b0aee87a7b2d32e61d34e0a8c26ab8da95f21cdf0740a021a06fc3128a9eadf7c181b12783fc0ac677434699a36c8776c14fb861b85f3ba54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dabe61c7346d5e238de070e35e4de194798ce817dea2f205b09d5c015998f3d54e3e51653db7a26891b04c3a1156361c2ac14b53ddf2b0df0fb784e58b5ceef674166a9b0f1c55c1671126e5eb7d3b70cf827ee1dc762db7ef6404d6cf84ba0da54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}}, diff --git a/txscript/data/taproot-ref/6a8e8effd233033afabfdaf9d971d772b2bf9ecd b/txscript/data/taproot-ref/6a8e8effd233033afabfdaf9d971d772b2bf9ecd new file mode 100644 index 0000000000..c69cc25dd5 --- /dev/null +++ b/txscript/data/taproot-ref/6a8e8effd233033afabfdaf9d971d772b2bf9ecd @@ -0,0 +1 @@ +{"tx": "b1bb4f9803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2400000000817a20b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127002000000008e1dc3c4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2e01000000783f4ee701e06a59000000000017a914719f78084af863e000acd618ba76df9797223689870f010000", "prevouts": ["90cc23000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "7ab50f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "546d5600000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_2b", "final": true, "success": {"scriptSig": "", "witness": ["38ed76305929f02dc349485a61c09a6c830e24769200d31626eb387aa97068874ae3508ac14ff04b57c3a47bfc82fda6e627e3598fb139a1d7431e904158202301", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["e3bfb102a8ae4aa8b7cf028538d64a4e507655f0c6543d9708b6da907b5a3a528fd8709be59d04619725fd0c1df9c3e698925a6c20c4adf2593fcbb7ee21f36c2a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6abb0ece7e16ec849987f8c8acf3aee7013ec5de b/txscript/data/taproot-ref/6abb0ece7e16ec849987f8c8acf3aee7013ec5de new file mode 100644 index 0000000000..4b887cd600 --- /dev/null +++ b/txscript/data/taproot-ref/6abb0ece7e16ec849987f8c8acf3aee7013ec5de @@ -0,0 +1 @@ +{"tx": "0ffdd2c802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa301000000e046c88abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3b01000000c75831b90470e1e0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac68aa0452", "prevouts": ["a79e7f0000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "da1c640000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "473044022019b75a030c13440d0d25d275157e4f1c8eb6c5f583c5720f3b60fb2de123007a02200fcd4f1305bb03ee79a22f7b1a6af61a05dda3a0e59345ce880952bcc0c9aaf5b2", "witness": []}, "failure": {"scriptSig": "4730440220619c5c65290ae5bb6210dc7ae9e8b32431a22ab84050373e1248680426cc603b02200929fde99a5101b851dbc6f332917cbf6ea421ba3c54b06ac2e30ac7f4976d13b2", "witness": []}}, diff --git a/txscript/data/taproot-ref/6addba1d7123769bf9727a6a4106110126f36086 b/txscript/data/taproot-ref/6addba1d7123769bf9727a6a4106110126f36086 new file mode 100644 index 0000000000..3bfb7cf09a --- /dev/null +++ b/txscript/data/taproot-ref/6addba1d7123769bf9727a6a4106110126f36086 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce3010000003bfe4fc1018631450000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79627030000", "prevouts": ["3c1f4b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_44", "final": true, "success": {"scriptSig": "", "witness": ["306f528964a2f5b7939f9ac242ab90719dce5b19dc0b69ec69ffcdd460fa36cf3edbb5d80f2402319194811e27113309eac01201b1684f8c9716d5301524eea402"]}, "failure": {"scriptSig": "", "witness": ["be99136011f0913eb2dedfba07c610bbcde72af7c9df4f493a6f6fed292467bbc23da1f22a895d343912d9247ee4a88f064fd2a97374d2624d945ed28d89d8f544"]}}, diff --git a/txscript/data/taproot-ref/6aff050ffc62f58100aca0e5b1839f097fe65155 b/txscript/data/taproot-ref/6aff050ffc62f58100aca0e5b1839f097fe65155 new file mode 100644 index 0000000000..f74cc021ab --- /dev/null +++ b/txscript/data/taproot-ref/6aff050ffc62f58100aca0e5b1839f097fe65155 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd9000000006f1fc6ecbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6e01000000753656c9038b73c300000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388aca1000000", "prevouts": ["eb125600000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "6b7f6f00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "807d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a0a4157aaff13ca2809f2717d1454e35c7fe22b58bbf3d38eb14bb2d8f6dda2c9bb3dc44e72947935649b33aa2d807ea07560e0c2333a7ee2c40c2820b24a64a090cbfbdc5dfcad7ff4463f3cf2898b3c754f5d70a369d7bdece79053e0da647"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e6d3ed6bb397f900bca42f5c55206e9e9a5556fe68666fe0d64ebb28af9dc03c732beddb8df376ed0f15f8ca557ca4fa4dab9ea34398a6bb2b3d4cd5dda00bcea090cbfbdc5dfcad7ff4463f3cf2898b3c754f5d70a369d7bdece79053e0da647"]}}, diff --git a/txscript/data/taproot-ref/6aff0519662314531494b8b3319e2768ebd40a35 b/txscript/data/taproot-ref/6aff0519662314531494b8b3319e2768ebd40a35 new file mode 100644 index 0000000000..6869586d9f --- /dev/null +++ b/txscript/data/taproot-ref/6aff0519662314531494b8b3319e2768ebd40a35 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f800000000fdb29b5b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705101000000f4984f1f04d30d4500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ba000000", "prevouts": ["a949370000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "4e5a0f0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa234cf532d828cda123a8c35eaf5d21c66c96423d9004c9f2b6e0f5ba33bf4e7b5b0de380cf0ebf0fa9d17e1d1edb87a374b64935c1c67f0c5024fcc072643681"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9edf285c3ff17340269ce4937990b92b11525a7bbe669dfecc4ad5542cd24bf5111e542fd849c49f4d44aada2d8e1aab946c793c1d334242f5a6d1a51a6de2d5b0de380cf0ebf0fa9d17e1d1edb87a374b64935c1c67f0c5024fcc072643681"]}}, diff --git a/txscript/data/taproot-ref/6b14353e2b7d7788062623a8ab274c36f8e8bf3b b/txscript/data/taproot-ref/6b14353e2b7d7788062623a8ab274c36f8e8bf3b new file mode 100644 index 0000000000..54f4ce8558 --- /dev/null +++ b/txscript/data/taproot-ref/6b14353e2b7d7788062623a8ab274c36f8e8bf3b @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca9000000009dff9cf2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8e0000000003edc09f0396a2ae00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689872927853a", "prevouts": ["872f5600000000002260202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "759c5a00000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["5edb9a0c74e702190efa0d08a6efde6df53a84ca9ddce445816b6240e779519091725c66624cdb8d7186ec31dcef6a5fa4f81e7cc1318d959d333c1a90ae40a1", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/6b611309b991acee95b55b4b19539f65ceccf76b b/txscript/data/taproot-ref/6b611309b991acee95b55b4b19539f65ceccf76b new file mode 100644 index 0000000000..f39738ed2b --- /dev/null +++ b/txscript/data/taproot-ref/6b611309b991acee95b55b4b19539f65ceccf76b @@ -0,0 +1 @@ +{"tx": "dd3b93eb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4350100000001cd7ca760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703001000000c72c4ce603c01c4200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787eb283c35", "prevouts": ["7397340000000000215e1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "621410000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["304402205c8335b25c6f8f036f04b0a7a3e460073f8a36d06701a4eeb13e61cc29bb9a2b0220292e057865f1e7c9fc5119e4fcdaeca77f3158fad6904b64e5a1387beba8fc78b4", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["304402206e61a9131f28e30cc16a2d8792a47fdf81d0c09cc344c63365c212538741123102202757695d5930069c5b70f93e64909d952e881d022a0971eefa759612c252247fb4", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/6b861044122a6b081803e3a99f47b40277743d06 b/txscript/data/taproot-ref/6b861044122a6b081803e3a99f47b40277743d06 new file mode 100644 index 0000000000..f5012f5f52 --- /dev/null +++ b/txscript/data/taproot-ref/6b861044122a6b081803e3a99f47b40277743d06 @@ -0,0 +1 @@ +{"tx": "7fe69d4d0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706601000000d2634dff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40401000000a84fafc5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0002000000b17c94b301c64a37000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48713020000", "prevouts": ["0a4311000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "feaf310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8d227a000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_56", "final": true, "success": {"scriptSig": "", "witness": ["fa795ffbeaefe29bff34e91ad2ad22149ca65e0bb83013f3009cfc9339fa23bfa8e87879dca8231d707f76cfc9397be931b40354d0c5cadf8486dce72984417081", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["881c091013dd2e1068f9c53039d914e8bf786fcc64fa14604ef8634811a0405ecc42a12197ce6e8143b334ee01309722b6bebb17a3c968498ae23201503ded0156", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6b8790739dcd1f8d3ef41a03c6508717d78feb52 b/txscript/data/taproot-ref/6b8790739dcd1f8d3ef41a03c6508717d78feb52 new file mode 100644 index 0000000000..92888194eb --- /dev/null +++ b/txscript/data/taproot-ref/6b8790739dcd1f8d3ef41a03c6508717d78feb52 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf270000000002c2377a011b63710000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb077df5e", "prevouts": ["4e6080000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b2d644bb9e96bc550db818ad4a9f84f3bfb9c250241a6740872b4a4bc563fb4ad98bb198f102a907fd10c5bf2e0e4d2bfc9bb38d19b996f85912f97f03c8ac578a90658a7aad5df2d1c5d455740a8352e3ec45e758de66fe280b4b2a8d141889e9ceeda484a8fbb1974ef5b6bb846e6aa0bee04d9164b21ca42714104493fce64045e2eeb8e4797e4583bc9141ca032f9d244ac5291204277e2c4bc03a0cd8fd7d46c21b60cf0d9ecd056fe6b7c4bea1b0665c0e45ec7cdb1aa4e44798a73095419520db9a346ab675e69b41b219bf0b0918dc85834c39e61149d384a66cdc9685afc92afa4cee53c89aa91bc367fea6b6ecf6075c09b057c0a586321352373d89a8c2c3c1e551f2f979a319eef589d3e031c5b58059bbdb82e6bb79a6bcf7b1a6126fd103eaf833d2b59274603ebcd148187f79a393b4adf3d77634429d7c2ab80767a446cb320c8b5498f66082d597c913a9d3ec74505f51538a20b70d042c82b08f52b3b835e8bf542aac88722f125c1f89c6a8c0f5888169a63ac2dbb5f8171573e7fc73f7b275f130be21323c4d8fb6670d055bc28b50bf6d43b2f4ac2fb9f971aaad6cb51f55587a440aac23699ac35cff9053f452bb53a67268195ce2e21d4484140b8d38907e32b086cba42bab7204cb80d2420f89f310f95bf8ee3f9cf59f3c1ef4e35da197e5232e91ea0e5a67b9bc6ba8c4f039b311f6dcee13956dfb948604b13f051975", "027d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08244c267ebca37631eb8e8b6e08a101702978fd7f172e21a8d6d6b527626f4402168cf2d3d0be95621d7446294d89d9a2894510d2dfb4e1a33e7316a17e39cfc99"]}, "failure": {"scriptSig": "", "witness": ["4d0902f9e1cbaf4725ee2c8f729e48cc0aec6866934bc3ea610b2c6a629b109cdf36811fca45561939289d34ebccaf6a88180973115ce8705913ae2086b84370bb0b9d2806ecd0ac6731ef8e77383cc12a75173b1f985c86e562915b39ad04fb20874f1046f2a4b16114423ecd26baa954cbba65c8f4d034e0aef9172f5c06e3ee6ec6d80ca1fbd68ae166d4a1aea8842b72adb03e5a414b4c521a460d7dc0a6eca458f6f1d3fd945687d8178de82d4012138def9bc93a2682a9c610d13d3d47718cc728c010ba1728a8763eb82ffefab35e6ad06b5ad874022b1dce383c61389ebd626ed74ff33bf8e49ea6f348e74f81d38c83d2dffb85d92d0d0c8ef6337491067f3cd9cfaee2b39b1d972f9998f34bc2bc5cfda7083b039c5047cfb560574c4393ef6a915ead6b7254cd5c6853bfb6b3d331c23b64a774758d535f401e66ef078876d20fb7e3d032cc84daf0a4ec0b463f366d6665925b20765ce5dc18f4e2dd8b008fe240195687dce13b07ee3f9c7f7ff6176cc6ef9a5c716ac35e610629ea0c9cfbf9b17d395be58887af2f68859723b0623f1911c9ceaf788efa7c4c1040ab94ee97f388bc5e18fa505b6e65c7fb2590f4828b331028f1680e20356636c6a69bd048eefbc04cd4a1e26242e280626565c5fe2dc6c5ff2d65783a12234e941b6f5cf0518500daf13ad9742de619cfbc5f5ca745e3fc1c5e9ea5af49a54e58208ebe6bb081f095363f75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eea584dae4332b3044a4c8d351fbda1a9ce22b0be13f72ff111d82ccfa4c6759e0e32049d91f42cbcb04955cd98e985d287b85d3c77c1154d8406ae5e2d81b7b1"]}}, diff --git a/txscript/data/taproot-ref/6ba407f0a422507bed18c1d5b52f1f550c278fcb b/txscript/data/taproot-ref/6ba407f0a422507bed18c1d5b52f1f550c278fcb new file mode 100644 index 0000000000..622e7849da --- /dev/null +++ b/txscript/data/taproot-ref/6ba407f0a422507bed18c1d5b52f1f550c278fcb @@ -0,0 +1 @@ +{"tx": "9b03967e038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40201000000116593bcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c30000000008140a59460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bc010000003f8a038f03ce439b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a61f020000", "prevouts": ["fa123a000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "d8a45300000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "95390f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_4c", "final": true, "success": {"scriptSig": "", "witness": ["86ce071bf60dc606020d2b39afd8cc4ef834eacd817eba063a1fcbd579e2a6d88968cc7292a81c746ed58b21bc7014940f83da3b3c243703ba69b93864e4072802"]}, "failure": {"scriptSig": "", "witness": ["85cb2c73dd46ae83844964ba8c6f7c039a81439e6e2c9d651d6ba8964d1305a9620c12012ea9fc6d62e638b0b7497e68ab5d7db547b5f548b098859a63e3d1a14c"]}}, diff --git a/txscript/data/taproot-ref/6bc93c9d2144506aeb9dbbe41a5b4a095f8fe9cb b/txscript/data/taproot-ref/6bc93c9d2144506aeb9dbbe41a5b4a095f8fe9cb new file mode 100644 index 0000000000..43a0bc1f65 --- /dev/null +++ b/txscript/data/taproot-ref/6bc93c9d2144506aeb9dbbe41a5b4a095f8fe9cb @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf201000000ce5eda9bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2f010000005618a396bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0701000000427c408b01084841000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487d4145d56", "prevouts": ["24fb4c0000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "4f8a7600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "3763820000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045f693e8696ee404d8be98a67cec2febef1e0f75b013501a27963a3fb4300a4da26e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360f6c1019362bec2bf08a39208cd8ab9e5ec501f845acab16bbbd93a90644444aa6ec201a93e79c82aebcb32c5742cba4049490cef67cba707365d2e1379631f73bd198ccbfa9c702c0592bb8c84a948c36ef9eddfd1aec8278a333dab45811656e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}}, diff --git a/txscript/data/taproot-ref/6bde125fedeb05208eb8991bab6ad0713a60d9e4 b/txscript/data/taproot-ref/6bde125fedeb05208eb8991bab6ad0713a60d9e4 new file mode 100644 index 0000000000..9753aed16c --- /dev/null +++ b/txscript/data/taproot-ref/6bde125fedeb05208eb8991bab6ad0713a60d9e4 @@ -0,0 +1 @@ +{"tx": "0d8311b402bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd701000000fe04979960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700a00000000da955a9d01905b3a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a636020000", "prevouts": ["df00720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "73d312000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a8", "final": true, "success": {"scriptSig": "", "witness": ["fc26ccb95093c1f4d7d5f63bcca121f2d079547ae6cf70d8b73908c4c50796e6393470992ee7048db8d856a94f0699d2396119f30de7021675c12148b1dc6b3602"]}, "failure": {"scriptSig": "", "witness": ["49e53212930b1a04c55cb7b2da7b7410798ee22339e97d608a425f035a77c6daaa2da896e48892c11530a044939863c86635a89c5c479cd41b6830d9b103cfd7a8"]}}, diff --git a/txscript/data/taproot-ref/6be0d8042ea3f474de849bc8205c65b017a3d587 b/txscript/data/taproot-ref/6be0d8042ea3f474de849bc8205c65b017a3d587 new file mode 100644 index 0000000000..ababc08b2c --- /dev/null +++ b/txscript/data/taproot-ref/6be0d8042ea3f474de849bc8205c65b017a3d587 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127080010000003832b55860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f600000000395e212301b0d0000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79609c18144", "prevouts": ["126f1200000000002360212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "1cc50e00000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "997d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b19b5f1885a20d35a814ca61d4ff855898dc4931a7face6e73cd2cb9656d66dde3e7df71444e7cc76d8e211582e4acb0f4a71a503115fbd605db9d475b3b0609413afa0de0ff2ef52577d4c80443f6003c675907986908c28bc93ded208ca160"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363b008e11d5a212ab8cf1e35e075d499c0a83e06f0fb3690023328021119d686440197dfa5e15d56b0c52ba6c1e960d9371338186786a853de15f9da987536b6f0e580b14ffff5bbee812c9f6e3af6b100c6b4cffaf41971c257964f1fb14f6f9"]}}, diff --git a/txscript/data/taproot-ref/6c1bef32f6ca0cfaee1705746902336e4fd67e96 b/txscript/data/taproot-ref/6c1bef32f6ca0cfaee1705746902336e4fd67e96 new file mode 100644 index 0000000000..ca6f223d12 --- /dev/null +++ b/txscript/data/taproot-ref/6c1bef32f6ca0cfaee1705746902336e4fd67e96 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47a010000004febb4ce8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45701000000ef83efd203d03a6d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac6e000000", "prevouts": ["a714330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "28593c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_7e", "final": true, "success": {"scriptSig": "", "witness": ["18e4979551e7e9dea17ee3a1af3a495cd8b6825bfa50e3189214e8a4c313567aa87267c54a59b9f2a9e77b01de73e083160d0144cdd660f8907f8d922536ba1382", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["811439e6d09bc5d45950c0d14c811531f11006434039013de4c863a5d779f410116286832902192e14cb7afd307f8e73d4d9f5d52058e52b38de6c8c6709cdbd7e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6c3db2c6ab0b6b80838387b923869561f9e1cf11 b/txscript/data/taproot-ref/6c3db2c6ab0b6b80838387b923869561f9e1cf11 new file mode 100644 index 0000000000..a64a953498 --- /dev/null +++ b/txscript/data/taproot-ref/6c3db2c6ab0b6b80838387b923869561f9e1cf11 @@ -0,0 +1 @@ +{"tx": "5cfa37d7028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a301000000ee493d81dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7d010000000e4618c40212f89a0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcac3bac60", "prevouts": ["b6d9410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "dde95b0000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "da", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93647616881cc706df192d68bdb7ce4fefac112c6e83b2fc7e7a0b73ea4516ce84599aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41dc38fa67d6e370c9f405c2af01822f370dc317d6e78d2f71aa14f0ce4de56d6ee4d75780d36bffae9b56136e6d27c02b8d233efdc800bb260bfbba6a6f94b87"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e116c8ab92abfbe4bc2686b5b42764123e12e1b7fae7b64d8b1bf7005c7df7fa0a3ad7647dae649c97c815eebecc244cfd5d14ac6da92e0e18049c71625e2af9496ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}}, diff --git a/txscript/data/taproot-ref/6c7e6cdda9913347f0ba8eed8f914941cec5b2c1 b/txscript/data/taproot-ref/6c7e6cdda9913347f0ba8eed8f914941cec5b2c1 new file mode 100644 index 0000000000..db6538f5c0 --- /dev/null +++ b/txscript/data/taproot-ref/6c7e6cdda9913347f0ba8eed8f914941cec5b2c1 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6701000000a473d9cfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cda0000000076ecb2df043144cd0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7edb0fd40", "prevouts": ["2b0574000000000017a9146f2d26adc5ad58653becfc45ce03a0b1167b1b7e87", "56ed5a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "225f202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["385484846fa19f210d3cbc3ad01284046f449d4536f52d57b6ca832e6f1422fc1317b9ccf2d8431150be3ed07f786824360850b023600447926a67b46da42918", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/6c8a1b2ea553e6dfa5f653afeeb135465732aa6e b/txscript/data/taproot-ref/6c8a1b2ea553e6dfa5f653afeeb135465732aa6e new file mode 100644 index 0000000000..e1a2eed239 --- /dev/null +++ b/txscript/data/taproot-ref/6c8a1b2ea553e6dfa5f653afeeb135465732aa6e @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ce000000004bd0f99e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270610000000097c65b8d01828a39000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47877a0b633c", "prevouts": ["06f4350000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "30571100000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c968", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d781d2df2a0bcb6c98ddf188a5de84fa915a80c53246c09cb7161fa1ccd707e89fc6d70c1c4e15dab7d2fdd5db26cf688ca78f103ab970182d2c6706fc8281bcc9238bf2d7dc0bcf11838c34785251ea2fa5f3bb034bc98e2e8efb0909b7dbc17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b91f1c16b63f67fc716dcb8fb6def1d88e508150b21ac27e49c0548d78f0224d3bd2bf476d5c79b80d1dc385df1320868058b4af6871225604d123c25805c1374cc0fc2e3b1a564cf058e89401e888e3d8222f635de2bcbc595bfcbb872403dfb24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}}, diff --git a/txscript/data/taproot-ref/6c8acc451d0c73e74ad6918585d0c8776498affd b/txscript/data/taproot-ref/6c8acc451d0c73e74ad6918585d0c8776498affd new file mode 100644 index 0000000000..f0fdd2575b --- /dev/null +++ b/txscript/data/taproot-ref/6c8acc451d0c73e74ad6918585d0c8776498affd @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c81010000006dbe9804bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6101000000606c4766027ae7c2000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487afaba04e", "prevouts": ["7ea54c0000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "8668780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "a37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2f8f33b00019c5a92b78a4d0765b6724114f5676deb8014962e3b41b4c6baea3fd3695492b964dfcc45d3a474d456ab4db8430bda5885b2eccf08499e11263dad2054b94cb6efba565738f5dbf6ee5a67458962b65d77e1cf5e0d2c1c00b2210"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e1bbd263bb9b57787cc1695f6735ee6aa4874511c0d77def079ec8f767826a474cae923b25d556389dd5dd645f6d7ddd89a07a74a73dddd3d85d7b65ae33798aa"]}}, diff --git a/txscript/data/taproot-ref/6ca4ca112dc6f3b82a4ee1dcb539f5412b61802e b/txscript/data/taproot-ref/6ca4ca112dc6f3b82a4ee1dcb539f5412b61802e new file mode 100644 index 0000000000..9582dd5207 --- /dev/null +++ b/txscript/data/taproot-ref/6ca4ca112dc6f3b82a4ee1dcb539f5412b61802e @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2f00000000f8ba7bed047a426f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac7a010000", "prevouts": ["0700720000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "777d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368847b894970b8ab4b6874deecd5eaf7148b7f894b2a434601f88998036d2a73ada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed76a514a469a046f8a639d1762af89c30ccdce4827317950871fa39f73bf898af03474d1f6825ec143575bd2e16c5d5a5b633189d07c1a3af4de94c30aa06021"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936449975fa8a41d909b43ff06fbaa008862a465221f52e8be68d48e129639049c7afeb4bd46271bdc4aa2a06eff134ee0adb3f92d28971d2f43ac771ecfb2750b1f03474d1f6825ec143575bd2e16c5d5a5b633189d07c1a3af4de94c30aa06021"]}}, diff --git a/txscript/data/taproot-ref/6ca7072324326a43f42b641dd4cc2d785bfbb7d6 b/txscript/data/taproot-ref/6ca7072324326a43f42b641dd4cc2d785bfbb7d6 new file mode 100644 index 0000000000..9dc4fd311a --- /dev/null +++ b/txscript/data/taproot-ref/6ca7072324326a43f42b641dd4cc2d785bfbb7d6 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfa0000000056f07197bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2e00000000e97e04addceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2e010000004e146fe30155a353000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6ed721a49", "prevouts": ["41e1250000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "b7c76800000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "603822000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "eb7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936627b63f045b77224e514acc1eb365b6e9afedea5819941d6cc405fd56980362633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a9e937f21fcad1bfe108fe60be9a324a720a35d98355df5fe53ca48d5593a6c6b"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e7d8de85c21b0b3fb0a3c0b5a47bf8fb76656439613f0da43488fdbdb40ca82a29e937f21fcad1bfe108fe60be9a324a720a35d98355df5fe53ca48d5593a6c6b"]}}, diff --git a/txscript/data/taproot-ref/6cbefe4b22649c02c818e52d3142c768ae99b9eb b/txscript/data/taproot-ref/6cbefe4b22649c02c818e52d3142c768ae99b9eb new file mode 100644 index 0000000000..b16cb276af --- /dev/null +++ b/txscript/data/taproot-ref/6cbefe4b22649c02c818e52d3142c768ae99b9eb @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b08000000005eac31d2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5f00000000e9c12dda030e24a300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487c5010000", "prevouts": ["bb4c220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5a55830000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_89", "final": true, "success": {"scriptSig": "", "witness": ["acc27a423aba2a823e9fe2d1bdc4b8059cf4b1619195bdec2e4b544b8646a7f2f3126c4b8994bbf829a1fbbd635b2761f52142e8de89328df43b0a0049119fce"]}, "failure": {"scriptSig": "", "witness": ["6be9a01f6cd066f5dd0d9ee1fb98474b62b1651e4f1c3df92e1fa8578cb38fa3add2b597c806f0d122128acf5f654be0d138beffee28bcf7ca4972046836a8ad89"]}}, diff --git a/txscript/data/taproot-ref/6cdb87bebca9057c621affd2eddfbe726630b1c6 b/txscript/data/taproot-ref/6cdb87bebca9057c621affd2eddfbe726630b1c6 new file mode 100644 index 0000000000..7dff22543a --- /dev/null +++ b/txscript/data/taproot-ref/6cdb87bebca9057c621affd2eddfbe726630b1c6 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf7010000007a32a641bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff50000000030c813b30337aecb00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7aa000000", "prevouts": ["f054530000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb", "d4857a000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "267d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed3613095503852f968cf254efcb9d0b7a7155094671c0665bdc16a67bf9a23af91e402d116972020cc4db8f7e1431e7a7416668817d422dd270400f40dd8d238"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361cf75455252e12219cb13ff880bc28451a916c621a385ef21679c99f872f6341f7219e5458c3fd087680f56af7e0cb5a098c29a419645486255ebba5b453a7aacd4c02f64c49cc162ff9325daec6263c98ea78a2c5346e44c6d55d79722c7edb"]}}, diff --git a/txscript/data/taproot-ref/6ceffd0098b1fadf6f95341e39b6b1486b6e2dab b/txscript/data/taproot-ref/6ceffd0098b1fadf6f95341e39b6b1486b6e2dab new file mode 100644 index 0000000000..074786edf4 --- /dev/null +++ b/txscript/data/taproot-ref/6ceffd0098b1fadf6f95341e39b6b1486b6e2dab @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43a01000000450efd63dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc600000000a8e0fb6603d47d8500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac08030000", "prevouts": ["3c3f35000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "79ec520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["bc4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08220e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e14a8563068286881d42b1c4901d93a483973910fd5653bf7ebbf040741f7cd837150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366e4bbdeda5d79348f03632b8a5af46cbe5e2e7d60e47397790df9d5358fbd9e8d5154a115ce154f943bf3cf8f46c74cde664956f57cd29b00bedec3f53c1a73157ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}}, diff --git a/txscript/data/taproot-ref/6d1ad01f9d4765e28554608aaaaf7f86d7fee48a b/txscript/data/taproot-ref/6d1ad01f9d4765e28554608aaaaf7f86d7fee48a new file mode 100644 index 0000000000..c5ff533a99 --- /dev/null +++ b/txscript/data/taproot-ref/6d1ad01f9d4765e28554608aaaaf7f86d7fee48a @@ -0,0 +1 @@ +{"tx": "de79ea5102dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1b0100000001706ee4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6e0000000064da1f9602df27bd000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d8020000", "prevouts": ["a8084d00000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85", "b2d1710000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "107d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936acc696796e153717ed5a6a385f9de8b7611279c250cec566122acf9b81ca854846c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada7506a3091a1e28dfc5b9aac4646748f840add9c91a317c4120c5f1dff96d2e4520b5ceb13d27db1b37ec8ee9ee9482aafd08fc62c5401b1fb7c7b4ff374c3d"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630300b02e92706ec4fd7f3b61fec60afc7cf4f75cde7fe0ccf1bedc3ed3184dadad4d220d15ec254ba214a445cc73922794d5f92559e27b8850a422e98de131f09630471a62c8657382c38b342878f0042beb3ba209e0ca1417f9db2e3d45f6dbd940ade039b405c8439b762bfbc73f9441ef227e6f687b6d94ebcbac32155c7"]}}, diff --git a/txscript/data/taproot-ref/6d2c53b612c9e3931c251808123e215918c34b60 b/txscript/data/taproot-ref/6d2c53b612c9e3931c251808123e215918c34b60 new file mode 100644 index 0000000000..14c876474a --- /dev/null +++ b/txscript/data/taproot-ref/6d2c53b612c9e3931c251808123e215918c34b60 @@ -0,0 +1 @@ +{"tx": "8d072cdd028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c408020000006c4d0c91dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be800000000b35dfbaf0267815900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6e14cf126", "prevouts": ["7b9236000000000022512085b1b5643880360a93ad399dd8d1aa945ccf0115d9a41dc926feca691d280be1", "8981250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_2e", "final": true, "success": {"scriptSig": "", "witness": ["f532f377f686cf38784a48d4b1af3f0c1b47e4764fd9c037519daa4fd3774a67d301e8315621eb9f1cd9883b764223700b5c6c9f5e4a95e152b2de2f4005e46d03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["d4cf78493dad4d8866c65df8e600155a4847578ac9c82896c6527a6d6ffcfc326dddabef9fa2466bda9cb0fc4c4951fc5a4795e872a7049530987652080206b92e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6d6cb592531f25b7c0a1a607342e2c3dcf35ac1f b/txscript/data/taproot-ref/6d6cb592531f25b7c0a1a607342e2c3dcf35ac1f new file mode 100644 index 0000000000..d5210518b0 --- /dev/null +++ b/txscript/data/taproot-ref/6d6cb592531f25b7c0a1a607342e2c3dcf35ac1f @@ -0,0 +1 @@ +{"tx": "035d7f1e018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c481000000004e33ec9a02352a320000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748754075456", "prevouts": ["470535000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "bd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8357b0da8b61d649cedb8c014d8a901c8639aee676049f740bf8079132edd04aed797dd6acf95c24b81e793c9c81b0ab80d381fe8deb935e4a90684c96acd4587"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365510f71f915f218e0cfe3f7c324e3aee59ad2c2f3157a77c6e7c2eb6b867ca43ad1c924a2744de25921620091a34db181a435ddb56a0dc8d3bb0ce452693f5f97353a90cd56d8edfa9d59a5341a6c829ef2ec5b70cfecd5055b0e6c18dd5375841cfbdca9cced9a9297ecbc29dffc929789a1848311039b5a24b338cddf0aa70"]}}, diff --git a/txscript/data/taproot-ref/6d776b8dcea06b627feb06e8e07e6455f48086d2 b/txscript/data/taproot-ref/6d776b8dcea06b627feb06e8e07e6455f48086d2 new file mode 100644 index 0000000000..2496cecc08 --- /dev/null +++ b/txscript/data/taproot-ref/6d776b8dcea06b627feb06e8e07e6455f48086d2 @@ -0,0 +1 @@ +{"tx": "2164258c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c801000000643e6ce4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1b010000002e5c44cd0201878c000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65633f05d", "prevouts": ["e17b11000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "ecc07d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_bb", "final": true, "success": {"scriptSig": "", "witness": ["b223293d4e5c89ee8e58073747bae998861fc142a465a072b4dbbe72be87b842d5706b47ad6c744b1d615a6e4d977b18f9a8e8084b0a22891475eaf6a44fbc0703"]}, "failure": {"scriptSig": "", "witness": ["05472656d9355b8e4e91a9f33d9d5b2ff57ab40f5629f1ace63fe30d46f9613bbf9b920597dd711bc1b8b615ce8f4c19d79f4b4e7c5e9282023b737468936f63bb"]}}, diff --git a/txscript/data/taproot-ref/6d807824d43b2e677fee210fcdda1e52cabbbbc5 b/txscript/data/taproot-ref/6d807824d43b2e677fee210fcdda1e52cabbbbc5 new file mode 100644 index 0000000000..ac5f832253 --- /dev/null +++ b/txscript/data/taproot-ref/6d807824d43b2e677fee210fcdda1e52cabbbbc5 @@ -0,0 +1 @@ +{"tx": "f66b5ce4038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c465000000005be9d6eedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc300000000394663ffdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c08020000000e1b4af6047d16af000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a62067231f", "prevouts": ["3e80410000000000225120783dfb3310d474c767ef9239befe26bff1665135289516e5417abb1737338f98", "172323000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "8d5d4c000000000017a9141757f4686f091b43a46fa47e92d07c87fc7a205e87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["fc4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900458771b6e792b25070418091d57f3336a76b43209d1f0f67eabea9d94d6d252d60aceb16be1ebf4fc69deaf064fc7bf5d7ff2149818b5ba4c28c799d30ad567cc959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a2d931e3ff2386eb1ce0fcf605e183edabdccf2d0088e28537def66ac2ff1ddb690da805934f4f93e9c0efd4d4edfea04743fe60c173721d1481257c7ee1801e4e0df2464f99a35d5bc9fbf69ae3045675e957332f77327dfd622124d00cb4df"]}}, diff --git a/txscript/data/taproot-ref/6d874714ddd3706018c9051c55abbcf1210b4643 b/txscript/data/taproot-ref/6d874714ddd3706018c9051c55abbcf1210b4643 new file mode 100644 index 0000000000..f5f4df5833 --- /dev/null +++ b/txscript/data/taproot-ref/6d874714ddd3706018c9051c55abbcf1210b4643 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f20100000037a88ef660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701a02000000b0c706bd0158741900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac4f8a5b2c", "prevouts": ["00a53b0000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "ac790e0000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_mis_3", "success": {"scriptSig": "", "witness": ["5ab8d870a6ff8eb16d81d15eb5b54c0f8833047e31fd03d61249b6002ded1c6e26f82cafb87703e0b309cfccff06b45a8d457a3ca8af72c6aa5ead5bff906019", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "5029eec7b1423a63e23d005879d82fb235f46a5d11005cd1b9809ce32666a3cd8f16083df6ab04d1f4f22bc8bc2a6be49238f1e17914f9ed5bc73052d59e54a463bebcc9f176dffbde06285b4bcff4ab025da5e25306f317c23259a59a6294af215beaa7b7e03c1b3d9e5dd0309c706d78ebcdfcce9bcd7708b6186dbf94069584fb0f0eddb37ec06b8337a79c2c18b703b2b6e1d36b1791181821475a68ec47f137298db6ef9101128cc42bbd3ed09b83cd5d46611d"]}, "failure": {"scriptSig": "", "witness": ["ee71a984c12de547232246ddd7eccd6d50c28419b99e7c3cb06c85418bae53d349c58a59d1e70382989d25fd9aa83cf05f0dc37330ff5c4a6ce0e9ba1f18c08b03", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50dd340beb9458b6ef"]}}, diff --git a/txscript/data/taproot-ref/6d9b8efdf33eb396820e03892263d3b784e5dcf5 b/txscript/data/taproot-ref/6d9b8efdf33eb396820e03892263d3b784e5dcf5 new file mode 100644 index 0000000000..2fb75a2412 --- /dev/null +++ b/txscript/data/taproot-ref/6d9b8efdf33eb396820e03892263d3b784e5dcf5 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708f010000007d6193fc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f6010000004a71e3b960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705c01000000093cd1cd02363e64000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87f047c423", "prevouts": ["df2c110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4a5e4300000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "818712000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09028fa34082c6b789795b8deb89ca5ed1b94eddc15c8ea94b56ef410571d37bff430fa8860257386bae16349634a008631000dd487604a66e5656c2c41b7955e2a086762f8906ec9265bc2713a062be9c7697e5af1532d38b1b6e01f767e6e96753fabf7bdac9e9fde9936ebce7f36e7ef1fd3029a307a75841e994b0f5ee710c2c7f0ae0eaff558933778923dba086f975a51eaa1042b24d36506104a4078f48bfed9d162891c0efa93568557022954e612e338db4e1a630557ed83e73c47e48d392fd13a97f8b490bc5901567cceea222543468cb8c76b0ca318255bcf3c7f060839bddcdb5b3aa3f3893be19978c82235b6c8ca7f1de746767f9910d8b1c1d2d659ab71ef4cd12c91168c35b0d8c90ff63bed28de375c13dc7ce0f1afb16827cd2ce91e5532a7bc624ae20289bfdc4ff980e7beed16f48aca1c25d83f9c39722b52de8884c4bacec4eb55e39a604beca0f0d474329855d86205059148b62d579b8380b486f03945040fca8bc09c77101bbe86f2ffe6f64c2e14ffbe6731eadf0e9db0229e0077e11684ddb7eb5e67498a3f960b39f3070ad3b836b8aa4e753cda98df48f327ce58125b8c3db4652c66123f4b1bdd47f13ce7427b4b9c9d9945c398a5a01e80f1aad4d1cab8971c56da6a75f7b82ff83843f14f38b9af68b1f38a1099f547b2375ce0012ee641b00431d669c42732e7e1010f17298d959dabf0c85c974c421751278307598", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5120e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1390e5640971602922d6b073671c4e08980ecd1f17d1da07e150f68606efdd1f96e2c0067d6235544c969c57bb6383bc4dfe8083fe3443e336f29d85bd1c9f087"]}, "failure": {"scriptSig": "", "witness": ["4d09020743d42a1c01f9d4b54773974aaffa2d1558c919ba6cdf39f5d17d1238d38b3112695b7b591710697c545a33a8f2b4807e2ec6b33a0bb35016364746ca079c008fc53d76a811fb03264da5f64ad4cc76a1422b8a6709b8cab05c279d38e66d7a66dffd6817214024a4bce70b5a73769dc8696c4adef71ccdcd6f9bcb4d371b62bf536ab973b153bb28daf0671675bd5541521833c3ea45b90220709d465d1fe68d95de672233958d176d0dcd4349906365434128537b559cf6269c85ecbc35e566b56a6fa101026ecd6d13a4f60972fe32673689bcfab9ed9e8bb86e419635d0afc50ee1ebea23280194d4ab2afd278e095c38175d2dd6725252f6b92bee7980719e6549df0e8494227f11c867356cc6295ac34b69810099e5b363b880f94ccdb5168660ddf2bce902efcaea5f0b5b3cd0e54cbbe879e33e6ff9d886c501e4fe73e2fffe674f6aaad26c7f04ab0ad7c11c31991ed3e785e85648ce5337cd7cd0f1d97f8c256689f24539f179281d7223e905b583e1c1d7c7b2fa4599a2a71035b634b4851e77042bb7b9b328f900d1b504755cc24696ac48ec93ddcebfd7a12088d3b05415db04abe45b37ef0a3b5315b3c9ddc3bcee0c845477867b7bcfc324fffcdec539ebe00a503e0f9122f7c9fd09fa0c580abe703f28a698d6779f5bbc0bc1493cf70adc1c534fbe55f8762e25552ae7c70b971754ae7763fa1d33a2636cc38033faf0c5a99b7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364da7e9c765d4069add7c566222dcc2fa8795999e4c66c2e0659e8e7b5c350f927bb22a9d6ce3a4416076bcdc0e15ff24e2eba93ece471e96a0af39f5a01dd3ec6e2c0067d6235544c969c57bb6383bc4dfe8083fe3443e336f29d85bd1c9f087"]}}, diff --git a/txscript/data/taproot-ref/6de00eee762e4ed839eb40fe1f0e25de0071e584 b/txscript/data/taproot-ref/6de00eee762e4ed839eb40fe1f0e25de0071e584 new file mode 100644 index 0000000000..fef46a4f34 --- /dev/null +++ b/txscript/data/taproot-ref/6de00eee762e4ed839eb40fe1f0e25de0071e584 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ee0000000050e3528e025ff735000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a63d010000", "prevouts": ["b7b7370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_15", "final": true, "success": {"scriptSig": "", "witness": ["1306a7911f8b30043267498bfba57f3bafde8a6ab4cef1af462e1d5dfb2794af72c44c02b05f4f99485705cfad4f2ee2ae8be777f80917f85e5ce590c0e303f002", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["aedf3d834fc929d88abfb96482de1f78f2f4450f25517ac2b0296ecaf2772138db486f2ea5e693b3bd3926a1e1018921c0980ed49c1394b332431448b2e4136115", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6e0058983c03e5e6a363e64deb28a252b20617c1 b/txscript/data/taproot-ref/6e0058983c03e5e6a363e64deb28a252b20617c1 new file mode 100644 index 0000000000..c54ff09ec9 --- /dev/null +++ b/txscript/data/taproot-ref/6e0058983c03e5e6a363e64deb28a252b20617c1 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127085000000006a1e55d2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd30100000063e1818f049b9e8f00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478706bd7426", "prevouts": ["4a4a0e0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "868a830000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb468405cb22a39b2e10cd1afb6cf33a44daad2098e05cd2010bbeaa225bcf768d84cef708a58e9a16c040ddf6ca6eff300c7bff2a5c928617bb01c850b0a79e89f728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b9d6e3f5d9915a7f17d348d09ea3f9ebd96660129a97625007e31c70764ffd301ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456a39aac74ee3f63949b9c215c515b0db1b113f4639b3fb19cd99ba22ff01310c728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}}, diff --git a/txscript/data/taproot-ref/6e20107c698b7f36b9163a7db7382e068caca218 b/txscript/data/taproot-ref/6e20107c698b7f36b9163a7db7382e068caca218 new file mode 100644 index 0000000000..1087b0f436 --- /dev/null +++ b/txscript/data/taproot-ref/6e20107c698b7f36b9163a7db7382e068caca218 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd101000000f3f4ecba01f6b73500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acec000000", "prevouts": ["7f71600000000000225120e17cb865e0c0755340e16ca2f2e2945dbce4ced3da83dcb29c6dddb7ec4631cd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aee516190bb66aca76b48f5e931006083b84d9812f39b791c31f97fb29b3271d"]}, "failure": {"scriptSig": "", "witness": ["6a22616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/6e41239fdb2bae4970f0a9787e683e94dcfb1760 b/txscript/data/taproot-ref/6e41239fdb2bae4970f0a9787e683e94dcfb1760 new file mode 100644 index 0000000000..76a7d10bb7 --- /dev/null +++ b/txscript/data/taproot-ref/6e41239fdb2bae4970f0a9787e683e94dcfb1760 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2401000000b40d39bf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c00100000020db294d014c696800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2e5e9e56", "prevouts": ["faea5c0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "118d330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_csv", "final": true, "success": {"scriptSig": "", "witness": ["8c3bf2f418eac8321ca5a10f3517be596df988d9e7a89dbdf658d38fb16eda1678109f53f9b36d5bac53e35b5d115ecaf5213cdac29f9c322e9dc2162360c839", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bdd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a37f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}, "failure": {"scriptSig": "", "witness": ["8c3bf2f418eac8321ca5a10f3517be596df988d9e7a89dbdf658d38fb16eda1678109f53f9b36d5bac53e35b5d115ecaf5213cdac29f9c322e9dc2162360c8", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bdd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a37f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}}, diff --git a/txscript/data/taproot-ref/6e59dc43f59b064311d89a689dd58f9a905d10e3 b/txscript/data/taproot-ref/6e59dc43f59b064311d89a689dd58f9a905d10e3 new file mode 100644 index 0000000000..2d18e2d0da --- /dev/null +++ b/txscript/data/taproot-ref/6e59dc43f59b064311d89a689dd58f9a905d10e3 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41e00000000689473618bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e500000000333fa0f201c56120000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d2000000", "prevouts": ["c2e73700000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1", "5e323600000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["dc4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c9da215fb1c7a7d8158d804bf09a7228ca7acab75bba3128cb1f7201ab6c755a6950266b78c1c1a06b0abf9d183417cba91a47bb46abdc469d8aa6f91cbf6a3fa39f866618102a4b08e1c83cadbbeb41bf3ed62f238c8432fccdf019ac45545bfaeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}, "failure": {"scriptSig": "", "witness": ["4c52dc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369df4b46da53b8939729e9a07a7e7594fd498eddc254844cb75d19f3809a7ad1b8f84e1cc8430872045fc695723e7e8ea88aa60745b893850b41017408051d8396d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}}, diff --git a/txscript/data/taproot-ref/6e85ec4ec7f9980d8de6d6892d1415072155eb5f b/txscript/data/taproot-ref/6e85ec4ec7f9980d8de6d6892d1415072155eb5f new file mode 100644 index 0000000000..1d756f0a7e --- /dev/null +++ b/txscript/data/taproot-ref/6e85ec4ec7f9980d8de6d6892d1415072155eb5f @@ -0,0 +1 @@ +{"tx": "af047eec0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708d0100000035cba8a8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0500000000056a088502900d7b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca77d2341", "prevouts": ["67e6110000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "63c76b00000000002354212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "6b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8a2960a95becb1bbbe0636e0493c58f712af9b8da417013d797bf12c130ac56070886d9e3726a9aa8a2b94454683b5181a970edd894e0d0cd75aad09f75436b2"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e85c9148ab8fb2f0e3b60c30486bc2998c5a9fcff153a4260746061263c245b36a70886d9e3726a9aa8a2b94454683b5181a970edd894e0d0cd75aad09f75436b2"]}}, diff --git a/txscript/data/taproot-ref/6e99af85369d8643f1c91d6e46c038af402d368c b/txscript/data/taproot-ref/6e99af85369d8643f1c91d6e46c038af402d368c new file mode 100644 index 0000000000..6cc08b300e --- /dev/null +++ b/txscript/data/taproot-ref/6e99af85369d8643f1c91d6e46c038af402d368c @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcb01000000cbb48829046916610000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a688000000", "prevouts": ["24016400000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "737d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facefa89993a6c83e98df45cdbdc82d28bd33af2548fc79063bffdaaeafd2a52fabe4f7cbc7087a9eecd21f8f9de83a71ce09520dfa28ecbf12e6edbc22e0d0c39a8cadcf9bcd23f9249fd09eb8b2b9ca63044a0ccef58f4cae9402f6ead4c2071"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93613adde228e33b56d36b730183a3076a84484135166bc954854de5c480ca0e58dcefa89993a6c83e98df45cdbdc82d28bd33af2548fc79063bffdaaeafd2a52fabe4f7cbc7087a9eecd21f8f9de83a71ce09520dfa28ecbf12e6edbc22e0d0c39a8cadcf9bcd23f9249fd09eb8b2b9ca63044a0ccef58f4cae9402f6ead4c2071"]}}, diff --git a/txscript/data/taproot-ref/6eb985be69c6686dbcfaa0cfeba04cbc68dd5298 b/txscript/data/taproot-ref/6eb985be69c6686dbcfaa0cfeba04cbc68dd5298 new file mode 100644 index 0000000000..4cc11b36ff --- /dev/null +++ b/txscript/data/taproot-ref/6eb985be69c6686dbcfaa0cfeba04cbc68dd5298 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270780100000092a442168bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40500000000ac1f958adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2b000000009c4898ea02e6d16d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875a481120", "prevouts": ["2b3f120000000000225120c10f9a5287d6d37684b1ac107332d66417d952fdf60fb9cd3e9fa5de48c339b4", "fcef35000000000022512070bce5a25570b494d89a85af7ba09d895150a56587b7f7acec0c02ca42514b39", "91f927000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363e1f8250be4afe1bc8d4d0a31bd3742c51e208f85fe088e4f07f552051790fdb"]}, "failure": {"scriptSig": "", "witness": ["6aa9616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/6f3e92cd7c0bd1c759a5d1ec589fa593028c2f27 b/txscript/data/taproot-ref/6f3e92cd7c0bd1c759a5d1ec589fa593028c2f27 new file mode 100644 index 0000000000..dac3ca09f8 --- /dev/null +++ b/txscript/data/taproot-ref/6f3e92cd7c0bd1c759a5d1ec589fa593028c2f27 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7c000000006ccee4d5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf550100000006f9c30c016ca90a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1b9c1b47", "prevouts": ["66cc700000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9fee7e0000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "da7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a47bed56458bb8201cfe785d9ebbccb6afef9cc99128ad29d757c102b7b9c0a9eb0481d56926b359fa3e2e34471adba51fafc61fa70dea7541795bc082db9408"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366a029025d4987be8973c8fee4cbbf96b701afaf5d6753deff2d6dff0516fae4ce4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a47bed56458bb8201cfe785d9ebbccb6afef9cc99128ad29d757c102b7b9c0a9eb0481d56926b359fa3e2e34471adba51fafc61fa70dea7541795bc082db9408"]}}, diff --git a/txscript/data/taproot-ref/6f52449eba2cea1fa19799e7de8f931e69c70cdb b/txscript/data/taproot-ref/6f52449eba2cea1fa19799e7de8f931e69c70cdb new file mode 100644 index 0000000000..b95be97e27 --- /dev/null +++ b/txscript/data/taproot-ref/6f52449eba2cea1fa19799e7de8f931e69c70cdb @@ -0,0 +1 @@ +{"tx": "1f1a48c703dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9b00000000fdf160f9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c03010000009968b6f760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270150000000060f62d8a013c37600000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc85000000", "prevouts": ["5a1a200000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "f39b5b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b0fe12000000000017a914b0b53ba433a336ced94ed75e23248458a1c69fab87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/emptywit", "final": true, "success": {"scriptSig": "", "witness": ["0c52ef46377fa809dbac5ed322d299d79134955de3618b10201d5faebce378c813ff45e1cdb421317e190245c5ea70d3fd0fff89e028c062d128760bd4134490", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}, "failure": {"scriptSig": "", "witness": []}}, diff --git a/txscript/data/taproot-ref/6f56fca6cc1c01fee921e3ebec30d918b7e84af1 b/txscript/data/taproot-ref/6f56fca6cc1c01fee921e3ebec30d918b7e84af1 new file mode 100644 index 0000000000..1c6651a76d --- /dev/null +++ b/txscript/data/taproot-ref/6f56fca6cc1c01fee921e3ebec30d918b7e84af1 @@ -0,0 +1 @@ +{"tx": "392083b603dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf8010000000320c5cf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704701000000934072f4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8200000000df73f6d504ec96cd0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac1b08b24d", "prevouts": ["47805900000000002251204e3fb1c88f2893b13c1c33c3a0d0cd819c49ecb88ca3deab379ce318a8955811", "1ca9100000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "e5a5650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ac7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa30268d77a27dfffd2973b5655548cd241058e748ff39c1f9c0ebcc25f2590463fc485b911b91245b46c320351c8e1d13bb30ee22c3f953d2224593bd4b5088ca"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bef2dd3e84f04fd56d20bf9e4a65c47b7f88dfb77d0f893796cf86007758622a30268d77a27dfffd2973b5655548cd241058e748ff39c1f9c0ebcc25f2590463fc485b911b91245b46c320351c8e1d13bb30ee22c3f953d2224593bd4b5088ca"]}}, diff --git a/txscript/data/taproot-ref/6f6d754696a56d367c058bd6cef710ac92a36c4d b/txscript/data/taproot-ref/6f6d754696a56d367c058bd6cef710ac92a36c4d new file mode 100644 index 0000000000..06b66bf342 --- /dev/null +++ b/txscript/data/taproot-ref/6f6d754696a56d367c058bd6cef710ac92a36c4d @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704200000000ec50a7c302a98c1000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787bf020000", "prevouts": ["043e120000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d98400ecd38521c785b85d37fe584d5d3682edaaae69d132e432540ebea68ba98c233b01e9e4730468573eec45eca5240787c123c03c41e786660d09325d057b4693d177569b8d5579a02ab5e075cd178f2a42353c5d571f41250e8a97a85151d0d9c83f966fbfff1e9f396160c66ba7b103d9245ac4e650ba070672b1a1c9b323060322fd5866b88016a7795daaffc3b634631ae76dca8ca14360f9d880d7c3174e4cc5cdea7118af9c25b7083ede26cb71fd8cbabb2a85b68ff2144b480342ecce0f18506a2ed93df165583b9702e9e55c40127db06cdaeebcb16fd49a39dd7688f57f7ec0331ece16655e5cfa452cc5a34e2d99d9acd6aa82b2930cd7c51d8ec8c08c969f35dded2ac5211a07651b1490eca967d0969098662fa62c23faaf7f37560bf1cea161076a69d3ae4f2b50278b5b0671f70a6a7a9f972c768516cab7672be25d8ccaac83d74a410248bb26ae387a9395dda350458e7a1d7aba28007ee2f135f66cef318ca1e84fdabef5dfcbd5c84bd05611d8fbfe43240fc3302e87fb4c62bdfc28fc865b26a09d0a3fe4e160bc71c2ee831e2847ab48330f0dffee804ba74cfc144497a6330119f6f1b52ca2e002b832db99031c384eee4af001ca76171d2684187f381780bf8fbe3949c3e2d087f0875907283ff5ac0e7131009fcf340caff5cdead5d660c6f55336fef40515e6e7a32fc232408392ee1a70b25dbb4e3ac620ab06ae75", "1f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6fb037ff446ebf56375516806af4ae7659446d7a3fc7277956df288e29adb4cec0d930d2ad3e784600f5ffd1efb1e58c37063febb6da2a9c1576d111e3c4564ed661e9ebd30f651fa020177c2a1e4ce51b505c9194e43d6074b392863f250ba"]}, "failure": {"scriptSig": "", "witness": ["4d0902d023ed8c46eb022249818b381c17252e7b245aea99a2445ad1eb80a93f572ca3611d97071118248afb797fc7946a532c9561d197e8accd84a36d0f8b30767946626bcbdb7440048493c2b2a958ab755577dbb3bb4615e4403d69d13cb5f1f7c851610ece3d8d1e6ff42a08b7a8d74370c1a666a38cd53ca8d31a71cb0216780a4239f6c9ac15f28cc3f16e01e9b786e9ea531b1ac3d301b98231c7862a6564c36fabc82759c25fcf6f0f04cfdfe19010f64689dd60f0088e4b303a8241263ca08c1aa15ea99f2dfeba6afbcde92cd883288a1e7e1383c31f1e955ff4a64b0ad12bb4605f631d0a3bce1d806b84832135d2c267d1556b4737ca21aca1c9c2e93fb6b0d8642f5990ec7f758d7b99c99f1818a49063ee4eb79c09c958a39b6b37a22390ebe395d73ba3105ba1b0c95a7a31aa59a4232e09eb300941668f2a9bd24d48a3d3d1d08ac8f96942a2614e9ee108887abbcd92d2240c18dc863eaa48ad88726ce2b53f897e62c2eb76b62dc90ab22bae5b9cc87a1611ea5dac0118e4ac950b6b95d5d466f58e9b7131fc2058e078143825c2f5ee21d28c14d961c9731105f2123fc3626aabdba6b41aa330e0ed44860f8faf1bf7259f38fbaf97e630edfb8ae6d0367ddb03a735b1647088a4557b04eb406df846f7d6e2cb9b10c38a9e1e8fe4727612f1c56a0230507d879287ca1c00594f0cc3ea649a3e726a0d0ba3240482938d8a042fef4875", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d3a1ffabbe96d474dd83c1fffece889ca7c1560b62811bbde312ff5c73e7fdd346c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facfc86bca0a8859889d9efd3fba9c68487fa49a78b15c293938d32f430a3e576ab3e02c0e1665e1d6a4b6ef98a6ef3a3632c98688db315e4c8eb8907479035d72"]}}, diff --git a/txscript/data/taproot-ref/6f7390dad86b309a8464acc781b7a22cdc6164de b/txscript/data/taproot-ref/6f7390dad86b309a8464acc781b7a22cdc6164de new file mode 100644 index 0000000000..4f1407d77b --- /dev/null +++ b/txscript/data/taproot-ref/6f7390dad86b309a8464acc781b7a22cdc6164de @@ -0,0 +1 @@ +{"tx": "044da27e03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdc000000001a07b0b4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9501000000bff781dddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bee00000000ac3a7bb4026db9df0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67e030000", "prevouts": ["ca4f73000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "2fbf4b00000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "e43e22000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ce", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900455067193501824fc7e1f7f904c1e32fba78339d7701e72316b16feebc15a414abab692e734634bfaf43d653c1e6f6d8e8d14797d8e4fda7a04cf5eec270202b46d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367d1fd0be73b6182e4cd51ed7a2b120ef2cd5ccabb8492e6bf7f26137f064f14b8def8465bc2f3cbc3837b9c231547f51d7c9e247c478e05a849822285048dd5e0ea67bdb3398814286540937ec364df004af879f987225ad05d036a51e8223e6d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}}, diff --git a/txscript/data/taproot-ref/6f775290762b949c8416b8db72a80fd4f625aeeb b/txscript/data/taproot-ref/6f775290762b949c8416b8db72a80fd4f625aeeb new file mode 100644 index 0000000000..20a1329617 --- /dev/null +++ b/txscript/data/taproot-ref/6f775290762b949c8416b8db72a80fd4f625aeeb @@ -0,0 +1 @@ +{"tx": "6640765702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5f0100000029d0c5b9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1e020000000a5e90fd0143ee2a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7ea02a33c", "prevouts": ["6120210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0999250000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_db", "final": true, "success": {"scriptSig": "", "witness": ["6d195f0a72ee656832bd23e0ae205f238cfdbaf9dc0614c8317838871fff6566db7a60c05ef9c6409974711884c70a3201e9559490602f40f10880b4bcfbcca4"]}, "failure": {"scriptSig": "", "witness": ["589d3f38c3ef00f94500624751906d8829d0715f1f4ef2ee87449ee48dcf6532d23b5a18e46f25ce0ba7923f2f58bec1783972ef424ebbbd8f5b24419d82837bdb"]}}, diff --git a/txscript/data/taproot-ref/6f8393bbb9d02857705efc61028b43ee819ae6ef b/txscript/data/taproot-ref/6f8393bbb9d02857705efc61028b43ee819ae6ef new file mode 100644 index 0000000000..b6b1647018 --- /dev/null +++ b/txscript/data/taproot-ref/6f8393bbb9d02857705efc61028b43ee819ae6ef @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1402000000d73d2e948bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4200200000097ebd4f30302dd930000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ad30a625", "prevouts": ["a81f570000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "e9523f000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa552be7238817b807c577e7c571d318055dfcbd95cc3dec1b5752f3912212e63f5a7735bc8e0f27305ca0f6b127eb0c71998afa21cfa1408dfc03edc17ac2e42ff4035580f6aad3e4d48161cfa55cd77c0146622bf63e71def681bc3cbf8a6f"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f01d0d256ad0d229e53661481dce388404558ec2529e0bc1d85e0261a585159aa9fad2668c863ea9bd6dd9197c1c49c61c2b9d7888bac8bf6fef03fc3ace0a5a"]}}, diff --git a/txscript/data/taproot-ref/6f8e2a9cd5725921d637323d42b65faaa53b2d0c b/txscript/data/taproot-ref/6f8e2a9cd5725921d637323d42b65faaa53b2d0c new file mode 100644 index 0000000000..f1a46cb1fa --- /dev/null +++ b/txscript/data/taproot-ref/6f8e2a9cd5725921d637323d42b65faaa53b2d0c @@ -0,0 +1 @@ +{"tx": "ebb0671102dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b780000000086a4f4c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfb01000000f9046ad00132320800000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac41935239", "prevouts": ["9e3b2000000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "fe3c270000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "fd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0822c6cefb1e181eefac563b15a866f5ecfc3c81e54821b9e81f79abce745f7d95962d72dd1cd8804fbc0be1dcf6a22214dbfb5210e6cde6f2a41edfb954edd50fb"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93647aa351277e8bbf9be587a60760fe90499ff4f7bade942ae6e0cdc6741c21b4ae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e850656d0bdb94b88d381f7a82b87984f770e250bf999894456706d2524183d15d62d72dd1cd8804fbc0be1dcf6a22214dbfb5210e6cde6f2a41edfb954edd50fb"]}}, diff --git a/txscript/data/taproot-ref/6f9c6ccc8504bc417cff64152e5d55f2da6384f6 b/txscript/data/taproot-ref/6f9c6ccc8504bc417cff64152e5d55f2da6384f6 new file mode 100644 index 0000000000..f89407ffc3 --- /dev/null +++ b/txscript/data/taproot-ref/6f9c6ccc8504bc417cff64152e5d55f2da6384f6 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4300100000062fdfcd68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45900000000e93273c30153505600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac25000000", "prevouts": ["c047320000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "3e083400000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "48304502210096d384e390bffcffba0c22773ea4cb94ad5cab4501ae286afc4b73f51eb354ea02200f921c9edff46d1c10ed000b87e42175a53e6ad34153078f00d7117a181080aa38", "witness": []}, "failure": {"scriptSig": "483045022100b176add6f5dd593f76f827e87edaee5dfc9e13ad73b04082ad5f05123f21ecab02207f271738f4c4fe0575dee0967548844f3ff5cc2cb1da627d8637a4f64cf4f60f38", "witness": []}}, diff --git a/txscript/data/taproot-ref/6fae620fa980b4c2193b8d1ca489fecb771da643 b/txscript/data/taproot-ref/6fae620fa980b4c2193b8d1ca489fecb771da643 new file mode 100644 index 0000000000..0949ec2ac1 --- /dev/null +++ b/txscript/data/taproot-ref/6fae620fa980b4c2193b8d1ca489fecb771da643 @@ -0,0 +1 @@ +{"tx": "71b5e2d803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba401000000be38a9c2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9b010000003949d5b6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba2010000007c0e80f601ed1c22000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787e6a4735d", "prevouts": ["4a3f2100000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "f873240000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "4005270000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f84c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bb84f5f1451210ceb72432b3e6d63235af9ffb877329c35283c8b2d18797507891e44dcd1430a53a9228b1d4df01e5c5d5af3846f876ba8dd78ee7e669e7153a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93616b2433637002a6288e5b498008a36f83adc9a4b9c08229b0f65a7712aba099bd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5129caa746058fefa69912501c9b6f792a531f2cb30638f1f343d3625f0a93b066f288028cdab461d62f9273620b97315e6e9af9458f777a616c1bade2d3f6a89e"]}}, diff --git a/txscript/data/taproot-ref/6fd7c011c1e087678c2fc502f6049d5a1610b285 b/txscript/data/taproot-ref/6fd7c011c1e087678c2fc502f6049d5a1610b285 new file mode 100644 index 0000000000..ed7bb551d6 --- /dev/null +++ b/txscript/data/taproot-ref/6fd7c011c1e087678c2fc502f6049d5a1610b285 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb30000000093a746acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cec010000007ed5e8d5021f6fb300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd239a551", "prevouts": ["0e86640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "519f5000000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "e47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e13278694ce96e600b1b1379af0dda4dcee22bd0822513808885cb6e68b7803daccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457ea7c8dd4a05a6083e4a7ce3fc20cde94d430ec03cbfbe8017e9dc8ef3bce99a9"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820d58db0463b9d01080baa2617114f2c0459e5723b09a0137090d28117705b675ea7c8dd4a05a6083e4a7ce3fc20cde94d430ec03cbfbe8017e9dc8ef3bce99a9"]}}, diff --git a/txscript/data/taproot-ref/6fda74aa278e18be569d89d76d2b7d189719fc9b b/txscript/data/taproot-ref/6fda74aa278e18be569d89d76d2b7d189719fc9b new file mode 100644 index 0000000000..e156647fe3 --- /dev/null +++ b/txscript/data/taproot-ref/6fda74aa278e18be569d89d76d2b7d189719fc9b @@ -0,0 +1 @@ +{"tx": "564957d90260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702a000000004dcc25e160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b100000000af182efc0194a10e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac93b72d3e", "prevouts": ["5f160f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cdd10e00000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ea", "final": true, "success": {"scriptSig": "", "witness": ["4bd561d66e58c68fe761237a83f4cc3e98086d7177b59215ff63bfb32c4d4970c60acbff8553353aff690d1f8d399eac4ec267201dfe585f84457b46abccec3181", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ac361121751eecd7ef5f546cb4d4ffa6a292e05f81086ef168557f1098cb7430017430a92e6ce30a54411b3b7baaf44da203655aded95efafb52ca8d4f8a5a92ea", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/6fe4cc6bb00f0db22fe4cf7e68170752bf9e1f7d b/txscript/data/taproot-ref/6fe4cc6bb00f0db22fe4cf7e68170752bf9e1f7d new file mode 100644 index 0000000000..83fe5ed885 --- /dev/null +++ b/txscript/data/taproot-ref/6fe4cc6bb00f0db22fe4cf7e68170752bf9e1f7d @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9301000000b42ed6a28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d90000000081fe60ac049d5a9100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac47d04324", "prevouts": ["749a5a000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e", "d2c139000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "347d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faa00efe7e15c1e643e9e1cfaff50670e7cac10128754f4af7dc416953d80cca2b070c3fd2cc03cfe72ec91581f9e22200fa4c4f6deb8dafcd335310e90efb11e5"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366956433f4fb745717b89f2dabf7821b404dd73db8a334af9b6b63fb319135fc93ac03c85a7bde4aa83325c4e9fa3803d6178be55885bf5b72d341e036ded0599070c3fd2cc03cfe72ec91581f9e22200fa4c4f6deb8dafcd335310e90efb11e5"]}}, diff --git a/txscript/data/taproot-ref/6ff3146da9ac0acb6f0c208976dc39290b684b16 b/txscript/data/taproot-ref/6ff3146da9ac0acb6f0c208976dc39290b684b16 new file mode 100644 index 0000000000..459e15670d --- /dev/null +++ b/txscript/data/taproot-ref/6ff3146da9ac0acb6f0c208976dc39290b684b16 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c910000000057056869dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c47010000003cf378558bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44d010000006ea78b090428b4f3000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac70000000", "prevouts": ["9f7a60000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "8619550000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "478f400000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e068", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93628082d35abe6ef83905e008989e1064363253e92a96e384c0e19752d72666028d81cfe71594e1389c7dbef12605d87c33af6e429193e755ec800f4a6d58e14260941252319b1d0989c3ca3905f2d65278f17fb3ebe6fd71301329f8e450b42a05a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a353eb258bfe69706fad87149f0062bbeb66245797a793aa1397e15fb4e048a6b8fb8a6613bd9c6482328b74d7fce63938f8fb7ab14fbe335c660b528e72f6791d26af6ddceab3892536958f1ea20dd7b885ab499207106c7decaa6511a0e4c5a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}}, diff --git a/txscript/data/taproot-ref/6ffb4a945d04f8b031049d6b6fa49f15f19568e5 b/txscript/data/taproot-ref/6ffb4a945d04f8b031049d6b6fa49f15f19568e5 new file mode 100644 index 0000000000..97b6a255f1 --- /dev/null +++ b/txscript/data/taproot-ref/6ffb4a945d04f8b031049d6b6fa49f15f19568e5 @@ -0,0 +1 @@ +{"tx": "ce6d8fb40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707b01000000a82eaabe60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702600000000318dc6de03fb901d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e7b3b94c", "prevouts": ["945c0f00000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "65c510000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["ce4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb2c5514a992c22e53e3a04f6b085a9b65917ab3f28cc532348e66ade0afda2c959bd9b34bb85690c892593228383c48f2c7a3855b4947a3dd1708d13c567655d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d65a5d3ec5f807343f2d36728ab3e78b89e6b3a032f7e993a165c380ec55ed8fd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5125e7936dacf44c2cc5542287b329619dfaa06ef235a847d66c9c2df863225da6d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}}, diff --git a/txscript/data/taproot-ref/70103c6bfa6033fc750d73a791d50375a1b86fea b/txscript/data/taproot-ref/70103c6bfa6033fc750d73a791d50375a1b86fea new file mode 100644 index 0000000000..ab95a1b2e4 --- /dev/null +++ b/txscript/data/taproot-ref/70103c6bfa6033fc750d73a791d50375a1b86fea @@ -0,0 +1 @@ +{"tx": "23ccb2ba038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d2000000000276dbdddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc201000000bff559ce8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49b010000003499f1aa02d96dc3000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac8a010000", "prevouts": ["334c420000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b5fe4b00000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "3fdb36000000000017a914aa4a4e70b11f4eec4760f77206dc93b02350fcff87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a9", "final": true, "success": {"scriptSig": "", "witness": ["cf68cfacc0717997e89d00fe409492469bd7456be2fc7cfebb9c7ed437f9f9aa61feec882601b4f1eb93a70437592989b0186ea2a24bdd82882f6bcb2f99267382"]}, "failure": {"scriptSig": "", "witness": ["28a307c3bf4658b932c6b9e8c636463b608b420f93e72cd6fa25b9206ef847ea6baed922ac2d3299c636619e2657554f56c28eb4e789c4560ce0e38db5db8444a9"]}}, diff --git a/txscript/data/taproot-ref/70294d4a0a0438dea998f982369933dacc66aacd b/txscript/data/taproot-ref/70294d4a0a0438dea998f982369933dacc66aacd new file mode 100644 index 0000000000..3ddb130aef --- /dev/null +++ b/txscript/data/taproot-ref/70294d4a0a0438dea998f982369933dacc66aacd @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709e01000000b32c5df604b4520d000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac61030000", "prevouts": ["c4080f0000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063bf68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93619d862adf527dcbd6251afda613bb700de56c3c64ed29851c444942e2faf911420e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e10ad4e0ac96c164f1885f81b1e139f05879070681278f68106e4fa54c23a8038d82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab6cf39500705731d4b2d9ebe0ca35e7ccc55c3e2e84eceb274b16f05174389b911e2ebc11e8ff6aef3c08be5d8086fd4b944e3e1f7063038c1b6dadb4d48ab0219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}}, diff --git a/txscript/data/taproot-ref/708f0996354e7df20b2aef4b10bc9586dcaa5db0 b/txscript/data/taproot-ref/708f0996354e7df20b2aef4b10bc9586dcaa5db0 new file mode 100644 index 0000000000..55230d8920 --- /dev/null +++ b/txscript/data/taproot-ref/708f0996354e7df20b2aef4b10bc9586dcaa5db0 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42300000000b20b5953dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4baf0100000081d35f7204231e5800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fced000000", "prevouts": ["db4e380000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "31d2210000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["df4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936be89d319d8869e9bf9ae746cc5e400e37fd9a102b3c132ccd07930db67bce60a51d880cc047c10a424f65fe9dd9096492f3efd8e08517d04362957faed36c3f852ff338358c59a252efd0a17af70f1cdfe194eb24c5d50483b26343bf89011bf"]}, "failure": {"scriptSig": "", "witness": ["4c52df", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369421f0c813f1c39cbe21c39d454fdad8d39c88e7d0478d0b244f0694cec3217cd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5115b534b99635107bf366447ce9661d5eae557250694ef66e76c31b44d1abe134360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}}, diff --git a/txscript/data/taproot-ref/70c7802de56e11939701cba269f74c5c54434e61 b/txscript/data/taproot-ref/70c7802de56e11939701cba269f74c5c54434e61 new file mode 100644 index 0000000000..a76b046575 --- /dev/null +++ b/txscript/data/taproot-ref/70c7802de56e11939701cba269f74c5c54434e61 @@ -0,0 +1 @@ +{"tx": "5bee4af203bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2200000000c005eba660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ed0100000060fdda93bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf65010000000bf347b903f07aea000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689872898922a", "prevouts": ["c7c87a0000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "d53a0f00000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "1e11630000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6aec", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514ff463d85551b82eff8f4009a79f35c7c71a55ad97e02e5d54d505fc944ebf2db68406090ec9503da6e41d61411400226504a16a75c985e068fea4ead469507b3b719bf4b6df334f4ad3966afd516fb2a8d294cb4fface4e4609ab1c9f988c5a"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369eeb256fe03de844f7630ee1f9d4f8bd53f7cfbd5ea69e2aa5922cbf41317df14ff463d85551b82eff8f4009a79f35c7c71a55ad97e02e5d54d505fc944ebf2db68406090ec9503da6e41d61411400226504a16a75c985e068fea4ead469507b3b719bf4b6df334f4ad3966afd516fb2a8d294cb4fface4e4609ab1c9f988c5a"]}}, diff --git a/txscript/data/taproot-ref/70cd3f4760a280eac2806e6373034a5e750cb013 b/txscript/data/taproot-ref/70cd3f4760a280eac2806e6373034a5e750cb013 new file mode 100644 index 0000000000..bd14e3346b --- /dev/null +++ b/txscript/data/taproot-ref/70cd3f4760a280eac2806e6373034a5e750cb013 @@ -0,0 +1 @@ +{"tx": "9cb7d226028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e800000000505ce1bc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43601000000043fdc9a0412077300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689879f020000", "prevouts": ["728d4000000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85", "e467340000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "9a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e874224dbe9932044562df2f9dbf2ed3a87afba7bd9cf6855f9f40e4c24add8036ef17902325999cb16876d9e124f321b7a2400c6233e0b61b95917979ea167214"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362dd94ab6ac3ba59fc544244dcd9eb18ac121794a237f6dbebbd82fbb662320abda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e75ccfc706e32ae7f6b2a63f59d728082bfb2443bbee0d6dae87ff94b5ceebef57e56d08eecb8b548a03ce82dd22dc92a64f1be159e88ba8944ed4666490b777c"]}}, diff --git a/txscript/data/taproot-ref/70e123fe2099ae69883a84234ee7d2c67ffae902 b/txscript/data/taproot-ref/70e123fe2099ae69883a84234ee7d2c67ffae902 new file mode 100644 index 0000000000..ecb83e3c60 --- /dev/null +++ b/txscript/data/taproot-ref/70e123fe2099ae69883a84234ee7d2c67ffae902 @@ -0,0 +1 @@ +{"tx": "8dbcaa8f0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704e000000001f96ee99bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb900000000f13ab3910248cb8c00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac4f13664b", "prevouts": ["cc920f00000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "1dc97f0000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a7f", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d1e2e06d6ff5c459c120ed1951ff2f8353cc05da31129bd66db4aa2f495d014ff8d5397512e216c7ab52609f0ab27ccbbfd2b7e561d7599ada55e292956af911ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93657c0032d4e48b70562ff2a9a0f5ac730dd2177fd5d330b71920c0f4217bb1e47d82f8c55e99af1bc6044802eb870171f459184b3c99e354e12eac4f204be9c37cf5fd42f9969f7f2472ed1fa62ffa49909a09466cf06ef7c57cb1be351156c54"]}}, diff --git a/txscript/data/taproot-ref/70f98e7683065de833f78e968b12a17560c6d145 b/txscript/data/taproot-ref/70f98e7683065de833f78e968b12a17560c6d145 new file mode 100644 index 0000000000..cda9e56c7c --- /dev/null +++ b/txscript/data/taproot-ref/70f98e7683065de833f78e968b12a17560c6d145 @@ -0,0 +1 @@ +{"tx": "69e9ad9d02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6600000000c9d7deda60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f001000000c805afc401196533000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f871b91163a", "prevouts": ["17806000000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "eed7110000000000225120934cc30b71223b04aa2af20106e445bb93ef4a67adba137dbea8fd26e6a0b3fd"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364f585542b894e5830b48f56f4cc72472e37b8c308eeed1b26541f7876cad2bcd"]}, "failure": {"scriptSig": "", "witness": ["6a6c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/7125c24e3079aa7ecd8a075096657aa41cbf32aa b/txscript/data/taproot-ref/7125c24e3079aa7ecd8a075096657aa41cbf32aa new file mode 100644 index 0000000000..97b926ffcc --- /dev/null +++ b/txscript/data/taproot-ref/7125c24e3079aa7ecd8a075096657aa41cbf32aa @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf55000000004245bcb4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b17000000009c83f3e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3a01000000932991810400c0e700000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac6fe3af24", "prevouts": ["3f1c6e00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67", "ceaf1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "75615d00000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f1", "final": true, "success": {"scriptSig": "", "witness": ["2c48c1f997828ff35b795585beb51556a9e7da80571b3b9d00a7ad3fbab2c4bd1b73f08720100c7885c7fced95be4f4025449564a0380c71699a694a110da3dd81"]}, "failure": {"scriptSig": "", "witness": ["440bb0fbb382877d0b30eaf1ce461ea54c7d31459e74d0acd0eda91c41409ff3b3fad5b95b5c624aa71c744c931c5532c29b16bb56d9627c8adb3f2cfd0323cdf1"]}}, diff --git a/txscript/data/taproot-ref/712c593d655c49212ff38704eff4d5d68d14506d b/txscript/data/taproot-ref/712c593d655c49212ff38704eff4d5d68d14506d new file mode 100644 index 0000000000..b9158cc2e9 --- /dev/null +++ b/txscript/data/taproot-ref/712c593d655c49212ff38704eff4d5d68d14506d @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4460000000086c6650edceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc500000000f5bf2afe03cdd85f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac3de12d2f", "prevouts": ["c9003a000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "c668270000000000165f142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["71eefcdb8d2379aa4114d1652ff5b26ff9e9837a357afe394faff811594b984a68cfccc007366d1849ce7ea39f0378e7103d955f117853687334736851d75c37"]}}, diff --git a/txscript/data/taproot-ref/713565a78c4f0eefe92a042e831427511dd4f5b9 b/txscript/data/taproot-ref/713565a78c4f0eefe92a042e831427511dd4f5b9 new file mode 100644 index 0000000000..de4957cc6c --- /dev/null +++ b/txscript/data/taproot-ref/713565a78c4f0eefe92a042e831427511dd4f5b9 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c09010000008fbe4ad0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7f01000000637407e402af757c000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6af040000", "prevouts": ["41885b0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "e76b2300000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["81", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824d4a172c841d8bdf967229e1606322d36b03ac644f3c557c1b9d417f1b2a2a789823c6bcc0c06b1ccedd8f3302fb965778bf11fdbd4830d29cbc62f32a77240ccdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362abad23705572fa5091822077faf7723b4aee0fe16a98731801378aa56415cd84d4a172c841d8bdf967229e1606322d36b03ac644f3c557c1b9d417f1b2a2a789823c6bcc0c06b1ccedd8f3302fb965778bf11fdbd4830d29cbc62f32a77240ccdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}}, diff --git a/txscript/data/taproot-ref/715cf3f1edec8508d34687cba9eb9735c4113fc8 b/txscript/data/taproot-ref/715cf3f1edec8508d34687cba9eb9735c4113fc8 new file mode 100644 index 0000000000..6274e18b8f --- /dev/null +++ b/txscript/data/taproot-ref/715cf3f1edec8508d34687cba9eb9735c4113fc8 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a00000000b81b6fb28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4440000000042523524047aca7f000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374872584c954", "prevouts": ["2c8f4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cc64350000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_9", "final": true, "success": {"scriptSig": "", "witness": ["25cb817a20ad60a967642bcf9e2bde3234fc99257daa6369fb16f8db5a10332890010ea7a0dc27c45136a30d74e9a89fbaa5a189f9c8401f49ec912b08ad036703", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1b30baf514a3eba21ac4e0dd30c9a3f880398ad89900f83580914b631c7e1a55da4199b85d08a7769dc836336718908b9d2f3e0c642c8bb29120dc47e0f5539109", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/716e9a2309a2d14f0b54d759df166270321962ca b/txscript/data/taproot-ref/716e9a2309a2d14f0b54d759df166270321962ca new file mode 100644 index 0000000000..4f39e6ae2d --- /dev/null +++ b/txscript/data/taproot-ref/716e9a2309a2d14f0b54d759df166270321962ca @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46101000000b6d1aeac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707b000000000a17a0dc015a9020000000000017a914719f78084af863e000acd618ba76df9797223689878f020000", "prevouts": ["2a803200000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "dc95120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_55", "final": true, "success": {"scriptSig": "", "witness": ["70b172c476617b79f6ebd78f1152014d36200c813615b503e3cde754ac5b44089e89c84b97f88b912779b208f5edafe0888df609eefc9b377c020c46644949de01"]}, "failure": {"scriptSig": "", "witness": ["59bec9303e6e85d67f84761eec9a2af84c74df855ca43cb3aa2d5b35d9f29f4a8c50c54e635d7d769eeebda02120978e4600d43567ffdb9db8e334ba25cfa04d55"]}}, diff --git a/txscript/data/taproot-ref/71807ffa82a2c8190651c69c857cb71bcb08e301 b/txscript/data/taproot-ref/71807ffa82a2c8190651c69c857cb71bcb08e301 new file mode 100644 index 0000000000..347207f434 --- /dev/null +++ b/txscript/data/taproot-ref/71807ffa82a2c8190651c69c857cb71bcb08e301 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfd010000002957ffe6033cfd1f0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79625826548", "prevouts": ["49b32200000000002251204581460b504b6638e3fea2d0934fd04d28875d06c13da9be94a1b9d0f13f4099"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936803ab98b0f9ddf6f3e41ca6fb773f94017ab748bdc2b143170ff14bdba4b72f5"]}, "failure": {"scriptSig": "", "witness": ["6a37616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/71a2de6544779c774612b1f87277375ae9792a62 b/txscript/data/taproot-ref/71a2de6544779c774612b1f87277375ae9792a62 new file mode 100644 index 0000000000..f03a7f00a8 --- /dev/null +++ b/txscript/data/taproot-ref/71a2de6544779c774612b1f87277375ae9792a62 @@ -0,0 +1 @@ +{"tx": "6287608201bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf350000000033d65698012a9d05000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487193a7b37", "prevouts": ["9780700000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e94c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ac778bb6e9889cb94937fc77a861bf4edb1757bb7369dd12c591a6cfed1c6a5fcbd8218c9dac71a3535cf40d08210778548ef11a7c40c018c5ea1885d9980740ce9ba0618adb3ee44483a22999a54a4e1710b9846377d8164aaa29371d79f22a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93636d4c52f29c92967d3f95d954ae2b8d45ca9ec3ae28f3ad290d21ee88ac8013e5e04c998862288954a26ee7ce146837a88020619bd4ef6b5d2b0b49b83f7fafffc7f9c78871d6a598c7c7c3f4c8210a5c47caa8abf9700608b6e75845c74a6c5"]}}, diff --git a/txscript/data/taproot-ref/71d2976410e52b3891d47b0bf5daf36223655072 b/txscript/data/taproot-ref/71d2976410e52b3891d47b0bf5daf36223655072 new file mode 100644 index 0000000000..9405ce88bf --- /dev/null +++ b/txscript/data/taproot-ref/71d2976410e52b3891d47b0bf5daf36223655072 @@ -0,0 +1 @@ +{"tx": "b519aa9e02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7b000000005fde7c9860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a8000000008d3b00900238e98e000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7a5030000", "prevouts": ["b94b820000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "893c0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "47304402207298e9f137c42b68f8a3eff5f4558ee11594a946363a925fdf428b2dab5761de022072df6188aa1e65a8fca130f7c42a267a3d95c5eeecf77af9c0454ffbae8f4ade85", "witness": []}, "failure": {"scriptSig": "483045022100f55c0187c96fe2aa0fb1f25fd36d194aa15cb0994999993e349ea70323ca80210220310892946f3796e322083e4d44a3ba9243836aeb819df7c7e861ca769bafc38f85", "witness": []}}, diff --git a/txscript/data/taproot-ref/71d3d5be815413f81a15e1f21d82fa46ce4eeab9 b/txscript/data/taproot-ref/71d3d5be815413f81a15e1f21d82fa46ce4eeab9 new file mode 100644 index 0000000000..e5fac92912 --- /dev/null +++ b/txscript/data/taproot-ref/71d3d5be815413f81a15e1f21d82fa46ce4eeab9 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be60000000081cd06d2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba600000000e8ea84da04f3fb48000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c8e69e59", "prevouts": ["4c1b2700000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "bb67240000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c54c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694642e1d6a26a11a0c6e91919f09b278112d3d9e7557d10f9f51d88907efe7b71ca095b957df84f3ee7611aa117e5662ab64755743d6d9c5cff6305984f4054c5075e3d7a2801b75eefdf65cb630fc6bd09768ae07eb1bf67760ac5f1c253b1300a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900457ad860089e7bc2a902df7d26b00c72c3270dfe98d44c73f0cc876602eea860a2660eca3fa0edb42c0ab30ffe3daaf6f1f409e953104f48559c2b804c71af6a81ce4d7767c8a9637a0804b073b1eb172c67de67ce152ade33f2591a85dfee2e5a"]}}, diff --git a/txscript/data/taproot-ref/71ea7e6e573f89e2a23138bfbd547d888bdb7c55 b/txscript/data/taproot-ref/71ea7e6e573f89e2a23138bfbd547d888bdb7c55 new file mode 100644 index 0000000000..eda3a1c2af --- /dev/null +++ b/txscript/data/taproot-ref/71ea7e6e573f89e2a23138bfbd547d888bdb7c55 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2001000000af3b7dc802d19f4d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac491a804c", "prevouts": ["075e4f00000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "107d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e86665110f53a885bff43176a7d7b6b195840e7c84801cde818ee8fcc4f3857331bd940ade039b405c8439b762bfbc73f9441ef227e6f687b6d94ebcbac32155c7"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936abb663633cecfbdf047dd686359b8961732858ab1d7ce30f20dcec80a10ff65c32fffbf821c428499cff2b0139c90d93037c61d12af2692624d5246efcf2a3a14520b5ceb13d27db1b37ec8ee9ee9482aafd08fc62c5401b1fb7c7b4ff374c3d"]}}, diff --git a/txscript/data/taproot-ref/71f13e97734a6166d08d71982621f3785ea5ae3d b/txscript/data/taproot-ref/71f13e97734a6166d08d71982621f3785ea5ae3d new file mode 100644 index 0000000000..842861294e --- /dev/null +++ b/txscript/data/taproot-ref/71f13e97734a6166d08d71982621f3785ea5ae3d @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8301000000820c50a18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48c0100000021f32087dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbf01000000a91f7be901ef40c600000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acac07da2f", "prevouts": ["4cf95b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f456400000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "d4ce59000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c8", "final": true, "success": {"scriptSig": "", "witness": ["9becb17c1231fe529b6ea1a407ad1f82bc91a5a3732db42c15e13346bfa188bf9b620c62ee46cc570b395da25ebdfb35478b88adc06b46b6e5a77897618bdac103"]}, "failure": {"scriptSig": "", "witness": ["a9b7629951a0e094e8cf85c20147b28cdef214259be99a5e0cf25c04ed748e5354323fd920adf1d6c338bb51b5aa7b55720db9abf98276ce581ea3e6c0f8a408c8"]}}, diff --git a/txscript/data/taproot-ref/7217d80b5053a43d6fb6822470d12e76b42b2764 b/txscript/data/taproot-ref/7217d80b5053a43d6fb6822470d12e76b42b2764 new file mode 100644 index 0000000000..8f297b5d9e --- /dev/null +++ b/txscript/data/taproot-ref/7217d80b5053a43d6fb6822470d12e76b42b2764 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9501000000ea4b4ae9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c140000000035454f190291a37500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac963fce3c", "prevouts": ["e1f320000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec", "dab856000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ba7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824a7888d88a49f036a686b85959429d2c21b5cc7c31f53deb0eff848be794e4af5668d978bcc8d3ac0b8aded42d2a4a1c5e69a5396581e310868cb48ff813edbf"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361a6268ec6605c0a71a3baf80bbaf2c35e719965b840f442bd67e2fffd291e10546c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa8eec2374ba6ebc72bec4e80a7a4eb00aacc51a24e1026152998b46c213b611dafed5a24f2185242e3d6c1310740c566533f3942992fafe5f5be2785933680ed6"]}}, diff --git a/txscript/data/taproot-ref/7222bfdff7231c2aa5afe88a9b8860e057c947b7 b/txscript/data/taproot-ref/7222bfdff7231c2aa5afe88a9b8860e057c947b7 new file mode 100644 index 0000000000..0b86ab4a89 --- /dev/null +++ b/txscript/data/taproot-ref/7222bfdff7231c2aa5afe88a9b8860e057c947b7 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44f01000000e8d79ef28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4aa01000000a7c6011a025172760000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df9797223689874bb33631", "prevouts": ["98d7380000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "af6e4000000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "fe", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d877db375ed8535ba033f90d60f6b296e0f2bd1d7897409f54097620de448bdd800fc56907ebb8e18291aa6f74a5d7a46b4d60066ab44c243b43072452172e3365bb68c3eae5e6cd9b20289e581f52d4e8c0cb4ba58bcd8be9e67bc80fb920a1e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f273e05517e7d7c4ebae818f78ffc6ae6bbd8b4691985bf60fb53bef1b79009a0d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3b44d8b0f62b2d27de7be259100200d6da1e5303b29f3eaa1b6a4eeb0c96a42f364ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}}, diff --git a/txscript/data/taproot-ref/722914ef8c3dfacc1243877cf6bc0be5cc3eb6c2 b/txscript/data/taproot-ref/722914ef8c3dfacc1243877cf6bc0be5cc3eb6c2 new file mode 100644 index 0000000000..9651f7823f --- /dev/null +++ b/txscript/data/taproot-ref/722914ef8c3dfacc1243877cf6bc0be5cc3eb6c2 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e02000000912e21dfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9a0100000031b47cf98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4980000000092ee46990448da0101000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd8010000", "prevouts": ["ac7a4e00000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "3b7a79000000000022512065eb0ad8f24d6d8eb63c7f85eaa52926e45dd0588dc97971df796ca5c67918e7", "18b33b0000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["5ec5d50688ba958a318a24ccf231a4caca99043b5b9aeadbd4fdcfd6164e7f05d4bf1d7360752e902b5a043be1e5fab205990eff07191ee96b5faf8686f7ecfd01", "61e0f6c7957000856f68afdf46b3201ed9e484f794d24fca155304d56b298ac6a240551a16db", "753535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a200636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1605044119c566b794159a23a9ec14e8a93eb35aca328c0e9d704ad02ae272660d408f2c3322130c1b8d98bcdc511cbf08ed6626c6ad5103ccb066ba3a446285d944bd9ad9eefb4639ed414d71b7c064f5fd84ad1c711132e2e9ebde5b94751b1e89caf5e2beb3889a98787abd8bf5d9afe0e4fc9dce3fea32eac6b23d618250000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb7826dd75b46e39b7208110a8e4187cc050392b3240f6316343fd3b5c2b15070000000000000000000000000000000000000000000000000000000000000000adeb2aad8459e3024ad2c2668541698cc8ce93668bd039750f5cc00fa3a4e14a9decdf7367ccf39a5da3025933ebbc5bfd9a59aaa537efe38ecc935db60cc7971db1de8dd1ebdcc2290e210e150309d2465c3e1f8f0d5b69187fa4290bc75b4804cb173a164212cb7d19614d96e5768c34d4dfd8433301572533455de27a30fc0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a15dc305681a926f377a601cf7c23c071267546f841030423230b4c08d220bf6c9371e0d47758eea2a2ef95e5c74652fe359e7a84bebaedd8f5cbad2e472078c89f4b57a3fe8ee55a2db8bc582dc2c086d6e2013270905e13b8a693cb448c815eb89bc8c94a921a08e17d69803aee69436fb8d642a195d2e3dbfd7ff4b07ea357c8c08c8b755ecca4dcd7260f3fc75b2bb426acdb917760f3c308a9dd56db50effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3514cd63adf5931b68575d063acc4ddc8ee198aba956d89a95c52880f987a5661f576596297ba20062b14f5c152df22829b55362d0bf62d312082561adedf5860061d9b857fa33e2925e2cfb59d3468d01d142aaa17ffdb306a6bcb3eb8c12b272df65b9b97bd8b6d3366db979794369fb42a62a32050c03dd496726c738740ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff952d98373bb692a211303639b04be8941ab69fc8fd8eaf22c25e4559817e4fc473ffe52f713c9509fb97eef4ec0aee20aeaa224974f203ffd301248a8ef6a3f6872745ff295f39dcc43a0fc05df9a0cc9ffd5055d92afa2346ebb2066376e8e558469301a9b6e263ea24102e6961fa2ae1e169c19c62b66d80499088e745bb6f00000000000000000000000000000000000000000000000000000000000000005d5dc489b6e5ed040e15480e64d74b78db75e01ffbe580e92d8a83b4ea6feeca1bb0a648bf98b56229535d4a542e847b45e4adfbc121dbc34dbbeee80e65545d00000000000000000000000000000000000000000000000000000000000000004acc8aa50fa881b69533ab9d152609c0dd064f9d02eb2148495e4078c79340440366f3dea0a2618a35d2722e492eac5b3289be3b7f85d789a6abbe08045b1f31ba87451c2d4b0cc017130b862b1b8210b40dde36f5718c48875db29461a66c2affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000005617bca7ef5e6cb18dbd2fbf24d980e9ccc7f39b70e1ff40d2405bec8d53fe9ad115c1e28ec2189fe47803972a7fd0c558f3daa78566e4be2b36a0c28dd423c200000000000000000000000000000000000000000000000000000000000000002cc1350b22905345362f666e73bada0a8b51404f26211cfbc3dec8c5f395a58b52852d919e15fed226b531c6dfac78217d3f4ec616843da9bcf13cde5dbbd2d252d6e794e5dc155b8e8b5bc46dfdef923814f07c6da7f5104e902378031b941645923efd542f46b65b36296d8568e958d60068696cd8938867d7ad1895bb717534d7e98d5d8c463537c2038f4061bf2f53e73a877ae92d3bc93f95b6b2c5c4028b7d821ebd6a528d2ad07e0f8f328041c9ff00dfc88352e2b863e9ea217d37350000000000000000000000000000000000000000000000000000000000000000d6d1be3f9f22d73e15361b24c926056f492e08e7a2e66c25e9ba2084e65c4a2effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff522e22e9fbda23fe7bac8b261b406cfa379fcb4bc4be65b2f492439cbb293259ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f54a5a7a721fbd7dd169a7f9816769ffaa8cecf08f113505d0a4dcb7eb2f1e8ca9f216f3ebe4a4ecf792769b51ef6f3617d8f04df33be5ac634a8e6f503bd6cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56067b6a3b8238e03d3addcd41f3fe569f8fe63463f45b4f69f30375e6a57dbadd986b6448bbd0d70ce5ed3edd16f37a28aee9a0401ba2c333ff2410e9a31a75ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5ae0d8d847a44579f27fe19e31b1c7c43ce8d41d474656aec9130caa444b60a4446178611dcce24e889d9c2f7ac8464806786032e4870ec6cf39ff3c83279c62000000000000000000000000000000000000000000000000000000000000000068d75ecb954c141cddc6009102adcf05c4c577a456815f49daead75edc4b18c4a2acf3bb28d15d945db1b63fbca8bb15e96676ee0b85dd00a211c659200d55bfa653963c6d225171a310191ba5dfa12da98a0e8e0a2e2415ef8ddcec6835f8b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12202008f40f7309b3c7453e91986dfa6e32732e08dd2af6d91e15390ae3deac65255920dc1074edce60bcab1348c3cf866f42b23a58ae1393ba69b8913d65cf0d7fae50141c3e3108f4cbd1f13b7333ee41b96c67cbb7b1e60558f2194f13f10000000000000000000000000000000000000000000000000000000000000000bce4fabfd555fccc54f5fb39c21eb1d92489e12bb54ca79bbfa9f07d2638ded37b8e51d0f490b30741c958cea8c2a821c55ff6f7121bf7a8aa5f94c8b2c4490b45ae10473939f2a532a8213d6cf3326962066d30f164f24697e7a4b8b5a81a7dfbf8bd91da6890ef3a8a40d33886b39f7db38aa33a4342654de37e996b482e821a6ce9571f0eb53fa2dd67c21bb74554b69b76e576f0b4f083e420a992ba9e15ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60eeea331b14f18667651bf2de9c937da7f86785e94288f19cd993d39fd8b1aa161ccf2dd39620d042a908d49ac607762ee1691c06958d3c3eca6ee05c80c309fd35f339800d1b526ce4bb0397359720aec6e2f6d7f29ba49fc55e76c17239660000000000000000000000000000000000000000000000000000000000000000b925063e800b0f603da8d6fee95ba9c797ca5e92e1da12cf510e4253f04467b3a009e9599efd22e228aa8754c121d637e7a29a4bc809a559a8e2b318fd2b7ccc6e974f144d38b7409092881bbecf143c7512f55ed5c01b8f0ca56efae83305391cf16e342c26171396d6203043abfe8d255e066ab2ec23f4f77580cf3395b3d94cd16b22791568a984ed01f8c62118b04ff9d1b7174a72070d84db138355bb5267b3181e480e62b991a2488b2cbc4b9ab69233eee79413425868b1bccc0dd2894c34b15442dbb5f3cac263a7b67c9f668ccbf40cce28939869d980e7a08e0d6affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2976d896158f2e452dcc5e82e7d94c1222a6ffeff8e3a642bf53dfb88e75aa3f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d35faa5bff08e02176b268bba767bd054ea45a6afbfab0ddfba339a189039dca8b13a84a55fbcfe4071810185a6ab685582cdad9badbc263842bb6b3daa84928357bc54732c2af7a9a8ae86b96da00b5a963772a438d7e575bdb417620bf07c98f3fddc91038dd143041b7553320eb0531f466cae85ef567a7b56aa8264eec7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaaad7f7b1c89fa9fd603038fc9dbfe91846830b37b89309d35ddbcb21eb7ead4b8419d165ba657503d8c8fac9e04888ecb0155d5656cfddcba611a3aa0deffcbcaad93eba073531c6f6122c7951e1093a14d7d07bfae4a4b494d8f26bb7682e9057aa808812a8bebeae3db2629d339b2690300e2d74c081c42fba304dec7563e2272f782359ec29c0f81d54b78ac02848f2d147ae5baff5b799cbe9574db748cc8044689ec1ededf59a10179cf1c112201a907d1e43f6310836c65db58825f0bd04dbc30ef782cb1c3e43b3a3d078c29bf67ceedf5fca61e7271688fe90d4ff6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b0033303d2de10daa76692b6ea201f57b0ea985778960d539da234f8d3d4ecf49f2fd2807beed1e234c20ff1ef0b91eceb83a7113d70bd5b11d6587b35bbac16bc25f0276e423d15bd494a0479c35701478b3997351af11ca8999e16b5a52a916f13a7059e3b88e2cb535ee3c857e3ffffbb30a2860ddf4ebf171608cc80c41935edaa6170f0ce5dff93a1a6b257c7fec45d35fca37c2d259f9b54c53519b5c934029a6d3cf9f905f1c6598826093b6fee6c7092d3e686e16c75eb2167e69b8695230e51389257769e372b1670d700f244923da50dd40177d1ce87f84d31bd0c081f7e8141153f9fbc10e911d5ff34edc6a0674311901ce1842ef2ed590077ae7c054ca8f4adece2737c3d25c3a526c8563a76d32f3376157a6695e986acf0eb85804d72c8a9d84a3774c76b0d3ba17a425a1cc8bac1277801502756727303ba88f2efa561ed0f2798907aa73edbef22c3d6f8c067dee4a79fe78dcad882b064bad4b4440ab524295af9c4432accb4a52b36e45630fc3b7e8586c780f045b1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff695247c5d28f538e46d903d8bfad21d8a131d84f54ca82a749a9e24150287ddc"]}, "failure": {"scriptSig": "", "witness": ["5ec5d50688ba958a318a24ccf231a4caca99043b5b9aeadbd4fdcfd6164e7f05d4bf1d7360752e902b5a043be1e5fab205990eff07191ee96b5faf8686f7ecfd01", "654d55e7f53cb9ed66b4fec695499e0fdec362af3359e09edf4e71bd02087ed3101b036275", "753535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a200636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1605044119c566b794159a23a9ec14e8a93eb35aca328c0e9d704ad02ae272660d408f2c3322130c1b8d98bcdc511cbf08ed6626c6ad5103ccb066ba3a446285d944bd9ad9eefb4639ed414d71b7c064f5fd84ad1c711132e2e9ebde5b94751b1e89caf5e2beb3889a98787abd8bf5d9afe0e4fc9dce3fea32eac6b23d618250000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb7826dd75b46e39b7208110a8e4187cc050392b3240f6316343fd3b5c2b15070000000000000000000000000000000000000000000000000000000000000000adeb2aad8459e3024ad2c2668541698cc8ce93668bd039750f5cc00fa3a4e14a9decdf7367ccf39a5da3025933ebbc5bfd9a59aaa537efe38ecc935db60cc7971db1de8dd1ebdcc2290e210e150309d2465c3e1f8f0d5b69187fa4290bc75b4804cb173a164212cb7d19614d96e5768c34d4dfd8433301572533455de27a30fc0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a15dc305681a926f377a601cf7c23c071267546f841030423230b4c08d220bf6c9371e0d47758eea2a2ef95e5c74652fe359e7a84bebaedd8f5cbad2e472078c89f4b57a3fe8ee55a2db8bc582dc2c086d6e2013270905e13b8a693cb448c815eb89bc8c94a921a08e17d69803aee69436fb8d642a195d2e3dbfd7ff4b07ea357c8c08c8b755ecca4dcd7260f3fc75b2bb426acdb917760f3c308a9dd56db50effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd3514cd63adf5931b68575d063acc4ddc8ee198aba956d89a95c52880f987a5661f576596297ba20062b14f5c152df22829b55362d0bf62d312082561adedf5860061d9b857fa33e2925e2cfb59d3468d01d142aaa17ffdb306a6bcb3eb8c12b272df65b9b97bd8b6d3366db979794369fb42a62a32050c03dd496726c738740ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff952d98373bb692a211303639b04be8941ab69fc8fd8eaf22c25e4559817e4fc473ffe52f713c9509fb97eef4ec0aee20aeaa224974f203ffd301248a8ef6a3f6872745ff295f39dcc43a0fc05df9a0cc9ffd5055d92afa2346ebb2066376e8e558469301a9b6e263ea24102e6961fa2ae1e169c19c62b66d80499088e745bb6f00000000000000000000000000000000000000000000000000000000000000005d5dc489b6e5ed040e15480e64d74b78db75e01ffbe580e92d8a83b4ea6feeca1bb0a648bf98b56229535d4a542e847b45e4adfbc121dbc34dbbeee80e65545d00000000000000000000000000000000000000000000000000000000000000004acc8aa50fa881b69533ab9d152609c0dd064f9d02eb2148495e4078c79340440366f3dea0a2618a35d2722e492eac5b3289be3b7f85d789a6abbe08045b1f31ba87451c2d4b0cc017130b862b1b8210b40dde36f5718c48875db29461a66c2affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000005617bca7ef5e6cb18dbd2fbf24d980e9ccc7f39b70e1ff40d2405bec8d53fe9ad115c1e28ec2189fe47803972a7fd0c558f3daa78566e4be2b36a0c28dd423c200000000000000000000000000000000000000000000000000000000000000002cc1350b22905345362f666e73bada0a8b51404f26211cfbc3dec8c5f395a58b52852d919e15fed226b531c6dfac78217d3f4ec616843da9bcf13cde5dbbd2d252d6e794e5dc155b8e8b5bc46dfdef923814f07c6da7f5104e902378031b941645923efd542f46b65b36296d8568e958d60068696cd8938867d7ad1895bb717534d7e98d5d8c463537c2038f4061bf2f53e73a877ae92d3bc93f95b6b2c5c4028b7d821ebd6a528d2ad07e0f8f328041c9ff00dfc88352e2b863e9ea217d37350000000000000000000000000000000000000000000000000000000000000000d6d1be3f9f22d73e15361b24c926056f492e08e7a2e66c25e9ba2084e65c4a2effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff522e22e9fbda23fe7bac8b261b406cfa379fcb4bc4be65b2f492439cbb293259ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f54a5a7a721fbd7dd169a7f9816769ffaa8cecf08f113505d0a4dcb7eb2f1e8ca9f216f3ebe4a4ecf792769b51ef6f3617d8f04df33be5ac634a8e6f503bd6cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff56067b6a3b8238e03d3addcd41f3fe569f8fe63463f45b4f69f30375e6a57dbadd986b6448bbd0d70ce5ed3edd16f37a28aee9a0401ba2c333ff2410e9a31a75ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5ae0d8d847a44579f27fe19e31b1c7c43ce8d41d474656aec9130caa444b60a4446178611dcce24e889d9c2f7ac8464806786032e4870ec6cf39ff3c83279c62000000000000000000000000000000000000000000000000000000000000000068d75ecb954c141cddc6009102adcf05c4c577a456815f49daead75edc4b18c4a2acf3bb28d15d945db1b63fbca8bb15e96676ee0b85dd00a211c659200d55bfa653963c6d225171a310191ba5dfa12da98a0e8e0a2e2415ef8ddcec6835f8b3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff12202008f40f7309b3c7453e91986dfa6e32732e08dd2af6d91e15390ae3deac65255920dc1074edce60bcab1348c3cf866f42b23a58ae1393ba69b8913d65cf0d7fae50141c3e3108f4cbd1f13b7333ee41b96c67cbb7b1e60558f2194f13f10000000000000000000000000000000000000000000000000000000000000000bce4fabfd555fccc54f5fb39c21eb1d92489e12bb54ca79bbfa9f07d2638ded37b8e51d0f490b30741c958cea8c2a821c55ff6f7121bf7a8aa5f94c8b2c4490b45ae10473939f2a532a8213d6cf3326962066d30f164f24697e7a4b8b5a81a7dfbf8bd91da6890ef3a8a40d33886b39f7db38aa33a4342654de37e996b482e821a6ce9571f0eb53fa2dd67c21bb74554b69b76e576f0b4f083e420a992ba9e15ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff60eeea331b14f18667651bf2de9c937da7f86785e94288f19cd993d39fd8b1aa161ccf2dd39620d042a908d49ac607762ee1691c06958d3c3eca6ee05c80c309fd35f339800d1b526ce4bb0397359720aec6e2f6d7f29ba49fc55e76c17239660000000000000000000000000000000000000000000000000000000000000000b925063e800b0f603da8d6fee95ba9c797ca5e92e1da12cf510e4253f04467b3a009e9599efd22e228aa8754c121d637e7a29a4bc809a559a8e2b318fd2b7ccc6e974f144d38b7409092881bbecf143c7512f55ed5c01b8f0ca56efae83305391cf16e342c26171396d6203043abfe8d255e066ab2ec23f4f77580cf3395b3d94cd16b22791568a984ed01f8c62118b04ff9d1b7174a72070d84db138355bb5267b3181e480e62b991a2488b2cbc4b9ab69233eee79413425868b1bccc0dd2894c34b15442dbb5f3cac263a7b67c9f668ccbf40cce28939869d980e7a08e0d6affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2976d896158f2e452dcc5e82e7d94c1222a6ffeff8e3a642bf53dfb88e75aa3f000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000007d35faa5bff08e02176b268bba767bd054ea45a6afbfab0ddfba339a189039dca8b13a84a55fbcfe4071810185a6ab685582cdad9badbc263842bb6b3daa84928357bc54732c2af7a9a8ae86b96da00b5a963772a438d7e575bdb417620bf07c98f3fddc91038dd143041b7553320eb0531f466cae85ef567a7b56aa8264eec7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaaad7f7b1c89fa9fd603038fc9dbfe91846830b37b89309d35ddbcb21eb7ead4b8419d165ba657503d8c8fac9e04888ecb0155d5656cfddcba611a3aa0deffcbcaad93eba073531c6f6122c7951e1093a14d7d07bfae4a4b494d8f26bb7682e9057aa808812a8bebeae3db2629d339b2690300e2d74c081c42fba304dec7563e2272f782359ec29c0f81d54b78ac02848f2d147ae5baff5b799cbe9574db748cc8044689ec1ededf59a10179cf1c112201a907d1e43f6310836c65db58825f0bd04dbc30ef782cb1c3e43b3a3d078c29bf67ceedf5fca61e7271688fe90d4ff6000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008b0033303d2de10daa76692b6ea201f57b0ea985778960d539da234f8d3d4ecf49f2fd2807beed1e234c20ff1ef0b91eceb83a7113d70bd5b11d6587b35bbac16bc25f0276e423d15bd494a0479c35701478b3997351af11ca8999e16b5a52a916f13a7059e3b88e2cb535ee3c857e3ffffbb30a2860ddf4ebf171608cc80c41935edaa6170f0ce5dff93a1a6b257c7fec45d35fca37c2d259f9b54c53519b5c934029a6d3cf9f905f1c6598826093b6fee6c7092d3e686e16c75eb2167e69b8695230e51389257769e372b1670d700f244923da50dd40177d1ce87f84d31bd0c081f7e8141153f9fbc10e911d5ff34edc6a0674311901ce1842ef2ed590077ae7c054ca8f4adece2737c3d25c3a526c8563a76d32f3376157a6695e986acf0eb85804d72c8a9d84a3774c76b0d3ba17a425a1cc8bac1277801502756727303ba88f2efa561ed0f2798907aa73edbef22c3d6f8c067dee4a79fe78dcad882b064bad4b4440ab524295af9c4432accb4a52b36e45630fc3b7e8586c780f045b1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff695247c5d28f538e46d903d8bfad21d8a131d84f54ca82a749a9e24150287ddc"]}}, diff --git a/txscript/data/taproot-ref/7275e47aff6a2c0f8bacb56d065aaba591e02a30 b/txscript/data/taproot-ref/7275e47aff6a2c0f8bacb56d065aaba591e02a30 new file mode 100644 index 0000000000..c438e634dc --- /dev/null +++ b/txscript/data/taproot-ref/7275e47aff6a2c0f8bacb56d065aaba591e02a30 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3c010000003492e39adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccc010000004291f994019baf2100000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac92000000", "prevouts": ["4ced810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "102e5100000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "e27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93644f036b5ef9fb8fbfbe8fef0b688d1e976e3d8ae9eec3eca289a706e0eef31c0d6719dae808d80c72548faab257df36cf98b115c53ace18df08612b967e5347aeebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7acec7827d9bc9e4e8e39cc141cf7690ea6843d6b50eda1fc8d5571fb149b2aabab"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820bc8e394a89b61e744ca0843579507fbd14c939f32cc2eb6ce7075b90210fcdaec7827d9bc9e4e8e39cc141cf7690ea6843d6b50eda1fc8d5571fb149b2aabab"]}}, diff --git a/txscript/data/taproot-ref/72790cb9d6895411ac13e44b9be62c5cb05584e7 b/txscript/data/taproot-ref/72790cb9d6895411ac13e44b9be62c5cb05584e7 new file mode 100644 index 0000000000..00f3f2588f --- /dev/null +++ b/txscript/data/taproot-ref/72790cb9d6895411ac13e44b9be62c5cb05584e7 @@ -0,0 +1 @@ +{"tx": "ae013cc4018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44c010000007f00bb99025ba03e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487e7010000", "prevouts": ["0c4a4000000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "627d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e889c476762c97a1f480fe93da3602a750f62c0ee9bbab5a4ae1c7a4219e84dbc327529efe07ed3ec82dce77345a5c0eb368b138839946732056b6a908dbf5f05c"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fabe3373372acbd8f7355a742b339dc4113bb3ad1c8e82e6b2233d51ce74beeba4a979a031634820b293704e38f33c20e5acd9cb2a8735bda71fecc5f77708044027529efe07ed3ec82dce77345a5c0eb368b138839946732056b6a908dbf5f05c"]}}, diff --git a/txscript/data/taproot-ref/7282e73fa9d18fc99fa2f10c51211fe1079693fe b/txscript/data/taproot-ref/7282e73fa9d18fc99fa2f10c51211fe1079693fe new file mode 100644 index 0000000000..b459deec7b --- /dev/null +++ b/txscript/data/taproot-ref/7282e73fa9d18fc99fa2f10c51211fe1079693fe @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43a01000000450efd63dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc600000000a8e0fb6603d47d8500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac08030000", "prevouts": ["3c3f35000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "79ec520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e2", "final": true, "success": {"scriptSig": "", "witness": ["e8ec293f7fa5184aa33811971677e4dcc782a30455f4b891bb8a3039e24024b734dfe0b5fdb2faee3233091b1e30b19b049e0a9408dfc7bbc30ad53db37397b581"]}, "failure": {"scriptSig": "", "witness": ["c370d2f8e980c82071fca4f3a2034caca9617d7cceea7260466f9b8912793c707c872b00a1da8ada8686dc520958fed35487b3935027a011704a230c42b1027fe2"]}}, diff --git a/txscript/data/taproot-ref/72893e972bd42b8697f75e7ac80c8885bf7c3a45 b/txscript/data/taproot-ref/72893e972bd42b8697f75e7ac80c8885bf7c3a45 new file mode 100644 index 0000000000..1a45f4d4b6 --- /dev/null +++ b/txscript/data/taproot-ref/72893e972bd42b8697f75e7ac80c8885bf7c3a45 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca8000000009decf0f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127016000000008d9b95b7029da96d00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac87195644", "prevouts": ["6d105e000000000017a914ca8d66b8079fd8386ff3ae1d10b869f5605e693b87", "404511000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "bd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faad1c924a2744de25921620091a34db181a435ddb56a0dc8d3bb0ce452693f5f97353a90cd56d8edfa9d59a5341a6c829ef2ec5b70cfecd5055b0e6c18dd5375841cfbdca9cced9a9297ecbc29dffc929789a1848311039b5a24b338cddf0aa70"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361eef65a04a420b347c827375227f302f031c014f488d196b114eae238398371fd4c17033a0423a3758914e896a84d75b6af3e7ce95cad06f99098a3cc7df4a1ef248cd26a95289b2c5b6dcbde70ff737dd7b8c2860adf4f4d2fc326868c95410d797dd6acf95c24b81e793c9c81b0ab80d381fe8deb935e4a90684c96acd4587"]}}, diff --git a/txscript/data/taproot-ref/728c6175ed68889cfe3f359471f509fd1da1623a b/txscript/data/taproot-ref/728c6175ed68889cfe3f359471f509fd1da1623a new file mode 100644 index 0000000000..f99b438053 --- /dev/null +++ b/txscript/data/taproot-ref/728c6175ed68889cfe3f359471f509fd1da1623a @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f8000000006d3588dc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709300000000775f78d38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45c01000000bf2c651d0114714500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1f010000", "prevouts": ["14030f00000000002359212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "0f160f0000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "13d73e0000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["aca3a5ded9f7d237520217cd24fefa492de0e6805413ebb39cc01b8f920819abce1996bb36eb2d4e73c88a9e82dbce2d459505aef6c35d81255e0b421387fb45"]}}, diff --git a/txscript/data/taproot-ref/729abe2b4cc9df53668a78ea8236ae421f3b5173 b/txscript/data/taproot-ref/729abe2b4cc9df53668a78ea8236ae421f3b5173 new file mode 100644 index 0000000000..776d904d3a --- /dev/null +++ b/txscript/data/taproot-ref/729abe2b4cc9df53668a78ea8236ae421f3b5173 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7001000000fe2a26babcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaa000000006e3943b604070dc800000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987fc927851", "prevouts": ["7fcc4b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "59217f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_3d", "final": true, "success": {"scriptSig": "", "witness": ["d195098ea69908e20beb604f9d5d4e23b2d97471868dec2373f48882b351f427b33c8dfbc149a16495ec90ceaf575c56abc83e0553b485cda7313749dce1abb183"]}, "failure": {"scriptSig": "", "witness": ["314ecd9b60a03fa259fa9cc84335fc70c8c25c8f0d1dc56bc022dec1f097b5d15675ee358aa3cf72217bb8065198d6be3f455c7c3307157cbd5b4ef6cc7cf6d43d"]}}, diff --git a/txscript/data/taproot-ref/729bc90d92d1235d6d3bc4c56bfc5a7cb1532e39 b/txscript/data/taproot-ref/729bc90d92d1235d6d3bc4c56bfc5a7cb1532e39 new file mode 100644 index 0000000000..d5e6fda38d --- /dev/null +++ b/txscript/data/taproot-ref/729bc90d92d1235d6d3bc4c56bfc5a7cb1532e39 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce90100000083239af2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ced00000000c0e951d4020615ad000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748700000000", "prevouts": ["3403520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c7f65c000000000017a914f0ed99a28545ab2ceacee60b5537a9e5c34fcd5187"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_55", "final": true, "success": {"scriptSig": "", "witness": ["6acc2c2de3ce53227191cc890f0abb65b823cdd8e61ffcda47c292aed303bd6708bdfcf319d6a4477feeb5be660509a426a22e8057a02a2bedfba33fe692cc2c01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b4512f593f052cd58b67f815e173320cf9af4300706e2fe67b3b2eec0f789e2def21f50791bd6412c15282efd253eee9b146d1f12455d03d7420c1527a9c876755", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/72a19edf12311bc49d7e72f4ce0d25f68b5ba472 b/txscript/data/taproot-ref/72a19edf12311bc49d7e72f4ce0d25f68b5ba472 new file mode 100644 index 0000000000..db59dcc220 --- /dev/null +++ b/txscript/data/taproot-ref/72a19edf12311bc49d7e72f4ce0d25f68b5ba472 @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3401000000ac6c38ad0460c56f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac92ef0b31", "prevouts": ["17c57100000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a89", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368f392c492a5b36963abcdb7fbf7476b495f34d23a20e2b9245c47655ae80aa8c1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454b1cf341ebb9351320fe3e143ffa2dad1c15696d7ac983fbe7e302fe7a073e7ecf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d8b8b59ec9330d10cfd242c1699350bed4f76e625017108107d5490f0b0ac19bcb3e0a345cce78c1fe891e9b22b966ce84a8b12623d949f63d5e15e148dd67959d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}}, diff --git a/txscript/data/taproot-ref/72b351e21f164a536ef913cda1b95716c0de23ce b/txscript/data/taproot-ref/72b351e21f164a536ef913cda1b95716c0de23ce new file mode 100644 index 0000000000..8df3b6d406 --- /dev/null +++ b/txscript/data/taproot-ref/72b351e21f164a536ef913cda1b95716c0de23ce @@ -0,0 +1 @@ +{"tx": "5fbef0bf0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e4010000002fbbd3ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702400000000b17fc38b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4020000000022f32a9201149c1700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6691b05e", "prevouts": ["0bd8110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "02e3120000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2", "37553d00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "487d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a78f03f4c984da33b67a1f34f73d9f3117d7a8717c805ff9e9061dc3289a8d8637a3a83b36cabe27f746cef99f5e6f5a048cb284627a25ce795acc8b79f1d63b4d178bbecd44a62a975bb89c44ce69c4bec935ce63261f4a792ecb896593fa3c40210bd7db211b82a407c19f9567cde5a01f8f2a3c3dc032c7ac21169de78447"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa8d88ca5d2ed422cbef7221efcadc1e9b79f7a9a7e5e37a381143666b41a8ce50be5e2af3a3c1a6754948d639a5542927d59c509fd5287d02d091c2a39a812b527da89940c9c2be3d3cb1ea9fc374137a74dc3bafe909c68993f298761996d666"]}}, diff --git a/txscript/data/taproot-ref/72b831f893332ad3733b0af04ea0e76cac65b5dc b/txscript/data/taproot-ref/72b831f893332ad3733b0af04ea0e76cac65b5dc new file mode 100644 index 0000000000..fb651beac7 --- /dev/null +++ b/txscript/data/taproot-ref/72b831f893332ad3733b0af04ea0e76cac65b5dc @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3901000000294d73f38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f000000000428d778904fbaeb6000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796f7b3ae3c", "prevouts": ["d7b8770000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "2ac54100000000002251202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "final": true, "success": {"scriptSig": "", "witness": ["2c4f4c08e82cd2748b627f594356ee1770e152d3ed937afef341d5d1405729e94dcfb2a411d61060992531f5176fcc33e0ffb407fb249880edbc638e48a7e26c"]}, "failure": {"scriptSig": "", "witness": ["5c1ed01d05ee9ee8ad3e08908198b0301ea4e75cf4b3866a7d5d4378720216ddec9c11e00494a12839388999355a222cb9579bbf423c9df99bc9b63a48938ea2"]}}, diff --git a/txscript/data/taproot-ref/72bd024e4b285894458f234b460fcaf90e8445cb b/txscript/data/taproot-ref/72bd024e4b285894458f234b460fcaf90e8445cb new file mode 100644 index 0000000000..f69b95ee29 --- /dev/null +++ b/txscript/data/taproot-ref/72bd024e4b285894458f234b460fcaf90e8445cb @@ -0,0 +1 @@ +{"tx": "52d03179028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44a0100000058a0458bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9e010000002bb7bb9501169421000000000017a914719f78084af863e000acd618ba76df979722368987f336fc30", "prevouts": ["806a3300000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "b81e8500000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902bfa1c4843af01b31af8a2762d5db46c30cda3b585094fbd43f3b9d3819a59b72bd28e5dd9c9165e17af1897a1fb1a549933ce84c4393144f63e25f92db635e29c54f872d537c59606ac1b48291ab39b568f8775d4ba386487b73deff380006cf78f96dab00f767c7cec7d50f740cc2c5d6f11098ac68329141c60d3fe0a7bac73f708f6dd15f8a55e9e91e0aa3dabcb90e3d6814df4367be279674e0bc4cc64c5728639023535b6b9e528f8f4c614570c08bee325815acc9ed749ce284d04fa974e36bbec791dab69813d2d3db8ce0d39a6a8ce501c916971d1e64e1479a28018399f63e83ad1de05268803bbd24a1f18dae14e19afe3ccce4ad25dc6f55019473ec586022070bb42d6ae89cc5e1e44e9ff2b0e24d1846b12153dfd4574c9981a1182e0f02fe584eea436299584292f8f31e81aab81d785ac9123fce4bf6b1c74703457034e5177ebf98cf8221e9895c3a8c309a3ca32872df0f66822f44e27caa7b3d03e0a362215ac479b6231c30eab6aa5b78a1fca0dfe4c872612fef770ab42ae1053ef4ea0bb10193183894eb74e85e70a12a9406abcca9279c7efc388b27833682c510f6e4dd1fbeef6f65a2977eace89ce820838527df7834e080ae90c2cb622660da184c183eba125dc5000caa45e1e6bea5ad8987df557077cfacf75c9cb74e82b905e589f542894676a846400f38cc9918fd3edb7a1e430522b642ea14a056ff1a1b349175d0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e2d2a48a19715e5e10213804ecd6bef4aa9ea7ea8b0db9d9bc22fd189820ca533f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823bd101e45a609d3b8e0b3b6f0b7594624f7e9102ef5d5dd3027418de40ebb2180d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}, "failure": {"scriptSig": "", "witness": ["4d0902f35ba5c782a43fe11859ef38643d9f5cc5f66959b5784b61362d938dcf683fda03c5e104443018355dea3370408d6b90250d7f8b6cf090fe060e634798d9e5ecb565e48904a8fe406080169def180c6df0b9b32c95e743c8f6afb14b46194b319634cc92534b4c747714ac329dc11e15c671954aafbc2cba5f3439296581f5bc783bd13feb0fb2a952df94cf7b7592f4abe3e19620467a7ba1ac28f4daa1cef3000f085ee69d005802120348ccc35b8b14a346808d4a9fdc758279e6683b2b57ab03ce02095a25020e059aacf856bfd2b665e439a3259b4e1ec9ffa90f5abae8e8d6a5e36ed40f52e187ac0c517ed6a794cc0c2789eea42321bbf88d124dfc36c27e99e00b3f8ee6c6d57b792144e6d24a12bd52271b6b7bf3daab66413431b222fb7d9be19e90437706275b06a8a50b2cc12706351de59ff26226046af7a9b1e354d40d191cc9cb8ad552ee127bc7c84cc4849f5b2856f2cfedc401ebbde8247461343265e85257fb86ec572065a84f76bcf56703b9d952a64805bc6ccb7549c604902a5d0a362590abe5584e3e79ab6d1bf76494ae03e979b359055b1f618671ac02bb602a610eff8af7a83bedf0f886b884cf77bb86ecf1163903f4a3b0dd2c945416bc9ffefc1fe629a039e89e0a850f340989089df982bfb4c524cac30649e3d4dbb93cbe835a9cd45de74d0d86d23c102ced1a8c65a4c0578a2a39776da79582a6aaef4bba527561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4daaf72f6551695de9dd2e4eae28f07b41c9ec36110061b2152d7ab3729ab44bcf81a0ae7b640e88bbe84e7c412f47337f1d12d37f95b062c539998fd28213cbdf3b3fb8d5121830dc5ea13d084a01bce62f4c2426ea7fcb92dda33a6ec3d9661"]}}, diff --git a/txscript/data/taproot-ref/72de723051c80828a6318b2251cdaf29db2600f1 b/txscript/data/taproot-ref/72de723051c80828a6318b2251cdaf29db2600f1 new file mode 100644 index 0000000000..60f0eb9e2c --- /dev/null +++ b/txscript/data/taproot-ref/72de723051c80828a6318b2251cdaf29db2600f1 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705b0000000087b009d7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfff000000004b4bd0850218eb8600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ace6000000", "prevouts": ["aa620e0000000000225120787bdd18c6671a560ba1e95ace53716ad824e1d735ffe5db246005d995daa6d5", "d04d7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_41", "final": true, "success": {"scriptSig": "", "witness": ["f7bad6a6d2dd226cba0787608e7d3eee2683d5a7909f5e60e60f13683f64c2bc84e83f1f3647c0349df7caf22e9d3955b077dfd85e6b923c87826e764a13a11881", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["693ba7d5c1417efdc0bc6903efe077bbb12aca28713ae932e8f576cce2aaecde52fa0395a69333e489e1f1d09eb77c3e2b2be24e101573af3b2d55187035429441", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/72e0280dc174679a75da3799cbb41ffe349f9f46 b/txscript/data/taproot-ref/72e0280dc174679a75da3799cbb41ffe349f9f46 new file mode 100644 index 0000000000..9d5c6bc4dc --- /dev/null +++ b/txscript/data/taproot-ref/72e0280dc174679a75da3799cbb41ffe349f9f46 @@ -0,0 +1 @@ +{"tx": "b925e88602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2a01000000148d50bc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700e02000000c93381a40114a80a00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac61010000", "prevouts": ["4a2c2400000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8", "368a10000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/emptysigs/checksigadd", "final": true, "success": {"scriptSig": "", "witness": ["", "a035aa3353996b17b5f039dccdcec2d19d71ca2c276ab8786d48ce6a773698b13cd0e27b26c902ca1161fb0f4544bfb14144fb0a44de5e11dc4d1cc27bf974a4", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad00207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ba91", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362993ec8e6179853847d0ee69316ca3a644767c37040f1b0ab2fe506df774d43ff52d98203d7275fad400ed3b197c4c0e8622d77cbcb79cf7a2a00d2fc972bf5002f82dbe4a6db58ee88633b3148d57fb2531bfad9bc912f2dbffc1de55c895509f476918f5ef695c8ab5ffd8fe1863125f9680a1d644e34f9ad8af958befbfd6587daedfcae5757dc790e5fd5fc7e5c85e6dacb92622ee4c35b872074113a22f2a18578b4c6324a679aa30a9e18da15f3551b7d2bf7b5529f4cace820b36473095447d483b1abd7672dfbc0cc5c4264ab29836baf9b905a296f16e6d7c4104528318720e482b09cec20c29a01196f6fc121b2f5494846d4028dc1ebe79751ed047cd408e7e45afc1c667eeea2951fa67d23f0c47f336029f3cc34d8d5ee74ae5de2a3f8aaceb3bdbc013310ea640cd38cdfcaee1e27c35353c5cddffee02d66e0ff2f27b7c8a7bbfbc10862c4415251567b33d7da846974ccc2adf2991d8af397a6da280d39d27fbd3b610ad765c3e7fc2a4ee2753fa02407aa98d856b9c1e1f2c5eddaeb8557ce0f7cc7880e698091ab104cabb34aeeeb5d0f57ea86d1ebc555dfde575d48d1eaafa8343c63d6f5425984d2425aca274be02e47a5142e089ba2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["", "276d682e2ab430b2fb2b82fd5bde04a0b000be3736bf2157325bfdc3aac5862b717a17470ae448d4f18a8b1aed54ae0015dcd479ee0bcfec6a2892a09dea54e9", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad0000ba91", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a9741ace787c3ba5c17bc53ff36467ca73e7d39d03d72c6c77f3cc9496b5503c76c6bd7420b2cea4f2928cd085843fc4ee0f453499d35ceb8e5ee9e0b79ba717f59440f4e67fc23aac21c7aacca3721c15c1516f2a9f6ac5bc60d230b02657b3851023fff65d6f40c4a5aacdb8cf0d40cd5e401b126df9fc0fadb4679eec7ea2f2a57b87935eaa4a17599a5b4ec099d7a36236ecdcd81c11f97ca92c8fa53087e6bf8bd64d9529d83870441f7e27274cb99ec835a095b7ea70a5a322cc5d52b423c6ddcadebf58a5025a8cb1ec3b901e96065e689e06d0af72db26f3ef0356de3494b0db6c991873dc7e87677bcd9ca13e114307dc9071f99f39a46a7715d3533a0941f2233db7810b6423a9958b3dcf1c09c67396d8ec9b45a8144fbdc7a52361e3fd655fb6f9a1743e8f45f41cebeee6a97926aaeee4c3f916a47c83a2790053cbc6b756194fb3ede31be6e35ac6727938739a1ae9b6b028b18e770eedabfadc618cf7f3a0d639ba509d355272eadbcb76778d4d1d605237c1cf557850c008acfa6a9da80a755a207eb5a3ad02b1a2cff248af93ddec122a727b43b9e8dbb8b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/72f423c06f55b024fcd60e3acd20f596205615ab b/txscript/data/taproot-ref/72f423c06f55b024fcd60e3acd20f596205615ab new file mode 100644 index 0000000000..370e607a33 --- /dev/null +++ b/txscript/data/taproot-ref/72f423c06f55b024fcd60e3acd20f596205615ab @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2d00000000e75314b28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c475000000008149b6b701e48d50000000000017a914719f78084af863e000acd618ba76df979722368987a331533c", "prevouts": ["713c4f00000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "6a1339000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "a87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8159738ff2c4f90cd16c07bb852218b8a19eccf086ed61d505eed94e2770983c2cd165f299bdaaa06ccf8947d9b12e815a5b39fc50068532880492a3446c423d89e26d26d9f798657ab1642d8194f1f5dc9158412142f65824f82701f20125ac7"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360696a8ad49f6bde3bd1da86a2495044ebc8bdff93c87d1dc4e64279442168fbe337e31cedb20dd0ec36f43f7131008eded9387a241f89ca892d220549655a6e95def3d75afa0626f5ab572f3c9ae49b6567bf85ec43d0b3933062a3ad8b1e492"]}}, diff --git a/txscript/data/taproot-ref/73319dedec7db18100aca1acbdf582d38ed80c64 b/txscript/data/taproot-ref/73319dedec7db18100aca1acbdf582d38ed80c64 new file mode 100644 index 0000000000..616e5785b6 --- /dev/null +++ b/txscript/data/taproot-ref/73319dedec7db18100aca1acbdf582d38ed80c64 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44601000000379174ae60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700c01000000bc09d7fa046db3400000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f877d020000", "prevouts": ["b65e310000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "60391200000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "8d", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93698751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d593f37adfd687dc0da405a76cf860eea33b50edba83aa9aefe64ccc08331b86a062cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004529493e63f0262db246dc905ef3bca459233a7269b5efdd4093c0b189ca3e559193f37adfd687dc0da405a76cf860eea33b50edba83aa9aefe64ccc08331b86a062cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}}, diff --git a/txscript/data/taproot-ref/733a381bc9e56cec2e4a856413e56d0bb7972662 b/txscript/data/taproot-ref/733a381bc9e56cec2e4a856413e56d0bb7972662 new file mode 100644 index 0000000000..26011e7353 --- /dev/null +++ b/txscript/data/taproot-ref/733a381bc9e56cec2e4a856413e56d0bb7972662 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127042010000002bb691cabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb3010000006a9750e360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707e010000007fb4f7fd04ef69900000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb3b44031", "prevouts": ["86751200000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc", "695c6d00000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "bbd7120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "fd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa4304fc86dd976b0937fa56c41f386d806abfef37789b2eae5a350cc5f24e0b07f4148296d57de26c46202ca6ca2132af69ac5e2240f6410455c1127b810a8937"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c1b9bacdca57d9824556224747bb261aea2ae7ed0ce11a73241cde6387669db02c6cefb1e181eefac563b15a866f5ecfc3c81e54821b9e81f79abce745f7d95962d72dd1cd8804fbc0be1dcf6a22214dbfb5210e6cde6f2a41edfb954edd50fb"]}}, diff --git a/txscript/data/taproot-ref/734891576e6360feb0a79e5f6326f4a0f3310853 b/txscript/data/taproot-ref/734891576e6360feb0a79e5f6326f4a0f3310853 new file mode 100644 index 0000000000..1f6431c0c3 --- /dev/null +++ b/txscript/data/taproot-ref/734891576e6360feb0a79e5f6326f4a0f3310853 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bf0100000078d86c1b0145ec0d000000000017a914719f78084af863e000acd618ba76df979722368987eb020000", "prevouts": ["fe973400000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "737d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a7cf13551a0cc26f1b867240faef9a11531fafe338f01dd82df40bdec0900967702c501a2f323d94577f3c4b353be8e702d3f9991edd341efb02c3132264010bb33a63f37675deadbbcd666ca6b38ad7090050f3dcc6bba45985e955ec185c53"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ca8610289a1fbd8cd81a98f9c36747bf01b158efbf5089bf299485f821bf6f7f55519fad8d6a945f0e016807e9ea80f240f92b51e0c4078917dfba5f2209ef9db33a63f37675deadbbcd666ca6b38ad7090050f3dcc6bba45985e955ec185c53"]}}, diff --git a/txscript/data/taproot-ref/73617507f1dbe680e93caaef1d078ac92ad846ba b/txscript/data/taproot-ref/73617507f1dbe680e93caaef1d078ac92ad846ba new file mode 100644 index 0000000000..1d864eb333 --- /dev/null +++ b/txscript/data/taproot-ref/73617507f1dbe680e93caaef1d078ac92ad846ba @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c429010000007cd02a6701eb623600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac64ba9355", "prevouts": ["c2a640000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ef7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361a06a52f87096620bfe5973d93b2be2652521f7b71c204e6ee336f5bff2f8e5582a8da46561b857dd56ed73270ec2a55b69a5f7c1db8df98b88468b2be2ca2b7eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac8ef60344f111a9c34d055af59cfd42b130acbf4987ee3354719b7c9974e4d449"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363b6bd5f9b965c7c7d639d1aafbe3f4870e0ac5697c7e0e93783e5267088edc7c7a25236fb2b0caf4a960afecbd8538cf949b3ef5b854c8fdc156128073078e11b030008666d4260a12bee868d13ea953ce9c9319f2222d8e8469ea0b912b8ceb"]}}, diff --git a/txscript/data/taproot-ref/739b15f40bb87a9e4f1a8399ce654d068bd0d30b b/txscript/data/taproot-ref/739b15f40bb87a9e4f1a8399ce654d068bd0d30b new file mode 100644 index 0000000000..5aca0aea44 --- /dev/null +++ b/txscript/data/taproot-ref/739b15f40bb87a9e4f1a8399ce654d068bd0d30b @@ -0,0 +1 @@ +{"tx": "de79ea5102dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1b0100000001706ee4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6e0000000064da1f9602df27bd000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d8020000", "prevouts": ["a8084d00000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85", "b2d1710000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_keypath", "final": true, "success": {"scriptSig": "", "witness": ["4deae274edc8cf58b4240480f46ea866b00c1a550b4c565c4cabc660970a0270abdeb41e3c54dcc555aff4128d30703cac10c2475e4029217b38601ce47d6ae0"]}, "failure": {"scriptSig": "", "witness": [""]}}, diff --git a/txscript/data/taproot-ref/739c724fbc1d946d981066a3f82cfb09a034ba1f b/txscript/data/taproot-ref/739c724fbc1d946d981066a3f82cfb09a034ba1f new file mode 100644 index 0000000000..08ec37a837 --- /dev/null +++ b/txscript/data/taproot-ref/739c724fbc1d946d981066a3f82cfb09a034ba1f @@ -0,0 +1 @@ +{"tx": "8724841602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1b020000002b49f9e18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41500000000a39d908104476a65000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47873b010000", "prevouts": ["ffb125000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9", "e565410000000000215f1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93649df6e65f74a1616f8b796c28e27e3bfd060faa480f7dcf522b455914aa3f7b8f4bc19c05a4ad9ae05992168d490013403fc5515955a55899592aa66a61db799770b862ef93acb6091cb4ff8ef135b3065b278142aa4adab757f952a626e2b26c80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d3987bd803fccffa941cee4c647c3a6675599cd3c733dba5d2640e5418dbaac99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4b4e321dfd5536232eaef67cd7779b0e400c7a17a369dbe44f6d3cf0436c0a34cc80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}}, diff --git a/txscript/data/taproot-ref/73a2aaa511c3c79634f98183fed1aa515112c30c b/txscript/data/taproot-ref/73a2aaa511c3c79634f98183fed1aa515112c30c new file mode 100644 index 0000000000..90121b112e --- /dev/null +++ b/txscript/data/taproot-ref/73a2aaa511c3c79634f98183fed1aa515112c30c @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e400000000e43d3005dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdb01000000dc21dcf7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1000000000413109ca01c445280000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca4000000", "prevouts": ["00ca0e000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "3c28250000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "bb275b00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c57d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93627fda090ca9180dfb5a3d6eb89a34d71879acd8ae0b8ec415ba4fd7717d6a8ba4a4f1964bf857a391dd30579e6c45654815fe99168eae3a652a179c44e1715327def1cc2232d9b1ca5244635fcf6779cb15e82fb856baa2ca11d8fd1da35295f"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826d35158b06e93427cedf9700445f423da8a62a86b9572893cb3b0c5b8130f93e00378a892e4dc43a17c9ebd71803200f2f24c9a40c2827c304e59be9b4a7df0b"]}}, diff --git a/txscript/data/taproot-ref/73ee1a7d0acd1f7e6a29e2cc9de52adf757c34f3 b/txscript/data/taproot-ref/73ee1a7d0acd1f7e6a29e2cc9de52adf757c34f3 new file mode 100644 index 0000000000..e7ffdfb358 --- /dev/null +++ b/txscript/data/taproot-ref/73ee1a7d0acd1f7e6a29e2cc9de52adf757c34f3 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700801000000b8b76795dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5a00000000f6c7ab86017eae1700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac00030000", "prevouts": ["cb9b0e000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e", "91a75000000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063ed68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630b7c2d4c1b790332bf4ebbdc264de6d20aff90470c4eba5176f312f66ccc9b0d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c9b0690fa0521f4fddf88c65f69e0716898ebb5a52dcb1ee37dd2f34a8a99dbd71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936777cd695cd6aba6282d5f8080c91c9295c817959fd1278b1f2c6fb3d2abee1f43e4c13dfee647a17f9595e8b3c65969e7c880cfffed6449fdebc16325bda3bb094cc415af9f84001a6feea45646803cad285186914838c4558edfc97d3166e78fd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}}, diff --git a/txscript/data/taproot-ref/74033d1959e62921897648eae99b7576a518dcbb b/txscript/data/taproot-ref/74033d1959e62921897648eae99b7576a518dcbb new file mode 100644 index 0000000000..d6889b6b23 --- /dev/null +++ b/txscript/data/taproot-ref/74033d1959e62921897648eae99b7576a518dcbb @@ -0,0 +1 @@ +{"tx": "c10517cd02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd0000000008c471e8b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49a01000000bce4bdca0378d8a400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d4783521", "prevouts": ["59bf6f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "536637000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["be4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4c9baaf460c9b08d8af0a53251cd8db921d22667fbf74eb915957e4e9d1c209d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51f60e2d3154f769650886384bb096233f0069490aec77c98efe910f3ad816f81d7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93678e2a199559b583075ea620e9a27812bb6f07692e0c8149045f4c4859f098adbb388de3dfefb2132719c310aa79074581b330ff4b72041fe2a3e03933132949f61eb6e6fd21ad84d93c7a0474b2daf5b011002cbe34781a2a14a95ac7c4e00ae344cebdb8ecd56ef01fad0911d9d88482970ec36d3a04b84eda7f5b5c68ec938"]}}, diff --git a/txscript/data/taproot-ref/74068e2edea30ca07fc3d6536b7beb1e73610c5e b/txscript/data/taproot-ref/74068e2edea30ca07fc3d6536b7beb1e73610c5e new file mode 100644 index 0000000000..573d8530b8 --- /dev/null +++ b/txscript/data/taproot-ref/74068e2edea30ca07fc3d6536b7beb1e73610c5e @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705a00000000b2b3b0d302b7360f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72a000000", "prevouts": ["d0bf1000000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09020544eeceeff632bb6e519e5549d9b5a6e9b634ca09f43ac1c130004e4c23f1a01a32ef677fe7324fdadddbdacde92f5baab4445e85cff3eca3f1163d053bd9432af40a863d65d7fac6059ae5642cb933c7992e619eea75364fcb04ea95e7668ab3374b308597badb6e427ccac499affd6448ba29ceeaaf7d210f4593990494ae6f216a12dcbd590f574f3cf90d417e982fb239bc3525967f97f48d94fc9b83cc7d99862bc7a2342c0c591f5d4063df53c764e5e181963daf496de1ba07f5359e71a56cf05731ba73f7a81ba09f0bf78a6e9a50e7df44dabdcd6980de8fa7f709dc14d56f699e0b69a2a98df9e06215741794938afe48d8d650c84a052f19cf0d77ffe1bffd0caeab8da2d2283ba3e9e50fa4520207732252b8be333baba2a342ed47b1d2ffe529ee86635d230a9ea2efe215a8f9df75ab72095434e8f33e29a33e4508ccd168b9c410c919ed4b158478104dd6339bdb9972401a69a64492995d733b3bc0fe121aad9b3fbec71af7acbca077fa757f4f7e9e0bc8f4cf9bcdeb90d325a7c66716dcf949bdf6307720a3eab6a00b575d525575f8430e9f436c81bc43aeb9f771b0b9288461a171fdc5c2896ae471e256f103615d9015d0b20248e888f3917deb2d68a0e1cbec38fc57390d2f42720c0a674b24a46d5c6b1f859f33fb0bab19d0e0c4168ff13bee3f7065321a68087b3816f2dd6c17e528187421d855889ddd172fd53afc7586", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93629a4cf536966159d361460fab7b3e5d8cc5d596b48cf3118556d4193e0f355519a49af0eb7097a2b25f70d75fc7fd7c267678862dc5ecafe442b2ce2fa2401f5a112aec6b4b8b5b1ca7f36a9e0521bdf2c7802df3cadcb1e8aa67d830b4a0d3fd33ab5c29645e0220ea4ffd8cb7e67404885cb8b0cf94872336c7b06d59c3124"]}, "failure": {"scriptSig": "", "witness": ["4d090250f01e0b8d9ba2d86efd14acbe327dc3bf35551da31875cf846de2653ad21bbbd90bb3e7c95de0d4e3b2ed7cbe51f2797fca07a39eb6630aaf8d2dac2cf206d9c3dea424b1926948e047ac6a4f489c50a7f40be480fe99f8457b6fff735b05d80ecb631f1b2a715477f58b3c7208ece3b04995ed905a78df6c5d06d619dc10d403f04b28c9ad0e61f9bb58430d1237ba9200561f3a41d77c8030f71284edf78b43f485ad7ddfb9e7f94a69f7e8fdaa55f9121b1a06e30f479acaaf0a69367b5309afa847d2f62739e97c537bc4f784170eb8ec830db268e25fc119cbc1cffec39600f45f513d9d9f3d532affd3ab936fa5275d7857b33c27b95d28e33444bb5a60999a95611e2c9c1bf8889f872316fa289d4278ab21c4ab56a752be5ce9297e78a47111e797135af130db01e33a1089944878bb7bee712cfd5e217d58fe34d43625523be41cfe75b2e9fdfdba2757a3a03751cd1468d87b4cbf79ae6fd1ad783649d0a5c022683493288f5c8b210b05452d5ea78f9a703a617cf8552d4f7bbe35f07a20417503c58f318e606012e91f6f8ad8bc42f0cc103b8080653f662557b9b8fbf9e11dd17e329d7e15902d1122aedec46685d2a9aaacf46edce4be90c70d74c71e1c362a9a1f653f02de7dce7077b2b33f90a321be48c690741912628028abdc99aba0863099d0e4b0189c3434d427b55e2f3def90b99796f78df91997adb4519ee24b5718a47561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93656455b54c589ad33b571e695863e621bdfbab9d554d43b73aa0458e592a0e805056f60ea686d79cfa4fb79f197b2e905ac857a983be4a5a41a4873e865aa950715c685a6e20a464c0638846c4feb0cc1ab19a0a1d3cef03660e119c827d202a5d33ab5c29645e0220ea4ffd8cb7e67404885cb8b0cf94872336c7b06d59c3124"]}}, diff --git a/txscript/data/taproot-ref/74077dff1318da9fbe3c8ecbcf570fa2b161a310 b/txscript/data/taproot-ref/74077dff1318da9fbe3c8ecbcf570fa2b161a310 new file mode 100644 index 0000000000..e2bdad603f --- /dev/null +++ b/txscript/data/taproot-ref/74077dff1318da9fbe3c8ecbcf570fa2b161a310 @@ -0,0 +1 @@ +{"tx": "3980379002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7f00000000bdb16596dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc001000000f9f628ff01158fbf000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a68a000000", "prevouts": ["b65179000000000017a914f955a33e905fb6c7b7e694c8cef25993577deafb87", "68725e0000000000235b212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["dd847f17abd19500624fb671cc44dc06eb3fd029961806af87c7fe856962bed3c2ee456c83fdd6f3cb50df3b7efd2dda87b00a3db6ef23b78fe45e0732a40b2c", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/742166e63d37f163f9bfa53c3d1ca1c432028519 b/txscript/data/taproot-ref/742166e63d37f163f9bfa53c3d1ca1c432028519 new file mode 100644 index 0000000000..34f6b4067c --- /dev/null +++ b/txscript/data/taproot-ref/742166e63d37f163f9bfa53c3d1ca1c432028519 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9d0100000067e4a0f360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d0000000088944686bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9001000000dc741ab4037f16ee00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb3af1b32", "prevouts": ["de725e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c5840f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ebe5810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_84", "final": true, "success": {"scriptSig": "", "witness": ["0e909defcefc58cbe5d6bdf423b88960162905a00d86dbc26073abb85e0493652667a5e8ecebaffc41bca6c8bc95f9c2f03e4bb89aa1dbf27e3a7a4399adb59181"]}, "failure": {"scriptSig": "", "witness": ["c048a583d15a4953ad7ad44d01a147f619065a71c86a43a0b7887740bbe66d7d1144ebbbb0295b3245979e179edd2e80cbbd1137e2504394e7b843722316117684"]}}, diff --git a/txscript/data/taproot-ref/742c9cda5fd595f2f4acc988670128b67aa2cce0 b/txscript/data/taproot-ref/742c9cda5fd595f2f4acc988670128b67aa2cce0 new file mode 100644 index 0000000000..28407e4e81 --- /dev/null +++ b/txscript/data/taproot-ref/742c9cda5fd595f2f4acc988670128b67aa2cce0 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705f010000000381a28bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfde010000001fdee4ab01e9047600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acdbd92745", "prevouts": ["55c40f00000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "cb836e00000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["3044022063b92c108c0a3b1ca0bd9f5ac2b553e68f307e72f55338a3b9ea2bb70adbb68802202eb65b655e4e689d91f50cd16fe8225078588b23d2b77d6489c88129fec986bfe9", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["3045022100801250364f0bafd1dc0f50226529e275c07eaabc3290c69b5c687faa8513bcda02207c72eb10d0c3655e5570f5c4466ac3b2d22b9157682527f1eeecbc5ac5be4512e9", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/743bd395e890e120441210e9d92579d0c7fd94d9 b/txscript/data/taproot-ref/743bd395e890e120441210e9d92579d0c7fd94d9 new file mode 100644 index 0000000000..57bf5a2e38 --- /dev/null +++ b/txscript/data/taproot-ref/743bd395e890e120441210e9d92579d0c7fd94d9 @@ -0,0 +1 @@ +{"tx": "c37ec3c302dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbf01000000556bab88bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc10100000073720da201fb286d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdac25b29", "prevouts": ["55e22000000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "e2aa6a00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "807d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93605d69d8562a6373f6f9d195fc88f9f90dbe0e07cddba6bc8e429596bb29181bd035ced5e3ad5845cfafeba3c70c2f6d2785016db0dd7771d558e4afbfe1a1e9a3dbbf3726cbcb24bd9ee344fc88539efd23f46f5d6cac68dd1bf47840d55ab8c"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7ef0a13ce9e71fa3d63dc84aef012cf9a91b29c00460432671c98dc081a42ec3f9b6f826008f58b0a2f0424fb9eb1e858fa037e128d89da74120b3f1d2e75bf3dbbf3726cbcb24bd9ee344fc88539efd23f46f5d6cac68dd1bf47840d55ab8c"]}}, diff --git a/txscript/data/taproot-ref/74433925d2da6bb3c3edcc954a98eca9eeb57abd b/txscript/data/taproot-ref/74433925d2da6bb3c3edcc954a98eca9eeb57abd new file mode 100644 index 0000000000..bb99eae4c0 --- /dev/null +++ b/txscript/data/taproot-ref/74433925d2da6bb3c3edcc954a98eca9eeb57abd @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4160200000022cbc59f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700c0200000019f988b38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46e00000000d2570be0027ad87c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc70deadc2a", "prevouts": ["d5b6320000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "59ad12000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "5152390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_1c", "final": true, "success": {"scriptSig": "", "witness": ["2e958cb393e98ed3c7d7e58b731ec756001a1b0a116ab033516fec055e8c3376866d75f1809ee05c97e44995c782cc8ab8cada6211b947316ddb5e564e7a8b5682"]}, "failure": {"scriptSig": "", "witness": ["9b3462788a7eb84137936bdf47842dc926c6fe2d4178145eab1501246a50f9a6b6ee8b7c329694709afd4aec03c85913acf1cf65de2682aa26ce1eeb93c39e7c1c"]}}, diff --git a/txscript/data/taproot-ref/746569f919dd66a45ca13b1e18824a0afdb22d9e b/txscript/data/taproot-ref/746569f919dd66a45ca13b1e18824a0afdb22d9e new file mode 100644 index 0000000000..844ff64aae --- /dev/null +++ b/txscript/data/taproot-ref/746569f919dd66a45ca13b1e18824a0afdb22d9e @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d02000000cf6fd6acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdd00000000770059ed60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270030000000080b8e2a304c1997600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5997e11d", "prevouts": ["a72f0e000000000017a91481d4142ddc5ce7a3de4047bd48b623419b5bc45e87", "8cd95a0000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247", "ae2e0f000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21591f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["d5729fe5beb15e862e97824b3e77f62d547e4d7dfdfda48f0f1db8021c4609078bb18be07093da3cff1e66c20d1cec450c766c8f7c0063c652f35c1cffba5332", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/74685cb831119333da8b5a7c83e055eedbef944e b/txscript/data/taproot-ref/74685cb831119333da8b5a7c83e055eedbef944e new file mode 100644 index 0000000000..5e74981814 --- /dev/null +++ b/txscript/data/taproot-ref/74685cb831119333da8b5a7c83e055eedbef944e @@ -0,0 +1 @@ +{"tx": "e4ec8ca402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0801000000348e6ddadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b190100000032c930c80498cd6f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8700000000", "prevouts": ["3514520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "71481f00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09027120ca60f6b28613313f39c76138c923761a185c46cf92000e57fc4b698b9717265802d1f12654a882a5054470f5c83ec5c2e91bea44ac31292c7fe96ec9fd38eda7c4bb92d1a3b27ae80880ffcedc19f4709737f153d5fa2c954ce6a6e80990bf0ca1acbc35ddba8937f00938b737761384e04aa584745d90c9ee1df2768524a2ae64d2a311fff731f5ac8cca6f4241edecfd74eecad37be56edc2218b55af7849e9da340436c2b0d5efad3f27acd961379efb7ab58696d87d391f50b3e518ae8576a527df7df42b240c1a6d10f537b7c9da4f275174aa30fe0eb1087b653ac217a2ffd22df3cce2bf77c2bef6fa46b37a544712632a115b2c2257d68046dfac04322a24bb5d4779b8e9b9679fe1a1404a0d082c9f35d4f4be172fbb23b2ebb02237d42011eea906d9a36981142ad290e0ad2c601daa8e5d0d3f07fa77ce40f4c5a8816f3e6787132aed37de61d560c68bf26141ab07a45d2032dfd6e4028b8df1d66191e97c05f294b1acf8a1cddc689a7177fbdef447dde98a59ea6425901af736f212b7df9340d00333434347e7363c84022cbe2aea627b8b3441d5df80e099f16da892f6cad2095774ebff83fc960ffec3a04a5f0612948e757a380b37526599c62f3dda82f7b54b0df99a1f03e26bf7cb9ee7bf7e655b07901220b1b2ca7facd5737b512c557060577656c59cafbf55cea181c25639f3b9ee44fcf7e15df61cec944ca229cae75cf", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4197eab9a6b3049015e2aeaa64734336ddd9b9acdec5b1d6588bac0b5808dea8f5f88ccdecf77b0d26ba8d6f3209049de9d03155be73752c3625590c2269e1c4cf4a62e14d7fc4acbfb0196ec29a60565ac2b3043dda4cedec8cb1ff291b90d41"]}, "failure": {"scriptSig": "", "witness": ["4d0902ab481f6fcb9aa5a8e5f232f5a4c42e63bd4b4802f85f765c4f86b3642a96c4b2a29ca3743e82c49dfc023531a9e1a9475e798aff3ca219bb15a1be92e22fbc417ef9dbb625a77c4722a06c91efb2406f45141df83a1eb2e41e02e0b5ad437665b491a310c476cf2aac20179a28bb9d37a8a3755893d99bf2f9bc9095ea8a8c19caba0c4d2a91eacf2d641057b4190dc1d210a1300732b6230f4a3480fd73273c893f9882435706ae0782447237c2e30789e5d87ca4d8c07c59fb055f028ce24b4cdd4cbd5c85b799e969d8c7ea511b2090e3755baf4f850831305a4e7f913df06d5580753ec0892f14fe3b9e24587f125a6b3a6e70291ed7b81ffc9a7a4187cb8242b11b1fbbc4f05142097e7b356e745245f2a2da045ed56ad925b2715089d3df0c2864c46883557be0c648fbcdef7e68aad34c1b9e84a53b562064a3b5a356b93af9589779b0f36c18e3a0c6b1fb11712cef253005ddc34e7afd95ea287c2a72c3e8ef8fe04df9318ba6bcee74b64c61197f21287e94b2c47c16c007be81c0881e38996c7862fb9d546689b67b000dc11eed6996fb2648f6df01ba8ac882597887f4fd10238df4de0a23d4aade84604c050b0f84fac397a0c89d7bd5342962abefa8be4ab1d7adea4743c27d67111e42ef63cd5c91d1e2dc128c07ffd88af0033a5aecaa2f1dd4fa21ecf6d56e44e6174cebe10baa70892bf2d48a57eb26346fc1e815caa29b1d6d7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c43753bef0c8da8689692db8eb397ee477bb8335164dd3b4990f2dc8206c25aee4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0decf70b79dd1be85a38988f8929e7263abb01bba95965800009381ed351eddb0fa653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}}, diff --git a/txscript/data/taproot-ref/7482f850ee397dd25bd1687e64b7eea626e9c608 b/txscript/data/taproot-ref/7482f850ee397dd25bd1687e64b7eea626e9c608 new file mode 100644 index 0000000000..b137fa866f --- /dev/null +++ b/txscript/data/taproot-ref/7482f850ee397dd25bd1687e64b7eea626e9c608 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf49000000007d987b7260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270eb000000000aaa262202847d7500000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac22010000", "prevouts": ["8e0b6800000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "b7e20f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_21", "final": true, "success": {"scriptSig": "", "witness": ["63f4c2e86b6fe02c3cbebdba369c949ad42dc874716b6ce4002d023bea343f477d4977ef3779a12efe8978ada7ffce9734a9bb7c4af858497bf0ad7cf09e953803", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["93805f4e0934c879021dcddd54d0ede409773e1c738114880dc32467eed12740a2a5fa06fb3b0991fec42355c5ec5bdd5f6b3db166fcdff63a48527993867cac21", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/748b5f0d6e2f9fa4665f7445654524ae50ffc8ad b/txscript/data/taproot-ref/748b5f0d6e2f9fa4665f7445654524ae50ffc8ad new file mode 100644 index 0000000000..78945d9667 --- /dev/null +++ b/txscript/data/taproot-ref/748b5f0d6e2f9fa4665f7445654524ae50ffc8ad @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43c00000000668a0bdfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc300000000031806d602a2158800000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac11cba52a", "prevouts": ["b5fc3f0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "d02e4a000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_cs", "final": true, "success": {"scriptSig": "", "witness": ["9ffe67de9dfc53c440d6856eb082fc36ae05a78663903eb9f7566ab675ad287bc42d3024658ff9b9b18d72fad23dcd3a94d0ea21bf38aff2d8bdb73593433ffe", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}, "failure": {"scriptSig": "", "witness": ["9ffe67de9dfc53c440d6856eb082fc36ae05a78663903eb9f7566ab675ad287bc42d3024658ff9b9b18d72fad23dcd3a94d0ea21bf38aff2d8bdb73593433f", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}}, diff --git a/txscript/data/taproot-ref/748ece6f6568749de6856f4e101f00d04a22d979 b/txscript/data/taproot-ref/748ece6f6568749de6856f4e101f00d04a22d979 new file mode 100644 index 0000000000..45924464d7 --- /dev/null +++ b/txscript/data/taproot-ref/748ece6f6568749de6856f4e101f00d04a22d979 @@ -0,0 +1 @@ +{"tx": "0a05db0e028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4230100000039d351eb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707f010000009a75c1ee016fad22000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cdd4d843", "prevouts": ["852c310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2f131200000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e568", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bab5e9c9c7fa88158bc6151e5274dedd524a29f558f8a01649a3b2357052ed1f8cf2788b31c6a31a23c8dbe6ff03f22a1631db08af18d9e87ce7bf14c25a50385e7270ac6e52de2effa1ad4f1d7cc04618f1a83be30b0454843cf6016e9cc3658f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08239f0e83d2be49ca995d97c64064bae5b8c7dff64f3bec17af779836b699250933d2e072fd8e8376d3a54b2bea1bfbfff1298aece70c0bc2934c8eaacc3044fe58f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}}, diff --git a/txscript/data/taproot-ref/74965c4ae1074a7c5d80f0889dda62db64f0d7d3 b/txscript/data/taproot-ref/74965c4ae1074a7c5d80f0889dda62db64f0d7d3 new file mode 100644 index 0000000000..5385c5354a --- /dev/null +++ b/txscript/data/taproot-ref/74965c4ae1074a7c5d80f0889dda62db64f0d7d3 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709d00000000dd342c8a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127014000000002d192c0760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d00100000015c28620013a9a03000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a600000000", "prevouts": ["6c730f0000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "a76f0e0000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76", "ef970e0000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "487d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361b6bead8fe288e6ce929026c6989676110fbb022d60d8870f6195026b963435337a3a83b36cabe27f746cef99f5e6f5a048cb284627a25ce795acc8b79f1d63b4d178bbecd44a62a975bb89c44ce69c4bec935ce63261f4a792ecb896593fa3c40210bd7db211b82a407c19f9567cde5a01f8f2a3c3dc032c7ac21169de78447"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93665d4f284dea934ff4ce7884dd9c30919ca3bc6361c3511237c2fe9a645a7cf7afbef2b09bb3fcc5f7a097fe825ffcbc345a4a7607f02adcd9241733378f6a21f7da89940c9c2be3d3cb1ea9fc374137a74dc3bafe909c68993f298761996d666"]}}, diff --git a/txscript/data/taproot-ref/74b0040c6bed65b152921df24d1d78125695306f b/txscript/data/taproot-ref/74b0040c6bed65b152921df24d1d78125695306f new file mode 100644 index 0000000000..d684855cb1 --- /dev/null +++ b/txscript/data/taproot-ref/74b0040c6bed65b152921df24d1d78125695306f @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff2000000001c75619cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4900000000cff75994dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b07010000003c029216047236f3000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8784d7ee4b", "prevouts": ["ac7783000000000017a91408247b8d3db4e641d0be1ff23f14280256870a5187", "06404d000000000017a914b60a534933f6e50f3846e396b9868efc9e681f4187", "4408250000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "4a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93627de835b8fd66a06eb530d511ef26a01c76127d8d9e29dda3bf7872ee1dae3c946c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faeebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac749e2a390543356cdb3691ba8d54627dfb45f7f1132e94c1a4e909f84f1614c2"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661eef72702ef339b2bb87603a397e70b07da9997acf93d66380977d6359fdd3deebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac749e2a390543356cdb3691ba8d54627dfb45f7f1132e94c1a4e909f84f1614c2"]}}, diff --git a/txscript/data/taproot-ref/74ba2f22626f43b6a2563b0cb35c620433682d40 b/txscript/data/taproot-ref/74ba2f22626f43b6a2563b0cb35c620433682d40 new file mode 100644 index 0000000000..015fb5324a --- /dev/null +++ b/txscript/data/taproot-ref/74ba2f22626f43b6a2563b0cb35c620433682d40 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dd00000000e98bdfcfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8a010000001e3b31c4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf10000000006ffb29ef043b09130100000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd0000000", "prevouts": ["f1ac0e000000000017a914ff6a0b1cf86e786bc6de2387f1927f71fd08cd0c87", "cda7830000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c", "20568200000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090277e046b6bf46fb9432b295afa59f87aa799c05ef75516949187963bdc7008ff5bd7ac8b78c16d5422de50893d9f72b53ee28d433178a18a419d2628955bdfcdb5cf517add5bd02de201108a36787987d54b49be934373ef8619eeeba4551fb1f108e22d1842ad5fc956b406068687eba97c2cfed42c9c35e0c8f6a7b9c793cfa1890697d4bd403d7e73cba15c8c0db317096afb05713f74d12abedfb8c357a7b007246e3bdc98398ff62271301877d16260cf3f87536fc0e2f33cf1b35058514ee567ffe93ac1649f1a423f7fd8576e10263cd44e56752849437e1948bbdd491fd4caa22c4cad0b5fd6753d703cf8b7c022e2cf995c0b4eddc3e4909b660674c96a2c82327cf51cf75896799fee143a39ae83611e10c9aeace4d5add85acadc4ab10f3154f5d1ed34fe63ead7894f9820adb34499d6a4e4b03a0417794139f90c5d2653246fd282679cb8995f240c2a549e0c6dfa744abab426d351ff4040f2cf39da4b5616e71afba8e1d1407f54fb6226037bc287b40ff329edab0bcee63c964e4db36a68037204f6e627a61a61dc9d1acdedaf30bf0647fe8e6ff0427b596c4087c76123798ad0b5ac5abb30a30e79c997076500358fac1598aa3ff5a8d2b91f372dbdc561452241ca601e8ba3fe6753c1fcd35ea85825c1e81dd38695c9f24d235aff0084551d88b16a3caf65d3833910ef718d66f6ef5c4822361194c22fef841aca19684201575", "d07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eda52357b0961fdced6c3795a6a09818322ab10c7001337037a8d029681d8b6eda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e15c449093bd19eda03bff23881ea6078d018b9cd0ffff6e12447ca822e876d277e36b196311c1a9d305bc653889017f46f4c4934a1587d131a83127df4466fae"]}, "failure": {"scriptSig": "", "witness": ["4d090210dd75754c358c3462614730f8fd667c8713dd1e9e6d27696b1f1277853c1c47bf15739a3f3b30efdd4a843c49882223c4822d94d60498680e22d0721edebf629daa84e773e6937333c6330828ee71a92f0b008894b2a3a6722d69c5d423f9228118f4835f3c87b9586c3544d8d296a516d2fd667319eb53e8ba9157b10081e7af413449a44e1df139f738618391e76e960c7c3f4a12688b12531353d92ca07d25281d949ec03fd791d9995526739521e5061601236a8204c56707d8a59b82fd6014635a80912d9b4332a05642552204855bd801d21ac1cdf4642e3fa826cbede07ed3d26812ad85d21e74f58a2a2f9ec26aa6ff9ae1cf0fa3688de5b71ce4bc897c70fe80711833ef90058acca215c1303c93036a2216718a426fcbed07e2bdd5691b33073ead7dd730b9004911199c3045382b4daf8ae7834cd7d9685eefe46c5d1d958ad3cc72b851bcbad4d51bd7501a67fb7672d731f9b53d9410c0e76db3578bdf68c2f1348ad5aa0308adc7c07656044368aa2270429e044d8778e27dd8cc409c8a1a754f3723bd8b6704fcefb6a14c89bda0a536a1b60559033f916e9311c24656fcd4f354204ebd61df13ca591de0f55e8b88e73e16f282084b4f2497ede6963a143a088d1a67611148cce1d37cb340b98dd2dbec921b3651190c7552e63b36c929507bc79fef294ad60f51ee8083b99bb1e8adc86cbb05c39f28b69cc5c6735027020e8375", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ef78ec8d95f7a630a87f4a69d09adcdf12479e6b3f8e7304927bbc129b24d5867420b3503815f4c7b180839898c4c4aff0ab6ef4d8b082708dba105a321f7428"]}}, diff --git a/txscript/data/taproot-ref/74dba0abfcd70931e9e189f44c9fe76cb1cdbb0a b/txscript/data/taproot-ref/74dba0abfcd70931e9e189f44c9fe76cb1cdbb0a new file mode 100644 index 0000000000..c0c1dd359f --- /dev/null +++ b/txscript/data/taproot-ref/74dba0abfcd70931e9e189f44c9fe76cb1cdbb0a @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b4010000009fa83274dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7e00000000eee18aed04b9ab5c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acec010000", "prevouts": ["5a6440000000000017a91495eb8fe3d959e08a2cc279c1b4ede1921d14a93b87", "fdbb1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2257202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["ee979f36ea2c02a592926939e3326dab1625c9106db43b47b5bb96060197b48c55035cd0f9b24ae1f3588780876fc9aae0ecec5f2210ee85544970f15a2340de"]}}, diff --git a/txscript/data/taproot-ref/74e0dd99e051486e796a28c6482f0b52f0af67a1 b/txscript/data/taproot-ref/74e0dd99e051486e796a28c6482f0b52f0af67a1 new file mode 100644 index 0000000000..be0fcaf4fc --- /dev/null +++ b/txscript/data/taproot-ref/74e0dd99e051486e796a28c6482f0b52f0af67a1 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41f000000006b0b55c0033f723f000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87ab000000", "prevouts": ["cd0141000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "473044022049574749461bcaba97ee33251e5ae7da21a9891faf2394a14e26e9c1cda04af50220722a83970d53cedfa8506b95a2da4c595d409e80998e553d45077273bacabd37814104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "48304502210086010bad88a9aaa45b2b005071cbe88af385eb08e0af69a32db43abed8a304ca02201f4b320384110796b35f03ef451483d2fd4ff9e27c98f53677dddffa794e7f93814104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/75255d425818aa4e45fa7a8ce30896b30e5f57bf b/txscript/data/taproot-ref/75255d425818aa4e45fa7a8ce30896b30e5f57bf new file mode 100644 index 0000000000..4e8e71ceed --- /dev/null +++ b/txscript/data/taproot-ref/75255d425818aa4e45fa7a8ce30896b30e5f57bf @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2101000000cfe0b1b560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701701000000d6dee7570105fc0400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4c000000", "prevouts": ["48997400000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945", "60ea120000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "327d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363674d83ec545aed04205f6c8011bc6d879deeac8bfcd4272e2d7b511be5f791a25d31a4d328a06fbd663a9de03f4f743ae6731d946a7b64875ecbfa9fe5ecb492e4cd18b5d1ec472eec5a95c6c9d67ba3848eb933b0b41a8c6d3176a27b07997"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac0f29a0308f7dd1d25542f1a27a19e78219e8b2987efd922e316e5388ecd586b0246b7a5461d23b2ebf642f7df88e05c9d62107f66abf7b5f94d7753ce57b53620e954adb3b90d8c3597d54022d70f5af7b761a66be618c54dd56feea2be872"]}}, diff --git a/txscript/data/taproot-ref/75362838d1ed152f60dc3cb74924d167c1b0fd2b b/txscript/data/taproot-ref/75362838d1ed152f60dc3cb74924d167c1b0fd2b new file mode 100644 index 0000000000..b9db0f36f3 --- /dev/null +++ b/txscript/data/taproot-ref/75362838d1ed152f60dc3cb74924d167c1b0fd2b @@ -0,0 +1 @@ +{"tx": "c6e5ab7401dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba9000000006a198ac904d2d91c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478793020000", "prevouts": ["9dee1e000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "267d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed3613095503852f968cf254efcb9d0b7a7155094671c0665bdc16a67bf9a23af91e402d116972020cc4db8f7e1431e7a7416668817d422dd270400f40dd8d238"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361cf75455252e12219cb13ff880bc28451a916c621a385ef21679c99f872f6341f7219e5458c3fd087680f56af7e0cb5a098c29a419645486255ebba5b453a7aacd4c02f64c49cc162ff9325daec6263c98ea78a2c5346e44c6d55d79722c7edb"]}}, diff --git a/txscript/data/taproot-ref/7559c841c04c474bc9ff45fe8504abb5d4e8f57d b/txscript/data/taproot-ref/7559c841c04c474bc9ff45fe8504abb5d4e8f57d new file mode 100644 index 0000000000..987c9bb0b7 --- /dev/null +++ b/txscript/data/taproot-ref/7559c841c04c474bc9ff45fe8504abb5d4e8f57d @@ -0,0 +1 @@ +{"tx": "8724841602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1b020000002b49f9e18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41500000000a39d908104476a65000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47873b010000", "prevouts": ["ffb125000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9", "e565410000000000215f1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["fe481de0054653f6dc89220421b81205d1f67dc9bf372464b33058d3f36b609fda47be226b9e2c17f1a76095a66ef57d64048027692203b62e8260064c28999c"]}}, diff --git a/txscript/data/taproot-ref/757adad4f7dd459070f4f1b1f4f4f2374a57ec6c b/txscript/data/taproot-ref/757adad4f7dd459070f4f1b1f4f4f2374a57ec6c new file mode 100644 index 0000000000..46ef8bc98d --- /dev/null +++ b/txscript/data/taproot-ref/757adad4f7dd459070f4f1b1f4f4f2374a57ec6c @@ -0,0 +1 @@ +{"tx": "a117860f03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc701000000bdcfc3bfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5600000000a3e6ebc160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e2000000008a5cc9e102a66ab2000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7d1010000", "prevouts": ["8417810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1a8a2400000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc", "27c20e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_db", "final": true, "success": {"scriptSig": "", "witness": ["4cc2c7023a430a883c4f30c9f42ebdaa1aa7c2932b51bda841d87bccfdf05e6468523df06590868d0ba60d2d45be07ca474c644b3e52d61d00e7eedb1912625082", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1dc7edeb9c04f789c631f77d100607021302f58c78bacb3b7097fac0c17fad76e0b3808c65096c821ab6f6fb5f2a18be1b415dcefa06ae3611f4fd666fb2132cda", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/75ed237efa308c478c8ee1faa516c94e45f17495 b/txscript/data/taproot-ref/75ed237efa308c478c8ee1faa516c94e45f17495 new file mode 100644 index 0000000000..df0848f167 --- /dev/null +++ b/txscript/data/taproot-ref/75ed237efa308c478c8ee1faa516c94e45f17495 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47e0100000034d6f85adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8200000000012c3b33dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d000000008f19ffce02f518ac000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987d0010000", "prevouts": ["baec39000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "d7d2500000000000225120b982c4866c93df3772712b36d4336b477e2dfe66f304c80c21f6bc33f20b8495", "8ecf23000000000017a91418261fd2fa0b0480c86b918607add1dde9f7026a87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2255202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["48930aaa45fa2fdb9010214f5b3d024c882fe1cfedbfdb0bb0e749a4ceda95a6b7c7e36ee19f4b85834e93a81fe9f6df72c1cf673b443ed2431e18f758f3ce5a", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/75f1856401af3c6957b627bba156ed076e49ef5a b/txscript/data/taproot-ref/75f1856401af3c6957b627bba156ed076e49ef5a new file mode 100644 index 0000000000..1350564217 --- /dev/null +++ b/txscript/data/taproot-ref/75f1856401af3c6957b627bba156ed076e49ef5a @@ -0,0 +1 @@ +{"tx": "ee452a9b01dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2201000000f780eafd011ba61200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac4c010000", "prevouts": ["0392270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_64", "final": true, "success": {"scriptSig": "", "witness": ["c13b367e48558707f232e0325203b68f70aab6a4d20d4867ecd67aa7c4e5c731e84cddce8ef781dba48accf56b0bf6b4d3d96240cd50e06d65a38f24c59f7e6082"]}, "failure": {"scriptSig": "", "witness": ["e6f210916038ee5faf17710a0f9f9798c135fa34dd30f72de516abaaca2d9c64f80dc4750875dca324c6a07d47f0ee50caa84974466d68868f78efd0ec10280464"]}}, diff --git a/txscript/data/taproot-ref/762487d62765bf58b6c712ce69edfc2a9d91f23c b/txscript/data/taproot-ref/762487d62765bf58b6c712ce69edfc2a9d91f23c new file mode 100644 index 0000000000..d23de65c80 --- /dev/null +++ b/txscript/data/taproot-ref/762487d62765bf58b6c712ce69edfc2a9d91f23c @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709800000000daf956298bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45e00000000b3893e6902e64243000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e740010000", "prevouts": ["4038110000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8", "f0bd340000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "f87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cd6beec103bd564656e486a3d8accdfada5c9b845f4a923505854c0068c70f9c9e87f1230a4dffa49f76a6d91b3ffe7dc371ffdd064326b56030bc36a92eabd9a0f16f4cfe8b052d74bbe565102becb5d9831a57baf41b6ebc95ac4a46ff7ed8"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e6214fe237ac2788af17775070b6b8447de06a17f7a8c679a51835b9edf50ef76a44cf4e9a2100eeda9c03b98c53803fc7517d02bc9d83cbf3bcae8bb7675812a0f16f4cfe8b052d74bbe565102becb5d9831a57baf41b6ebc95ac4a46ff7ed8"]}}, diff --git a/txscript/data/taproot-ref/767dc9730435e95ff0446a5e08a10843c28b5e4d b/txscript/data/taproot-ref/767dc9730435e95ff0446a5e08a10843c28b5e4d new file mode 100644 index 0000000000..55ead189c4 --- /dev/null +++ b/txscript/data/taproot-ref/767dc9730435e95ff0446a5e08a10843c28b5e4d @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cf00000000f88076ab01307b070000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc6f020000", "prevouts": ["793e330000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa1941f75e5ef6b91990230755a95e91c03e6de7762e861be9dda5623c3157397ffd5e8f79d631fbf207b458b911c1cf4efab0aea5316113aa9c93bea92caa9fc9"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360caa8a549ebb1e902e0f1d1f46675540fab11c0d150014a35b1dcb4da9e7097c8742f7aec0ae53a52a244a2c0c214837ef2ff67b990e770e70b44d703b0bde01fd5e8f79d631fbf207b458b911c1cf4efab0aea5316113aa9c93bea92caa9fc9"]}}, diff --git a/txscript/data/taproot-ref/76967f9679742d07c45801b75cdb5ec88f3ea2e6 b/txscript/data/taproot-ref/76967f9679742d07c45801b75cdb5ec88f3ea2e6 new file mode 100644 index 0000000000..8291f37199 --- /dev/null +++ b/txscript/data/taproot-ref/76967f9679742d07c45801b75cdb5ec88f3ea2e6 @@ -0,0 +1 @@ +{"tx": "62db20530260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b30000000059a62bffdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8d0100000072c0dded011a3b5000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4c2e7253", "prevouts": ["f1091000000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190", "c7f15f00000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "d07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e81c85c730685924be02f7d46bcb10c9c474c6189388cc381e7f7055dcad1cfa477e36b196311c1a9d305bc653889017f46f4c4934a1587d131a83127df4466fae"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0d5e55afeda99172050d01357d6d8287f4824ba4286577d269d78bc9373ff36ef78ec8d95f7a630a87f4a69d09adcdf12479e6b3f8e7304927bbc129b24d5867420b3503815f4c7b180839898c4c4aff0ab6ef4d8b082708dba105a321f7428"]}}, diff --git a/txscript/data/taproot-ref/7697ccd8a0cbc267875cf87e7ce982f8dbffa82b b/txscript/data/taproot-ref/7697ccd8a0cbc267875cf87e7ce982f8dbffa82b new file mode 100644 index 0000000000..69941cec66 --- /dev/null +++ b/txscript/data/taproot-ref/7697ccd8a0cbc267875cf87e7ce982f8dbffa82b @@ -0,0 +1 @@ +{"tx": "2718af9003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbe01000000e5a9b0d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7701000000d487d4b6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7c01000000a122a7d901541e3f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e1010000", "prevouts": ["436e760000000000225120cd69e6502803f0acddd51df30ad464e69e95dcae732a2073690eba6ce00d0199", "a2f375000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "0988520000000000225120a98c6fc01fa4c9d83199250e6e76cd0e9fc22cdfbaba8827d6d131a9d8267c4e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["304402202d7eb41b6e60bf733120e010d292433a057feec2cc7a5fc84c2b276461dc325602200615777448796abb85280f106b4af2c3e49f053aaf847fac06d13f874035c81d81", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3045022100d7d5ea8cbb8b2c64b33217a89f9bddc851bd242a1d802dd08a314b665479c13102203db82ca0415d06d4e8f12cc07445f43169455fc7af14b91ba48398c0ee28569681", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/769cf64713d5676b0d7823f406502b750f29f48a b/txscript/data/taproot-ref/769cf64713d5676b0d7823f406502b750f29f48a new file mode 100644 index 0000000000..233f4e570b --- /dev/null +++ b/txscript/data/taproot-ref/769cf64713d5676b0d7823f406502b750f29f48a @@ -0,0 +1 @@ +{"tx": "c273581502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf30100000056f903e4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb901000000a48e00d50318bda000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787f9020000", "prevouts": ["c6aa49000000000017a9148fdfffe253d045df4a2985902e5465482e50374187", "da125900000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "047d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84030e911897c6e4798122efc4265e48d96402783f565c89ff2a62155c020859d8460181b685601280cbfaae0e90478ea5ae6fea73a2d03f5a79a14a3e0c6d503"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93665f2789c044d6944fb0be746f461fd1d8ebe7179986f1cc1563b6f682e3c1e51e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84030e911897c6e4798122efc4265e48d96402783f565c89ff2a62155c020859d8460181b685601280cbfaae0e90478ea5ae6fea73a2d03f5a79a14a3e0c6d503"]}}, diff --git a/txscript/data/taproot-ref/76adb95f40dd46b0cd442f82b7eb70ed237f1676 b/txscript/data/taproot-ref/76adb95f40dd46b0cd442f82b7eb70ed237f1676 new file mode 100644 index 0000000000..a854e55aa5 --- /dev/null +++ b/txscript/data/taproot-ref/76adb95f40dd46b0cd442f82b7eb70ed237f1676 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c9010000000264f714bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf53000000001434957104c9c89e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79635000000", "prevouts": ["8db2310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3ae16f000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_35", "final": true, "success": {"scriptSig": "", "witness": ["e464d0cd9a97650724c91b3b02001772134e34f1e4ba7d063dd205525e0197395a67b7a026c596fc600b464560f8b825d539f59e70c4c5469da928d42a777fcf"]}, "failure": {"scriptSig": "", "witness": ["26822854eb5f3ac6826ad6a345dcf6faba210b3fe719d913b14c54e0d4c0955c11af367a70a5f7c383a3779cdf0846c71e6dd060eabbbcd85c652136fb43ef8535"]}}, diff --git a/txscript/data/taproot-ref/76ba7be2b975f49a68b47d255757883a4fe65358 b/txscript/data/taproot-ref/76ba7be2b975f49a68b47d255757883a4fe65358 new file mode 100644 index 0000000000..2b72f0addb --- /dev/null +++ b/txscript/data/taproot-ref/76ba7be2b975f49a68b47d255757883a4fe65358 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f4010000009c66389e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a601000000edc649680396c34c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acbd5a055c", "prevouts": ["012010000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47", "89513e000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_2", "success": {"scriptSig": "", "witness": ["f68fa9407bb9c6c147d0bcf5b59479a1744fc235eaf3f2d82d3a681179c902382a8f1302caeb069ade2252ba144b15a72015e6aee0577f7b247e01c10f879a9e02", "501e50790708f3c0d8f1b46f37ff1084b6a4d5423da1665f3c27dfe8224bccd17e478ce1444c4da453e399f233e7c7d2668ab1f6ca02ba9ad5b2496606704a6748265ce43a0316ea3cc86819a9881b08a8220ecd8184d9229ee69552df464bdfbe7d7dc2fa3295f277d9fa7e90525a"]}, "failure": {"scriptSig": "", "witness": ["187a22eb65a90679e9f31119bf2f035f76258b190a612fab8f156a375bc1e08e25ec5533a534f2797e55c9aae494478e31a07a1adea6c1574ece4f31312c50dc02", "500456a57af69a6a9615ad0e4c280ddd57d32d3f29bb568db26c714c074fb8de607d387efb6b26f9c1883843260188d3dd9974888a77b2b473f26783f36b3ec6b0ba7c12bebd30fd6992270fd1bf7d71dfcc01ab9893"]}}, diff --git a/txscript/data/taproot-ref/76bc86d13bce32da92769372e37076c675520959 b/txscript/data/taproot-ref/76bc86d13bce32da92769372e37076c675520959 new file mode 100644 index 0000000000..e11af1e601 --- /dev/null +++ b/txscript/data/taproot-ref/76bc86d13bce32da92769372e37076c675520959 @@ -0,0 +1 @@ +{"tx": "b96146fd0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270aa00000000012841abbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffa010000002b0920930287757400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac12010000", "prevouts": ["3995120000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "1686640000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "a47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630a51e3ee68449166d2da506d8de0f0b7ef39424ebe5f034d615a238e9b2a225f873bed7b94a92ccdf1432eab063a27f935bef099df6a1cbcf6734b218f2b6aa9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100eec4f69e5cd9a0f0c1fda8eb2f54297e33bc5edab35b299e65e2653a923d6ca55"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8df22966d6a6c55ca54713f7180fb521ad1601010bda1f1af87739ba1b0e44e80ea84c8431ee0615517346b97932410ca977012a316263f78a9edf0a452e478a09da521cfc521edd35405d6ff7b10120e980b699014de05f8e600b437ffa9c347"]}}, diff --git a/txscript/data/taproot-ref/76c17c551bd5e5ae2efbb26f2e05d12c9c8181b3 b/txscript/data/taproot-ref/76c17c551bd5e5ae2efbb26f2e05d12c9c8181b3 new file mode 100644 index 0000000000..a39f92fbc6 --- /dev/null +++ b/txscript/data/taproot-ref/76c17c551bd5e5ae2efbb26f2e05d12c9c8181b3 @@ -0,0 +1 @@ +{"tx": "ad0f55ba02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf000000000020d415c6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf37000000008751388004a9f403010000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487cb7cdf54", "prevouts": ["781681000000000017a9144c4b1fc943f04d775886b4f6d3c3c73bf7d3118c87", "2435850000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09024006cd93f5f60b084a9c8d08f966dbcc9e0e70a9926d232a9d958679ac161177943a477f798fd4066b5de32773201a141cd1bd70630c76c1e8b2f926b8ba6f9b9b55fcffe7283f010f84dca936f6e4f37e43378a46bc9713305239853e990b19eda28c5adfda4c1c8f00de1b7b471df302ca39c5374c820318be1dd64637a82964fc76c9b01d1f1afe3cfd00a8adf6752e94618728612a75b17677b1c372e67ca03d2d84e4b9585d4349a76c29c73465c53023ebd14646e87c6fb627b295e8e5867032bfc1847b955c2f695686aacd19214430264b19fa8d2e5c50f2ec853b20575cee6c7117370456f0a19aee799d2a0679311ffe7e42340b3e894b2fc62b52d041561474f4732d0ae3ef9107270a57bac8caa37c38d93cc64adf33323dea692befe5d67c5810f88cfc6dba97bc5acd2cd826b1174a2c25a6d2ae2adb0ebfcff6fa6bc464f2d3fa9d92208fc6d45b281b0c2bbe3c39f1bb17352c9880d1e326299b539ff176a29a8b237193fbdcf15904ee226d50970479af8da478a3b752580dd42b7909129104044b6f96a7a9e54d107a8a43f2fc07fed2f1cbba13d9a758d8c1029b873a24096bc59dd83fcddc0adc1868fdc90959a6e8778ff13dec76647f2d948e4bd9fd230f8700a7d2a9daad6f2ee75f1072e7f8b5ea3e1a5a0ee2a563b6f6f03f5f933bf23d3e06f53711110bae4ffd1dd3f4e4fb829a1b3035f3e0f8b9152716e4e57e3975d5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fbe755e9607a08942b2a918c9c9a472649e9fa8321d88cb3bf3ced4d061fe811b5f329bd8499c4f72b132f747438a5079d3448c35be74257418716cc5d770d7ef69ea04c091b2bc3b7c7ae53ee1804d998a6447fcbbef49abb62b7a394c4c123854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}, "failure": {"scriptSig": "", "witness": ["4d09027d14f8c3a2194bfac66d9dee24939361a77803dde263fb9cfeb1c17256bbfa96dce43ae1187ee059eeda6f4a22bc3c4d22487d90adc1cd10d26145e062ff813781b5362e4104a65a5495606caefe9c74fab11e327b8b2d2c1f28ca64d856fcb28820944de1432fa4be9b70683b9d3204a30db612be6042f7418e3bc4b8e0ece834fec9ea755191d39c613ba3ceacc88030cbfa70757b061d88136cbb818b57b7636241d513dbe961db18b7b31b43d6f729b1a55ed562982c351fcfae96a479d77469a0b9e0bdad84e493c178691f49c33fa5cb8630f0ccea0e6988de4af6a045df07fedaf3c6bafa5c1ee8757268563650f952eaaddd8888ef6f1bc90764fe229d24aa6cf7333a3d93153709194472b804878701a3867799c3dd511d11b87c53c5e5eeb2c86fa57cd8d4f59cb5c0ff79da0deac1dfb505193ce9d27f5eb3b3a10171f5ecfdfa663e35a838ca974f9716f4d8aac6116a4bd1beaeddb0d0d902b6486749d8ff6cba3d2b396b954557c03ab8937704b1198fc0400158f233cbabf9cbf24afe585ea27f70c227b685adaf3bc24d4488750d1bafd03d986d43c7cb91f8bf1772b422c074261562c96124339fc36922a344c5eaf47c1be00b5883aeb39635b40c551e98fc79f7b2242103640435571ba8f144376b8511c259fe764c775e34af4f3dc89db069e6fd7de81a4bdf64bf1110cd31942b419474fea5d645d4298a0ba4917eac51697561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6754763bd81125d3562783a12f8a78fed0af3e064c5aded9a58b08a7329535c99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb44c2f2200f850d6a1609ea6f282082fe51ae8a55145cebb4c521120909a7edcb74b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}}, diff --git a/txscript/data/taproot-ref/76c565f5646ff08d8c740ffe4cf133d9c8a3fe65 b/txscript/data/taproot-ref/76c565f5646ff08d8c740ffe4cf133d9c8a3fe65 new file mode 100644 index 0000000000..d49d4150fb --- /dev/null +++ b/txscript/data/taproot-ref/76c565f5646ff08d8c740ffe4cf133d9c8a3fe65 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43b00000000ae08b4eadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c51000000007a44b5c0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b640100000061c4ffd403bdd4b60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac57010000", "prevouts": ["f0d03b00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "96d759000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "3c68230000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "7e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936564aba5bb494d1265d2fc5f111904e284bf007c2b0a6386000b21954c3f321a8fbc41b165d26ac180ad5b5d4c7fd11b6e5ed18084ae5d6505f3de45d58844c1cfa5d068ae686a8bb1ac9947127542ac866077ad522de57cab26ce701d52bc951"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdb95efb91d04564594d9dcf752eb8fd975bf01996a0bb9f9eb7163324924bcd44fa5d068ae686a8bb1ac9947127542ac866077ad522de57cab26ce701d52bc951"]}}, diff --git a/txscript/data/taproot-ref/76f5c55837a53eb0781baf11e0de07184a6d08ee b/txscript/data/taproot-ref/76f5c55837a53eb0781baf11e0de07184a6d08ee new file mode 100644 index 0000000000..b118f36524 --- /dev/null +++ b/txscript/data/taproot-ref/76f5c55837a53eb0781baf11e0de07184a6d08ee @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49d0000000063080aaebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa801000000660303ee60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ba01000000be4370b5010fb78c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7d8000000", "prevouts": ["c21240000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "da9f8400000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "a0b10f00000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c14c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5182d044aa67ca69515bddcd39ff85ae31d999a9a5b32af0a0137c9fa4b226ee88d3f52a2844c5f7874c7d430ecd2ddfcfe713e30c56da5784f950db6acb8f092a"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936049f747986f150b9437633843d291800b849149650f68a8c294c910246137135d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5182d044aa67ca69515bddcd39ff85ae31d999a9a5b32af0a0137c9fa4b226ee88d3f52a2844c5f7874c7d430ecd2ddfcfe713e30c56da5784f950db6acb8f092a"]}}, diff --git a/txscript/data/taproot-ref/76f83799d26fbfe8607158f4718d6f5cfdc8621b b/txscript/data/taproot-ref/76f83799d26fbfe8607158f4718d6f5cfdc8621b new file mode 100644 index 0000000000..c61a5960d7 --- /dev/null +++ b/txscript/data/taproot-ref/76f83799d26fbfe8607158f4718d6f5cfdc8621b @@ -0,0 +1 @@ +{"tx": "9a4d26d2028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4340000000054ebc4c9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd401000000535d55b401bc3e0000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac08000000", "prevouts": ["e42e3b0000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba", "2fde5c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "c87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e8373588cf8424fe73474f68ca177013b4f80e2262b45a155b55745d3c6e43c7da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e65775dfb1ab8912d99abba269b246de78dce1dfa6fdc8b38f44f7be80bcbeb76c308d8e78b0cea59e70bbcac5990a047bb63a968328232757672e5e931dda055"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9fd4215134e0743a43db076a2ddc66cd37630a1ee932cb7432b56663f87783368e9a99c27257089f8586472cc94222e874ab5c5b462fc98ac1b045b7a37dce65323990ac9ba96640afb66df99f25054f5788ad16157a03b33c6c26a70bd925e21136d3d9ecdf371b2101a7e86edb56e15b10ef185a8506988239bb2b5a4c43e"]}}, diff --git a/txscript/data/taproot-ref/7705fd1f70110abbefb84b8bb3679338dc85008b b/txscript/data/taproot-ref/7705fd1f70110abbefb84b8bb3679338dc85008b new file mode 100644 index 0000000000..2d5bc22462 --- /dev/null +++ b/txscript/data/taproot-ref/7705fd1f70110abbefb84b8bb3679338dc85008b @@ -0,0 +1 @@ +{"tx": "a5db689303dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8e00000000ee83d8e88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49d010000003a8b0fcadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6e01000000d40773fa021b25830000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ace0020000", "prevouts": ["24a5260000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8", "e8e73c0000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "4909220000000000225120acc511cd55079365da76d18a33af3ae7411f3879a9caec918e9264c8959f5dac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "f87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cd6beec103bd564656e486a3d8accdfada5c9b845f4a923505854c0068c70f9c9e87f1230a4dffa49f76a6d91b3ffe7dc371ffdd064326b56030bc36a92eabd9a0f16f4cfe8b052d74bbe565102becb5d9831a57baf41b6ebc95ac4a46ff7ed8"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e6214fe237ac2788af17775070b6b8447de06a17f7a8c679a51835b9edf50ef76a44cf4e9a2100eeda9c03b98c53803fc7517d02bc9d83cbf3bcae8bb7675812a0f16f4cfe8b052d74bbe565102becb5d9831a57baf41b6ebc95ac4a46ff7ed8"]}}, diff --git a/txscript/data/taproot-ref/7722142222386c62ee3cf0d244202e77b759f34b b/txscript/data/taproot-ref/7722142222386c62ee3cf0d244202e77b759f34b new file mode 100644 index 0000000000..e429db0465 --- /dev/null +++ b/txscript/data/taproot-ref/7722142222386c62ee3cf0d244202e77b759f34b @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42b00000000ec4681d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb3000000009a1ab7c503f24e9400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac34030000", "prevouts": ["33df3e000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87", "787358000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/1000inputs", "final": true, "success": {"scriptSig": "", "witness": ["783a38a223450cbde7a7b41248ea105f1ec2f7d27d06ffe0bc173368cb79926bde2e9bce343e87772e2c0b6d19e0fe954a756a263ffd3f2e47dc5fecbe0178ff", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "75757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361b31d32273cec10a388aae06b849f4b58d319b8be15342d1582ba39dbae41cdb8d0c3ae4ecd69aafe0cfe43a84c5490ce66f12d05fca780d5434df16d81c50b707b0958e6f1d30ef106eee149eea009878f1bb16c67ddf543cd3674e13327b7267ad95278cf386dea223e62e70daac0dffb1914a422911909ea2326740a911ee4e6da2445d77f245beebfb228d762c59bc4a45aa12cc4f427fb039e22e0741b8a9b8ab344cf2739c9b0c32934aa3ca09577646326af4e24188e665bd1ee1286ae8a1d97d8069ed729c043647fddc6f0881774cc6af50354826eb57bb80c2a537064e7784a32ac7a58f3a60a34997c8053014901c71ada75570a50a230c2a15812d8c2d47d0d67efe3e8b51d627e5dfa00d213ab14a67d5c44c645d4238abb49f653b56bbc07059ab8fbe5f7a1d8b1a014d2dac79b80c168f374716643afc9d2078ce779d35b8b9495da82099971fa23460f65b58297658f8344073387644345bf93c5d65e32b9def275a3e26d7cfb887654cccdb12315dfea4cd4a0817d8d4bf17002da8b6956793790e2522cdbbbc51c3e76cc941c9170ee3ae91039a9479105f3564c54269032898a6cd874ff4d1fe0ed410013dc82714eb7a54d64226e3868b0e659112c9f7f4ef135ef7e3677927c686e2cfb83a5642dd1287d117c18623babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["4cdeb6cda4ea5936a8a548d271d20e8d3ef2c43f6561a714f40b06e7505d8d94b88b42fc81df8d1be972e219a062df18d5287dd15867ee2acb2617d76d78281d", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "7575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c83b46994d7f8e6994644064e85620b72250802c25869579473094af99741c2a53d70a499a2b9d07fe4e0e6cff337beba7d38cc150fdbb661dba76e5139a2443acf95dcf25aa121eb2e54ca553120788d0e687c373c34db8910d412871842a61c2ea6390cf7a5065adb655a43cff9312a2403aeb5ea762cebdde4d887b73eb6c49d3b8c8be8af93872b6db7ce0bb5cd37d778c1b0ce6796d0a810415378a7c3dba1b225e18c65d1c10de9a0cc3035ad2761c5c76198c2ab54b8cab7c145b5d828d1cae81044ccd077cc0a6748c134e6cde0d0e3b375ff99dd8f5fc12660edb07ce033cb2548bda430cc0fe75bbd863ef5499578603dd05ac225ff92af4da5b7edca4fc2d6b3b9f6d10b16f2fe0d93e1083dbdcc6039116dd558b96d689a9b6ca973655fd5fd3ea54b033deec3d8b0af8f9d2f52797f3400e4f6e622e7375dc6acdc7095d9956755e1260b1db6b35d4ca0cf370620b49d6dc89fdc714ef75e3b9ab67361a9d368d00307e918b8d4e9a4b3c809cfb6b1f27d7ad87a7bffe6c20b1e1faf1c68c7350ed7e5b99510cfa520ad19515f62e946aa86743be480fffad58a57b391dd67ba025b9a60505ecd7fa3b5ed0808730285af9f495e709e1f92ab88b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/77258dc253bbfcab9ac3a990bda4f20592f9c651 b/txscript/data/taproot-ref/77258dc253bbfcab9ac3a990bda4f20592f9c651 new file mode 100644 index 0000000000..97352fa5d3 --- /dev/null +++ b/txscript/data/taproot-ref/77258dc253bbfcab9ac3a990bda4f20592f9c651 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7a0000000049367eecdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb401000000a94652fe02ebd56900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3c355049", "prevouts": ["00244800000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "b705240000000000215b1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090246f5618e5237005debb856b786290b415637a1f1f1a00b78394a2d854ae88184dc518e76c1d0627e1fe87196dfb3184222e3d53ab50086f526676338692cd57aa39de2eee4e49e6fc648d0e1d92b9244f783bd61d8495cbf60156e481943e28725e017a0709c4f1a3b669b97b961b83d37c24e693aa60a3b8937221ca43c4d96da489130dc24ac5f4b557d80f10ff8077fd1b865d5ae5ff9cf1d071ce753a596f82dcccf4fcb896a4c7ec4f8e5f4b4a01717947397c24951c8b9ba68f01496ca75d7786ee34a7542f6902453c7fccd18c2840cdb3ade118295c7c8c88c455528d2ac7ce8157692d77956c0f57ad92f44c0e57d5b9898c97b2cdbb268c4d84330e9926befbdbf984c1af249e28cc5facc6d12e398ae5dcdc5c223064114e7ce1dc06eb9db5c0c312b0da142287f46ade46e172d0e14f185c037330d56013e49240ff80aa1cd46430225d00b7ee8d67b872b8a007c70096685afad973157901f18541086fa4f750a09063bbda0e34362b64b212ab54c72c796a057ec422f3373255fb591079ac1e0bd0514664274dc04e096940d2f5523c7aa014dad38b79b854efcc61a8378d13696473f2c8a348d2aa7a88a349b5bb583037240d8bea60bf770eeb95b028bcdbaa3eacc796aef49eb18f561719b075c40b93a5262e6163c25870a5769aba3873d711682537fe07947f2329b8e8e03602c5ca949122137cd048b986e5a9dd2f44ee19375", "ff7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d6cb4833cb0ce17ffb0b5ccd72f003893ae0529ac21789df7af68ae41f1b87092e9788694c2a4005ded48f6fe23dc6801bfbcf181c543907f81cb41df22d2e77f27794099b656b9faa6b5043ba50cab982b2292ed8155b5f0f6568a958ea63ad187b9e30f7e626b28b6dbe2d7b101f74e326290698090dbb0a7eb7a50daae87a"]}, "failure": {"scriptSig": "", "witness": ["4d0902583306149d617c8af0d3c9a7ae919cb88dd68546e03b4ff5f3cbb9347fa2bfc7e5f580d91a6472b5df5e81ac87753ee2dc93c9d8b159efdd7b1ec3c30125b8e80a8082db6598397ca849aad678e0a67c92cb0aa5581a790057337e59fa48ac8a61f2e67d971f89fafe602e1e62daa84539988ac72be858145801fcab3e32be9cc5d1381ef0696fd749222a2823d18bc9ad5d01fdbc37f18b0938e262048edd139ff4fb0099648b9b62522c651ee03f16688c7f3890cacd95b7804f5d191416ac304e9eed73faf971784e8f3619d2e3230a4efdb4b559d4feed1841eb260945981acc03a56b24b53fa54a77782ebd672abe447262aafad0e11cb063d976c810239b9780a5c578d17577a9a6c3a7c19a52bf20b15502e106d34bdbba56f5fd3633731025b75ee4f096c6aa73d56d8ead7b9f6f4b98dd99771e8d6479b8bf49cea2432a54c4791c3e806558e322db4f77c50b31ede95a5481de826932c72fa6cced57a20a13913e3eaf1b54e2a715fce1c7bcf8c17da9ce5bde6fa27b4a561f0f7b8a96ae33c135033153fb00036ba100e433719c314697284a3fd87f3ad61279c7481101852476cd45cd85f51d99762ebc18748cb929fe1cf31063d5dd3371605fb91885871fa7005b9b4613397ac13beb1b19cdad92dad4cfb814035e578b12cb2cde1cdf3aa529916b7d90570cc32de8f3b0347a57e985d6efb24ef0103c73e0554638498f3c339dcd75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360250bf0957827ec0ef4e6919f825b41a841653c5bffb12706dd1bdd45b1dd4a32e9788694c2a4005ded48f6fe23dc6801bfbcf181c543907f81cb41df22d2e77f27794099b656b9faa6b5043ba50cab982b2292ed8155b5f0f6568a958ea63ad187b9e30f7e626b28b6dbe2d7b101f74e326290698090dbb0a7eb7a50daae87a"]}}, diff --git a/txscript/data/taproot-ref/7726ec0c41e3e97e7d617065e6504efb8f024cd4 b/txscript/data/taproot-ref/7726ec0c41e3e97e7d617065e6504efb8f024cd4 new file mode 100644 index 0000000000..a670fb4f62 --- /dev/null +++ b/txscript/data/taproot-ref/7726ec0c41e3e97e7d617065e6504efb8f024cd4 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f9000000002952ca0e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703501000000ec13486101dbaf04000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ebb0ca47", "prevouts": ["2b700e000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "1417110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_fa", "final": true, "success": {"scriptSig": "", "witness": ["ce70a1e19d53314c8df0e2a5969f4095575c775cf66ea5b042050a2e6b928ef33d973a510be348fca910c81a6b006319f42df4249808e7db6f7512a32b3f7ff301"]}, "failure": {"scriptSig": "", "witness": ["272aa10ad3414d8c91bdfae458f2fe02bc11f33e05e33b074c62d86d42b06729761198eda32e1621fabda0200f8b3385703317c34553eb418eb491d80263252afa"]}}, diff --git a/txscript/data/taproot-ref/773d0e073333f130bcff75d37d1111faaebee058 b/txscript/data/taproot-ref/773d0e073333f130bcff75d37d1111faaebee058 new file mode 100644 index 0000000000..0bacff9054 --- /dev/null +++ b/txscript/data/taproot-ref/773d0e073333f130bcff75d37d1111faaebee058 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4d00000000734e99b70459591d000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7ad010000", "prevouts": ["c5021f0000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e7", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93668ce749c68de633516e195736934f8a88269848cb24cae075fce4521e857a6cdd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c61a1ab416979399a3dea56cc9db65331fc4d8e9e627e6b90ed3a4ebdc2f66c36df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936feb3983b18e4525f0a8518cd3710c3b144f3f0d5edea574e13e05d297dfd94906cbd7cfc5d340306ce0f8e37fe1bfa8aba9fd4064e6187eeb928db0d0bdab726391a14412c925771c32fa4c7776d5872be2a56fee9c5a8de868e7e6e5a4c84da"]}}, diff --git a/txscript/data/taproot-ref/774784914f2077e1681344cb01340a934be26ba4 b/txscript/data/taproot-ref/774784914f2077e1681344cb01340a934be26ba4 new file mode 100644 index 0000000000..de619d44ef --- /dev/null +++ b/txscript/data/taproot-ref/774784914f2077e1681344cb01340a934be26ba4 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49000000000575c18d0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6e000000009b12d9b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6201000000323bd29c036d5608010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6ca6eb94e", "prevouts": ["b77b360000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17", "a9315e00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "7c80750000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "83", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936777ff8a9412e94f7b77cdcac9df137438df90b973affcaf29cb29560429bcc3e8ed6c904d531fc0d19ced9482d4cbb64035dc55104164ba190923612d3f9e9a82b9d1447cbfb5d72d5da72ac5ad193469eaa6b44c038aa23e2a9d2dd480586adaf3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93683933d45c3442f615ee20a7137db960cea3b9cd87b48587a4de9c490e5a6c9c899aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb439b32d44b6ff86c799acdff23ced11a294722ef2b8af6951bf8429e3bda52b31af3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}}, diff --git a/txscript/data/taproot-ref/77907cfa0df9ad35b28a28dc974519599031d5b7 b/txscript/data/taproot-ref/77907cfa0df9ad35b28a28dc974519599031d5b7 new file mode 100644 index 0000000000..8ce468222b --- /dev/null +++ b/txscript/data/taproot-ref/77907cfa0df9ad35b28a28dc974519599031d5b7 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270de000000007f4af652dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca600000000e56eff118bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48000000000454a026504e231a400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e79f410645", "prevouts": ["a4bd1100000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "f33b5400000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "67d540000000000021531f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["ca", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f336cbd2c434dcde2d093b968cd4500063515049b2ab4f542ce372ccec22f446d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c1012b923c15ff4ca5711684c82f77f7d0ace9e417918255ff860668826001128a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d520ce1e8f5df7741068fe8539649c9e500f335a96aa69621db8e7a39b2f9d4cf99c996d59a69d75c183cc1e3ba6b17987582b2274e87a7d50251745c93805cc8eba4e75ed92f6e82baf0cd6101dcd67879c020ab703e3dac001fd69a24240ecc7034c4ece6ceffdf067bd97d8bd2a80e986f14e8b5dca33ff1523eba7a77d63"]}}, diff --git a/txscript/data/taproot-ref/77a416c6802644089ebc937712578c64cd114e2e b/txscript/data/taproot-ref/77a416c6802644089ebc937712578c64cd114e2e new file mode 100644 index 0000000000..ab3e4f8fed --- /dev/null +++ b/txscript/data/taproot-ref/77a416c6802644089ebc937712578c64cd114e2e @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf12020000006d57da0d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40d02000000dae2d1f001858c5300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acca000000", "prevouts": ["52eb790000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "240d3b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_cb", "final": true, "success": {"scriptSig": "", "witness": ["bb951b2bf5f8b50ac52303fd39cd7e7ee711071d15167ca9042fd85d21f87764ab10f415e04cd3e75f2e8b46a80fbdc069fc63a1387ff905a470a1a12f35152482"]}, "failure": {"scriptSig": "", "witness": ["f08a28ec32f09defe6338e79247dae57bedf496481795544319895a06a7cc9c4cbc3cd24999dc52b54f255bad6b0b7d26397c351013611c22d308e836c32495bca"]}}, diff --git a/txscript/data/taproot-ref/77b1d215fef8b044b5354a64c3541f96a5eed3ef b/txscript/data/taproot-ref/77b1d215fef8b044b5354a64c3541f96a5eed3ef new file mode 100644 index 0000000000..459bfd42ea --- /dev/null +++ b/txscript/data/taproot-ref/77b1d215fef8b044b5354a64c3541f96a5eed3ef @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a400000000bf14df5cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c000000002070b123bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd800000000fbff2f2002a8abd800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac05ebd32a", "prevouts": ["79d30e00000000002253202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "5ed7480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "853c8300000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_8", "final": true, "success": {"scriptSig": "", "witness": ["b362dc06d7903fe7aa481fd01a349477e849a2b2c2a0084a62d0c03cb8dafe03be4914b397c8b8344016432f6dda686d022696d71b84d693b53d8ab96e5068e702", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["4fabf967b8b61daa66d17eac1a6a529b154585fdd88677c8d6303ff07c92a0c823e794bc94216d774d400ed24518aeec8eeef43bc841c029e053885fdbf37ef608", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/77bc35d370a04908ca4a6126a011623e2b09442d b/txscript/data/taproot-ref/77bc35d370a04908ca4a6126a011623e2b09442d new file mode 100644 index 0000000000..2a5e692ad8 --- /dev/null +++ b/txscript/data/taproot-ref/77bc35d370a04908ca4a6126a011623e2b09442d @@ -0,0 +1 @@ +{"tx": "cc88653202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf07020000004b0446fa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ce0100000099320c9c03335573000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898713000000", "prevouts": ["3517640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "07b7110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c2", "final": true, "success": {"scriptSig": "", "witness": ["e8a86ea3274b426616d7ac445a38c720cb20975e3424eae2d80e8e03719b20780dd5ba3279a450ec522aa8a4ee88ca4f4f89fbad38b6688fe79c38539489f91681"]}, "failure": {"scriptSig": "", "witness": ["bc32942281c86099d29e759d3023958a300d3e30ba576ca39b392a2c62d18a9d82ed94667163aff381954a9a35eb1e9be50abaff847df3bdbb7057601202ab09c2"]}}, diff --git a/txscript/data/taproot-ref/77d0cc6e1223f82ea66b45b7eefc97601034b9bb b/txscript/data/taproot-ref/77d0cc6e1223f82ea66b45b7eefc97601034b9bb new file mode 100644 index 0000000000..013a1350c4 --- /dev/null +++ b/txscript/data/taproot-ref/77d0cc6e1223f82ea66b45b7eefc97601034b9bb @@ -0,0 +1 @@ +{"tx": "5f9251c902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf800000000bc13d3a860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705b01000000331e88c204b46b2e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48766d85037", "prevouts": ["0f9b210000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756", "89ee0e000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "a47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e534eece907d9a3224677f965f53c0f955581a0bf9d57668f5d1001f37295acad5e071d65b1ff2cbb44adb2a0836dee99e48dd3c256c0643eaf2d4db2ac89d0f9da521cfc521edd35405d6ff7b10120e980b699014de05f8e600b437ffa9c347"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082df22966d6a6c55ca54713f7180fb521ad1601010bda1f1af87739ba1b0e44e80ea84c8431ee0615517346b97932410ca977012a316263f78a9edf0a452e478a09da521cfc521edd35405d6ff7b10120e980b699014de05f8e600b437ffa9c347"]}}, diff --git a/txscript/data/taproot-ref/77faf5783504d2bd51c625bcecb48b8f87e8e165 b/txscript/data/taproot-ref/77faf5783504d2bd51c625bcecb48b8f87e8e165 new file mode 100644 index 0000000000..242948191e --- /dev/null +++ b/txscript/data/taproot-ref/77faf5783504d2bd51c625bcecb48b8f87e8e165 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4050100000060d5b89860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c5000000004169b1a9047cec4d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acecddd42f", "prevouts": ["b7923d0000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "523413000000000022512097f3f32bbea7bd397ebd6824dc6e34758f0b169a6c237662287beed33756fea6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93621b5bb1a2359f3a8af3fe21ba351d114491ae91346d1641e02870742c471727b"]}, "failure": {"scriptSig": "", "witness": ["6a5c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/78251c5d9b329e36203639010c03798c0e1dcf20 b/txscript/data/taproot-ref/78251c5d9b329e36203639010c03798c0e1dcf20 new file mode 100644 index 0000000000..77527a1f43 --- /dev/null +++ b/txscript/data/taproot-ref/78251c5d9b329e36203639010c03798c0e1dcf20 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c701000000252fad978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42f00000000e9e83d9b03a9ff6800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787f6dec441", "prevouts": ["e4a632000000000022512035c5e2b60676b638367c49c5274cc65e6feb881fb1407d2a5f35cf666d25b965", "0b5b390000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0ba1be0be881933f6293c21d0f105b497a44aefee74f972fd39705efeced0a4"]}, "failure": {"scriptSig": "", "witness": ["6aab616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/78536c856a97d639ec3c9e87656c03a486180cb2 b/txscript/data/taproot-ref/78536c856a97d639ec3c9e87656c03a486180cb2 new file mode 100644 index 0000000000..8c2535d7bb --- /dev/null +++ b/txscript/data/taproot-ref/78536c856a97d639ec3c9e87656c03a486180cb2 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9b000000002f21cb13dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9000000000819e17eb04c2af770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e707f3412a", "prevouts": ["4faa590000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "4d91200000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51709247cbe4599f1b40c45655be9c4524e18ab036a38ca357e6d7c21966c7872b33cf35ac099042702f37424b07b91f05c9425e6e1d18ffa37c0a546b69cafd337007ac6d9f1365651a4d55e6df0dcb109d268cc6c386b355a4997173bc95c886"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08297185a6c30608fff89dfccb39a96a02e4addd353a2af1bc7b33caa3a3ac07fec6e41ed285c226ab336f92f35d989a379104ed593ec3ff802714cc8e85daf0b3be26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}}, diff --git a/txscript/data/taproot-ref/78a8516593c8bad79e4092b1b3fc0a850a266c4e b/txscript/data/taproot-ref/78a8516593c8bad79e4092b1b3fc0a850a266c4e new file mode 100644 index 0000000000..5258931f78 --- /dev/null +++ b/txscript/data/taproot-ref/78a8516593c8bad79e4092b1b3fc0a850a266c4e @@ -0,0 +1 @@ +{"tx": "52d03179028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44a0100000058a0458bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9e010000002bb7bb9501169421000000000017a914719f78084af863e000acd618ba76df979722368987f336fc30", "prevouts": ["806a3300000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "b81e8500000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902ee2fab3e49e94f134e5eba454f125062d59ad39f7debc4b1de7b03393300b66cf60cbf310deb0bb8188a5f81dd989130bd5376f4b45afbd70b75330fcf47720df203f66e463a570e0d5cac4962b40a4ace1d328235d8871bef51e6ee71faa78a210d998072726a67258bc4f7f4a4e2391e463c0e74fc6a18cfb4bff2ae7475feeb1a335ae1912b8088f693b3f94d5a67aa12bc0e9385d33b009ea0de294c0ed04b64682814f89b5ce13df01f3a44b1f62c372febcb4c279268d070b842cb594ad4da7bd9fdd85ef65231d2b1283390d20d6d8d1b08e18563bd309482a7a16a72188f11ea140be5ae1ad90880159cf60ceff326288b068bb65d8a605b99e045cb944acf3a4d7f3ddb5e964bf9a11591f2d25cc4fd62f301a0bf03503e6825852503d2561cb82b7e2e07dc7ca798b92494503b2ee97881ae8c181d7234c3fa3b8479e6b5f654c640c1b3423adea9ffae983e0a596c4f42a365d65a87cd99e6eabe302500bb2e5440ec0103d8588670e268435443ec0dc87cd579529ede56b9f37a8ad91dda3529fc9eb9ce7f9c8753b1419c8a8a9dc78700861a14a7780f6908c0c01c4926cb77b04e45bcbe9dad07cbcb7daf5220dfdadf8e306b5e64b4eaa144ec4fac95b458388967abb4d113cb6cc23750c2044ee25a1ef9c962d2b73f37ca850055b2fdf845d3f72055c971d8501c19d8648073cccb1bf8b53ddbacd029a2ecf9a9cb2ed9dbba1875bb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb450430626a247d567d7470b6045f35bcd343227bea51bdb051c26a41fa3e304da7017bb5ae96064d7d19e957b5258c9c864deb4239d29676eb164d7ecbdb9fd5a354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}, "failure": {"scriptSig": "", "witness": ["4d09020cc1d2522adfb67359ba949637b69a52117483c8ee70f60244c4e7e2af5918779dfdb23910a8220aa324edf4cda261f8cc48fc6e9f19eeb1f689be87051c7edd6fbc70991c91a8c689c5c4e927169786d228aac781897812a927bd43aeb89bd5b8a3c9dcf1723660f7406bed9d58dd3d071ec3a18559214031574a26403dbfd7d0363b8259f06094912e5a1899414c93d94f7a0b85ecec0e49e19a3cd66d83b87583ece7a22f87843937f040306362b1ce585dd4a47d2c7fc819b498c10e67292a1445025e539f9ab035ad98077d68ba9dab40a602a3f771ac8683633fb495422fec4ffa5c0d0dbf6421dad60cf1fd65eef73f2d76aa5dae90775b20344f968134f1c5b354a74678d68e7b591c00138fd6e260958279d675c054ef8834bf9f924bb0e2854e39fb82c9b3df9cdc3b7f62a47a230d1eb97c0db53f9828fa83fa5b8f8604182b08ec5b1564013bb4226d84061257a057c1df65cd7010e4362980bb2e3da57a424888740d3a0a15392e0728b81832c6cfd88f6bb2e34494f4cb20956b7174016096d00a32108e8c9588759b424d70574b8f162a6e0285d087326e5d6b811f31fa119800561ab77fdad0051063a94fa81bb3b6bb01a93ae7a094cae3053ff110dfeefc2b7f44ed025b14d4f08706d90ad54accbc80c9d122dfe330c833125fc9471cc5b94fcfab6924fb896b339ada1cbbc2875667da1a4ef53bffca9ee6d409bc96bb59db7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93691af7e676faf0d787dd6628f8d068756dd2de2473b94e5aa63915f168764e8211ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454c3d251f378473e49463283b18fa00944324abf75c7e60d6956acdb0e7ed03a7354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}}, diff --git a/txscript/data/taproot-ref/78a85c295a5f5c62f56d7eba74225f31406a0b51 b/txscript/data/taproot-ref/78a85c295a5f5c62f56d7eba74225f31406a0b51 new file mode 100644 index 0000000000..f04bd4ec92 --- /dev/null +++ b/txscript/data/taproot-ref/78a85c295a5f5c62f56d7eba74225f31406a0b51 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41400000000eed2c5da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fa01000000017337ee03ceba4600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc71b7ed33b", "prevouts": ["8c5c36000000000017a91454957ff2b5c5fa7ace3c6fb485b914ecf6ce0c8c87", "2b5b12000000000017a91441ce0eb0e6e5800ced23a872818e5aaa63be0d5b87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1657142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["3dc5f8d29912ba73ca1abbaec21d76bef211e04def0ab69376a3dcc8bfffdbce1db6c1afd3f50a254197f695bd395be48e2c839bf1691044018d14a93d6a09b2", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/78aa0f27c839d5f0b6120545131237373c9ae941 b/txscript/data/taproot-ref/78aa0f27c839d5f0b6120545131237373c9ae941 new file mode 100644 index 0000000000..58e4ac8792 --- /dev/null +++ b/txscript/data/taproot-ref/78aa0f27c839d5f0b6120545131237373c9ae941 @@ -0,0 +1 @@ +{"tx": "238858b702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bca00000000c2cbecccdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce60000000068a68ee4039e927a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acdf40ad44", "prevouts": ["b94a230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "97ef580000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ef", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e76d3451324b9138e1a02bc99606f85398a5c02ad518c2db619f89974ca9e92c026557b708b5ff4838890b3ef28f2dfcc17fbcba41194ca68927d7f0eaa3f8db921261d9825d6464319e11fb6c7a9f7c01f613629293fb1fa80574c155a587736c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93693ba0b31f1a953c5b215b358b32e1b4fea0fd384922a25a91c841ceac44a754290840bd75c8ee6dcc19a553b4e3bda7516a8577ecf1c365a05a7b0ad0f101a1c215b4c606cdda8e0cd0631e1e6566a3457cf9b2eb8ccfe9cc1918e65b703d3f7cd241e6bbc5ebedd8f50ae206f1f82a1e41ff5c139455a0ddb0d368f52a47602"]}}, diff --git a/txscript/data/taproot-ref/78bb53d71409ce127d2a0ea2bb3fe8ab857c3db0 b/txscript/data/taproot-ref/78bb53d71409ce127d2a0ea2bb3fe8ab857c3db0 new file mode 100644 index 0000000000..283512de6b --- /dev/null +++ b/txscript/data/taproot-ref/78bb53d71409ce127d2a0ea2bb3fe8ab857c3db0 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127042010000002bb691cabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb3010000006a9750e360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707e010000007fb4f7fd04ef69900000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb3b44031", "prevouts": ["86751200000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc", "695c6d00000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "bbd7120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090273831a69d6f99c9e8b1965d77307084ef95fe23f8d4d8156e40e61f335957222af8040d693d19286ee11869b6d980cfadb50f278abcdd240d6a1dee48bb6e365f30dc45f61d5a8ea5f2225b266f79fa03ce639434bf2b7330e1d0cae71698c620ae5c1ee9c793dd8dd9a0f96adec0cf6f1716f4932fc7d535d27563ccc8c86709514fb8a3cf7d44fcae9c933134274d8f38889274b1372e468a7dd5b026591bf30764dfca47b04b587b5a257ec7c1f593344828c48332d95b6021ad6fce2944c4604a90d8890a921ca4b0641a9606db5022eb4fd2b73edccf3607aee01d10cbd0aad130f86860f45c075a84bba27eee6e85f585a8dceddff56debcaf93681b8397db0b8b9b16ec55d7407d7b05b9ae3bf6d13dabbb3dd2b1c73a1e3a9fc2434c305700cb2dcda6ccd2d8084740dc7e88b7ffabf0cb412adf7e9935da0ba6671e33ece30bb8361eba6b65519511cef1365ca8aa70a3f21a6b6500a931327919af0a5f47e8ca84b516b56bc8950174ffe70d320c59c64c6eb0968bdd56b1243250277b00e22e443a8962f54900a91f8041115156416ac0a72fb8c8f748e14042e57b05aef234204d7b829a7d28777deba1ae74dcee6f97235807653e5081dac6149d7be33b6e49def0ff8df238629632d5abf89a23b114284cdff13c7d5d57a77d7d53f2c8f59b75c9e37b06d94b1483ff70bb2461b1b3f03a4e9bd954ead6b300fdc09e2ca6a0f268f975cc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360082200294bdc578fc5250803dfab01bb18c9abef135300b000405e6b83754c366d64d66e5a8ef59726e977ff218232e5171732e5d132f479dce590bd8ea056135478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}, "failure": {"scriptSig": "", "witness": ["4d0902581e99f97f54669cc06c56921886c717256e17b36781163fa3f3ee36124505af852cabebd2ee1c05fc06f0c8d604d6fdb89c5e54c632a00bb96dcd5fe231b3abc0050c1e37150c3124182f9405bdf62d863557ecfa8329ee51f1aa0a483e8361e5b77aeaa4443487cec4c7f1e1d419815c150f800b633c859ef6ee36cc6dc0a7ea8da3aff4d2eb323527b9e30da37a30d484722c764fa073c591d19fdde1692c5d6ac204d4c3e4565110fcbd8a9928480f8f4160cb90480f4f52a3c09cd5606d2beca568663e180e4d6076bd7f1aa0414c97c0e1f9ce99fbf9f02ae7f915fe68da3fa8dc868390956de9885978a4a44ff97c2af0b02f9d498e59fcfff9ee883008d45007170a48b108970f09da08ab18b535d02c648fa7b6c6816b163c609ad8a05116b74e7ac04a72ce6cbe35404f90f91c84c7fd754c82fa0f19b2353dbab60806e943242017e7998c0a8b64287b4f909283dd5d5c5b70713c09065865931f8603c09d2f5ed193bcb6be6897a7b1a3462ceba781e7bdf0a7ff3fb56c9ee933dfde0c014c4f1b10799e25a00242f06c27dc4e5ce6bc99bb70afa35522cbf36d7c9202909e4ba63ceda1e3a671bfac269d719896e91bc5707a72ae9520fdf3362c4e0c9e01f9f41a18913096620aee35b7a9c2380044b6e13ea9cfc8d722b2349ab33f272ef6f15526396fcb5c1a8fa9fc527c301018b24d935b9cd9cc2fa733370c9a9712513041587561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936421987bd13df4c70e6bf953d88dd086caae9ed404be58b48bef1d4141595753e11c8e78922f12cf5b391747592eaf9e84d545161f4f09ddc8c51091bc04ba49d4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}}, diff --git a/txscript/data/taproot-ref/78f579fb1bbed4948a321bcad1a70116b995076e b/txscript/data/taproot-ref/78f579fb1bbed4948a321bcad1a70116b995076e new file mode 100644 index 0000000000..b940880d76 --- /dev/null +++ b/txscript/data/taproot-ref/78f579fb1bbed4948a321bcad1a70116b995076e @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf610000000058cecab6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c12020000005cf0669103c7c9af000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e736847739", "prevouts": ["b31f680000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "09424900000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902968ce8fa391872c7c8f598dbc24515a2e1ed3a9223392f7dd5d21cc8694cb6dbbcf16537d34fd537904562f1304b6b6dfa3bc2c76930c5ac13c0120088b526214161fb6edf3d22690e1490528f5f291cbc1fb9299ce923a65e4c10dbfcc498d242361700ad444b86097c1dc0c1e7b14160d977ba5df782de32e0128145408c6f8507486013f59b8bccaf02b65d6fe4ecd13fd250ffa6c53a7c730ad3e8f685892d7a7581b23db6a11263ac0ff978ab7d7aee07f2b6b3de2155164b507e962c3d8a4f83b1112eb706139607a880324b7e98f57c79e69d52a14ad3fc121c74eb4704aa1f52d919e987d256cfae0389ba66aaff2bbc1e68f9693f689b40149cc01a74f20b433316062f43763850bfef8e1f6d5b1bd9ecee1f15a8fc1430216aa0e95c546f38afdaec91b97ac033d03502666a9721a20eebe063eb9abaadba33ea63c041668d2b82cf50d29785484b88cc043e929c614f6876384963f989167b6260b61fe596964a1e2338c10d658b885980f7e46dc9ddb72c288cc41573e199691c637b2320dc57eaec9e642f7a2abe37f10ecf96ece71017c6f30131544209d34a06086c91973bf72642f12409889ab4633434abca8fca74c0424e9d13fb516bcf9c662d572752b08ddaa2208df31e200e830f7d98eb378127f1643f3168edb7b038c9410bab5f8417b5f1586093f6987027536a7f189a74c34ba2118e1ac1ac2be847c87dba2833491f7562", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c1b5bd5af873b3cf6e5a90ed7dfa03da09ad4c4f61aedb4357c87f13244d0d44ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2a28c39ce330a19a0d6c22ddc640bc3609271e6194de475fecd1ad84a88d361935a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}, "failure": {"scriptSig": "", "witness": ["4d090297fe5071ffba2c2a12b64809619052831713fd9ecc38fc6e5093d9573f9ef8ef7424ecf7a39c7b8ddcfc80fe0efc9444064af0f0255fdfd318e3e893576b57c61b92e02d4bbeffc039babe9a7c0b9e4d67f7f35cc14081f35b87794151006854c0e3df36ac252ddd243a8e5175ee7779b7741e17291ee894478134bcd22f81d3fbffb9fb71eeca5c1d26ed7d66b8e089d44748274d94626f73478f40ca5761178772a0dba3769df491488fbbacd04b3811135700d60fcf444b02f6f2b79ab6a4f36f1b7348ab022fc8d463818d0d68e672e6c93d7ff1b6557763169065f05351e8273fe78872b85d8316a04460789d3e7963a69a82d3817496e9993d4629c2c2ade56a343b904f4e2ab8b326ec729aa46aeca259bbc31f60702676cacc799f32c7dda8bcf63b76a957924a590e7427fb021f750e88451589bcaf8e5a102a13601492c55f6eeb426976d6e32f682b85aadcb5f5f197df5be2f484aeb113fbeed29f0362f1bedece52fffc6235b6bede7d499e9a6b0d73469cf4d41eaa491e2c4e20a270446b18df776e767cf546ad2369e39bf80f808bfaefb4f68528f09e27b7a6fbc6211c01cc2748b55497c8cd9f1f94430a327c9f2a83cec9a758b455eb95a4ed12e2bd8b6bcf1f8360f35635ea8d326fd9878f13102f4bd6910ffc5302ab1f7dcdf3d88f7461eaedab4580bfb20b8a0ee31d6f26d28c68f6f2b770e10b5487c5e0f9af9c34c7037561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d511ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004522ebb88c16ebf61dfdf766657f947c6b679bf36be3a1118c2e7b2b24c8fd5c2a5a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}}, diff --git a/txscript/data/taproot-ref/7929ee70089306f9173670db39ef247d71e6d01c b/txscript/data/taproot-ref/7929ee70089306f9173670db39ef247d71e6d01c new file mode 100644 index 0000000000..75d007a18f --- /dev/null +++ b/txscript/data/taproot-ref/7929ee70089306f9173670db39ef247d71e6d01c @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705e000000007f3b89fe60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127009020000009be7daae0426b41e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7968bbbee5c", "prevouts": ["67bf12000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "58640e00000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d468", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a89721c820f4bdb361f8db64c173640a0ae9a66952c98750353100cbbdfa52ee05ff666526b724612289f11d9af684c97588c9b58f885be5f0bca0261c5a78c938b5973806e5396d9f6a2ad240022103fc2376d5af9a7129252a47c1a6405aad5a470b8497850c3a230fee464eb343180400453804118582df887251250b2f1"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93632e5acefd4c8c7967aec45b85cb0451f2bc6c0507eb8db9d83e69d481800454c36ccddef3149683af65c31c85a3c06583d8e56fa5e9b8809ad6476a55251e65fad1faed220136b938a4936a71b98f5f9e86de449242d6a82efdf7a3adba2ae62745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}}, diff --git a/txscript/data/taproot-ref/79348dfc973141bd7bee5f470ac28ffd56e6591c b/txscript/data/taproot-ref/79348dfc973141bd7bee5f470ac28ffd56e6591c new file mode 100644 index 0000000000..1c3063a819 --- /dev/null +++ b/txscript/data/taproot-ref/79348dfc973141bd7bee5f470ac28ffd56e6591c @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d4010000004448e7b2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7e0100000089d641a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a0000000083a09fad0354caca000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acfa030000", "prevouts": ["5e70100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8e686e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d1414e00000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "e07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fadc06adab560b35cb72027d4fb118b7ccde081e5b76834bff6a0280f6d09fe7dea410273431f29264d27122ed0946ba884bbeaa1cf1ddeb7776ccdcb7bb2f1db0"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652e908c96e49e4bdd4a9a5cd975173f05101b0d874a2afa662ca1474523c4400dc06adab560b35cb72027d4fb118b7ccde081e5b76834bff6a0280f6d09fe7dea410273431f29264d27122ed0946ba884bbeaa1cf1ddeb7776ccdcb7bb2f1db0"]}}, diff --git a/txscript/data/taproot-ref/794d2929ccd4a9f38151fa274b7bba0a898aa30c b/txscript/data/taproot-ref/794d2929ccd4a9f38151fa274b7bba0a898aa30c new file mode 100644 index 0000000000..1159c4af5f --- /dev/null +++ b/txscript/data/taproot-ref/794d2929ccd4a9f38151fa274b7bba0a898aa30c @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf86010000000341de5d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46b010000006e8ce12b02cd14ac0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac61030000", "prevouts": ["0f05780000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "26f63600000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c36ac07773bbf46c88fee963ca0e4e4acd235bc6e1c8e4009a2ad8ce5db6e1e1e8615c203dc23cb029e7db21a2c25ffa1e58a217fce4f910f96298df6e880ff594fdda965251e4b25324fb25d524f5afff8c7c52a3da7c11a63e869099762eda71455bb45119ec6780a0bd8830f6e5001315edc9a69a5b17e492d09cb408a943a1375e317b16913793017cab657fa068bd0c62abc4c87f853f6b530048a7940352cf090a054588d89de8f408e33fcdaf02e97783d5331ff41f2699ee40d724c1509b0829671152674c6934eb690ca8f6ada1b111d9fd4b6b043a4978f5d9fddf443e1cc08a00649ea2341ad3a3d2220d6b91e63f28567fad751d788441ad53c7c41db5335a4b6a7a5b497631f1734f57f8c3477b215ea2788e234d9e785147df5b043d75b387ea6d337a75c2614816831b3344be2f0d6f35d7b6cbb950fc0e713d4c7d90180fbb3b3f81515bcc6c302e5b45494a81f0928942274dacb4277e5d99ad80699999551b86611f63047eb490dfa50b0b6d3cd2185920fa7c29586b65605164bf2b3743a9770fc819738f427cafe01266b55eba21d8b7e17229559861b4c2ed27772ab8cbad46f12f89eb216d4c536fa28364964cb93a729de392ae1599300eb61c090fb0cf80958ac7c6def73a078f26dfe5db4a4b46433223080e657d3406d5ea39fa444c7321536ae4fe24abb458102fab31f5bc57cb964c69fb41625ef10fc7a997aadc75f8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900457103c9e8ba836cb8a4e14cf2cfa4f8a9b341b4f4aa6fb02102628b5e7003f327891e44dcd1430a53a9228b1d4df01e5c5d5af3846f876ba8dd78ee7e669e7153a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}, "failure": {"scriptSig": "", "witness": ["4d0902abc134d4a183d563244ab47c2e6a1f7681b5552650c4046f01d596f54eabda0a73914b5ac396eda2cbf3f7e4b7ab2e96f729e23bc88096b9a99b041b586ca9382dc1f96212aed6049d2c0d3ea8a550fc7bc7f59efca0d793894b829f1a71e2f57f7f2d0678b0c08ce24ea177c561bd4f797ca17aad2d41e0db9fc5e37f4d81e4ddf045d5820d91ea58cf83d716427a6642407d61f030f35982be61d5dfdd1c5aeeb50bc2315366fa90ffe1a3a757cec691073fbadf5808ebdeceedf64a19c0c08d7c1160867726d9c396d2dc5924bc87d54c9ad2c2b327dfc3610b843bda05f962d1f71f831aa11b2f2c07d9656765af23953eacc4a54055c17c4c4efa613ae4d3837365515535f81e29310e8fc401a34920016e92d64211449eedb39e3bccc8f34938159285f7efeae16f7e17c0d0b947f8f0af51f36968cce2dcf10e6a9ff995df8ff20e39bba09cf69bbe4dcd3e55a9e6cad74f676601163992779e2069f591355edaf5f5efad07d75c7d6ef094cbdb713500d6d213941919d92a107fb4f55bc9ec469dbaad2c96371adb1c5d1b80f68598526b996c1fe60cfda7787fff600e27d11d97db37965a5d5d765a60c31ef25ba58f7e63ea812d85de17b25f117568c7da369c1e7a4ea1d7e2b5f66607598ca1787a1a95249ff7a148f2bdb3d475e37fb968d36d4f0917f5b94f5fef2bffb99a8688f72036b2b543229cbbd0bbaf986ca7c768a1e9da4a7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5129caa746058fefa69912501c9b6f792a531f2cb30638f1f343d3625f0a93b066f288028cdab461d62f9273620b97315e6e9af9458f777a616c1bade2d3f6a89e"]}}, diff --git a/txscript/data/taproot-ref/79693f140367ae963c396d7952f2b07e3e603755 b/txscript/data/taproot-ref/79693f140367ae963c396d7952f2b07e3e603755 new file mode 100644 index 0000000000..6f4aa336d4 --- /dev/null +++ b/txscript/data/taproot-ref/79693f140367ae963c396d7952f2b07e3e603755 @@ -0,0 +1 @@ +{"tx": "3995509b02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c05020000006f476edcbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8f000000009096b4e5019114a90000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000", "prevouts": ["0e825f000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "336a680000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082784ae775de15fa9e8fc81d7676ee4bb7b8b5e55729a9bd981757787c0c2477c76fd75cc9ac1e6f185878d252db6c7bbd874f5ae03fa9961d4f4a0208503b0750f17ad4bbf375bb62f626ec8048d4347cc1eef977780228a6d2fc47294088d561"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ee8e66f30a7a87e143e326dc67fe32abe85ab342f564e4c116c01cede66b1fe20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e192555fb599a2fbb7b206b08358b85e40a527ad21aa064f750df81600ff72cf4ef17ad4bbf375bb62f626ec8048d4347cc1eef977780228a6d2fc47294088d561"]}}, diff --git a/txscript/data/taproot-ref/7988534604fb11aa559428f200cd7631d266dcdc b/txscript/data/taproot-ref/7988534604fb11aa559428f200cd7631d266dcdc new file mode 100644 index 0000000000..2961c0e170 --- /dev/null +++ b/txscript/data/taproot-ref/7988534604fb11aa559428f200cd7631d266dcdc @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff901000000939dafac8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47c01000000d2c3b2ffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2801000000052131c304cb62b800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c6010000", "prevouts": ["1f9b64000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7", "1e9b35000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "49a720000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "267d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89ed12ee2db6918b2bff03768a1c947d0f4fb00a38b9989b1add1650628df27e9913d4be53f363cb6dc14d29c1d7e4819045cdc001ac228b3b700074691e2599d91e402d116972020cc4db8f7e1431e7a7416668817d422dd270400f40dd8d238"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366c2c3e102c733a0311253a9baff0bf90ae1d58c1cd06313c904a26512d8ace0ad3613095503852f968cf254efcb9d0b7a7155094671c0665bdc16a67bf9a23af91e402d116972020cc4db8f7e1431e7a7416668817d422dd270400f40dd8d238"]}}, diff --git a/txscript/data/taproot-ref/7993ab06fc93824943100f468b83a388dc8396fc b/txscript/data/taproot-ref/7993ab06fc93824943100f468b83a388dc8396fc new file mode 100644 index 0000000000..0f2b1b2502 --- /dev/null +++ b/txscript/data/taproot-ref/7993ab06fc93824943100f468b83a388dc8396fc @@ -0,0 +1 @@ +{"tx": "71a4ed46028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44b01000000ec698ea18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47501000000cce1158c0485037000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac31010000", "prevouts": ["8ce9360000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5f533b00000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_63", "final": true, "success": {"scriptSig": "", "witness": ["0bf62e3fcb8cd9b3b2fb1feff203fb325907918df0fdd8f99feaa6108f15940b66eac66989e3d8bfc953f821791b0b5ddeaccd955cc2692db8b0d8dc0eb65838"]}, "failure": {"scriptSig": "", "witness": ["d31037a44199af88171941e79afaac6887d8a663590b9ff482039e14b6ede2265ad2f7de51506a10e124a0336396fc476eee00ebc8b99d96802c538dd19f7e6a63"]}}, diff --git a/txscript/data/taproot-ref/79a78205700940deac5a3af06b37f7a837ba5d0c b/txscript/data/taproot-ref/79a78205700940deac5a3af06b37f7a837ba5d0c new file mode 100644 index 0000000000..805619ac25 --- /dev/null +++ b/txscript/data/taproot-ref/79a78205700940deac5a3af06b37f7a837ba5d0c @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0b00000000841f9a698bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d301000000542e177d01f3141c0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce455ed3d", "prevouts": ["95cc5a000000000022512089cd9bcf9fe9207377d5b979d86bcf752d8d9dc577da80e024c55776b1ac583b", "47af310000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "227d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c13c6885c53a07614131d749dc0b9c4fac4cbf357599a76450ee1c7b87f78943dc4c18ce03381be5d83370dbaee0482c0440aa7aa94902a00244e0237bd29478fcb15428af69077ee4e47ddc8bd2adcf7d97a29fc56c75a24a213a103a1e3586"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e86a45def9951625cf02c88598f8616d12bef3cc01ed824d79a70edf31b7fbe0e1a4a9bce64ad1fc5af22ad5621933415c83e23766bbab20239912b691ace9dee2"]}}, diff --git a/txscript/data/taproot-ref/79dcbe312ec0cae55271acea3fbcad77eb51a258 b/txscript/data/taproot-ref/79dcbe312ec0cae55271acea3fbcad77eb51a258 new file mode 100644 index 0000000000..41f2478fe7 --- /dev/null +++ b/txscript/data/taproot-ref/79dcbe312ec0cae55271acea3fbcad77eb51a258 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c910000000057056869dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c47010000003cf378558bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44d010000006ea78b090428b4f3000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac70000000", "prevouts": ["9f7a60000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "8619550000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "478f400000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d54c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365edec6927239e37481c871e98a308ae148761fbd82cda43b44eea2241bece5c01ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045135ed0e678ad02d8eb601751aa1b9acf14c9c27e67d62b009394546cc2bb02284b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369dd67732c9a7b3d13cebfee85233046128c54acdc3b639bf5b0c42b2ec55215b4c2f2200f850d6a1609ea6f282082fe51ae8a55145cebb4c521120909a7edcb74b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}}, diff --git a/txscript/data/taproot-ref/79ed5f67b23082b621f1d3d307cbb3833df70b36 b/txscript/data/taproot-ref/79ed5f67b23082b621f1d3d307cbb3833df70b36 new file mode 100644 index 0000000000..25f0dee513 --- /dev/null +++ b/txscript/data/taproot-ref/79ed5f67b23082b621f1d3d307cbb3833df70b36 @@ -0,0 +1 @@ +{"tx": "9808329802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd90000000006966cb4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0b020000009599b4af03d11683000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d2000000", "prevouts": ["6e94630000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d835220000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "837d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e6193e4630789cbfbdcb7d6fc995ac4f032c6d5611c1f6b733abe8356e59ddce06294a5d2648496e5016f850eddfdf01467fe69221e8567db6ec356a8117d8a748163db171dbfcbf374971659a5a65d0378eae0ee15db360ca8cf80a8c2e13046"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d4241eba4335af55cb703ef1b6547d641330ec95ac5c4cf0d3e8e3ea3eadc07c09d3f278379d69ec93b9031f683f10c8ab57e2d08c050c4811cb81bd332eb9e3ff15e37d03bf407745d47da370f693bba1bd1439d95d9059575aa23ebc3ce6e3"]}}, diff --git a/txscript/data/taproot-ref/79ee5f66d93ee0d29f8b42ccf65fc760525867d6 b/txscript/data/taproot-ref/79ee5f66d93ee0d29f8b42ccf65fc760525867d6 new file mode 100644 index 0000000000..7d5ba81f35 --- /dev/null +++ b/txscript/data/taproot-ref/79ee5f66d93ee0d29f8b42ccf65fc760525867d6 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706d000000001f9bde91bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf790100000000c42cfc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48601000000dc5b1c9a012caa0c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc786000000", "prevouts": ["2d69100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0c5769000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "3b5e3e00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["8a4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a508197ed6624452fb9289507f9cfe4408c1b7912a8bf4cd7fce31e05c3b62298751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d56e427c91532996b84ed2c37f8a26be8637de11530a49bfc255181ba6103e3464915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93655f123e6810ac5f5b7b4df9ac6326a0dbfbe957e974eedae7b2682ba3a8c02e5572db529171a47fc33c2e4ee960be7fb9400c27bdb6fae7dcdae272f7c7daab09b045cee6f1e54629d213b8dbfcd9de8aba2dd7f34fe21c75d81b8576e463c6b"]}}, diff --git a/txscript/data/taproot-ref/7a043102c33d83ed36e9879386a6e618668535d9 b/txscript/data/taproot-ref/7a043102c33d83ed36e9879386a6e618668535d9 new file mode 100644 index 0000000000..331c0bb3bf --- /dev/null +++ b/txscript/data/taproot-ref/7a043102c33d83ed36e9879386a6e618668535d9 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb001000000f97f388a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702801000000697c5d8a043f238c00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87fe000000", "prevouts": ["cce97e0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "fc540f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f8", "final": true, "success": {"scriptSig": "", "witness": ["05e31890e2496566adf98bd934dd029381da0fc49f134fcdb3893d4a3c0c03095ad365334618f693e153c89ec07a0a13f93331a6f18873bd6f5c5d588b8e319e81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["33dad7d4828eb94cd241bcfd765c1c0f883f2aca3617c31c021d1b764e328c5baec790392ff21e9d2fb5cbc3f82810cf633a4f8689edd9643e8db70549c5125af8", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/7a111af866866f2de4ef478fd546fb1c0fc25d0a b/txscript/data/taproot-ref/7a111af866866f2de4ef478fd546fb1c0fc25d0a new file mode 100644 index 0000000000..f5c2728280 --- /dev/null +++ b/txscript/data/taproot-ref/7a111af866866f2de4ef478fd546fb1c0fc25d0a @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0a000000000dcc735dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaa0100000058f69bca01f683110000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7af77dd40", "prevouts": ["61a26c0000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e", "cdb27100000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["304402201c9d0f0e15e942865c85a4a840ed0881e1d024f84c3eb034100f8b0c396922fe02201a02f3bf3fb0c6c33081c6936c2e25f47c9446461abd965f8639665e5f44a85402", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["304402203cbe8db24b2fdae8be9f184f148d12841ea66b8a4ff188602cb2fa179195940402205114fea29a22a6f40edace5f804d1ded0b7f0f10bfb2123cbb74b93a5862c28a02", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/7a1820d857c8a49a2db73ca33ae771ff2942dccf b/txscript/data/taproot-ref/7a1820d857c8a49a2db73ca33ae771ff2942dccf new file mode 100644 index 0000000000..d50874b73f --- /dev/null +++ b/txscript/data/taproot-ref/7a1820d857c8a49a2db73ca33ae771ff2942dccf @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5000000000b2eddc38bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9b000000005a19fb67020823d500000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac37a54057", "prevouts": ["fe80540000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1a6f820000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["fe4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93679936465fe465f0d401827e55c2317c08ad696e5227da5899b92494a3d57c5ba365bb68c3eae5e6cd9b20289e581f52d4e8c0cb4ba58bcd8be9e67bc80fb920a1e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365bc17b4d65ff6300e0318663c163f0b05a2443748654960ec7f2fad9f3ccdb63dcc932fa7eab9febb69f8eb1775db86ae183d64bb0b86855f9228e743b2ec6db917e8250b412828d56f092e1d9ceabdbedccb5671620a7e05a1f5a122fcf72f11e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}}, diff --git a/txscript/data/taproot-ref/7a490995df2d5f17d023de70297a3ccd20b7e9f0 b/txscript/data/taproot-ref/7a490995df2d5f17d023de70297a3ccd20b7e9f0 new file mode 100644 index 0000000000..afac7d4a20 --- /dev/null +++ b/txscript/data/taproot-ref/7a490995df2d5f17d023de70297a3ccd20b7e9f0 @@ -0,0 +1 @@ +{"tx": "50c82e5902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc301000000530c23e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9f000000006367e0c201cce1b500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac97445a20", "prevouts": ["24234d0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "0cba7d0000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "947d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa7085091e7b587d9e3d903161356c0634077d7e43e5aac1c0c25d5c3c805eac670235be472b05f11e998cd7dc8896eb16b23bac01933cdabddca8bd45937e3454"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936417d2d865202d20eebfd4aacf46381b0ece3fddc39ce14b62446cc40f8d1090e3ee723c85209fe64e13625f9e221aa1a5a0132ad156eaddb44490f9df3bced660235be472b05f11e998cd7dc8896eb16b23bac01933cdabddca8bd45937e3454"]}}, diff --git a/txscript/data/taproot-ref/7a4a6b8236fc89f7d9e11728eab5f34c87b831ca b/txscript/data/taproot-ref/7a4a6b8236fc89f7d9e11728eab5f34c87b831ca new file mode 100644 index 0000000000..9a4542c1e2 --- /dev/null +++ b/txscript/data/taproot-ref/7a4a6b8236fc89f7d9e11728eab5f34c87b831ca @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41b01000000b82575a3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6501000000474aeda00135f745000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47876fa28731", "prevouts": ["0e6e320000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "0ef12100000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93698751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d59dac82751ef42f4155e8d0286eb609cd4bc8c8b3be93c107754fe282612bb362f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f984e6e7c95b40499dfd8f685cb7972c8a61cdc9574ed2e0983d5b6eeeffb3572402ee5f7d01023de35bf8c020790747879409f1771ca1b4a9af174b095ec7ee5aa467dfe2257bccb94fb5bf6723e840de90a3890266560a9e3d72c84089f55cf37d2bf9ac9d65f4f9542d60f6497573c04b4d7313f44a5c611386102890a1c"]}}, diff --git a/txscript/data/taproot-ref/7a59b37e047189062f0abaf0d629290ecfb35f75 b/txscript/data/taproot-ref/7a59b37e047189062f0abaf0d629290ecfb35f75 new file mode 100644 index 0000000000..9bf6408aa5 --- /dev/null +++ b/txscript/data/taproot-ref/7a59b37e047189062f0abaf0d629290ecfb35f75 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4620100000077ad6e89bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2002000000f77fe99c020797ad00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac10010000", "prevouts": ["0b6c38000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a", "12fb7700000000001657142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "247d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fabda2774425301130c379b9a863bac2b926fc4ec0dd6af03d15dab43b60e3a64c440784f6f41cc1ae323b623cf5dcb000da45020704fab66b6b5f2ff7d67a93a3"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b9b18a780ce64b599d9d3042fe9b5b93046b018637f9f8cec8ef00735e099ba32f1db23017f271ba09e9de40cbf6bd4b292cb969b1168724d03b4425efd5cf153506420e788c3ffd3d8d88ddb9154e82106737a8dd2b5d0940daf68f275cd0d7"]}}, diff --git a/txscript/data/taproot-ref/7a69a216cc5a6c99a19546872d16973b864b8ec6 b/txscript/data/taproot-ref/7a69a216cc5a6c99a19546872d16973b864b8ec6 new file mode 100644 index 0000000000..c57f802603 --- /dev/null +++ b/txscript/data/taproot-ref/7a69a216cc5a6c99a19546872d16973b864b8ec6 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce501000000881946a160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270870000000050efa3a7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb100000000ea994684043ae79000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487046fe641", "prevouts": ["b8fc5900000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5", "d298100000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "290d290000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "3d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa671c5f6e3fdb2cca9ff2c8978272a7c72309b5e793932f9bb10a0961dd619da6701c89cbc41056f58ce11974b5756eca381e306e17d72fcef5e58c3aca02cf1415eb41ce20b61903eca7e2f7903a7c5f76d50ccbb22a22a302188dbad2e46b28"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367a4323bca4261be341492d2c8aaea5b9c8cd338f75ff3ca656464aeff6e26a7ada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eef9a48fcabec25982850a496e19df71982d596f167265e15d1ec282fb30074b91cb891527dccd7fe22077390053ac1c45ab6e7110116df1a30c9559411f432f5"]}}, diff --git a/txscript/data/taproot-ref/7a6afdaaff4560a33eba5ebd9df662b110b72dc2 b/txscript/data/taproot-ref/7a6afdaaff4560a33eba5ebd9df662b110b72dc2 new file mode 100644 index 0000000000..df164b4594 --- /dev/null +++ b/txscript/data/taproot-ref/7a6afdaaff4560a33eba5ebd9df662b110b72dc2 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42201000000a7edade360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702e00000000e8af8ed604cd3f4100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388aca7030000", "prevouts": ["d6d3320000000000225120bb5a47f5af791bd0da95f040450c31e81733ad36d8a4b487e3e6f1ab189dc604", "3056100000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dca1b743bdc65e78d5c2b60771c4ad4566262fe3c3305a8b61aa9fbf6a15bbf0"]}, "failure": {"scriptSig": "", "witness": ["6a5f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/7a87119e2369843226572e9e9603e14022ad565d b/txscript/data/taproot-ref/7a87119e2369843226572e9e9603e14022ad565d new file mode 100644 index 0000000000..6b0901b6ae --- /dev/null +++ b/txscript/data/taproot-ref/7a87119e2369843226572e9e9603e14022ad565d @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bce01000000e9160568dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7d000000004acaea1b0404d97d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374873d020000", "prevouts": ["7f13270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "37b0580000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["624c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f393068994750671244e9a386d61bbc7bdd03428d67a6b3b3603ff438afc80a6abc42ab3738335b78a2a7135de763706b017ef32cb75bc24ca1210f74f6e5b7b3fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a90fb3f53527a925db2b4d49a3795cd34d4dcf648c4b3a4a108990f2ed12b180a28c39ce330a19a0d6c22ddc640bc3609271e6194de475fecd1ad84a88d361935a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}}, diff --git a/txscript/data/taproot-ref/7aa3606e89e98945870fd6072bc248da2ac00194 b/txscript/data/taproot-ref/7aa3606e89e98945870fd6072bc248da2ac00194 new file mode 100644 index 0000000000..dc3e167371 --- /dev/null +++ b/txscript/data/taproot-ref/7aa3606e89e98945870fd6072bc248da2ac00194 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce90000000060bcc3aadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8b01000000049096870147a1430000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d32e1233", "prevouts": ["141a590000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "33cf5e0000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "3d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93616f1c2cf89bd49cb1976d122ca27f5e410eace75a032574b33edbcc631c7f3564ed4022c883bcffdd4981a43d80a989f638bed5cb710560195e12f06d5f3803c1cb891527dccd7fe22077390053ac1c45ab6e7110116df1a30c9559411f432f5"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362d14cd9d1df0b21fbc10702de522193e26661e8ce0c7001bc045f1599fb03383dc8c5662064e2d9613ba0f54feafa13b4a8d810a28ca520b1cd1b9628c3c1add15eb41ce20b61903eca7e2f7903a7c5f76d50ccbb22a22a302188dbad2e46b28"]}}, diff --git a/txscript/data/taproot-ref/7ab6a9ca3af298309556e392c5a2145121ecad20 b/txscript/data/taproot-ref/7ab6a9ca3af298309556e392c5a2145121ecad20 new file mode 100644 index 0000000000..2b380f4207 --- /dev/null +++ b/txscript/data/taproot-ref/7ab6a9ca3af298309556e392c5a2145121ecad20 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ceb00000000ba7843f08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b5000000008141d6b70267698d000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966df5ad4e", "prevouts": ["fc6750000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838", "81bd3e00000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "b47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367e7b268f617d00298f513ed9d959e4853656836f4da5bc24b22bcfc49034b4c690a6d927376acace3683bbc4ff9f5d15a4c9ee2ad4271a1fb38c29668c3ce61898ae4fb28ba039f9030001532aa52d54afebb8b1d186c7283d6707334cdf0cf3"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8f8e322f728f7f2bda8f14cbbb71f9286e41438f49abc55856c1a694b654384417e736a60655dc533a38837433a3a305c9a2d5b0314030c91796018120c3e9a44"]}}, diff --git a/txscript/data/taproot-ref/7ac66a26b371216e55464bd620f00f9b3cabf539 b/txscript/data/taproot-ref/7ac66a26b371216e55464bd620f00f9b3cabf539 new file mode 100644 index 0000000000..41971f6ee7 --- /dev/null +++ b/txscript/data/taproot-ref/7ac66a26b371216e55464bd620f00f9b3cabf539 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ce010000007fec828bdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b09000000006f3caee503bdb35a00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac0f030000", "prevouts": ["950536000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe", "2df02600000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["86", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366c9ccce34c09bc03bb8aaff06a11df09f3692c1f74f2178409984d1ab3c04f3715c685a6e20a464c0638846c4feb0cc1ab19a0a1d3cef03660e119c827d202a5d33ab5c29645e0220ea4ffd8cb7e67404885cb8b0cf94872336c7b06d59c3124"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b05e9ad3756e137278ae6e6e7c10c62cfba95395c884b707ca96162ed87516a80d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3b4167115de6998fecfb714975bc270adc7a6998f06c7ef8576e15f157ca8963750636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}}, diff --git a/txscript/data/taproot-ref/7adcfb6ec993d4f55872e19410191727163f6958 b/txscript/data/taproot-ref/7adcfb6ec993d4f55872e19410191727163f6958 new file mode 100644 index 0000000000..05a0244572 --- /dev/null +++ b/txscript/data/taproot-ref/7adcfb6ec993d4f55872e19410191727163f6958 @@ -0,0 +1 @@ +{"tx": "b50f094902bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3f00000000c673fec7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb80000000046642ba302baa7c5000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acba7f4b39", "prevouts": ["15be6f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b7ea580000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d868", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362564fd3423e77940cb8b994060b12804efb6a1c8e075c570e076404309a24192908709641cf32dc4788f906f7e3621a0528df09509ddf1e9982e4479aa4b5d9a6e41ed285c226ab336f92f35d989a379104ed593ec3ff802714cc8e85daf0b3be26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a3a181e1fb4c9a4cc49dfa16bddea418e5b2b086e1a4ccfab14939545a03d5c99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb406f18ba19de64c771db55f5af06ee3412ffaea1fa921290752d742eff6a1e67f7007ac6d9f1365651a4d55e6df0dcb109d268cc6c386b355a4997173bc95c886"]}}, diff --git a/txscript/data/taproot-ref/7ae9dff22041f4c1fe093655030d83341a775789 b/txscript/data/taproot-ref/7ae9dff22041f4c1fe093655030d83341a775789 new file mode 100644 index 0000000000..bf9225f029 --- /dev/null +++ b/txscript/data/taproot-ref/7ae9dff22041f4c1fe093655030d83341a775789 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfef000000005d9bce2a02f6057300000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac32cbb850", "prevouts": ["95e1740000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "137d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cc2bf80b2db027afc6ff7c1eb2245c9e3cd90dfd08684ab7b931baf85a586a71155f23cd39ff67d8b5a6775be7b28a3d1b06bcb926a8f69937c20b78b14c2d485d0346f0de7f7080f7758bd86c81c482f81ad0c7703311f4b65ab9d7b77c9f00"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e048ad2721d56e7698732cbf102ae8e792035911a0ba8e4825f0ff9fa3590c070ac5ef61da5659d8214c667aee1dbe4febf87286965cb6fe696f5c1a17be3da5155f23cd39ff67d8b5a6775be7b28a3d1b06bcb926a8f69937c20b78b14c2d485d0346f0de7f7080f7758bd86c81c482f81ad0c7703311f4b65ab9d7b77c9f00"]}}, diff --git a/txscript/data/taproot-ref/7b1eb9664a41baa7f5e742f91eba9581bd509407 b/txscript/data/taproot-ref/7b1eb9664a41baa7f5e742f91eba9581bd509407 new file mode 100644 index 0000000000..47809a8bf3 --- /dev/null +++ b/txscript/data/taproot-ref/7b1eb9664a41baa7f5e742f91eba9581bd509407 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdc0100000013b74e82dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3900000000fe9609b5020f333b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acd4a59f23", "prevouts": ["e1ae1e0000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f", "18ef1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a0", "final": true, "success": {"scriptSig": "", "witness": ["e23b393e9310418c33887f2e5655dcee6a8f5513e26de88ec8d0f1f46471ae2781421200609ba458fa40e41055eb8b7285d8c9465d511e0a3d537e272028a38682"]}, "failure": {"scriptSig": "", "witness": ["7d7da58583662a894d67136d1b64aeeff2e3ba3e8d136f57b0fba2e14bc974220278358ac13a9779cb9b8c866e4b1fee40a0b30fe6a7b4abab9b513c01d5d8bda0"]}}, diff --git a/txscript/data/taproot-ref/7b242c6392ed925c411f5a03c01a5b224498873d b/txscript/data/taproot-ref/7b242c6392ed925c411f5a03c01a5b224498873d new file mode 100644 index 0000000000..e514df880a --- /dev/null +++ b/txscript/data/taproot-ref/7b242c6392ed925c411f5a03c01a5b224498873d @@ -0,0 +1 @@ +{"tx": "4f48ddde0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704f00000000ab8735e8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1702000000c289f8a9017946670000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7cf020000", "prevouts": ["0633100000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17", "bd2f790000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "d67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4fd5de156dec52418d0df8cecdd3495838e4d1d1b80598a34f381ec5024e2c9bd0211bc754da142cb3564162304068e34e33074851a6380a45a2a3191e3f102"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93671224880017bea54f91316a6ee82c754324ae6c5852e98edb5316f0ad1dd13a7eebb44c2a26e7d04d06be9441726cfca165ed247b802be55a42fd4c1a57db75ef0c0cd32dca2782b49e872f77a6f41a631e1b6bec2669bf2370bfbcbf3d4a769630d95c26588949f1b3ae4e4e429080b434b995fa18047406852c727cd9e6feb"]}}, diff --git a/txscript/data/taproot-ref/7b302c63a0c095634d5b99d885e31d50d348915f b/txscript/data/taproot-ref/7b302c63a0c095634d5b99d885e31d50d348915f new file mode 100644 index 0000000000..a5d4185ef3 --- /dev/null +++ b/txscript/data/taproot-ref/7b302c63a0c095634d5b99d885e31d50d348915f @@ -0,0 +1 @@ +{"tx": "861025b202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9b0100000044a148f28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a001000000788338a8029f0189000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acafa0f542", "prevouts": ["2c4f500000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e", "af973b0000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f24c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5c223b2b99456872194ca1969830bfef335ab1526807af314f38e6ee168621b20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1c56c8a32008d6f6a63b4b8ddfaeeeddf640e9afea8e86008d2331d68e9435ec7ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}, "failure": {"scriptSig": "", "witness": ["4c52f2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb427e2cee51cdefa725eb1f8255cf98d00ca42f29f054478581d82ff254acc1f11842c4c20f1fedac94edf4ee37dcf580edabb0aa4839378386ec3447d53f529f2ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}}, diff --git a/txscript/data/taproot-ref/7b385bf3549519df825d01ede2e8d9864af0d4f1 b/txscript/data/taproot-ref/7b385bf3549519df825d01ede2e8d9864af0d4f1 new file mode 100644 index 0000000000..e8ec8e1f1e --- /dev/null +++ b/txscript/data/taproot-ref/7b385bf3549519df825d01ede2e8d9864af0d4f1 @@ -0,0 +1 @@ +{"tx": "d336dfaf02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccf00000000eb3e058b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d701000000e10936e7046a80940000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48745010000", "prevouts": ["c49657000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d", "db093f0000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "7b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8e069ba5eeb0bec6bb336aeedfc480da3e66ab61ed5906063fe5b68f45dcb12952affe3792374ee751e9779d236e331236b2211c0285bb070b7e5d58aad1c033f64fb6de85916ce1333b57715a419fbbb7fd448155796c8af09a2e4a2bc14d947"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367588a9e23979d821fd29244dca8e20c36f5fbf7a2828b65ef7678089e87c8fd3565447efa486312fa493bc3efa8d0ca00e2c766484411258b08f0fec6b85156cd34322f35809060e9857f404c38bdcaf402c3d07c78e42a3b4d1eaa304dca88a"]}}, diff --git a/txscript/data/taproot-ref/7b8328e1cf64ee86aed185c42ef2d58842a86505 b/txscript/data/taproot-ref/7b8328e1cf64ee86aed185c42ef2d58842a86505 new file mode 100644 index 0000000000..d61a3d0a4f --- /dev/null +++ b/txscript/data/taproot-ref/7b8328e1cf64ee86aed185c42ef2d58842a86505 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf160200000050c0ec8560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705d000000008597bb100331928b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc94010000", "prevouts": ["f8447f00000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7", "18440f0000000000225120d1655db6fcb356decaccee2a8cc0c67c6e760726bed93f7ed1bf145bc7c6bd94"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d1137f8b15a9c4a2a780a0ae495bfb79a9a7db3f2ae43a0aea42148b525fe64"]}, "failure": {"scriptSig": "", "witness": ["6ab8616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/7b9f95b7241f7c9902e959452e13b67e26806ad6 b/txscript/data/taproot-ref/7b9f95b7241f7c9902e959452e13b67e26806ad6 new file mode 100644 index 0000000000..b7c2eb28ca --- /dev/null +++ b/txscript/data/taproot-ref/7b9f95b7241f7c9902e959452e13b67e26806ad6 @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705601000000fa8520c302573110000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df979722368987507c0427", "prevouts": ["f002120000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ca7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93602a88ba31ed3d41248d257786b5634ab0e5c1afbee5cd3bd44dcce92371e3b6ce4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8bfe61acb5630f372e1ed5eec342882068788aa3656bac92c2951e857c300141b065bfcb7199ff8296c5f7d41f3b2c6067d88c0a33f2878328c609d56cc191f12"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab5bafd7c1f93de46b79074fd81f9b2e5cf089f85eea866c1ed233ec2c502c77e3449c69d4dd26d8f08d0fe98a8e8c1c38138c07c2a650710c465fa6c38a97e3ce21dc20c2e8df5336572f81421322a354c6d32fb525b1159d1e49b1e9404bf5"]}}, diff --git a/txscript/data/taproot-ref/7ba72ec40b0c475f5d75c1845b6a75ce8fa2c003 b/txscript/data/taproot-ref/7ba72ec40b0c475f5d75c1845b6a75ce8fa2c003 new file mode 100644 index 0000000000..d71d6d0c63 --- /dev/null +++ b/txscript/data/taproot-ref/7ba72ec40b0c475f5d75c1845b6a75ce8fa2c003 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1800000000ddf5b1838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4780000000089a2312a02051d56000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acb49fde2f", "prevouts": ["49f925000000000021541f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "afa3320000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "80", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a254e7cc6b57a9a94b6584709e7056848938ff7b5d3cd788647ee9c8c010053bd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b44d35a0b3fc5d8cdca17f6fd766b3b7f076a7a891ad519d38c56688c70ff9dbd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93689697d7380f4ad31bdb00c7ff0dc66aa22f6bae188bed2870f771977d2fb8298280ecd46f67705e4464578fc0c4eafd6d20a38d5c68152a49fc5d0c6b2a7c87ed2fecf8564d6a652bf0232997fa790ca314d73b111c417284694cd1738ccb12191585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}}, diff --git a/txscript/data/taproot-ref/7bcb414301b9d095183f9b852a0c948309483542 b/txscript/data/taproot-ref/7bcb414301b9d095183f9b852a0c948309483542 new file mode 100644 index 0000000000..d177943f6b --- /dev/null +++ b/txscript/data/taproot-ref/7bcb414301b9d095183f9b852a0c948309483542 @@ -0,0 +1 @@ +{"tx": "1af00c3402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd0000000006c00f6ad60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705401000000ca7050f7032c0a5f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796a3093b4e", "prevouts": ["bd14510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "81c20f0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c5", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5115f1aeabcd45f20884fa261b27121b1c083fa5a2716bfd01069fab98e18c3b0e4b23f991898c0f7e80b32f00b838c1f1514616fab2a47083539335b67c2689fcce4d7767c8a9637a0804b073b1eb172c67de67ce152ade33f2591a85dfee2e5a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936811133f2935f27641e5de866d6b2526674271c11378ecea72e02f5c1283f85606c8f4b27179de8a3c9fbcc0ecf825a44b7564122e0508108d3381c6acb047da700a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}}, diff --git a/txscript/data/taproot-ref/7bd191b72e7ea5e8407c5a81557fb3489574834c b/txscript/data/taproot-ref/7bd191b72e7ea5e8407c5a81557fb3489574834c new file mode 100644 index 0000000000..e39a41e6e2 --- /dev/null +++ b/txscript/data/taproot-ref/7bd191b72e7ea5e8407c5a81557fb3489574834c @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be700000000d5ae6cd9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c040200000082777c9703cb766a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79656000000", "prevouts": ["4bf723000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "ef46480000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "0c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e85ada3d451ef6042e8b6b9e1a05667773e16935ec77c1049456c2d3709876bb0617d0d4fc7404dd8984f6a1705481d95654b515a34c586c99c11bfe20e9503459"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663a164d6d530eee3fa9d7e4db273a17bbca3a4f14a5c58ce7db70383c13db5d1234cf532d828cda123a8c35eaf5d21c66c96423d9004c9f2b6e0f5ba33bf4e7b5b0de380cf0ebf0fa9d17e1d1edb87a374b64935c1c67f0c5024fcc072643681"]}}, diff --git a/txscript/data/taproot-ref/7c0066094d3af7d6ae9649b1e0d8c4f65d29d5b7 b/txscript/data/taproot-ref/7c0066094d3af7d6ae9649b1e0d8c4f65d29d5b7 new file mode 100644 index 0000000000..e0aff19efc --- /dev/null +++ b/txscript/data/taproot-ref/7c0066094d3af7d6ae9649b1e0d8c4f65d29d5b7 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4b00000000f912b3eedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5001000000e0efbb9d02305ac300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e775040000", "prevouts": ["b6b17500000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "bb5450000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "4c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366bccaadcfa8d465832aab59065aa8d3e626f6f7953285a334a61d2728458c8250315d5fffb9cd0a0ee84b5f33e057fa02d78cd067c105b2c4520fb43cbb3cdd0d30287fa60720c35e6546eaa391bbb3975ba5e1722a6124c426d678e7f784bd9"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362c2c5f63cb8189e158f8fb075febdc1164769262e328fe4583383832734546d391faf9d665bb151ea32d070ad80c7b31483dfb68e75e940e326e177970210d6f819d45740b1e9d6e416a8a4978331345395bf058ef0b936b66c7755017d83c65"]}}, diff --git a/txscript/data/taproot-ref/7c3defc5ef17cddbacd31b76689e0f6d0737ac57 b/txscript/data/taproot-ref/7c3defc5ef17cddbacd31b76689e0f6d0737ac57 new file mode 100644 index 0000000000..8031a181be --- /dev/null +++ b/txscript/data/taproot-ref/7c3defc5ef17cddbacd31b76689e0f6d0737ac57 @@ -0,0 +1 @@ +{"tx": "6ce4a80902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0600000000fb9a44d08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4aa00000000cd2115bb0257a88400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc0a7ea020", "prevouts": ["59204b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7ea13b000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_85", "final": true, "success": {"scriptSig": "", "witness": ["695769ffff5be4e03469e3c5569ca7a6f29500f1e996023f01ed486bcdfbbccacbda5e33d5b1540dd7f1424141ac31b7a800cc7e914db5f01069bc91eec3e80a81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["51cce5536ab32b9a7f786d62a0e2ac4ee155062851f4919c2ad5e2683c0406f86833a10d7be40fa8f9802ed72130ab96cdd4e4bc6324373bcdfba4e868b3f90885", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/7c7017c2b46f27580791e590ff2536195830225d b/txscript/data/taproot-ref/7c7017c2b46f27580791e590ff2536195830225d new file mode 100644 index 0000000000..2f20a00128 --- /dev/null +++ b/txscript/data/taproot-ref/7c7017c2b46f27580791e590ff2536195830225d @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42001000000e00a97b08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c413010000008f316cc504fb1b70000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a640010000", "prevouts": ["14ca400000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76", "66fb310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "e97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e0edd1eeef23b4191adb89e631380cd7acdd7acf00b470d5a9d9dc70e20df3f09bd7d7e2e0b29bfb283546875adbaa200efb560b624d50a8165ce6ae8ed501592"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cba7bcb35edccb3c3e0177d255d46e6d1d70e0b739c307d2394c91927eddf8d70edd1eeef23b4191adb89e631380cd7acdd7acf00b470d5a9d9dc70e20df3f09bd7d7e2e0b29bfb283546875adbaa200efb560b624d50a8165ce6ae8ed501592"]}}, diff --git a/txscript/data/taproot-ref/7c7b7ccbaea2f13ad6524f8a286a5a8e5de67e21 b/txscript/data/taproot-ref/7c7b7ccbaea2f13ad6524f8a286a5a8e5de67e21 new file mode 100644 index 0000000000..c5af2b72f3 --- /dev/null +++ b/txscript/data/taproot-ref/7c7b7ccbaea2f13ad6524f8a286a5a8e5de67e21 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1101000000a081b3de60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127053000000000c7b5fdbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc5000000006f40e899046516ab000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c6030000", "prevouts": ["bf8d4a000000000022512074a4c3567b4c4ece2d1ea256a6bf2f85bf4dc051497bd8ce7ed8816e2d4c108a", "befc0f0000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "19b35200000000001653142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "1f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8a47d733f2ac96a3990499de942ef9a5afce6e4fdb28ae911c182ccc4b722ed2ed661e9ebd30f651fa020177c2a1e4ce51b505c9194e43d6074b392863f250ba"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368244bc6a63b5727baff32c8b1af1e9c979b77b213f20864b1aba73e32e7aa16fcfc86bca0a8859889d9efd3fba9c68487fa49a78b15c293938d32f430a3e576ab3e02c0e1665e1d6a4b6ef98a6ef3a3632c98688db315e4c8eb8907479035d72"]}}, diff --git a/txscript/data/taproot-ref/7c81f44f5bced662dae488456a190a2b5b68c852 b/txscript/data/taproot-ref/7c81f44f5bced662dae488456a190a2b5b68c852 new file mode 100644 index 0000000000..d4204fb4ad --- /dev/null +++ b/txscript/data/taproot-ref/7c81f44f5bced662dae488456a190a2b5b68c852 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4df00000000d95f0a96dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8f010000003207e989016e8a0d000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d3010000", "prevouts": ["4a6b3a0000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde", "6934240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d", "final": true, "success": {"scriptSig": "", "witness": ["a80f05eda5fa6452191355b5e1bb0d14413a0834082572e8c7d771847039082ff4028dfa36b64d27678ddabdbc69f16d7446912da8038761ba6261574fbbcd2181"]}, "failure": {"scriptSig": "", "witness": ["6d92fce635d2cf9555981c7cb111fe1c0d137db468756d6f2fc95702a43e94218b9b189cf30a760b11d004b71866a4614097942592723a53e7a264efe8f307bb0d"]}}, diff --git a/txscript/data/taproot-ref/7cc6f39aa5cdd7a9af8b06f6627638b3bb770f40 b/txscript/data/taproot-ref/7cc6f39aa5cdd7a9af8b06f6627638b3bb770f40 new file mode 100644 index 0000000000..a54aba1544 --- /dev/null +++ b/txscript/data/taproot-ref/7cc6f39aa5cdd7a9af8b06f6627638b3bb770f40 @@ -0,0 +1 @@ +{"tx": "0972a5e80360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702f000000002df915e3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0d010000005dcd57a3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc0000000008fb04dcc0287d9c80000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac77000000", "prevouts": ["915d1200000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "ec355c000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7", "26b35c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100a6d2ab2947172e87e0d0420fcaf6652049471544cee25e0b022dfc55e36b0b0602203b0e29188ba06f91bf1ab0ccd70b7c641136597585c13c2ee17a619ea2713dfb834104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "483045022100de378d47a3861a1b30501fde0c947d82cd142397252fb61db7da9ba97ec0a2360220707b12cb0f3cf8b2ea50d322da7b3a68e1c5864180dd2520a58d7ad101cc093e834104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/7cfcff79af9057d0133f2b5da206b608722bd025 b/txscript/data/taproot-ref/7cfcff79af9057d0133f2b5da206b608722bd025 new file mode 100644 index 0000000000..7c0642eb53 --- /dev/null +++ b/txscript/data/taproot-ref/7cfcff79af9057d0133f2b5da206b608722bd025 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf601000000eb15c2fddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7701000000ce8ae4fd044f5f4e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a64ae04558", "prevouts": ["5f3d280000000000225120768c54f13dde172f25cce5a33aed38e02f08031f35d73759f73c7d1a105e2823", "abac270000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "287d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ec32039a2864f4c6d05138d42a3bc8d06036aba11fa129d2d36383244da9c9e18f8625f860d8689a2679aa71112fac717f40bee978e3269b215b9f9d8467661efcb4d33820b2e80b50b7a60cab20b6261c566fe48480267b41ad585cde9a4bb"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936980a251d9658563da155f8261bfb8adc21885ea6961ac467eaee09920ce56e15e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e896153d9d0825641ad9dc2862c4b07cae929842b36229bdcb06007f7d47362644efcb4d33820b2e80b50b7a60cab20b6261c566fe48480267b41ad585cde9a4bb"]}}, diff --git a/txscript/data/taproot-ref/7d568d459cf98a02f42d26cf7a40def28f45c07c b/txscript/data/taproot-ref/7d568d459cf98a02f42d26cf7a40def28f45c07c new file mode 100644 index 0000000000..a9e19d6a17 --- /dev/null +++ b/txscript/data/taproot-ref/7d568d459cf98a02f42d26cf7a40def28f45c07c @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707401000000447c0d19dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb600000000c89d618601bb761000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac83d9c85a", "prevouts": ["0d1d1200000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "d74954000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "4730440220111c8a8e4f7073ab568c295023ec7cd24c3d7003c51272c8bf4d187d87ee4d3602200aab60c8970b4d9a4f4181b88bbc1cbcc267169fdc72dcb7ee19e07486c03e586d004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "483045022100bc09fb85699d2d1050ce419e41f756b8d8e91d16e70fb3095ec494c143e6cc47022010834768e94c9da9680a4c68d39bc302651dfa20c77d0fa8057ef1b324c753406d01014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/7d77c20b635f8d363cafef80ce333359495fddeb b/txscript/data/taproot-ref/7d77c20b635f8d363cafef80ce333359495fddeb new file mode 100644 index 0000000000..8eca7b7a37 --- /dev/null +++ b/txscript/data/taproot-ref/7d77c20b635f8d363cafef80ce333359495fddeb @@ -0,0 +1 @@ +{"tx": "dbf3e74b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b890100000001737dbc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700a0100000096c4f09401d39209000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478760000000", "prevouts": ["7252240000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "189a100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d4", "final": true, "success": {"scriptSig": "", "witness": ["9d0831b6254a9df865600f216d1b11bd1b435ca20e650cce38e4788d5b555c7f2e9510d3c0e5f62fbcd753efb1fe9faf68a42863c02e4a5ec62edf31d3a52f9202"]}, "failure": {"scriptSig": "", "witness": ["ce36f271cd209957a8c4fe15564c95ad1969360a0dfd19764c6bc1ad1fd4ab5da1aa3dbd7981dbbd0ba65e822adce8229396ffefc2c5f641027f8c090fe53e91d4"]}}, diff --git a/txscript/data/taproot-ref/7dbdb91634696f23cadac0af049ca2841cbf75df b/txscript/data/taproot-ref/7dbdb91634696f23cadac0af049ca2841cbf75df new file mode 100644 index 0000000000..6a3c192d8a --- /dev/null +++ b/txscript/data/taproot-ref/7dbdb91634696f23cadac0af049ca2841cbf75df @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2901000000fe70cee560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c40100000092a97d7a03d69a2f00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4a846650", "prevouts": ["c485200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c66f110000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ac7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e5a9aa32e218bbd7702dd80b5ebdf509d58cd1514da294d038190654a927a1119f9ef29ad3e74b34f129235a64deb65fb580c2718ff9462ea3ca43b3a4f56170fc485b911b91245b46c320351c8e1d13bb30ee22c3f953d2224593bd4b5088ca"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93658c6fb8444bf3f1c71dc62d586de8f6b9f63c49598648e9eb416ba7b8eeb55d0f6e1ab16ab4bc20af15f35a7f6b67f82a67b85511624b76e02698979773111889f9ef29ad3e74b34f129235a64deb65fb580c2718ff9462ea3ca43b3a4f56170fc485b911b91245b46c320351c8e1d13bb30ee22c3f953d2224593bd4b5088ca"]}}, diff --git a/txscript/data/taproot-ref/7dca132115921f6d0134e317bc0c5b2e5b97934d b/txscript/data/taproot-ref/7dca132115921f6d0134e317bc0c5b2e5b97934d new file mode 100644 index 0000000000..3203b59ea6 --- /dev/null +++ b/txscript/data/taproot-ref/7dca132115921f6d0134e317bc0c5b2e5b97934d @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c0100000093647caebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd200000000897280c9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf63000000009dfb36d60406682001000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388accbd14a30", "prevouts": ["e211480000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "22e868000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "cd58720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_7f", "final": true, "success": {"scriptSig": "", "witness": ["27eb6a64cb17ded93d9f3b3641927a59f5d27199512c219b61736963630809fd0951b55407ee9bf6fa1533b234a10f6e97712cb7e7b1e8f96b547fd9713d0a4801", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["08e7b763fe61e85a11cc699bc7b9346760359b81598c06e1749ae83486b7ab8bac6a81e2d83204f96c7235413b8eee5c13e9ecff5fb2f40a9b7060b36d4fdc117f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/7dd14622cf7fe1695e710f01b45d90250043dea6 b/txscript/data/taproot-ref/7dd14622cf7fe1695e710f01b45d90250043dea6 new file mode 100644 index 0000000000..9ce1d1a6c4 --- /dev/null +++ b/txscript/data/taproot-ref/7dd14622cf7fe1695e710f01b45d90250043dea6 @@ -0,0 +1 @@ +{"tx": "ad0f55ba02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf000000000020d415c6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf37000000008751388004a9f403010000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487cb7cdf54", "prevouts": ["781681000000000017a9144c4b1fc943f04d775886b4f6d3c3c73bf7d3118c87", "2435850000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21511f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["182f98d35b656395a0e279e8ac79bb10de9f4a0abc90e5019b10ba0ada67ce243d579250203a24e5ad38b67da658ac80b5be97b672557738959f625878e9628c", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/7ddf0e4fc007dcceddccc60c7634ce32af1c1782 b/txscript/data/taproot-ref/7ddf0e4fc007dcceddccc60c7634ce32af1c1782 new file mode 100644 index 0000000000..fa39edc63b --- /dev/null +++ b/txscript/data/taproot-ref/7ddf0e4fc007dcceddccc60c7634ce32af1c1782 @@ -0,0 +1 @@ +{"tx": "8e58b9e9028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b301000000df8399ad60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270620000000088e2538303dd3145000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d6bda649", "prevouts": ["7be839000000000017a9146704ae21c886c9ded757e2b67d582abfc91902d487", "05500e000000000017a914f955a33e905fb6c7b7e694c8cef25993577deafb87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21581f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["0d74bc0c44327702fd68a9e5652814cb4b2ec976729a3f33e2510bc66054b9d42152e2231d14e91753c54ff32f3659e978c0b9868dd8fbf4e474944350321844"]}}, diff --git a/txscript/data/taproot-ref/7de80c1c4a6415b28404560b4e476f7ff798b292 b/txscript/data/taproot-ref/7de80c1c4a6415b28404560b4e476f7ff798b292 new file mode 100644 index 0000000000..bbebcea0d4 --- /dev/null +++ b/txscript/data/taproot-ref/7de80c1c4a6415b28404560b4e476f7ff798b292 @@ -0,0 +1 @@ +{"tx": "9a15a34503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6700000000b98902bb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47301000000b91d6fd260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703d00000000c51f3a80025f6e7000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964c000000", "prevouts": ["e6fe26000000000017a9141582f8bc3490e924b143f387e99eced40303eaed87", "fca73d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "973b0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2355212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["fa032475eb0e364864508278f4504454d21962b347e1c5dff402085489120264a90583560a08b8f94092ec583e9a0827710ef8d9d8bb8e6129d91ae016cdfedf", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/7e165223d7af3c0a9b55423a23a84315b3549c34 b/txscript/data/taproot-ref/7e165223d7af3c0a9b55423a23a84315b3549c34 new file mode 100644 index 0000000000..3ee9be070a --- /dev/null +++ b/txscript/data/taproot-ref/7e165223d7af3c0a9b55423a23a84315b3549c34 @@ -0,0 +1 @@ +{"tx": "0972a5e80360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702f000000002df915e3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0d010000005dcd57a3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc0000000008fb04dcc0287d9c80000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac77000000", "prevouts": ["915d1200000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "ec355c000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7", "26b35c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "027d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aa7d3ae1fdbd8d879becd21fdbe0d91f4e7a114144544c8c67df92a7e5482d1e69828280661f54bb25ef200c9d39138c753346ae1cc558703fbc48b26980763768cf2d3d0be95621d7446294d89d9a2894510d2dfb4e1a33e7316a17e39cfc99"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b93aeeec33fa290f41b43fbabb5874009d9963b54e8d894b1b04df286a8ec41aea584dae4332b3044a4c8d351fbda1a9ce22b0be13f72ff111d82ccfa4c6759e0e32049d91f42cbcb04955cd98e985d287b85d3c77c1154d8406ae5e2d81b7b1"]}}, diff --git a/txscript/data/taproot-ref/7e2b8b5d88ab86a02660c9f930b1dc7bc915500f b/txscript/data/taproot-ref/7e2b8b5d88ab86a02660c9f930b1dc7bc915500f new file mode 100644 index 0000000000..d3329aa19e --- /dev/null +++ b/txscript/data/taproot-ref/7e2b8b5d88ab86a02660c9f930b1dc7bc915500f @@ -0,0 +1 @@ +{"tx": "1f1a48c703dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9b00000000fdf160f9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c03010000009968b6f760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270150000000060f62d8a013c37600000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc85000000", "prevouts": ["5a1a200000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "f39b5b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b0fe12000000000017a914b0b53ba433a336ced94ed75e23248458a1c69fab87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_2a", "final": true, "success": {"scriptSig": "", "witness": ["22b22bdc7c8764d8a370ddf4e44c2bde5dd67a33f19a9b524d4fc0fe016fa1d4ad8e3533012a33afddb611580a5c978a05458c4bc60246296c2b982f04dc431c02"]}, "failure": {"scriptSig": "", "witness": ["7e21c85c67b66fbbf1d94c0a4b9238c1f3a7ecb1b5af4b8d21d34119b2ee5973e2bdaefd1ec9fc2cc6ee595c77b57ef15bebd989bb97449a0639a4368e99ee792a"]}}, diff --git a/txscript/data/taproot-ref/7e2f0de68af4544f103e74bd384b74b2e2f85241 b/txscript/data/taproot-ref/7e2f0de68af4544f103e74bd384b74b2e2f85241 new file mode 100644 index 0000000000..29334406ab --- /dev/null +++ b/txscript/data/taproot-ref/7e2f0de68af4544f103e74bd384b74b2e2f85241 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47a010000004febb4ce8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45701000000ef83efd203d03a6d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac6e000000", "prevouts": ["a714330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "28593c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e2", "final": true, "success": {"scriptSig": "", "witness": ["f25b6aadc3c2b33254ec57dffd2c5cb94f23b0e57a16fb495537416c3a31f0fd0be6091a8fd8908867ed74ac8f605a96ceb12bfe1980082e55b69961630a128682", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["77cc97bbf70d60e153aece39c2fc93f62ddf4922d93c3e7492f27018d29208307dd98245d89eb2adbdd3edb95fcd244fa4fd5ad9edf5f90a0b01460428091e3ce2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/7e4029c06ed03535d5f51420d860c7da16cc155e b/txscript/data/taproot-ref/7e4029c06ed03535d5f51420d860c7da16cc155e new file mode 100644 index 0000000000..a3feae9668 --- /dev/null +++ b/txscript/data/taproot-ref/7e4029c06ed03535d5f51420d860c7da16cc155e @@ -0,0 +1 @@ +{"tx": "ed787e2502dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4101000000e197ff86dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bba00000000cb7df6900128ef2b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87281dee3c", "prevouts": ["7dd81f000000000017a9141a56e0fb41afaf4b9e6feff1797087c69015162687", "4674210000000000225120801095ecb8b6618653d214b38461db03e06a33e3af24d0223ea647d6569eff0d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "225e202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["64b433ca7a1fabde520bade4bfaea818a96144cc46107cb1135781b43404a3a8abfba83e664bf2f87295b35658a6da12fe4e51d1a30f33a4dc72c9930f5f1c52", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/7e70e8a2a78ad2b7e350dc4a07651a5bf027cb57 b/txscript/data/taproot-ref/7e70e8a2a78ad2b7e350dc4a07651a5bf027cb57 new file mode 100644 index 0000000000..54f5a364ba --- /dev/null +++ b/txscript/data/taproot-ref/7e70e8a2a78ad2b7e350dc4a07651a5bf027cb57 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0d00000000f0d0e5afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb5010000001fc1f48c03cccb44000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acfc000000", "prevouts": ["f2bb1e00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "59da280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_cs", "final": true, "success": {"scriptSig": "", "witness": ["4bffc3b1097343fca22d5fcdb57100e76f29666e1054fd1e887e2c7efb35b3d6e1f60e1fff905f0c719d392e95ba00c2dcad1188a8ecf4c928f2afbf7926c3c0", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b7922a9ef31868fd0bdd2720bc44a83a05911c979e226e14df12e43105fabe25154b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b7922a9ef31868fd0bdd2720bc44a83a05911c979e226e14df12e43105fabe25154b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/7e874b33beab6c09e8cdbcdcf34c226d959f53a7 b/txscript/data/taproot-ref/7e874b33beab6c09e8cdbcdcf34c226d959f53a7 new file mode 100644 index 0000000000..6387c3c585 --- /dev/null +++ b/txscript/data/taproot-ref/7e874b33beab6c09e8cdbcdcf34c226d959f53a7 @@ -0,0 +1 @@ +{"tx": "0edf5c600360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ef01000000195c71c7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2a01000000128387c360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706301000000d6a1ca9b01111250000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478780000000", "prevouts": ["77320e0000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "f6ba6f00000000002251208082b91639ce415d44b93ebacde06f605687bdd15466bf93e6aed91c1a4a19e7", "1f6e0e0000000000225120ca2f7736d38d84f93b62b86d7eca19a35f2cfb6705849a1c6400bed56ad761ae"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["784508e5109e40dbf20ca51397fc002ed5125470fd6554c0ee7e14d8497660a36c8964118cef10e8571c4346463a248344c471511dcd0fe340cdb879230e75fd01", "39", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366766fac9c6e784db5f8f76fdaecc5908d346fb10e2a94f3d53afc856df676be9db8a063504914bc780e57f4ce8afcf899f13bddbc9ba6d59a4f52d0470abfbe40b0e8bb2b66fc463e2d54d81f90a0e5f51dcb3568b3086b1f357bf91f83906944fe8fe1069e54ae3b3cb1fdd7472a21ddc8023e0d3d8d2e4897c7cab26f377f7", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["784508e5109e40dbf20ca51397fc002ed5125470fd6554c0ee7e14d8497660a36c8964118cef10e8571c4346463a248344c471511dcd0fe340cdb879230e75fd01", "", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366766fac9c6e784db5f8f76fdaecc5908d346fb10e2a94f3d53afc856df676be9db8a063504914bc780e57f4ce8afcf899f13bddbc9ba6d59a4f52d0470abfbe40b0e8bb2b66fc463e2d54d81f90a0e5f51dcb3568b3086b1f357bf91f83906944fe8fe1069e54ae3b3cb1fdd7472a21ddc8023e0d3d8d2e4897c7cab26f377f7", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/7e926dc258ef73747c6dee6961a01976f75e194f b/txscript/data/taproot-ref/7e926dc258ef73747c6dee6961a01976f75e194f new file mode 100644 index 0000000000..5542d0372e --- /dev/null +++ b/txscript/data/taproot-ref/7e926dc258ef73747c6dee6961a01976f75e194f @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709100000000dc1650da8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49c000000002a8e0ff10207f94a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac4c010000", "prevouts": ["a0e70f000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "e1773d000000000022512015f6c01f4cbfbd03849fbcce8a636b49e5c18ed85b3712a10e7757f33687c2ef"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e04c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93660eaf4545b5f7166123e054cf15eb738fe32912d9aa58946aa01c3af8881f1593713490b1e7aa24138c57a652efa6d547b3fb45fa4f05027d6d9331efbfa4d517cc0cd924d9aecb0bc2fcf01621d0e73a88693291594fa52fe0219caeccfa5b3"]}, "failure": {"scriptSig": "", "witness": ["4c52e0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ed9d9b4b668c8953715b364fc922d70c032801be88e8b1547978372f57dddd133713490b1e7aa24138c57a652efa6d547b3fb45fa4f05027d6d9331efbfa4d517cc0cd924d9aecb0bc2fcf01621d0e73a88693291594fa52fe0219caeccfa5b3"]}}, diff --git a/txscript/data/taproot-ref/7e952aa0d4d919ea11291440bf1f5548858938d6 b/txscript/data/taproot-ref/7e952aa0d4d919ea11291440bf1f5548858938d6 new file mode 100644 index 0000000000..3fa8a0050c --- /dev/null +++ b/txscript/data/taproot-ref/7e952aa0d4d919ea11291440bf1f5548858938d6 @@ -0,0 +1 @@ +{"tx": "66f1c1cd0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ea010000009c1919fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e000000000477db4ae01416e1b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4879c000000", "prevouts": ["77a610000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "afed0e000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c368", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936353eae18109edee214f2be0a3d138643cb97d12a4be5b4a3033565f50658463d637f7085334bd6ace67733ad5f759fad65febfe656f63b2b30abaed1d2ea29dc9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e8c9e4d0011cdeb9b088f09f0ebbbf16a9fa32ee194ff7dd3162fc83b18004e07cb9328b065f9eb1f6f110e9fe7273590c885552330e2c3269c2432845ee2744cd8777bf679e716871b092f46e3a69645e6fd098b2f58cf3078cdf1926d6f261"]}}, diff --git a/txscript/data/taproot-ref/7e95b122591089fda778a2dbd434c55672c92346 b/txscript/data/taproot-ref/7e95b122591089fda778a2dbd434c55672c92346 new file mode 100644 index 0000000000..f16655da22 --- /dev/null +++ b/txscript/data/taproot-ref/7e95b122591089fda778a2dbd434c55672c92346 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ee00000000e3d0b991bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa8000000009f4a9bdb032cf480000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796122e1a27", "prevouts": ["a2331000000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "dfa273000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "", "witness": ["3045022100c251462192731569098900cf1d3b21cf946d6e773e17b9ba0bd3310fe26e3bda02201c53d83c8af1e3b9976a6c6575994f9358ff87e1ad9688369c27c6ee2a57839783", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["3044022019d5bd6e1a1ea306364e81fd63fa9199fd0293d96d83b3a65609ca11ca70b8c7022038f911df8254b7d76da4d4003d68b494cbb1edd6981f67e48474773a5e75f22983", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/7eaf9980118567289bdc91759abbffb031b64227 b/txscript/data/taproot-ref/7eaf9980118567289bdc91759abbffb031b64227 new file mode 100644 index 0000000000..79d91aecfb --- /dev/null +++ b/txscript/data/taproot-ref/7eaf9980118567289bdc91759abbffb031b64227 @@ -0,0 +1 @@ +{"tx": "af7531b002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b15010000003f6948df60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700702000000b229d6fb012748260000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc4f020000", "prevouts": ["bee5240000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50", "25fa0f00000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c3d637b7011ffd00eedbb445a8092699a300f1bf27d1605b591c1c40de685c877c8ee2696e70fd78aa4612c8389c2f050673617b62a757077c4637d3dbb9c49ff52eaf25b03ae274bca090a0b92b839559e9d06510d569b9673468a05ff100ba3e27f6892dcd04d2917fddca63a34f682577eba1dfc9759e8b6f640961840efc15b96da4e473f5c8f5de0305fcd4504806b0195502d7a0403b7bcadbd35689eb9516feab007ccfcc5593e606fc87902da536366e37aa3ae4d9a13e794280aec0d945d0bdcf8875238ab24b771e85c85fe25eae1c7f852c24035bc708c50f711b7c87e3ec5a3675262ca7e9677c17c773c51b1c82ee074440c201e10a5229ad8f70ec228bf41d70cbef2ffda3ee36bc003e82e73cba0f45b5fb050f0e71c732835637c7890a29da273e369192adf6bdee514e7677d24a38911b650e8b10fcba06ea15f5081327675a8b203d1b859d16f94352eb975f491949d673c2380dc2af40d1a21d347f56b9657020fea68ee6a3041c2a29946f0cf7a892c7af3160e00889b8644ba8ace8ad79828769fd9d05a157ddccee7e7f4749fc43b3fc5b7df728521d8f809c394a5193da2faf2c00c59bde8e4e114ff76474cd710b13a183dab9bc0928c7d41ba37a26ecd1f8b05535e24d05ce14b47e2967f02521874205ea0e02c636ad2c46a937e4ec619370cd2c58eb123f9ef7380c2b0377117c5965f8ceec96e349cfff3b1c926475", "9f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d928217635fbec2956e337d8cc635fe8686b115d27313616c09cd1eab494f2822016530e482bf934dddf93f5dc5c8477f8e54d8918bd8c9b20d47f007dad28fe6f3617d560800e971f99646d89bd2028caf0c6d02b6f505a11fcad3ec349c801"]}, "failure": {"scriptSig": "", "witness": ["4d0902f1cd2fa2b7c261d5486386a1264e4af878b2f4c5d663b3b0c67cfc28c712388798b8261c41e0b044e90932c7909cd8102817b4e6d97135ef44adc0bba486b9b683edfda424e49226f651512008f3a0a63438e6c3ccd45f5d3ea57c82ccd0a502a9ee472bc43f930b1bf26eec8a35ad8b278cb5901984aed2f4d8e58d05dc90533927da8594e8acce30ec1ae29af933f9688576424853cb374c9deea7018a895cf86ed74c71255a353f7d6deb9b19f5c8f487fb41ef7805c74e296c14fb249c1fca128b69309800b504f636c47a15cc36e5833bedd70937e13485bb0a33e63f10cc94709f320e92cec22b595a155313c9af153e82538978da14bfc9bbb2a5ee0170bf1c8fcf60bbfaa4d4dba73e2ac2bb8a966a19f5df071568fc6c78c6e63601e44206358767a1cb6b2d86983d8e8ed45052fe049030d547baa085458eff60b6b0d5cb09959d612a60c904c8baffa6dd634b65d32e08d7a8951dbdf9991959e07c9a934b197dc8e137008719b9735a79a5bc56941b6ed78cb321007bb46138646678c8624bf4d7d1ed94dbd9beae8af23f16dad5a7c5ba22a69d8132a6b9bf6d22b46880503528628dc53d98bd117673b2b3ee49d742a8a2a135683742d91b3a6f554fb32a9adb71d4553e9c0abe58e37d629efc42a76fc2945d40f4d5712fd9a33ea72f4115e230d9955d9cfa859dabe809c2198c8bfce85051cf35da7e8a7612425289c42e56619c75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d17a8d967edabc547e7e1f87e3be6b8f080116454f38ecbb7d9556d120e85891ee453f7f7ccbda5a0ba96115b963083e4b2e9e93a3abf82e4dae88dd7e6a6b566f3617d560800e971f99646d89bd2028caf0c6d02b6f505a11fcad3ec349c801"]}}, diff --git a/txscript/data/taproot-ref/7eca413996ccecf266e5bf306d63db50903b1ec0 b/txscript/data/taproot-ref/7eca413996ccecf266e5bf306d63db50903b1ec0 new file mode 100644 index 0000000000..9477d2de1c --- /dev/null +++ b/txscript/data/taproot-ref/7eca413996ccecf266e5bf306d63db50903b1ec0 @@ -0,0 +1 @@ +{"tx": "2bd6955703dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca700000000c8472f80bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4600000000d13b7096bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf22020000007262dfc601ef371a01000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac991f5956", "prevouts": ["846a520000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6", "8cbd7300000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "3c5a750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "4730440220187c42c98be72805ee6a6005328cf68088eb005b2ad3e49bb24b484c8b33083902200a2b9a27d2ffa0868f0d65f9d1bdea15902b86887a5bbb245c4d277150dde879342102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "473044022003afaea420bb105276001b4fd88ab9393ef3276a8f51b7b5f348028460e5dc610220381780c541463889708cc3ef67fe60bddd79e869e5e56652a33e4d53d4100782342102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/7eeec8eac2847cfc829b4f04a7732871fa5b33bb b/txscript/data/taproot-ref/7eeec8eac2847cfc829b4f04a7732871fa5b33bb new file mode 100644 index 0000000000..f7783c9cde --- /dev/null +++ b/txscript/data/taproot-ref/7eeec8eac2847cfc829b4f04a7732871fa5b33bb @@ -0,0 +1 @@ +{"tx": "87114d0402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bda010000001bcacfcbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5a01000000684733a90404c2710000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acefe46a4e", "prevouts": ["33a22800000000002251207a86f45d21fdb08435e271cb417d7b8bb1e066ea2bc109ea12043ac97c7d3e10", "94014c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936275aca17f49935962eac90c180a8f819c2936e0eac025cd2a6a39b05ffb78047"]}, "failure": {"scriptSig": "", "witness": ["6ab4616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/7f31dda7857641eb43ac8f245109af960b934c86 b/txscript/data/taproot-ref/7f31dda7857641eb43ac8f245109af960b934c86 new file mode 100644 index 0000000000..7997b4755a --- /dev/null +++ b/txscript/data/taproot-ref/7f31dda7857641eb43ac8f245109af960b934c86 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9101000000f4573a6f04da7c2500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac0f4c6c56", "prevouts": ["766627000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "677d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e5c46f8483e321cebaf2ee3308d3646486cc3944f1006fd31d055421496231102bba6f8d4f5daf96bc6060ee089cc6dcbd533ad30ddd55009697a11ce72a351d2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdbceae773fe677547a5f8be2986f5e4c7dc436c0d3f0e1e86711aa468c8778215"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082687eac120734a03ae4c27d3bf57e4c4c383799b8e878ebb1c20141d650e89e9fbceae773fe677547a5f8be2986f5e4c7dc436c0d3f0e1e86711aa468c8778215"]}}, diff --git a/txscript/data/taproot-ref/7f36ff093686c198384796967779e512b39b0067 b/txscript/data/taproot-ref/7f36ff093686c198384796967779e512b39b0067 new file mode 100644 index 0000000000..c5b3666f28 --- /dev/null +++ b/txscript/data/taproot-ref/7f36ff093686c198384796967779e512b39b0067 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa700000000ceefd48b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45f01000000e73d30ab02afa5b7000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7719a5825", "prevouts": ["0af9810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a25e3700000000002251205d2a5ec9abc88b8aa90a173ff406be7abff8b14799a4f6ae3ad10e99906551f7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936435ae76ebb71dc9bdd4eb981061c35de943408dcc30d58732258fe975e745805"]}, "failure": {"scriptSig": "", "witness": ["6a21616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/7f37fc6f46dfd2056c23dce7388e996b2e007166 b/txscript/data/taproot-ref/7f37fc6f46dfd2056c23dce7388e996b2e007166 new file mode 100644 index 0000000000..4f099d0da4 --- /dev/null +++ b/txscript/data/taproot-ref/7f37fc6f46dfd2056c23dce7388e996b2e007166 @@ -0,0 +1 @@ +{"tx": "8afa4c8302bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1b020000003cfad686bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5401000000082929ed0293b5f3000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7ba010000", "prevouts": ["962f7b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "51277a000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902af3a911aa679f7e606cda485f57acdd53a140d2363ca6ab2a2da3182409741271a038cd152447d92e99cf720e89c7f69987bf3f52c56880f40d10e1802b6f96664211907f8b191a7566205cc36cf793a0b41a905e8c81ddf9f033bdaeadf9c88bba302fb88d20f188df877b814aab86991fb5a4e6171309c703b2c5e1617e18c53c8d9ab0ccb7612c3e8021ec2b9004e8a713f3e3f6aa0149557fea0356a69662b072ec3c0791a1e9477d975ccc161667fe05b7770fa4afb89958e1e060baeee59deb8799c4d0da2decde5cfdeaf63c5945b1a2193887319b7a2e88f98fe390c02e3f38cf9337fe608811d28ced82549e4f221177ad1746374e0c5c9ac7ab02bd5a4fdeab12d2b0bc5c1800779585726264669a6f82960de6f3d8385ccf6eac83f768e9263ed4b01d400e3fa10d5efc506c0f6ddbe7eada4203493b89514a0864548c53a0882a42201b87c88a2ab39eb9c2db6be8ae372da2bbf60b5de69fbbbb265bd919a73fa7cb4f9d16d5b89eb7d96948e9a90222e13d87a54aff156fcbf969c47bd46d0e0ccfcb0f1a9a8ab48a976ba48369735feb355cd48003d5b94dd39d85e247cde37f0ad88ee5df038047bc569f7fb868c27c85435b0d671a3a40fd4b2a16ca7052d9304f61aa432257ca7d234aabee4a8e95144945d25bdece32ea1475d8fb9e9b6cf465b90524e53f6ca353368f1d2c750cdf6ef69d8b7cdfc643c9b4e28e3d523b64e75", "267d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4636362d36fe430e464691f92fe9bddeedaa1a868b07f700ddbcea110392233913d4be53f363cb6dc14d29c1d7e4819045cdc001ac228b3b700074691e2599d91e402d116972020cc4db8f7e1431e7a7416668817d422dd270400f40dd8d238"]}, "failure": {"scriptSig": "", "witness": ["4d090245450b3e387113d0ce5d0371276bf6936933bd20eca3542c8a0636aa706b44a2fee9299c961e33398111243df0aef0b83e5a7c9a5347edaff04f8aafb495ae71b18d0ebf602ef8f1f816612095ac53819e0f7aec71ed33698972db5e08333813009885d7b8d3065cbfb559a3644e6fa40c190ebabaa2b8f01fecde4484aec8951db5efd5639edda806a7c032a28247917183f654e5afa11440f81d77df0d152c105709fb458dc0a2884579ebb0a99ae4b01916b6cc1c1f30a37e794bca974ae8f6ef5e77196689875fe4d1cb2fbf1bb88172715701c77acf0d198262a8033ef2de49d9009e30472770c63307c986f5da4fdb3ec8baacae8409df045c6289a11aa427c7499977574c9d6777111ad3d479f8372456e766a95b388e6bf3fec7d250c0a518a559ef6dab42edbedd059d58ac472c6af092c448830b2b68327250b8517a4359c86540eddeafce06983977c41caacde58f15551f3e7e5bc17f791f6b261076072d040214a5da939a4292f940edcf6186fae7121e44366b01d7f5bb7753d09cd8e9ed2c732c005ac6d8a4301653474e4c8e25d48bc27c5006642fad23a1ca8359daf4264acea7a2f2a7878135fdff0e688d9ed6d2fff68a9c4dc89a8826de329726219fa1a5260b122905ac10d2b6c691af715179177433449a17d73c2224359815eee3a34b6c0be96cbe9b97de7d3ad86f7d9e8cc868739e898eef8d995283aa61f7b38cac6a75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f7219e5458c3fd087680f56af7e0cb5a098c29a419645486255ebba5b453a7aacd4c02f64c49cc162ff9325daec6263c98ea78a2c5346e44c6d55d79722c7edb"]}}, diff --git a/txscript/data/taproot-ref/7f5fb097a29a27b116140b9366006e578d1139ce b/txscript/data/taproot-ref/7f5fb097a29a27b116140b9366006e578d1139ce new file mode 100644 index 0000000000..bb118b82c2 --- /dev/null +++ b/txscript/data/taproot-ref/7f5fb097a29a27b116140b9366006e578d1139ce @@ -0,0 +1 @@ +{"tx": "007958d602dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9e010000000160a5b4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2302000000b9f715cc01b1a3b900000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a5020000", "prevouts": ["8ce35f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "47386e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f9", "final": true, "success": {"scriptSig": "", "witness": ["577367ed863cbd40fe824ed1756571da2db8ce634648d5afff58d64391215c28a1231178cb28d84833af6a5bf04e82bf49a147fc72b4a083e7285c8719cb2f2001", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["611b2f417623f690adb513d383a2976867502accb39f2f7ec363f47a706e0933661e7060ddbc7147c21f485c212d1c826a0c2aa3a7dc45e8c9acb53a2fd798f3f9", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/7f6b5c7e454d101b3d586c7653b251e1aaa8404d b/txscript/data/taproot-ref/7f6b5c7e454d101b3d586c7653b251e1aaa8404d new file mode 100644 index 0000000000..1443ce8888 --- /dev/null +++ b/txscript/data/taproot-ref/7f6b5c7e454d101b3d586c7653b251e1aaa8404d @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1701000000c7fc959a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704c010000007eceaec901a7a40e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce500232a", "prevouts": ["49ba1e00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "f00011000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "48304502210094a2a0dcb83ebe9818aaf887f84bb68cba54c5e376590146f070df10c7e9ac7e02207dca24c14026289cf3e9c046f2ddfc6ba274006aee79de870f2640104522bfe4012102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "483045022100881d2f9416fd35184a097cc6b5566732ed3f5265ede249783b8d21eb015413a0022026f3a6b6fefc2ce1e5ecf42a93d0e583b4aec62945f0dc9a864487a0e8657fde012102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/7f76a08aef5329137e1c80a8f4fc7245375849d9 b/txscript/data/taproot-ref/7f76a08aef5329137e1c80a8f4fc7245375849d9 new file mode 100644 index 0000000000..219485dca7 --- /dev/null +++ b/txscript/data/taproot-ref/7f76a08aef5329137e1c80a8f4fc7245375849d9 @@ -0,0 +1 @@ +{"tx": "dcaf384b02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cda01000000cf8850f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd400000000479871ed013270a100000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc4ef5541", "prevouts": ["db3f47000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "03855d0000000000225120fc12a8d66cb681b25d9244e35510bfc0dfd4b0ce262903c87a066ca254a38f8e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090211e5ca7772292b1441e62cebc7470f5bb206c51aab540a8c0106d008dd2ed22fae5fc24244a2b4371591cbd5c8c42c64355a4b38a62b3bc33cba2c1c1300453c77fdb4e16a51c82c2d3929034feb33f016bd1bbc00009f128284aa84885515c45973e014e7dda5cff953423da3b14a1688a13446a47ab3301287880af7722eb96cdc0d12d9ba47f8a65c37d05386f81abefb301f1a91d69e9ba6a01bfba13c3f1d7a0029162702a800ea83954fd5854d235f2ced6c0c3538c66e6da9e7714cc037542c9c1faf47333d80d4e2cc628d9f1ce2589c1b72a2377063cc38983669036f6946492f76345938c023617137cb4fb8884dea466108f3daa73e5d4da38d81e4cb2f08137a83e1a54fe5e9e86e7e62d1c0a355e3a2ee345594c57c043c8d2239e80f12fd5922a23d3aac7420ed5a6c0c0638277fb281f3798892ff24d2b0c3714ac1f0e23cf2f9b55e57da8d9ab487c129df028d91d76de8c37ae965698476189266b7d4dd76c52c4f23c02039018ad7ea5b8745aebb87ec4adaed22c50b2e2e666bcb5b755cdf7b6596c1537594012503452e0b4e16ba2752967acddd798bd5d7a3ebb18f5e5944663b5e570c04cda945930aa1363fd32bd91522701f7bed01b1e8e56572cfcc8bfa7940179ff2aa8e6f0c4ea1f6c7b97c5674b98c986a2d9b70ead7424d6fccf5be6bb136ced57a2df23d01f6f5282046d26ea5f4aeaefa479aaa5078c262ff8175", "2b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e83f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082885bea8937005622f3eb8b2c440108feebbdb5f3ff09e0402c722754cbcd9b2d195038de5261112827291f7af9c58b034003ed818b7e5ec0d4ccdf81f6c2ea4d"]}, "failure": {"scriptSig": "", "witness": ["4d0902fad7da56013d94c7a2f1e1441b0e0151b7dad7e0fec924e4565474039c3fab075da1bb75c325d628dd4339bd8bb75115a95d42acff0c04c0642dd9e23fd80fd2a4e0bb3ba292e1491bc114e7958ff515832bb364c25335e706f305eddff3b282025ed1ec827bdcd494e446ccaeaaca74f7df7ec5c5cdec3a36c15b20de7ea87031a7bc31558af79e9d2a13d5f717af88d4c8fca5020abefb83bf08419400586529dc8e1cc0a107dcab571dac46d266d3cd9fe8127d955ff4bcc4422d83d9f098943e85aaeee380c717fdbb8bd60236884e22d4eecfb5cc88bdaafb862bf160549607dfd4b1aace0f5f3492ed5676d62326087430bb046709cf9e519eb9c01bf7f6ca78a1a70f8ab87c31e66feed7a8aff7079359042ce004892dc0c96ff16ddc832d908a053793e55748aebc560fcd5f7bf75e20e31612a264c546093b8919eb7d88f0c1c5f494b7eb5132ea7f8d14baabf475409ef35fbe00ee41332d03c4e43ad5f0ca69d92fa596c61757867ce47274077f7201f71a9187fdb997caac5a745bf4529b7c51279a25a4acad72a3cc51478bcf825d68d22d3ed4bc2b9ac4bfc48a31cef64276bdfd10e33ff8cce5528c558a1a8396ea69e44e9e6a5d4a78ef3358f442dadb3d3a2ce8491bbb8706f49ee462b4bd5233a392a484d8db73e9f6e7e6669c5292a9c40535a011b592821782d4c4f67c32b7f746b8bf062af89d189022e1f6a2029ff4020075", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a9bf3b6b5783b5bb1528abe4ffb8f169250f3a45ac3fcf85a8b33da4afe75cfffb898061b9e990a9b5449c5e7217db506cdc93f8f373bfce07d03a77edf1b275195038de5261112827291f7af9c58b034003ed818b7e5ec0d4ccdf81f6c2ea4d"]}}, diff --git a/txscript/data/taproot-ref/7f7be6c8663be7951320cb6c651781e5583ed65e b/txscript/data/taproot-ref/7f7be6c8663be7951320cb6c651781e5583ed65e new file mode 100644 index 0000000000..e7eff966a1 --- /dev/null +++ b/txscript/data/taproot-ref/7f7be6c8663be7951320cb6c651781e5583ed65e @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff8000000001375d4d460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f101000000e076448004e67f8600000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acb4030000", "prevouts": ["620f7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4e3c0f00000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100f7769039e9849a23425809e640b988b91d6c25b3533ff27b05e3e9f49373604b02207c1fc11838f5183c4272c5096f5a56d8ade47bc2707254ceaeeb9549f8078c37fe", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["30440220775c2323a9c98f6c597702add339149e4d0bb96db939394bcc4eaa264fea3bd902201e15716d0db5f9a1e482d38b68fd3465c4043993b66067d07a6c994d33750ca6fe", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/7f8f81d1bf5547aca3adaba322cccf59977c80b0 b/txscript/data/taproot-ref/7f8f81d1bf5547aca3adaba322cccf59977c80b0 new file mode 100644 index 0000000000..8267ef7ad9 --- /dev/null +++ b/txscript/data/taproot-ref/7f8f81d1bf5547aca3adaba322cccf59977c80b0 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfab01000000353da8e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa900000000724751d30155c54600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1ed6a542", "prevouts": ["8b607600000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "23c780000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ece7439a6da18213b739641e86399840a31603efd6bc35e889cb5cc2f58e891a69cfd1883d9d94906422bb83623918edcd109683f826bcbf676882b31fdcf44192fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366888396ae9b1a8f191aefcd5a7a56acfa3ac01b0d4c8aa849bbbe9a5944eb071c75ad5b0c19c64f5d3a7fdf07b71b1a8f8b99e999958fe2a8fbfcbf733553f9475ca33d7e1e5f2997f74dd285eec8a0e5cba5080c4482d5b595e9662ee4b93be0a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}}, diff --git a/txscript/data/taproot-ref/7f9d1a52ba029c7f6e88ff84575df1fcb1075619 b/txscript/data/taproot-ref/7f9d1a52ba029c7f6e88ff84575df1fcb1075619 new file mode 100644 index 0000000000..335e059a2a --- /dev/null +++ b/txscript/data/taproot-ref/7f9d1a52ba029c7f6e88ff84575df1fcb1075619 @@ -0,0 +1 @@ +{"tx": "e61fc582038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45601000000c4e2b5b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2001000000c5b7f7db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41a020000002528aeb801fdae1700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7c4010000", "prevouts": ["f0893300000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970", "8b96760000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f", "5e9f320000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "417d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e832d46fff335db0bc559e9bb1dfa0a13335da6dee7eeb053c06bd06875f6e68356831d286b681d36077bb0670e25d1d3b2bbe36e9d696c3276746d4ede397eb7d"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361e2c9952688e2a9f00f4b0b73b9f464050183c79369b385e87738acd2c915b017155e8c33f0c07f7d0de889297fa065f1be8d31098e32dc97a677fdacd11d05345bbf2815375aaeee056e6b05e441f58ef8c911146e9d15e94b57fcda7a8d0b76831d286b681d36077bb0670e25d1d3b2bbe36e9d696c3276746d4ede397eb7d"]}}, diff --git a/txscript/data/taproot-ref/7fc1bf414713fa9f80c252358021f9f97b15c792 b/txscript/data/taproot-ref/7fc1bf414713fa9f80c252358021f9f97b15c792 new file mode 100644 index 0000000000..b7704af321 --- /dev/null +++ b/txscript/data/taproot-ref/7fc1bf414713fa9f80c252358021f9f97b15c792 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127072000000003a6d923adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2301000000ec825d2b0388966900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a76d4227", "prevouts": ["e98711000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "583e5a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "98", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936862595c5db495f9659b55a4931c0d6b5790089471348683bf5da646fafe3acb03f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082241df2003654f0fe7fc4600eb797dff990a6f251f130f49fda58fcd5b0cbb08c94c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936135308afc3f1b0427026314dc25c4582126331f233b7d3a6426128e486397ca6241df2003654f0fe7fc4600eb797dff990a6f251f130f49fda58fcd5b0cbb08c94c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}}, diff --git a/txscript/data/taproot-ref/7fdcc6c41ae23f27834e5e1303ac7e3a7a01c43f b/txscript/data/taproot-ref/7fdcc6c41ae23f27834e5e1303ac7e3a7a01c43f new file mode 100644 index 0000000000..f046704962 --- /dev/null +++ b/txscript/data/taproot-ref/7fdcc6c41ae23f27834e5e1303ac7e3a7a01c43f @@ -0,0 +1 @@ +{"tx": "ec16b2e503bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf71010000001e2984c9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cff01000000d37921d6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9d010000006e9e6c8f0155bb16000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8796000000", "prevouts": ["55bd6700000000002251201b1a5025b4fe9992b0e02773e7f35e6be2fc0ec95e56c0e62f01a84c1b9caac2", "4966600000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2317250000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c9", "final": true, "success": {"scriptSig": "", "witness": ["856df688e7ec8ac2de3b3eaa7ee2c7e7a01666ae97f299f0b097fe46b64ab0dadf920716a3c53bea12cead7678a3a4e2191045ebdbcc09071df6e16f1f3d1a8182"]}, "failure": {"scriptSig": "", "witness": ["0b679c2460e33142fd5e633ea0bc7372ce1690c74bb2710fd3dad6ca5f9488fc04fdd91246154aaf9b55e028b491fb2178fb927661012a992cd546f294c553a9c9"]}}, diff --git a/txscript/data/taproot-ref/801315c10fe0fcc26c0c57bc8f631cd93596168d b/txscript/data/taproot-ref/801315c10fe0fcc26c0c57bc8f631cd93596168d new file mode 100644 index 0000000000..aa0b3b28e6 --- /dev/null +++ b/txscript/data/taproot-ref/801315c10fe0fcc26c0c57bc8f631cd93596168d @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4db01000000aa09a19cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0f0100000069f2c7ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270920100000099f9349f028e428a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487596bf447", "prevouts": ["72db310000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "266e490000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "02ff10000000000017a9146704ae21c886c9ded757e2b67d582abfc91902d487"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "165e142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["3d54f7211a3131376c7caa6a4b4da03c4647e46af1be525c2948322529d5cdc37df71a7e64a98902d2b01b0324693b015a50e45a7c9a70a90ff7509a0e55e760", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/80333b40950b8f22b44ba7c383dc625b1b094df3 b/txscript/data/taproot-ref/80333b40950b8f22b44ba7c383dc625b1b094df3 new file mode 100644 index 0000000000..084bcbb49b --- /dev/null +++ b/txscript/data/taproot-ref/80333b40950b8f22b44ba7c383dc625b1b094df3 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8900000000168e1e960489df45000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcfb000000", "prevouts": ["65ef470000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d06c877dd86d961faf24eb5b06d1067a63efc55cb5bd19f84e66e81c1d8ce78d7393228d3eb0988ec9fcd75a06765f40457a0e9e3bb59ba4b5eb203b8f76edc57f6cdae672933b8d5270426b7bcec0c61df57a4cef656f5283364a160b6c04deb40b6eb065ccc984fff697bc0344c73ec5e9c5fa63ee26dc05c836112749986b744d4a3b93694a2036550277dc68556ac354f120b33f0bd1571b2aeebeab2200e4da1320df8c8e059de66dcf03e0874eaf7750b0860f98f35b7c10b70415f810946403a50eac215b8a7d39af3ba37d1c853a5ceb47d5ebf203fbced8e91a41125d9eb7089d1d443182afb63ff3eeb03e8f4b2b2046e574c27bb996a70d0246c3a1ab981e979740802b973b3d4aa7e58d071ff91f2d41d97d37f18bb45210a75ce52d2325dd6ded929c17b877085d54fc30f3575a84ae5b2dc38e8050d9f2c611672b1aff3354b1fbc527e3197cc46e4d2bb3c6818ef1b6ae3ecbf5b3f3b4c8e9dbe48b18cef645103ccdcfcf86abffc5e8a4480c163e735d8457cb48df90a060fcbe1ed9e1c00ff3886ec60efd8106d97b05deb93b548311458dae2584bba85471378bb768fa26627ed9b17fdcb450bba081f30ede1a16f65cbf777ac7baa3d3dd2dec517eec9810d6157d19c2fed82f1c1b7c4e977217343fd8a4f69f9d48575b3530ff1f79d081abc60fa41e1c24210a813c24c8304bfdd11c556d86905547bc78d7614227413d6275", "f87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e85d94fcac167164a1e762fdc7573aeb7aa116b8ba9fcc5f9bd36bcc426cdd2c869a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e5422b6de6500db2bf907e4c5314ebb405475f57406f25afe5ac62a92a9e6c58b"]}, "failure": {"scriptSig": "", "witness": ["4d09020154afaf81a15a88692650b1880577fbae1973e489fe66b93c9d4772ab4a226d42760a78db03608edbc96b23ac65bd7df559dc0fbcc976fe9f1e20c98f810604e279ec97ce3904bf07a966de51e245d43cf42810de716a4d61beeaaa151e03b13180abf8071029304830b9a5af10d6874cf21d45bff46220e7d60d8dc063bed28d7c8743aa5064e3385e49a13cf5b2de933f80eb3eed607426e79db5e0c57635e8de240f91a6ee2b89346f7a09e3bc71773d07382e0eb21bc27780aac226484693a819eb8e203c698ecd787d2cca6faf00fd37640962faed8de5868a063f3916a11c4b4ef313ce66557c2dcd33b2e97ac557f6d3438168a408590c1266eb8219b6d72b9ab780ec15730412666aa58eae131d7a1597774bd07fbf7cd225af26d7989948e3e9a809d8d442afb3de88849be8a71b4055a44e37a3c6029dc77c75e8da3d5a70830520ebc8d370121915ad7ba6ff0124a977ae28109be082a2c8eb80a5f1c56be56e6ca5f5c271393bad7184cc4f378a152e0a70b40c55f0a92f25cb5516dbe20f856958bc09f4b3239808ea2cf6e95e5893b805aa9ca16181fe46f848779f4a8758a14ebb155c45759b248ac73a3589bed623400f70b17bc63a230a0564f596e21deb6fc4a5bea4d9221a472d45052339fd1152e835a5e930f4ee61045b35d8d18cd3e6f0a4638c950b10b9fbfdf910959ac1e96c00c147b3143ecb4dae38b59b8d3956ea75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826a44cf4e9a2100eeda9c03b98c53803fc7517d02bc9d83cbf3bcae8bb7675812a0f16f4cfe8b052d74bbe565102becb5d9831a57baf41b6ebc95ac4a46ff7ed8"]}}, diff --git a/txscript/data/taproot-ref/80376b2b822b9baaef72428ca022d2e8ad5fab95 b/txscript/data/taproot-ref/80376b2b822b9baaef72428ca022d2e8ad5fab95 new file mode 100644 index 0000000000..fb2aa6e2e4 --- /dev/null +++ b/txscript/data/taproot-ref/80376b2b822b9baaef72428ca022d2e8ad5fab95 @@ -0,0 +1 @@ +{"tx": "8ab8cf8c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be401000000e633f1b18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b800000000e45ce987016a015900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac56b72021", "prevouts": ["64751e000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e", "23a9400000000000225120c1102a8f1f1acb509ea40275c13487a0c613f8d79621443165b53e6eaf1338d7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936462aa15e09838b54adb150b3e07c4d162c70ef3c9412f75fa68c6ecefae7c30c"]}, "failure": {"scriptSig": "", "witness": ["6a63616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/803cd5f12d095d218780ad627b0b82b0bab86370 b/txscript/data/taproot-ref/803cd5f12d095d218780ad627b0b82b0bab86370 new file mode 100644 index 0000000000..9dcc8b1e85 --- /dev/null +++ b/txscript/data/taproot-ref/803cd5f12d095d218780ad627b0b82b0bab86370 @@ -0,0 +1 @@ +{"tx": "d14930c602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbb000000002238ed8360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703d010000005e661cef048a862e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca4ce8961", "prevouts": ["33ee20000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "cfd60f0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000081", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5118137b75632fc8469b6d274d74e13d397486217d72038875bba282e5d91314c39823c6bcc0c06b1ccedd8f3302fb965778bf11fdbd4830d29cbc62f32a77240ccdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045770c141d000b7389bcb028eba0df2d51be96e98815503d59ed22f20e414bb1bdd3571a06a1d33120289e06483b2785a7356eedf367170ec7792d3587508789d4da9670c383f4b71f5a22d48df0589bd68dfe195935a65f1aeaa80f10f8ca6973"]}}, diff --git a/txscript/data/taproot-ref/8046cd7645e89a0fda7d8f8378e8425fefabb6e8 b/txscript/data/taproot-ref/8046cd7645e89a0fda7d8f8378e8425fefabb6e8 new file mode 100644 index 0000000000..60b3bb112b --- /dev/null +++ b/txscript/data/taproot-ref/8046cd7645e89a0fda7d8f8378e8425fefabb6e8 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7000000000ec9b048ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7301000000231716990186d7ae0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e776040000", "prevouts": ["2956780000000000225120e126375bd164d085eaf078f7c968ba0351125367548e57f6cc6688a24dc88c09", "3cd947000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366da9ade92a00cd903f2bec778be2e2fcad1c3b4b24d4dc7374dfc8c654eb770c"]}, "failure": {"scriptSig": "", "witness": ["6a28616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/804b90af698434a3596956677aba5a5f73dbaed0 b/txscript/data/taproot-ref/804b90af698434a3596956677aba5a5f73dbaed0 new file mode 100644 index 0000000000..8af6c3783c --- /dev/null +++ b/txscript/data/taproot-ref/804b90af698434a3596956677aba5a5f73dbaed0 @@ -0,0 +1 @@ +{"tx": "02a25573038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44300000000a45df2cd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d7000000004530aec2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c62000000009004818202ae91bf0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478724ab1f33", "prevouts": ["520e3100000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4", "942a410000000000225120327dc9effbe915b227349282cadfcd45dc438d4f1c3ec72713111ad7587a718c", "f2415000000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ed7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa229db830b5291510bfd4e55fc2f3a45cfb4105ece0af57cbfe0942d597b32d0c27d2631c3cab5fe643277004a2e6838e79a7dd6765c91a13be066042b33c17d3b131de5807af4725e3fdc8c81388bc895736ddb6e799e7163e8586c833ffc627"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4a97da4cacb7d2ba59131ae423230c4733e99b93a89fd0934cd3e0ba8b31d50a45769ff8e70e4bb7b91d42acbbb62837b0e871ab760bcabf7dfb792b2e999f3b131de5807af4725e3fdc8c81388bc895736ddb6e799e7163e8586c833ffc627"]}}, diff --git a/txscript/data/taproot-ref/808bb1522f5aa5de2dee150c5fe9b2240c76f14e b/txscript/data/taproot-ref/808bb1522f5aa5de2dee150c5fe9b2240c76f14e new file mode 100644 index 0000000000..424132bf62 --- /dev/null +++ b/txscript/data/taproot-ref/808bb1522f5aa5de2dee150c5fe9b2240c76f14e @@ -0,0 +1 @@ +{"tx": "32d633d502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4a01000000a75705a460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704e01000000a92a96b3047a596a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac49000000", "prevouts": ["76e25a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7e79120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_29", "final": true, "success": {"scriptSig": "", "witness": ["cfe693420f1cc693cbed5917368faf6dd8b05cb899e1a5e7faf739c1dc96cf3f09c85d5184c172fe5274d72ce3ae2632c22a18b4963f34484be0e3df7343a59a01"]}, "failure": {"scriptSig": "", "witness": ["1bc7a81d5f370cb009c1a825051a8a06a4cdb01c16eaea4d759faaeddd0d0d1846089c86038e31eb8d62689d741c5381a3a4e484ac11503b7622c28d78290c8a29"]}}, diff --git a/txscript/data/taproot-ref/809f182745ce2d04f2ed1126bbd41c71d290955e b/txscript/data/taproot-ref/809f182745ce2d04f2ed1126bbd41c71d290955e new file mode 100644 index 0000000000..a4e8bc3499 --- /dev/null +++ b/txscript/data/taproot-ref/809f182745ce2d04f2ed1126bbd41c71d290955e @@ -0,0 +1 @@ +{"tx": "e82fd79b028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40002000000f2fd11988bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4740000000030e1c39504a9a063000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac9333884e", "prevouts": ["093f3300000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "1a28320000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09021ab944e180ca31231b50da81439e79b19f1d40a763242bcb978571d8e6bf01f0a6b4f8f4b8ae3b68cff1b3575eaa97c39ca283faec5f0ede51ed06900ef11a22af65cdc28f23829319f23532649532f496486515ea290ef6375ac45f938f02b4ca4da8fd51c2c5464b485cfdf6eedb5d4d45484487838fe9ee3532825c860e1a47a8069ea88787779140b0a29ac14c6b91600d4dfc4479c061f27887672fdea84d9949802016361d6a2523051964fd0bd11a94aae3293f2feea136dbf91290c456f4fd7484497d4bdf1b8d20d80fbe0e8d5df554c5ae0ff6e90af0eb14ae4c06504140fa117d39a97be2c5cf8627d99bd6003bf57f7f3c98cfc1f368f6247df366f0653c143c65b2dadd7125f52bf477865e4338d882d2ef44da0067f7c689b6961fd506cad0f2e6ae6193313cd39def5e1805323e1681ae3dcd73be7840289305d5a4eea7a5aad40ad12382eef9423be5ec5fb39aa9f3c76704a36b7df182cc128706dc64c925c9799762661f920a364b106bf396df366080905ca3aa74a5689ba80721df515c7740f565efbeced669805c90db9c75cdf15ed97ac6e98c7fdb106a7b1d40df5037554f1fb51c5f68d0de15f83d81177bd63c6dfa6c20345e816ca22a1a454dce2ce07087da3a56f6b18e5f1ac62e4338dab9a5a4aa6d0ceb14118bbbfe9b54c3c6a93898cc7465d767ee7d4474fd51d8ee52637c8051cb190c0ea86f70b6f90c26c875f9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0d5bb8659128f7d307893f477315172a6feef29cf3fc1fd27176c3d23e09b029752367bb7d11bbe7d9666c447942212a409021a53e3151df7f84d090727acdc4c9"]}, "failure": {"scriptSig": "", "witness": ["4d0902c2c3423ec372fdea4a6d2781f624ccf83906af35c178114f947f239143d19d3718b2b8b52c996a41dc4544ae6c1d446b137dfbedd48eaf00ea49b0cb53466edb1f67314c1d9c0c2f1bb74fffb92f83a91796513ce221c1c5b3cea15978aca386d016df8ad648359e1f19d81977a647cfc05e3be62c488e2178935a42ed4eea6b0a24b2ed071c0fd1a17f8a80e7bffe2c5edaf3d7eca0776abb8c6d68eb72bfcc7d72d344b9666c157db190b8463f4a4cee3a008b50fb1d8724e1d0871c5c789f8da4fa81b4cf23866c33de0b69ede882ec5789bf6dc770d3870c52b35e2cf4f1416ff279a7609982a29370ce24ee32474d17b51b860a2dac03cb6b83ff8ca36bc6efef6c641792a282360bd4d989ceb3b38999e3717b0637dc854611d7031a9d4c998afca5abb2cc7ffc306802130fe2a47d06547719c3a5d5bf29ecd9c381f3f3fda66a01ac744cd0756da364ee2a349f51c2f80e353a355dbe805ade1660d05647ba754f227b8034596d554e05d347bf0b2c1f3347c8381dbed6bf000cf381952e9c608561a07c23318d9b5bd3d53c4e32b27955fe7250c29126650449261c1ce399ae508ccb8c34c4266eead892eeb22a41115663209ea6c61d4218a8c393774508ff240273f8f0841af50fa11f267ce42c183d8d9d417bb23a1513ac4271cdf1d179f67ffd4719450e78c86a8f4876e4408cef099408a4d2a29e43e4f0861f66023fe400a1bbf87561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f6efdc35f2fdc8737195d16fefb12181ba8a3475ed2464c84ee729da1de50531ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045a58cdb730d5140e8751cef937639de4f5fbc77d98986906c68a7616d2fa212f87d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}}, diff --git a/txscript/data/taproot-ref/80b5c3a4f3efc732cfad5a798289e246619f8977 b/txscript/data/taproot-ref/80b5c3a4f3efc732cfad5a798289e246619f8977 new file mode 100644 index 0000000000..18336844bb --- /dev/null +++ b/txscript/data/taproot-ref/80b5c3a4f3efc732cfad5a798289e246619f8977 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41202000000c2df2cc2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3e0000000000c889220437d98f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a63a584d51", "prevouts": ["d5a340000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "1f1a5200000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "5c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936900f19854bc90d6c79e0184be6bef7ba18c323656bf267ebd46e4fd22ae910800ebd37c9b7767cfa75ada9a6605680756deb542ec34cf1dc29d9c7b172412f3174e87bfb4d3d415907d7a3196832fc57be4f6d746253c89a46e8e4c968740366e8f45a3ac55dff4b7d62b0bc42204f13e92c55212ff162d480a58edc7717abc8"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936369642414e3e6cba27e1a8d43018b0c6e901f2bd9875554ba9baf88aafe131fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e24e037abdf69c22f44b0c591ad93651f749184eaa819a8a63a5d4092bdddfb78f243c72f4e074898aab8058b3c73fee97ec3b9723e213834a8398e97170c1356"]}}, diff --git a/txscript/data/taproot-ref/80b9b953d5d211827d5046ddef05778d9e6fe889 b/txscript/data/taproot-ref/80b9b953d5d211827d5046ddef05778d9e6fe889 new file mode 100644 index 0000000000..abd464db0d --- /dev/null +++ b/txscript/data/taproot-ref/80b9b953d5d211827d5046ddef05778d9e6fe889 @@ -0,0 +1 @@ +{"tx": "c3f06660028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47b010000007a1ec183dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6001000000e09642fe0241047a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000", "prevouts": ["c7ac340000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "04b3470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_3b", "final": true, "success": {"scriptSig": "", "witness": ["e8ac4e116fd92452319a1cc55e5c83d33673880df2371ae4bb58250f6c2e0c0eadbf3d56f96a5c55bc8d5e4fdcbbfdb5810d8883e809c1c2c58b8d4f57703e9b83"]}, "failure": {"scriptSig": "", "witness": ["c975edc8daae13a6159ac81c4cba985c2834b2c25e887bbb6c48a3f68ac92345442389cf911d8b9ba1f2cf2ba8fcc9a99405e004d5250c6ff176cc4aae3d7c503b"]}}, diff --git a/txscript/data/taproot-ref/80ce5e7fb2b5a1cf0cf9bb4b9a786e4bf6735056 b/txscript/data/taproot-ref/80ce5e7fb2b5a1cf0cf9bb4b9a786e4bf6735056 new file mode 100644 index 0000000000..682d060d96 --- /dev/null +++ b/txscript/data/taproot-ref/80ce5e7fb2b5a1cf0cf9bb4b9a786e4bf6735056 @@ -0,0 +1 @@ +{"tx": "d7f2d62701dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1301000000fb32e38c04ad51230000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac80010000", "prevouts": ["1116260000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063cb68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e3dccf8482e84b4ddec6df4dd40915d9305dca15dfe62535982a83db5fc62d181ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900450e2995ea6b9af074c8994aee2f7f851552d9aec0cda14b2daf9a27b43dc2eeb28859d05a814eb862cab9a6acf3b7acf0881c47896b22b56466b77992f62c0511"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a8aea858d1ec7924adb827dda39bc25501e41dc8d888bd1e3815f5a6593acc760e2995ea6b9af074c8994aee2f7f851552d9aec0cda14b2daf9a27b43dc2eeb28859d05a814eb862cab9a6acf3b7acf0881c47896b22b56466b77992f62c0511"]}}, diff --git a/txscript/data/taproot-ref/80d98df3c15079be160fd7897dc74ef9a9b4774b b/txscript/data/taproot-ref/80d98df3c15079be160fd7897dc74ef9a9b4774b new file mode 100644 index 0000000000..1ff7c2b326 --- /dev/null +++ b/txscript/data/taproot-ref/80d98df3c15079be160fd7897dc74ef9a9b4774b @@ -0,0 +1 @@ +{"tx": "f566a34e02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbb0100000061ba5eab60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702c00000000845ff5f404e063680000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478735000000", "prevouts": ["da89580000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5ee4120000000000225120770a4859be8fbe7a841bd8e66a93f9515817dcc93bcbf3e365174d34bc6304a6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936460d293845900fca9c67e1db672bcfeaadc226f783a04384d1d04876572e8fae"]}, "failure": {"scriptSig": "", "witness": ["6a2a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/80dfc8a9fc0fe40ea7577dfd42a34b367905756e b/txscript/data/taproot-ref/80dfc8a9fc0fe40ea7577dfd42a34b367905756e new file mode 100644 index 0000000000..1fa58a28ed --- /dev/null +++ b/txscript/data/taproot-ref/80dfc8a9fc0fe40ea7577dfd42a34b367905756e @@ -0,0 +1 @@ +{"tx": "53f634e403bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8d00000000fb2721ebdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c86000000001da8c8acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5c000000003f491bb602892f0601000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7ad000000", "prevouts": ["2902640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e4a94f0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "e76455000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "f07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08235987c1d75c441670cebdf615816c6f42e3d99515a7a7b9841c20e75c916465ebec2e27f579b173781717090b44a070e7a8880532a05b17dc998986213b0a92d21741bf2762a3041d275698fd56a81520b6404e88c31ed080bdecc36c09cb10e"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936942bb4c31de59fc8dbdb77a6c08d9745d0ae402a84080ebd7ee34cdc7a4c1a1529259a32967333cc74bf44ff096d479961194fa0f97de632ce420fba7b687b9321741bf2762a3041d275698fd56a81520b6404e88c31ed080bdecc36c09cb10e"]}}, diff --git a/txscript/data/taproot-ref/80ed8061d1dc94f53f2e897f7421f7e7109037ef b/txscript/data/taproot-ref/80ed8061d1dc94f53f2e897f7421f7e7109037ef new file mode 100644 index 0000000000..d118567329 --- /dev/null +++ b/txscript/data/taproot-ref/80ed8061d1dc94f53f2e897f7421f7e7109037ef @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4f00000000aace61d9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4101000000718e46cd01acf570000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e4000000", "prevouts": ["a9c1470000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6", "1a5c710000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a6", "final": true, "success": {"scriptSig": "", "witness": ["821c257e5ed2521423b7500974532e621a22013791af83a38dcd2d4520ad76a52dce176b7f4bdace7ae038c1255872c30fdb4c4265ab8386111b394f0f1050bf82"]}, "failure": {"scriptSig": "", "witness": ["682aa0cab91cb477ca201a52de1faf92bdc48805833577035c57f575a4bf7daf103a3797b52ca761dcad8c8da41ebbd2d5baef8e75d8aa22c9ae427389ed8f7fa6"]}}, diff --git a/txscript/data/taproot-ref/8114bd4cff1787b06e5836915e62486478f693d1 b/txscript/data/taproot-ref/8114bd4cff1787b06e5836915e62486478f693d1 new file mode 100644 index 0000000000..98f85da36c --- /dev/null +++ b/txscript/data/taproot-ref/8114bd4cff1787b06e5836915e62486478f693d1 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6101000000fa271d9660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270790100000078cbba8d03582c3100000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1c000000", "prevouts": ["2453230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b6c010000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4f83673b9228ad584e3c758d3a7ef913b0130d95503994689e6b12c1cc0f2a2ca477f7eac6c013e182e33a949b526b028f901138401b50189d2a4f50cede7d4a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364a27ab33ad30c866663b6aaa2ec98e71770b4a6226bfe80c47bff7f69f5996db8ef0ecf285bc5470eddb41e1019d9d697e32571bfa8271cd432e6dc81a28355aef31942b1858214ae33105eca3f0b2cf78e8df05a3972acf71e40f309e975162b655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}}, diff --git a/txscript/data/taproot-ref/8114ee0d2c07fd933798fcf7febf9e08b6cf1043 b/txscript/data/taproot-ref/8114ee0d2c07fd933798fcf7febf9e08b6cf1043 new file mode 100644 index 0000000000..7d6da3c09b --- /dev/null +++ b/txscript/data/taproot-ref/8114ee0d2c07fd933798fcf7febf9e08b6cf1043 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4660000000079caaceddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9400000000319a8008014ac71c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a631000000", "prevouts": ["e90e370000000000225e202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "72f2250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_94", "final": true, "success": {"scriptSig": "", "witness": ["637df903528a2669960c10cf7795becf41f1f860494a168863b39218676c0c82e53e14409cfb5fe51bdc1860873c6431ccfb6b826d4c0f0b723a6669c08cabad81"]}, "failure": {"scriptSig": "", "witness": ["8b0280e6eca447946658aea61f185059689f16e6f65d76e3246fd3472322b4da51e9fbda0def6847213d6d92128dff0d1281c65e72da2efcb54d3837ad492ebb94"]}}, diff --git a/txscript/data/taproot-ref/813b01314937089f22d1d64ac7030c5da92ac36d b/txscript/data/taproot-ref/813b01314937089f22d1d64ac7030c5da92ac36d new file mode 100644 index 0000000000..84abd8bb82 --- /dev/null +++ b/txscript/data/taproot-ref/813b01314937089f22d1d64ac7030c5da92ac36d @@ -0,0 +1 @@ +{"tx": "392083b603dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf8010000000320c5cf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704701000000934072f4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8200000000df73f6d504ec96cd0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac1b08b24d", "prevouts": ["47805900000000002251204e3fb1c88f2893b13c1c33c3a0d0cd819c49ecb88ca3deab379ce318a8955811", "1ca9100000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "e5a5650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_32", "final": true, "success": {"scriptSig": "", "witness": ["e047390b6f2b815028e622b67a7c936b80e970c52de504236c67cbf13d8c9482ee5fe7f40e51fcff18c2e560c4af726b808d134b30257dabcfc414253719d5d482", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["72005ca1df610bee84eee7a8d8422d4d602e1ada34b64f16c0c11fe2d328f4612ad623f7286c59b5018e507e97b0c9efe07f71afec9ba04ad22cf5776ab96dbd32", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/814755d13f451119bbd6e341778fcca05d023f99 b/txscript/data/taproot-ref/814755d13f451119bbd6e341778fcca05d023f99 new file mode 100644 index 0000000000..2cfb65c2a8 --- /dev/null +++ b/txscript/data/taproot-ref/814755d13f451119bbd6e341778fcca05d023f99 @@ -0,0 +1 @@ +{"tx": "5c4be34a02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe001000000849623b560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127009010000005cf056c8010da88300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acf148915d", "prevouts": ["3a4e83000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "87df120000000000225120656f89671a8f47d6bf2e8e427ddcf5c0f85be8fade6cfb3bd1e5b2fd091df805"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "5a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8b94a0debb1820c84163419892bb0f6faeb0ccc065c72968f976a9287eda7854dee9c212f1ab0dfa1a42522b9ca3467b009d36f3b841f39cdc4da4a0520ce4fa4"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936552f570dbd2f2d23e23457387a9f0809f04049394e9226f0f3f744fca44fa69fb94a0debb1820c84163419892bb0f6faeb0ccc065c72968f976a9287eda7854dee9c212f1ab0dfa1a42522b9ca3467b009d36f3b841f39cdc4da4a0520ce4fa4"]}}, diff --git a/txscript/data/taproot-ref/8152fa388ef907459fca58c6382e7cf481e8b03f b/txscript/data/taproot-ref/8152fa388ef907459fca58c6382e7cf481e8b03f new file mode 100644 index 0000000000..2338e015aa --- /dev/null +++ b/txscript/data/taproot-ref/8152fa388ef907459fca58c6382e7cf481e8b03f @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa0000000003a5d8e9060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703b01000000b886ef2002b9017a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87de3e9141", "prevouts": ["613d6c0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "1208100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["dd4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb48439541955ba1ee927ac695664eb0a176a74cc392dce51705e9d682cc4042391e6ff37e966b1384c4d5bfa916e4482452180179a80b37f756d07f3e2976ea2d444f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}, "failure": {"scriptSig": "", "witness": ["4c52dd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ba6fa17392019bae4881bc31f2cd312244d559032edd01d38bf5ef60bdbbc9cb6537362191d9a5e0aa3a730b93b6f98a99ef63ed893bef4b9dfa7e3451eaf360e1f075c573bc42ff1b5fdcad1a87ebee849fc17bcfc5c414a2a4f901b5a19cd44f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}}, diff --git a/txscript/data/taproot-ref/816316a3b73af9b70141fff8b2deda8269d38d34 b/txscript/data/taproot-ref/816316a3b73af9b70141fff8b2deda8269d38d34 new file mode 100644 index 0000000000..e752726ad9 --- /dev/null +++ b/txscript/data/taproot-ref/816316a3b73af9b70141fff8b2deda8269d38d34 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd400000000b4b636e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4350000000068748b9903215e57000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87390ebb5b", "prevouts": ["0e7b25000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "a72b3400000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "8f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bb3df96467ce9fc7fc29c8ddd81586e6582039bc398dcb0af9e4be844b7de22da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457f8fae370a255a677f2f729010dbb329fa966ed9a0dd82e5083dd7ea90426dc47"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082458187dbd74455692a21727c8254a8cae6fcc3fc3c7e883861248db6e64d9919f8fae370a255a677f2f729010dbb329fa966ed9a0dd82e5083dd7ea90426dc47"]}}, diff --git a/txscript/data/taproot-ref/81639ecf4a65a0d2972d186cbca46aa48c408a2b b/txscript/data/taproot-ref/81639ecf4a65a0d2972d186cbca46aa48c408a2b new file mode 100644 index 0000000000..36ccfe8d88 --- /dev/null +++ b/txscript/data/taproot-ref/81639ecf4a65a0d2972d186cbca46aa48c408a2b @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c0000000003bd730a360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b701000000ad8a8be30263f44c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487deff4536", "prevouts": ["9cd63d00000000002251200fcaedfb972c31a562a88e2127675cb61d773b6b9ce4a4a9159012ab236e47b8", "09b9110000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93612b529b7bb29b24c3871885345303f71ca892c4f89489e73513829c3eaf83d96"]}, "failure": {"scriptSig": "", "witness": ["6a38616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/817d2dc89f753f1b403cbbdd6c078eeee50563d1 b/txscript/data/taproot-ref/817d2dc89f753f1b403cbbdd6c078eeee50563d1 new file mode 100644 index 0000000000..80fdab2390 --- /dev/null +++ b/txscript/data/taproot-ref/817d2dc89f753f1b403cbbdd6c078eeee50563d1 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c40000000009d51e232dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c42000000001c11fa30025f6fa30000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48730f47c39", "prevouts": ["9532570000000000225f202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "3d794e0000000000215a1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["ed9fd964f63d35214f9e8c00b0068cf2068da31bf44e5bc4957beee74745f0d1e21743e8cb3228f9486688a0ec355024ba54f99da996f1ec409e6279b24d6c89"]}}, diff --git a/txscript/data/taproot-ref/81873f88c2fbdb0a58e15e3492b63cb1eeebd61d b/txscript/data/taproot-ref/81873f88c2fbdb0a58e15e3492b63cb1eeebd61d new file mode 100644 index 0000000000..6552f1c92a --- /dev/null +++ b/txscript/data/taproot-ref/81873f88c2fbdb0a58e15e3492b63cb1eeebd61d @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270de000000007f4af652dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca600000000e56eff118bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48000000000454a026504e231a400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e79f410645", "prevouts": ["a4bd1100000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "f33b5400000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "67d540000000000021531f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93656b2e44901702d460c7de97890111dc615bb44671c92f59d31a1c2531c59c007affae472ebffc4152ddce3f20794b01737e96becc2bb4a1a296a47c8ec0d29af569af0f9e86656db21fe5e74d4bdcdfc2cda5437bccaf9e3d568ba1282fc608d76e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1f12e5bdadb74bb113beeaaa5995d4ebaa92337455ee51746db1fb6fe7db125e52d50ee9aa3de1fe988255b0d8b9f34dc2cecc4a96432b9f704e90359a06b468476e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}}, diff --git a/txscript/data/taproot-ref/818a1e4250991ce3f414e0f7215308cf2f23f7fd b/txscript/data/taproot-ref/818a1e4250991ce3f414e0f7215308cf2f23f7fd new file mode 100644 index 0000000000..2a3df3e6c5 --- /dev/null +++ b/txscript/data/taproot-ref/818a1e4250991ce3f414e0f7215308cf2f23f7fd @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a801000000aa951bf3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bac010000001c53bd7ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe9010000001c47564f026e879f0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca040a226", "prevouts": ["0c261000000000002258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "8c5a260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7f456b00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "b17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93631b8b349c71009dd0699fa095c14930b92d0ccc3f805605dccb4e079a114365fc037589144f6259b59768147ff9100354b3b8b337e77dac87d022b72101a452a989f510e73a03c44610e5cde856f75a0d7582565d561698089d126c5e7f66809"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366359014879f365de32ce308b078826923e3810adf17a39985dd2e1f4b53925a86d4441481b861885f5ed94900bbd5862c55ac99196b75719f05c0af3923d20525bc912f5bf4aa2c9ddbc9747d59c78f40d0a0aa0a8a4f22dc70e3f9cdb9b6ae3"]}}, diff --git a/txscript/data/taproot-ref/82050e725b7ee8e6090dcb98775499dc19017c4d b/txscript/data/taproot-ref/82050e725b7ee8e6090dcb98775499dc19017c4d new file mode 100644 index 0000000000..700ff4f217 --- /dev/null +++ b/txscript/data/taproot-ref/82050e725b7ee8e6090dcb98775499dc19017c4d @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccc00000000943576cf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41600000000780387a8028e4e9c000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac10010000", "prevouts": ["a4b05e00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67", "293a3f0000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6acf", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dacf42e82bb70907a1945a35a6e6e5987b28c8057479ae5c8d9a8053dc0ce2143f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828121d7901a27ea565e1cb6f91818c43a3dc8f46dc56db80c8bd3776430739107a653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e14d5a9b7fc917253ce709706ec0b90ac12c0f363dbc177a85b066bc4407805851ecf70b79dd1be85a38988f8929e7263abb01bba95965800009381ed351eddb0fa653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}}, diff --git a/txscript/data/taproot-ref/826b8362320fe6f06ab5a2f4b4fbf5c94448170f b/txscript/data/taproot-ref/826b8362320fe6f06ab5a2f4b4fbf5c94448170f new file mode 100644 index 0000000000..8f5dfecf5a --- /dev/null +++ b/txscript/data/taproot-ref/826b8362320fe6f06ab5a2f4b4fbf5c94448170f @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42b00000000ec4681d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb3000000009a1ab7c503f24e9400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac34030000", "prevouts": ["33df3e000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87", "787358000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["304502210086fd6f82cf9f17bcade605d0205e270a8df0beb7b5dc1c0ac7d9aea62967244902203d82f6f92e619a97b40933947edf1fa3acf9e8b4c1cb0502fadfe3a0f277eb2401", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3045022100a64cff4a632e760eab859075e6c7fb4875c413ab70ed25272ee4dba0ded87e5702204c828040502d9d3036480487652af08a9d9aa8629142899dcfec6b40631cf18c01", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/8283d17b50ed5619f147c5b35a8f94626b7d5b26 b/txscript/data/taproot-ref/8283d17b50ed5619f147c5b35a8f94626b7d5b26 new file mode 100644 index 0000000000..aec3da84e9 --- /dev/null +++ b/txscript/data/taproot-ref/8283d17b50ed5619f147c5b35a8f94626b7d5b26 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be60000000081cd06d2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba600000000e8ea84da04f3fb48000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c8e69e59", "prevouts": ["4c1b2700000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "bb67240000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "", "witness": ["304402201c6742ac2a1f0ac4c6da40bc3b37590ae74b22cc39bbbbad3cfbdbbcb477a9440220430741708bd41f2043ed464a5bef8a03c954a35030b5c85bae7f7ad86c841c7a82", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["3044022044f71b4c8b957ae93b353ba9cbe0821820ac7302acfb0994a8d29d76222a12b70220382530d71424d8bae92a654ad3fb69cb0cb5740a7d25f8bef56af2807301082682", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/829c3ad6c8ab04d87634c91b6fcd79faa92656fb b/txscript/data/taproot-ref/829c3ad6c8ab04d87634c91b6fcd79faa92656fb new file mode 100644 index 0000000000..84912537ef --- /dev/null +++ b/txscript/data/taproot-ref/829c3ad6c8ab04d87634c91b6fcd79faa92656fb @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707d00000000065ad5c8021cce0b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914719f78084af863e000acd618ba76df97972236898775967c61", "prevouts": ["185b0e000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93674456283e1c6db6717d3e15ed53ad7b64612fc008d624aa1e2dd3f9c613e2b4568c195719e600029237bb2bee296a81ae54a1bf44210bb387eff41995ca6f68fbfb640520cc13bd7f4751eea589bfdaf463667e9e3eebb3331ccb48f0e9ad4c4d3f52a2844c5f7874c7d430ecd2ddfcfe713e30c56da5784f950db6acb8f092a"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f6c5cdfdaa55ce393d431a80dfc39c32ae0ebbe82478f6b10a6f2143ea646fac82d044aa67ca69515bddcd39ff85ae31d999a9a5b32af0a0137c9fa4b226ee88d3f52a2844c5f7874c7d430ecd2ddfcfe713e30c56da5784f950db6acb8f092a"]}}, diff --git a/txscript/data/taproot-ref/82a84993b98a8fb62799914dc21be4be700e7b5d b/txscript/data/taproot-ref/82a84993b98a8fb62799914dc21be4be700e7b5d new file mode 100644 index 0000000000..bef19504ff --- /dev/null +++ b/txscript/data/taproot-ref/82a84993b98a8fb62799914dc21be4be700e7b5d @@ -0,0 +1 @@ +{"tx": "273ed95401dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5e00000000ab2de7d602a8b822000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac61b0b131", "prevouts": ["156624000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["bc", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900459312a224ee6564b861c658371f7a6f0026ad2c58d86ce869dc9b432e830a527104966f092bf1e4b4348fca11e7254311373308f7fc15e3d44d6a2afffa343c9657ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b04dbe1d7a597ef7e58582d6b28f055a2f440add2d85f9dd7bf5919989399b7220e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e14a8563068286881d42b1c4901d93a483973910fd5653bf7ebbf040741f7cd837150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}}, diff --git a/txscript/data/taproot-ref/82e6db8a76fd387b0eb64cb1d7bf968ef761fb96 b/txscript/data/taproot-ref/82e6db8a76fd387b0eb64cb1d7bf968ef761fb96 new file mode 100644 index 0000000000..fb8982db17 --- /dev/null +++ b/txscript/data/taproot-ref/82e6db8a76fd387b0eb64cb1d7bf968ef761fb96 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6c0000000082abd590dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf4000000001ad7dbb460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e60000000013b495130186bf0800000000001600149d38710eb90e420b159c7a9263994c88e6810bc720b41b44", "prevouts": ["0cc849000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "fc1a5d000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "703713000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ab1d378806798b040ca166344440300741f6fb82aa8969ca5a4c2b8cac21f271c2a3c32f2d98482ccc0ae7bd6919d8eb72134d3589ab943a0402c8a931ea420419704ddfd13dc63b1b4156372563d65f148a89e112fdd9cbf47f8afee5da0a9"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936282619f1a8afd21996d5c3a5869507072982adc0eccbed94d05afc8e7e03bbd81915e430f0db2345814ef782ce895d8c23952d8feef260d8eb90daec0803de3eef05bece11fc4259c24dede9b1787a65bcee91937b36a28d108e88384141e6c4419704ddfd13dc63b1b4156372563d65f148a89e112fdd9cbf47f8afee5da0a9"]}}, diff --git a/txscript/data/taproot-ref/82ec131b824b4c3f3757e1edd238735d0656fc37 b/txscript/data/taproot-ref/82ec131b824b4c3f3757e1edd238735d0656fc37 new file mode 100644 index 0000000000..c54736762c --- /dev/null +++ b/txscript/data/taproot-ref/82ec131b824b4c3f3757e1edd238735d0656fc37 @@ -0,0 +1 @@ +{"tx": "19d3c01403bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb400000000d4d080ff60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700b01000000657831fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49400000000aa2e2a9604f321bf00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f871a000000", "prevouts": ["0c0877000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "894f0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "be6b3c0000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_3", "success": {"scriptSig": "", "witness": ["f62e9109b0b954a14f4b2cbdd8ecf546bc9a0b1ac8497421ec4e80363047dc50beb837570521fa587ffef32067b49b072a0dfe4154ada7cbede415a8faa6fd3d03", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "503a1438c7ff5056987cc50215e85ff51437a7837657b729ad9904ac517f3ac825a81587aa5c780487ca9f74ea6afceb7a5561614c8a23c0cc32d3e5dce4affcf8d4f7e5fc1339f0249e98d9ee1b1404342cdad96f67cdac3bd316ca"]}, "failure": {"scriptSig": "", "witness": ["c6646540e8781cb72f220fb986f517249606cf46da2c22de89ce1bc6e9ec45343a1bc1d045931b5dab65ae615e882cef2a91cb107f4b2f94adb9fdc05d1395b103", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50b3ea659427b833b5edce881509000018807cc6d254cbc585da2de4f58e764da3b80d1687e73184a280689d8b65f9ef480f7338a84b9f1a694f309141ba2586f23705283a15a106ef6f99dda776763ae9f389417748182774fa5bd7224370fd1a9d16b994ea677f6763beddd17ef27f3889f3acb0b53016ba7f6dda39659b087b03ce98b46a122f39b5c7055215d3b2730e16a479d65f41392485bb69ed6549b90c76bdca86e78dddf6"]}}, diff --git a/txscript/data/taproot-ref/8336cc9fb782ee91ec2fca64631271cf0078de20 b/txscript/data/taproot-ref/8336cc9fb782ee91ec2fca64631271cf0078de20 new file mode 100644 index 0000000000..97be45eee7 --- /dev/null +++ b/txscript/data/taproot-ref/8336cc9fb782ee91ec2fca64631271cf0078de20 @@ -0,0 +1 @@ +{"tx": "1aeda83f03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9900000000a9e71ddadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1601000000c1e722ec8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bb01000000a0e9adf902bb0efd000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdf000000", "prevouts": ["6cae7f0000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "02fc470000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "ca9e3700000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cf27e6a544d4d056b81298ae945bd953114a4d53eb4cd249af296d27d349369f6ff84cb0de1f41d907799f0bb3a3d4c37b57eea0ba754203aaf5b7b2671fe888a4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac1cd6ddb9f33f1548d1cedeef681a9f9b56b8dfeb29539fb9e8c97369362df74052bd780e62e78eddfa6319e1e9b5f2922c9c635f126e8f8471707cb2f26f8c7017bb5ae96064d7d19e957b5258c9c864deb4239d29676eb164d7ecbdb9fd5a354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}}, diff --git a/txscript/data/taproot-ref/833a14196d27bc959251f1d19b9e4e6829d267d5 b/txscript/data/taproot-ref/833a14196d27bc959251f1d19b9e4e6829d267d5 new file mode 100644 index 0000000000..1f3f5862c4 --- /dev/null +++ b/txscript/data/taproot-ref/833a14196d27bc959251f1d19b9e4e6829d267d5 @@ -0,0 +1 @@ +{"tx": "bec0953402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9e0000000094ed6d9960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270eb010000004ac8e1f601e4ee1d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8789e0e922", "prevouts": ["686f600000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "10e70e0000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["fb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936832cdd808d94d07e5d991a3d0c5a8b4a06c9fcd7df1eeedb760eeb7a3be6ddfe43d925f8e6664e67417d113cf51c5b4c3126025efa5f83bf5b16dba6746279b738273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d466d9f82b2327fc04ce4429e47540ca0f52fd08e57643f6e07da44ee4246ab9eee8539df42e1fa2e5e9e7b75fbe1b52db879ec8a622b496736c99966ce19d0038273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}}, diff --git a/txscript/data/taproot-ref/8366f34c8cc56c4971befa8d4905f0f436bf6cda b/txscript/data/taproot-ref/8366f34c8cc56c4971befa8d4905f0f436bf6cda new file mode 100644 index 0000000000..434d309c4a --- /dev/null +++ b/txscript/data/taproot-ref/8366f34c8cc56c4971befa8d4905f0f436bf6cda @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa700000000ceefd48b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45f01000000e73d30ab02afa5b7000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7719a5825", "prevouts": ["0af9810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a25e3700000000002251205d2a5ec9abc88b8aa90a173ff406be7abff8b14799a4f6ae3ad10e99906551f7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a3", "final": true, "success": {"scriptSig": "", "witness": ["c041fec03511016f270e27d281cada38eae10b7dd1790a912e5dec61e295cb8f45e2b1515dcc23af7de4c27b6e0d1d75ffed8cf005bb3c1734d44393b153858402"]}, "failure": {"scriptSig": "", "witness": ["6ef33353ad367cdeefca9bfa0f7092aa788f8a6d8ff4b66f7814676037f15b20f9695bbf857d1d1c08f7d1eae4819be8079184ffc46332b9b2a41ee0bdb34abda3"]}}, diff --git a/txscript/data/taproot-ref/8393e8cc899fa71d1c638c5cb8eea55c40342700 b/txscript/data/taproot-ref/8393e8cc899fa71d1c638c5cb8eea55c40342700 new file mode 100644 index 0000000000..6420768e97 --- /dev/null +++ b/txscript/data/taproot-ref/8393e8cc899fa71d1c638c5cb8eea55c40342700 @@ -0,0 +1 @@ +{"tx": "aacaa01b02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1d02000000f3d0e9f9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c44000000008657808f03639ccc000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487941a2455", "prevouts": ["d91d7900000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d", "197d560000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f4b186db3068532a32fed88b54244ea5875c098571a7b8b359e587f4f4af633460b19c0accce5a24a056b98cce949d671afb14dd91d0cbdd469fc3f22c90b1553249301ac20ee33639c015b4a618b106ac87c8ade2ff7aca8998bda2366a260c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d0665fc26da953a71983666256fc3789345858164e4e7f74d6a240db5c0da6cab352ee2a6a8e236a875eeadb35b814571c290bf5fc32e6cf848a4bdb48a3dff6032c3262f8d7c29daaf8f9846bf0ed9dbcc4a0f9aeeb7c8ab8b4ceb985f45a6c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}}, diff --git a/txscript/data/taproot-ref/83945bfa970aa433de420b7ac4f4efcc297ec972 b/txscript/data/taproot-ref/83945bfa970aa433de420b7ac4f4efcc297ec972 new file mode 100644 index 0000000000..b5a074058c --- /dev/null +++ b/txscript/data/taproot-ref/83945bfa970aa433de420b7ac4f4efcc297ec972 @@ -0,0 +1 @@ +{"tx": "bbb137fa0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a7000000004902a3b1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbd01000000f5d511fb02eb6d33000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac27000000", "prevouts": ["1b9c11000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "1c9d230000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "c37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661e47f5626b1dee7ec991e30519a96bad8de97cc54e04912e68057c15d6ba2285a2fb75442cf9d6444c8679a19413f9a060e476aaf84ff603b3b22173ec950d19a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e8d213d90ee48874bbf2b18160b4fefa78452fd9fac91ad5f640de90a3ceda28c"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ecaceb5ed46230d7b49b5ab2b34a8a36729addbd68724e584e32fb6f2cc866bc08d213d90ee48874bbf2b18160b4fefa78452fd9fac91ad5f640de90a3ceda28c"]}}, diff --git a/txscript/data/taproot-ref/83970d72a6907256d4feab8e061182642c3d4b24 b/txscript/data/taproot-ref/83970d72a6907256d4feab8e061182642c3d4b24 new file mode 100644 index 0000000000..3453047685 --- /dev/null +++ b/txscript/data/taproot-ref/83970d72a6907256d4feab8e061182642c3d4b24 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ae0100000008a2ec32dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9c00000000ab39da2d03d6d489000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc742d7ef21", "prevouts": ["0d91320000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6cac590000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_4b", "final": true, "success": {"scriptSig": "", "witness": ["51c615f74c4bfb2a16f20334483ab145ee4219cad3738cc52c15ff3728d75f599768728bbcffd7ed615ac96674e46d7697c2a6da75a027df0c8143ee112870fd"]}, "failure": {"scriptSig": "", "witness": ["75e7c24a8ee892730f0f9c5f8f70babd35c480db5048f5818ad4db9f7bfdc255a98ef0f17c30ab9fda1bfd9c402304913022677fa539649b0e37cfedc2fbe4604b"]}}, diff --git a/txscript/data/taproot-ref/83b00e365af084f70ba64981a783c5ec81c0e650 b/txscript/data/taproot-ref/83b00e365af084f70ba64981a783c5ec81c0e650 new file mode 100644 index 0000000000..a61e742cf1 --- /dev/null +++ b/txscript/data/taproot-ref/83b00e365af084f70ba64981a783c5ec81c0e650 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f3010000005c7b308b013a071b00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac34030000", "prevouts": ["1fea3a0000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090256cffc752b1fdaa9103090c4c563227213be9648420b90299cb28c029182ea234713a9511fa6aa7f04776db56ae40e997cfd93d0b64614f5cb7eeb387a2a6843a073858936975d88f4e9824386c72d5d53a4ffdf59aa0c69c95ed081535f0dd7b61423cbbf043d0fa0884dba70416dd460f36da7a9510ec647a355a76c7c4b8c4fe3bf24a5ad7b7adecdc4207910251354bb2a1dc599176cb27543426ae01c41fc446658fcc908a31cdfc6351ec94e1d1d2b1dd938384c6692ab857380fc8575484c72b7af7cf97d68f68a066f8311e39b70a1f39f4b2c27df9ed77e24e3cd5c9fd6b99186f2a4dd1dfab7e293dda7e43fc979c5f06fab25271accdda3bc6eac852c44f02285ee0f632607404b8d042bcd1ab3069f528b63f6b59ec1354615795f965ba3d11e32e74cc8f291fb17d9bb4f90ce312b67dfb9706a117863c664e0de4cdd6f557c3def01e257b589acc5f5c70665abd50028fcc83b50894f57e279e39b4502023b402367806ef07bd1df63cc28991a8ed27646da3a912b224590aa80bd05113cadb0238eff5e29e876e53a08f0f051fc97e8086b8d43a11e3d1c917b10343f5100b293aa24874a3468c99c3a6447074d55d8dd0112f1e88b87c5caae6cd27e8f40e234750956f0d527fc81d00b6e450723ea14c532738a1d10ac8181fc1098cf4104ad97e3b8a6f7d2dd1bbd449d4e49e1d897092ee3ed53b05f446ef6349fa00dfb37b775de", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cdbe36c8d36f09fc182996d5125522ce46e288b7df8e779685b1cb3e493768f59c9e480d0f492be6e2f1ef49af1ad63a3a1c7bbd1c59ad16db6c35add41291c9811034f174cb7bd77652d345f06878a8d4eb3ae1b92590cd10e2563bf228d2d6bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}, "failure": {"scriptSig": "", "witness": ["4d0902e119470798dec3b186efc64abfbfc69df83ffd4de7ff38e90851e04a31a86c32dec05d0d32ecc4ae8d89d335dd8ddff1e69c0d8725520a39005e646340307e8fa2ce21d59ac1296a589002a00340a34b06008e322c294d663639adb40cf728f594469af8623bdc42071077eadf05c3b187bbc23c145b4fdaa37dc8d3a135a8c330109eee5888856ddae86b7979c8f53dfea489c09ed94d810409f39edce217398cb965eaeb8d6142d947f6e1d05bf2c4909b5bbf372f0d14ac44aaffb6f23bf153553298952cc2953b453fb575590274f017969bef4786deb21f760973c458dd2ec859a0dc6bee24a75c07a3a5e5d11a928c2754f1752db28aa34643686d24510b20296d8cdf965130a8c5e47c848cc043df8b181745e750afa49473bdf49dac963c8628b74ec02152a5b155bb108813c3e733969bb9f014d864b204eed6259d97f70e393bfa58c0ff3dd77901d5a4869053b0822620310d2b34671f58bc9439d84254644300966320ed74992d83086d98ac0f34062d664c2065a49b3b0f130fa8f936abd16709e13341ffa0179a276001885b7614bfc5a392f7bba574945f9cd6f40663ba65d6e7980145d5dd25abae21f724815565699d5df6be0ded72b459ef2cd853fe0e1f1e64be7bad4343ecf404e24b163faeb24755f4c8d29093b769c2b9bec3f8133e7f5a5bfd7b69932d0060858ce7e2172cad96d0ca4fc5d5f25368b9eaecd8544f857a7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365ab412a59dee6e3fdf14a7910ee01c80a0ab04929895b54093d5d7f83333528720e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1aac1f02719ff09c82d93c60ae8b21e31f1ec3fca4030b09dbe2604c5a66091c209208a3d5cb0b20fec302022af702ea090b934668d0752a16a75cba2aae8c677"]}}, diff --git a/txscript/data/taproot-ref/8434ef7375003e0e049d9248cca04a7d89a51736 b/txscript/data/taproot-ref/8434ef7375003e0e049d9248cca04a7d89a51736 new file mode 100644 index 0000000000..273b90e9d7 --- /dev/null +++ b/txscript/data/taproot-ref/8434ef7375003e0e049d9248cca04a7d89a51736 @@ -0,0 +1 @@ +{"tx": "56b4ad660260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708400000000a354aaeb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c6010000007d9bcf8c03f5b61c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e746000000", "prevouts": ["81920e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74e50f000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_65", "final": true, "success": {"scriptSig": "", "witness": ["c67a892674b55913536a1b86e02331a59492878def3d40d83fce5ae88ef80e4f93a32d8e933002060e26448685db9c2ee46d4bbbb8366733c24e8b16ab831f39", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3f1ae307735c7bd08745d9ba68a62c09e9ed48f39450a1cfbfb5eb7198e9c97a625a50692c1977c346a20d99f4b6490b8b4f304cc559c17d8e2c7528b585404b65", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/8442ffd276255dd9c5995c977f30f700234f866f b/txscript/data/taproot-ref/8442ffd276255dd9c5995c977f30f700234f866f new file mode 100644 index 0000000000..c86097d517 --- /dev/null +++ b/txscript/data/taproot-ref/8442ffd276255dd9c5995c977f30f700234f866f @@ -0,0 +1 @@ +{"tx": "359812e802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7201000000f61b3eff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47f00000000acc258aa01c7a31a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88accb010000", "prevouts": ["d21d2400000000002251204aa7ef3c48fcabcb6102b9295fbd3d8d5e51a18011383dd7b1650a23dcb19459", "fe98330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_6b", "final": true, "success": {"scriptSig": "", "witness": ["8829f4ad8d433e9a75bea23a67abc1f638720439cada1378d01191f39dc386c762a8fe2ad52ccb4cf539506fd07fa13585108f9cdf3f5bbdb913b4fe34cebc9702", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c8016b6737c31aed802bb2d0c0c4692101d96dc8874a8037bae43314f33e0a9957ccfbe9b59bdb35a6fa58d9bc83327587deab6d9366a21d62fd17ce7aee6e716a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/8462f1863bdba9f38df24dbeb39d9be31a8b3d93 b/txscript/data/taproot-ref/8462f1863bdba9f38df24dbeb39d9be31a8b3d93 new file mode 100644 index 0000000000..403dfb1a5c --- /dev/null +++ b/txscript/data/taproot-ref/8462f1863bdba9f38df24dbeb39d9be31a8b3d93 @@ -0,0 +1 @@ +{"tx": "a16810340360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270320100000001d67dfb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701a00000000ce8a8e9e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40601000000d70e389401384e260000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79622030000", "prevouts": ["40320f00000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8", "2701120000000000225d202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "41d2360000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "d27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f894c78f54379a902572b9ff840f9e21b54e663bd24ed566c0b03aa8c4c0e0a633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a9b801fc18e2353a9cd4de337bb33433fbe6225e21bb8b5572b0acaa50d11b7f3"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936285975d087512001f0808626ddb099c402deab2a31fe6815cda4a96046af47231260ed9ec9ab1e79007d15fbab81df65c0fb14652b0fe58f2b730a3e13657de0e39f192d4dec24b48e9231a08b7d2e64fac2040aad69c16c1d9eedfe5fb62ebc"]}}, diff --git a/txscript/data/taproot-ref/8478b1cc13202df27bd080e55410e541629423e8 b/txscript/data/taproot-ref/8478b1cc13202df27bd080e55410e541629423e8 new file mode 100644 index 0000000000..8366bb1c92 --- /dev/null +++ b/txscript/data/taproot-ref/8478b1cc13202df27bd080e55410e541629423e8 @@ -0,0 +1 @@ +{"tx": "faa2764402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c11020000009f2c27d5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b77000000005ce06ec703e2aa73000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6fb35962b", "prevouts": ["7b284e0000000000225120e0ca4cb327604d8bb54d855256413a632bce5e2185126ca2f73680d7829d5a91", "ad77280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a93db9de682c659f71e2df2283b4442c1538d3696de14cf44411646e85b3f4a8"]}, "failure": {"scriptSig": "", "witness": ["6a6f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/847ca904186295e8fd47a4e29885615907cb992e b/txscript/data/taproot-ref/847ca904186295e8fd47a4e29885615907cb992e new file mode 100644 index 0000000000..ef281bba6b --- /dev/null +++ b/txscript/data/taproot-ref/847ca904186295e8fd47a4e29885615907cb992e @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41a0000000077b56489dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdf0000000045bcf180046ed1640000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a647a36e60", "prevouts": ["e4d03d000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "4dd2280000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "be", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93659372e262d5a0f9ef536aae388303ac1332900989a5444d826ec2580d67fc3a21a521886ab29756862a71c0453b77f880429f1d68b1fae0f34d555c1e4747b3e7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a5bb2be9c002390585aecd6a44dd843628783a58b1ff5512778ad80556de83f015cb0c87b91becc5e8e88545f518ccd4dd82a3936db012f0c0e2ff8a479534101a521886ab29756862a71c0453b77f880429f1d68b1fae0f34d555c1e4747b3e7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}}, diff --git a/txscript/data/taproot-ref/847d38e6322523b12583cde1ac03aa9cb6c11494 b/txscript/data/taproot-ref/847d38e6322523b12583cde1ac03aa9cb6c11494 new file mode 100644 index 0000000000..921b8647b0 --- /dev/null +++ b/txscript/data/taproot-ref/847d38e6322523b12583cde1ac03aa9cb6c11494 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf60010000006c56fddcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf700000000cc52dde28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41200000000d0282f1d047d49ca00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d8000000", "prevouts": ["a7a86f000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "7af02500000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "2e6e3600000000002251200fe4658e0dbf66b6be10f530376fb0e6dfa185e9d7f38ef5d5af1eba17e45594"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d06edae5b29d15a8589ecda9763945c36b5c241cf3df1afb796e5c490e9af3a4"]}, "failure": {"scriptSig": "", "witness": ["6a5b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8485b7daa7b9582b7257e4ad6aa767ad9b2c7173 b/txscript/data/taproot-ref/8485b7daa7b9582b7257e4ad6aa767ad9b2c7173 new file mode 100644 index 0000000000..92a3ba4b02 --- /dev/null +++ b/txscript/data/taproot-ref/8485b7daa7b9582b7257e4ad6aa767ad9b2c7173 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe7000000001665f807046b096900000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48788f9e455", "prevouts": ["ce146b00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "c57d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363de8b7b4122057e6036b6b3743e89ea35e047ef60fbd0be824b8516a5d1bfd004639ba4332756735e08e9dd0c9395e600a8a67669bda3acb22644b013566df8000378a892e4dc43a17c9ebd71803200f2f24c9a40c2827c304e59be9b4a7df0b"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826d35158b06e93427cedf9700445f423da8a62a86b9572893cb3b0c5b8130f93e00378a892e4dc43a17c9ebd71803200f2f24c9a40c2827c304e59be9b4a7df0b"]}}, diff --git a/txscript/data/taproot-ref/848ef68b2028c2d1d2c774427baef8811e6973c6 b/txscript/data/taproot-ref/848ef68b2028c2d1d2c774427baef8811e6973c6 new file mode 100644 index 0000000000..764601be43 --- /dev/null +++ b/txscript/data/taproot-ref/848ef68b2028c2d1d2c774427baef8811e6973c6 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c900100000041cd9365dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb300000000928020b40148ac3f0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e734010000", "prevouts": ["e292480000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156", "0e52270000000000215f1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364f8c4c0241059f879e07c0bc8f393a68e96022201a845cb28a0ca7d7bda2740f4b04f8f54a0a76ae0e4c7aeaaef28ce29fe1b2cd8b193a4d28e758ec231d2b883bd198ccbfa9c702c0592bb8c84a948c36ef9eddfd1aec8278a333dab45811656e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93665513df49044bb35b46ae900575a7eb3f6e681c52a9940fe88416598d87c452a3070c0d29d47e9fe7be7df27becdaf45cc7da31561e827162b16aa01fe84c4a24f44ecb3bab6b962a7ffa14a2ce082ec551943f33ce508b63a8ee30ee5e49264"]}}, diff --git a/txscript/data/taproot-ref/84b78b9ad073a948405f0b7ab62f9f69118ba8f0 b/txscript/data/taproot-ref/84b78b9ad073a948405f0b7ab62f9f69118ba8f0 new file mode 100644 index 0000000000..3066b77180 --- /dev/null +++ b/txscript/data/taproot-ref/84b78b9ad073a948405f0b7ab62f9f69118ba8f0 @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5000000000de02e99601bf326c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876d010000", "prevouts": ["5f74740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b4", "final": true, "success": {"scriptSig": "", "witness": ["ab872e6a59e30e38791afbd7e3e528b83731d6ec6a91b4a195a975bb55dcaa8f2c6b2d1254846413fbd7ddc33eadcd632914a4b1726ad459f5156be39b459dda83"]}, "failure": {"scriptSig": "", "witness": ["9b036a78fc192e530dd3291f0394faa404f3a9ac30ce54008d17049cf08ca28373d7770948cc4a4daec748f6d28161827ae03e5072c1d9ced55a995ed3343e41b4"]}}, diff --git a/txscript/data/taproot-ref/84c54f3da6a5e6fab8e1f0e9e437a602b838b808 b/txscript/data/taproot-ref/84c54f3da6a5e6fab8e1f0e9e437a602b838b808 new file mode 100644 index 0000000000..6a6ac6aae0 --- /dev/null +++ b/txscript/data/taproot-ref/84c54f3da6a5e6fab8e1f0e9e437a602b838b808 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd700000000fbd7ecb1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0f010000001dc16bf4039bbc640000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca8010000", "prevouts": ["f84c4800000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "ac261f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_91", "final": true, "success": {"scriptSig": "", "witness": ["a8b0ccd91053aa6f75806777f49917fbd414369473204b5304e83df5fa9f9b01aaef1e6624db43330a47439ff3982c569c36aa3665f167e2396e7281000eea2903"]}, "failure": {"scriptSig": "", "witness": ["165a25b414f4fac76d97b5945bcfd00721eeaf105c96d4de1e08b03838d09305b861aca6404486c92c4c1da4b33f047ce3d7be1318fbf527c3c56dadb3179ecf91"]}}, diff --git a/txscript/data/taproot-ref/84d1cf1063766590aee538d2b55b7bd3698c0de7 b/txscript/data/taproot-ref/84d1cf1063766590aee538d2b55b7bd3698c0de7 new file mode 100644 index 0000000000..c5e3ba3c79 --- /dev/null +++ b/txscript/data/taproot-ref/84d1cf1063766590aee538d2b55b7bd3698c0de7 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c485000000008b339dabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0600000000e4e34c2901612901000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48716040000", "prevouts": ["f0d93500000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1", "dd75230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_77", "final": true, "success": {"scriptSig": "", "witness": ["8a2d7940f583926ef1d2b26a5caf70e9a1521d8003a94aa2d109a81bceb8463cb5aed13b1030978dc80fc2ccdb4406e1bb280185d4d66f1892bb93e95d780bc302", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["de5a9ffe358c6f96c9b9b36b0a33333da6539d4cf81964c1b77807df3c5ea75baab5adaf0a5bbe117389accf1ccf1ceb8e5ef1fa9868dfcaafec87001a519dc276", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/84dce9fa92c533d455e0c1f97179960220f0a855 b/txscript/data/taproot-ref/84dce9fa92c533d455e0c1f97179960220f0a855 new file mode 100644 index 0000000000..a0706edfc6 --- /dev/null +++ b/txscript/data/taproot-ref/84dce9fa92c533d455e0c1f97179960220f0a855 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfe00000000526d26b7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2701000000c3f9d3d90238f9730000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79600000000", "prevouts": ["20c81e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e96a570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_1a", "final": true, "success": {"scriptSig": "", "witness": ["6e3d234b45458616b432f951eaf3bfa9348f9d18eaaa57f5928eceb141a837f2ad2d54132538b48ecb27e077ca4a20fb4cf5b96fb4f7351a535518f8abde92ae81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["d5f63c5027d4441a79055ac686bf7196a0ae298d677ef524d0d3d17ebf91a971b13331950a51a4d2f2ef752758c5556db444d993abbecc461172f66cb304835a1a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/84f74ecd7dcd980cbe8f5c5df3e9de9eb9e2198b b/txscript/data/taproot-ref/84f74ecd7dcd980cbe8f5c5df3e9de9eb9e2198b new file mode 100644 index 0000000000..154a04af71 --- /dev/null +++ b/txscript/data/taproot-ref/84f74ecd7dcd980cbe8f5c5df3e9de9eb9e2198b @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0d00000000c0b8e70b04391d53000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac50020000", "prevouts": ["fffc550000000000225120f98f853e6b4327f1b4277c37b28aefc415c1e953b3fa9f1ef781dc42a80d9b71"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f7693534e61619efc826df84c4da4b2cac3827d7f1ac50b56bb7a432d3ab8c0"]}, "failure": {"scriptSig": "", "witness": ["6a3f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/855137df77e723cfc86499f4fdb99f284ce7dfb2 b/txscript/data/taproot-ref/855137df77e723cfc86499f4fdb99f284ce7dfb2 new file mode 100644 index 0000000000..eb998d0c77 --- /dev/null +++ b/txscript/data/taproot-ref/855137df77e723cfc86499f4fdb99f284ce7dfb2 @@ -0,0 +1 @@ +{"tx": "0a67d5d202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf03020000001e51faa7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7e0100000001bfdca8034512b7000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac9d83214c", "prevouts": ["bb446500000000002251209884719338e1397826c7fc76b57dc9070e1ae6721fe0f4052d3f32cbc4476e6a", "857d5300000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "success": {"scriptSig": "", "witness": ["9a93579f0dbc902f20eb3236a29b7795691edc34488210105260dc33c84244ab7a8be3bc9902ab848f83aadb729fa498e01c72a0b8ad9cd2f7360cf8a87d8342", "dff13c08fd97ac682a573ee694c37059b46188b1d526eb3d271d01abf3d3e8141f8113c8d0fbc0a74cdd677197f4ef907c45ea3af9beafd302ad0312f7a0ea52fb2545864d1d7b63340ffe54c9415e1965ef3e433b5bc241e80c610ff8ca934ac9a7d7de52c4fdd78d25726174f2eeb3ba10eefe1fffbc06d2", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aa89738a4c7df4b7e53305df69816a357977ae495ada28d1f508ae0a3b0f08607008d2479bc8b48a246a101ee4b49f0a15a2b0675f0b4b0afee40f21d20b176002322d9b2b60b6e4fd37374163d324c1a6de10f97494d57fc835c33571c5954c8b48a46ebf64bcfb2c54503bf63dee8c40bb51ab59d3df7fecd6d739cedcfe31d768c3c060aa2af011a8ed5af22581cd10184f0ac421571baef6daffb4794bbab275aef13afd117b1160c12da710c6f8f8edb229a889aaf5082ca0fb234dad31bd7a0a2c186fbb5f5bd36ce6bf04ff01cc35949f4ca5d8c5226548c44d324f93473662e31fbff764a3c491e007914a33226c3cae281cdd07f30e6995bef0cf025c2274a75cb4b6ac9405a299cdc7fe3c10b56a5a3133c41cf4007b7e1d7f7a0ad997ed7d66498ec30b5244ac9c72026ef3138743e712b33a45d0b4b81becfa754e45f14ca2740c90eeac17126f8b08e6fb37566a8e657e0f4666eb6c857038e6d4518202151ea7f2cb6516f16339991381e736cda7031484c4b5efcec0f41a079773c21fcf7a9e922d8f9e257b114c80cab1157d015696785b2f06431a2263750000000000000000000000000000000000000000000000000000000000000000", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["9a93579f0dbc902f20eb3236a29b7795691edc34488210105260dc33c84244ab7a8be3bc9902ab848f83aadb729fa498e01c72a0b8ad9cd2f7360cf8a87d8342", "6e981877b4503e0d242ccc256516bcd30cf0d06ca1dfdb0fa15eae4e28be9e0dc98570a9028366a8c3563759719d1069bf15b93b893ef58bfc4ef0a14f650b96928d0e6a55f94b099e0022f47650fb9377a072b994b16763e14c6e3406f2e806393d50459b72167ad8f970852979d4d127b5b22aa951ba2f", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aa89738a4c7df4b7e53305df69816a357977ae495ada28d1f508ae0a3b0f08607008d2479bc8b48a246a101ee4b49f0a15a2b0675f0b4b0afee40f21d20b176002322d9b2b60b6e4fd37374163d324c1a6de10f97494d57fc835c33571c5954c8b48a46ebf64bcfb2c54503bf63dee8c40bb51ab59d3df7fecd6d739cedcfe31d768c3c060aa2af011a8ed5af22581cd10184f0ac421571baef6daffb4794bbab275aef13afd117b1160c12da710c6f8f8edb229a889aaf5082ca0fb234dad31bd7a0a2c186fbb5f5bd36ce6bf04ff01cc35949f4ca5d8c5226548c44d324f93473662e31fbff764a3c491e007914a33226c3cae281cdd07f30e6995bef0cf025c2274a75cb4b6ac9405a299cdc7fe3c10b56a5a3133c41cf4007b7e1d7f7a0ad997ed7d66498ec30b5244ac9c72026ef3138743e712b33a45d0b4b81becfa754e45f14ca2740c90eeac17126f8b08e6fb37566a8e657e0f4666eb6c857038e6d4518202151ea7f2cb6516f16339991381e736cda7031484c4b5efcec0f41a079773c21fcf7a9e922d8f9e257b114c80cab1157d015696785b2f06431a2263750000000000000000000000000000000000000000000000000000000000000000", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/857a099c2b46ccc02b866b3d0c0eb37858af7f6b b/txscript/data/taproot-ref/857a099c2b46ccc02b866b3d0c0eb37858af7f6b new file mode 100644 index 0000000000..7b2cb0582b --- /dev/null +++ b/txscript/data/taproot-ref/857a099c2b46ccc02b866b3d0c0eb37858af7f6b @@ -0,0 +1 @@ +{"tx": "aeb1416d02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1400000000d2529385dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2f01000000774ad9b801e1a53e000000000017a914719f78084af863e000acd618ba76df97972236898769876854", "prevouts": ["c5d0730000000000225120cd23ad59c6016ee1812d662f3dfa4b488c728badd6e7eac21806d0875fd86aaa", "03124a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93659b2dba12142179b1097cc93efd347ce95e71dd12a795db31a4271de04236572"]}, "failure": {"scriptSig": "", "witness": ["6aa8616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/857c4d2b4cbe976e614059e4d9eeb613c69a523b b/txscript/data/taproot-ref/857c4d2b4cbe976e614059e4d9eeb613c69a523b new file mode 100644 index 0000000000..d23b12cfec --- /dev/null +++ b/txscript/data/taproot-ref/857c4d2b4cbe976e614059e4d9eeb613c69a523b @@ -0,0 +1 @@ +{"tx": "deb4eb260260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708801000000b89731f8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b360100000085b672c00156510a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a698744740", "prevouts": ["80ad12000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "eebf20000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "3b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93607ffa4357b1418f2570d4fe87dfe37d7ee3541eab3f2e6079ff7fe47c21164c3ee7dbe7f66d64a980d12157b84c42445cf47ca482a00d5396c717810eb35e86629f15cefa9911251712bcf83078e1db490f7db40c14a26e0e577f39f7cfaf11f"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e29ca03a9371c532b03ec93c4ffb27f967cf1c414c08502d0b6e094a92f799b5fc7fa9328de6285e10958c6b3d6f5d3c073b4c582e31cb42904dcf82d4bed78a29f15cefa9911251712bcf83078e1db490f7db40c14a26e0e577f39f7cfaf11f"]}}, diff --git a/txscript/data/taproot-ref/858fcb46fd11dfff505511ab32c43de93cb923ab b/txscript/data/taproot-ref/858fcb46fd11dfff505511ab32c43de93cb923ab new file mode 100644 index 0000000000..e747e8c511 --- /dev/null +++ b/txscript/data/taproot-ref/858fcb46fd11dfff505511ab32c43de93cb923ab @@ -0,0 +1 @@ +{"tx": "e714d45702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf73000000005e8f3194dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1b000000008732789101f288010000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e798010000", "prevouts": ["9d317d00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "c26c240000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "be7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd522f1cef67c43cc160020062cdc11d631b4f6eefdd5e68f18dfd86aed0bbdde4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8c20793b34d3eca391845c9ee05577f0fe1c8a49b621d2ce1a9da4783f236266e6f69f1f3a976918b4a05b157c0a8e21d478cce8b5d78fdf690138c8d187dd5c9"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb7c20d175283666615e94eef717cc04c54a6d9612bfb359a13b4f03ea50e15671092566d000aee18de877d7d37a6499dcaa40717b87fb42c4af8a156e9c8751ba72dfb389a6a0bb3f8b3aa7842bba2225719f72a11deb6eb959f4e6afb1e08b911ebac8c921821ba74d98d656401ec4b56b2bfe8f672693a939227457b8b1a2"]}}, diff --git a/txscript/data/taproot-ref/8592c80000cf304bf52753ab309ceb04e2652ec5 b/txscript/data/taproot-ref/8592c80000cf304bf52753ab309ceb04e2652ec5 new file mode 100644 index 0000000000..5e7ae0226f --- /dev/null +++ b/txscript/data/taproot-ref/8592c80000cf304bf52753ab309ceb04e2652ec5 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff0000000009808edabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba601000000851525c48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47701000000859dffb10302a2e2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374871878ff56", "prevouts": ["74b9810000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "6309280000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "0ace3b000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00639768", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082088456232115bcc24dec0b5a24cea45f7d15fc3427ff6cd91fcf5dc3f7efaf083288455e3867d2ff7594cc417650f42f79f93c98aaa5c5ef25eb3554c8bf2ec6282285524a15c732567d099967405d35f7136f74f48f011bc4ab279ad8d14f14"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd36adc2e08ee387ad104b346fceb00365162d18a911b71ada63b74469326ca305f4756eb22a3c38e0612932b2e111811a644330efb7a4d77fa512235b8ceac2f213b900f5cb66b025bdcf0538d69427e8f93cfc9741b2125e61cf9215fad53f373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}}, diff --git a/txscript/data/taproot-ref/859bf525139277f5088a3ce814f120ba25928ba7 b/txscript/data/taproot-ref/859bf525139277f5088a3ce814f120ba25928ba7 new file mode 100644 index 0000000000..780881d543 --- /dev/null +++ b/txscript/data/taproot-ref/859bf525139277f5088a3ce814f120ba25928ba7 @@ -0,0 +1 @@ +{"tx": "bbb137fa0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a7000000004902a3b1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbd01000000f5d511fb02eb6d33000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac27000000", "prevouts": ["1b9c11000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "1c9d230000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "cc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bac3d01da396ed984241b54aa1bb3aef909b4fdbe414b6dae042f63774e412bba22abe4a548a0fc6dfdb5b637d4f02bd7b4a4be5fc13f7c30d33fe8bd172a30474a999e2826f1f27f01ebf91ad073bfebeca039a55919a1ef327838bd290026ec1da8cea892037e805a477afbb54b1f5ec380954f076c0bcd3c4e3d4797a8d6"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082af68f276ddb4c0fc7f0310a620a2f1f9fe6c0e4e29d0e280a559099e56625bc6391effb841e4c3f4ca92b599bc572f2bc6440711e20bdc5ba4fc353379105b198f95dbc4edc81931664a748b39a9978dd32dedaf5c850114f6bd2f5098c050fb"]}}, diff --git a/txscript/data/taproot-ref/85c3b1c5bc8469eb9f51ee2b19c514d2dcc9d4e5 b/txscript/data/taproot-ref/85c3b1c5bc8469eb9f51ee2b19c514d2dcc9d4e5 new file mode 100644 index 0000000000..866926cff4 --- /dev/null +++ b/txscript/data/taproot-ref/85c3b1c5bc8469eb9f51ee2b19c514d2dcc9d4e5 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4020200000098371f3adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbc01000000059cb1e5044b7b7900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6f4010000", "prevouts": ["a15f32000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "55b04800000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "a17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c812096c7134552cd7fcb4579ca5ad4743c34f32df04030bf869cb557754a4a4fb15e70bbc27f4f9ee6ce894c5f8660c4bc0a21501abf5c583e18e279746b733479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae668dba12609f1dce2a1e29faaa62ff248d54f408b31ef31944f67a579d4fbb4"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e856012e14d1393796178822b876e37f88bfb8786abf6d56f290a567bb98032f4de668dba12609f1dce2a1e29faaa62ff248d54f408b31ef31944f67a579d4fbb4"]}}, diff --git a/txscript/data/taproot-ref/85c9ddc38fbb85bd175bf3ac00a626752b964461 b/txscript/data/taproot-ref/85c9ddc38fbb85bd175bf3ac00a626752b964461 new file mode 100644 index 0000000000..b65e5aec54 --- /dev/null +++ b/txscript/data/taproot-ref/85c9ddc38fbb85bd175bf3ac00a626752b964461 @@ -0,0 +1 @@ +{"tx": "2168928d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b680100000082a688d3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0600000000b79a99bf04f55a8e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ace8020000", "prevouts": ["0ab323000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "5cb06c00000000002353212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["9621b319c232918a7110a0dda37564d742a55c1be3d598ea7d166118b890070cac09138ae5f98033b6f64e501f2c6196913f21224e80329f83922ebf9ff84a92"]}}, diff --git a/txscript/data/taproot-ref/85cd37fe2c7301fdbdedfe4eee2559a27232c9e1 b/txscript/data/taproot-ref/85cd37fe2c7301fdbdedfe4eee2559a27232c9e1 new file mode 100644 index 0000000000..a4adf4713c --- /dev/null +++ b/txscript/data/taproot-ref/85cd37fe2c7301fdbdedfe4eee2559a27232c9e1 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffb01000000542e9722dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6100000000f28b12b601df1e4500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac50000000", "prevouts": ["54a96e000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "b69c1f000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "dc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082276acb01c569c39653cc9be144b4517abeee153b1e65c2a7dfaac73ffa4f7941ad29df8a0e62e4f40897f8996914b12118c918ca2851b639742aeab01f587290"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ec1c00ca223002bbb4a77b296f490434ed2387551884308e16e8dfcb52ea12e9f3bfe8b0458382ba4f4ce4b13b8b707c198a710172b0004e49e202e4d70abaa7b"]}}, diff --git a/txscript/data/taproot-ref/85db7ff2b922cfebbf367553f67005a39f7c7481 b/txscript/data/taproot-ref/85db7ff2b922cfebbf367553f67005a39f7c7481 new file mode 100644 index 0000000000..c67b4336b2 --- /dev/null +++ b/txscript/data/taproot-ref/85db7ff2b922cfebbf367553f67005a39f7c7481 @@ -0,0 +1 @@ +{"tx": "0adb3c5a0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c30100000007c9f6ac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704a01000000e25f26870387721e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2a817952", "prevouts": ["569012000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679", "59830e000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "6f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936543e4415e2a4e40b55ce2e476aee6da566062b9d3b6813c54da2c8fa9b5db829796126e2d69a152489172163b4bb3b76a5285668b37fe09a10764d2324ee4a01a6ef766bda57b4717926485a86d332fc460fd2733e6a54825f17015621dd4290"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eee33f25a3bc4431a4899fa373225b82f91b265358d1b8c12eb75241dfe6f4bf6dc39ce81a6fea632ecf565fa45d7a7ca50aa2e3b548038c9066d72b539243596a6ef766bda57b4717926485a86d332fc460fd2733e6a54825f17015621dd4290"]}}, diff --git a/txscript/data/taproot-ref/85f392952d2f71a976ea2c35e174e534ade34805 b/txscript/data/taproot-ref/85f392952d2f71a976ea2c35e174e534ade34805 new file mode 100644 index 0000000000..76d26ba37b --- /dev/null +++ b/txscript/data/taproot-ref/85f392952d2f71a976ea2c35e174e534ade34805 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c455010000002e8aa283bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1c010000000ded30ab019a4146000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478713000000", "prevouts": ["2248400000000000225120fc4f9d8aed21e545c10b3b4fb5f7ffa2432ec2f4c867e738428f21cc99cd5336", "4c276f0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["1e1f83551bb2f331bca92b461cdf8a63776e92073723dfaa24cddfdf85444fe37e4a3dd0bda69af212cdf64c6b4a2dafb1ceca20b748ddd4ba07e87facba897201", "71905065eccacd55d9a6d165d50fedfbb2d9b18962f7ed13600f0a7ed474250792719ff4eafe1b845a981bdd4218a50467da843feac66c4460b4bd10f8df51b2c4bcdf4a3ce34c5c818842fabf052e89d90619d38bed2ff59cfac6675ae4a15d71516055936cd58c04403235b49a77361946ca1a61afcfc359bdd8c7445e8b851b2c5385f2a40700779b70bb6134103ebbd337c662e0fcb3f1", "75003535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a2ac91693535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a26eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cafd838e61ab3aa45c319601b563b9c658905b907134deb4cc79f3bc13ff369b0000000000000000000000000000000000000000000000000000000000000000273ca7b5af5c33cd596a394254ccfccd1ad7f414cf24eaf5251ee142edfc6bba19e1974746bcd95f883b2c5f8b9cd70ecc189bb284120cbe237fccafca83785a0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f292326c7bf2ced92e8e5f55f7d4c058bc53f0dc5d72e6f54d90a99bd448a0a7d3178fe8ff3d1648fd0414c507f32ef1a859472bba31e5fd87f9395eb28563d000000000000000000000000000000000000000000000000000000000000000053cb80cf27390b5f3a9b6e8f7b62b6973f471195333decc81153a008733c93f4fdb984c50376bf112fc5b1ba5121971048d8604acf0e95c0aba37777dccd84f7265ff857dd5353a6f266df0c827cc2177bd50674255e0d749a1de050f0543a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa255cc08baca582f171c88e3afb5850782245b5ed7b91c999e195e37d9159bd5d8e80d80e4a0fe1afa47b4cdcdbc993cd0db79675bf4cd78cc37b4de49bc27cb8b09e1ee9dff2bd5c170a69d6407e15bee592ac7316759c0b21c1ce5c1e004f3bfa663a0599002637d08bc203534805f26d034051e6a67e85ccc9bd956c8d8706de45c3a48843ffe045e251fe069222fe8da2ee54f1847880aa81efdcaa9d8525d20e0edacf2383ded399026cf8bae72fa36b1caa97db067cb54ec3ec4bb5d4284e14408a569f47e5deb40589b32bf49aa1bc60a3632cd7e9e9585937c90d6b5f93801b1dd258f77e7dbd42a444590190088faf2dfd4654dc4249a5d6ad34325ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d5a204a83fe59bacd1cae520ac4d3bed216198175683bb791441d91e89feaf10000000000000000000000000000000000000000000000000000000000000000ad10f52d27e62a6a591b25683e510603924fa6b0f324a16e58aba1d57e478ab50000000000000000000000000000000000000000000000000000000000000000612e5dc139866e7b4626935f13e419d7c281bef6c5b9deccffb02e9f640fef85ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff737008e4121812f7dfc661b4b82fed08887fe73b0c9217265c2827b63ba2f13f59d5370a9318774a5bf4ce7ad10f052d6dd560323b574a7a7e042e3b227c162770be6fea8df19f1fd40bb23931116b7b3d192544775e300f6ade15d75b2779cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0e1f2198ddd478c68fe8bc5cae5fba8f760af3223933412457b382baf708df1000000000000000000000000000000000000000000000000000000000000000057f91a0ae05815cff02d68409806996d2bc455488ec896bddcee07d0c4d6c70e139403ed87e7aea928d90e04ec3797d79f44ff8b7c3d9e6ef9026af18da7ced2aef523a35a1d80f25f28c52fe09f4bc05ca9ca4c55aea7c169ac86caaa8897ad0252fa602c378c73546d62399d429bcd6a33226f823339715698ea6591be845059b987a2a1bc15e860ae688586a890bd57be17a71de63951967861e056cacefc3e95b857a1b91d9aafcf992cc9dc01a2a4e6f9dc4c8c5e5c4349f555667d7123d849ded7c59f5b86a0da4c79ba396037cfeacc2ac9a8670ad8578ef2a84e5b6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ea8ac52b648c54e233c15f34def3254a14db47c628758cc7829432e590914faffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba5c0b91f828bd18271ecd6c4dae93559e9116cf9453bfb8206f901c6743a9cab01bdd510ce4686cea15c3f76949dc144c8f536e699c49f2451df15a870b78ba972c14264ec6d656dd0713cc207f47f0e2b60a1603beb401d0415a3512fdf67fa08d29024c222184cbfb9fc309295d41252e71df924cfd4b9fe9b39eb22f41181ab69b3bfc67a2b0ad743abc470de8038dd4cffa9b86d840403dfb3e6648c0a179acb062d52d263d2938a23080f331b79b7876025046056dc587a22c510e2d0800000000000000000000000000000000000000000000000000000000000000004987b50f34c8c73a37611a384c940b3a992fd3bda13c7977cdea16dc908999c5ad194a9100e95b709f58c760940fd261f58c1801ded98189feb7da08b4e25ccf52b90c8f8e4677d6c7f36ed648f8c95f3247fc7e430a5a5a6da0f580faae6b322bf75bbd6fb247d37416816ff2b34cd40b41adb272237d45191ba43ecfccf66413662ed229705db4b58c9f1f0e7d2c93731755b2ec8225c11cdc26a2509fa8b369eb4bf0bceb70705498c3365658a01c491f03b4c4e96703d754886c48762cd38a9eec07f58066af8bd1958d1581996c3dca686cd7de13fc50562f63913be5680000000000000000000000000000000000000000000000000000000000000000599902bb31b9b47be94d47ea436572ad1d40cc78837396efff19b94d67743d19b36da655666e784462b1bac23bcf49c043cb8938813dd768fa10677620e66edcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb11474d8d7d45a2162c042c809a94637dfae668979492f2bc26f7df267ccadd5472bdc5055cebca364de35de1988fdcf5d99bd1e5f5650a306bcd3365aac47cb00000000000000000000000000000000000000000000000000000000000000006c75b7ec805e6b759379b193d8ddc7f05114cd92dcc9ca81e8d74d4fc647c79de0a4b67933c0571d3ca17ad20d3b84ae5e111c16c67dc40246b2162f4a5e875273648b120252a93c9a01dedfaff864a1c8c97cbfeaa8b7bd7269ebce3fa6c80779240a0ffb055322193a51582b49b6149a85e20d3cf0c5c8d8b23ea8621d9893f8f45270f1ed4c0c735210b7375bb798129e7fc52760d85eb6f9ff49956a1b632d065334eb4aa61a8f6fb07859ebd6156484933ae3ff6b47e2c00ee48a86a6d81db1dd4b77f271b2cb0663cbff1f3356a17005383ef098ac293f71fcb4cf6dfeaebe874adbf1f83e61cbe80d100dc3d727ce63fb671143124592f75daa70648e00000000000000000000000000000000000000000000000000000000000000008ebc3644557f9a14c4447e9063b696e1ef247c64b251adbd183e45282236b50309d3c1994d5fc4da7358467a2d99f469e77b3a0a4cfee42a190dd92e3101e8605ec6de73fa6cd87c792a85e8d1bce2b27f416f0863be8ee106b0cf300ebaa03b272be4c918bca9b79514fac857babe12ff83a7b9160dee3098b71acf612b6fcaeceea30c1150339fe31dd6da8f421e4e10d2cf47cd9edbd2fd74a87954883dd2cc2756e7455df3bb78fac74f3fe83014d0b3f8ca1c15678b712f6a2c4154bc91ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff48216462d877d3d730dcd17ca53780ba486bd88f865ce5608ee144921a3fe0bed5468ed4cc5ac248aa4159cb1ae718483fc82bacdaca36bbf7d3244fda58e01363687c820deb74bbcd202fd2b32ef452f36d50891b57f1e318f2f36ef6e7acebb83f7cf6cb8f273468962b6feed445e6801ab97ca9f5756b00280f654c279c8100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011811a812dfdf49ff524d92f338dc7800912fbbef314a3bf56a6010d8b8c4e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff557f48844356415d0ed40cb48bb3240d578a5b08167d1e1f30a44f4785332649ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff493c0cdbc18a65bf391d45918c887ba6fee56f41a91fe91082b446ba6486bb5bc2236ab0aecf6d68afb88b6a2409b52abe4c48c0974209d445c47da956c1f8720000000000000000000000000000000000000000000000000000000000000000"]}, "failure": {"scriptSig": "", "witness": ["1e1f83551bb2f331bca92b461cdf8a63776e92073723dfaa24cddfdf85444fe37e4a3dd0bda69af212cdf64c6b4a2dafb1ceca20b748ddd4ba07e87facba897201", "9cb52c193f69929371be021ea2914521eae608cf2f38adcb19961ef85b4407612c35bb494adac35255ab4f1921dfc623accce9e20b6e7cb5363eb73ff94410047a014d93c07f1a84ed737f6e98caf7c8cc2b9be4e3e99d0650a0dcb0121350b26c0e2733752f4ec3b56273b29a2190e0177cd0ea9cfc95070a7d18edafeb40d9851ef75a8c6cb488547bddfb1630acb2ba90d85656047ac2", "75003535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a2ac91693535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a26eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cafd838e61ab3aa45c319601b563b9c658905b907134deb4cc79f3bc13ff369b0000000000000000000000000000000000000000000000000000000000000000273ca7b5af5c33cd596a394254ccfccd1ad7f414cf24eaf5251ee142edfc6bba19e1974746bcd95f883b2c5f8b9cd70ecc189bb284120cbe237fccafca83785a0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff2f292326c7bf2ced92e8e5f55f7d4c058bc53f0dc5d72e6f54d90a99bd448a0a7d3178fe8ff3d1648fd0414c507f32ef1a859472bba31e5fd87f9395eb28563d000000000000000000000000000000000000000000000000000000000000000053cb80cf27390b5f3a9b6e8f7b62b6973f471195333decc81153a008733c93f4fdb984c50376bf112fc5b1ba5121971048d8604acf0e95c0aba37777dccd84f7265ff857dd5353a6f266df0c827cc2177bd50674255e0d749a1de050f0543a3fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa255cc08baca582f171c88e3afb5850782245b5ed7b91c999e195e37d9159bd5d8e80d80e4a0fe1afa47b4cdcdbc993cd0db79675bf4cd78cc37b4de49bc27cb8b09e1ee9dff2bd5c170a69d6407e15bee592ac7316759c0b21c1ce5c1e004f3bfa663a0599002637d08bc203534805f26d034051e6a67e85ccc9bd956c8d8706de45c3a48843ffe045e251fe069222fe8da2ee54f1847880aa81efdcaa9d8525d20e0edacf2383ded399026cf8bae72fa36b1caa97db067cb54ec3ec4bb5d4284e14408a569f47e5deb40589b32bf49aa1bc60a3632cd7e9e9585937c90d6b5f93801b1dd258f77e7dbd42a444590190088faf2dfd4654dc4249a5d6ad34325ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d5a204a83fe59bacd1cae520ac4d3bed216198175683bb791441d91e89feaf10000000000000000000000000000000000000000000000000000000000000000ad10f52d27e62a6a591b25683e510603924fa6b0f324a16e58aba1d57e478ab50000000000000000000000000000000000000000000000000000000000000000612e5dc139866e7b4626935f13e419d7c281bef6c5b9deccffb02e9f640fef85ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff737008e4121812f7dfc661b4b82fed08887fe73b0c9217265c2827b63ba2f13f59d5370a9318774a5bf4ce7ad10f052d6dd560323b574a7a7e042e3b227c162770be6fea8df19f1fd40bb23931116b7b3d192544775e300f6ade15d75b2779cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc0e1f2198ddd478c68fe8bc5cae5fba8f760af3223933412457b382baf708df1000000000000000000000000000000000000000000000000000000000000000057f91a0ae05815cff02d68409806996d2bc455488ec896bddcee07d0c4d6c70e139403ed87e7aea928d90e04ec3797d79f44ff8b7c3d9e6ef9026af18da7ced2aef523a35a1d80f25f28c52fe09f4bc05ca9ca4c55aea7c169ac86caaa8897ad0252fa602c378c73546d62399d429bcd6a33226f823339715698ea6591be845059b987a2a1bc15e860ae688586a890bd57be17a71de63951967861e056cacefc3e95b857a1b91d9aafcf992cc9dc01a2a4e6f9dc4c8c5e5c4349f555667d7123d849ded7c59f5b86a0da4c79ba396037cfeacc2ac9a8670ad8578ef2a84e5b6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ea8ac52b648c54e233c15f34def3254a14db47c628758cc7829432e590914faffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffba5c0b91f828bd18271ecd6c4dae93559e9116cf9453bfb8206f901c6743a9cab01bdd510ce4686cea15c3f76949dc144c8f536e699c49f2451df15a870b78ba972c14264ec6d656dd0713cc207f47f0e2b60a1603beb401d0415a3512fdf67fa08d29024c222184cbfb9fc309295d41252e71df924cfd4b9fe9b39eb22f41181ab69b3bfc67a2b0ad743abc470de8038dd4cffa9b86d840403dfb3e6648c0a179acb062d52d263d2938a23080f331b79b7876025046056dc587a22c510e2d0800000000000000000000000000000000000000000000000000000000000000004987b50f34c8c73a37611a384c940b3a992fd3bda13c7977cdea16dc908999c5ad194a9100e95b709f58c760940fd261f58c1801ded98189feb7da08b4e25ccf52b90c8f8e4677d6c7f36ed648f8c95f3247fc7e430a5a5a6da0f580faae6b322bf75bbd6fb247d37416816ff2b34cd40b41adb272237d45191ba43ecfccf66413662ed229705db4b58c9f1f0e7d2c93731755b2ec8225c11cdc26a2509fa8b369eb4bf0bceb70705498c3365658a01c491f03b4c4e96703d754886c48762cd38a9eec07f58066af8bd1958d1581996c3dca686cd7de13fc50562f63913be5680000000000000000000000000000000000000000000000000000000000000000599902bb31b9b47be94d47ea436572ad1d40cc78837396efff19b94d67743d19b36da655666e784462b1bac23bcf49c043cb8938813dd768fa10677620e66edcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb11474d8d7d45a2162c042c809a94637dfae668979492f2bc26f7df267ccadd5472bdc5055cebca364de35de1988fdcf5d99bd1e5f5650a306bcd3365aac47cb00000000000000000000000000000000000000000000000000000000000000006c75b7ec805e6b759379b193d8ddc7f05114cd92dcc9ca81e8d74d4fc647c79de0a4b67933c0571d3ca17ad20d3b84ae5e111c16c67dc40246b2162f4a5e875273648b120252a93c9a01dedfaff864a1c8c97cbfeaa8b7bd7269ebce3fa6c80779240a0ffb055322193a51582b49b6149a85e20d3cf0c5c8d8b23ea8621d9893f8f45270f1ed4c0c735210b7375bb798129e7fc52760d85eb6f9ff49956a1b632d065334eb4aa61a8f6fb07859ebd6156484933ae3ff6b47e2c00ee48a86a6d81db1dd4b77f271b2cb0663cbff1f3356a17005383ef098ac293f71fcb4cf6dfeaebe874adbf1f83e61cbe80d100dc3d727ce63fb671143124592f75daa70648e00000000000000000000000000000000000000000000000000000000000000008ebc3644557f9a14c4447e9063b696e1ef247c64b251adbd183e45282236b50309d3c1994d5fc4da7358467a2d99f469e77b3a0a4cfee42a190dd92e3101e8605ec6de73fa6cd87c792a85e8d1bce2b27f416f0863be8ee106b0cf300ebaa03b272be4c918bca9b79514fac857babe12ff83a7b9160dee3098b71acf612b6fcaeceea30c1150339fe31dd6da8f421e4e10d2cf47cd9edbd2fd74a87954883dd2cc2756e7455df3bb78fac74f3fe83014d0b3f8ca1c15678b712f6a2c4154bc91ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff48216462d877d3d730dcd17ca53780ba486bd88f865ce5608ee144921a3fe0bed5468ed4cc5ac248aa4159cb1ae718483fc82bacdaca36bbf7d3244fda58e01363687c820deb74bbcd202fd2b32ef452f36d50891b57f1e318f2f36ef6e7acebb83f7cf6cb8f273468962b6feed445e6801ab97ca9f5756b00280f654c279c8100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011811a812dfdf49ff524d92f338dc7800912fbbef314a3bf56a6010d8b8c4e1fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff557f48844356415d0ed40cb48bb3240d578a5b08167d1e1f30a44f4785332649ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff493c0cdbc18a65bf391d45918c887ba6fee56f41a91fe91082b446ba6486bb5bc2236ab0aecf6d68afb88b6a2409b52abe4c48c0974209d445c47da956c1f8720000000000000000000000000000000000000000000000000000000000000000"]}}, diff --git a/txscript/data/taproot-ref/863c74afe345aa2460edf06abd9aa101ade521bf b/txscript/data/taproot-ref/863c74afe345aa2460edf06abd9aa101ade521bf new file mode 100644 index 0000000000..a43487cd26 --- /dev/null +++ b/txscript/data/taproot-ref/863c74afe345aa2460edf06abd9aa101ade521bf @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf91000000002b06489adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd001000000a1a8c5bd0374ded3000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487df000000", "prevouts": ["ca847d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "defa57000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0dbe0cdb6e99edcfec16766ec5847d1f54ccd051e23ee2b2272cffaae333295d1b30b2981ae69232c3f6c5ff759e9ad4102f31f3fc5e7a3a4ffd34dce2e2e06026"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51e707b6995f8993c03f45183b0bc1e0ebe72a0445f3f0cf57f2d95712f279e1c2be0cdb6e99edcfec16766ec5847d1f54ccd051e23ee2b2272cffaae333295d1b30b2981ae69232c3f6c5ff759e9ad4102f31f3fc5e7a3a4ffd34dce2e2e06026"]}}, diff --git a/txscript/data/taproot-ref/8641c37d6051843e6ca2af00b13ec220650722d5 b/txscript/data/taproot-ref/8641c37d6051843e6ca2af00b13ec220650722d5 new file mode 100644 index 0000000000..295aeb1d00 --- /dev/null +++ b/txscript/data/taproot-ref/8641c37d6051843e6ca2af00b13ec220650722d5 @@ -0,0 +1 @@ +{"tx": "e0ed141303dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b93000000001fcf05f6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7a0100000091bd69b9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc8000000009a4857d5047746c200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487bf000000", "prevouts": ["bec22800000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989", "73802000000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "8c967a00000000002251208560e60ff9f5f50e17abe0faa94b8704db3bcecc7cb6f74a11a752b4bbc814f5"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360c6fd00de61eb3e1d1c6b14a5c219f23903679f62342f964773f78df2cf30666"]}, "failure": {"scriptSig": "", "witness": ["6a03616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/86808a5b2f495881fed3418379a96faec86f72a3 b/txscript/data/taproot-ref/86808a5b2f495881fed3418379a96faec86f72a3 new file mode 100644 index 0000000000..6737dff06b --- /dev/null +++ b/txscript/data/taproot-ref/86808a5b2f495881fed3418379a96faec86f72a3 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3b00000000110e443e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d6000000007304bad901c0c94000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac97000000", "prevouts": ["32502700000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "2ad4360000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "c87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e868e9a99c27257089f8586472cc94222e874ab5c5b462fc98ac1b045b7a37dce65323990ac9ba96640afb66df99f25054f5788ad16157a03b33c6c26a70bd925e21136d3d9ecdf371b2101a7e86edb56e15b10ef185a8506988239bb2b5a4c43e"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a48ad409340116ac239d5c746dae159519851dfc1ab3c3ad2152d495f5f1663b52e804f6a261e09ec86c0fb6e6ff5b26564af7d86f56b1539029a07a3794a04021136d3d9ecdf371b2101a7e86edb56e15b10ef185a8506988239bb2b5a4c43e"]}}, diff --git a/txscript/data/taproot-ref/869a1712bd79edfc9d95461a25217f1b4b203e29 b/txscript/data/taproot-ref/869a1712bd79edfc9d95461a25217f1b4b203e29 new file mode 100644 index 0000000000..84c0798307 --- /dev/null +++ b/txscript/data/taproot-ref/869a1712bd79edfc9d95461a25217f1b4b203e29 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdd000000008a9c37cebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0f02000000eae7a34c03b3f48f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7c198d544", "prevouts": ["5d6e23000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "e07a6f000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["3044022066dcf42879c592d57b40b12b5b358b9c1c140fd25638889bc3d110d915ebab3802201230eb2902a683aefb94dff163f86dc2de66878c48a01d7a77e4c3cae813af3601", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["3045022100aeabcf3e19de6dd8ba23cbc9c1beda5d7bbf44e41927f43ee425f87da583df1402203bda596e67695b66dfe856c4e3aef1401a04e6dc9394540159257def137864ab01", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/869e9e9fd462fca683f8b432da94616198c8eb41 b/txscript/data/taproot-ref/869e9e9fd462fca683f8b432da94616198c8eb41 new file mode 100644 index 0000000000..db49b818b6 --- /dev/null +++ b/txscript/data/taproot-ref/869e9e9fd462fca683f8b432da94616198c8eb41 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43c0100000095415d86dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6b00000000d4fe448802e1715d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2708ec21", "prevouts": ["fc1c370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6fad28000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b3", "final": true, "success": {"scriptSig": "", "witness": ["90ac5345a1f7059a3860ee56ba9f595556776139c921143307722a9cdecd90d279a4010ab4a7071b951e2795f32f8f605e22e5084d1602f723054d7a3e97a0c983", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b3787d79274d50571af70bc04d570b112e0177223e453f31a810a5bf9a975e9432023d432f177f6bca6d4133f6961490919ff66a969071f5b24817325d5b8f28b3", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/86e9313b4a88cc4785b502796f36bd97f1174856 b/txscript/data/taproot-ref/86e9313b4a88cc4785b502796f36bd97f1174856 new file mode 100644 index 0000000000..5592f23f4d --- /dev/null +++ b/txscript/data/taproot-ref/86e9313b4a88cc4785b502796f36bd97f1174856 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4070200000035c405e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca301000000f48bf49ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b52000000003a56f2d902d8daa3000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac6c000000", "prevouts": ["5bc8310000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "a32d5400000000001652142540f27e90740933c99d4f17ab2dfc6c82951cfb", "05a12000000000002251202b18b828586b5828635076972ee0bba96c3f290312125c393cc54d832abc1349"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "d97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84852eda400aa94cfe5024bf6d05446bd810daab3c27f5a95b027bfb109f343b83d33b10ff9eee8ff434f7c79f826d5967b94922da2ad2ccade1cbab3a3658011"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a3526d2a5f8c4f602200f77573bcd308e02a3725247a50c328bd371ff84e2072d5942624d66fc39e30c2a996d85a0dad9a6418b79db996452744438b84f9614682a6e83df749f265180f93fd54e474915a8abfc6fef0a760c06d61a0bf42967"]}}, diff --git a/txscript/data/taproot-ref/871647145b6c79309648164fe2e9294d7ba23b0b b/txscript/data/taproot-ref/871647145b6c79309648164fe2e9294d7ba23b0b new file mode 100644 index 0000000000..734074abe9 --- /dev/null +++ b/txscript/data/taproot-ref/871647145b6c79309648164fe2e9294d7ba23b0b @@ -0,0 +1 @@ +{"tx": "859599e302bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0e00000000418ab0fedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3b01000000eea2fbf30421558e0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac52000000", "prevouts": ["715e6b0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "c673250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a7", "final": true, "success": {"scriptSig": "", "witness": ["23b0d43cfedbf7e5e2a7d12a7001c12944b081f478b73c12f151c9788336c1988f5aa0e593aaef7ecf3a0d8df16bb25ca3dcd345d8b3faeb716b23214e13241582", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["520405065323335d97d24f9b14120e88bd4cbe3b9b85e84e6f50477be8e673802921987159f4e1fcc4de81bfac1979894da0b368effefc1d88dfab65b68b2340a7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/871b6052e7f9a98779e47518bd5f8bf607a0e268 b/txscript/data/taproot-ref/871b6052e7f9a98779e47518bd5f8bf607a0e268 new file mode 100644 index 0000000000..f909413f9f --- /dev/null +++ b/txscript/data/taproot-ref/871b6052e7f9a98779e47518bd5f8bf607a0e268 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c13010000000be331e3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6a00000000b0cea3c303fd75cf00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb3030000", "prevouts": ["6a5f51000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "eae27f000000000017a91448964eab407ad5d6e123f59d9280ca7998f71bce87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2351212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["949576924f61566a81f8e2fc476db988f70735fe3efb5b0b8a3c7745c025d91dfa932233e661c3be0cad5b027933f921b7a5ee56a0d51065e09ac9f6f94f1e16"]}}, diff --git a/txscript/data/taproot-ref/87360adcbd85bcb0816fa5f993fc9a5e14182074 b/txscript/data/taproot-ref/87360adcbd85bcb0816fa5f993fc9a5e14182074 new file mode 100644 index 0000000000..d94b630906 --- /dev/null +++ b/txscript/data/taproot-ref/87360adcbd85bcb0816fa5f993fc9a5e14182074 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8801000000e3859977dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1f0200000017508a9f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708601000000d56fc4e201266d0000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7e89ca15d", "prevouts": ["0f5467000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "e47e5a00000000002251205857fc26f723a58058d8b22639f4b33f8ef23084aa37309f77fdf87ef7a99b1a", "92430f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "success": {"scriptSig": "", "witness": ["809ad1df077d70287fc6ca0fc5f8a1334cd61d3393cf6df7e2e7a1d05d9a944d601000ba5834308063fcafae4b7148cd701ea67464b78b3b8143543cff54547801", "50a6662878d52eebaa6f34ef95f87d4bf918bba5d86f3d58af5e7e288defcc6458195b238ae1d4a6427aaaaefa27dddac2f2179e9b8a9837493cf2455442f766305458394d3c339a8641cf4754553b7edf7041082b614ac31ae27981582800872d7b905db993679f9d4ad82e53560699768884e562204d24f16cbff9214fe5c7cef3d032dbadf0f28a05dc672c096a1e2f7e2e35bcc9412ae6132e1ca089f46532dd90f9cd4effb389c0c6cab868a6e09eb482a5e93a0efcfe82eb4bbf3fdc1d3f787ce792e83d3e319d3bec10cf7f5c"]}, "failure": {"scriptSig": "", "witness": ["07bb2fc8647a42ebb616f3f893dc8feef08096c966089256ae1dc44fede3193ed8e174212c9defb504cf827457177a59b5e93ff8cc2402eb70bd904eefce197c01", "50878585d9ddcf767e45d57c3006aca03e08"]}}, diff --git a/txscript/data/taproot-ref/874116a3fba0e5b88378c9825e5b2cd8fe9707c6 b/txscript/data/taproot-ref/874116a3fba0e5b88378c9825e5b2cd8fe9707c6 new file mode 100644 index 0000000000..bc745e1caa --- /dev/null +++ b/txscript/data/taproot-ref/874116a3fba0e5b88378c9825e5b2cd8fe9707c6 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6b000000005c19b047dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4300000000fa054f9360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127072010000002e2b715c0281e4d10000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6940e7f4d", "prevouts": ["ab4c790000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "48984900000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "4c73110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_69", "final": true, "success": {"scriptSig": "", "witness": ["da36f559a95c4fe3365718da6adff666b82414394edf582c70196463cb4c80a7c32c1905b7b21dd343dee9dad2c89feec310eee7cf9a46ed7cf026852dcc86ee82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f1a8f20db9520fa60eb4b8c12751eaed1f9f4527f28d83a8134e6465bb95d368da98c79e421580a8c9bea79f12e32d1c27565a0fedfbf2bf8750ee1a60c0f5c069", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/874498dbd2d21fb6b01edf60814088feb89dc02e b/txscript/data/taproot-ref/874498dbd2d21fb6b01edf60814088feb89dc02e new file mode 100644 index 0000000000..577a20d05e --- /dev/null +++ b/txscript/data/taproot-ref/874498dbd2d21fb6b01edf60814088feb89dc02e @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48f00000000d54e494e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127089010000004f3ee92e0308664200000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ace75cfe40", "prevouts": ["113b33000000000021591f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "14ad1100000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902330b623fd8e192f208076d7e17c6e6b31585828ed34de7687213ef68459ec73831edf7d688638ae4d5b635e71d71747759d283e0630ddcef2affb4ce19e1884779417f38b58fe0e8a96813fb53afd0943939047563e3abb8803cb931f5fc54791a76dd6e609611cd984bf604fc08aa38c2e2ace73287a0669644069ae1151f0cb90b2c761ea7ea4be3ebb657a6978dbc869ad3ca3744a225b680f286c9de0fc3dcd8eca16906f5d3a5f5bd1088703380b1f7fc542afc4057c4f18af28c9dfaf51e916f145d7a70ec4b9e900c72ae8357efb10ae217dc8ca99baf71161a2968e7789ecc085c49c4c3718cae4de5102eeae0b4dcfdb0442ab94d27f5f6df696a2b83bf767b2e5e2b63bb76b2c69cc2771ad0be749c9e41801f9b3b521e20159f271ae08bc8e3ffe28e7f91dbad8f1adf15aa3f7f731daf319ea6ee3c47084541494f127b35698e0394303012b006459fc393bb65bd97f447abe07e0658ea078923e484cfd6420b197d08c9a8d69435e95b29ace900580a1e29bc5399609717ab6f12a85705a2ce099a53e480892a6dcf47a9865a9ab04064d36c322e95c5c4a9cbcb4be5ec71313371f63fbad065b7cd43bec0b1f4815c1a0748f745c09d68777abac29c02e0bf35eacc50dbd5632502cc19a844d0611ae32d5ca2810fe4846d93295c67fa5d7afc8f8eecb2a9c904f7e229da2cc41f962815c4a45b5deb3697ffa1616ac594480532f5758a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e8007fec94eb3c5305297f43f34a17512a7dc89cab863bce10ae6260a115e064d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51cfab3477f7b3c3eab66b712f7a90f2a0c89c5ec16767e7d6e87c9be44117720e9b045cee6f1e54629d213b8dbfcd9de8aba2dd7f34fe21c75d81b8576e463c6b"]}, "failure": {"scriptSig": "", "witness": ["4d090206da9bdb9064f97b7ff3415bc6d7e7812e5900887a588912f41302be9d134f389ed1238f4d68f0f4aa13dd8c454172baa2a3fed6b54de097cbfdeba2588a007aa46e9e2df6445cd859c67f6d827397e7691f30b7ce749a12d698fd5403fa44b8e3b4d1301959c29a1770b3cc97ae2f21a6aa597b44e045d88c10d45661ed9a76106aea77199339b299db1342ba3b1bf8e817403f998417fa2858aff602636573a4418732fe703dde9098a8157d0bb57ed77f3dfc103987a87f9f7f852f89327cf51167031cf0eee20c69bb98e1e64746ddd8a57d7a0a0e13031cc467eb0150471252956093155cb56b2fcaebcbd970d55470fb5c0bdde60ccde978b6b4881d8f1c208a161e15b850a31fc46036a1316354cfb35c07ee3390474dccc04bd533a75713c10bcbe96c9c36a1f93b65979e8c6f8553af5ff4d86568c0f8cdb97f6d28da37fcb40f21cf4d33a08d5036e27ca62c073f722c0eaa48a572d895a01f1cf04e2f66cdada9d793e8f2eb09a59ca029282bb295f61735f7c4ad5d7405b4cd80d62534c14ffd374c84ad64ef4ef2b63d9582e930e25680feb044c225dded401f453306d74d830c65e56b52b5b1ea73d090d423f8a1604742c1c613ec3ce2e1ad14c383cfb976236457e0d6b291c3ad0447db4c25f351012977e4f507128214a2535f7b17a7d2af2b839bafe2adc7a94612302c459c704c5ab21c9d5590a92de0a178593ea88c8cf4417561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b80456191687daec4f7052b209d86d943f2ed0e607345185a76aba26d7ed1a66d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51cfab3477f7b3c3eab66b712f7a90f2a0c89c5ec16767e7d6e87c9be44117720e9b045cee6f1e54629d213b8dbfcd9de8aba2dd7f34fe21c75d81b8576e463c6b"]}}, diff --git a/txscript/data/taproot-ref/874b8f129a3df7a4c057a29c6d71bfa99137ed88 b/txscript/data/taproot-ref/874b8f129a3df7a4c057a29c6d71bfa99137ed88 new file mode 100644 index 0000000000..39864d0a60 --- /dev/null +++ b/txscript/data/taproot-ref/874b8f129a3df7a4c057a29c6d71bfa99137ed88 @@ -0,0 +1 @@ +{"tx": "b898faab02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd001000000322d1fc28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47201000000a12eaadc03c7936300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac82030000", "prevouts": ["ca39240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee564200000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "577d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630f38818e89feee14623c9b7a0eb4bdd9acabdc6da78fd3d02418e3152c5680b35bf8914ec6f25b4d9fa0eb4d13d0c5199bab9da1f0dbae1e1446f691f7eb6d53a8385792857b3824bc259fd95f469eb32c57805e5f383de6590f06749d208e6"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93628f51c82c3c6baa906179e2c4249a4fd3466ca100eba1cb5559cdc57701c951ff4a7dcfb64e618b34998ea64659fe772d1fd358b29e003b2257b85d2ca618476a66706abdbe591f97764059d8785051c12d40b9c9543fb83334d204ae23d8b59"]}}, diff --git a/txscript/data/taproot-ref/874c302461e364f71a8f6570728f98611a5c96ce b/txscript/data/taproot-ref/874c302461e364f71a8f6570728f98611a5c96ce new file mode 100644 index 0000000000..770bcad8b1 --- /dev/null +++ b/txscript/data/taproot-ref/874c302461e364f71a8f6570728f98611a5c96ce @@ -0,0 +1 @@ +{"tx": "8e961b1c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b601000000d2b48baabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4d010000004b4050d501d0c7520000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72bcffb39", "prevouts": ["4f560f00000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "bd2f6d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "fa7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e806f1c7e5fb59ec6be7dc8dd9b5e5a9bf4b5e4bf2d4887cde3c9822cca7ddc75b6ac496a48f5e08c9a0063585476106fe61a3ff4222f4c7aaafd1f65bf01170e2"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa89ffffd8cde8e3769edf5532f5f6b1952f639561cd4ccd6343a91fb81843409ef1076b289256cd19daa60d704e81db3a39e457bb71d9d0e29c4cb2075820e5e1"]}}, diff --git a/txscript/data/taproot-ref/8753f414b84b9ccd0c62553961f88f7c0264c379 b/txscript/data/taproot-ref/8753f414b84b9ccd0c62553961f88f7c0264c379 new file mode 100644 index 0000000000..1335a04e10 --- /dev/null +++ b/txscript/data/taproot-ref/8753f414b84b9ccd0c62553961f88f7c0264c379 @@ -0,0 +1 @@ +{"tx": "a5ed58ed0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d00000000034e4feb1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0200000000551f05a603895f38000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac388b6049", "prevouts": ["0a9b11000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "7181280000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936af7aa65714282a5b35066fa70de922413df84699e1278cb2a83e1b8810c1ca1420e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1c56c8a32008d6f6a63b4b8ddfaeeeddf640e9afea8e86008d2331d68e9435ec7ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364230902f346ba40e65ddf0aa0663e4719e9615d7abd3dcc6db3c9c5544398849c56c8a32008d6f6a63b4b8ddfaeeeddf640e9afea8e86008d2331d68e9435ec7ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}}, diff --git a/txscript/data/taproot-ref/8768655b2d8b6e0cca092c104735354aee0c9b0a b/txscript/data/taproot-ref/8768655b2d8b6e0cca092c104735354aee0c9b0a new file mode 100644 index 0000000000..e0c8119341 --- /dev/null +++ b/txscript/data/taproot-ref/8768655b2d8b6e0cca092c104735354aee0c9b0a @@ -0,0 +1 @@ +{"tx": "5f8a773c01bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7e000000002bdb96d603a0746a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acbb000000", "prevouts": ["f7196d000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_82", "final": true, "success": {"scriptSig": "", "witness": ["121729a4e5066a4248b812517e0edf3437d4c4b2f3ba9a2e78c1807293563fee00376f779a717136521a6b2fcb1e81a50797141f82f607249310e6061e267f6082"]}, "failure": {"scriptSig": "", "witness": ["51b52ebc32f95d77310b05d7ce627d95505bd3759a65ab95e85815b9805cf114474082a4c88b3240926afea3b994de5e303a6117645ccfb52feb49719de6525682"]}}, diff --git a/txscript/data/taproot-ref/87d794de1dead52b89760fa5e136596c5b59bc40 b/txscript/data/taproot-ref/87d794de1dead52b89760fa5e136596c5b59bc40 new file mode 100644 index 0000000000..891a2f9619 --- /dev/null +++ b/txscript/data/taproot-ref/87d794de1dead52b89760fa5e136596c5b59bc40 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708501000000de5aa6eb04b7f80c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8713e73120", "prevouts": ["746b0f0000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "9d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a832c2593bdac0cb0b42624935007d1442180dae3fe4e49dcedfd3101f5729d872756956c694637235f847009e8e23b8c05283b4a047903b3fbdb647ae4209c1"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364d9cfd389e774c529beca95e1955030c310e90019de0d0c1b56b68b6d8ca0660e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a832c2593bdac0cb0b42624935007d1442180dae3fe4e49dcedfd3101f5729d872756956c694637235f847009e8e23b8c05283b4a047903b3fbdb647ae4209c1"]}}, diff --git a/txscript/data/taproot-ref/87dcc971a3beea2e91a4d7e9643a5539ff94d52f b/txscript/data/taproot-ref/87dcc971a3beea2e91a4d7e9643a5539ff94d52f new file mode 100644 index 0000000000..c4b41b318f --- /dev/null +++ b/txscript/data/taproot-ref/87dcc971a3beea2e91a4d7e9643a5539ff94d52f @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4201000000b563db75dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc301000000f098e3a68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c467010000003d1d4d040391f7a8000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72db95c2a", "prevouts": ["4e8e4900000000001657142540f27e90740933c99d4f17ab2dfc6c82951cfb", "f6a2260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1053b0000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["10e15c282e576b17bfa2876e6f1bacbf88ffd1379b4e62c959e7a0cb2c38cd7dbed5366df6618f3d43dd972519a4352c852d79b6918df80a8e243facb2b23c73", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/87e1e382d129600c7e7f842f983fa6e87de06c9c b/txscript/data/taproot-ref/87e1e382d129600c7e7f842f983fa6e87de06c9c new file mode 100644 index 0000000000..c4db2b5a92 --- /dev/null +++ b/txscript/data/taproot-ref/87e1e382d129600c7e7f842f983fa6e87de06c9c @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be0000000005fe3e49860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702500000000186ba9b004a336300000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7962a2a795b", "prevouts": ["614222000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87", "3766100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3044022031d0a6c9b5e92fcdb84d6557f499872d27859093e7316b0e154f8d8662ee3d720220269ed46ba2a8fe869fb9360cbbe9d3ee953e3678b0d9ecb293e1c11dfb6e927381", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3045022100bf6d27232fb258e64481499016409a1b4498a7c2c1ce9f20b08b1f6921865f1c02201543c89deba4677abe4b0bbd51c1a25778f55a15f59cf288f26d393b9fd725b581", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/87f0c2e540270b3692ef13bc2b91234c893bea37 b/txscript/data/taproot-ref/87f0c2e540270b3692ef13bc2b91234c893bea37 new file mode 100644 index 0000000000..d0c8913a9c --- /dev/null +++ b/txscript/data/taproot-ref/87f0c2e540270b3692ef13bc2b91234c893bea37 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe601000000c65799e260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ba00000000d4786d82dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8f00000000fcfa74ef02a77fbf00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d5000000", "prevouts": ["6bf861000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407", "d5740e0000000000225120f53d4d34de47a5fffffaf2fc2c78ea776a7cd8d2ae45e19539d143c70b3fc5d0", "5eaf510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e02982c20c8bd2555b9dc2466c73f0b476ea38d756de2725bec69a609b7769b1ef31942b1858214ae33105eca3f0b2cf78e8df05a3972acf71e40f309e975162b655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4b205b49dca00d66246302f0b0e6aac7e300ad432a7c010b19b7b2f949f7f012a70b4d2addc31b8421907b0cff80194a5513593e3802bd921239c9c6063ea806bb655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}}, diff --git a/txscript/data/taproot-ref/87f8602bd7dcfb5af1052f424e7403550ff631de b/txscript/data/taproot-ref/87f8602bd7dcfb5af1052f424e7403550ff631de new file mode 100644 index 0000000000..61255e1ac7 --- /dev/null +++ b/txscript/data/taproot-ref/87f8602bd7dcfb5af1052f424e7403550ff631de @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a900000000bab6199360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702000000000ac5597b703f23b1c000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48752d1432e", "prevouts": ["fa6510000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "febe0e0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_cs", "final": true, "success": {"scriptSig": "", "witness": ["1fccd586c3c0004345a49e4332aebc93c1c521d426b22d91ad94cd11d6a86f00bd4fd16d0dff163ef724c99cfdaf74446a2fe735de4f33acafb79a8ac99b3c4c", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}, "failure": {"scriptSig": "", "witness": ["1fccd586c3c0004345a49e4332aebc93c1c521d426b22d91ad94cd11d6a86f00bd4fd16d0dff163ef724c99cfdaf74446a2fe735de4f33acafb79a8ac99b3c4c00", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}}, diff --git a/txscript/data/taproot-ref/87ffa0846cd9a6bebb41a9d3d719ba376c69285f b/txscript/data/taproot-ref/87ffa0846cd9a6bebb41a9d3d719ba376c69285f new file mode 100644 index 0000000000..614bd158bd --- /dev/null +++ b/txscript/data/taproot-ref/87ffa0846cd9a6bebb41a9d3d719ba376c69285f @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42a000000003ca5b8c5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bda000000002a7cdb2b04cf6957000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487c7000000", "prevouts": ["013e340000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "9b13250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090250ce2cda282f55a10517ec40d7b0a4d4723d97464a39e402aa3cc6bbbf8a97e997e1ba87a132b43999ae3c534ce6b0df46b1699b33e54048db660459703a7bb99adcdad885c8b59a1306830fb48c02fbf2893a61db78b5f23278552a67fbdcdf8821ea664a2762c9e189df8e74a493988683a5e50a63cadd5b7b75c1fc41a25c478d6fc1c34c161d1e46d1cd1ec2c1e09264759568016693edcd1e1cf828a73e46a89f0b97c422661fdff143b758e0409ff82b4e568e40849853dcf05ddd1879ac5ec5044d58041465d5e14e7912c3bfbeb12c1e07e9a4adf54f3df393489e5a0acabca79fb7cdde4e362be43d793fe33a1d8a5119d5dbfd9a5e94f20db9a3bc171bc4c2381064d96f80f5730a8686dfeeb925b6caeafd76a421023477beeafceb7dd36613ebf82b32539bde45b5d0195454f7bf5464dcbfefce8e6ebd9480ea29c5240707cc2f69394cd984814a36bef812b25114be38776b769833e659369a4532b4f62eb5df88d68ddcccfe1774f8d3c6bfa36940cd57fbff4cce90ae47b8dea5276a9473d18d5298f4e7fcb62080b8626f88b3bcbcf37205ec8bbd3fd78af577cc0bb5ef389e788a325de6410981ddd6d5d24c5f3d0b8cf1d856891400577e0d1f928153034907421efc0c9215636539d3e9b9d88ff8694f004f178565307f3950d55b827218340ed7027b8914002e233f10c6c0d7a3e84e765f08fcf3e8a1cf7ddbeafbdcee6075", "1d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a72a63dad112e73676294041a75425f56752d13d00a049b2fb88a4045546b166879334807fc224780ba3e72651a115d27f4d0acc1c4b651ff2820865c4364ddea37f54c31b0dcd6e392a972a33f542af4c40de53091de86bbd5587895c52a53"]}, "failure": {"scriptSig": "", "witness": ["4d090253da6a2214a870ef763c7e5a533d492d5c841a1b9839601fddc34f4abe707a02bde2776320d884a2c69174ff797485cf14a383dccdcf34e631e1c4ebd4d5a8ec99d7ab6c3107c82a5679084adaa2a77a51384f11380d19e40b95b8faf8e79412b96cc83b2015a382382057d320d9e37daf6c74becdd3f80992d98ade6dcf77cdf6a2c88dc7a6d7546d79caef81fa8ae5d6a3c9c466ed4db9da9e3e60a24f55127936e1eb126239c57ac6db39ac35b907db081fe372d13e52b55e0a5da3b5e8a21ba37991247bdcf6ad8edc57d3ad1ac4d29ffdb5fa63c21b04ab385ca53eeec5f08d43d5d5188c75e020baae2614c4f7875bd30853bd7e765275bf1f7ce698e2ebb4c420a237d5e6ffb134204c0368d1d802c7774569bf673db172b87e2b1d34a577145d561001b4c9188a1a05c52d44688842190bedafdb3f2a6fe8302a1eaec08fdb3934c86067f984cee9af06e2c7884b6d9638986cc450e913769e96ba58b38b8b73a8f6a0628014e37be090eaf8dce3dbe260ef53397aea7a426af450efb9c8fb7504eb5f2831536f4c1ea3f2a0b5f598c726c11707b3b12f70e90767db8354aa4b5b7f000f01877ecf0ea4d9d4dc892c0e2c644910bb8bad22647ccce6606a597cce1adb0e994c806d3a39b4b8ed81b715957580b5ddf488a187411c688e7f8334a097bb94b9c882d1c19bdbdf10405880fb9a6c83972111eb38cee1329f15287ddcfe74a6d375", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa422ef55f7568e8dc283b8fa041d75ce76b297151a0e1c7ebf12f48a20b112ecb6879334807fc224780ba3e72651a115d27f4d0acc1c4b651ff2820865c4364ddea37f54c31b0dcd6e392a972a33f542af4c40de53091de86bbd5587895c52a53"]}}, diff --git a/txscript/data/taproot-ref/880f03671efb6dcc3f3fdaae9491625f46f6e4ac b/txscript/data/taproot-ref/880f03671efb6dcc3f3fdaae9491625f46f6e4ac new file mode 100644 index 0000000000..34d6e4a624 --- /dev/null +++ b/txscript/data/taproot-ref/880f03671efb6dcc3f3fdaae9491625f46f6e4ac @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c43010000003f472588bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4501000000d3e842e9032ea2ca000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac62000000", "prevouts": ["20175100000000001659142540f27e90740933c99d4f17ab2dfc6c82951cfb", "d2437c000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936908709641cf32dc4788f906f7e3621a0528df09509ddf1e9982e4479aa4b5d9aa78a04935edfb84e1b4b71380d58e01ed379cbb21cec8f8440ec0fbfce597ab8cd941a6bc152cbea0496b075d4b2611b435301778200e60e8b4147cd93749673"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620b045a5921ba670650c9c8b3cfa2abb5a81e5b0d26916ef9b1c65eea7b40a6ba250e002f75c6b1c142228c210e3ff9b9da21a81c3d6d31af30c750433b28b6418ea1dd842879684de6ce36adf7429742f60d84d7359dfb2eae76d7b546c72259feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}}, diff --git a/txscript/data/taproot-ref/8829fdc647553393e0d223a098067bdf44dd2c3e b/txscript/data/taproot-ref/8829fdc647553393e0d223a098067bdf44dd2c3e new file mode 100644 index 0000000000..29440d4054 --- /dev/null +++ b/txscript/data/taproot-ref/8829fdc647553393e0d223a098067bdf44dd2c3e @@ -0,0 +1 @@ +{"tx": "e4c3fc72038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ad00000000ef3908da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270740000000074614a9ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1001000000e3195ced032611a5000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487bd79c71f", "prevouts": ["c47c41000000000017a9148bc1125bf4e3450c593a5be1ae9a05461832d39a87", "ad5b0f0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "b47b560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902ea5423d4612223c88e79cfd8f9c85f9e8dd0a6b0fd4128e85a165643e2750703125a2f5df03a21df586c245c4f945b8d6d8e026475887da84faec7a502c9fe60c30d7cddc0b2b9f2b727ba5f730bcda8e3cbd0063aa204197d71f66caf9468a34e253abb4bf344256cb04c799d51217d8736aa9b25a61ed1887f949565449c78a7fa7f59eb23d4bbe4ecac95cd08dc9f495ffe7c4c9f467123fdaf119a61e78a1850132ddca18eac1fdacea443a6eff548dd0eb4b02a5276ba646cede0f5adc591d4077f9f21d4a1db3a17f9db0c644182d1e333c0d8d9a05fe477120d2825ea4cf5e62978c7bfc46ecd74b95c054b70675233c1bf173b2886044b4b3a124df01ae7b7a944a2a68b4512695dbfa2be4999fe2a74ed4596177107a3c052ff66c4e66c762f8d4ce61d65ccc5575d52a7c95b699540625d0d826f0a33b045b68758a527e3f7af95474e73e1fd01dda3e9d3df38442c6274f6719b476c63e02269794b2738655cbd769164339eec5646979d3a7a2a29b40574907277745a7b622185f634623072a81c8f5f78eb60131ac8c378297bbd03d4359f0caa1f4610da0ef67f51296995d3b7dedb2a9ecb1b6c2eb126c3697586e32f438714f31eb28ffedc4cde72f67f746a15fd3dc917a0bb7e4ac2dd44ff5611677740f7b02e8eed47d194ff6952431c162901acceb73e96f1dd276eb4c9cf5fa64475bddbec32c54a69e74bff34cd356fce2a75fb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a8e05ad6a2ccae9f66c9a515de938f93f122fdde3ef761cb4746351f00ac75fd78b7d2e6e031ffcaa796ad02cee9894dc771f62b9a69e495a6b0c07c9d130bc643d925f8e6664e67417d113cf51c5b4c3126025efa5f83bf5b16dba6746279b738273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}, "failure": {"scriptSig": "", "witness": ["4d0902972aeb42bd1e1ff14cd3b1739f4b358751f99707b5f8b9ecce5a822d0b4e535abd7333ca35ef4ddb9989551f0d04e80e9b695e4422fa929f8881ef8f580ff62e8fef05333864d96d7255347402b2fabc9920212ac9f462c3b540ec4a5a9d9729764b7f469548af62d278c189ce5507559fe56ae0e1cd63a6c4ba7dcfd7cc71ec389435b55c1675423d81dd0c0f71df28972136e137b59554c0151f4d7e42ad25097555bee399b1e0e045968a7b080a2afd8f21eec0692e670f047ca10422890664f56fc0239e8fa0973fb2ae370ab6e56fac17761cb77c46f5051df32b560a7d6f54f71e3aeeeb17101c12e0f24ca18f954e2f2d034b20287c9c92f7aa0c2616764d234d87ea314b2f050bdae434a491dc54919922beccee8516400319927a3e1824007bdebb83a94cd9629c391ee57a62644f035532b6b7553d65fdee680579045c23d317921577fb3bad4adff9e57809144a4e4b8277eae2f071c911fded8960c036dc981e50f3cab1a4b80ae3263da638e4d6f02787f53e6f56a2fc9bafb8cfad3f0f5355d3a36aa3ecff88dc864b05dd192533bf8f2287246e94453f93d5065dcac3dd9c8549032b69cbc842571a7223f4fdf51dda181b34d50789751df8226f898b40ad7488a48805318c348c65d3826027324ba0efeb1d6e4201674bc52449525ca22c328e04b680b457e98b2c2026c29acad95f1253d8db23dfac1be40de63cb7c47e0a1c6c7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93600b2d24cdc995533ca5136ddf99c649a7656cea6d4e88007bb6550a8679541173f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082eee8539df42e1fa2e5e9e7b75fbe1b52db879ec8a622b496736c99966ce19d0038273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}}, diff --git a/txscript/data/taproot-ref/882c32949367f4f504b543399fa13b4f4118344d b/txscript/data/taproot-ref/882c32949367f4f504b543399fa13b4f4118344d new file mode 100644 index 0000000000..95bf807f1f --- /dev/null +++ b/txscript/data/taproot-ref/882c32949367f4f504b543399fa13b4f4118344d @@ -0,0 +1 @@ +{"tx": "ea9513f50360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e500000000325a22e960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127099010000008f727e8160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b0010000007ad921c20200f131000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e789000000", "prevouts": ["e680120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "519e10000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "67ba1000000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["304402200dc7891706cdad6e3d6cfc5e81a64aaf77a5b6bc8810c248b5e493a1f14a3ca3022049cfd2a3de2444b9e757ff797b2d867c33a291d515584664755c91abe827f29582", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["304402200d21c2978039d65afe25838f8bb132eff50c41a2a84fbd1909d70eaaea18c8a702207d32e19eb305341fcee33ea31ec200feaadb0fd9c7a9ccb3489e83d53a350f8282", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/884b9c73958e305260b7aa5b9969660166f550c3 b/txscript/data/taproot-ref/884b9c73958e305260b7aa5b9969660166f550c3 new file mode 100644 index 0000000000..1066c1a040 --- /dev/null +++ b/txscript/data/taproot-ref/884b9c73958e305260b7aa5b9969660166f550c3 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbf00000000a56b6a2060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f400000000b6cc542e020ae337000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acd5656735", "prevouts": ["148b28000000000021561f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "a4aa11000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "937d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936063b325ba14742a409980c1f892f30b155825542c53b8d83ef812e2e7f36a27808ba990ecca3673e7fa8965b90b12b1af4599069410dd603db7b6040d82b00ca2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd6f60e166ab3c31d6fe53c0e4c47c333102fdf48f7428a1dab907384d3ec09a32"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828b73eb14a8afa044a1a6f0495df635bb2745ae30a5fce84d6222f661b17136fd6f60e166ab3c31d6fe53c0e4c47c333102fdf48f7428a1dab907384d3ec09a32"]}}, diff --git a/txscript/data/taproot-ref/885db56c9eb82324c5a0f7e7aebd3d215505a5d3 b/txscript/data/taproot-ref/885db56c9eb82324c5a0f7e7aebd3d215505a5d3 new file mode 100644 index 0000000000..83b2c2b591 --- /dev/null +++ b/txscript/data/taproot-ref/885db56c9eb82324c5a0f7e7aebd3d215505a5d3 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c429000000006320e29abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5800000000394a92ad03058d9d000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fceb010000", "prevouts": ["57323200000000002257202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "ab5b6d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_13", "final": true, "success": {"scriptSig": "", "witness": ["32f22dbdfa1b26314684b5f5c57a4ff80e039089a64fead7df159c976b0c79be8372a0a62c5b04962820e40f3df9fb32324fd5060b2e31187452da2b20ec16ed03"]}, "failure": {"scriptSig": "", "witness": ["3b6054816d24a81873e62305a458b19bfb0a5ee92dc0a4bc4c1cad39c309b96811d3e187bcbb56b1bc02a385a1bf719315e3fc5b6e71365ae7800521c8d1c7ff13"]}}, diff --git a/txscript/data/taproot-ref/88684adb319365b522f644e785033cac77380e06 b/txscript/data/taproot-ref/88684adb319365b522f644e785033cac77380e06 new file mode 100644 index 0000000000..1110bc1e50 --- /dev/null +++ b/txscript/data/taproot-ref/88684adb319365b522f644e785033cac77380e06 @@ -0,0 +1 @@ +{"tx": "9a528aa802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf76010000007a3820ef8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a80000000038f526ba02ce2c980000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acd87ed42c", "prevouts": ["60e1680000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "5ef9310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "483045022100a5137299b03f814aec9199e85b3ee34923c4dc21a6cadfb3d79e2f5ddddf585002202612fd44339d2787fe9740dcfa86645776aa9eecef389fb6e08586c0ca2721a634", "witness": []}, "failure": {"scriptSig": "473044022029843b5432f0a4eb7a17ac0e430819dd664c8297167f9fa3965081d0c4427a0702206d00b729d0b6c97db926b64d207ea48e58bfce6c109e5326d46d9d1efe50449c34", "witness": []}}, diff --git a/txscript/data/taproot-ref/88797c1357072ec5f6d7a77f8f554fdf14935742 b/txscript/data/taproot-ref/88797c1357072ec5f6d7a77f8f554fdf14935742 new file mode 100644 index 0000000000..d1435ddf1f --- /dev/null +++ b/txscript/data/taproot-ref/88797c1357072ec5f6d7a77f8f554fdf14935742 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c700000000f132150a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270af000000009c88c48704e0582000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374876daaae5e", "prevouts": ["e225100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "19be1100000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_5", "final": true, "success": {"scriptSig": "", "witness": ["6af86ace4b5b0adc0f633234efe0c6fe5535821d6373137115c18acb360febeb08ac53193f96df42dba610abae501128f53d0ef7692c61c7b6e476b4fc323bb5"]}, "failure": {"scriptSig": "", "witness": ["1519e557356698397c225eb0f398cb6d4887c32e6cd21c869e74f5d17b966ea7c52fb3e6c5bb75c3cc07425e17b7ed7720dcf76cef4ab97238e93535f836078705"]}}, diff --git a/txscript/data/taproot-ref/88d3c033edc04d341651610ce654caab89f0c589 b/txscript/data/taproot-ref/88d3c033edc04d341651610ce654caab89f0c589 new file mode 100644 index 0000000000..46b5afdea5 --- /dev/null +++ b/txscript/data/taproot-ref/88d3c033edc04d341651610ce654caab89f0c589 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6d01000000b06dc58edceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4c010000002a7e2e9adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc90100000011c898bc0363a0a1000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a663000000", "prevouts": ["3c7c220000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "23ef240000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "d7255d000000000017a91498e55eac47e04767f832d50008ff18559102c9e787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "cb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652247e5dd926380ab694d48c4d41b564ea6c104d6001198f68608a68dc76789170b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720d6d723e038e6335a667e0268d00f4826306437ee84552cc7f8172181160444ef73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4f551d5f9df51039c21b920ecc011c032a9913b031d76462e802a27cbd0d0ed8dd6d723e038e6335a667e0268d00f4826306437ee84552cc7f8172181160444ef73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}}, diff --git a/txscript/data/taproot-ref/88e2041ce84c5a5fd2b056669856844691b520a5 b/txscript/data/taproot-ref/88e2041ce84c5a5fd2b056669856844691b520a5 new file mode 100644 index 0000000000..8a004d02a6 --- /dev/null +++ b/txscript/data/taproot-ref/88e2041ce84c5a5fd2b056669856844691b520a5 @@ -0,0 +1 @@ +{"tx": "8a55f3a20260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127021000000004a3d07fb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40e01000000ff9e6bf701948e070000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7fb010000", "prevouts": ["7a301000000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "1e2442000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_0", "success": {"scriptSig": "", "witness": ["5411ab388a5e613c9f5563c8b99b26cd7efa5ace3b7518b8bed09cf3cf08999db537d3a1ef3cc511f889c92b1c3f6f6cc31c665512cef9f588c9e6259cd6e1cb", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "502ed118eab16e576a66fc0f0979ed6e0b1f1c027f87c826"]}, "failure": {"scriptSig": "", "witness": ["9395491a345d7fdcffa83c296f121e38f8b550b1a5592513a788f8b85fa5122ffb49d8fbfcabdac37cacbc272bd83e871590206290bc35d9fd1d2e2037618411", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50d3147e86a8d316b180e0220e7493dd9f1ae2275b3d1d372f71e943394ef5af16779683c76935ca1f1f134899c77cf497cfe4474e83da69006b7b4b9f502d2a77281656c5c6d484ad50c7c5d04a5e762e865695dc89cf888137ecfb5b55ab8d66"]}}, diff --git a/txscript/data/taproot-ref/88e2266275388545e1f8f54b8fdbe89bbac43274 b/txscript/data/taproot-ref/88e2266275388545e1f8f54b8fdbe89bbac43274 new file mode 100644 index 0000000000..ace6057c5c --- /dev/null +++ b/txscript/data/taproot-ref/88e2266275388545e1f8f54b8fdbe89bbac43274 @@ -0,0 +1 @@ +{"tx": "3ba8d6ed03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1d01000000e3bae3a4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8c0000000072f053efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e01000000551026e5037abdec0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963948d921", "prevouts": ["75f85e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74c36b0000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "26ba240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d568", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936feca977ec5b5f207aa2c7cd2bb0ad4303854687107e6989c92d62d0c0a78ef8fb5f329bd8499c4f72b132f747438a5079d3448c35be74257418716cc5d770d7ef69ea04c091b2bc3b7c7ae53ee1804d998a6447fcbbef49abb62b7a394c4c123854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bff0445c3472362aaf493b483fc3cd3d99d32d9ae5b8ca00af6d946998df7578135ed0e678ad02d8eb601751aa1b9acf14c9c27e67d62b009394546cc2bb02284b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}}, diff --git a/txscript/data/taproot-ref/88ec99f421c2381e497fe2fc13b4f6dd8e8786d1 b/txscript/data/taproot-ref/88ec99f421c2381e497fe2fc13b4f6dd8e8786d1 new file mode 100644 index 0000000000..ef1391e78e --- /dev/null +++ b/txscript/data/taproot-ref/88ec99f421c2381e497fe2fc13b4f6dd8e8786d1 @@ -0,0 +1 @@ +{"tx": "4e0dd6e902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8c01000000124e14ea60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709701000000743f899101ad8b36000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4871e000000", "prevouts": ["60bf260000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "a3c812000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09027cd42eea675503086394052e96de2c7c00a2603057cbfc04739ef98af2b9fa9fe84682cd9a5e0b675c5201f22b16a5ba3b6ded254e8ec6111a1f6c09c9f49c01eaf7613f5f07fb856f1ae69d911c594f7c8373283c4ef95c08de3209da2c6803315f3bfe751a8cdd3e0d79022625e15b6c2daa3069f5a5d7e0448b403764d61847995ffc70693d96b5484f7ae2759b248c64985e8bfda3450e4278eae2551a77134fdbbba7f307606940661eacbac1a5196e45648423e83a53224b13015eb826fd699b43f0d116e5a66d0f2911de33b0c8d5d312ad7fe1ab97b62d0f5c81daeb0b4ee6efd64e3f74f56c7ad53eb40a61a75c72c304ca31d81a02905f3ae33b4db39d1388c3cab6d8e13f0907bdad8cf56d343e07b6fd780e4de27fae4957bf70c37e547940709ed8620b24a10ec565ffb0052eb39b4ab2f51c15082da35ddc69a81abc28b74f2a14f9abdd0aec758caa567e01dc64e49236f108e5fc5996fc5a547d1c1dacfcbe1e74ae122605a161274ceaa110bc9284f82355346ab02ecd3a25713ee3942defe4cfae8e728dc01aa52e2769ca39fa48b9580bbda2a45e1f6842771e608f219b600b3f7e2592082b02ac473973d4c8e1f140e2f812243425abc106a3aee3d00c1b0f49601664f47f8c2a06199835e58bec4b024a8bfe918f0affe49afac71be96026e2be9beb5f60c63cca6c532095c3e7f747e885d8129af3d52e87a2b30f46b47c75", "897d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e9facf4edbbf526ff5eeb12780b24daca1831089abc7bf461f974d05d276c4783ac632f1e88e109b3d5485dae08acb0148fc939094c3a94300b3efbd66c89bc20"]}, "failure": {"scriptSig": "", "witness": ["4d0902005fcda15b5547a050a302ff9b4c53ad25d35dad2db6d8df3c20f8d06f2817828306b864a43e12ed07c87d1d72a5ecb874ff8e60f3644422d9c5f0c4e6e7290587eaf407954dbce6ad0267ea92dfe86f9a2cf8e0009bb462fd14e10d406c7693961eaa8b13470e8eda3dae670a7da99c340f2bf013735f7aae9876c215224e3c3470f4e828c57fc99a7919ea4694ea64c906e75a3a70546b22348f6437665e503c89fcd86d553eed601edff18d482701827d89551dfe10f897c83f052b0691b0c9ec1b17489c3f09d7cb547627f526c25592ee507d6f2db55039e751687f6aae77982954d5389d86e92f9bf23100973997f3bb5ae8ccb4c78a9b824446fa617bccac36232a924bbb87004ae32843c8f1e95419ff2deff79cd4f05903caf27e62c98436014f1beaf72278ec1adf1f815ec9f45a9cc21e01170b784000d765915035d8ce83de39da7090b67b547d74a2ff1ca7f0dba97d6f1397df5db1f33febeeb399a04cdd269ba9e88d6fd942ebe7aff993758d73bb7d70b90ad55a926469a63c4e87abee1ef7cb5566f67c64a433cf6a384881a14256467f4ec8c73edcf14ea62b1adbf3b0bbb28236b4696b72d0ee600c7ac8c81de05302a90ca105d9d86a87ac18a1bbfc92f034233704c165b46a89c8d8d458cdc9cc9afffdd525e7d67ca0fd36d6ea4e3a6e9ad1f18222fee2be2b77a5d6e8ad0c17cd947f1fab6714c70e3bba959f57a3d29775", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d5a3aa5a515fb236d07a83ce20afcf6942ac7037fee8ee73df010e8d2641866618ef0696df011c2e84d95b8f4877f40057090cebf81e873c0600d23ea60362df6c56da6b4a79dd49e001229b88fb5122d120ac43d63d1be0cdb38b208b21132e"]}}, diff --git a/txscript/data/taproot-ref/88f24d3d0ee361f07b6a968b39726f1326ec9166 b/txscript/data/taproot-ref/88f24d3d0ee361f07b6a968b39726f1326ec9166 new file mode 100644 index 0000000000..5f63a5e21d --- /dev/null +++ b/txscript/data/taproot-ref/88f24d3d0ee361f07b6a968b39726f1326ec9166 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9d000000009313006660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701800000000454fe720038533720000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4cdccd43", "prevouts": ["d1d765000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987", "7bc40e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100944997cb5650b2465d9129612102ac1f86dc6492d6735de55b23b03d212fbd760220336c6d8eefcb240b835fe92eb55b684c6a2675e08698e582feb664efb446ccbe034104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "483045022100a75fd2fb2e26a1d3bc517dbdc5d419a7445025f2d7d20e7c0a7a6821607008cc0220522d346f973006b7a1f91a042f4f1e16954a0f74a55a0758dc36b8a407d5b12c034104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/89063488083093835287b1f9c18b2a7944664176 b/txscript/data/taproot-ref/89063488083093835287b1f9c18b2a7944664176 new file mode 100644 index 0000000000..6bc9869591 --- /dev/null +++ b/txscript/data/taproot-ref/89063488083093835287b1f9c18b2a7944664176 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702f0100000063a3e9c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700502000000f4bedc840447552100000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acae030000", "prevouts": ["fef7110000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8", "2a3712000000000022512077461b0e3955cce0a8e05b12e20464a062d47e96c909cad0353185349b78401d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936adaaf8ebdf7a353de71c15a37034f51fb6be564e19f20a2692fac514c8d543cb"]}, "failure": {"scriptSig": "", "witness": ["6a19616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/892cc3023c1245c75dd88475a0e49fe4d5063dd9 b/txscript/data/taproot-ref/892cc3023c1245c75dd88475a0e49fe4d5063dd9 new file mode 100644 index 0000000000..3f5fde2fb6 --- /dev/null +++ b/txscript/data/taproot-ref/892cc3023c1245c75dd88475a0e49fe4d5063dd9 @@ -0,0 +1 @@ +{"tx": "e4ba8c7202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c69000000005862f3e0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcd00000000a6beadbc02bf667500000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d7010000", "prevouts": ["d38156000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "608c210000000000225120242fbb4e68c81dfdc905839a5aa96f20c82583acd27e1bde1e06ec2a83f43f26"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b11badc1b045853cc6ce807b5e540444f7b87b7ae8b48e40871fd90309c75788"]}, "failure": {"scriptSig": "", "witness": ["6aa4616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8951f7b39335a2e501908ed76548372ea5979b19 b/txscript/data/taproot-ref/8951f7b39335a2e501908ed76548372ea5979b19 new file mode 100644 index 0000000000..fd08186495 --- /dev/null +++ b/txscript/data/taproot-ref/8951f7b39335a2e501908ed76548372ea5979b19 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b68000000006d4aa6088bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44101000000ac7b6e38014a4656000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f870b000000", "prevouts": ["297523000000000017a914a1b035f555fd87548264c3580a1f62a42acf027e87", "8479410000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000099", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f84a27e6cfa94e00b267aae0852f2041373509fc9af9b3b7fcc66b10f710e312dcf0c734edfbcac159d7813ef9562f4df1a796390e1a91bb6f745d3b9c841d624c8fbf2363a77354fc9c61d01c3ea3e8806c47304e5a0571bc5a832b63c4c4c93c50effc4608d2c714b1f589c510b82e2cb4bd2fb333954004903b4f08f38a79"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936629ce26d76b9b6ae4f96b691e050d04905dbbc4177f4fe4be81239365d442ac099aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d85ffea93b39ff48f026a1de615f9bd5d9d5cb27805fa051e581b49afd71e8d341e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}}, diff --git a/txscript/data/taproot-ref/895da8e67657010ab55eddf2b5e50156498f59c1 b/txscript/data/taproot-ref/895da8e67657010ab55eddf2b5e50156498f59c1 new file mode 100644 index 0000000000..8e78b3bdb7 --- /dev/null +++ b/txscript/data/taproot-ref/895da8e67657010ab55eddf2b5e50156498f59c1 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c57000000006bfe37f5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd9000000002b9ed0c5018f7108000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478720040000", "prevouts": ["571d530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a4e51e0000000000215c1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_71", "final": true, "success": {"scriptSig": "", "witness": ["fd1dbe90240c181a478fc7e390e34eb91e0305fb144e4de97169b0a2a9c10b074eaaa3b779ee1ba002fa9263c4072160a9eabe0c7495d97138c300e9d57f5de2"]}, "failure": {"scriptSig": "", "witness": ["7f579a24f80702c5a5046aa8d1686b53ce1e7a7fa83d61b36a5039dc63ab48d732d3d7baab6d385eab40bed5e14b1849caecfef505c2a8d246a5ba889a776d4671"]}}, diff --git a/txscript/data/taproot-ref/89843a3d7b0d8895dac3541e10e30e0400dc0f5e b/txscript/data/taproot-ref/89843a3d7b0d8895dac3541e10e30e0400dc0f5e new file mode 100644 index 0000000000..3ba6f1f40c --- /dev/null +++ b/txscript/data/taproot-ref/89843a3d7b0d8895dac3541e10e30e0400dc0f5e @@ -0,0 +1 @@ +{"tx": "d07c79b8038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41f0100000018502eebdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9a000000002d3f28d1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c170100000063ffc498030747e700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47874de2e530", "prevouts": ["a595390000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "51a15800000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "dec15700000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004599aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb406f18ba19de64c771db55f5af06ee3412ffaea1fa921290752d742eff6a1e67f7007ac6d9f1365651a4d55e6df0dcb109d268cc6c386b355a4997173bc95c886"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e197185a6c30608fff89dfccb39a96a02e4addd353a2af1bc7b33caa3a3ac07fec6e41ed285c226ab336f92f35d989a379104ed593ec3ff802714cc8e85daf0b3be26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}}, diff --git a/txscript/data/taproot-ref/899da8e446fd56d043e8d9fbd5821c09500c8654 b/txscript/data/taproot-ref/899da8e446fd56d043e8d9fbd5821c09500c8654 new file mode 100644 index 0000000000..360ab509d8 --- /dev/null +++ b/txscript/data/taproot-ref/899da8e446fd56d043e8d9fbd5821c09500c8654 @@ -0,0 +1 @@ +{"tx": "e1a1f69c02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0100000000f91c71a18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e201000000d7f6cca303f3e29600000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac8b000000", "prevouts": ["b9075d0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "61e43c0000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "717d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e8a1eca6f0ee4838d072753f510379a45001b572be63db33e52094017d71a11fe4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8674d0c931fae68ff43996ef27e2c8ff69e275e322181f769b95dd7ebb695302b667dde4f09f14471eadd81946489c41cf4fd01382a4947d773f1f2d4d0db4c57"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d3905b5eb580817a508bd2452bf8931c371ea644e13d674abeda6dc13dde8f16674d0c931fae68ff43996ef27e2c8ff69e275e322181f769b95dd7ebb695302b667dde4f09f14471eadd81946489c41cf4fd01382a4947d773f1f2d4d0db4c57"]}}, diff --git a/txscript/data/taproot-ref/89c130024a3230c8800c10efba7110244146ea67 b/txscript/data/taproot-ref/89c130024a3230c8800c10efba7110244146ea67 new file mode 100644 index 0000000000..7a6dc7634c --- /dev/null +++ b/txscript/data/taproot-ref/89c130024a3230c8800c10efba7110244146ea67 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e40100000087e476028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47200000000408ded1d02f5c75f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987a7000000", "prevouts": ["6082310000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "792e310000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c24c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361d17d6661cc8fb2f1af7119061da5758e988d072e66a98fe62e54b70963bbb8620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e119ca94dd80cd6ec848cff445ef1653ae8d91bf4217e3b4bb0faac1831ae9489bd0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}, "failure": {"scriptSig": "", "witness": ["4c52c2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936737a6221c4287b1aeadc2bab6c338b93b1853c569e1bc8424c8e0cbc8249bbac20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e119ca94dd80cd6ec848cff445ef1653ae8d91bf4217e3b4bb0faac1831ae9489bd0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}}, diff --git a/txscript/data/taproot-ref/89d3b93983fbc2ea121d1407d7944b74f44c67ae b/txscript/data/taproot-ref/89d3b93983fbc2ea121d1407d7944b74f44c67ae new file mode 100644 index 0000000000..9580d633b8 --- /dev/null +++ b/txscript/data/taproot-ref/89d3b93983fbc2ea121d1407d7944b74f44c67ae @@ -0,0 +1 @@ +{"tx": "0200000001f85ef04c4139d614d10d1a30e75a9f6421df67317126da87b2f877c2ab20246300000000002f8f319604f3a7861511000000160014f2ca549f2f8613e81a7cb48fd110f37b7fb1529a580200000000000017a91402e53bc18808b3955166f5113b83b265fa421e9987580200000000000017a9143fd5279308772d81081a68d882f81a7ac08fe1d9875802000000000000160014bf1a19526352877c6b170dd8786dc91b1610ae1ceb8f3f5a", "prevouts": ["dd6589151100000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/keypath_invalidsig", "success": {"scriptSig": "", "witness": ["2acb152055acd589ab559fab80591212866cc02b4a6967cab7e92676567cdf906fe0cb89855e0f7bf24b1b402af7b12ec05358eef773b32c861a8e53280322b4"]}}, diff --git a/txscript/data/taproot-ref/89db7a1ad6220b1635de9734c32a76ab69bb70e3 b/txscript/data/taproot-ref/89db7a1ad6220b1635de9734c32a76ab69bb70e3 new file mode 100644 index 0000000000..8ca1a4ed41 --- /dev/null +++ b/txscript/data/taproot-ref/89db7a1ad6220b1635de9734c32a76ab69bb70e3 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706d000000001f9bde91bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf790100000000c42cfc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48601000000dc5b1c9a012caa0c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc786000000", "prevouts": ["2d69100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0c5769000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "3b5e3e00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f6", "final": true, "success": {"scriptSig": "", "witness": ["007bd681c6dc9c8c21217ef9bcc62c4dd2b145578198511d6acc59e8f60f176abf98b3e7c63ec1be58765e29b81e930315db501bc126e047c76f6a2bb5e238d782"]}, "failure": {"scriptSig": "", "witness": ["bfa88c48012f165fc070b203cd48090df0fd5b243e12775ba2fa7dad623f6caad2c3d363440efa1f991c79523dc99436bf88b1b88f6f70f536dac72e5278ad65f6"]}}, diff --git a/txscript/data/taproot-ref/89df1562d15e81161f4c47827c0802d44a116dcd b/txscript/data/taproot-ref/89df1562d15e81161f4c47827c0802d44a116dcd new file mode 100644 index 0000000000..84ba97ad28 --- /dev/null +++ b/txscript/data/taproot-ref/89df1562d15e81161f4c47827c0802d44a116dcd @@ -0,0 +1 @@ +{"tx": "db2f843102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1c0200000066a63388dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1f01000000bf6ffcb001a26d3d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71019ae4b", "prevouts": ["a799760000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "62b4510000000000225120db9ddec7a132eff6af262a32a64079b83118332a0594bc0106395f5efc921419"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ab7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936868a8b5d4fa4ebb812e9187140be33b96106da21b05039089cc432e85b6849d0588819b06684552554786b2b49e7cd3d9dcfc0725dc4b3b93f8768a6a84fb31b7c07bb1aa10d02d314eb70c923196d0e49e71087637e2d5a1d7fe44c2440c398"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93686c31dcf8859245bfdb2cad1cc94d16ee0f95fa651e4b9f3d702e098ccaa2b3aa05ea26d8201abb1a5c146c7fb3e541bebd813f78d5cb214a01f0b6fbe6f45888cb303569f28fbe8acbcc2d27d183e3a68170f5392df28f40a03efea695d856e"]}}, diff --git a/txscript/data/taproot-ref/89e008ea516ef46108ee4b85055e4cba034e75c2 b/txscript/data/taproot-ref/89e008ea516ef46108ee4b85055e4cba034e75c2 new file mode 100644 index 0000000000..8df3ee4717 --- /dev/null +++ b/txscript/data/taproot-ref/89e008ea516ef46108ee4b85055e4cba034e75c2 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45b010000002378e255bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2701000000bcdd8d74044f8ea9000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478740000000", "prevouts": ["780d3e000000000017a91481d4142ddc5ce7a3de4047bd48b623419b5bc45e87", "ab0c6d0000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21591f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["5b1ac49476ce8752c6dc77f30c28a07a3c6555a0b869ccadbc97ddecfc5a9a87f24eb13ce140b2c2dadfb72d43206eb9e2965523aa3f02d2e478c54bb4a4e034"]}}, diff --git a/txscript/data/taproot-ref/89fa19afc7b932f3749a095009d1bf1c6162c607 b/txscript/data/taproot-ref/89fa19afc7b932f3749a095009d1bf1c6162c607 new file mode 100644 index 0000000000..5767afb631 --- /dev/null +++ b/txscript/data/taproot-ref/89fa19afc7b932f3749a095009d1bf1c6162c607 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ec000000003f55e4d0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4d01000000793d45fa02b27535000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a15b323f", "prevouts": ["522912000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "43a8250000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["ec4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd4d99442df2d897dc88267982d8eb20b7dde930eaaf897e66f6a5ce7f7a19008bc5bddb1ae8a97e111feaf10767a648ae88621f6e3dc27f3d4b61f2a6f156b2a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}, "failure": {"scriptSig": "", "witness": ["4c52ec", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1ea5b08b003f1d8a082790805ee2a5a4def5fb527637606ac665fe1637cb888218bc5bddb1ae8a97e111feaf10767a648ae88621f6e3dc27f3d4b61f2a6f156b2a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}}, diff --git a/txscript/data/taproot-ref/8a0a41ec1bffbaf105b7b5b3784d680d00446960 b/txscript/data/taproot-ref/8a0a41ec1bffbaf105b7b5b3784d680d00446960 new file mode 100644 index 0000000000..c6884998a5 --- /dev/null +++ b/txscript/data/taproot-ref/8a0a41ec1bffbaf105b7b5b3784d680d00446960 @@ -0,0 +1 @@ +{"tx": "ddd1479b0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702c010000000c199496bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfca01000000ce7dd895015e5252000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67e020000", "prevouts": ["67df110000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "ce3d7e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a85", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9e4bee3c96900e797e1fee678d6e06beb60b8d47d410b933df49cb9a9e4051dd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51f1361648aec2fada6693d9b39e398a39a20a7ec02f5f37d94bd6d3a28893e48e1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a3c2beca4b8e4f57261ec8681e6b4464b1dc20a4d14bb0589bf8084eb401fef1f1361648aec2fada6693d9b39e398a39a20a7ec02f5f37d94bd6d3a28893e48e1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}}, diff --git a/txscript/data/taproot-ref/8a0ad7fc3cf79a721233622b6ae7a4bfc52c228a b/txscript/data/taproot-ref/8a0ad7fc3cf79a721233622b6ae7a4bfc52c228a new file mode 100644 index 0000000000..ecd97b97ba --- /dev/null +++ b/txscript/data/taproot-ref/8a0ad7fc3cf79a721233622b6ae7a4bfc52c228a @@ -0,0 +1 @@ +{"tx": "a8b92e5502bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7c01000000345ea6848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40901000000fc4b1ed502e2dfa00000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac69b80e4e", "prevouts": ["8402640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7c773f000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_16", "final": true, "success": {"scriptSig": "", "witness": ["b1f4e3b8205028770f75a86f26f17fd5c0022451cc288b1d20de7e9503f6e4bb05a65c31706029f2ca81866adeae840d8cd1c063688f8b224e01c0c88ec2f19e02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["39952cb504494eade9631824e8b0187360a59b693b51a347283bb6d608b5e70a5e274c3ebb63fe4d777fa4f9437ed11bc98facf35ade273ee5c06bd763aad17d16", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/8a2775fc1b4fdf627698087dbc89fc1a3b0943be b/txscript/data/taproot-ref/8a2775fc1b4fdf627698087dbc89fc1a3b0943be new file mode 100644 index 0000000000..13f64d365c --- /dev/null +++ b/txscript/data/taproot-ref/8a2775fc1b4fdf627698087dbc89fc1a3b0943be @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270130100000004782a72dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1e010000004a150c568bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48d01000000dfbafbcc0153c12000000000001600149d38710eb90e420b159c7a9263994c88e6810bc776010000", "prevouts": ["053e120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1850210000000000225120bf7c0652824d65f4682a3056a4ee7d3427d5bd09fcf8c412b9591353033138ae", "3e9d3b00000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361eff29e1a89e650076b8d3c56302881d09c9df215774ed99993aaed14acd6615"]}, "failure": {"scriptSig": "", "witness": ["6a0c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8a289fe11f09a8013015d4bdd383c4d26de1f483 b/txscript/data/taproot-ref/8a289fe11f09a8013015d4bdd383c4d26de1f483 new file mode 100644 index 0000000000..ac1991494d --- /dev/null +++ b/txscript/data/taproot-ref/8a289fe11f09a8013015d4bdd383c4d26de1f483 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb700000000d737d52860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d300000000aa1153480339fd2f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796741c1828", "prevouts": ["d3ed200000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "6e931100000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["ed4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93655e252cfaa9768c1119fa64085e95b8d16b96942ccc526bc25f5651427cfe139d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c9b0690fa0521f4fddf88c65f69e0716898ebb5a52dcb1ee37dd2f34a8a99dbd71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}, "failure": {"scriptSig": "", "witness": ["4c52ed", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360411da0ef60a663b804e7225eddf07cb547b0be4fa0e1866d29c65c2bfc285257eb7d8a059ff700a84b94cf01bc4b173d99041796f2088e1a59df5cc5c18f54d86475c33b310e45b92339559838140b9b3f3d62b1cf111e129ddf9f566de62eb71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}}, diff --git a/txscript/data/taproot-ref/8a29d68c4034560207bd08a36c47e26953bebe3f b/txscript/data/taproot-ref/8a29d68c4034560207bd08a36c47e26953bebe3f new file mode 100644 index 0000000000..494b38d548 --- /dev/null +++ b/txscript/data/taproot-ref/8a29d68c4034560207bd08a36c47e26953bebe3f @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127093010000002d19d9aadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba200000000c727f6d70274d23500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748705010000", "prevouts": ["f447110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3830270000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c5", "final": true, "success": {"scriptSig": "", "witness": ["d207c56374a7ed88115838212127ae62b4f5c0a8c9245d3276c8ab5214e160e3d4fdfb9a2cc7bc3678ad4f4ce96159f1b3a803cb40a3f1c6b4fccb83494e689f01"]}, "failure": {"scriptSig": "", "witness": ["5252a210e47bf9a706de505f720b8f4e49ac89359706d0765d1d47817c280013ae4825c81edf38b21dea276996e2af22826dc4d32f1a57723e699742a38dff74c5"]}}, diff --git a/txscript/data/taproot-ref/8a3477e0575b2a93269f750c0395201cd0f19a37 b/txscript/data/taproot-ref/8a3477e0575b2a93269f750c0395201cd0f19a37 new file mode 100644 index 0000000000..3d3909f205 --- /dev/null +++ b/txscript/data/taproot-ref/8a3477e0575b2a93269f750c0395201cd0f19a37 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270230000000056475b9ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca0010000002f35f8e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8900000000ccb14bf503f56ee6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898746a49225", "prevouts": ["6ab20e0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "e73c5e000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "aea27b00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638968", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5f4aac5bedb8d92acb3d38ea9721137c03ef46c31c1e33f2b8a1b5032692e959886f85ebb300297009aa959255e1f8e976b091c7e06b33477ed400c40a83b4ccb3e0a345cce78c1fe891e9b22b966ce84a8b12623d949f63d5e15e148dd67959d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936166b0e2d82fdc11b86a491b111c45071722397947c900f7dc0756a6987fcf7514b1cf341ebb9351320fe3e143ffa2dad1c15696d7ac983fbe7e302fe7a073e7ecf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}}, diff --git a/txscript/data/taproot-ref/8a3c9306c70ceb610d6f1f738df6679eabff4238 b/txscript/data/taproot-ref/8a3c9306c70ceb610d6f1f738df6679eabff4238 new file mode 100644 index 0000000000..465e7ad769 --- /dev/null +++ b/txscript/data/taproot-ref/8a3c9306c70ceb610d6f1f738df6679eabff4238 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48f01000000072c8a9abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4e0100000043944632025c9eb500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1c4cd623", "prevouts": ["881937000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "7fda8000000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ca", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f336cbd2c434dcde2d093b968cd4500063515049b2ab4f542ce372ccec22f446d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c1012b923c15ff4ca5711684c82f77f7d0ace9e417918255ff860668826001128a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d520ce1e8f5df7741068fe8539649c9e500f335a96aa69621db8e7a39b2f9d4cf99c996d59a69d75c183cc1e3ba6b17987582b2274e87a7d50251745c93805cc8eba4e75ed92f6e82baf0cd6101dcd67879c020ab703e3dac001fd69a24240ecc7034c4ece6ceffdf067bd97d8bd2a80e986f14e8b5dca33ff1523eba7a77d63"]}}, diff --git a/txscript/data/taproot-ref/8a52da0771f3d868955501e901d2540538f4d521 b/txscript/data/taproot-ref/8a52da0771f3d868955501e901d2540538f4d521 new file mode 100644 index 0000000000..97d52e1487 --- /dev/null +++ b/txscript/data/taproot-ref/8a52da0771f3d868955501e901d2540538f4d521 @@ -0,0 +1 @@ +{"tx": "b824250602dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7a01000000fd949edddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1401000000948f09de04c9c07800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487fc000000", "prevouts": ["ef115600000000002251209f6df9bf0ba86119ec56bc774d8ddd924452496c0c827ee2df6dd8b5f3d2e1ef", "e303250000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93635d60f8ae57e87c9caa24a9d39cb53ca5fb1c070fbd40625acedd7253a41b651"]}, "failure": {"scriptSig": "", "witness": ["6a6e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8a7bd56f4854fd39ca2b9dac03cf4e4f92a1b93d b/txscript/data/taproot-ref/8a7bd56f4854fd39ca2b9dac03cf4e4f92a1b93d new file mode 100644 index 0000000000..8f80f9b6d7 --- /dev/null +++ b/txscript/data/taproot-ref/8a7bd56f4854fd39ca2b9dac03cf4e4f92a1b93d @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd10000000089808f898bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f9010000006c9d49b102408d97000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac25e01256", "prevouts": ["56c25f00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da", "91d339000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "3f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369aba35d3104e600974e554b9cb99049f7aee0f23ae7c74d9fbe3a88b265c838bd728e192bc5f69ac80b4a6e0537a86a2095372e08a2c76143a8a8a3d0ed1b85bc06da1f6599d7e514a71ffa8a2afff73792fcf1df1b953d2196d009aa835a52703985aa46dcbff8b0495de750bd1afe74a661312f7eddf1146199ee1ea8c08aa"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3d62cda1d889ee05ca59ece4e76d2fa27c0bab47b49d4f70b1e2cb0efe9a711fea811edfde1d836b623c2094badb4ab8bc7795b2b49da5506600222f32ea3fbd"]}}, diff --git a/txscript/data/taproot-ref/8a8928f98f7dd800744cfcdbefeff96b97543b76 b/txscript/data/taproot-ref/8a8928f98f7dd800744cfcdbefeff96b97543b76 new file mode 100644 index 0000000000..a5d083f583 --- /dev/null +++ b/txscript/data/taproot-ref/8a8928f98f7dd800744cfcdbefeff96b97543b76 @@ -0,0 +1 @@ +{"tx": "766d60d703bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1201000000da307bb5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0000000000def8accadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba10000000099eb13d001d42a740000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72a040000", "prevouts": ["f9057b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6272570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b92221000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "937d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2350f02f615a91dbdd9bf0827d9652a9c0f0c48b61032bfc7abdf258f76a30109625eb62ff27a7a3a1f9ea411032fb959ab5a0c50697db7fef72f456b5013f4a62d371a9b01f30ea116c30e8195d2d6eb7c97c8692c0c95de95a904f83b96ad4"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366533bb586569e93ca4a2e8b34ab37dbed5250778907945cd2689174a39ff06ce2350f02f615a91dbdd9bf0827d9652a9c0f0c48b61032bfc7abdf258f76a30109625eb62ff27a7a3a1f9ea411032fb959ab5a0c50697db7fef72f456b5013f4a62d371a9b01f30ea116c30e8195d2d6eb7c97c8692c0c95de95a904f83b96ad4"]}}, diff --git a/txscript/data/taproot-ref/8a95cc474b746e69625f0fe8c262c07a37a82a7d b/txscript/data/taproot-ref/8a95cc474b746e69625f0fe8c262c07a37a82a7d new file mode 100644 index 0000000000..d5c2872406 --- /dev/null +++ b/txscript/data/taproot-ref/8a95cc474b746e69625f0fe8c262c07a37a82a7d @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270940100000005a0461d010a6804000000000017a914719f78084af863e000acd618ba76df979722368987c7000000", "prevouts": ["7c9b110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_6c", "final": true, "success": {"scriptSig": "", "witness": ["f9d6d1cb31f9e227829546490c6cd0c0b52bc1c3a5838984c3e685bcda8254e0f1afa415aeb8736a44ca1bb04b5a05dd1f17b5696cccc66625fc9a531735ad6c01"]}, "failure": {"scriptSig": "", "witness": ["8aed9816ace7e2ee68b6ff38879d2366a47516ac9fcaf3c1846446fce6bd6f293a839996456ef86d3b826f3e0e6e26ff78a5a600f80b28b3ec3703b4d131cf076c"]}}, diff --git a/txscript/data/taproot-ref/8ab6f611cd721ca128cb8f5ea3078c1b431d5704 b/txscript/data/taproot-ref/8ab6f611cd721ca128cb8f5ea3078c1b431d5704 new file mode 100644 index 0000000000..c7c5d45c21 --- /dev/null +++ b/txscript/data/taproot-ref/8ab6f611cd721ca128cb8f5ea3078c1b431d5704 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b100100000018a6bf8ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc8010000001c25910902ab3e8900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875502f91e", "prevouts": ["12271f0000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "ba146c0000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e368", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514e3e51653db7a26891b04c3a1156361c2ac14b53ddf2b0df0fb784e58b5ceef674166a9b0f1c55c1671126e5eb7d3b70cf827ee1dc762db7ef6404d6cf84ba0da54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366180c1fbed8b69bb15135837f8534a2d361ae32955d37b8de7eb439883150e361741062de046b8f3bdf7ef41b5db27631c489deab6fd85436806296af4173e7e74166a9b0f1c55c1671126e5eb7d3b70cf827ee1dc762db7ef6404d6cf84ba0da54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}}, diff --git a/txscript/data/taproot-ref/8abdd04f7c724f0a762d03fb6fb80e698280ae9c b/txscript/data/taproot-ref/8abdd04f7c724f0a762d03fb6fb80e698280ae9c new file mode 100644 index 0000000000..c0bad46e33 --- /dev/null +++ b/txscript/data/taproot-ref/8abdd04f7c724f0a762d03fb6fb80e698280ae9c @@ -0,0 +1 @@ +{"tx": "af7531b002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b15010000003f6948df60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700702000000b229d6fb012748260000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc4f020000", "prevouts": ["bee5240000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50", "25fa0f00000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "227d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c13c6885c53a07614131d749dc0b9c4fac4cbf357599a76450ee1c7b87f78943dc4c18ce03381be5d83370dbaee0482c0440aa7aa94902a00244e0237bd29478fcb15428af69077ee4e47ddc8bd2adcf7d97a29fc56c75a24a213a103a1e3586"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e86a45def9951625cf02c88598f8616d12bef3cc01ed824d79a70edf31b7fbe0e1a4a9bce64ad1fc5af22ad5621933415c83e23766bbab20239912b691ace9dee2"]}}, diff --git a/txscript/data/taproot-ref/8b08333db48411d829619458a66585a39efcbb11 b/txscript/data/taproot-ref/8b08333db48411d829619458a66585a39efcbb11 new file mode 100644 index 0000000000..6e29548c63 --- /dev/null +++ b/txscript/data/taproot-ref/8b08333db48411d829619458a66585a39efcbb11 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b14000000005d6cd1b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bd01000000cedba4cd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700102000000d9229fe1044be13e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796c7040000", "prevouts": ["a80a1f00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "1e3d120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "67ba0f0000000000225120fa0c69fd3dab50066606d386e9137466ea422a077bab3cf3dc61d0cdd59f488d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6607ccaad4a40cbb35d90662461c37fc46c0a06aef072d0f22e66c7426113f5"]}, "failure": {"scriptSig": "", "witness": ["6a69616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8b2cadafb5c90652623fe20f1da4fa65454b1764 b/txscript/data/taproot-ref/8b2cadafb5c90652623fe20f1da4fa65454b1764 new file mode 100644 index 0000000000..5d867c97df --- /dev/null +++ b/txscript/data/taproot-ref/8b2cadafb5c90652623fe20f1da4fa65454b1764 @@ -0,0 +1 @@ +{"tx": "7f672b810260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704600000000d96525f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce000000000157fcba20390206e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a66a020000", "prevouts": ["5d7811000000000017a914b0716f1bec91d4758ee97d9063c9da884dd2ba5287", "32655f0000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c768", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0406f8ad106053ce18d601a69e7ac0d788ca81f875fce58e79951c9b079357c4ecdbff3eecb3f5fa90fd3ed1bb4a8c0c36fc15f71a4102bd4f372c5f95e5c7d5941b26b476c022edf868776977d31e53e85212ba204fe552062798c457a392dc1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c27b7e516a1b3919c0c2aae21712d1c7c40c32040b64b5fd9dbe249132a2d861ab0398bc4828dee75def1007ce877d708ab4ca86c9734bfab291d4bd05bae3eec1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}}, diff --git a/txscript/data/taproot-ref/8b379a5db43a90e8d77da62355f3ac86f95b1422 b/txscript/data/taproot-ref/8b379a5db43a90e8d77da62355f3ac86f95b1422 new file mode 100644 index 0000000000..7618477a46 --- /dev/null +++ b/txscript/data/taproot-ref/8b379a5db43a90e8d77da62355f3ac86f95b1422 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cde000000009f5d27808bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d201000000283e3bd98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42700000000da52b0940417c3c800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e52a3644", "prevouts": ["6fb15200000000001653142540f27e90740933c99d4f17ab2dfc6c82951cfb", "55f23f000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87", "a8d8370000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c9", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936643cf28b3f57e3e135ddaf8a1f03437647ba3161555e3c3b2dda50db56032ea077878475803065420b5149b394b9f2a263406aa3a3cf62bdb9b13e67809a83ebcc9238bf2d7dc0bcf11838c34785251ea2fa5f3bb034bc98e2e8efb0909b7dbc17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d3c147557fd4654830368843709159d459528293d28ab2736e9587eb54fea08bf48725aff660a72fd31f8e9799fbe605d57d774c031cecd8b6989780acb581b6b24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}}, diff --git a/txscript/data/taproot-ref/8b436810adfe76e9f0a84f1a2382284cefc4128a b/txscript/data/taproot-ref/8b436810adfe76e9f0a84f1a2382284cefc4128a new file mode 100644 index 0000000000..52b6003bb7 --- /dev/null +++ b/txscript/data/taproot-ref/8b436810adfe76e9f0a84f1a2382284cefc4128a @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ee010000002a96f3a28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f4010000000cf823d504af574a00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fced92f55c", "prevouts": ["dae111000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "57623a0000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c74c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d86572024cf807c4b041deab506320299ff116921971164ef72b2742896e58a89a98f91cdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}, "failure": {"scriptSig": "", "witness": ["4c52c7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d5c50aa1912c177c20f79fe229e02015d7cb9a41b9e5cf4d8e88b9fad70bb67a0d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3ab0398bc4828dee75def1007ce877d708ab4ca86c9734bfab291d4bd05bae3eec1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}}, diff --git a/txscript/data/taproot-ref/8b4a8862bbb6306cc7b4473bba476bcaf6383aee b/txscript/data/taproot-ref/8b4a8862bbb6306cc7b4473bba476bcaf6383aee new file mode 100644 index 0000000000..4983f84bd2 --- /dev/null +++ b/txscript/data/taproot-ref/8b4a8862bbb6306cc7b4473bba476bcaf6383aee @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cad010000006f1f83aa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702302000000807b5d64015f1d3700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1d010000", "prevouts": ["3a024d0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "f1401400000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a47841bfd1c7801e119366e06eef8526d3a7e36eb6419e26d5e658afa9c8cca5b88f998be5301314da3588cf7094ff0b779091d289dc1f0b3826508d93d51b78c2782374d67da9500785d400f7ef10ae84f146bbb568355094c68456b68f7a283b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb0a7dd9fe9480c6c770de395b90f3ae6bfd835bf7cfa16a827fc723deabf662a469bfc8de16b0968070038325e6b76e7740524a1c4ae3d3f158ce1e63cb3bfd7c6ac6071aeb5642f86cbd8c403a36f49b1ae971c310fa0b2c6d23cdcc52f9ae3b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}}, diff --git a/txscript/data/taproot-ref/8b5c3d67f71726b53372b58a37b41fce4a30a5ac b/txscript/data/taproot-ref/8b5c3d67f71726b53372b58a37b41fce4a30a5ac new file mode 100644 index 0000000000..2569544acf --- /dev/null +++ b/txscript/data/taproot-ref/8b5c3d67f71726b53372b58a37b41fce4a30a5ac @@ -0,0 +1 @@ +{"tx": "9f516898028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4370000000009665a87bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe60000000014113c8e04b9d8c0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac96dffc49", "prevouts": ["6081400000000000225120b10c5cbe32c5e90da6e76e6bf182a80e9130a66e1280db2d9eaabffb93bce832", "aeb98200000000002251205b7dc500a06d9d49351272d9ef7a52148a11476ab62e1647e512b05f260e1644"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367e3e831b563b2b880bbf500bbc169294f1ed56123dafb9d201684792ec0730d8"]}, "failure": {"scriptSig": "", "witness": ["6a4d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8b5c7dbd04ac3065bf6c8164f3068ebc910ddc30 b/txscript/data/taproot-ref/8b5c7dbd04ac3065bf6c8164f3068ebc910ddc30 new file mode 100644 index 0000000000..d96c5a4755 --- /dev/null +++ b/txscript/data/taproot-ref/8b5c7dbd04ac3065bf6c8164f3068ebc910ddc30 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0601000000cd66d1bebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf64000000002ad67cc0048a99e0000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac56000000", "prevouts": ["9ca76c0000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "71787600000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "e67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936436f2c3332eeafdc86102af3c688be283ada2e1fa472215067cffd97efb6f869e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e824d900ba5429999a9d5e0d5b2b257ef1523eacccb529e56e7cf347f802d02f5093d03784866e2fdd94d7d1b7c12b1f0da96746c05c19b8696f0ac6a701ba8135"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93674a87b9bffe1a64ed32d6b76ba55fcf88384cfec2ec89e9610ad09f9a858aa1324d900ba5429999a9d5e0d5b2b257ef1523eacccb529e56e7cf347f802d02f5093d03784866e2fdd94d7d1b7c12b1f0da96746c05c19b8696f0ac6a701ba8135"]}}, diff --git a/txscript/data/taproot-ref/8b714927de7515d6467407861bea2d1b6816f769 b/txscript/data/taproot-ref/8b714927de7515d6467407861bea2d1b6816f769 new file mode 100644 index 0000000000..7bf99e2eb2 --- /dev/null +++ b/txscript/data/taproot-ref/8b714927de7515d6467407861bea2d1b6816f769 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e400000000e43d3005dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdb01000000dc21dcf7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1000000000413109ca01c445280000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca4000000", "prevouts": ["00ca0e000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "3c28250000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "bb275b00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/oldpk/checksigadd", "success": {"scriptSig": "", "witness": ["15912b8bc6304a33b8ed9d265d403d3802e220f88982dfdb6140a347643b52711d78e260943da36f6ebe274489b03d50f52b72255a7e4d010c67d28a86c13b16", "2102871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362c90e4fb2a2921352a86dc7c131784720f0df4e82c7414e3d711f961d82204f725d2d811f1fcdf038ed551a0402edfb56d2882c43855b6a90156ad93536f2a610b12816ededf24e7a65ef26600ff9c8d6dd6be11892b31bc567d31a4224fa918dc78db5a53c26d137b3cdb2b3520f4dc1e22712cbed9218761dec041353758fad69ad387871b891a9868cd30ea616cc787b69a97197bdc922cdd155c8ad8c453965701560206cf1b3adefb9fc7df786920fd1994eeff2c65a7509446ea0945156e83c1ddee4936f7055b581c15b022cb9fc52c765ee248979ac64249602a239e3d351e4d299371dcd96f5d6f96d46c92a1b411ab803a45e7e6d51443156c8f100202def45ffd88d49fddde6662fe7624f6dff183f786d6ce43460a7a16256f5521d7fab248574dc85f779b345c50aa2a58555066e952f31a388332632e2803ad2025e8fb1db960e910596f419fefc77f259577ed82c1cd7ab83eba63e03c4a2615c22c4ce3b706c1d8a9a9d3ff978e7621b37a6868e1d99e3364a361d6bae06a319789fad1a51c3692427fb2b20d7269f1c10af57e5ea3e2c20e0e79126c0422063108b9f07592932b9e5078ce575b814c49190e939925197578c8b829acd51d8b0e659112c9f7f4ef135ef7e3677927c686e2cfb83a5642dd1287d117c18623babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["c917a99b78f4b28b8b2a524e089c2965c939a52d493680da9d7c6ebe049034bfdf12f4070cd3ac3ecbd4ffc690272386f2ce294d6a953327d2eac43ecbb606c1", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d2db232a58a684473efffe5f8be15c17374986169cf18c1adb110b544d48679b6f3543d66dd2934a4b4b5b83f3181725b5ccb68f1096ac62351c7c97bd1fb9501b8110e709da1864e3fbcb3b5249515c34bb807e7a52bfe6718950e769cad388c56ff404b78dc0a0b90d50115d89846b94a2b0a1f0895318a364e3dc179dd61f9b1e0d638a311a5be1486a7a4c42f89ed43ffd1d5b18820f631006aab35c0b2a02b593180c53027b35b862cc29f04a25efce114c7682377a83dbcf64f6fe42598064c72ae707f2b03b7d69f3c0306a0bb5edc9aa2d90aecbb96bd412d5b1ee8f00d68262204427d46410b755bc31a6012df0b06b921e6cd021b936d3d4c99eead90212921e1142bda8cb81c5ff3145b34391c40797432570ad9a88a0958a1b955fe09784706370c5f6fd13c48513ab6cc16af1e04504ea44462b93ae24aca3b2228a833ef2c51accd6ee09327b5cb9ad2975d597ee135bfef0964473e20f824ec199d2a72d3d5f5ff6ee974913584144656ddfc893ea617971c4925fe8b7e1c4f556906203221bddfee6deb7780e80a3769637a05bcf2efe708f1aaa4a6ffdc17363486d1e033637af9f6d28292a4f4527a2090bfcb5efca2ed9c0d63c01e16c98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/8b7781da37cae546b0800cc96db74dfb1988fa5d b/txscript/data/taproot-ref/8b7781da37cae546b0800cc96db74dfb1988fa5d new file mode 100644 index 0000000000..a84105428d --- /dev/null +++ b/txscript/data/taproot-ref/8b7781da37cae546b0800cc96db74dfb1988fa5d @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c485000000008b339dabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0600000000e4e34c2901612901000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48716040000", "prevouts": ["f0d93500000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1", "dd75230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6adc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367137195a510293ea231b2d4432bd69f7d82c958dc1ea3c0850c3e080e60319b4a39f866618102a4b08e1c83cadbbeb41bf3ed62f238c8432fccdf019ac45545bfaeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c4113e49c86f839239ec362989ec8b927e111aaa7a55b69f94a02373a905535683faa9f1fb55f2c754174031ab88b9fb2c4d1471ac070ceb12091a666ed99e827470af5f469e43c444817efa23ad8740a4ec3822d36804e7973b39d521bdef59faeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}}, diff --git a/txscript/data/taproot-ref/8b8235aeb63d5111ff81b6406893e2c114f3d163 b/txscript/data/taproot-ref/8b8235aeb63d5111ff81b6406893e2c114f3d163 new file mode 100644 index 0000000000..0823aed2f3 --- /dev/null +++ b/txscript/data/taproot-ref/8b8235aeb63d5111ff81b6406893e2c114f3d163 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41a0100000058adf9d98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bc01000000feafeba002c3807700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac0756be2a", "prevouts": ["75b6380000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f", "472441000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "147d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ad1099cc9bb3a5e2066786e30d0fff4359b3ce527e140b44a0b5c89c6b4383919a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100efb63111b06c7a0ce3f44d9f6906db8fc60057b72694cfd58ed25db88d188e5fc"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e5061717769e1dacf027f152dbc7d505d6964cf4bcf3126b59284ff35a733198fdc2d7aa80560d1a81b9ed628b4b72c1af718550327182f7e69256034992ba893488b030fbb16fa8d50c4f1f044e6df81cbeac111f0be15e3f466e559374b3e5568dbaf979cca58396dcf271ee6fc736edd00965a3b0ecce9c87347ff88ab08a"]}}, diff --git a/txscript/data/taproot-ref/8b926866858180ba6c9e1a87ace930fdf129b59b b/txscript/data/taproot-ref/8b926866858180ba6c9e1a87ace930fdf129b59b new file mode 100644 index 0000000000..ea14ab5efc --- /dev/null +++ b/txscript/data/taproot-ref/8b926866858180ba6c9e1a87ace930fdf129b59b @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704001000000baee91adbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4c0100000055b2f3940307357600000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6a048da2e", "prevouts": ["6aed0e00000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "77d6680000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902488b34b36e34d820caceca2b79bd093fa8a7714f7500d5ee32536265b602f40f0be44bf66930e1724203b4edda0782d8468bd533d05c7fdc0daacf035698098cc81547ee2e067b75c4c4ec2758a52c52a5616c5ccfe85bea79a0642313ef787480076ceb3e7bcbd56fa57fc5527fe643943cc62483d8d33d856b11ac8f7468d5e121309217a7cfe0378fb6b8588cc6c238711b6e0f0a743e13ab9659bc5650e69d326cfe0177f77579b9f648a9526ac0adf1ac4aa175e56143c74b73c641e861e14c6385e683c554f05a2a8de1a56c36192818205f7371740c35c4d082d58f3d4565ddd1aa3fd5dcd4540515e951a78585fefa6471481652a715f77b3ab0a57bf75f8022f89794bdd054d1a466bc6a1a93fcab956d4448c487c812b5e8d42ba697c6b8415f59660b3bdbf4716fb44ba65c1f53db9afc770c05fd32fc7d34ec95572b1f0e114817859dcd2a97796b00be013d06337ef342c8d75d8bef8abb166e853fc1f2c339b577da907bd404a0a10f72f801a31ab9da083e8e7ae2705cf97e1e36a1033e49a98994c2ddcf8042c5683c49f146edbf289ab81ac74575a5001cdefb0593c4bdc0bcd16ca5368eac04a8548e49d2a1e6671888a0a6a07c5df09d0d17b5469a08e62c6f44a11792da4516be317009b893ade47e399153235b94d95d9d42ed709c43b27b97ef04905eda2c02c10cfb4dd66beb3f700568ad248c83c7fa2a08ce5466524175", "fd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a82c424d3aba119543b343a8fde7bc4fd3ae7e2d0954a13e45d13e7747deceac3deb15f38c362b741ec1998ad5d47cefa85b35179e49129213f0ee69ef729f0eebdb1eebdcbd8002197b9f44a9e59d0e9024523da319a2f3d109fa4e426d654ff4148296d57de26c46202ca6ca2132af69ac5e2240f6410455c1127b810a8937"]}, "failure": {"scriptSig": "", "witness": ["4d090228c008f2f00b965938e70e66b1c2240283ad8d6fb0fbeafa20098375453b83ff87ed6acd50f3e1e5a93c8c2a20cf6355c1381095c3ff0ca468c914221061dfd3aaac28b18ffa44a6f2db2ac97138c0ea44a60daa0bcb69dcaa228ab94e4cd0c2f45ffed095bb83bf9886cbcd6c27b4d1c20f9083d7d731d9ac7b97b45d67c01b766be68a1b1334d68e74567fde836f7ee413ac884b93ffe1f7e629398d1813caab28579a1c04b45862bf9b2a23fee4f9abe2d9f6e00956ef030a60804c1484d0bd8cbee736dd421db2391fbbd685723fea2e34f1c69e2e9d830f814c62f1d505d3f966eb386ff35af103cedb0d660bc3f4017c6f8748e15efbb33d653c9eb585409748513f60564f55300dce491c2b6d9b2c77336293933a5dce6c1a14afe99de694d46f7fd8e56d7932a33a89b94ddde89aa868963732f739f372e6bdb56fc829ada990fd7a7606e7ba28d4e129fc100ce739ac54182324f5171060259e1de802ae6bf9ec2e54c92f0f12c04f144e1bcc02fe11b8c2fc879f3eda9c2a24a8e23f63f47489914d0ce6151fe926f8e059dde43dab62207f7cf0b8814f9d0f9259e5d05b8b34e3b60404db5160e91aa7a688803898f9d88471156c482a70a2bb8cd36c8cef4fa6382f1184c02f4d336dd768a0d9803057d0a887ff311fca5ff095b2d8e5873f46ac71a49da7eb3cc1fdad662d3f7f58547be544cb315d7145ae352874c038fdaeed224575", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936df064c117c137d5c206bbed5b1bea19788f933559dc29ad302e98441d59c8ac23deb15f38c362b741ec1998ad5d47cefa85b35179e49129213f0ee69ef729f0eebdb1eebdcbd8002197b9f44a9e59d0e9024523da319a2f3d109fa4e426d654ff4148296d57de26c46202ca6ca2132af69ac5e2240f6410455c1127b810a8937"]}}, diff --git a/txscript/data/taproot-ref/8b9de640b20beae0f41a3d88dacf8e7c8c00e4a9 b/txscript/data/taproot-ref/8b9de640b20beae0f41a3d88dacf8e7c8c00e4a9 new file mode 100644 index 0000000000..33f32e2d98 --- /dev/null +++ b/txscript/data/taproot-ref/8b9de640b20beae0f41a3d88dacf8e7c8c00e4a9 @@ -0,0 +1 @@ +{"tx": "d666eeb702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b37010000005ba523eadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2500000000a14399b10167ff3400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac93222b49", "prevouts": ["60c422000000000022512036c493d82a149ae4f58587b8995f80246acaf3fa754ebc9da78117b68027b383", "5e4f2200000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "dc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366c8229ef6249eef7d294f23c9bd7511150aaa9bb9283ed908def3a40c2c66d128080c17c1a9ba5ea8a3780f9d0897aa41ac6e03bb9fc27a0b4027847c33ef9f08f84e1cc8430872045fc695723e7e8ea88aa60745b893850b41017408051d8396d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a38e917535475cf2110d0b0ae2ac5bf0f6bfd0fb66e9319f96694509bbaa8cb206d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}}, diff --git a/txscript/data/taproot-ref/8babec8da5a26469095793b097811d07f256a5e9 b/txscript/data/taproot-ref/8babec8da5a26469095793b097811d07f256a5e9 new file mode 100644 index 0000000000..3aad8cd052 --- /dev/null +++ b/txscript/data/taproot-ref/8babec8da5a26469095793b097811d07f256a5e9 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42c0000000025baee978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42d00000000755c9fcc03cfd46800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac95000000", "prevouts": ["4b5534000000000022512014c9f4af3daae468ca53c2c267c1d6c7824da89a84a3ef6d580562d3f844fc64", "4ff0360000000000225120b7b7f868117fc9823373a98908173a9736217ba3f26290a84f96d4cb32d63ac4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e36d5ca6990a7cd162e850c8419d259e8861c79e5a640a9cd7cd8c694717bae0"]}, "failure": {"scriptSig": "", "witness": ["6a13616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8c4cbb21d02e5d466fb2539022255760626149f2 b/txscript/data/taproot-ref/8c4cbb21d02e5d466fb2539022255760626149f2 new file mode 100644 index 0000000000..af02cc01bc --- /dev/null +++ b/txscript/data/taproot-ref/8c4cbb21d02e5d466fb2539022255760626149f2 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9d0100000067e4a0f360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d0000000088944686bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9001000000dc741ab4037f16ee00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb3af1b32", "prevouts": ["de725e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c5840f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ebe5810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_18", "final": true, "success": {"scriptSig": "", "witness": ["b78d1fc6cb415d6599bdfbc6d3a791fdf9dccc47efb4a71a0c2913613e80984a1b56b751c6b8b760f2149c6ea7d88a1d02bb24720914df9c787e261afc3afa5b83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["2286d794a4355fc5eb36b721bd98592433e50ac481f8d95ef9e79cdb4b233da780ed9b45a5850461755a12ab9f94990a8edcaaff434e12ba4193e1abba6a13fd18", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/8c504464b5b4239a47fd8d4b185c3e0e1b6c1af0 b/txscript/data/taproot-ref/8c504464b5b4239a47fd8d4b185c3e0e1b6c1af0 new file mode 100644 index 0000000000..00a17e0724 --- /dev/null +++ b/txscript/data/taproot-ref/8c504464b5b4239a47fd8d4b185c3e0e1b6c1af0 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc8000000000f67fec902df6b2500000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87f4c6d04d", "prevouts": ["2826270000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["bf4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cddd07b9b59a457ac18abed7266986241d091147981a1ef9d43f6473969f25041ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045911e2ebc11e8ff6aef3c08be5d8086fd4b944e3e1f7063038c1b6dadb4d48ab0219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}, "failure": {"scriptSig": "", "witness": ["4c52bf", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661c1881d39258f1e1cd2a227228c64064431f4d8fcb20ff13365666a49c5d8ea1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045911e2ebc11e8ff6aef3c08be5d8086fd4b944e3e1f7063038c1b6dadb4d48ab0219675e68f7f320420702225b2b85f84783248daa0c82b4ef34e304883a54210"]}}, diff --git a/txscript/data/taproot-ref/8c716ab740c917b4df170efbc22b4e47873d8e3d b/txscript/data/taproot-ref/8c716ab740c917b4df170efbc22b4e47873d8e3d new file mode 100644 index 0000000000..7f4ce7892d --- /dev/null +++ b/txscript/data/taproot-ref/8c716ab740c917b4df170efbc22b4e47873d8e3d @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bc00000000045d0f63dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0301000000dc9d369c018f9e5b000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787a2000000", "prevouts": ["fc803f0000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "8d43260000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100bc459ddf7bc4bd64dea0cc033111fa1a9bf37ecba688b57b124bd5ed93a74d2102204836f32b9271675ee184510c8c21f3ba36f991d13b2b3053550d6f334ae4fde083", "witness": []}, "failure": {"scriptSig": "473044022021007c145d7511680491dfedb1ae554ef2648e19ddb40e39ae86e4664ec0ed08022071f6dd5b3e75068f1782393520a3d8b08ec20479446066a88dc4157af42e593883", "witness": []}}, diff --git a/txscript/data/taproot-ref/8c7dc16b0e4c9ef242cc7ca7264ea3a4cb62a9bd b/txscript/data/taproot-ref/8c7dc16b0e4c9ef242cc7ca7264ea3a4cb62a9bd new file mode 100644 index 0000000000..f528e4a09b --- /dev/null +++ b/txscript/data/taproot-ref/8c7dc16b0e4c9ef242cc7ca7264ea3a4cb62a9bd @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c330100000072fc8e80dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c83000000003e0d57f5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1d01000000594c5146046d9223010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79661010000", "prevouts": ["bb6c5900000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d", "aa9357000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "edbe740000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "a37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe0803cf66684a81fc29be90af35ef83120eb264a0869d6933307511725bb51c5a5b11a87f009b0ff9f397e99e72fe38b81dbea82be72f6430c36b07738f500beebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7accae923b25d556389dd5dd645f6d7ddd89a07a74a73dddd3d85d7b65ae33798aa"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821bbd263bb9b57787cc1695f6735ee6aa4874511c0d77def079ec8f767826a474cae923b25d556389dd5dd645f6d7ddd89a07a74a73dddd3d85d7b65ae33798aa"]}}, diff --git a/txscript/data/taproot-ref/8c87d28e9f82d8cb2da362853cbfd7f6ed73becd b/txscript/data/taproot-ref/8c87d28e9f82d8cb2da362853cbfd7f6ed73becd new file mode 100644 index 0000000000..c543de899b --- /dev/null +++ b/txscript/data/taproot-ref/8c87d28e9f82d8cb2da362853cbfd7f6ed73becd @@ -0,0 +1 @@ +{"tx": "6a7bc0ae03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2d010000005909f2bfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc501000000c4642ca8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b22020000008a37259c02ef808b00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4c7b8943", "prevouts": ["697b510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a86c1f0000000000165b142540f27e90740933c99d4f17ab2dfc6c82951cfb", "e3fe1c0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["ea4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93645dd27374e1e3840d53c2eddc23e77f3daecabe9190b2b544b03414f960ba3ee83976a7e8bc20bfa4c53f64ff2df47d867849c8cbf6df51014735817968d498535c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0df322cf06423056ff4efb147ba4330d28398a4f05a11ad98b1121aa54f60b594336f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}}, diff --git a/txscript/data/taproot-ref/8cac7b8d77d23a0085a03a673ee2021520fbabea b/txscript/data/taproot-ref/8cac7b8d77d23a0085a03a673ee2021520fbabea new file mode 100644 index 0000000000..7076d914a1 --- /dev/null +++ b/txscript/data/taproot-ref/8cac7b8d77d23a0085a03a673ee2021520fbabea @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e800000000a2a1cdefdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf5010000003ccba3d9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5100000000276aa1a901227028000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787240e3c58", "prevouts": ["3b470f0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "fb0b200000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "0b2527000000000022512067225551b50f550878fba08cb06856b99d76e57e98d7477f94810d7b1bff9dd2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694fe84cb69964c9ab88d8806a3dd882c1fd4c1e968ee9a10fe0c80ead4a8f7623f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082eee8539df42e1fa2e5e9e7b75fbe1b52db879ec8a622b496736c99966ce19d0038273d2ad306f831e931ee90238e60477c8ec11f350a3ad34ea06c6c58bf7ea3"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f8871c7955fe825167f5509f939eda783797f3f4df0f87146827f8d7c3a13ff899aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4006cb24f353cfca0d245645f6b16ad599c212098eee86bd01fc37c5c4a863127c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}}, diff --git a/txscript/data/taproot-ref/8cd544fbd46d49e76648955888fc3047bf5e24bc b/txscript/data/taproot-ref/8cd544fbd46d49e76648955888fc3047bf5e24bc new file mode 100644 index 0000000000..c1ef24e01e --- /dev/null +++ b/txscript/data/taproot-ref/8cd544fbd46d49e76648955888fc3047bf5e24bc @@ -0,0 +1 @@ +{"tx": "cc2e403e02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb10100000091ff68d6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb901000000bd8eaca701a18f31000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478795736527", "prevouts": ["94a2240000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "ca7d660000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100c24b55bc85bd2bab08c4322ef1e52e7bfddd9534fafdac4aef5da15d474d71fe0220638ecb567de22c82b81a9050d4e21e129e2db4630279c94c2190a38f9c614629e9", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["30440220747a718a2dc63b4a990a31528f8d1270c9d4998f7394690dd93f1a6fba831c5b02206eb3d4e574ff01ab9f5dc6636e455ced3b550ff0ad013abfbb92ed33fc32f378e9", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/8cde25f4590bc7a0cb88896228ad8d28ecb9641a b/txscript/data/taproot-ref/8cde25f4590bc7a0cb88896228ad8d28ecb9641a new file mode 100644 index 0000000000..f30ab708d5 --- /dev/null +++ b/txscript/data/taproot-ref/8cde25f4590bc7a0cb88896228ad8d28ecb9641a @@ -0,0 +1 @@ +{"tx": "5cfa37d7028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a301000000ee493d81dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7d010000000e4618c40212f89a0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcac3bac60", "prevouts": ["b6d9410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "dde95b0000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype1to0_keypath", "final": true, "success": {"scriptSig": "", "witness": ["1a69d4f798ccaaacaf5eb67f604efe840dbdc7338d1db7478929a0409f5c83ea57d0aa5b9fd2beaae3f02d842c70b395fde01bedc6348ba4d791041b52c16deb01"]}, "failure": {"scriptSig": "", "witness": ["1a69d4f798ccaaacaf5eb67f604efe840dbdc7338d1db7478929a0409f5c83ea57d0aa5b9fd2beaae3f02d842c70b395fde01bedc6348ba4d791041b52c16deb"]}}, diff --git a/txscript/data/taproot-ref/8cf7c389a03e6d9d8cdd4dc0ee8615f54cccd395 b/txscript/data/taproot-ref/8cf7c389a03e6d9d8cdd4dc0ee8615f54cccd395 new file mode 100644 index 0000000000..21deebc8fa --- /dev/null +++ b/txscript/data/taproot-ref/8cf7c389a03e6d9d8cdd4dc0ee8615f54cccd395 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b98010000007a51900704120721000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67b000000", "prevouts": ["50e823000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "473044022015cd3cdd20b2e149491ecf741cbc79454e753352c45992000426222868f84a240220703d90059025922e3f189c0edbd9f80345b8cc6bad80db8a62188a8e3839b734834104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "483045022100fab45dd95f3fc509a9089af109ee35f08fb20acae9b4aee952f13b95bfd42f9f0220104aa3321b0ddb40628d611465ddc16321eee078cb6b7e39a21a5d17c641b827834104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/8cfbcd30e59e458884ca65687215ef8a39fa420b b/txscript/data/taproot-ref/8cfbcd30e59e458884ca65687215ef8a39fa420b new file mode 100644 index 0000000000..cf8b514ba0 --- /dev/null +++ b/txscript/data/taproot-ref/8cfbcd30e59e458884ca65687215ef8a39fa420b @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6a010000003b24bf8adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2201000000fb57589c0357a6d200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcca000000", "prevouts": ["abbb75000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4", "64ed5e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c3df7ad94edd5dd8384ea059f961cc865730b5779c671ee2d6f7eddd0a74f8f7eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7acea811edfde1d836b623c2094badb4ab8bc7795b2b49da5506600222f32ea3fbd"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823d62cda1d889ee05ca59ece4e76d2fa27c0bab47b49d4f70b1e2cb0efe9a711fea811edfde1d836b623c2094badb4ab8bc7795b2b49da5506600222f32ea3fbd"]}}, diff --git a/txscript/data/taproot-ref/8d2e1d4e20c8a37b8483b0636a53106414b2e098 b/txscript/data/taproot-ref/8d2e1d4e20c8a37b8483b0636a53106414b2e098 new file mode 100644 index 0000000000..244df6fd67 --- /dev/null +++ b/txscript/data/taproot-ref/8d2e1d4e20c8a37b8483b0636a53106414b2e098 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfeb0000000068aa1af660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c0000000003ed329820294e97f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48725bbbd2a", "prevouts": ["f0006f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "da2e1300000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "c57d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363903e3bb34d25cf71b6983cf4f2b76fbc603b2adde28e34b23c45d7f67d4a2394a4f1964bf857a391dd30579e6c45654815fe99168eae3a652a179c44e1715327def1cc2232d9b1ca5244635fcf6779cb15e82fb856baa2ca11d8fd1da35295f"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e6d35158b06e93427cedf9700445f423da8a62a86b9572893cb3b0c5b8130f93e00378a892e4dc43a17c9ebd71803200f2f24c9a40c2827c304e59be9b4a7df0b"]}}, diff --git a/txscript/data/taproot-ref/8d84c17e2d2a5f1b483ec417d4084cff8a83bd8b b/txscript/data/taproot-ref/8d84c17e2d2a5f1b483ec417d4084cff8a83bd8b new file mode 100644 index 0000000000..b8873ae0c1 --- /dev/null +++ b/txscript/data/taproot-ref/8d84c17e2d2a5f1b483ec417d4084cff8a83bd8b @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be001000000a799f40abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4f010000001e21c462bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9a0000000077dd0fb3022989fd0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a611000000", "prevouts": ["025a1f00000000002251203d94c30f7ef8b0d9d4c7a773497c0af2bbd0a232f6e89c19e65bba66d7e2056b", "c0e969000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "f4dd760000000000225120ff67dbe5f480d52a3db68ddc8756a5701c353a5e478c53504b3368e48f095423"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936008088d7cf4bcfd919dc74e7ee4f6736dc4eccb5f6f5d741e30b3c7eda377cbb"]}, "failure": {"scriptSig": "", "witness": ["6a09616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8dad5eca9780e98722de60bdf4209e99730b7ce0 b/txscript/data/taproot-ref/8dad5eca9780e98722de60bdf4209e99730b7ce0 new file mode 100644 index 0000000000..0ea191f74c --- /dev/null +++ b/txscript/data/taproot-ref/8dad5eca9780e98722de60bdf4209e99730b7ce0 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1500000000e2737d19dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b03000000005a250c9e0284fb83000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71e000000", "prevouts": ["2d5f6600000000002352212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "6b0a200000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "c87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fafaf4d01509d00362d1685157096ce13f6e0df1edb9baa8d22d7c425316c78328c308d8e78b0cea59e70bbcac5990a047bb63a968328232757672e5e931dda055"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93610bd61aa5ca2d5bbe3b0fd477fc193f06add97123cde67a86227ce5080534856faf4d01509d00362d1685157096ce13f6e0df1edb9baa8d22d7c425316c78328c308d8e78b0cea59e70bbcac5990a047bb63a968328232757672e5e931dda055"]}}, diff --git a/txscript/data/taproot-ref/8db878b9f4d8758552ba375e70b1c319d8ca0248 b/txscript/data/taproot-ref/8db878b9f4d8758552ba375e70b1c319d8ca0248 new file mode 100644 index 0000000000..ec2675f9f2 --- /dev/null +++ b/txscript/data/taproot-ref/8db878b9f4d8758552ba375e70b1c319d8ca0248 @@ -0,0 +1 @@ +{"tx": "0100000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c30010000006ac7d40b042bcd4b0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47877c030000", "prevouts": ["b7da4d000000000017a914b60a534933f6e50f3846e396b9868efc9e681f4187"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["4182c373cf43d0dd9bf6414da623c57558ab25f87b66cb8aedf074334ca027beb6cd78beb6752e2cbb85dac453db9d5daa3f06470db784573f68e4d75e673e9c"]}}, diff --git a/txscript/data/taproot-ref/8dceab2924460f1a418835afa3ff5d4bde00914a b/txscript/data/taproot-ref/8dceab2924460f1a418835afa3ff5d4bde00914a new file mode 100644 index 0000000000..ca5615205e --- /dev/null +++ b/txscript/data/taproot-ref/8dceab2924460f1a418835afa3ff5d4bde00914a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdc0100000013b74e82dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3900000000fe9609b5020f333b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acd4a59f23", "prevouts": ["e1ae1e0000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f", "18ef1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4fd06ba2b74fab4c367f8e8e0519d3d9be3851343b71a963fa32cdfd438e05528a09ca0f6d73d82e88e284042e116dab9fe2cbfafc110f6c0fbe5b2788367c646ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b24d4fab40ea135233ddc8c9f724889f007818f7ffad5749db3376d8fcf405e18faf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}}, diff --git a/txscript/data/taproot-ref/8dd1413b2a30d480170c4918b00b9b7abe7ae2c6 b/txscript/data/taproot-ref/8dd1413b2a30d480170c4918b00b9b7abe7ae2c6 new file mode 100644 index 0000000000..1664d000d7 --- /dev/null +++ b/txscript/data/taproot-ref/8dd1413b2a30d480170c4918b00b9b7abe7ae2c6 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2d00000000e75314b28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c475000000008149b6b701e48d50000000000017a914719f78084af863e000acd618ba76df979722368987a331533c", "prevouts": ["713c4f00000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "6a1339000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4bb0b9e3baaec320f7de46eda77f4fdd2cda08039a1867e75a703bfdee0f4ff6d1cafc3da456d473afb79353f7068dc1822b24dbf9d7eaef6a0c8c9b611b05e979feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b6ddcef20c10c61d9e21e2293389fb4d83401974c63955ae345dea7dfe41530ea78a04935edfb84e1b4b71380d58e01ed379cbb21cec8f8440ec0fbfce597ab8cd941a6bc152cbea0496b075d4b2611b435301778200e60e8b4147cd93749673"]}}, diff --git a/txscript/data/taproot-ref/8de4d54ede6f78c61866173f8b1096d7f5e3f478 b/txscript/data/taproot-ref/8de4d54ede6f78c61866173f8b1096d7f5e3f478 new file mode 100644 index 0000000000..f7411e8169 --- /dev/null +++ b/txscript/data/taproot-ref/8de4d54ede6f78c61866173f8b1096d7f5e3f478 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706b000000004daee3458bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4810100000091e255d604661a4c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac4d000000", "prevouts": ["e2cf0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d3ed3e000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "dc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e96c63bd25ae92bbd16086cd18a0ced65254d43d2db01fd8c973d5ac979d0978d49cd47170ad660e437289f08833289e3b90e14293c0ba427f1ef2b5a93f8559a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e3bfe8b0458382ba4f4ce4b13b8b707c198a710172b0004e49e202e4d70abaa7b"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936754c3400f5b19129397404414e73e7234111a3665d4d5bc651a2a24db00d5dfa276acb01c569c39653cc9be144b4517abeee153b1e65c2a7dfaac73ffa4f7941ad29df8a0e62e4f40897f8996914b12118c918ca2851b639742aeab01f587290"]}}, diff --git a/txscript/data/taproot-ref/8e0a71d16611cdac906bb4dece9fbf87d1a0fc8b b/txscript/data/taproot-ref/8e0a71d16611cdac906bb4dece9fbf87d1a0fc8b new file mode 100644 index 0000000000..6a5fb05a25 --- /dev/null +++ b/txscript/data/taproot-ref/8e0a71d16611cdac906bb4dece9fbf87d1a0fc8b @@ -0,0 +1 @@ +{"tx": "a1212fcc028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f50000000035a475f48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c476000000007698abaf02c9fa77000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478702030000", "prevouts": ["bdc53c000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e", "d6083e00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93698751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d539caad535bb8d51429d9c94edd44271a241bcdcdcd941caf815b31d1e73ac1400dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4360d69898a7d9d7cfe47282f038ce081b7b00f0e720fcc7ce2a76c05a52019262a5aef24b6a1c01bacd2a24a37cefc04a347b590d10f3bd98469f969c355217b0dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}}, diff --git a/txscript/data/taproot-ref/8e1a1f4379046e33058d6b3df5184a181b98a2b5 b/txscript/data/taproot-ref/8e1a1f4379046e33058d6b3df5184a181b98a2b5 new file mode 100644 index 0000000000..f669a9ed14 --- /dev/null +++ b/txscript/data/taproot-ref/8e1a1f4379046e33058d6b3df5184a181b98a2b5 @@ -0,0 +1 @@ +{"tx": "1d7233850360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708c010000004c7f1e8bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf76000000001971cdc460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706001000000c78a86e4027ef68b0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f877bbf5d2b", "prevouts": ["4e1e0e0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "19636d0000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "a6081300000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["ed4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93655e252cfaa9768c1119fa64085e95b8d16b96942ccc526bc25f5651427cfe139d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c9b0690fa0521f4fddf88c65f69e0716898ebb5a52dcb1ee37dd2f34a8a99dbd71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fdb145940c290b3b086078f684e0e7b02072f4c479430733c205d9de9d8640bd3866c9dc2005c39fbfa40f99a1086b922c913a672fc19646edbf7ab3e480e00f86475c33b310e45b92339559838140b9b3f3d62b1cf111e129ddf9f566de62eb71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}}, diff --git a/txscript/data/taproot-ref/8e38afa0e7c920bbb4aec155f70d1940028204ee b/txscript/data/taproot-ref/8e38afa0e7c920bbb4aec155f70d1940028204ee new file mode 100644 index 0000000000..d70e10f953 --- /dev/null +++ b/txscript/data/taproot-ref/8e38afa0e7c920bbb4aec155f70d1940028204ee @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270250100000036c4ee558bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4510100000070e54af860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ac000000007953921f012baf0200000000001600149d38710eb90e420b159c7a9263994c88e6810bc727afb653", "prevouts": ["de1d1200000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "bbba3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "781d120000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["bb4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936023cf8e98f7450905a417c9ac38276f00b59951e06c79e90063ed7e2000f468fba5ae8cba4ed1cb91f8a2ddbe7d0c8637ea6f49c0896515a628c3bea1aa465996ff84cb0de1f41d907799f0bb3a3d4c37b57eea0ba754203aaf5b7b2671fe888a4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ef25451e1287905b17423f83e08d071b8f612240bd231ae948ab742b6a6315350430626a247d567d7470b6045f35bcd343227bea51bdb051c26a41fa3e304da7017bb5ae96064d7d19e957b5258c9c864deb4239d29676eb164d7ecbdb9fd5a354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}}, diff --git a/txscript/data/taproot-ref/8ea1e2b4445b668065a333641c17f3c6038f2f27 b/txscript/data/taproot-ref/8ea1e2b4445b668065a333641c17f3c6038f2f27 new file mode 100644 index 0000000000..3df01eb11b --- /dev/null +++ b/txscript/data/taproot-ref/8ea1e2b4445b668065a333641c17f3c6038f2f27 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43d010000008a18adb58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4000000000016efe5ec02e2766c000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac05000000", "prevouts": ["47b438000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "3dcc36000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063be68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4b388de3dfefb2132719c310aa79074581b330ff4b72041fe2a3e03933132949f61eb6e6fd21ad84d93c7a0474b2daf5b011002cbe34781a2a14a95ac7c4e00ae344cebdb8ecd56ef01fad0911d9d88482970ec36d3a04b84eda7f5b5c68ec938"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362358e12ac09d2a6885dfcf9eb233087f34097060d523dcf896ae6036206d510973668dc71689fe0651b36a481e24aaad53f2818649afcdf831b4092eda1b840fd3726db1c97dedfc82502578948b1d779eb886e6296c36bf50b8d2fe25c32b8a344cebdb8ecd56ef01fad0911d9d88482970ec36d3a04b84eda7f5b5c68ec938"]}}, diff --git a/txscript/data/taproot-ref/8eb143cfc057b1ffa8e90069a1d1ff91a90ac794 b/txscript/data/taproot-ref/8eb143cfc057b1ffa8e90069a1d1ff91a90ac794 new file mode 100644 index 0000000000..60e7c96fa2 --- /dev/null +++ b/txscript/data/taproot-ref/8eb143cfc057b1ffa8e90069a1d1ff91a90ac794 @@ -0,0 +1 @@ +{"tx": "1a7ddf0002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1600000000f71b52aabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbb00000000a38578fe04d6958f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fccc000000", "prevouts": ["8900200000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "aa79720000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "de", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f9ea8f2e65eb73025cf4611eb81b9bc973c238c936328a8046b3068be11236b1823ff0d5c6a769fa09e08a59a2485b611e1511239bba2f80aba2b92be945f1b811034f174cb7bd77652d345f06878a8d4eb3ae1b92590cd10e2563bf228d2d6bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb423dda11617dc042479e1d576056805c31872018ddbd603e5e1ceb926e90a3395bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}}, diff --git a/txscript/data/taproot-ref/8ebc6173196e2c3ad4ea6d665b4893fd67690d70 b/txscript/data/taproot-ref/8ebc6173196e2c3ad4ea6d665b4893fd67690d70 new file mode 100644 index 0000000000..aeefa32bf0 --- /dev/null +++ b/txscript/data/taproot-ref/8ebc6173196e2c3ad4ea6d665b4893fd67690d70 @@ -0,0 +1 @@ +{"tx": "c924110102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff1010000009d574b958bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46900000000c2a4e1b8022e86a90000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a621a7f84a", "prevouts": ["fc546d0000000000165d142540f27e90740933c99d4f17ab2dfc6c82951cfb", "a0373e000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["56c614673f4398579993d3f4aaf119ab2881e992735707c31e57e1b6ba410e5c388597bf331c1ce9348b07097e077feff8c24a499b9048a615ad9d4426845dfc"]}}, diff --git a/txscript/data/taproot-ref/8ee6b6a7957bf8ed03aa4b95dbc232e5ba56ead5 b/txscript/data/taproot-ref/8ee6b6a7957bf8ed03aa4b95dbc232e5ba56ead5 new file mode 100644 index 0000000000..2860220070 --- /dev/null +++ b/txscript/data/taproot-ref/8ee6b6a7957bf8ed03aa4b95dbc232e5ba56ead5 @@ -0,0 +1 @@ +{"tx": "7a4c3a2f028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43e00000000402394cabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf43000000006307458b036973a8000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374874c040000", "prevouts": ["887434000000000022512003ab4180fdf64546247c5e9f6e4b9eec37b1d29fb6f370a343f066de5418d90b", "20ad75000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["974c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93626364c264ca1a1a3113427e98f88e51ff7da2e89277d01d72659b15bd38bb6d4bbdd0eb743f16fddaffdc87a703f35bd0417e0996b155e435c0add546ea723b55a7303e26d6b86d2a780c30dbeb7ba87c6a0494b901c3875fb9ca7f2f12bb2fd373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}, "failure": {"scriptSig": "", "witness": ["4c5297", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f96b744a52162d67d7aee619d433d93e0f112e198bfa8f90bd1cd431f60087e13288455e3867d2ff7594cc417650f42f79f93c98aaa5c5ef25eb3554c8bf2ec6282285524a15c732567d099967405d35f7136f74f48f011bc4ab279ad8d14f14"]}}, diff --git a/txscript/data/taproot-ref/8ef96afc00349b4248ec31f4755d1020b7fdda03 b/txscript/data/taproot-ref/8ef96afc00349b4248ec31f4755d1020b7fdda03 new file mode 100644 index 0000000000..98ffc58700 --- /dev/null +++ b/txscript/data/taproot-ref/8ef96afc00349b4248ec31f4755d1020b7fdda03 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f02000000edc4c2a1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7d00000000b6e37ef8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b970000000032ac10e903965dd000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c020353f", "prevouts": ["db0b40000000000017a9147e06846ce22cd5e23f7e03391c0538498e0e18ed87", "234c6c00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "693f260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "de7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367d67b48ae102939b394e240fe50b972a2db09c5d140b2e0ff38ab31a95ec777f3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08267bf5ee6e785c98394c7354db9cd2cb879e9766d4c80c1499d7b3e856282bd13a05e4a06b32de803bd9a925f4d86502b21cf2d106a73f15ada31e997750cbc80"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b4419e0140799871ba1426129d6a886ea24b454e319298d6cbfcc8b7ce92d14093a387cbf4f722495a20cca4e5071672ad9cff48cf2966de7657b6ee347f57da05e4a06b32de803bd9a925f4d86502b21cf2d106a73f15ada31e997750cbc80"]}}, diff --git a/txscript/data/taproot-ref/8f07475a5f9d43a948b3b96452aea50918e4b9b7 b/txscript/data/taproot-ref/8f07475a5f9d43a948b3b96452aea50918e4b9b7 new file mode 100644 index 0000000000..aac4f275b7 --- /dev/null +++ b/txscript/data/taproot-ref/8f07475a5f9d43a948b3b96452aea50918e4b9b7 @@ -0,0 +1 @@ +{"tx": "b50f094902bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3f00000000c673fec7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb80000000046642ba302baa7c5000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acba7f4b39", "prevouts": ["15be6f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b7ea580000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e9", "final": true, "success": {"scriptSig": "", "witness": ["852ce8c162dca0ea890fc9fec348fa03e54a13028c16172ebb382603917641b41788499ee10e8c9f8c6852fb4271d9d35198440ee8c07b034569a912a2def30102"]}, "failure": {"scriptSig": "", "witness": ["abda8561fb4486cac1e1ec3462430fa73446dca4a2307887ebcf4fe1ed2f2c1916e84b4595655eb805e80df9b3b73dc86851cac3fabd958c0081ea03ac51b943e9"]}}, diff --git a/txscript/data/taproot-ref/8f0862b153c849b8d035fa189f7ec654f8b3e862 b/txscript/data/taproot-ref/8f0862b153c849b8d035fa189f7ec654f8b3e862 new file mode 100644 index 0000000000..0cebb522a9 --- /dev/null +++ b/txscript/data/taproot-ref/8f0862b153c849b8d035fa189f7ec654f8b3e862 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c750000000034d93ff2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb10000000088399385027739dc0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac02010000", "prevouts": ["d9be5a0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a", "22ee83000000000017a914c7d65cb5025eac8b5bf295baac9287994ab34b9b87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c568", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f0a6523615754b4aa54ab7599e81d37a390fe5e9971e25848ea770d0aa595f2c3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826c8f4b27179de8a3c9fbcc0ecf825a44b7564122e0508108d3381c6acb047da700a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb47ad860089e7bc2a902df7d26b00c72c3270dfe98d44c73f0cc876602eea860a2660eca3fa0edb42c0ab30ffe3daaf6f1f409e953104f48559c2b804c71af6a81ce4d7767c8a9637a0804b073b1eb172c67de67ce152ade33f2591a85dfee2e5a"]}}, diff --git a/txscript/data/taproot-ref/8f0aa9d861c14d5c32d60092ba04c2253666c4c5 b/txscript/data/taproot-ref/8f0aa9d861c14d5c32d60092ba04c2253666c4c5 new file mode 100644 index 0000000000..9920489e8f --- /dev/null +++ b/txscript/data/taproot-ref/8f0aa9d861c14d5c32d60092ba04c2253666c4c5 @@ -0,0 +1 @@ +{"tx": "d7f96b1903dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca701000000c90fb0fadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0602000000fe78deebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b92000000002e15949302b1769a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1a020000", "prevouts": ["3eea5800000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "d5e41f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "688424000000000017a91495eb8fe3d959e08a2cc279c1b4ede1921d14a93b87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2257202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["4020147d8321202672cb3638e9c82713747ef93d8af087d578629c0f65dae5616b8a0993ba3ee86e8e20e32b1d471c10be28c391d7d67f05bf44acb12bb214c1", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/8f4ba01ca74a466747b89a116a26047e58536ef9 b/txscript/data/taproot-ref/8f4ba01ca74a466747b89a116a26047e58536ef9 new file mode 100644 index 0000000000..d95adc9d09 --- /dev/null +++ b/txscript/data/taproot-ref/8f4ba01ca74a466747b89a116a26047e58536ef9 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cee00000000168bbd8bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5e010000006458ed8f0459b6b50000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a607030000", "prevouts": ["7ea84f00000000001658142540f27e90740933c99d4f17ab2dfc6c82951cfb", "3dc468000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["11b78558c296e038f53e1518c4e81c6eceb9ddd85c9f10faa08f9aa192446b2615dde6ff920d86ef09b7dad738c2cdab602d5cedfddfa1deac7365c5e8e1275f"]}}, diff --git a/txscript/data/taproot-ref/8f56d7ddb9c736b9c89113453c379ec0a21341f9 b/txscript/data/taproot-ref/8f56d7ddb9c736b9c89113453c379ec0a21341f9 new file mode 100644 index 0000000000..dd02866cec --- /dev/null +++ b/txscript/data/taproot-ref/8f56d7ddb9c736b9c89113453c379ec0a21341f9 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc400000000722b13ffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1101000000ea73819702fc8940000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f872fbbd44a", "prevouts": ["04a720000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "b70022000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "797d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93644f5e531b2d1fc6d65a483d63fdb8b5e6dc0a2ebdcfef74cb54fbc1e51fef52fccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f45727aec9530f4cf05d3554e63105b96634da39f3c52c35c251ce860693e97320b3"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93681a3012a8ca754d1d79ae7fb9e13063abcccb354ed9b617596389eb42efb17e66301af72c0f0fcbfc62431a82320b93fda30ebabe1c669499e3cf52b4dc2b40fe711fb6ebac21c15598dc6feca0613664d86278cc532834585097123290bb3d45be39dc57762be2d9b1a04aa5b570805d23104bfe4fa54c392bda5d51f7f4540"]}}, diff --git a/txscript/data/taproot-ref/8f7ed4f89eb5a042d9a19a78e61c47e5c984a9fa b/txscript/data/taproot-ref/8f7ed4f89eb5a042d9a19a78e61c47e5c984a9fa new file mode 100644 index 0000000000..cdcd0b6d7c --- /dev/null +++ b/txscript/data/taproot-ref/8f7ed4f89eb5a042d9a19a78e61c47e5c984a9fa @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708401000000a79891d28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46901000000540de0f504bd1452000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ace8010000", "prevouts": ["1a9a120000000000225120fc75765be35c7498e91185d3d44c5b81ace48e1fb56783e170e4fddd4a850715", "8ec7410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d5", "final": true, "success": {"scriptSig": "", "witness": ["cd014610cbd7f458a02c10d7176e0f4551e37025b8c16bd0eaedf84a76dd2e31f203181c9a051184edce67f74c60877c3c0d60e30b53d4381fcddd5a9feba38781"]}, "failure": {"scriptSig": "", "witness": ["4628dde71dcd903a954776027f1cefb0dbdfe0935a7d25f49dc6e87d05c32a3403fbccf57b98e50c9847aa0245450bc0e9b200b437039fc699c29e89706117d2d5"]}}, diff --git a/txscript/data/taproot-ref/8f94c8c6a37bcc91d7a39416023f9d78ff08129a b/txscript/data/taproot-ref/8f94c8c6a37bcc91d7a39416023f9d78ff08129a new file mode 100644 index 0000000000..fdd901a404 --- /dev/null +++ b/txscript/data/taproot-ref/8f94c8c6a37bcc91d7a39416023f9d78ff08129a @@ -0,0 +1 @@ +{"tx": "d950a147028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4710100000088ae7b8cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd2000000002feaa9920273d1630000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75c917233", "prevouts": ["201d410000000000225120682cff718d7cbe051bd5beaa1ff36d3547b88d6d4bf403f10c1645a08d942ef8", "4ae5240000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f7adfbd1b335a199d22a67c621fd1ccdebcdebb8f2e40814f300cc202bc5ea67"]}, "failure": {"scriptSig": "", "witness": ["6a61616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/8fc0dcb82f3f88e6c20e123adddbce9afa79dd7e b/txscript/data/taproot-ref/8fc0dcb82f3f88e6c20e123adddbce9afa79dd7e new file mode 100644 index 0000000000..967534bbfb --- /dev/null +++ b/txscript/data/taproot-ref/8fc0dcb82f3f88e6c20e123adddbce9afa79dd7e @@ -0,0 +1 @@ +{"tx": "8b21c5e6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c432010000009e90c1d88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44d000000000d1ee0b404151f6e000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac44010000", "prevouts": ["bb693e0000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb", "20ab3100000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["64494e39aa5da0bca64e8c163b9e9fe1f66a9f918081932cdbf8daee4107ff59740de9a96444781e8924afea1310454612b128548f818066128aea1dd0e4c6ff00", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/901261518c53841cdeb55041f748183f25fbdb6f b/txscript/data/taproot-ref/901261518c53841cdeb55041f748183f25fbdb6f new file mode 100644 index 0000000000..0e9b26c5f3 --- /dev/null +++ b/txscript/data/taproot-ref/901261518c53841cdeb55041f748183f25fbdb6f @@ -0,0 +1 @@ +{"tx": "b8c2a6fe01dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b470000000048cd72800462b822000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758837320", "prevouts": ["b68e2500000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["bb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bfcd38c1da080d9fa5f350ac5c5d82a433c6ad7048f1837ebebe4defa9773a5a1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454c3d251f378473e49463283b18fa00944324abf75c7e60d6956acdb0e7ed03a7354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936597c2f6b8dc6d15eebfc9ce9773556a5675730a3f06ef70be75161d60adb64d2d0e13bd92b8f417e9a9e83db8f63381783cc5b261abc3d56b5d515d800102f0ba4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}}, diff --git a/txscript/data/taproot-ref/9014cd1a175ea66532264c818ac4692ed805357f b/txscript/data/taproot-ref/9014cd1a175ea66532264c818ac4692ed805357f new file mode 100644 index 0000000000..d58d4a08d6 --- /dev/null +++ b/txscript/data/taproot-ref/9014cd1a175ea66532264c818ac4692ed805357f @@ -0,0 +1 @@ +{"tx": "46adb1710260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709c01000000b5ef5db360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127053010000000d2fecdc02d72f21000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac59010000", "prevouts": ["9044120000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc", "d535110000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e94c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ac778bb6e9889cb94937fc77a861bf4edb1757bb7369dd12c591a6cfed1c6a5fcbd8218c9dac71a3535cf40d08210778548ef11a7c40c018c5ea1885d9980740ce9ba0618adb3ee44483a22999a54a4e1710b9846377d8164aaa29371d79f22a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}, "failure": {"scriptSig": "", "witness": ["4c52e9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045ead6d3e810571e3af6462e6592387cebd820372bb489ff10eea7a83e6cd68e83cf301e2cd98ef2d5c028e1b110cc6503fb01279ff4eb452c3408c39d22674b4dfc7f9c78871d6a598c7c7c3f4c8210a5c47caa8abf9700608b6e75845c74a6c5"]}}, diff --git a/txscript/data/taproot-ref/902fc67f6a0dd7c17809ac0002972da218f32b8c b/txscript/data/taproot-ref/902fc67f6a0dd7c17809ac0002972da218f32b8c new file mode 100644 index 0000000000..41381e5c9b --- /dev/null +++ b/txscript/data/taproot-ref/902fc67f6a0dd7c17809ac0002972da218f32b8c @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b090200000035a3cbd1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7b00000000bba5cbc704e85a47000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796f3703632", "prevouts": ["490f2800000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "e0772100000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "537d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365679c4b80b1f02a904f6a1e97bc1e5029a390245cd2e5f4f1bb6526c613587c3c1fcc94e870ec95c088fd37f5daf805336fc0aa07ac91d9d5a0c770a5a47ed76aee97a7dfb8acbc78fdce4694f8ba1e1e3bf612a81f34559c93e6dfd336d600fd892d02e0db2d70aca72db86bdb1e35d04291625c81ec0b3d884b10be9f787fb"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a54256964294f7e46fe5d25ab3411c34d3792ff29ea326544b7c68695f53859e150f8c7b4812d3362c6afa34922f3b5cc4b63cc9e98285537a088f4a7fe3bee"]}}, diff --git a/txscript/data/taproot-ref/90439abb1bce7df95926ac69fbe35e9a75849704 b/txscript/data/taproot-ref/90439abb1bce7df95926ac69fbe35e9a75849704 new file mode 100644 index 0000000000..b5104d1802 --- /dev/null +++ b/txscript/data/taproot-ref/90439abb1bce7df95926ac69fbe35e9a75849704 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c09010000008fbe4ad0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7f01000000637407e402af757c000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6af040000", "prevouts": ["41885b0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "e76b2300000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000086", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c40fbd6c2414aad6fe6ba729f95c47f497dc6a4d2aac2f66dd85c70e3b597d70a112aec6b4b8b5b1ca7f36a9e0521bdf2c7802df3cadcb1e8aa67d830b4a0d3fd33ab5c29645e0220ea4ffd8cb7e67404885cb8b0cf94872336c7b06d59c3124"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ad3d30479f0689dbdf59a6b840d60ad485b2effbed1825a75ce19a44e460e0999aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4a89eab7efa8b8df17a82e815a072b99e340ac1768e499ee92fb25d88959474e250636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}}, diff --git a/txscript/data/taproot-ref/906de10a0641d6cd4c0dd422fe885c2f9691128a b/txscript/data/taproot-ref/906de10a0641d6cd4c0dd422fe885c2f9691128a new file mode 100644 index 0000000000..b8bf0b6d09 --- /dev/null +++ b/txscript/data/taproot-ref/906de10a0641d6cd4c0dd422fe885c2f9691128a @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703a0100000094624dca8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ba000000007ee534a402fc76420000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac6f5cb72e", "prevouts": ["1ba20e000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a", "c868360000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "247d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a5787881982eabc9f10a574183ce87b535a8253f66971d7d0c58826076cb527312b5d836754160f4cb099c4d8b267e29847dad01b12a09dec3875f376ae126ea3506420e788c3ffd3d8d88ddb9154e82106737a8dd2b5d0940daf68f275cd0d7"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb9b18a780ce64b599d9d3042fe9b5b93046b018637f9f8cec8ef00735e099ba32f1db23017f271ba09e9de40cbf6bd4b292cb969b1168724d03b4425efd5cf153506420e788c3ffd3d8d88ddb9154e82106737a8dd2b5d0940daf68f275cd0d7"]}}, diff --git a/txscript/data/taproot-ref/9076f59736d1a417df0e4e53465ba7f80da49859 b/txscript/data/taproot-ref/9076f59736d1a417df0e4e53465ba7f80da49859 new file mode 100644 index 0000000000..3f96220d31 --- /dev/null +++ b/txscript/data/taproot-ref/9076f59736d1a417df0e4e53465ba7f80da49859 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702b01000000563eb1acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfe0100000075a2baca015d162200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca7030000", "prevouts": ["503d1300000000001660142540f27e90740933c99d4f17ab2dfc6c82951cfb", "112b4d00000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["7f4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b6d9476ecc09d849d3c16682d4a6fd2c22d5514554f5544b52408747bbaff174e17cc42fca95eeef15c2a149426edd48c8eb93e73982ab4fa8378007bf5ef888ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}, "failure": {"scriptSig": "", "witness": ["4c527f", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361279a387fb722f4f14f9a7780c31f5e75533d5e2ffb38299b6ef0e006f47591370f73741da43ca43557c58f6aa15023f4cf70566ac935702465d6fb0f93d4429f8d5397512e216c7ab52609f0ab27ccbbfd2b7e561d7599ada55e292956af911ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}}, diff --git a/txscript/data/taproot-ref/909f04b9af20cf2cb275ec1cf722f9a40b234fdf b/txscript/data/taproot-ref/909f04b9af20cf2cb275ec1cf722f9a40b234fdf new file mode 100644 index 0000000000..45802fa046 --- /dev/null +++ b/txscript/data/taproot-ref/909f04b9af20cf2cb275ec1cf722f9a40b234fdf @@ -0,0 +1 @@ +{"tx": "92ddf3650260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708c0000000087e1aecfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdc0000000073684b970280a936000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acf0000000", "prevouts": ["8995100000000000225120264b35643a3a3a95953dacde7cb6bcfadafc46c4f235409840aae4392ea87839", "9d4d280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_fb", "final": true, "success": {"scriptSig": "", "witness": ["93aa89b646b2bd1010a2742dcd1f6e7794f4d56d1902013caedc8745ed9892d89368216724385c6a8369cce97298829a9572e94f23dc1651205a49c485459c8a01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["2ab97fba5fd71c40d7e71a0c7981cee5c56b17c61858fd7ffb6d3bb435d4784847061cb8a5d9cf2c41b9a98685349df8e1cf47aeb4faffb01570abe48f54e075fb", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/90b75e22907115340a987929a776f6f3bea1d9b5 b/txscript/data/taproot-ref/90b75e22907115340a987929a776f6f3bea1d9b5 new file mode 100644 index 0000000000..b3cbc4d030 --- /dev/null +++ b/txscript/data/taproot-ref/90b75e22907115340a987929a776f6f3bea1d9b5 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2001000000681b64db04e2ee2200000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72e030000", "prevouts": ["e46125000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ba7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a0ef97ab7ee9fc1eac24be41bfdadcbb7c9625a4e882ca5abbd81147d09c0527a47630aaed9dd66550bfcb0f3b3ec2bd830a8a42bcee9dbdef471b4e5cf2e89f5668d978bcc8d3ac0b8aded42d2a4a1c5e69a5396581e310868cb48ff813edbf"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93654dfb6f6b9a2b04f4592afe6e08b27d0dfb1567237811ea996f2ccf3ff1cd1054a7888d88a49f036a686b85959429d2c21b5cc7c31f53deb0eff848be794e4af5668d978bcc8d3ac0b8aded42d2a4a1c5e69a5396581e310868cb48ff813edbf"]}}, diff --git a/txscript/data/taproot-ref/90cddd59c8cf3bcac6b2fb6df29c9362c3a69855 b/txscript/data/taproot-ref/90cddd59c8cf3bcac6b2fb6df29c9362c3a69855 new file mode 100644 index 0000000000..936af9641c --- /dev/null +++ b/txscript/data/taproot-ref/90cddd59c8cf3bcac6b2fb6df29c9362c3a69855 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a00000000b81b6fb28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4440000000042523524047aca7f000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374872584c954", "prevouts": ["2c8f4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cc64350000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "137d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820ac5ef61da5659d8214c667aee1dbe4febf87286965cb6fe696f5c1a17be3da5155f23cd39ff67d8b5a6775be7b28a3d1b06bcb926a8f69937c20b78b14c2d485d0346f0de7f7080f7758bd86c81c482f81ad0c7703311f4b65ab9d7b77c9f00"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fabd41cd46598692ca564feb702471a27c2b329b731a2dc6dbcecd3c4d6afe3efd7c43b740c0608ac721897ca7a4b0bbd2ef7e62418d1fc20274bd386c7c0d4d7e"]}}, diff --git a/txscript/data/taproot-ref/90e012902ea03831fe652fb98c2f284c57217115 b/txscript/data/taproot-ref/90e012902ea03831fe652fb98c2f284c57217115 new file mode 100644 index 0000000000..c8ed4d98bb --- /dev/null +++ b/txscript/data/taproot-ref/90e012902ea03831fe652fb98c2f284c57217115 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0e02000000dfbf3a19bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa10100000034a2a0af02fe7ad10000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487dac0f83c", "prevouts": ["fef26900000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "568269000000000022512030fd389dfc6b7dc5f4caf58ddf04b54dbb338c7b69e334c29cccf1a655d02655"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663380db981ab01c8cfc2b73d24e17b0f36e1c245c11385e230b04af30b6c7e74"]}, "failure": {"scriptSig": "", "witness": ["6a1b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/910480b0cfba5cfd886687f687f8a73d081c0b15 b/txscript/data/taproot-ref/910480b0cfba5cfd886687f687f8a73d081c0b15 new file mode 100644 index 0000000000..a5c146ec7c --- /dev/null +++ b/txscript/data/taproot-ref/910480b0cfba5cfd886687f687f8a73d081c0b15 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0102000000461e5b9c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a5000000003a7310c4024533a8000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487eabc5253", "prevouts": ["a46675000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "4386340000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_0", "final": true, "success": {"scriptSig": "", "witness": ["9303ce586d3f3b9a63015f43a435770e5ff8303edd9c923b06ec079cede831c821d292b735a33f7b710e370cbc2f72495737104b083da863c1d97e86f18fb169", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["df6f99acba42349bdd2e021c65a8ab6f7ba49d65c3e4be2e0e716036dc379e7a2023ee4cd29576f7b351343e9c3363a282fa46f5c44c4cae1108329113f94b70", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/9143eec00e7c0dcba52a44c54c7fea4ca90ac9db b/txscript/data/taproot-ref/9143eec00e7c0dcba52a44c54c7fea4ca90ac9db new file mode 100644 index 0000000000..7f8a172184 --- /dev/null +++ b/txscript/data/taproot-ref/9143eec00e7c0dcba52a44c54c7fea4ca90ac9db @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a4010000001d6355fcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2a00000000547be58f03d0fb9600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1baad02a", "prevouts": ["dd48400000000000225120cc4d42e69b853b2a0a5827098521167109822d5a10f2066982dd9b410753f660", "8391580000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aab4ceb46e8915e34a175c818206b2f8c71eadd166d81881d5d09dfa18400c85"]}, "failure": {"scriptSig": "", "witness": ["6a24616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/914d626c074a269b3a9d1451d77761c9b6e8db28 b/txscript/data/taproot-ref/914d626c074a269b3a9d1451d77761c9b6e8db28 new file mode 100644 index 0000000000..cf38f17a8e --- /dev/null +++ b/txscript/data/taproot-ref/914d626c074a269b3a9d1451d77761c9b6e8db28 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cca01000000beed76a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfa01000000006e98b98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b701000000b215db96035f51d900000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7f08c9e1f", "prevouts": ["f6c5510000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "2aaa4900000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "ab2940000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["fa4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6765b3a9293f3bfd6c3b684051ad5b8ba6e731c254b25e3cb8e354d60cbb2971a4e7a29e9a68a1d6e5ccf500c3bde1b862f2704e441e939992f2bf5a528056a3bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367c6933323ad2fa3948334e88be7f42bd024e40c953b9156393334b52718986a762b588f53b8753752456cb241f753d144ff0679dfcac60637407bf69aac4dc17f8b8afd7beb88d43ca6c6d2d58dc9425172bd95ccf582b2eeeba83616a9d27d33bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}}, diff --git a/txscript/data/taproot-ref/91b3598a2ceedd0e45722fd9287672a13bf221e1 b/txscript/data/taproot-ref/91b3598a2ceedd0e45722fd9287672a13bf221e1 new file mode 100644 index 0000000000..58f312b188 --- /dev/null +++ b/txscript/data/taproot-ref/91b3598a2ceedd0e45722fd9287672a13bf221e1 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6f010000002411c5ba8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cc01000000e72a29ce0200e059000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966a000000", "prevouts": ["699f250000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f", "36ae360000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d7", "final": true, "success": {"scriptSig": "", "witness": ["3ad20fc73a72f0f30c43fd5739e28f93c47d9d9a5111c7667c56a166563a16ba12a9b528b0d7b90ffb72cacfce34bf6b9696dfc9c508792c972faa29d6ca5e8582"]}, "failure": {"scriptSig": "", "witness": ["fe228f450b45239e48687e39a77d68b1bb9e36fbbff2b47425d8556a1374b55a54b4c459cc808cf415c4824044b752ee2f65dd71deb8829c324f3085ef7f03cbd7"]}}, diff --git a/txscript/data/taproot-ref/91deadec3dc6c425ddc903b195066184526341bb b/txscript/data/taproot-ref/91deadec3dc6c425ddc903b195066184526341bb new file mode 100644 index 0000000000..41d7d754cf --- /dev/null +++ b/txscript/data/taproot-ref/91deadec3dc6c425ddc903b195066184526341bb @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127011010000009512ffec60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dc000000001b1f74a901fa2f0300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac929f8435", "prevouts": ["9a331000000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5", "e0c2100000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["ee4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ba746a1e3af4c529d3cdba1b4e6cf9b58f2b1e1d981455be45b81cc2f039993b0f3b0db014ceaa26ae02ffb8f31853eb721e6357de034fb71f3898341a9ea5240028cdc19f89baf6c362287c7c7841c4536091540a9bd978c440258b5fe7844c439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d519b8dfaa69151d05ccddc10c8c1e468eb7b78f9ad17f99ee1b916fd61bdfbcfce40899fd8696dac9e3afc960f0a100b615a3c324ed3a125e98af98336f748ba56"]}}, diff --git a/txscript/data/taproot-ref/91eb11de4a9b1c364da7e342da879d0915930da6 b/txscript/data/taproot-ref/91eb11de4a9b1c364da7e342da879d0915930da6 new file mode 100644 index 0000000000..aba7fc77d9 --- /dev/null +++ b/txscript/data/taproot-ref/91eb11de4a9b1c364da7e342da879d0915930da6 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701c0000000093e5369f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270700100000013a28ec804895c2000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787270abf5f", "prevouts": ["4552100000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "3d1c1200000000002251203e1b6fae524f56ebd8e25d4d2010b2e478325da2c77049f1de4edb81deddfc75"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_cs", "final": true, "success": {"scriptSig": "", "witness": ["e3c59f8247ce8aa4799c2ca4717b16ffaa80f6c89cf4202246034ba419606982c92a52db48d81748ec0d8f52054c1b0e07bda560b56782996d2b40afe7360328", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}, "failure": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}}, diff --git a/txscript/data/taproot-ref/91ed8c8f6952e9dfd27a3d45454432bd4886c8d1 b/txscript/data/taproot-ref/91ed8c8f6952e9dfd27a3d45454432bd4886c8d1 new file mode 100644 index 0000000000..3f2f6c7f6a --- /dev/null +++ b/txscript/data/taproot-ref/91ed8c8f6952e9dfd27a3d45454432bd4886c8d1 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43d010000008a18adb58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4000000000016efe5ec02e2766c000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac05000000", "prevouts": ["47b438000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "3dcc36000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_81", "final": true, "success": {"scriptSig": "", "witness": ["771bc9c7f412418640737a6c0afed578a4b8c78dcddc73a90d10e6acb2eb12a6fe8a32012fd9aeda27adccbe1eb3e7f0dab702af25480ae5f95598e333ce30c981", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["1751957682848ab9a393ac27fa1018f9eee8546277f50b728134f598b87e5618f34203be06222a0a52b70555f65339646b1983b20babba4eb14dbf0b1ac7df5a81", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/91f11c0a3851e5a1b473cfd412ff28fcd7903c39 b/txscript/data/taproot-ref/91f11c0a3851e5a1b473cfd412ff28fcd7903c39 new file mode 100644 index 0000000000..af7878a940 --- /dev/null +++ b/txscript/data/taproot-ref/91f11c0a3851e5a1b473cfd412ff28fcd7903c39 @@ -0,0 +1 @@ +{"tx": "98b7339702dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6701000000ce4b1aba60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d400000000185f3c8b02ea2a5d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48721010000", "prevouts": ["58bb4c00000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7", "60a5120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "f47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e760cc2203422c55a835172c125a7e245d244f5477158f1701a7cdf5578cf79bddefbee90a18838bf61213a4f1f5f31a75e180b842cfb60d5f81d26cbd38f8652876f4540117e7e2fda63f7a015ec774d613b8932caa4388fa9ce7145d42cc7f6"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936391b5ed75d7758930f62a8b38c606eddd0f0b98832e7378176311548388961dd44a76e856afdfa077951e950d1b00a9b743b1044161111d30eb56bfa7ddab902890bfc944cea42013591059ba9f4ec0a95c62699d2133b38017223ef90bcb8e42b4a87a36ff2ed7228bcfc2438815b30cc1c98339504e1b834e10aaf4a034051"]}}, diff --git a/txscript/data/taproot-ref/91f5456cb58ea9371b0fc9864e05767c7a8ee7e4 b/txscript/data/taproot-ref/91f5456cb58ea9371b0fc9864e05767c7a8ee7e4 new file mode 100644 index 0000000000..45fde9e672 --- /dev/null +++ b/txscript/data/taproot-ref/91f5456cb58ea9371b0fc9864e05767c7a8ee7e4 @@ -0,0 +1 @@ +{"tx": "997c8d6803dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb000000000b13b4e848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fc010000003b13f7f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf4010000001bbc0c8c04cff9dc00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870cba8322", "prevouts": ["4d2151000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec", "2a41350000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "170c590000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "bd7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082956f78f875a4cff3dc955be6c960f7b458e90648c2291f520c96d2b85cf15d2941cfbdca9cced9a9297ecbc29dffc929789a1848311039b5a24b338cddf0aa70"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641dd31aa852e6f71aedc584ccf1bdf704b326c74e68fda16d455fddcb9868622956f78f875a4cff3dc955be6c960f7b458e90648c2291f520c96d2b85cf15d2941cfbdca9cced9a9297ecbc29dffc929789a1848311039b5a24b338cddf0aa70"]}}, diff --git a/txscript/data/taproot-ref/921d11cbd9a6ba01c1bbfcc40c1205f6ef275acb b/txscript/data/taproot-ref/921d11cbd9a6ba01c1bbfcc40c1205f6ef275acb new file mode 100644 index 0000000000..0b27ac89f2 --- /dev/null +++ b/txscript/data/taproot-ref/921d11cbd9a6ba01c1bbfcc40c1205f6ef275acb @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c60000000077e8b85d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e6000000009e49a865016e35600000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb9000000", "prevouts": ["2580370000000000235e212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "0ca03a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["b3790a49c3a8fac6cbb4a7a2da0753a5d801f15728935ae6d5fcba46453fcc4ad01f70cbb990e1a8ad773906c5f6548e1f1204cebeb378f9a06402f44c770412", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/9238fc472251c9a3c817ab6cc5ea4e97c3d05410 b/txscript/data/taproot-ref/9238fc472251c9a3c817ab6cc5ea4e97c3d05410 new file mode 100644 index 0000000000..9e3b865bd1 --- /dev/null +++ b/txscript/data/taproot-ref/9238fc472251c9a3c817ab6cc5ea4e97c3d05410 @@ -0,0 +1 @@ +{"tx": "2aa979a101dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0702000000473615e8043c2958000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e701000000", "prevouts": ["18555a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_22", "final": true, "success": {"scriptSig": "", "witness": ["3b4215d1fe4d81d1f7ada506c6ec1c5f09f70af31c4f02969ff8f0169e11063b7394a4f70584f6afd0d1490540ca3f338645d170c878bcea20231697c3be698a01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a430cc306d25ad17bb0ed55ac02c00b6e1d0e372c2097f9d9bfbff1e27edb774accba4681e9320955590f2eaf7c0fcacfc42e8b1c0ad2d70207f2854e8b04b4122", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/9250a8a685e1f24b96edf202f1204a332bcb0ba3 b/txscript/data/taproot-ref/9250a8a685e1f24b96edf202f1204a332bcb0ba3 new file mode 100644 index 0000000000..fcc86f2c1d --- /dev/null +++ b/txscript/data/taproot-ref/9250a8a685e1f24b96edf202f1204a332bcb0ba3 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9c0000000073b9617bdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565caa00000000e018eef0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf8000000009055c6ed02596ab6000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8cf5391e", "prevouts": ["56552100000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "682a4e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d136490000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c64c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456a39aac74ee3f63949b9c215c515b0db1b113f4639b3fb19cd99ba22ff01310c728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cabf014ebcda750672d1ac021cd6394a2c6c5dad7d3d27b5e1c481868bd978a68405cb22a39b2e10cd1afb6cf33a44daad2098e05cd2010bbeaa225bcf768d84cef708a58e9a16c040ddf6ca6eff300c7bff2a5c928617bb01c850b0a79e89f728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}}, diff --git a/txscript/data/taproot-ref/9266cfa0d3adb02eaa15bc09db296fa853d6deed b/txscript/data/taproot-ref/9266cfa0d3adb02eaa15bc09db296fa853d6deed new file mode 100644 index 0000000000..ac68c9023f --- /dev/null +++ b/txscript/data/taproot-ref/9266cfa0d3adb02eaa15bc09db296fa853d6deed @@ -0,0 +1 @@ +{"tx": "fbe4c329028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42000000000fb3c3896bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5a000000001dda1dea04b72eb200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac2d040000", "prevouts": ["268a3c0000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8", "fd69770000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "2c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936768dcade149bd5f0639738187159aaf838493e37b26b5112985adcc9222a637ae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da733fe71e3ce0c37752cc3ed22f63651cf62c657cae6a4db35497744053504dcc62bd398c27c2bcf203967681d855a98ab83c6f29a4f091e05b1c584209e732"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663d313380d2564372a28c167374b7b81401e305a9c99cf4fec75b57ce768e17944f4b784770790344d4d1238d6245096bcc9e2ff88373fd56766bafd01d3e44ecc62bd398c27c2bcf203967681d855a98ab83c6f29a4f091e05b1c584209e732"]}}, diff --git a/txscript/data/taproot-ref/92848420c5779bd1c6d954bfc933383296c73c07 b/txscript/data/taproot-ref/92848420c5779bd1c6d954bfc933383296c73c07 new file mode 100644 index 0000000000..5d37ec6cc5 --- /dev/null +++ b/txscript/data/taproot-ref/92848420c5779bd1c6d954bfc933383296c73c07 @@ -0,0 +1 @@ +{"tx": "2718af9003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbe01000000e5a9b0d4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7701000000d487d4b6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7c01000000a122a7d901541e3f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e1010000", "prevouts": ["436e760000000000225120cd69e6502803f0acddd51df30ad464e69e95dcae732a2073690eba6ce00d0199", "a2f375000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "0988520000000000225120a98c6fc01fa4c9d83199250e6e76cd0e9fc22cdfbaba8827d6d131a9d8267c4e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366244692c25961778f5b75d5cf74ad811a2554082270838de283603655c691fe8"]}, "failure": {"scriptSig": "", "witness": ["6a75616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/92886f1a44cabcf2e2c4dcef68ee37caa458c47b b/txscript/data/taproot-ref/92886f1a44cabcf2e2c4dcef68ee37caa458c47b new file mode 100644 index 0000000000..1aa12b8d6b --- /dev/null +++ b/txscript/data/taproot-ref/92886f1a44cabcf2e2c4dcef68ee37caa458c47b @@ -0,0 +1 @@ +{"tx": "2cc2c040028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4180200000083645dc7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7f01000000daddb8d20432929f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac3c000000", "prevouts": ["cf0338000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7", "3c73690000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "267d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936642c909a10fe0e4fc753179e3d5cd4c801ae2c5d7d5d2a41704b786877d5c99912b49f68f31842330decdce79aecc48c70a85ed65081abd3cb605a7bb4f89ac9cd4c02f64c49cc162ff9325daec6263c98ea78a2c5346e44c6d55d79722c7edb"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936de6c09700178cad280c48f26380917825225e73e9c59e12e875f11cf4740c82b2135dfff529a8c82f4e399fa9509c5b3ed194ad634f2dd2a3feda036a1773d4612b49f68f31842330decdce79aecc48c70a85ed65081abd3cb605a7bb4f89ac9cd4c02f64c49cc162ff9325daec6263c98ea78a2c5346e44c6d55d79722c7edb"]}}, diff --git a/txscript/data/taproot-ref/9289711f9cf1406a577387a27b8bd4930e29fd38 b/txscript/data/taproot-ref/9289711f9cf1406a577387a27b8bd4930e29fd38 new file mode 100644 index 0000000000..f2f2b85889 --- /dev/null +++ b/txscript/data/taproot-ref/9289711f9cf1406a577387a27b8bd4930e29fd38 @@ -0,0 +1 @@ +{"tx": "859599e302bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0e00000000418ab0fedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3b01000000eea2fbf30421558e0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac52000000", "prevouts": ["715e6b0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "c673250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93639446218003eca9d9f50ac312e5383ca657554b5edcf97b5924c2574c3b360b5233ca416c78a4619c687785de007f14a4879f9c7a0556256e1b46b2a7e5a39b3c2782374d67da9500785d400f7ef10ae84f146bbb568355094c68456b68f7a283b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ed1da247c42feee519ec084f389faadb1fea6967491a64d33a6aea1bb627006bab4aa5d5e3dbd00e7a6b81724e903c1ca482dc7bc8339f552afc52b4f38fc6a5b77966166a359aa5541e77c34a58fd9dcb7d88ef6e7e0cd0e140e1adf959d28b"]}}, diff --git a/txscript/data/taproot-ref/92bddaa4b62dfceaf980ba7a89bb0cc57e8fc52c b/txscript/data/taproot-ref/92bddaa4b62dfceaf980ba7a89bb0cc57e8fc52c new file mode 100644 index 0000000000..fd60d42639 --- /dev/null +++ b/txscript/data/taproot-ref/92bddaa4b62dfceaf980ba7a89bb0cc57e8fc52c @@ -0,0 +1 @@ +{"tx": "a117860f03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc701000000bdcfc3bfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5600000000a3e6ebc160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e2000000008a5cc9e102a66ab2000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7d1010000", "prevouts": ["8417810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1a8a2400000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc", "27c20e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e4", "final": true, "success": {"scriptSig": "", "witness": ["a985b6ea14e9b384a3f4d2502a8c2585bd9b302b9f06f0e12a12d3b558bf75e828d121472590c20aa3e4ffb987d4228fa29188047671e063b79be8c43cc5f543"]}, "failure": {"scriptSig": "", "witness": ["f6279669b6d24a185a71b38dd7f03e2bd16b11b68ce29bd56654f5984ee2bfc1dda5582e2309066e5b56ade9d1e09239c8b7f91f725f39e0fec6632a2eff9933e4"]}}, diff --git a/txscript/data/taproot-ref/92c132ca1fe8044c1317c18feaca645a54713ffb b/txscript/data/taproot-ref/92c132ca1fe8044c1317c18feaca645a54713ffb new file mode 100644 index 0000000000..114a6f500c --- /dev/null +++ b/txscript/data/taproot-ref/92c132ca1fe8044c1317c18feaca645a54713ffb @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb80100000095c037858bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4770000000021da5818dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce800000000a4b8f83f04b7dcdd00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c45bb44b", "prevouts": ["724b5b0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "d90c3500000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb", "294550000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "737d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e855519fad8d6a945f0e016807e9ea80f240f92b51e0c4078917dfba5f2209ef9db33a63f37675deadbbcd666ca6b38ad7090050f3dcc6bba45985e955ec185c53"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a242f3c19d0f129445711ab0315a1086723bfcb35974ff1fec8f3d86f68a5ae585062220981136031499d54282dd1dc217e6360b68c94112219f47c832c6b09fa8cadcf9bcd23f9249fd09eb8b2b9ca63044a0ccef58f4cae9402f6ead4c2071"]}}, diff --git a/txscript/data/taproot-ref/92e0a98f523af81899be75f9371608fd9948b337 b/txscript/data/taproot-ref/92e0a98f523af81899be75f9371608fd9948b337 new file mode 100644 index 0000000000..ddffcd971a --- /dev/null +++ b/txscript/data/taproot-ref/92e0a98f523af81899be75f9371608fd9948b337 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c40100000047cb6918dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5c01000000fd2ae32903ce9890000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6dd902a4f", "prevouts": ["8d4638000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "ebef590000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360b0630a14fdba5198d2cd32fc4420c8a8ab4ff45908222cfc645bf4223ff04bdf827dd3f971806aab342b51fb6c2519c5b3aa410ee2eacb06207a66da829722129de37322ddf566a2356077a247b666bf816d75bd62d8842c555909c8a1545e03de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f54907a8d380556c8a330e16c78ee3af2c39f1cd46f776ecc20664efdc303ae9784ae775de15fa9e8fc81d7676ee4bb7b8b5e55729a9bd981757787c0c2477c76fd75cc9ac1e6f185878d252db6c7bbd874f5ae03fa9961d4f4a0208503b0750f17ad4bbf375bb62f626ec8048d4347cc1eef977780228a6d2fc47294088d561"]}}, diff --git a/txscript/data/taproot-ref/9309be25161f4e02117ef32870ded9650d0e4f7a b/txscript/data/taproot-ref/9309be25161f4e02117ef32870ded9650d0e4f7a new file mode 100644 index 0000000000..539d70c9d8 --- /dev/null +++ b/txscript/data/taproot-ref/9309be25161f4e02117ef32870ded9650d0e4f7a @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270df010000000d2d46bf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704500000000609e4da760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a601000000c24588ea01641b0d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87260bfd52", "prevouts": ["9707110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bde20e000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "f260120000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090282ff177af1b03054d9c533035830763fb8eed35ccb16c065252fcf995ad2b48163ae68b5dd01087842b3e484f15d0a4f1025d64dcf323509de1ac3f699ee00d92862e3d2e4a00dae2d2bf460d063ebf696ee1b6448b3462fa012f93150e1d2385ab3423de5034d0bf6b883b58ab8a7057cbc85f1fad044e7cbb12692b60a9ffc7479d5bc9c599ee817464b600b7c06eca8f80c467c517b2505f69f50d4670387dd1ee40d21bcc5c3c6c239f7a37f221431e055b20de844fcbbaf0417e691bd2b3b4ecba0d2a58811ed21f9f3d135caf9c6b7eccf507f71d2fe648b91b7e44cb901b76231dc68d4c1a79d0d4f9716dae56af7d0fe7ed863410f47ff37c2479842d4b8e00a62117bc9cbe89d24bad9c6a5dd07387e5a241d1b05e3f7a66fbf6920a68347e7a77757d557331da781a24930e1b4aa71b5f032f038bb0486545d79c84dab779aed2ab483083299127fdb95dc06fa6109afe7c7ac534a917bf19264f582ffc6c1361562a64fe82a6b1b294200ae02ab7f1346e070b6a8e871fd5acc5b6a0e23c2a73c941f36dc574a0e2681d625bb2b0373e609e18e641d34ed612fe3945aaf8a9cbb9b2f21306a6e7696088ec98ddeccd83dc79c65ee255f7dd573ce57b9edea5409ee4d8e3b5368f5a5bd503bf93a0a2153a9f659540231b73290ae7f251bf5eed0016a813ef8b0cb2e2bfaff590b23dc4b202ceb069186ef037a83a88199ddcc08484f4875c1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d03936fd2fb4ef675a9d8a495ac774f716ce2d4f21b7b05b81097d6a55e8066268c195719e600029237bb2bee296a81ae54a1bf44210bb387eff41995ca6f68fbfb640520cc13bd7f4751eea589bfdaf463667e9e3eebb3331ccb48f0e9ad4c4d3f52a2844c5f7874c7d430ecd2ddfcfe713e30c56da5784f950db6acb8f092a"]}, "failure": {"scriptSig": "", "witness": ["4d0902821c10f127db89ceb87239f88878cc98b92ec3ed8b8ad829ab4661b9d817091b2b4aa34d5c09c480b6e57f52f63b75396db79eb677021ec87518ac3b638b3ff98aaaec867e0efb8059b3bd538d3444624f74a8003cb1f4e935c70e238bcb57c5a183fab319e390d56be708f163171921bc2f2602cbd76f218ea6657acd2c35ae90bbe3c865b0d4de3fc39bd67983309a6fce9eab76f715de3e089ce872270c2a957f3005ae1fddd6a6b6cdcb6a931ccbab5475a6df2663096ff4008fcb681a691bd1254aef5ee56d923c50a427e7e4b99a73aeddfed8d017a2e5f725bcd42de38eee0670318d8a52ef12fa68a8753919dc95db7e14e7a3b4dd8f520698f92828591df62ac08888e1c8e570aad0c69dda337e79ddba0302bd304c2368f7a797d1e0d13d275ed79f9b2189ddee123fcd32445a0b6665253adfcb81acf8bc69c4668dc93529eb0b24fc04c608ea4abf9f9c988c1f65467b7b87e6573590e72b86f1d38cc2efd7de367e3b86874d4599b26d9f08b3f3490180d80325fd9914efc5eb1a9183bae733c8dd9876c11151c6e5c84a101b8600ede75d5ce52fa14928f9c266294b8a9dda7be93501a326ace83253bb3629bcbd1737cdc875da9aa24ecc66466393ef872ade843506bf6587de45dfe873094ee660dbed9d0a9a07f1adf339f66d32f8c8a623182321819995c347ba5eef8216e42efbece0f25e1553bb00cec58d85e8f8e26593bc7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366e4810b5abaf07487c81afb7f96e2c741409f4a370f93ea97a6bd648850fdc6949f82d663a1e447420f2cf05179af13964281439b8b427a6cb4b09af5b0cc1910a67b80b81ed02a57999348bdd390384d424a2522cd0278ffab5313e035bd402791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}}, diff --git a/txscript/data/taproot-ref/930d453e2c53ce2b64bd0f4b950552f988bdbc20 b/txscript/data/taproot-ref/930d453e2c53ce2b64bd0f4b950552f988bdbc20 new file mode 100644 index 0000000000..cc810aade2 --- /dev/null +++ b/txscript/data/taproot-ref/930d453e2c53ce2b64bd0f4b950552f988bdbc20 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c493000000004619122f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705600000000f0a051aedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdb000000009966758c01ba080700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac63030000", "prevouts": ["901e38000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "2cff0f00000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f", "676a26000000000017a9144c4b1fc943f04d775886b4f6d3c3c73bf7d3118c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "187d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb45493bacb64184bfdaef659f2e68a43f5d1d327dfc30cda594d93dc7e3d57d802a37b3510d82dab4bdf4d6195b9af4c8a1df2dd8a601b49dccd2ea1725fb9deb0356d5dc7bb189d5700ce63be65cd47bafc75bda640418bb3b77b52e492b0f"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93636d6e71a30deb5a5d82f1357d7fcc989127a050b444c84f666f959b2abd8d977a2a72d9a87053684bb0dc48081cf5c5135ec23a32b564c6b97b91a1c581596c8802a37b3510d82dab4bdf4d6195b9af4c8a1df2dd8a601b49dccd2ea1725fb9deb0356d5dc7bb189d5700ce63be65cd47bafc75bda640418bb3b77b52e492b0f"]}}, diff --git a/txscript/data/taproot-ref/934c8ad33d4e9c5c13372bc93bf26cf3107839a5 b/txscript/data/taproot-ref/934c8ad33d4e9c5c13372bc93bf26cf3107839a5 new file mode 100644 index 0000000000..c091b73e0b --- /dev/null +++ b/txscript/data/taproot-ref/934c8ad33d4e9c5c13372bc93bf26cf3107839a5 @@ -0,0 +1 @@ +{"tx": "00b76927028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4250100000051bf30848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c20000000038c234a6029a2a6e0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76c020000", "prevouts": ["61da3a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "77cf350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype1_byte_scriptpath", "final": true, "success": {"scriptSig": "", "witness": ["b73f22519c98fc73bb986a24583b60887b0a67b85da0acb5c14e44e24482799f1f2548b81e9f47ffd7b93357b6d67abd8803365637f5e37c889064c304d5bf8a01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b73f22519c98fc73bb986a24583b60887b0a67b85da0acb5c14e44e24482799f1f2548b81e9f47ffd7b93357b6d67abd8803365637f5e37c889064c304d5bf8a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/935a6ed5b994d0bfdaf42bf6dd6fef4ccdbfee4a b/txscript/data/taproot-ref/935a6ed5b994d0bfdaf42bf6dd6fef4ccdbfee4a new file mode 100644 index 0000000000..79b043d1dd --- /dev/null +++ b/txscript/data/taproot-ref/935a6ed5b994d0bfdaf42bf6dd6fef4ccdbfee4a @@ -0,0 +1 @@ +{"tx": "2b467a1e03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3d01000000139453f3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b81000000002569e0acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4c01000000b62770a0012fe80c0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc33010000", "prevouts": ["8f265c000000000022512035205488698c55c3e7035f1484d2f513744eb9d8b6fb6f0df083f7669ef0bfda", "7d6a1f0000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "d6c05300000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "8b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e4d7dc2c55a7521ecc297ff7217b922438f95dd9c29c118a2bf5c9e2c8f8c84f32a50ac17afa49989b8cd5fe09550e31f987b9afab4d6ff7fb0ac42074cc4b38f"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cde8e58194ee2d9158b02514bf803786a3307a33652aec833c6f0052c5cf85f6d8095c4fc48dd4a937a2ab720b4c7b803df056a6d61c0b781e24263fdb2663252a50ac17afa49989b8cd5fe09550e31f987b9afab4d6ff7fb0ac42074cc4b38f"]}}, diff --git a/txscript/data/taproot-ref/935dfd118a575d599a75b00db37955c92ef6471b b/txscript/data/taproot-ref/935dfd118a575d599a75b00db37955c92ef6471b new file mode 100644 index 0000000000..ca6b5aa858 --- /dev/null +++ b/txscript/data/taproot-ref/935dfd118a575d599a75b00db37955c92ef6471b @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bad000000007399e0b901dce016000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c8a96144", "prevouts": ["ce9d23000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3045022100af6a7d7b71ea42aca50daea1b2785de692f5639191ca5de1a446b2606c3b70d102202cef98b741c37cf76638cd84a7a5ff65cee1d4c0336d88ba7cc0205b281bd73e02", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["30440220661007a625300efcb420ff2d48a0f35a2b93fc4f60ba6c97e850e702a21a8ab902200bbfffbf14db197035a482ceead87fec107f8a6ec3c175f26ef0334f76cdd58302", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/936af0357943e249bd7e428753fc79b7870c4f96 b/txscript/data/taproot-ref/936af0357943e249bd7e428753fc79b7870c4f96 new file mode 100644 index 0000000000..d5623131f7 --- /dev/null +++ b/txscript/data/taproot-ref/936af0357943e249bd7e428753fc79b7870c4f96 @@ -0,0 +1 @@ +{"tx": "81f75e6703dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cae0000000014a05bb260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127036000000002ce4eb9c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702201000000586df89c03fad66a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487470e335d", "prevouts": ["52384c0000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "aa2a13000000000021521f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "06580e00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d64c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7d6bb54cde9cc6775748a201bb3f5d5704911b2e65f691925d2f8dff2efd34cd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51e30d689b41c4cadafebe300f1e3aad2e0751ea174af1d1313cd49baaa526270b3acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}, "failure": {"scriptSig": "", "witness": ["4c52d6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366166923529a9a0d12cf4938b50b7953e2ef8bb3db7f2829ccd570d4454b0cea3ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b22a5aef24b6a1c01bacd2a24a37cefc04a347b590d10f3bd98469f969c355217b0dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}}, diff --git a/txscript/data/taproot-ref/937fe4be2d5689c59d7c617e65996d41cfafdef5 b/txscript/data/taproot-ref/937fe4be2d5689c59d7c617e65996d41cfafdef5 new file mode 100644 index 0000000000..b4b8d7aeaf --- /dev/null +++ b/txscript/data/taproot-ref/937fe4be2d5689c59d7c617e65996d41cfafdef5 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127008000000009184f39cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8b00000000b18bd5d28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43300000000963b85dc031aab6f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7697ea15d", "prevouts": ["9e2f0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3c0a27000000000017a91486e5fab3386e07350db4c59e442dbaac96c1816287", "7c613b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_5f", "final": true, "success": {"scriptSig": "", "witness": ["abeac8960f7dafe5a2e919555e6460b7298142019262fa2dd4a3998dd53ab06ef01fa95a8f5c7115cdd23c95b01baa6c114ff467c2c00d7034601f04964c964e02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ebe010b49f957d45f204485fbb45e4d2e39be523a59a672c79d6cdffc24e9d2478f697633ab9722ee9bf575ffd5cbed28ac54eddf8585cb75e64cea6938a04ba5f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/938f94084baf3b93faae268cc5e094df56f01f7a b/txscript/data/taproot-ref/938f94084baf3b93faae268cc5e094df56f01f7a new file mode 100644 index 0000000000..2330077966 --- /dev/null +++ b/txscript/data/taproot-ref/938f94084baf3b93faae268cc5e094df56f01f7a @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3501000000d42eb6c660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ff01000000c3ef7ad960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270af010000003e9053a503f715690000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7a21d363b", "prevouts": ["1cfc47000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "edf4120000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "94c6100000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063da68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cd92e45bf75a1b2b146804c0ed0f2bf0edd954f9eb17213b8b1a71c9ecae831299aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41dc38fa67d6e370c9f405c2af01822f370dc317d6e78d2f71aa14f0ce4de56d6ee4d75780d36bffae9b56136e6d27c02b8d233efdc800bb260bfbba6a6f94b87"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e3c96742c83ea0214d677c4de90733cc5cf86dd9f7c70b49cd7ec12a5a3c726d44455204ada9566561196f14caee307d16123ffe4b49d60aeadbae3e053e0a80355d713f01682c54eefc137cacda341f8a928ca67657dd1895f9a847e54f584f6ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}}, diff --git a/txscript/data/taproot-ref/939a2a924292c7f549cc8f8be939826a3de6b820 b/txscript/data/taproot-ref/939a2a924292c7f549cc8f8be939826a3de6b820 new file mode 100644 index 0000000000..e8c4ecd780 --- /dev/null +++ b/txscript/data/taproot-ref/939a2a924292c7f549cc8f8be939826a3de6b820 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2800000000247f1be9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b470100000047d17b1904693c7500000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a62ec0844f", "prevouts": ["06e6540000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c65b2300000000001654142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e8", "final": true, "success": {"scriptSig": "", "witness": ["27816d2cc5e307295f9ba635ace825ae8c14604646013dd9594278abd50b430be530f3befb40017274871baa04f1800a5cd248c1b3a3770c186d0282e7abc58603", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["98d48ff1adcac3a0192abb8a2e0be7c8003f545fc28598db93a71f04f6a2c156240504bbd88a980304a4019c528c0a7dd3ca2c91f095a436811f65e39fb97f3de8", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/93aa13626c3895c12d82d3763e8e916a16a4fd52 b/txscript/data/taproot-ref/93aa13626c3895c12d82d3763e8e916a16a4fd52 new file mode 100644 index 0000000000..892c8a5988 --- /dev/null +++ b/txscript/data/taproot-ref/93aa13626c3895c12d82d3763e8e916a16a4fd52 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c1010000006ac7384fbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1100000000d73802e703a25eb7000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787b7000000", "prevouts": ["edca3c000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a", "b02b7d0000000000225120dbe65d5ea7d032bcaa5c118e4e1c91ea90d9063ab0b7377212d71cac34e27d50"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "success": {"scriptSig": "", "witness": ["48dd24f01ec389c6aa1c7c4de0b543aeb7f7b94ce820364d0184fe1f53bb065b1f23b30375a33b2b3e6d1fe920de9ef494292be62f0839c8a86aa0485b8beaf301", "a841b52a03af9c7e163427d00515846e743a7742c851a17eed0e6750dd8bb1970a6dcf20fe11b9097be804fee2d1d2b5eb52ef5e9a3a3cfdbd591edaac5d21a173a27d205bb8dd0a0749cb58ab4bd9efe53f7741b168eb2fec9fec62fdb3b7e9b89307413f68cc5d210df7aa5e3a8eef4ede53f94819860a15e3df80d2e97faf8ec65314dfdc3b9b023b57ef2ebd8547c892eb980de90baf9dba38718d2c481766b51315650b5b30", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb1e2cee3375e7a3617675c25794b8c82600f0458264a31e18d2893f71349a5cd20ca8a5b7d3b1bcf360b00e7a0b722e2c5fd3427d5a260246eddbdab3f29e162ee67a218d8499637a26bda36d2a17a3cf791d730915010a6ed0f6452f27224075229ccf552e66693fc023137dae6b03340574af2400f82bbc88f0e481dfc6497225ae0f110f2ee402496f4c339c19a1a603c6786c41be9b4f1c959b2ca4b7880000000000000000000000000000000000000000000000000000000000000000df81a15cb6157a997d23e8367bc6e778d43b26a7391e5efb842e07519fcf2f5399227a58e60ec9e6b42a2ed2fb9ba79d0d26d1d87db5e12175dd2f9c8b16ba652b7b3a6205956e6401c9f35d4a5d33dd0a3ba5495645c15232ff408091a30533520eb4d3a37acbfa4c2b9722f9927a216f07a961a50bef6bba63780c811be1198e724c90cae14c8ffc23ac098ba9b59d9b588fecbfb275ff754d9dc17b3e6dab8d918da947f768627accc543f58f7af31796b5434de8613084eef99decd2baf300000000000000000000000000000000000000000000000000000000000000009234f113cec6627bd6ac8487d93e3699e63c0cdc0619913cce44a51bb0f688eb39877db85e83f0c862d8633caf73a9326257144d7176cafa8629ff0c5b38202a68fe5f304ab2ad9df483dcda2ff7725fc0e7e89294fd0dc679c1a7a07ba414cec58399542820a6aeb2dcf95a041f323d25665f9fbca28886436077cb8be2b10e31362f5e1499ab046a77707a9c8a0c435df78be3b55c3a6aa2922cfe1a01bd14ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff31c7de372da1e17aa478b3e87520204bd20d956f29738cc824c65d8de94324675825aeb0fe9679d64732737cae4ba38ca353b68a4f3eba202b9e314708b61a2e127a0c4fedc2ac6f4adae18240490bb27d7b42d7a168ac08ce6ea079fee6bf690000000000000000000000000000000000000000000000000000000000000000079e65eb1dd2b124a80a8d35bd0029f27fad92fd612b1ff614a8d4a1e5d10ac90ca4c6b50bdf0ed8b864853222019b328796ac321814e1d88f0cdb52f5aa3ba6e58a400dad16b21b14843c4424ec0afbb1772a50e159adf93555f0a136120ec972364c2e6d4aa20a1a8760c5871a6c917650d01c13b664a51dff2bc2bdeeac8ab861982347bd397a1ab93465b080589fc2bf6ee04e3185af7edf8d73dd55326d7b5c915c87acd549339f916f567e3369a5da1912d46d34d7b79ee00a0f8f2ba621d95e82e83fb663631b922d7a9f430ff22c25e07756efeddca343b1c4b3a8986f764e232f2029831716841f4e2abbdd8d103f6085c0a1f56917c01df509ec2e54cb9151558f651cc1e1b0dd0592348420b5594962e953963c0c0e096ab00923e8ecb379c644d74c955a84899c399b1e8c36549036aff13bfb1fab7b36dbaf6b71072d7c456b323bea80f0c3438b35d27f68c3519c42d521cfd221c075e69f14c4dd61e158de2d244554bec2d52888252aca842988327a2f2c49ff1ad52390d29f53dee873326723dd1a456679a3d517f466dbf3230c244aef28d8c67137e393000000000000000000000000000000000000000000000000000000000000000065531fe14e1068f925b6ad5eddec6ccc3a1a910af7f93bed7d3c70bbd93b084effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c7429955b1371d76b9c5a03b2fed2fd7dceac38e721517ec9f63023b74898ba85b9b164b24a926af6531d00893e478019cfa474247430d3a6096db76e0dcf0ec2b7b2b03358038f744b4635e6a84169ae25b213a9b65407a11ad3ec283f8fc79117dfa1bbe4ceade5337c6474155c446f134c4d4564a096a9405b040d4c0de000000000000000000000000000000000000000000000000000000000000000003c243208e98b861d291ceb50342fdfcfdd2cc43175606849f5496c47d47e7b9f04e7c7f30e550162bb4e0f661d6d64b5508f6d2150ed0a6a176f58c2a0eb6d1bf98f69bb6b1d58ad95d0bcc0b605a2085e4dbc1d0b56b3d6128b4f3902d9f0dfdfbb02b23dab79a0011639290e791225b1ab6dc81fc967d21d215948ce50b05f9708d3303f22e7a9dadd0fa3d4fa152f585f19469e1fcc3d405562abbf025f8702f28380b57e16ffaaa570b43cd17e0b6725068ce5e1c9b1f26372a59ae55afef8cfe865368c14fff7e62b8a82478cbac8578808c103929716f2e137361eb7db000000000000000000000000000000000000000000000000000000000000000041b4fd78862ab3d40b1a51cf7d2d6a0288f4cd18a6612051787a5edc2b50167d0000000000000000000000000000000000000000000000000000000000000000a30c266ae1feccd856e1118cc2d68023e52e0de09538816b5ac79fc50efbe7a8727b36045284b7fc2ddccb6f164e73285988fe07dd03d753bb860f41763dbbb2bd9d5111ec067cdb62525b4849415ee86d0dabb4f8a73f6a30de4a539b3b3b95c54f52439fa5168156d15c3e37ab4d37225df79f7422a89d7e3e4135493ff2921ca0ce83222df7eb15ef31d5146da6f9e82f634324cef74550b85ab12337a9fc98fabbb879a80d0176390bad5bba043552303bbee8282dd8fe2449d37f8c088bb01645dd23fb480dc58884ab0e79d9d73494685c7618db1e70b517776321df6276416aa2b26db419ad1a6290893e169be8a70ca9a03781d069d1e58494e580e3a3d96bb0c10fdda9c69e5203b65b6c433092b434accb75594be0ef3b78e6f4267efa3be104ea80c6b41bdd8a4dc87e235c63ec296223fc649fb6af88b370344586eb6d563b9e215635863855633d8788ca69fed658f7b5051dfbbf42cf15878b6fc9bc815afb4af4c54f7088f28dcf9316d12f55d2d8af059fb8d59d6adfcdb6e068fbc7a9bab2aac249f58fa82f831ac02d98b64b4d69596372c61d3640d8dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff645d8253e8231e99b910b430c044a014f3c592f83c269553d49a3ea5eaefa182ba4ed8965a4012c5a826cbc3f0c69ebc16c1b50bfba73b679316f5b531956b2660a4cb2ace9b3bdeb09ae753192a0f8509bfc958c1b8892d68be28a91967f7e4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000967247d014acd37115d25537b0a6ffd6d8dfeadd62c2d9217c5cd05d25c7e3aa", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["48dd24f01ec389c6aa1c7c4de0b543aeb7f7b94ce820364d0184fe1f53bb065b1f23b30375a33b2b3e6d1fe920de9ef494292be62f0839c8a86aa0485b8beaf301", "430fa5c2e82a4549f63114ce2424c1c0614b93de19eaa8338300d03bdeb1ffaa55051b666a7533d3e9c4994ff63915420d4141f2623de61a081f22ad87dc13bf2aaca326c4791cc9a669dfdb85d4a2eba88c98ad1d69c768615fd1f8ddd33bcbb04ff38770d988f6555bb4537b52701a08f315922a1c2f14c801ccfb0403e89cef3695acaee51e07030730102f873e4a8ed153883d0a69c7232b148282c8e1ae832080e1a17991", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb1e2cee3375e7a3617675c25794b8c82600f0458264a31e18d2893f71349a5cd20ca8a5b7d3b1bcf360b00e7a0b722e2c5fd3427d5a260246eddbdab3f29e162ee67a218d8499637a26bda36d2a17a3cf791d730915010a6ed0f6452f27224075229ccf552e66693fc023137dae6b03340574af2400f82bbc88f0e481dfc6497225ae0f110f2ee402496f4c339c19a1a603c6786c41be9b4f1c959b2ca4b7880000000000000000000000000000000000000000000000000000000000000000df81a15cb6157a997d23e8367bc6e778d43b26a7391e5efb842e07519fcf2f5399227a58e60ec9e6b42a2ed2fb9ba79d0d26d1d87db5e12175dd2f9c8b16ba652b7b3a6205956e6401c9f35d4a5d33dd0a3ba5495645c15232ff408091a30533520eb4d3a37acbfa4c2b9722f9927a216f07a961a50bef6bba63780c811be1198e724c90cae14c8ffc23ac098ba9b59d9b588fecbfb275ff754d9dc17b3e6dab8d918da947f768627accc543f58f7af31796b5434de8613084eef99decd2baf300000000000000000000000000000000000000000000000000000000000000009234f113cec6627bd6ac8487d93e3699e63c0cdc0619913cce44a51bb0f688eb39877db85e83f0c862d8633caf73a9326257144d7176cafa8629ff0c5b38202a68fe5f304ab2ad9df483dcda2ff7725fc0e7e89294fd0dc679c1a7a07ba414cec58399542820a6aeb2dcf95a041f323d25665f9fbca28886436077cb8be2b10e31362f5e1499ab046a77707a9c8a0c435df78be3b55c3a6aa2922cfe1a01bd14ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff31c7de372da1e17aa478b3e87520204bd20d956f29738cc824c65d8de94324675825aeb0fe9679d64732737cae4ba38ca353b68a4f3eba202b9e314708b61a2e127a0c4fedc2ac6f4adae18240490bb27d7b42d7a168ac08ce6ea079fee6bf690000000000000000000000000000000000000000000000000000000000000000079e65eb1dd2b124a80a8d35bd0029f27fad92fd612b1ff614a8d4a1e5d10ac90ca4c6b50bdf0ed8b864853222019b328796ac321814e1d88f0cdb52f5aa3ba6e58a400dad16b21b14843c4424ec0afbb1772a50e159adf93555f0a136120ec972364c2e6d4aa20a1a8760c5871a6c917650d01c13b664a51dff2bc2bdeeac8ab861982347bd397a1ab93465b080589fc2bf6ee04e3185af7edf8d73dd55326d7b5c915c87acd549339f916f567e3369a5da1912d46d34d7b79ee00a0f8f2ba621d95e82e83fb663631b922d7a9f430ff22c25e07756efeddca343b1c4b3a8986f764e232f2029831716841f4e2abbdd8d103f6085c0a1f56917c01df509ec2e54cb9151558f651cc1e1b0dd0592348420b5594962e953963c0c0e096ab00923e8ecb379c644d74c955a84899c399b1e8c36549036aff13bfb1fab7b36dbaf6b71072d7c456b323bea80f0c3438b35d27f68c3519c42d521cfd221c075e69f14c4dd61e158de2d244554bec2d52888252aca842988327a2f2c49ff1ad52390d29f53dee873326723dd1a456679a3d517f466dbf3230c244aef28d8c67137e393000000000000000000000000000000000000000000000000000000000000000065531fe14e1068f925b6ad5eddec6ccc3a1a910af7f93bed7d3c70bbd93b084effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9c7429955b1371d76b9c5a03b2fed2fd7dceac38e721517ec9f63023b74898ba85b9b164b24a926af6531d00893e478019cfa474247430d3a6096db76e0dcf0ec2b7b2b03358038f744b4635e6a84169ae25b213a9b65407a11ad3ec283f8fc79117dfa1bbe4ceade5337c6474155c446f134c4d4564a096a9405b040d4c0de000000000000000000000000000000000000000000000000000000000000000003c243208e98b861d291ceb50342fdfcfdd2cc43175606849f5496c47d47e7b9f04e7c7f30e550162bb4e0f661d6d64b5508f6d2150ed0a6a176f58c2a0eb6d1bf98f69bb6b1d58ad95d0bcc0b605a2085e4dbc1d0b56b3d6128b4f3902d9f0dfdfbb02b23dab79a0011639290e791225b1ab6dc81fc967d21d215948ce50b05f9708d3303f22e7a9dadd0fa3d4fa152f585f19469e1fcc3d405562abbf025f8702f28380b57e16ffaaa570b43cd17e0b6725068ce5e1c9b1f26372a59ae55afef8cfe865368c14fff7e62b8a82478cbac8578808c103929716f2e137361eb7db000000000000000000000000000000000000000000000000000000000000000041b4fd78862ab3d40b1a51cf7d2d6a0288f4cd18a6612051787a5edc2b50167d0000000000000000000000000000000000000000000000000000000000000000a30c266ae1feccd856e1118cc2d68023e52e0de09538816b5ac79fc50efbe7a8727b36045284b7fc2ddccb6f164e73285988fe07dd03d753bb860f41763dbbb2bd9d5111ec067cdb62525b4849415ee86d0dabb4f8a73f6a30de4a539b3b3b95c54f52439fa5168156d15c3e37ab4d37225df79f7422a89d7e3e4135493ff2921ca0ce83222df7eb15ef31d5146da6f9e82f634324cef74550b85ab12337a9fc98fabbb879a80d0176390bad5bba043552303bbee8282dd8fe2449d37f8c088bb01645dd23fb480dc58884ab0e79d9d73494685c7618db1e70b517776321df6276416aa2b26db419ad1a6290893e169be8a70ca9a03781d069d1e58494e580e3a3d96bb0c10fdda9c69e5203b65b6c433092b434accb75594be0ef3b78e6f4267efa3be104ea80c6b41bdd8a4dc87e235c63ec296223fc649fb6af88b370344586eb6d563b9e215635863855633d8788ca69fed658f7b5051dfbbf42cf15878b6fc9bc815afb4af4c54f7088f28dcf9316d12f55d2d8af059fb8d59d6adfcdb6e068fbc7a9bab2aac249f58fa82f831ac02d98b64b4d69596372c61d3640d8dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff645d8253e8231e99b910b430c044a014f3c592f83c269553d49a3ea5eaefa182ba4ed8965a4012c5a826cbc3f0c69ebc16c1b50bfba73b679316f5b531956b2660a4cb2ace9b3bdeb09ae753192a0f8509bfc958c1b8892d68be28a91967f7e4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000967247d014acd37115d25537b0a6ffd6d8dfeadd62c2d9217c5cd05d25c7e3aa", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/93c0123f1118e26a15aba5739d9f8db784f21efa b/txscript/data/taproot-ref/93c0123f1118e26a15aba5739d9f8db784f21efa new file mode 100644 index 0000000000..fd5a5acb89 --- /dev/null +++ b/txscript/data/taproot-ref/93c0123f1118e26a15aba5739d9f8db784f21efa @@ -0,0 +1 @@ +{"tx": "8e58b9e9028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b301000000df8399ad60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270620000000088e2538303dd3145000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d6bda649", "prevouts": ["7be839000000000017a9146704ae21c886c9ded757e2b67d582abfc91902d487", "05500e000000000017a914f955a33e905fb6c7b7e694c8cef25993577deafb87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "165e142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["2bb1a56194abdec51c8331e26013315467988ddbcb79c43216b1b1c8dedd9980c1370b18bcd322d72ddba207457f2254b5a0de08eeee92794bc91278330a2a49"]}}, diff --git a/txscript/data/taproot-ref/93c6f793e89f2bbe200dcd083729e8e2af40c2f2 b/txscript/data/taproot-ref/93c6f793e89f2bbe200dcd083729e8e2af40c2f2 new file mode 100644 index 0000000000..40f4f2f520 --- /dev/null +++ b/txscript/data/taproot-ref/93c6f793e89f2bbe200dcd083729e8e2af40c2f2 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be701000000e408386d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46a010000004e24027602e24e58000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48790000000", "prevouts": ["6c72270000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "f5703200000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "167d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5d52fd3619198ed9f30c361c888b4873ceed26f5355cdc470271342f0477c7346c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa654bbf7a6388e898988522fa7e5d2ba9e6951646cde29fc617f56e0c3d8e4d50afd13a3b2c4c421c5355668ae9e4eec8bcb7618363c6e35efd204a43726d22d6"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936623e05fc14b6e5762de92ccf74a58ef66fb3d817a3f0508030881bf1f629d27293bd46d889920012fd3d654be778806775b1e6ea0b6836161b66543651907968afd13a3b2c4c421c5355668ae9e4eec8bcb7618363c6e35efd204a43726d22d6"]}}, diff --git a/txscript/data/taproot-ref/93c799f74d4e3a3b8dafa975cb2453af687a8872 b/txscript/data/taproot-ref/93c799f74d4e3a3b8dafa975cb2453af687a8872 new file mode 100644 index 0000000000..22b1e84fde --- /dev/null +++ b/txscript/data/taproot-ref/93c799f74d4e3a3b8dafa975cb2453af687a8872 @@ -0,0 +1 @@ +{"tx": "d505974903dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7d010000009a3a5dc3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b710000000071f6369760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f501000000c7d508ab0473fc5900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487b6000000", "prevouts": ["a02e250000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "b3ca250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d95a110000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "367d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a25034f4670dba2bfd8b532fe5e2c4399b1757245b955e89574c41111a3f13a78448a7537869648343bbbdc00eb4ac0785a5f2aec0111e81b0d25ebde82a92a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93618278c07a795a465b0e01ec560e597d9dfa9576d66260ea15112d4b854280992e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a25034f4670dba2bfd8b532fe5e2c4399b1757245b955e89574c41111a3f13a78448a7537869648343bbbdc00eb4ac0785a5f2aec0111e81b0d25ebde82a92a"]}}, diff --git a/txscript/data/taproot-ref/93cedb385de6371ec85a3086d53c93ba0e1c6926 b/txscript/data/taproot-ref/93cedb385de6371ec85a3086d53c93ba0e1c6926 new file mode 100644 index 0000000000..a86d36976e --- /dev/null +++ b/txscript/data/taproot-ref/93cedb385de6371ec85a3086d53c93ba0e1c6926 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ac000000001d48c503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5b00000000989542d002fcd25600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748795010000", "prevouts": ["0bce3100000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "9010270000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ae7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8b509ab67bbf3c81955fa9e200008a666546f84b8be37a00b57f87c80ceedbec790189ee9b6b94816743a58868693b6f0ba58cb07e4c6d5ed2ce590077e887d5b"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ba812021bec55125a4043e092087428314c694c64b021517d83eab825dad5a3d31f1765c4043c65869fc44409698468cef1d88a3aab3981df946f88d25a1c2d5c67b1d078674a4d97323398e107b13ccefe9299bb9116e21f935c64f37bba24f619c7e3fc3d0f43b284295c7c76b7ff66dfc7bbdbc495ce3e8e20608c97360e5"]}}, diff --git a/txscript/data/taproot-ref/93d43e9d7f08eba5daa4d394a95703498c7e2139 b/txscript/data/taproot-ref/93d43e9d7f08eba5daa4d394a95703498c7e2139 new file mode 100644 index 0000000000..cd0cc6ea96 --- /dev/null +++ b/txscript/data/taproot-ref/93d43e9d7f08eba5daa4d394a95703498c7e2139 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd400000000b4b636e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4350000000068748b9903215e57000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87390ebb5b", "prevouts": ["0e7b25000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "a72b3400000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090254786fef98432f4ab257de77d302d189d2ec0f232bca6e2b1fca1feecafcfd854aa110d377d2578d0c1fdcfab4625f708ec4a38dc8cf6d91b4cd2d6fa7746fc563a7f7f0be9e1c1dedf1ec82a8900e7f329d7ed68e76b2c3aa579e3cd196d7366dda6ead2d7a3cdb21a3c8591c9c9183c51bc87260b4343623866120ffc72049ddc4812e61ad04bbc17d557f01e129c68f43b2ef82823b92d171c9fc5184eef6e77b45a0584b9d6f8763628e8f834b0e2ce9a08a6111927c0338b35615f221f46b6b6c43bff73856bac7ab70f3e7781249fb9043d9729ec319cd59d47c4bbba97252ca86c7c979feb223705d89d73a82bd768709e6e3ff0cc4c20ca28ad786041caa0828c6c8a6d2d4c1f99bdce7f0422cc95fe8372c33eca9e19d8f7288ed49001b819b206bcfeece64e3ea9867467f0697ef1e9e0756ba8e47fbd131c2fc0be13b0e15531b21de162d6151e53382d93941118bbe01035677c4469176ae13f991dfcbdbb07502cf46281b3c3b1b9ea1d170c437f5eb01e94331a544eeb07430ae71b6b229166fbc7682a8eb6033b5c0d53f2b133c9069db2619d299afa0627f989aee5400688ea4e41bf5cbaa0a17e02af5d12be9fcf82259f8cdfb7c0795c5fbf2b469b2324f531658e4048dec8544e6ecc22414d82aabeea7f98face78e63cc33e642aff2b66a041216741c0fa19009745012091a87683d040341ba6a7352234ab0357ce803479275d7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661747dd2a7267965918e87a9e7a48fc27a69ab683578f071fc2334710db08db0569af0f9e86656db21fe5e74d4bdcdfc2cda5437bccaf9e3d568ba1282fc608d76e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}, "failure": {"scriptSig": "", "witness": ["4d090231d74aad9ffa52eb77299edc3988789dcbc5d72ab76b297a80f562b7cea5a5dc21290fbfdd52f58fa0223a8c9dc3d11ea859c976e4837c697f05a286628fc13d83328f2e61534a39c729e16b54a3d54c3d9c1517f491295295b78f4934daa61986b7b02d6747ced33510e8b7cd3aa80a2131bc13169390dcc2540e87bcfc7742ebd4cc19e33993f11974952b38742181e1e73f4626a124a43656f4da23c2e78afe27986d9a79d56140391885cc1c0c4cce7d4c7fbfe2c08f6d447f3116e3674593c51212b661e7b791dee5b677c0fce3d524ffbfdad7c72dc4667e3b0a02a260efda42351cdcc6c792472e22740d5732e8267cde1c05cfcfb9d9d3610dec797b67ed9a88b832d9d09da1d46e9444068b00591ff70d0524d2df2fb8c61afc69dbd903ad7efd7b112a5dbe832abb52433bb39352690574e89330121f6683fb8d13a0c6096f1850f752b0976646fd2b8aad149048b66a74c8aa3f601c79734bf15b184d79a1af4281d6b68c6fe483848b1f19958ce6d1aec619c0d19c7113d5ec84560f716a7668c76aa54a39afb08789520ea58f18c88ad778f442fe97bdbd5c901819e62ae3126f82427110228cb9c8e33706abe8e7d33235abc851154ad1167c2bb7eb124781ae4fe0f0ae46067ca5373b7b987010f2aac7c3591fc839ca3f76722bd645aeb1efd6fe1137905af39a4e65fb07882d5960e3a1a5c7514785b68751fcc61aa138c620de7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514c1a4ef98c473095d2df256e4c96a081ff076f8ed25b9a6c5f4dacfc5de1b1d157a61376c510bdd1fc860151a3b261939fa407ec1a2d0490cf2efc4278abc783"]}}, diff --git a/txscript/data/taproot-ref/93db6d7b5e262a03c9f6ccf71ef4e8de7acf6fb6 b/txscript/data/taproot-ref/93db6d7b5e262a03c9f6ccf71ef4e8de7acf6fb6 new file mode 100644 index 0000000000..2acb5d0412 --- /dev/null +++ b/txscript/data/taproot-ref/93db6d7b5e262a03c9f6ccf71ef4e8de7acf6fb6 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c90000000024f8cfb50281b62f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478786010000", "prevouts": ["7ccf310000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "617d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93680e322cbeba9447e623c355f3a00500243eb51ea80336533073705560965e3918a99f3582d6399c0406dfe65dca998a5ce57b7e950df5f64352e1bbf6c7fd210dd304186c0a2faa80f59261766b0cb9b0760b78eb1f31f166a6f091ab62e6898"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e0063b43826002dc6eba62f224851f0eabb14759fb10c707a6afd7fdb59e93aad3ab6b2d4691bf881316931c587f0a213fdb9026021e80f212e72f88982a6bfdc"]}}, diff --git a/txscript/data/taproot-ref/940254cd6f8f945bc5f1edcef83ba2afc7edfdef b/txscript/data/taproot-ref/940254cd6f8f945bc5f1edcef83ba2afc7edfdef new file mode 100644 index 0000000000..65e54587fd --- /dev/null +++ b/txscript/data/taproot-ref/940254cd6f8f945bc5f1edcef83ba2afc7edfdef @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4210000000088e395bbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9e00000000065185d6011fae600000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc33040000", "prevouts": ["64d14100000000002251200aab5f0acbd570bedd550e6582d56f36bedceed0a29e5b4b9333b469d2c71737", "cfe726000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d0fe92aaaf9bcbf8f57bd6244a8fb4fbc0ca25d6d0424a43c103cee319c92082c98e5e9b0eaafdadb9b7184639bef269c7aaacc3aec400bafa574ee50a78d1c937b14430a19c2205facd906c64531600bb76adc53c9239ecd75bae8c55bd685bcf3ff5e4714c7e8d810364dea3179289049fc10102165a272bee60a9bb0427608ea0c76ca562fdd4d43e116602f3ca94b17365734a5a0ba06a4ca64c0a9f137e7ff037a8161020c2b9003b47a154a213b107ab80df1b79fe463c6fe3bed41dc1bcf455f14d4ddf7dfb8ac1d65a0f9a0aacc1b9c81335ac9fb2363f9b6fa9058f80066a0732d766ca0ea37d6667f1666075ddaee7b27d19725f1c2486ee4bd8ac431cf264f79215b64b507ea97b1af114e87dbef89fcf415595792bf33ddaafe4e9cf134e006f62ff0b1122ef3f2242b819a878fe17809a9597f28045074ed7b52974e9a2b2f05315decc5cee231aa321423b241ab8e9c1b20a1521f4d37ea0747a7ac6000411f3fe8ca75807e9a388bfcbdbf7a379d660bf95a051a3d46e047a38bdda72b3636fab9ffa0c34167e5afe27cc07ef32aa0bc86e5da4d4ed317ed5efd400a69b89be6d90d8d4e982fbed2549fa4d4e31d925a249114ec3f5d9d482068eb691a4a3ca0f220a499ef9de26ff5dd482f47ba408f57ae2524dad882aced40d933ebdc6ec50f04f74ec925805b936f16eae8e504713ec623a73a9964da95ef83820d6432ee37075", "247d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e85e7553debb7d46df339c30c507d2c3e528ab4da6adeae898375a123e3f0f1c20ee08d5698d988fd8465309aa10a601f39a775c4be89f69280a5de9411e45585f440784f6f41cc1ae323b623cf5dcb000da45020704fab66b6b5f2ff7d67a93a3"]}, "failure": {"scriptSig": "", "witness": ["4d0902d8ab9144589dfd188ed38c29a38146fdfae6fd14d7c3ad459816265fa1894697c74a9e81531014e365716550c9dbfba913e7c388df5aa87a9c914bdea04479f13aa5ebb240666c4d5ef29aab31796575a12d1576f0e6698a07473e2ce75eeec88793e9ed55dae3de690d6b58461f88f890c4e4195ff4ee742d58b88f125474b0ba4bbd369820b859e91664859466c8b7ed0396441f26e2c21c0e8ca389bb4a87ba802ed78d31367e48c32b7ffb721bf41d7729610cc9aef06315350089fd04d7fe46c04babfb5e36ac3ff677808d5e139cbe9343cb5224d8f6e230e06d833466e300ff1d874b87c81b4ffbb9c262af0fbc8c67293ff78f6f3c29a2404ba660a6712ea7c4f6298cd80669ebf5acbd76c916cbf9b9eba54642b17d50dd19abe9cf598a8be8f4cbfc845b0c281009da22f2601f26d180c33c922d6915baa2c40406d256800ca4baac9a3ee509c5e5fc178737f643cad6cbccae98ea54370671fef481aab536b786ea76e462b473a60c2133ab4e0f52866bd71552cdfffeace9a551c0bf894321d39efec519c272fd60c0604baafcd1177665a0d02c83eb5520db7d389e3d6183f84bfb17660592c001c0bdeee2468aed3f6f562d87aa1f2b0fe0f8c36d8b7c40e1d9888c591005927595391b443efa5a6bb9408ac3dcfad3d177d97a629e9b435b2e2df4b44046ac4a818ba0c3063cbd6c3fd178f4eb6d4ffe032cf8dc0552fc5173bb3675", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93624d31f15a10278dcb4f9d1f0a96cdf3049a06339797676c8885dddd4f0fc93a7ee08d5698d988fd8465309aa10a601f39a775c4be89f69280a5de9411e45585f440784f6f41cc1ae323b623cf5dcb000da45020704fab66b6b5f2ff7d67a93a3"]}}, diff --git a/txscript/data/taproot-ref/94136714739c4978945621f669ecaf025dff07f8 b/txscript/data/taproot-ref/94136714739c4978945621f669ecaf025dff07f8 new file mode 100644 index 0000000000..861890c689 --- /dev/null +++ b/txscript/data/taproot-ref/94136714739c4978945621f669ecaf025dff07f8 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfc000000001e5111c0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf720000000083aefab460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270490000000053752fdd0376fea8000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987cb000000", "prevouts": ["de10240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8c427700000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "5ba60f000000000017a914a2a8d85df2f20a0aaff7224012fc4cee13e29cb987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_20", "final": true, "success": {"scriptSig": "", "witness": ["a090d9990b2e412cd6e3c8e32f54fda22d116b9c0bb0efa2dfca7db13c0b9e6e375a2108dc5208770275f4090b58cd9dabb9541452357807808d9894058659c883", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c9840e15d47a73e5867c99b9844c7b2b14ea7dabec79d1143b5d1e2bfa9734cce169380b194d264cb4e2a3914a690403441bd5608735929f1fc3eb4bb8fd6bb020", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/942302c74767926cf73be9bc6753fc422157855d b/txscript/data/taproot-ref/942302c74767926cf73be9bc6753fc422157855d new file mode 100644 index 0000000000..e81ffa9caf --- /dev/null +++ b/txscript/data/taproot-ref/942302c74767926cf73be9bc6753fc422157855d @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cab01000000c52c83f28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41902000000b66db99f0378a38d0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f874b030000", "prevouts": ["b33c4b00000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "74f3430000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00637f68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c177cafa467da566f6ea98c1f090f5884eb8b4c26177aaa2b6576cf2c9201f80d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51d82f8c55e99af1bc6044802eb870171f459184b3c99e354e12eac4f204be9c37cf5fd42f9969f7f2472ed1fa62ffa49909a09466cf06ef7c57cb1be351156c54"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f7be44faca900f8c301ab589905499652f78692082c5eb6dfc73a67bef26ea6d1e2e06d6ff5c459c120ed1951ff2f8353cc05da31129bd66db4aa2f495d014ff8d5397512e216c7ab52609f0ab27ccbbfd2b7e561d7599ada55e292956af911ecddbcce676de51918ff82e75e695523ce4d8df7d4ec353d45ae6331617767e1"]}}, diff --git a/txscript/data/taproot-ref/94232b6796277453192019999be8b0fce849e3c3 b/txscript/data/taproot-ref/94232b6796277453192019999be8b0fce849e3c3 new file mode 100644 index 0000000000..a82e356498 --- /dev/null +++ b/txscript/data/taproot-ref/94232b6796277453192019999be8b0fce849e3c3 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be301000000fb36def3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb301000000e6af33afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0c00000000754fa2b201d3161100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac7fabae57", "prevouts": ["c6bf250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b787490000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b", "1205240000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "1a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08240401d3043d3e54134521a2f6b274f3ac0e46a5b9a6f95ac49ca3a75270b4793801cbe9d84ce1e82e006940c90d66235295537a514918e448d1b01c99be1031af2727a08c83da142d000f7f66d34a23554b296f940ffe81022e50f50dcfdd8b9"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360dfbde9ab9ff110150d651dbb4a3d630519bc9a746ddaf163b71af588c3b00d4febf22132d9643e24ed9082227473dd30d4d39a0b990b222eadb4d87d4a2f8740b87aa3d77021654e9bdded249075f42755a492250fa9a6a44787c57353d93e356798b11c96dafc2935d577afad31a6537ce4b1a48ff27833822cff5fe95a51e"]}}, diff --git a/txscript/data/taproot-ref/944304c86610b738afbff55026632249b735f401 b/txscript/data/taproot-ref/944304c86610b738afbff55026632249b735f401 new file mode 100644 index 0000000000..b9081021d1 --- /dev/null +++ b/txscript/data/taproot-ref/944304c86610b738afbff55026632249b735f401 @@ -0,0 +1 @@ +{"tx": "5e99ba8803bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7500000000df8a91a8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3f000000005c7bc9e9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0d02000000a28c08c40314b9e600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75c6ed459", "prevouts": ["48417900000000002258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "685e2300000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "f0a04c0000000000235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f94c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c138752b88f442304cd570a99b7416851da048b7f1df3ec1a880a296df45b544a4dd4bfc6549e8d5e198b0f1e67d147f6db02444245a6cb27bc19444f2462468d332399bdd0fdb741da8d579adddb10dac50c4b595c0031ea1e156729d78e3487d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}, "failure": {"scriptSig": "", "witness": ["4c52f9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936546f12ea3782fdfa089a8659f2ae7491ec9907437584497a98bb88f5268eaae43f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bb0de8cab6875867027c85350e6845db37b89c1faa2a12b075d8db116249f7bd2367bb7d11bbe7d9666c447942212a409021a53e3151df7f84d090727acdc4c9"]}}, diff --git a/txscript/data/taproot-ref/9447c6b9ffec17e55cc04961dec9cc9affec21dc b/txscript/data/taproot-ref/9447c6b9ffec17e55cc04961dec9cc9affec21dc new file mode 100644 index 0000000000..9eb058c5d5 --- /dev/null +++ b/txscript/data/taproot-ref/9447c6b9ffec17e55cc04961dec9cc9affec21dc @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cde010000000845aabfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9300000000e34899db029dd8b10000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87a5030000", "prevouts": ["4f865d000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "302c5600000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c34c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667037ae3d106809ce95ad6513527bfd5a0b48627df6eb2b59a2167c6498316646ad1aa2e9998afd312977ef35369de24510af161418b16660639891f4f8529ff8cfae4f24e00136258a4229df9ce1533cc743f70cc4e5c0214ad74c09f63cc0b9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365dd02223ca4597acd8de63d12e0412289521ae63f6f7ad5a46a5d7d4a8953badd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51073db8fdd32dfd70cc3c0b801d057b12e5f9f3471dc2e8803f572b477b94c5e2cd8777bf679e716871b092f46e3a69645e6fd098b2f58cf3078cdf1926d6f261"]}}, diff --git a/txscript/data/taproot-ref/94862fb03e48c18301c8d883c0b89da06351e369 b/txscript/data/taproot-ref/94862fb03e48c18301c8d883c0b89da06351e369 new file mode 100644 index 0000000000..212062a9a4 --- /dev/null +++ b/txscript/data/taproot-ref/94862fb03e48c18301c8d883c0b89da06351e369 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfac010000005fbc51e78bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ff01000000a025c78004003eb7000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acfa151a24", "prevouts": ["c84d7d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e9ba3b0000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_4d", "final": true, "success": {"scriptSig": "", "witness": ["eea2c9edfa24f76bf4760d2a53bd5b8ade8432fb437d2ea08ea102ddf0a886847a9109e356829c1e5ec30eb7f17bb5b039959fbb21922fb2bace86851ca3037f01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["73706fe5284f98b0c6a4177669acbc4dc59fa654f9e1420e0a99696196bd82863daf911dab8343e09409419414b646f94616d36728dcc15f2b90c8b1c5cd8dbd4d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/948c81d5b83d1cdb3423d9e81a61becd8bf2a7bf b/txscript/data/taproot-ref/948c81d5b83d1cdb3423d9e81a61becd8bf2a7bf new file mode 100644 index 0000000000..31eb82d4be --- /dev/null +++ b/txscript/data/taproot-ref/948c81d5b83d1cdb3423d9e81a61becd8bf2a7bf @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f8000000006d3588dc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709300000000775f78d38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45c01000000bf2c651d0114714500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1f010000", "prevouts": ["14030f00000000002359212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "0f160f0000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "13d73e0000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["99", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364d586cb5de2dd3058dd7e227544d59b90431907c0aee9f3c45dbe5cd5ada47d3637edb6ad97271a1ba84afbf70caa284b53510d77fb53cff70120791d9457d51af95302e7a08635545e6c64d05a20a7ff60718981ac8a997d809f6391d7b2d9241e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4db2b7303d128165c3aee76333e625284db46e202d1b30be35d2598f7d6b886c0b317c85b837bc971133c463a5a02b3e438f62c623f33a660d87550a4209620af95302e7a08635545e6c64d05a20a7ff60718981ac8a997d809f6391d7b2d9241e79d00d576d46a63d36f208105835dedf99b7ad1f6575dd8e28af32480c198"]}}, diff --git a/txscript/data/taproot-ref/9499a40681e896adc4c45047502a358ed7cf1237 b/txscript/data/taproot-ref/9499a40681e896adc4c45047502a358ed7cf1237 new file mode 100644 index 0000000000..1e18d1e7e9 --- /dev/null +++ b/txscript/data/taproot-ref/9499a40681e896adc4c45047502a358ed7cf1237 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0200000000cc03c0d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c680000000072bf48db039442c600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acc4ec2f20", "prevouts": ["e2656b00000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "65ce5c000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "", "witness": ["3044022049ee0c47c4f3a735b510cb6f85e3c6bcf9d275e29e5f7f2f3693e3ccd37efd7802203f2307995276e4ef52ae9b8526a9d4980553586de3f19a457e49e2cb25530eb483", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["3045022100e83255d06c540e8f2511e4bb337d3f43cbd43f57f38ecc1711fc24a9d900884b02200a06d832866bd94d4ce0ec6a694cb41907ea5dffd79f2d723a99711fc0014fa083", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/94a9f7a609640945c820b281c9b05d992b0ac4c2 b/txscript/data/taproot-ref/94a9f7a609640945c820b281c9b05d992b0ac4c2 new file mode 100644 index 0000000000..6a9540276c --- /dev/null +++ b/txscript/data/taproot-ref/94a9f7a609640945c820b281c9b05d992b0ac4c2 @@ -0,0 +1 @@ +{"tx": "c7be2d510260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f2000000007a27fcd68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d300000000f23e2aa40213964400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898778fe3e3b", "prevouts": ["d736110000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5", "8239350000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a144e2b32fb029cde325456c88021dd04a80b93e0665f7e39c1e8a56bfdcaf4a64b5cd80fb8cd7c947a98554a389db356265b198fc72df311d010d98c3d6e3928"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369849f93802d015225ce464a5059afd3869fe1ff89f107510c0c7d17e487c82c619ca94dd80cd6ec848cff445ef1653ae8d91bf4217e3b4bb0faac1831ae9489bd0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}}, diff --git a/txscript/data/taproot-ref/94f8b89ee92aa4c7d64eb59fa7c8811ee71c5de1 b/txscript/data/taproot-ref/94f8b89ee92aa4c7d64eb59fa7c8811ee71c5de1 new file mode 100644 index 0000000000..487cb3b8ab --- /dev/null +++ b/txscript/data/taproot-ref/94f8b89ee92aa4c7d64eb59fa7c8811ee71c5de1 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bea00000000ee0a502560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fd00000000d7a42f82dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b80010000009c57242704fe4b5500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48746e08936", "prevouts": ["2584250000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "ec9f120000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "64811f00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902680cc4d69146017a87b95bc547afdc8c45fd5312dfb8ed85131cd90383e2229ac196cc1b7148264c63efde8ea5c704d3b11238759cde1ce9235761ba139ed649fa688962dd8029b5dee8bc6fb982c30e5b06d9767cc362c4b9390a68c43e16bc1c1881ef11d328480e30df61013ce5a8af6ccc1d5f007ad18deac8d334d8fad10a0f7c3a47fe4f4113b295d35c14b92870e07e8dd29a8b17beeaa043d0913dca2a424c8d5d9d41ba2caba3b8adc2b0701a1d51be9cb8c2355d8ed6c30d02cbe514e9ba86e9d6146e590e8fc5ee991ab01be077ed9e50ee4b79d9dc7c1b4fb696fec7f50f9d12dc5c52138c30d07405a8074aa265239c4a11127d697b0d28a005ea83087d7a292e13f36f12fa02f3cc254c18fda00694af2a203ce13a3c056c9dd7b463bcb560d567551ab8196949f358a1fb04b557534191ecdcc62a0168d46b57e8a79fa88a3f4c899774ea337268b029300257e83616ca739b013820230ca81fde2507f404a41f127600082432bf097b260ac0fad2113dbf5fc83e0b043d19a51b792e819d76ae730df85361497cd1a6b1e74a57c03373b6b92190784dffdf55eab1a901eaa1e1f7d99b5c1aff1c83c2ce0e63e8d757d8ac0a1ebe38cedf8d7f4edcf6f8f94b88f70cf7967bfc8f26b0fe0533a8678f053e8c12776e6a230c0566250e4ec4d28409584d8f5625cfce5cb6e6b019fc0fcf554760cea342cfbf2a0765165ca163aeb075", "8b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d8095c4fc48dd4a937a2ab720b4c7b803df056a6d61c0b781e24263fdb2663252a50ac17afa49989b8cd5fe09550e31f987b9afab4d6ff7fb0ac42074cc4b38f"]}, "failure": {"scriptSig": "", "witness": ["4d0902a1e8be2efadc6e1b0482eeefecf4e0a64bfef0392b24f5f1c3f62ef22ff58a1338b60654178185c84b277d68f45b68af128503a812dca3290351a5adfb9df0e90cd2624337b3135d7b435fbce48abb693252ff88972819c5a11d19ed2a6c8abb6cb3516175c7b22545b775c2fe6dc390c8b8a873002b0253055d69d2f650c7d8861bf0913a4f3d6de1ae14ea0d8420607391fef732362fa23e3441142d31f166a095c3dc8c2455923625acc971f12be1b3941ebf25b414fbc6a503f62b8be062c3bd6ad3875438b45136355e1c8a4208a077492961c2dd91f4437ac9fc785c423b4d223fc8f11ce7aaae64a7651cde0f8a8b341bd419c60e9347bc1d2af15ab87b484d561051118c34dc18c648ea49ffa0352e61c3a51f0e286325e5a1de2cb842bdbdec170e69ca04d2fbfeca4971376d67fb7223bca0b899ff426f872d28bba90bb2fe075ff5454a8cee45bde09db8c05634ad3f2d74f96701997c4a2e4a513c0c9b281a5328959d6154c48e18c8aeb46fc289d106379c480836ddb931d85fe4b17f7d1b3c2bc34fb101fb86cd16474dfeab80818020e76fdaabdf54ebb12214d39331489476f40e839735f9ddf5751d1fc9d4b6f6c298919abd91709350c0d9f30b0baf5187a823b78ecd1331ee94fa6b2eff010fcf9f491c8f09914f34bdc7c935eda6f7b8f893fdf2237544e2e5981ddc0c6d5a5847e2e5d2f0d382affdd29d08cbf8552eac8a75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367791b2bfed2b76187482b9df9c71e44fe3c2ba7cf851c9a73d39e20991cc5821da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e86a27b1635c4d20405f5eb1d8e1a675f8ac3bff005ffde1fde7fd53008c3096ff2e441b555c43a724b579c479d380c278f8ccac4217fbfdcb96526a1dcd96287"]}}, diff --git a/txscript/data/taproot-ref/9506e2eb82ae6c5a245403a82c8c36c49e7dd19a b/txscript/data/taproot-ref/9506e2eb82ae6c5a245403a82c8c36c49e7dd19a new file mode 100644 index 0000000000..3ebd980ac5 --- /dev/null +++ b/txscript/data/taproot-ref/9506e2eb82ae6c5a245403a82c8c36c49e7dd19a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b650000000040181b27bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfed010000000fb6f19301b3c016000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487fc000000", "prevouts": ["9d322100000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "cfc2690000000000225120a276d97cc1349e693e88dad472b695a8145cd2b116efbe16166838c11f43c819"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a90b348cb78586aea9abc13e0f8e119b3cb755ae0df5cadce93cb6748afec68f"]}, "failure": {"scriptSig": "", "witness": ["6a07616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/9512c13d6e0d292adb68e6b0ed8f466ba396e30a b/txscript/data/taproot-ref/9512c13d6e0d292adb68e6b0ed8f466ba396e30a new file mode 100644 index 0000000000..e3c5d98c41 --- /dev/null +++ b/txscript/data/taproot-ref/9512c13d6e0d292adb68e6b0ed8f466ba396e30a @@ -0,0 +1 @@ +{"tx": "0b70bbbf028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43d00000000a3e895eadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc2000000003880c1b703b6b6550000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72396585c", "prevouts": ["eb37320000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "98662500000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ec", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828ed780475d4e357c95738577784a2a9ab12c45b3a32d4ee82ce9965ecaf5f6bbb17c496824b626c02ab547b0eab6d99cf720fc5f5950d9f56a4e0f1a7586e075a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368fc8101a1f14b662558c0e8593c88d9d486003e9c8266cbc14341013234749228ed780475d4e357c95738577784a2a9ab12c45b3a32d4ee82ce9965ecaf5f6bbb17c496824b626c02ab547b0eab6d99cf720fc5f5950d9f56a4e0f1a7586e075a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}}, diff --git a/txscript/data/taproot-ref/95285e78757c883cf8644bfcd7749e4b08cb59c4 b/txscript/data/taproot-ref/95285e78757c883cf8644bfcd7749e4b08cb59c4 new file mode 100644 index 0000000000..f2a6cbf486 --- /dev/null +++ b/txscript/data/taproot-ref/95285e78757c883cf8644bfcd7749e4b08cb59c4 @@ -0,0 +1 @@ +{"tx": "a77294ea028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ae0000000081d69fbb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a501000000e28dd3c903cee874000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961f030000", "prevouts": ["b5783700000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "506d3f0000000000225120fd767bc2bb07e4ca9357cd933b3dc41f590c00db442e0ea12a871bb96cd7e63e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f0eeba7c0eacb784f7272b1ab2a5d964d7d07dcaa25aa39271492b80a379da12aad829192d8416594973be53751c2dc095bf33e54427303a5b8b45ebdea5dafd99ead232f95c20736c4ca28d40406922684ff7a84c70e432a4f6a4d4d1893c4694e361b142bccbbefeea6ac26126d4f4fbb610699e3a27d96f99d1b67de22f2f"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a92a11deea73e637f6f589c2d30a1664a56b9683feb403a53636f2947938dad3fb7770917eb0311339f7797b42ae31badf39be5fac652227efb4e28a80f4e35f46b3ac3e0eb552c07a1c6336d6a3e2704f93e82a6d5b4a7907113e7cf17bb16c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}}, diff --git a/txscript/data/taproot-ref/9528c094e6823258fc43686ee4fdc5d619021a94 b/txscript/data/taproot-ref/9528c094e6823258fc43686ee4fdc5d619021a94 new file mode 100644 index 0000000000..d315a1eb7d --- /dev/null +++ b/txscript/data/taproot-ref/9528c094e6823258fc43686ee4fdc5d619021a94 @@ -0,0 +1 @@ +{"tx": "aceead2a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b940100000081d662d860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270db0000000091e8ebe1033d623500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acb2000000", "prevouts": ["f89c280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "688a0e00000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "b37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670eb4afebc61f249a9d49057fe9b24516a5ecc1080546262d6e5ff85cfdb211b95b7d6bda25431cc8e02e54f2e1c95b50d23fb11d52c977ad7d2dfd588f90c1962055c347ba5402321504576f6c37d0c6cb1d044ee75df535bc9eec0560634a7"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e846f47172cc098fd97d2a24de1b24a28ec1a07dba8121311e99b8793de3d58a2c368ced990ebadb111ebc3982eac7e308f07f99a9264ca6c949f56162916d7884"]}}, diff --git a/txscript/data/taproot-ref/95418ddbd4a17ea011fd39c57c1e4389b711dd7e b/txscript/data/taproot-ref/95418ddbd4a17ea011fd39c57c1e4389b711dd7e new file mode 100644 index 0000000000..7b41eb29c3 --- /dev/null +++ b/txscript/data/taproot-ref/95418ddbd4a17ea011fd39c57c1e4389b711dd7e @@ -0,0 +1 @@ +{"tx": "bc407aaf03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6600000000004780dadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9500000000b762a584bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfec00000000c46558bd01b5e525000000000017a914719f78084af863e000acd618ba76df97972236898718b7f726", "prevouts": ["d3706e00000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "a20f210000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "60e3700000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ebe99bd20db478a4ea38512f1221f176d7e5053d85ce724541b970d7e312b589d332399bdd0fdb741da8d579adddb10dac50c4b595c0031ea1e156729d78e3487d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51a022e8e4f1240b3c3d4bb5c70f2b4ea702b5d8a670f036755e200b5950ffec075bb8659128f7d307893f477315172a6feef29cf3fc1fd27176c3d23e09b029752367bb7d11bbe7d9666c447942212a409021a53e3151df7f84d090727acdc4c9"]}}, diff --git a/txscript/data/taproot-ref/954e0aead2f1448d168416547f795dc8baa7eb10 b/txscript/data/taproot-ref/954e0aead2f1448d168416547f795dc8baa7eb10 new file mode 100644 index 0000000000..af9b0facbb --- /dev/null +++ b/txscript/data/taproot-ref/954e0aead2f1448d168416547f795dc8baa7eb10 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4b0000000063774ab860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d500000000cc67262401117116000000000017a914719f78084af863e000acd618ba76df97972236898756010000", "prevouts": ["628d500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2452120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a0", "final": true, "success": {"scriptSig": "", "witness": ["e1a9667d17a1e75a6cc9b884de02170067a2cb8a87597ae011abcb81b842566b811bb42d1fbca1b65f2f533d0c90ecbdda5fde3c77f5f764a9bc4e4d90e39b1a01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f345510d74b43d1b7e579d4942af46b8fb961ac81025798e2b95973a88e8427415a940f02fcf29c821a73d5cda19b090f1112a8c0ea74e04dca5d390688fa817a0", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/958966b97201943c2831502b3f5bbcccc2d1b2f3 b/txscript/data/taproot-ref/958966b97201943c2831502b3f5bbcccc2d1b2f3 new file mode 100644 index 0000000000..11074d9b7c --- /dev/null +++ b/txscript/data/taproot-ref/958966b97201943c2831502b3f5bbcccc2d1b2f3 @@ -0,0 +1 @@ +{"tx": "b063326b03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfd00000000d54304dcbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe900000000f78d71fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707000000000eeb7db83038ea0cc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689870b010000", "prevouts": ["daa652000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "f0016e0000000000225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "33870e000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["e68b325ef03fa84280a54b34dbf53a9277b395ea2fd16e226cca8ec132028a05ed3734d002e1b197dc424e81a0707786eadf555401954d3232adbab2301adeb7"]}}, diff --git a/txscript/data/taproot-ref/95957430f0fd0b98963bf7080efffaa2efc45563 b/txscript/data/taproot-ref/95957430f0fd0b98963bf7080efffaa2efc45563 new file mode 100644 index 0000000000..4a2dbbc855 --- /dev/null +++ b/txscript/data/taproot-ref/95957430f0fd0b98963bf7080efffaa2efc45563 @@ -0,0 +1 @@ +{"tx": "760cfce6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41e020000008082e1c6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1a010000009b10e7d2012db07a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478726010000", "prevouts": ["2967330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5d51770000000000225120bd5bbc5b1bf3fe4b708ed63f9408b7b63aebc344d9604176f38c41259c503453"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bf", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936848548a800d3e3b730b60aa08b661ee08371fada4c88e7cee944eccb1db67c8820e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e10ad4e0ac96c164f1885f81b1e139f05879070681278f68106e4fa54c23a8038d82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93654ba7869cf3ca4b2b50b47f0812896a39a8cfc31061938cd1631f43d1a68bccf0ad4e0ac96c164f1885f81b1e139f05879070681278f68106e4fa54c23a8038d82745fb8509382ce1e64511ce3c1d55be477e9687cea49eaad32aa52098dfc07"]}}, diff --git a/txscript/data/taproot-ref/959b1c7bccd9efde5105f9deaa24262e6171f127 b/txscript/data/taproot-ref/959b1c7bccd9efde5105f9deaa24262e6171f127 new file mode 100644 index 0000000000..be3cac94ba --- /dev/null +++ b/txscript/data/taproot-ref/959b1c7bccd9efde5105f9deaa24262e6171f127 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6b000000005c19b047dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4300000000fa054f9360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127072010000002e2b715c0281e4d10000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6940e7f4d", "prevouts": ["ab4c790000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "48984900000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "4c73110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a7e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb482f3f1132320d0959751765567119a0f105dea34ff98e3a4034ab732ff09dfdbb3b80bda1b133ebf5523b41a15c88aa3d5202619e06dcb6a8f4a5442678614e2fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d615c4047bfcad7b0449dd11a2b25a6fa73c03f83d31e78968dc9546bdf436c01f4adb00685858cbe7bcb6f491f781bc30000d79c976ba3736fd7b7a39329ee30cbb6a1bc9c683a9249ad6bea98cd3b225511a23bd3763b6594afd12d3e036b5faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}}, diff --git a/txscript/data/taproot-ref/959ef5c1dfba6621fcd8365261b27885ba0eedfb b/txscript/data/taproot-ref/959ef5c1dfba6621fcd8365261b27885ba0eedfb new file mode 100644 index 0000000000..1de88c4dc8 --- /dev/null +++ b/txscript/data/taproot-ref/959ef5c1dfba6621fcd8365261b27885ba0eedfb @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d70000000095241478dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7c0000000022e144c003cb9d2d0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7c0000000", "prevouts": ["839b0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b091210000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_df", "final": true, "success": {"scriptSig": "", "witness": ["af0635ab83a466aee85370db6138ba6f81a6ba673b5166ab7d2d00abc52b902073c09e41df60a83ed9e62c1641786b24221dc6f31dfc18d50d14d34e2081568b82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["4349984b549f290e220e0f2c73fbee085e81fdab3eca4143e77ef7df71aabcaeb3d61669d45a10fcd71f2f4163d6a3f8e598bf41824b9bc5e6e18927c020a291df", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/95a04b0c50967b773d91751126d1ffe273287347 b/txscript/data/taproot-ref/95a04b0c50967b773d91751126d1ffe273287347 new file mode 100644 index 0000000000..7e4f189e22 --- /dev/null +++ b/txscript/data/taproot-ref/95a04b0c50967b773d91751126d1ffe273287347 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2800000000247f1be9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b470100000047d17b1904693c7500000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a62ec0844f", "prevouts": ["06e6540000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c65b2300000000001654142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["7f4e68e27590d41fc1d96b76995c0151017c929b2188301d6e02341a4932e699b7d144d2e1920d69af10294c7f52fc08ec27b4dd1d77a6e98601371e91cac3e5", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/95afe9b1e8db35a5924aabbffc0a617e6862a1d3 b/txscript/data/taproot-ref/95afe9b1e8db35a5924aabbffc0a617e6862a1d3 new file mode 100644 index 0000000000..85ab7be4cf --- /dev/null +++ b/txscript/data/taproot-ref/95afe9b1e8db35a5924aabbffc0a617e6862a1d3 @@ -0,0 +1 @@ +{"tx": "01000000011221809fa938f2ef41f6621f6e6a0e75e05349f5a7d7094926420abdf536093c0000000000229bfbc70260ef6a521200000017a914ca5375a68588393c82c00f5d2ab21f91e99aa5ce875802000000000000160014ca9858c362545bc83a3b93e73b12b27a9b3ca00336010000", "prevouts": ["1ff76d521200000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_invalid_unkleaf", "success": {"scriptSig": "", "witness": ["8ce42f81440679dce044d02079a20729983aecfbca152c25d3e936f88c156f8f864364944d6f770c25d7d919ef277045ed1a2464dbb3348ff6203227b2ceb794", "20cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3ac", "c2cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3cbfc5d7464d6f9932fdfbdb59ed04135d3da1fd24a1d97149f3f9fe8acd746e901c94ae67cd857f8f23543b618b38154b6c0432568bb8cf7638fb55d4cc0a24e"]}}, diff --git a/txscript/data/taproot-ref/95b65f78191ad63ba2149f216ad4b1f3a404ee82 b/txscript/data/taproot-ref/95b65f78191ad63ba2149f216ad4b1f3a404ee82 new file mode 100644 index 0000000000..66d91c76fa --- /dev/null +++ b/txscript/data/taproot-ref/95b65f78191ad63ba2149f216ad4b1f3a404ee82 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270980100000024408861bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc0010000009526508501d78f510000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7b999eb5b", "prevouts": ["1e9e100000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "7d097d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f04c65b7c7fd446794a0bdc7f03ec8afe87e7a8979190b8a8d9a7dedf756203a11731258bb3fdfadddb7ae68c53504a25c25356d55367047ba7d256d75a6bb7241a69b934cd2855d9902b26cd23bdcccf828bccd6e43a3687ae54088365633ea5dc2f0a95b502e4151e8232c2eec29d5b91164a6c3efda9c7376ae9fed31d914cf212ab5ab74f971205a7753b54b656f917a7b294d9b6a817dd76a3e453c6f840db86805c7cb385de8fc3d1ac66fdeaedcaabc386c1916cac954990c516fc95baff6181bc66beaaac59a0100489e4596eb40d5697bcf8697c592b5eaffed24eec828c05d4879bdf28244a14189170e9f70cd4a3afee97d564176cc829168fb5a98e4a63785b4466fba8e7b565aa871ce26f989b0536a7646a0bc580713a3a615f832d438f6425370f7a3f8670f1ce6cdc8355b220ca4dc90117aa12d1555fb93ec247e0cbaed1c2286ee1e34f4268a0351fa5997e6e98a181d16b689af29a10addec4a16d9117df49bd167838028309e06e4810cf5bdb46d8d180727e1d838996b93db41eb8cde82043d3a861045a0c204d1ac0befcb1503c642df5c5b7af6574da030ad3d0e211d39e9811102b4b2c4ac09a0f318395a8ccc186afb21733f9f6de47ef03f047c5d04a73fe1a3136ea8cfcbea5b652129a1849148d63cdfbd624a1a4a5c9a31415a2020bdbc5c3d15d0431329283b110f52abf1b86971f7f2dfa80e4ad36734afa46575c9", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0d74e6cd8e612cb42cda5f7f42dc10fbfe42e4e0a9faed92158fa7e41e5f92051e17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}, "failure": {"scriptSig": "", "witness": ["4d0902f90151c0d9003beaf4adabb925bb8a538073d1fe2883d65c3b6bfc063e3dadc71bc19f7148581d56637e697264c849c2bee9c3cbecc48b284f09f334d95b6f6e4cdb3c7b5ad0393eba0cece63b5866876813b79548ce0fccb39a847f41ecd1d5947c3af0dee314c4e7fd3b87300a529bee34c7387ba18cce0553fbb0e4fc65270818e3e5cef061cabae8304ebc8a3b4d77b3b167dc13a6027ac9ee5a2b5a8f41ad352d20fe1978e5338eafdb24f5c9c593f3894aaae2ee735a316d269ea9a777aa13ba0e4530c3c3945ada7ffb046cb6b95cadc322964492fc86af3eb6db122791637d739ffe83e25b1ead3c86e6e5ed044d814cf8ef50d2dbd148f359f07ad8cd87d19a9f83c4be854c5b32f528265adc3edb6df5022c169ac58c05edddffeecafc7ad25ee315d3147947df3f93909d565d2a8a460c7423149b7212ddb6d268f0cc480865353dfc0fedc82c5d480545f56e3d29d6b374d1038b85db7dc2dbd2250a3e941608a6a6f4d43173f1c628f32fda8490cb0e070c91c6f740a6c0248051ca7c7f9c237666e45de1d322044f7c781bf969eae945f53d1e4f2d0b80173dbee3aecb101c4609bcd398ad93abbea7bc8132bc6de6aea2af19d955edd29f077c421875353c80bcbf0801960a00253c8d6d549f3bd4119ae0ee22cfcfbe0ad868859abb18fd3ea1e7996ce5b71e8979bebb38eb17a029d4a0876ef8b834f2dc71e445e546abc3a83a7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936615498dc0588a9270f8c0d1f3dae5ae97705b42ac78067124fb5b8bbe1895d4977878475803065420b5149b394b9f2a263406aa3a3cf62bdb9b13e67809a83ebcc9238bf2d7dc0bcf11838c34785251ea2fa5f3bb034bc98e2e8efb0909b7dbc17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}}, diff --git a/txscript/data/taproot-ref/95bc7b2db1ac665317576e24031e551189f4efe7 b/txscript/data/taproot-ref/95bc7b2db1ac665317576e24031e551189f4efe7 new file mode 100644 index 0000000000..95acaacb94 --- /dev/null +++ b/txscript/data/taproot-ref/95bc7b2db1ac665317576e24031e551189f4efe7 @@ -0,0 +1 @@ +{"tx": "7f02f66c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701001000000807656f68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43a000000004a3e6fa701c6143f00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd3010000", "prevouts": ["bc16110000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "a79a400000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "1d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea5e09f506d3786832e30b2bdef7e552adbbac598072ee50ea4bccda1394a3023f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08233479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a4bb2c7d85af23cd06361a8d9967d47c0827d7b479cd52e2216fb2d12a2ff38bc"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fc4cca0131d18d8150e9d666d72698d77b9db3880415ba5ae0e811c11ff8a05c33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a4bb2c7d85af23cd06361a8d9967d47c0827d7b479cd52e2216fb2d12a2ff38bc"]}}, diff --git a/txscript/data/taproot-ref/95da825d4132e9de80a280c89ba82724643b74f2 b/txscript/data/taproot-ref/95da825d4132e9de80a280c89ba82724643b74f2 new file mode 100644 index 0000000000..0bc239cf92 --- /dev/null +++ b/txscript/data/taproot-ref/95da825d4132e9de80a280c89ba82724643b74f2 @@ -0,0 +1 @@ +{"tx": "b5d5ba7e02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be900000000704da091dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b970100000044b31bb50347704b0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796a3010000", "prevouts": ["2c7d240000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "12a5280000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "f07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363b039c0e9d8bf6e88a427a2ddf5980e431ac842cc97f6c7b94ab341d52b6d0fdbec2e27f579b173781717090b44a070e7a8880532a05b17dc998986213b0a92d21741bf2762a3041d275698fd56a81520b6404e88c31ed080bdecc36c09cb10e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652dd3253268b521b8234f9a6c7de3fba7d5f203b8100eaddd2fc9e08d24fa7c435987c1d75c441670cebdf615816c6f42e3d99515a7a7b9841c20e75c916465ebec2e27f579b173781717090b44a070e7a8880532a05b17dc998986213b0a92d21741bf2762a3041d275698fd56a81520b6404e88c31ed080bdecc36c09cb10e"]}}, diff --git a/txscript/data/taproot-ref/95e7d15b24fad0c2e4780004a45b735813a6d457 b/txscript/data/taproot-ref/95e7d15b24fad0c2e4780004a45b735813a6d457 new file mode 100644 index 0000000000..0aa37be26a --- /dev/null +++ b/txscript/data/taproot-ref/95e7d15b24fad0c2e4780004a45b735813a6d457 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9b000000002f21cb13dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9000000000819e17eb04c2af770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e707f3412a", "prevouts": ["4faa590000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "4d91200000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "47304402203b3b1b67ef1f56303fe41dd67bed9260158e77033ba8fa721dca9e2d2697a8eb02203e1ffc8f83c9481ae0dacdc38dd1ceafa8b085447dcb3d956041fd010a9b6de683", "witness": []}, "failure": {"scriptSig": "47304402205d90f4735ea2ed121c9fb17b44121becc089a101496976b6cc676c40e7c67d1702201b7d122e86ec7260af8111647d8b9191264c697bdf4c3dab15977b35ed8a168183", "witness": []}}, diff --git a/txscript/data/taproot-ref/96089d3e37c85cc3e1727b58cbcd209157529a71 b/txscript/data/taproot-ref/96089d3e37c85cc3e1727b58cbcd209157529a71 new file mode 100644 index 0000000000..2a7200610d --- /dev/null +++ b/txscript/data/taproot-ref/96089d3e37c85cc3e1727b58cbcd209157529a71 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270de000000007f4af652dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca600000000e56eff118bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48000000000454a026504e231a400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e79f410645", "prevouts": ["a4bd1100000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "f33b5400000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "67d540000000000021531f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["81874ea55bb484ce75fe27abc22c65268eccb0819379e66ab9445a41764683988d2bb4ba25bd6eea6753501005e4b83c29e3040cd120cf530ca321279e53f5ca"]}}, diff --git a/txscript/data/taproot-ref/96197c6b417cdc946b9a34b57ac7c50feea0ada4 b/txscript/data/taproot-ref/96197c6b417cdc946b9a34b57ac7c50feea0ada4 new file mode 100644 index 0000000000..707b82f1da --- /dev/null +++ b/txscript/data/taproot-ref/96197c6b417cdc946b9a34b57ac7c50feea0ada4 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9501000000a8b3eea4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6601000000cc72cc87043cc19900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71b040000", "prevouts": ["60ae7b0000000000225120ab4625f49c703a23e189ede82045800566d41c1fd8d57f05292e3c6cc685d2ae", "2cba2000000000002251205ab8b22cfa491307edea11ffaf6a065b7e494e63cc66e0c2b2743a26e3a8b68a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["6b12de5f3b333ec91a047d2b43355f415e4ded9a048bc4f4c16cd75bc930219eb3cb6b26366d4bad0a4fd214d65a8c781f3bb167d706c82a2b6a51162381b92e01", "352284dad82b036af43c24e5be3d4994b4373bf4aeae6a240f2a9ae6cc6d3c06e2e19a3ce2c8a072121a67a8a07c2cf1b93bd083ef6ab9aa680b27cdc2329f626b8cce5da597a591e75d2a8ed1e812c6e7551f15068bb6831c3225785bc5c6c2703d7bcf080f9f14bcabbb776658eeb4f677e1c5c957353ec1a30627379db5a0d305b7dd5a8a0b212ecc9ba14cc6f9b4a05c880aec358cd18f7542e54c4f18ce27b5a7232f1648ba1efa39ce36051325acc3d969879eba227154a8c715f3cb1eae8db4150435d3e259cb017d7141ab16f799f11dc5d3e4acfc5d920b33820fd6f8ffc51133edf6f5a5be8d98", "7523fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da00636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366a4132c35eb83b939fc40cc5ccf1cca5af9baff7a5985ad17bef59ab852777703b9a5bcde44843206d9ea957ca2ea9b9d7d55c77ae8c0385d069207fc690dbb30000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0279d32bd902e9dc737021a8d5c1ddeca94898b34864580aae6c64e56b91b81d4dd5ed814737efbcd07c3935f1b55530aa0394366918bc0dfea70abb7a1c69697e8025fe74d0081f7f9a15f533dd681c110855a593b2093844df61448887940809482d422e99a138b392f7354f51e541f10e9b811a38838d323cb0ff3b540f600000000000000000000000000000000000000000000000000000000000000003357ce03edaa37ffb79837839ba74a5028457f4db579843aa562808bb81c250fbc0c6c92c04daf27c17f22ca50729b712619fbbc6793628ec6c6f909f39ffefd800d29ad6642d761bb7794bfbb470a4a8f0d43aebb8e69f7b18a8cbdeec7db6375ecd39d4f765446c5c810baed0c32c1b405039ad2245d6ae04f3beb2032eaa5000000000000000000000000000000000000000000000000000000000000000050ad678e9755084e5b456fb01e726fa2728836ed92539436a7ad264ccdbeb1a000000000000000000000000000000000000000000000000000000000000000004a11e7a9becbeb391512b13f8cb073d0841508fb6e490b3b828c8d1aa087440479e6a0b23eda5a42214f52fb49d6caad0f86da22499a5aa2ee74e67078183072a256bf045c41e66bfec21cb8c884b31edef389b9768f333f414fb77f74129cd6", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["6b12de5f3b333ec91a047d2b43355f415e4ded9a048bc4f4c16cd75bc930219eb3cb6b26366d4bad0a4fd214d65a8c781f3bb167d706c82a2b6a51162381b92e01", "11fa8d4eaa1bffff91f036208ca07e441fdce1f75d66275c7e79fc0b518b1a97104f105fb558a3f7e62583b80e54fcf0605e9e623ed6bc4940d9f6e44f2b87d5bbab05f8904b5224237e72419f6da552d315e600dda0a9e87f548149b016fe552107dea4fa25220681fb39daaa14d7afe75be22885afd26487e89cd7c96c244fea56feb1ebf6b8a854d51ccb004e777419ff52efd4ad3612c7b97990f1ae504d812bbacee33fed8f73f773c79af7d993663f7485d563f2cc33ddf28ea6eb2abefe9797e06a3195464d566ac734de140fc79294b75d07e698aaced5e4cc826df8f452c35940010ee6930161", "7523fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da00636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366a4132c35eb83b939fc40cc5ccf1cca5af9baff7a5985ad17bef59ab852777703b9a5bcde44843206d9ea957ca2ea9b9d7d55c77ae8c0385d069207fc690dbb30000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c0279d32bd902e9dc737021a8d5c1ddeca94898b34864580aae6c64e56b91b81d4dd5ed814737efbcd07c3935f1b55530aa0394366918bc0dfea70abb7a1c69697e8025fe74d0081f7f9a15f533dd681c110855a593b2093844df61448887940809482d422e99a138b392f7354f51e541f10e9b811a38838d323cb0ff3b540f600000000000000000000000000000000000000000000000000000000000000003357ce03edaa37ffb79837839ba74a5028457f4db579843aa562808bb81c250fbc0c6c92c04daf27c17f22ca50729b712619fbbc6793628ec6c6f909f39ffefd800d29ad6642d761bb7794bfbb470a4a8f0d43aebb8e69f7b18a8cbdeec7db6375ecd39d4f765446c5c810baed0c32c1b405039ad2245d6ae04f3beb2032eaa5000000000000000000000000000000000000000000000000000000000000000050ad678e9755084e5b456fb01e726fa2728836ed92539436a7ad264ccdbeb1a000000000000000000000000000000000000000000000000000000000000000004a11e7a9becbeb391512b13f8cb073d0841508fb6e490b3b828c8d1aa087440479e6a0b23eda5a42214f52fb49d6caad0f86da22499a5aa2ee74e67078183072a256bf045c41e66bfec21cb8c884b31edef389b9768f333f414fb77f74129cd6", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/962bb09ab095bcd35f7f34055ed0fa8ae434af02 b/txscript/data/taproot-ref/962bb09ab095bcd35f7f34055ed0fa8ae434af02 new file mode 100644 index 0000000000..4616f5f918 --- /dev/null +++ b/txscript/data/taproot-ref/962bb09ab095bcd35f7f34055ed0fa8ae434af02 @@ -0,0 +1 @@ +{"tx": "7c5fc7c8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cd0100000043a3c7eedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0f00000000209d439903a82a8c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e763020000", "prevouts": ["4cba380000000000165c142540f27e90740933c99d4f17ab2dfc6c82951cfb", "d2fc540000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["cdcd03b7982f23ad354233e9488a289dda72216c8b27a5e543001742fbf05d9388147474fc08919f4af4f6550f081c79cb058547d8047ec5e1876def72c265d4"]}}, diff --git a/txscript/data/taproot-ref/962d79802cab79d4bd0c5d840a5f94281465c290 b/txscript/data/taproot-ref/962d79802cab79d4bd0c5d840a5f94281465c290 new file mode 100644 index 0000000000..b19a042a97 --- /dev/null +++ b/txscript/data/taproot-ref/962d79802cab79d4bd0c5d840a5f94281465c290 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6900000000d4abccebbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb700000000bd7983dd023b8a89000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47874aafe95d", "prevouts": ["0bac2800000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428", "09de63000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "577d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa1c685f9e7861cf217f0c3f090528b45399014026e5720182b0faf436212c9d85a66706abdbe591f97764059d8785051c12d40b9c9543fb83334d204ae23d8b59"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363dccf744be476308f3ad44f6863ff9a5448f7fadb85d23dafd7b2172bbeece448cd69c149de1c0fd775c23d200817106db3811e77c5a94d49bd03e58d7bcfa223a8385792857b3824bc259fd95f469eb32c57805e5f383de6590f06749d208e6"]}}, diff --git a/txscript/data/taproot-ref/966f41ea0609c64925ecaee5ba1af166ae43fdda b/txscript/data/taproot-ref/966f41ea0609c64925ecaee5ba1af166ae43fdda new file mode 100644 index 0000000000..d5fca4b3fe --- /dev/null +++ b/txscript/data/taproot-ref/966f41ea0609c64925ecaee5ba1af166ae43fdda @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d01000000a146999d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40b00000000f9d200c960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706c00000000e4a24ae5038de26200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79693145c58", "prevouts": ["a3d2230000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30", "ba3a3200000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "f60b0f00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368c95805bfbd60030f39f9e7ff54381e8f5f456ab69fdb578716fcf2f064cb19a3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08208660b63218e506e6f6271f897377780851eb071546e65f7287d9a4083d90048d0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c599d2b9d61b74acf4ac0275e657007f4671c4b15d8de5ed816ccf5810b1da1108660b63218e506e6f6271f897377780851eb071546e65f7287d9a4083d90048d0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}}, diff --git a/txscript/data/taproot-ref/96735cbde31cd1fbca452de029d3f77a7072dd87 b/txscript/data/taproot-ref/96735cbde31cd1fbca452de029d3f77a7072dd87 new file mode 100644 index 0000000000..5d7a646e80 --- /dev/null +++ b/txscript/data/taproot-ref/96735cbde31cd1fbca452de029d3f77a7072dd87 @@ -0,0 +1 @@ +{"tx": "caa0da5f02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa6010000007ac8318cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0f0200000026999d930300049100000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac207a7f41", "prevouts": ["a2016f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "fae5240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f4", "final": true, "success": {"scriptSig": "", "witness": ["54f0f7cf5f504be8abaf25e0b378e6ebfc11f5daf7f8dcb88dccf69023cd9a190480c402fa675a57ec9e3761dd0a4b8cfcd4083f3a5c08bfea856fad103d396603"]}, "failure": {"scriptSig": "", "witness": ["967748dda729efdfbd36cfc9b244c0f31dbbf5a106454f5839566692ec8ac6a074f2a17b1b83a7f21d122ff25a96f9219602c5de0d6779e0a40510e55b7c5bc8f4"]}}, diff --git a/txscript/data/taproot-ref/967784fbda80e2586d2566b1d20422c209de8e3a b/txscript/data/taproot-ref/967784fbda80e2586d2566b1d20422c209de8e3a new file mode 100644 index 0000000000..22221c3589 --- /dev/null +++ b/txscript/data/taproot-ref/967784fbda80e2586d2566b1d20422c209de8e3a @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47d01000000bf12ba80dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e020000007eaf3ef5041e8d5500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79693000000", "prevouts": ["fd043300000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "0f3225000000000017a914a5f28fe5532719f979169bfa3a31d5746f69452187"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00635068", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082464f19ce228e2f316c50129d6edd6267acdc0242055b306d7ddf31bf4be6326132cb43424d7ca27a7abc5fd0c2fa249f92b1e992144deb3864a86d466f79c2cceedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cb2894c14af897d5f38758afa36e148e02b3b317d7add528440e83327826095a4fe66249dd01ecee23c2f5e0ab3cfab587707d36ba83a587f4ef7ad777b411580826552c6add4a61cb16ac7f3706b11d0158c18b61683494ca90054287b9ac7bc2fd9879a2ee2ae7d76224c991edc718b1729f7f1922f570a67a21926d2cc48d"]}}, diff --git a/txscript/data/taproot-ref/968b512c074558ddde3b21c60e2886fd579c950b b/txscript/data/taproot-ref/968b512c074558ddde3b21c60e2886fd579c950b new file mode 100644 index 0000000000..b0914b6ab0 --- /dev/null +++ b/txscript/data/taproot-ref/968b512c074558ddde3b21c60e2886fd579c950b @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a901000000929372e9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c190100000046ba7ae502e2b28d00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748795000000", "prevouts": ["d018370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "22c3580000000000225120dd69e0acb4456a75559641628e54f237a5bfa27624d5103e01688d193a4ffbc6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d6f20f9c142c896504037837674b191b1b5298a1d8195d4919ee117d333470ee"]}, "failure": {"scriptSig": "", "witness": ["6a41616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/96a0422936b6ca5c4077e1e8fceea23c5dd146fe b/txscript/data/taproot-ref/96a0422936b6ca5c4077e1e8fceea23c5dd146fe new file mode 100644 index 0000000000..8ae01395c1 --- /dev/null +++ b/txscript/data/taproot-ref/96a0422936b6ca5c4077e1e8fceea23c5dd146fe @@ -0,0 +1 @@ +{"tx": "64f4e4390360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707701000000fb3218d8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ced0100000081e9f5b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcc010000006137ffcd047b7d89000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6034d4655", "prevouts": ["3d9412000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "be405700000000002251208ab07249a1fdfb04b130308cc651220c9430f0ee7d7b49fe0191e15183fe6b9a", "277321000000000021571f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "483045022100b435743e7d6a6a86d4bf4e05e5ba0631fc508b01f4ba4aba81ca3da895dfd63d022050621ea3bb4a49cc2fcd0fa340211e04bf8f261d8e5a343691cd4decec93930481004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "483045022100ea0fd795d63bf3ae74d7bccd20e922c4f25f18161bada16e83931d546594786a02207b106a137ceb2572fc756fe27f5161d9ce2d2b57b91c1c5df406fed4301e0f208101014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/96aac36c65d79125e3ee07ec601f71c0c09b0cb2 b/txscript/data/taproot-ref/96aac36c65d79125e3ee07ec601f71c0c09b0cb2 new file mode 100644 index 0000000000..b20df230e4 --- /dev/null +++ b/txscript/data/taproot-ref/96aac36c65d79125e3ee07ec601f71c0c09b0cb2 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270900000000030ccb953bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf360100000044aec6de01f70b180000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc12a84e37", "prevouts": ["90430e00000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327", "f73e8200000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "577d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa1c685f9e7861cf217f0c3f090528b45399014026e5720182b0faf436212c9d85a66706abdbe591f97764059d8785051c12d40b9c9543fb83334d204ae23d8b59"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363dccf744be476308f3ad44f6863ff9a5448f7fadb85d23dafd7b2172bbeece448cd69c149de1c0fd775c23d200817106db3811e77c5a94d49bd03e58d7bcfa223a8385792857b3824bc259fd95f469eb32c57805e5f383de6590f06749d208e6"]}}, diff --git a/txscript/data/taproot-ref/96c1bbeb23affbc8ce9c5703062a448e21a42eeb b/txscript/data/taproot-ref/96c1bbeb23affbc8ce9c5703062a448e21a42eeb new file mode 100644 index 0000000000..f01557776f --- /dev/null +++ b/txscript/data/taproot-ref/96c1bbeb23affbc8ce9c5703062a448e21a42eeb @@ -0,0 +1 @@ +{"tx": "fc52232702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff701000000ec1eb2dbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b00000000007f7b48d60234038c00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9d000000", "prevouts": ["15e1680000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "86ae2500000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902fd4beb2efab09f5c1dea67f0404d4beb74562d7f251bd1c8da47103abc0967a88e01a8a958f45477aba1d9a18fd19f77dc2b7c5ad8aa95a23afeefed2b22616ff8dda7edc1049de7ddc9946ee99db2507679ad0212f518f997c928f3d645921920259d311fb616f00108fdbc78cbc5b96068b92690f12aa2cab1817bd7ddfb46e4dedeb66000ddc0dec609904f8bc6d19c08d8ebb23cc2995580730e20da6acbb7c2951806e4fff1ed9c364d526160343bfe201473b3cae34feed3c78b67c7869f445e4c780ec64c41f9f65285c2799fb671a70ccf47d48b438f2dd6c56500dc3e4ba47ded0c92403113ee8d5627f823e3f93594ae547afeea3fa03ddb3f33565d51d5d1c854118e4d1866609ba643163698e5f996e5349302d4031e98e8309cbfbcdb34097c651c25184e3bf830a98225024886db9c56aa5c47b800d42e28dae3f154dcedd2c5e05f69d3337d11c6a92a8a5ec40368edeec57f1e25ca9900f1bb4f4777d4bcbe83a89a0bb0c4e89c0da2b90e2de467a0d87878f8798882a49bf7f7f0e98ad14db1bf37010ede85c0d4fee5d09f8ed7ff6dc16182feee67e8447a94f7a142a26df23ba20b0129f1dbe1f1702ac0bfaa8c58c3afd73c2a2abbd69edade9d4cf3c2d45ab7056859ec5536903107bcce243c8f2e875a30b4faa59180c6e3366116c6de1dbca753256a97e0c361403369617cbf369f2df58aa907dc0562989ef9d7a00c9475", "e47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ff14d7fc37de90fa932265d82b56b477544485d0b71458024cfdbae8fd1d2d30ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457ea7c8dd4a05a6083e4a7ce3fc20cde94d430ec03cbfbe8017e9dc8ef3bce99a9"]}, "failure": {"scriptSig": "", "witness": ["4d09029cc360e3bbc9da84d7fcdbe1e6033d03b0303967c79f31333f856d952481dd23db9d92b0a89deeefcd1725fa4b31bcb34fcdd2480a42414fbfc8f196965b3cbdd8c04837a752f43095b370791b59fae7b70c73f7710dbb7c78e86a695a5ae058f06ba041302e86514b1954ec35c8a46964a12fc9debc3e584c8d1170b199d4b9bdfe90aaa24bae6030148e7167859e141f8b05e251c6b65f76f5538e3e10dbc35617266ba02bab2f2a92bc1570bc20b53ab86c8a9e9bd8b9e52c88e838354c6cd22d249b5a30a1fb3bfe4d3895feb98982c311a5ae5b8bd5a3c2a6095367c99997dfe56ddc47e146b475e7ee570df3ef2c20eedca37aa6ee3a12ad1c3b1d32f36aa2a45071fbc007335a465b5392e40ca1e5907ac32b4403ddf11ee8df1c7c083e37a04230757b99523ac78965ea065999542817224a06cb51f9ce7e879e3307bfc22d7ac2863626a7aa2c69e6b2ebda8181461bdc2b8b95537b8f2a6462832cbf1edfaba7bd4d7ab02aa2cc8564e48418be6b3e87ef060a554c53cfce4393b5726c618173c99faacebcea5b78a156a57c81591a530207dc9875fdf49c554501d15783d15b7500d0f44b5bd753658170367f51b58f79bc8d23c2a6de7bb1367d5927d337a511d99d34f0676f0c18aea8236f101c2a33252deeb314379c4ed048da249b536b73f368a099a6f7a6013db8308c4bc4dc3763d5b66a8cd7b721ea8babb9e34268ce49095b75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9b4a3f63ebc452069e6f153a09db4040a1a2fd26aff12c704ff589f805461b9455476c3fa5bfea733d4af800001099064b64c061f8e2c0be311cfe06abfabc5158e114954b29a1fe443083941979d23a0210cc324956afb3dcce424fb4eceefbefe4cc2cebe7bba8b4a4f82666342333b91a450af49acc0f1954b5763bfc142"]}}, diff --git a/txscript/data/taproot-ref/96f5f4a5b64b8e8462a72eb1d259066fce9fbe2f b/txscript/data/taproot-ref/96f5f4a5b64b8e8462a72eb1d259066fce9fbe2f new file mode 100644 index 0000000000..f408010df2 --- /dev/null +++ b/txscript/data/taproot-ref/96f5f4a5b64b8e8462a72eb1d259066fce9fbe2f @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701b01000000bba7c5fabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6801000000b62f87d103d8d78700000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac0e687c36", "prevouts": ["37c01100000000002251203261e4f5d874791dc168faa2b4a2c68848e71e1814a86d26b34f54a7b16af8d3", "be1f780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652a1eef91367cd6d74c4f46a0acdd366d2fb1ed04bd26bd49e3b512a0ae11ddb"]}, "failure": {"scriptSig": "", "witness": ["6a2f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/9700352a9f17c39165256df2f2f7e4fa2ec9de61 b/txscript/data/taproot-ref/9700352a9f17c39165256df2f2f7e4fa2ec9de61 new file mode 100644 index 0000000000..bf48af767a --- /dev/null +++ b/txscript/data/taproot-ref/9700352a9f17c39165256df2f2f7e4fa2ec9de61 @@ -0,0 +1 @@ +{"tx": "4431cfc6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40701000000be5f58b98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bf000000000206778f03fb9a7700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f871feb932f", "prevouts": ["fede3f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "5c57390000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "da7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936043c0126a9ff46f80efec90b265339725ec2187e176bf61e9c8112d2ff543febee00e627ce877dc7a3321ebc519bf09c5aac598ee9e81cf6d3228685de2d2a5f9a29f5cb7818ea23e4b491695dace811707e8772e99626d3237c076ba9a076d6566ba3404d3656bfd0df4a55f82c254cdba579fd51be164a5cd21fa2faf92a44"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9267ca3ecfb5dde8490070ee5c8f144d07948eba84ecbc5d8caabe33435ae9c3fb4f37cceedf64e5ab756f8bcf3191fe56bd549db8641e271ceb60581364e38eb0481d56926b359fa3e2e34471adba51fafc61fa70dea7541795bc082db9408"]}}, diff --git a/txscript/data/taproot-ref/9749e874bbbae2a0dce118ef7501ad135ea6cddc b/txscript/data/taproot-ref/9749e874bbbae2a0dce118ef7501ad135ea6cddc new file mode 100644 index 0000000000..5faf866590 --- /dev/null +++ b/txscript/data/taproot-ref/9749e874bbbae2a0dce118ef7501ad135ea6cddc @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c200200000056d3cc57dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf501000000a74f649460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270020200000040bd4f300326debf000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac82010000", "prevouts": ["1dfc5f000000000017a91480e36171416c0f598c1c20ba17ab3a3cf10a438e87", "34075000000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "95c61200000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638468", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb415f8a538f68d5e42651660e8feb349dcf42bebc9266cba18280404d93052698127135a2a7712dc4ffb0f490ef0a9e18994dae8053f69b06dfd6a349e2375b7df7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c777889b9c675ef10221c9e4ff4402fe24beb4f9fe9422385447f7b634cc13289910ef1376b2f57d6157bb9e8c31b4bd4b9d07432c4b683bf27102948dfaafec7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}}, diff --git a/txscript/data/taproot-ref/975509735c405d7f26b8bd4c00a32158c4f2911b b/txscript/data/taproot-ref/975509735c405d7f26b8bd4c00a32158c4f2911b new file mode 100644 index 0000000000..48cc061449 --- /dev/null +++ b/txscript/data/taproot-ref/975509735c405d7f26b8bd4c00a32158c4f2911b @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48f00000000d54e494e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127089010000004f3ee92e0308664200000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ace75cfe40", "prevouts": ["113b33000000000021591f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "14ad1100000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["4093438ed6da8aa0c53e5f73939acb7b5def70806f19c4bbcda28a1a09767df92d47a93e38f6d7349c99122a7c8d3236714cd472d0f69a7526a04cfcd596e6aa"]}}, diff --git a/txscript/data/taproot-ref/976fab0e9af7ab44ebc738f13b377d23ab763465 b/txscript/data/taproot-ref/976fab0e9af7ab44ebc738f13b377d23ab763465 new file mode 100644 index 0000000000..683e72ca2e --- /dev/null +++ b/txscript/data/taproot-ref/976fab0e9af7ab44ebc738f13b377d23ab763465 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700501000000f60e8805bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe501000000e6fd15b5017fe3180000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc6f000000", "prevouts": ["0eef110000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "673f660000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e268", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dd64d3df7c2a1d0f9fe00a8caf7064500c77c82c895dd028fc814cb494a55b73b88f998be5301314da3588cf7094ff0b779091d289dc1f0b3826508d93d51b78c2782374d67da9500785d400f7ef10ae84f146bbb568355094c68456b68f7a283b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c488a3deb56610eb7fa861052ad162bc8070dd60208b70c3d0d74ffd3dcedde8b0bd2b339cdab1cb752df7db1bf10e0fcc4b57fed7d380ff50ba3a0b4b018724b77966166a359aa5541e77c34a58fd9dcb7d88ef6e7e0cd0e140e1adf959d28b"]}}, diff --git a/txscript/data/taproot-ref/97703896dfbc748c76753b9dc807252baa7d17ab b/txscript/data/taproot-ref/97703896dfbc748c76753b9dc807252baa7d17ab new file mode 100644 index 0000000000..023d52725b --- /dev/null +++ b/txscript/data/taproot-ref/97703896dfbc748c76753b9dc807252baa7d17ab @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd10000000089808f898bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f9010000006c9d49b102408d97000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac25e01256", "prevouts": ["56c25f00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da", "91d339000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090246543e41f0b80bb5e83bb79dfabda2a0e5f0914e3b04d1b972c8ea454ffcc6472c7d3803a1b27f284f58e315690d55f3f2ef118ddc881d277edd79c9ad2e39ed87ff4df0b573ab9ae53ea9f7c078000d5c6a8613f551f9edb92869a8d4e9f869c5ae583c0707b077ed7d2bcf7fe8cd662ac4722259d8a855280302f629238f694f0b32b87cf323e16a36595056ae8f0f3581324145fd3af76a84237f54bb8f691f6c0cb8f056341fff9eddaaa2787457ec778260722dd15dbaed31323e10a41237c25a9e1924f8b9af54f4d658dc4ceafe1da8e051c6cf56ce978f81e87b2edf8d4381d8e4e74527fe097ef28385eb59cf1fc14ce1a7fb666c9199dec92095d001588bd69fa34dd48f4221746e4550c71b30fa3cff6d34f6db43e048ed090af0100b44ba90fa935005c99ce5a7a9f5de0e04f558a8d2bba9a4fcb70a36e0a74cf91d213ae345381d8838d0208fb9989ab8dddd142d8699b52af35a13ad069f2aa55e8c867b633f09cf3cd075349913b70eeb94b987a26d9f8f47669dd0c37cddddb8c7e4a7ae5cab3138fb8c11a82a04bb8644e63fc04e3c835ea3cbc546b9331fabb6fe5f1fc9da736db78fbe86216c407b27458af80880308dea2f7bd74340b4726c026fdc1e2db6c76e25b2587b31c8aff5fc3ddad37427fe41464eecf44b2433a3b8c3accaa9d2193c1cbf85c110abe637f10a15d9a5f8e9c19f80561306757098ddd232bd62d975", "807d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e83f9b6f826008f58b0a2f0424fb9eb1e858fa037e128d89da74120b3f1d2e75bf3dbbf3726cbcb24bd9ee344fc88539efd23f46f5d6cac68dd1bf47840d55ab8c"]}, "failure": {"scriptSig": "", "witness": ["4d09021e7cc742df1d8426ec5e0354302afc2ef28f05853ace24873f2f941bdf0062915adef0d02c8c07780c644235e9674d50817d46953398509cb0acc1b8a61814b912df44568a59537d3868039aa41848c17e46d8f2f57ae1966afc65c5de4479e6738c5cbed9a4361b2331f9f8000c0943dc8a4b8a0ce2660cfa5da928f892111b5b4413b74badf46607d41829b739602f4cab78f987903e11b3f919664381d50ed10a0a999fb43ee7fdeb8a544fb2c500eea770be304cc72871d07a7d716bb2ae2be06f96a582b8e22eecd12bcc0164d5dfba3036f4ece0abf4c2aa9586cba9e1aafbfdf4de3b1268a9f8ae402ff04751fb3daaf121f782327495a377a6b26f0aae35de31e5ce5f4000520ca237af6947548ef3b51a6d9aeab73c825258b91541aa3bd9d300a9ab5f682f2e23383414b38916b97eb9dfcc12efda370421c6030c98614ff908880c9f5008b40d32b65ae2615b39063b8949a28372420942b1306d1e0bd86ea60541222d6cddfef76ce9b2d5e381ae1713b88ba89d7e6466bce355257549ced269aa5feb24a68e8246119be7bb24761588996d7f3fdf256e24832fd831a218c227848657b9550d3cad13223fc5006aa79a2e794eb9d0f6819818eb16b5315002a3a4fcee4538a660359e702c908f953daa8f640f1ed615b5262bb6db7b709126ba18b8cd23be0684fbc2734f2c8447138962ec2f369c0e82ec8cf18446f3cbf0b555ee1f75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936039633ad3a04c2b48f1d44fa7c2039ba0cec5460a32c6bd9aee54d5879a3fc75035ced5e3ad5845cfafeba3c70c2f6d2785016db0dd7771d558e4afbfe1a1e9a3dbbf3726cbcb24bd9ee344fc88539efd23f46f5d6cac68dd1bf47840d55ab8c"]}}, diff --git a/txscript/data/taproot-ref/978c3a312999502111000de7dfe47b35516164f4 b/txscript/data/taproot-ref/978c3a312999502111000de7dfe47b35516164f4 new file mode 100644 index 0000000000..fbe7080627 --- /dev/null +++ b/txscript/data/taproot-ref/978c3a312999502111000de7dfe47b35516164f4 @@ -0,0 +1 @@ +{"tx": "23ccb2ba038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d2000000000276dbdddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc201000000bff559ce8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49b010000003499f1aa02d96dc3000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac8a010000", "prevouts": ["334c420000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b5fe4b00000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "3fdb36000000000017a914aa4a4e70b11f4eec4760f77206dc93b02350fcff87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "473044022074551d8f048a30da7c61f6f386676c51ab4071e1e30acb091ce1e3cb1f5ed93c022008742d772ee3b3bbc8a0b73f5627414852753fa6291f813c19dbdd9b2a4e63cc034104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "483045022100d8da7568d38772f9cae6eb86bb06ddb7e61128512f1bb9b44da900cbb612a10e02204f4e6dbc0d82a032a89d2ee6983db8f8e68abab0eabbccd339694217312accd8034104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/97aba204ef02b37a3627221d61d8e55c8a4e1c89 b/txscript/data/taproot-ref/97aba204ef02b37a3627221d61d8e55c8a4e1c89 new file mode 100644 index 0000000000..f54b510a1f --- /dev/null +++ b/txscript/data/taproot-ref/97aba204ef02b37a3627221d61d8e55c8a4e1c89 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4db01000000aa09a19cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0f0100000069f2c7ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270920100000099f9349f028e428a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487596bf447", "prevouts": ["72db310000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "266e490000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "02ff10000000000017a9146704ae21c886c9ded757e2b67d582abfc91902d487"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1052557e81dd342a2b41230b0afaea8d13945f509c20a84912c3e9d5b86183ac33720a820d9abe67125ff39f44ffa31194d8e2e56ac0de67f7992994257d70be631e5a3cd6e337eb252bd8d7a8d95e14a531fbfbee4d245debca50b247e512ad1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360b6966964f86bf7042b2b8d0a9c38ad26b592ca0cd295eff76ced7d8c125b4a44a68ec639edecebbcc441a95b015cfc7d67c6cfab51cac7643a880d3dd4163fb31e5a3cd6e337eb252bd8d7a8d95e14a531fbfbee4d245debca50b247e512ad1"]}}, diff --git a/txscript/data/taproot-ref/97cc85297ae928c35b606a80f058ab18ea5187d1 b/txscript/data/taproot-ref/97cc85297ae928c35b606a80f058ab18ea5187d1 new file mode 100644 index 0000000000..d7821ad56b --- /dev/null +++ b/txscript/data/taproot-ref/97cc85297ae928c35b606a80f058ab18ea5187d1 @@ -0,0 +1 @@ +{"tx": "615a5ae8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f501000000cb91e5aebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb600000000f9c80c9a0168a86500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac40208a60", "prevouts": ["8d6035000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "62a67200000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100aa13db2a3dc117ca3698a46b87fdd7e9a0163ce6c20e927cb59b6d3dfe23cc90022006549da89414cce206bc037e78f0df7acb38931a2bcc9ebfd315b3a27775e0fe03", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["3045022100a6d3758b22a0837ae6cab7847b42f9b3d95e3d24e3662bc06a0f91fb2dcae16102205f9c9b8433ea44fc8488be5413237a9a890224b6c74d618376c14520f04040d603", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/97f61b6d98c9ffe5ca701f864969608db86c81fe b/txscript/data/taproot-ref/97f61b6d98c9ffe5ca701f864969608db86c81fe new file mode 100644 index 0000000000..8c5df99bf9 --- /dev/null +++ b/txscript/data/taproot-ref/97f61b6d98c9ffe5ca701f864969608db86c81fe @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdc01000000f1553faf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41f020000004d967d93dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b20000000009c7a29f501e4bd6e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac9946af3a", "prevouts": ["8fa24e0000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "07ca3b000000000017a914a7d99db8790799e567017bcc9951f7f968dba70f87", "48721e000000000017a914a1b035f555fd87548264c3580a1f62a42acf027e87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "215d1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["385f9b7511c5668b97f134642d8641fe4d541f4939e6edef8c0a138595b38cd8467d4691a7de84fdb38ad659746ff95930b07135d6178918fab0bef05c859758"]}}, diff --git a/txscript/data/taproot-ref/982a43466eb400711eaa92486fd3a9b22d4ed22c b/txscript/data/taproot-ref/982a43466eb400711eaa92486fd3a9b22d4ed22c new file mode 100644 index 0000000000..be95bd3050 --- /dev/null +++ b/txscript/data/taproot-ref/982a43466eb400711eaa92486fd3a9b22d4ed22c @@ -0,0 +1 @@ +{"tx": "2bd6955703dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca700000000c8472f80bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4600000000d13b7096bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf22020000007262dfc601ef371a01000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac991f5956", "prevouts": ["846a520000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6", "8cbd7300000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "3c5a750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "2f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a46c7d29a0db0614f2e0f0dc0c143215db302e3c05619472d7444021c8cb05584a68514c5be2766b31ac79cb27b74c816d51537da76cf4fa244470107a7172f8ed6bb91bf977e9e370b444e9d5512cd4ec7f3694a9311c01272a4c1a167cd930"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d13a5469ede1e46cfc998c93aa642cff0bd84312ec04d003cb1cc577ad9b5d6a9cca9c712bd5dbc651b74ba1f32b079db60a81520e454f56bdbd9ff2bb730ac4a68514c5be2766b31ac79cb27b74c816d51537da76cf4fa244470107a7172f8ed6bb91bf977e9e370b444e9d5512cd4ec7f3694a9311c01272a4c1a167cd930"]}}, diff --git a/txscript/data/taproot-ref/984d407c9a0781d661b22c64ad915a555d3bf64d b/txscript/data/taproot-ref/984d407c9a0781d661b22c64ad915a555d3bf64d new file mode 100644 index 0000000000..5be41c2585 --- /dev/null +++ b/txscript/data/taproot-ref/984d407c9a0781d661b22c64ad915a555d3bf64d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf91000000002b06489adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd001000000a1a8c5bd0374ded3000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487df000000", "prevouts": ["ca847d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "defa57000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_8e", "final": true, "success": {"scriptSig": "", "witness": ["5a3f0c6d3d7d5ecbab1e157172e7fc37f17b55606503fc090ca8679a0ae29fa572e074a75ff44ee4c5988207d5a7a86f1ae241c175b6b126af2b8d8cd21b8f98"]}, "failure": {"scriptSig": "", "witness": ["371288ce6346cb7587f24781557107377254815a3e3bd489fbf22e2cf3729dcde326864dc5e270c65ee003af52dec3621437dbff5ad061c77177028380d50dc58e"]}}, diff --git a/txscript/data/taproot-ref/98500d46f789f6e67f2c3e2f6af290db2fc124cd b/txscript/data/taproot-ref/98500d46f789f6e67f2c3e2f6af290db2fc124cd new file mode 100644 index 0000000000..6fce4e6f54 --- /dev/null +++ b/txscript/data/taproot-ref/98500d46f789f6e67f2c3e2f6af290db2fc124cd @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127090010000005ac683e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c380000000038d3a0f20107b609000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87cd821a49", "prevouts": ["b65e0f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "d17c4d000000000017a914a68ade9e67dbb5e8acf044461cfd5bd8dcf592c387"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_83", "final": true, "success": {"scriptSig": "", "witness": ["a01258475bcb19795d0a725f8bb820d8094e9dfe0f9dbfb98fb7b7d8f4fa18acc75b50b3674fb8e4287b02b2fa9b5e7a993ad4a040674610b3531bcfc24be74183", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["9a7e25e9ce3cac285fe683d0fc7c497ff31dfd2437de629505cf8666201b958f2a2f6b715c348e215b75cc112a8d24df3ef57cbc52b7c3803b070f4e5eb7fa4b83", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/9886f8415dd6095f89ff7e519af7516c9b7dc352 b/txscript/data/taproot-ref/9886f8415dd6095f89ff7e519af7516c9b7dc352 new file mode 100644 index 0000000000..ed1a14c4f4 --- /dev/null +++ b/txscript/data/taproot-ref/9886f8415dd6095f89ff7e519af7516c9b7dc352 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5a000000007aff33b5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf83010000002d294e3a04d10a8f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748772020000", "prevouts": ["1e5020000000000022512038bab72068016f902ab3c55307335e21603c18bf2ed309a060537ac5746c9535", "8f3a7100000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360bc8d8ca652832e81193e5224505a6dd6e16def6e59730a097de7e2e8bd37573"]}, "failure": {"scriptSig": "", "witness": ["6a55616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/98bd202ec6667081b4a70e2f6b929af634ac6d68 b/txscript/data/taproot-ref/98bd202ec6667081b4a70e2f6b929af634ac6d68 new file mode 100644 index 0000000000..ae7914475d --- /dev/null +++ b/txscript/data/taproot-ref/98bd202ec6667081b4a70e2f6b929af634ac6d68 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7f00000000ec0883ebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf400000000af6e853204717b76000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487e7000000", "prevouts": ["408f560000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "d3d9220000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "2f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cb0eee81661f2fefaf772a8bdabbcbada52a1b0c3a58f1bcc7f9bb01897d4d674e9031d393e93ec4f3e9da8fc51e83b82f31256dd96ef4af94581a47eb5c67bc"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ca2ffab0cf338eb106c1ce200445cc90ecf54781f497edfad4f32965f124fa8cb0eee81661f2fefaf772a8bdabbcbada52a1b0c3a58f1bcc7f9bb01897d4d674e9031d393e93ec4f3e9da8fc51e83b82f31256dd96ef4af94581a47eb5c67bc"]}}, diff --git a/txscript/data/taproot-ref/98c6e09cd9cdc3967e01f4842102de38d4cda1a9 b/txscript/data/taproot-ref/98c6e09cd9cdc3967e01f4842102de38d4cda1a9 new file mode 100644 index 0000000000..7eeb4eaa0c --- /dev/null +++ b/txscript/data/taproot-ref/98c6e09cd9cdc3967e01f4842102de38d4cda1a9 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff6010000004f498f07dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c860100000008441211dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7700000000fe3bde330149db9a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9fec5531", "prevouts": ["f6da7500000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "dde94700000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "c6d94e000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e11f8d24c2756f16b9efc524121d49339a04fd56a536f956352850ed4d5018a4abf7205f064a536655663faab66bf2e716758d251376e4a55710082b6d7272244791bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f70487ae4384611f908618191b61bece567637059dee67ecc200d57fcc06025825f2fc2293577bab1371dd996050d2a4e8a01eb34ee2db6c09974277461b3e6691bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}}, diff --git a/txscript/data/taproot-ref/98c83bcdb5956bb94639dc29099871c76564d6bf b/txscript/data/taproot-ref/98c83bcdb5956bb94639dc29099871c76564d6bf new file mode 100644 index 0000000000..e2791e99cb --- /dev/null +++ b/txscript/data/taproot-ref/98c83bcdb5956bb94639dc29099871c76564d6bf @@ -0,0 +1 @@ +{"tx": "d1497db003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5a010000000ac409eddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1802000000b7a057afbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff7000000007c740f92045d5fac0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce5030000", "prevouts": ["d1a0230000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e", "d84b2000000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1", "d77c6b0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["dc4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c9da215fb1c7a7d8158d804bf09a7228ca7acab75bba3128cb1f7201ab6c755a6950266b78c1c1a06b0abf9d183417cba91a47bb46abdc469d8aa6f91cbf6a3fa39f866618102a4b08e1c83cadbbeb41bf3ed62f238c8432fccdf019ac45545bfaeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900453f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08238e917535475cf2110d0b0ae2ac5bf0f6bfd0fb66e9319f96694509bbaa8cb206d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}}, diff --git a/txscript/data/taproot-ref/98d122b2f88e6c5326c77b7a643d054909d0e33a b/txscript/data/taproot-ref/98d122b2f88e6c5326c77b7a643d054909d0e33a new file mode 100644 index 0000000000..c386df40f9 --- /dev/null +++ b/txscript/data/taproot-ref/98d122b2f88e6c5326c77b7a643d054909d0e33a @@ -0,0 +1 @@ +{"tx": "d666eeb702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b37010000005ba523eadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2500000000a14399b10167ff3400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac93222b49", "prevouts": ["60c422000000000022512036c493d82a149ae4f58587b8995f80246acaf3fa754ebc9da78117b68027b383", "5e4f2200000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368f01bedd13dfce24680e9fc996c53be28560337df17d0cea5b3b3f87d7eec203"]}, "failure": {"scriptSig": "", "witness": ["6a43616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/98d39d50572a07ce2b34b997b11f0801efe034d0 b/txscript/data/taproot-ref/98d39d50572a07ce2b34b997b11f0801efe034d0 new file mode 100644 index 0000000000..0b017c261d --- /dev/null +++ b/txscript/data/taproot-ref/98d39d50572a07ce2b34b997b11f0801efe034d0 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45f00000000788b972abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf02020000008b773e1560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702b00000000fdffac0001b6184e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8721010000", "prevouts": ["39113f0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "8f097000000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e", "d0ef0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "95", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045cf76285204aedeb2e654c32bdcb90a470f0de651bfbe7b8c0c018e8a9ed468384d6fbd68a9aac62cc0fc4848936fa6d465cb32a19d5a751074f74d9c4f7fb368ab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e461b72f89a2c16bf6a5015001c0ff63d37cf9f24e8cabb5685a98f400e46d3aadc7c8b3bda8f17728820267d55a41d559bf30f92e294931cb4fa644579829c4d4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}}, diff --git a/txscript/data/taproot-ref/98e6557609649d2edfa5303dc85da6929b3e46cb b/txscript/data/taproot-ref/98e6557609649d2edfa5303dc85da6929b3e46cb new file mode 100644 index 0000000000..e672ff02fc --- /dev/null +++ b/txscript/data/taproot-ref/98e6557609649d2edfa5303dc85da6929b3e46cb @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce90100000083239af2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ced00000000c0e951d4020615ad000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748700000000", "prevouts": ["3403520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c7f65c000000000017a914f0ed99a28545ab2ceacee60b5537a9e5c34fcd5187"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "215b1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["de02cad6e29bf921d2ee6d5b33c41a108255f36fa9623c61f0e96c86f42e8e441d21577181e866ea37b28e9ea5766de3c538d6f5ea9f67d742fa39b5267a9204", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/990480b357aeb905cfea6ff646718d101978e980 b/txscript/data/taproot-ref/990480b357aeb905cfea6ff646718d101978e980 new file mode 100644 index 0000000000..27bf20e18b --- /dev/null +++ b/txscript/data/taproot-ref/990480b357aeb905cfea6ff646718d101978e980 @@ -0,0 +1 @@ +{"tx": "566cc775018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bd010000004d504fd902a1db2f0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6ac000000", "prevouts": ["d76c32000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09028e545a2899d62cbe3b738c9c1ae244e41921f7a57ff172ba0f409d97b6073605c05a5c8dbb6c6b85ef68a2f28077c7807549d1dc086420bc40feb82128b69730aff8ac1bf8b1b7e0c1e9987facf95dd3497e94bbd184114141fe611f68f4ade7b19bf64e26dcb089e1c95ceacd5f47b50273b183a08ef8ea0d19ce5a0551ec7e1b3745288e5d762fc0159b86b547fb2c8d6f8b566133ce089d218d77b8e252c231219cfc6f399f3d653774ecf1f32fb724e5929a4fb0a2f90424ea3243d0b0561ff3f51bc130d61b7582d625173a9c36127d0c734024e6c646d44585c27677e53d611d282b734967cc39965c7b17135bb0fe6bf4b9d15a7f7b6ca6f0273513b939e013916201ec9bc7770b3a26a4d86db33bce49d9c99363c5bd2e05d34d1d7ee31f1dfc101a8a53b55f13b4e61e33cc48cdbfe95b0fc3623b554676e4677d1dd0eb3e0828f814b232e164ff7c8dd5e780d683032e9e78dadf1e7cf1045908b2a84e630df4186852a5a76fb5870f53c39edc5b2a8b9d76d617f65e9666d5a73e0040aa6ef3b695f10f5066465dd0da66eac64b0d90b90e8ba57eb8077e4da6189ae6be29c366e732b3d52e50d021b977f0bfc86985efa0174ed4366cd1b2fb147d33b3002e9725f1579da95fb84855e9be572b61474768bc26aa8b2713686c015d7e86d8c64d36d19334c9bb9e79974d8475bcb6a70d4a52a9acbda9699b37bdfbb05128574800f0a375", "7e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f08dc66ea0f9eb261a29c2f3d2c5e9ee1b32bf5c43d9ea273248408128efb172da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed3fb5b8f7b3afa290146b30788656a8f4c2497a65b1555cd50f1d702ddc8a1f8f2e4a14a40b0acbe20218e44481fe6660f01d2e0cf04e3bc8d4452bacd1080d1"]}, "failure": {"scriptSig": "", "witness": ["4d09028e619fb67d98b88e56079643a6388cefbd0ae51238d974d376ed217947350fa41c76ffca263f1deb415a94d111727fdb5fa30dbf49c1a2df8c5cc07be6ff336791ba1a7b551f651df744fbbdf78f904d5c830c1942a8e0d0fc99eeb6ae2a886a2b97da69611bb45021d2f983c92c6dae88adca3ccbf94254c909d1c1b9f98d34ec9662a78466c0178ee401ecf2dae0ec862e1bab220dc3090a375f040511b708d7a648d43254b8bb829eafe9945138ab81f11a4e5f257986711145a7723cf457bba6cc32a92dd8cb09666ab2af40f3351f8e278a2b2cccc13b4c32e6948d00367dcb320fdc4d4d03b3f5cbd19e757d4a3f799957b8d2d54ed0a4633ea7ecd33732b9d89b3de0354546c1fdc0b66cb5fb52b8993912e23cb204c178bba638700b5cca1f91388d476567eb17d65c741c8c6de9868a74289208cfa87c08ea9f6c7a4b0dd4ab65db185bf911851c17d9ba8441643afe9806a85cf4ac1fbc4efd1efff6be2e12c48b8854c39c6df838470a461fa92ad759e0c9092a5c9bc0ab5501812b8a7d3699a67d33686a93b927b8c2f1e1dbda70aaac733c7e7f5060e6286ef3ec8824626b9a0c23c95dbb7be30ab298e7d10d8cdf8ae383a7c06887e2584c838f7805abfb2ce81dd7d60665291c9846bbe7dea0ec32b132a8857db4ee614b1cfee778358448fd8035f4d35169bee34c22d4b9af843f628f68bfdc0d30f017f80df222a2d2eb0da58075", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93622dd8d97b260f7d47840eeb54422aa4324349cfe541c38798b74309f8db1f0cfe4e9bfb46536bdbe14fd1969523d98350611f9c0fc6236e31514e2d43f59e146f2e4a14a40b0acbe20218e44481fe6660f01d2e0cf04e3bc8d4452bacd1080d1"]}}, diff --git a/txscript/data/taproot-ref/990924cc189ea41b110bc4dd575460c49374f23d b/txscript/data/taproot-ref/990924cc189ea41b110bc4dd575460c49374f23d new file mode 100644 index 0000000000..ee35844d93 --- /dev/null +++ b/txscript/data/taproot-ref/990924cc189ea41b110bc4dd575460c49374f23d @@ -0,0 +1 @@ +{"tx": "6a76990802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd8000000001d4b6c88dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4a000000002f820b8201e0103a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac02034d61", "prevouts": ["b82721000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838", "cf8a1f000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638e68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363c1a09f721b671ff8e4281f9d7689b05138335bc6147fe0c6fcf3e4fb775b626dbab9fd6af1020d04f0143fc46ba56c091000bcdda14289cb5d3981fd1d5b5a654f33cd0b31c9bc4dfcaccd89caa263c020d1b70f58e7e0e884ce19a773d6b5f30b2981ae69232c3f6c5ff759e9ad4102f31f3fc5e7a3a4ffd34dce2e2e06026"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082df5339745586104756c1fc6d4b54e2b6a7d81daf8b03d1fc2a4a51881171d1a3099eb053c54d8f72c6d7331f9a1bb3bf1b628df692ad9b7eecd4e01f4a47bb5aed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}}, diff --git a/txscript/data/taproot-ref/99621f82461534b8907da50ed4c7020620244c46 b/txscript/data/taproot-ref/99621f82461534b8907da50ed4c7020620244c46 new file mode 100644 index 0000000000..d61aedc32d --- /dev/null +++ b/txscript/data/taproot-ref/99621f82461534b8907da50ed4c7020620244c46 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5a000000007aff33b5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf83010000002d294e3a04d10a8f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748772020000", "prevouts": ["1e5020000000000022512038bab72068016f902ab3c55307335e21603c18bf2ed309a060537ac5746c9535", "8f3a7100000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "187d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93606a629bc116268be1a17da3f53dc5135cb0ba720860d61650af2ab2ef2f0d65c919a726f5226a1e5e752df6df7fd59ca609863b1a6d095747bbc103e423fb93280858ffdbef3a81ff8eaeb69bf692b0617d2bdcb9145576d5843e6d9e5e1cb0c"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364394e80ff16ebdd0b8084d2a2ac0d9fd937ef7443fa96a9eeb67a82d8ebac460b6019e279bd309d4b7ea698da82947cdf92f55834d49ec05c8520ba423c90b8e919a726f5226a1e5e752df6df7fd59ca609863b1a6d095747bbc103e423fb93280858ffdbef3a81ff8eaeb69bf692b0617d2bdcb9145576d5843e6d9e5e1cb0c"]}}, diff --git a/txscript/data/taproot-ref/996fd99ab96f9643d5e5713a831995b17e7a3d6a b/txscript/data/taproot-ref/996fd99ab96f9643d5e5713a831995b17e7a3d6a new file mode 100644 index 0000000000..66948cd931 --- /dev/null +++ b/txscript/data/taproot-ref/996fd99ab96f9643d5e5713a831995b17e7a3d6a @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d101000000275cfca3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5201000000eb0037a702a3deb500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374879c010000", "prevouts": ["c22c3400000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "f5b983000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a86", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3b4167115de6998fecfb714975bc270adc7a6998f06c7ef8576e15f157ca8963750636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456619599a2832199ea7520e829579ac708ea18d94219cc28453716c125c7ffbf6b4167115de6998fecfb714975bc270adc7a6998f06c7ef8576e15f157ca8963750636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}}, diff --git a/txscript/data/taproot-ref/99d1d11e7c7797862b2f093aecd2482708213a46 b/txscript/data/taproot-ref/99d1d11e7c7797862b2f093aecd2482708213a46 new file mode 100644 index 0000000000..a3beb8349a --- /dev/null +++ b/txscript/data/taproot-ref/99d1d11e7c7797862b2f093aecd2482708213a46 @@ -0,0 +1 @@ +{"tx": "0b70bbbf028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43d00000000a3e895eadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc2000000003880c1b703b6b6550000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc72396585c", "prevouts": ["eb37320000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "98662500000000002251201b272935825fc7ce2e9b3b4937db8df8af2100736ca7626b35b3c53dfa94e3e7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "b37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936903d2a659aad03c667a6b873e21cea168414c29d3474a9880634e3e12e550e8c33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a368ced990ebadb111ebc3982eac7e308f07f99a9264ca6c949f56162916d7884"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93613226b488a95574c43053209c9e6fe8a3ea8bc7dade3cccc06ee2b8f5d857db7ebec8f444f9538a00b5e533aa370349d7181cba703021b72fe611d481b359a8e62055c347ba5402321504576f6c37d0c6cb1d044ee75df535bc9eec0560634a7"]}}, diff --git a/txscript/data/taproot-ref/99dec7b1a061c754594c315d70173856ee38ca53 b/txscript/data/taproot-ref/99dec7b1a061c754594c315d70173856ee38ca53 new file mode 100644 index 0000000000..3255ea72ac --- /dev/null +++ b/txscript/data/taproot-ref/99dec7b1a061c754594c315d70173856ee38ca53 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcf00000000a7f3a3d603442a200000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac8380d953", "prevouts": ["05bd22000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "3f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6cc0ae96455d40102dba07421af533c8bf9d94b7db74d6a9e1f391a278928dbc06da1f6599d7e514a71ffa8a2afff73792fcf1df1b953d2196d009aa835a52703985aa46dcbff8b0495de750bd1afe74a661312f7eddf1146199ee1ea8c08aa"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365ec1e7079ff1f62dd2e6a74a9c34f414c9b037a2415ab122d560dbd709f7ca5d76a51402fc917873b776340a7337d6d9d98f28c38cbc7d5e61e594cad9a2611aeebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7acea811edfde1d836b623c2094badb4ab8bc7795b2b49da5506600222f32ea3fbd"]}}, diff --git a/txscript/data/taproot-ref/99e6e3dc68bf0e9973d9cda82f1300e98c4d58a0 b/txscript/data/taproot-ref/99e6e3dc68bf0e9973d9cda82f1300e98c4d58a0 new file mode 100644 index 0000000000..4fe23a84a3 --- /dev/null +++ b/txscript/data/taproot-ref/99e6e3dc68bf0e9973d9cda82f1300e98c4d58a0 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c487000000004bc7f4e2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb6010000002fc980f20145803400000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1c40ee26", "prevouts": ["9dc3410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "deb0220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a4", "final": true, "success": {"scriptSig": "", "witness": ["bba6cf312b17f70b0bf3bc8f96ffb32d469389521cd80abb773d5515de765e8cdb26bb39e2ba5dcc75b3f41dd96c0f4316822d0a5ac3509fe638ea458513a7d482", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["16c56447a1bab4a3de363c353c62237dcb621bf6c2031fb095b189e1bd5dc305a360e5a87d1d296ddf0f99851111bb932cb3098f416974be701f82c9139e7786a4", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/99e8319b516c140aa7badd1e9ef03d1ff1c3bee0 b/txscript/data/taproot-ref/99e8319b516c140aa7badd1e9ef03d1ff1c3bee0 new file mode 100644 index 0000000000..309be8244f --- /dev/null +++ b/txscript/data/taproot-ref/99e8319b516c140aa7badd1e9ef03d1ff1c3bee0 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1300000000eb0c7ff9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9f01000000c78597bfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a020000000af4cdaf04a802d1000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76dfb7e54", "prevouts": ["501121000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "7beb5e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bbba52000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_91", "final": true, "success": {"scriptSig": "", "witness": ["153e3dd9239b5f948de197bd87b90c21bb2ea1083c45afcaa3dbd6117d0a8af737c543a7cdc3de748bc03bcbe2543895eb30f5c8fc77b9b91aa0ea93ac7e61d7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["09c03bc8aab785dd8bf9d4f391eb0f2376edb2e03fb72f4f04fa90b3e86a5045c3f38fd5030a4d668e106bd49c3e4bf7c07cc461f0190578ccdca9fae0a1ff5a91", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/9a11c2fda7b9c43e2b7720bd72c00e2503c9dd88 b/txscript/data/taproot-ref/9a11c2fda7b9c43e2b7720bd72c00e2503c9dd88 new file mode 100644 index 0000000000..4a8a51ebf6 --- /dev/null +++ b/txscript/data/taproot-ref/9a11c2fda7b9c43e2b7720bd72c00e2503c9dd88 @@ -0,0 +1 @@ +{"tx": "d181cd7103bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1f02000000538bccd660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704f0100000003fd78e5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf30010000001a08da8c020568e0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ace80c3a31", "prevouts": ["725f600000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "3713110000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "e23c710000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93651a4b02d6d2d00f96ed624458ca7b08560a5ba04522c3d997cce9fbca7ffe3f57e5a3ad1358e4c8217aebfca59af3ae3bc6dd2d33fcb7e66f52e86370eeb61bbcdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045c27b7e516a1b3919c0c2aae21712d1c7c40c32040b64b5fd9dbe249132a2d861ab0398bc4828dee75def1007ce877d708ab4ca86c9734bfab291d4bd05bae3eec1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}}, diff --git a/txscript/data/taproot-ref/9a309f12e7243094d23099f5433d19602252797b b/txscript/data/taproot-ref/9a309f12e7243094d23099f5433d19602252797b new file mode 100644 index 0000000000..d662de8fad --- /dev/null +++ b/txscript/data/taproot-ref/9a309f12e7243094d23099f5433d19602252797b @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bea00000000ee0a502560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fd00000000d7a42f82dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b80010000009c57242704fe4b5500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48746e08936", "prevouts": ["2584250000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "ec9f120000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "64811f00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93629d2c1e655ac438f3db70c25cc3a59e74790bcf64cc75b6e948452f3070fd7888cf2788b31c6a31a23c8dbe6ff03f22a1631db08af18d9e87ce7bf14c25a50385e7270ac6e52de2effa1ad4f1d7cc04618f1a83be30b0454843cf6016e9cc3658f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b733bc242514943bdb2f3483e8eeacfc336f33bd44d397c28f9e3357b5aa8100b15c6036a676a492a4bf737064ce6a21b64de8ad159d3b2e60d879468caf8957d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}}, diff --git a/txscript/data/taproot-ref/9a89b6f3139174829b27ab6ead21acbf001ee2be b/txscript/data/taproot-ref/9a89b6f3139174829b27ab6ead21acbf001ee2be new file mode 100644 index 0000000000..32411aeaa9 --- /dev/null +++ b/txscript/data/taproot-ref/9a89b6f3139174829b27ab6ead21acbf001ee2be @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ad00000000d70bf3c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b08010000005adde9fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b60100000078ddf57604cdc96f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787521e713c", "prevouts": ["6eb8120000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "686e1f0000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "02ce3f0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "d27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362aacdbaf7feb2ee84db2dc99af1e5f6e1450a5c488d9b9b44f0760fa1ba6b92f9a9c5d9290705897ef911507dd26b72756738dae23c9379fd676f365e52e00fbc5e1171eec0a28263e9818d2dbd976f4b8066e50dd8906a411b6a9dd47f52980e39f192d4dec24b48e9231a08b7d2e64fac2040aad69c16c1d9eedfe5fb62ebc"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93621ef10389913bdbd846df0d9639979edfa3f7c76677006bc1a57e34b3956825b9947182c2cf442266d627de6569afbd254a849da3e2d989b935a76fec010797d33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a9b801fc18e2353a9cd4de337bb33433fbe6225e21bb8b5572b0acaa50d11b7f3"]}}, diff --git a/txscript/data/taproot-ref/9abdf13e2635797e12d342e2dfb31a9c80d0edd9 b/txscript/data/taproot-ref/9abdf13e2635797e12d342e2dfb31a9c80d0edd9 new file mode 100644 index 0000000000..24c6bed713 --- /dev/null +++ b/txscript/data/taproot-ref/9abdf13e2635797e12d342e2dfb31a9c80d0edd9 @@ -0,0 +1 @@ +{"tx": "0100000003d15657a619affff084fc6b1bc2cdf5e85e399bb207d84ace710aa8effb82232f0000000000378eeb7906f5bd527bde63f7c45daff54c390a64a59dabeafc8078a9bd0a050f54db6b44010000000038906fb3492909e056fa5c0ef2af542be68aba07da39583e95b43e24484150891b1d5323000000000077e0c98802d0235951380000001600146d764276c66fec1127e5074db5bff3aa6c52553358020000000000001976a914b2c48f336848c91e9c274b4615a238e127bb7e2d88ac40000000", "prevouts": ["24977ad110000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "1ad1d66814000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "14cf091713000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_invalidcb", "success": {"scriptSig": "", "witness": ["1ded90332935ec88558f8584ac1a3e9b0da6155cb557dee011e261e061c7d76f37a6a92adfedf2fc3d952ec6d1eb50248b6051ffd6e84fa3b4b0de26206ae46c", "20159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717ac", "c0159f9373f8b28a67627a464ae370e1e712c79726144a1a48958863033f16f717a00074c7e8df7fd91f9df9f350398e675f9ead7758f02aef75359e3279a8e0e7"]}}, diff --git a/txscript/data/taproot-ref/9adf5a63b8158c84d6bc327d0b1ac1b5964a3ac4 b/txscript/data/taproot-ref/9adf5a63b8158c84d6bc327d0b1ac1b5964a3ac4 new file mode 100644 index 0000000000..2d205aea92 --- /dev/null +++ b/txscript/data/taproot-ref/9adf5a63b8158c84d6bc327d0b1ac1b5964a3ac4 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc8010000005c7f094c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fa01000000ae244f4003c3a18000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76e000000", "prevouts": ["182d500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1323200000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "437d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682ab6dc69837b4247049ddc8b7ffe2c3e23edfe00b3a8b82ed1d42877f84b2a53d8f160074737ef82cfbb3f905f5039c6634e29d53352416ee52711c9b5e3cc1cc59ecfca53d850b1637d6273d8700d7dc702fb5baeba7c0d1778aadee75959b"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364715b474cae40c256682884c4b9f99cc4a0ea50646de4f5d3b66b0a6d8a5bfae3b3e543c1be24a694e5b6685838ec47a730681350c8079fce99319dc90d9ab403d8f160074737ef82cfbb3f905f5039c6634e29d53352416ee52711c9b5e3cc1cc59ecfca53d850b1637d6273d8700d7dc702fb5baeba7c0d1778aadee75959b"]}}, diff --git a/txscript/data/taproot-ref/9ae58507a65058e0fe31de871c7a34bab5415ae9 b/txscript/data/taproot-ref/9ae58507a65058e0fe31de871c7a34bab5415ae9 new file mode 100644 index 0000000000..eff3ac5589 --- /dev/null +++ b/txscript/data/taproot-ref/9ae58507a65058e0fe31de871c7a34bab5415ae9 @@ -0,0 +1 @@ +{"tx": "5d30506801dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0f0000000053f538be04083620000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc741000000", "prevouts": ["56d222000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ef7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e83a19147259427e9ccdbc6f2b8e5e1f30c562b83bf76874eaaaea903675d8ebeda91d0eecd1ce224dc9f5ac46de57cb81ed44d1050e451131a9df60f58ad735b030008666d4260a12bee868d13ea953ce9c9319f2222d8e8469ea0b912b8ceb"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936547a4bbf5868550c6b5042f98020e4d4cbb7f37004221482c8f9e6bd9702217de4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e87a25236fb2b0caf4a960afecbd8538cf949b3ef5b854c8fdc156128073078e11b030008666d4260a12bee868d13ea953ce9c9319f2222d8e8469ea0b912b8ceb"]}}, diff --git a/txscript/data/taproot-ref/9aece0f0260af3664b7ed391226bcf127e9fd163 b/txscript/data/taproot-ref/9aece0f0260af3664b7ed391226bcf127e9fd163 new file mode 100644 index 0000000000..4cf4a36c49 --- /dev/null +++ b/txscript/data/taproot-ref/9aece0f0260af3664b7ed391226bcf127e9fd163 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3300000000fd918ce48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dc0100000057bd5083dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf300000000c9b3ff710361ce9d0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961aad1f34", "prevouts": ["7dc71f00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "a33834000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "59974c00000000002353212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93690527042795390690a9a4478775b8c816aa4ae99e8fa73671741082894bf9ec6c99cdefdc3473a619e12778c4cd588646c716d59e86e999fbd28728a66c3e7c6a7d0a3f3648f0d829df7cabdb8f0af96ecc09ebc190c461c6b5fbdc9f87abaf73acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004596d09828da376c7d22ded5a4cf88780a729051831fc4ab0b26d0bae49a473f5539caad535bb8d51429d9c94edd44271a241bcdcdcd941caf815b31d1e73ac1400dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}}, diff --git a/txscript/data/taproot-ref/9af8af68c2f18bca7d94dd8b48ce8692c89ffb04 b/txscript/data/taproot-ref/9af8af68c2f18bca7d94dd8b48ce8692c89ffb04 new file mode 100644 index 0000000000..ceffc77630 --- /dev/null +++ b/txscript/data/taproot-ref/9af8af68c2f18bca7d94dd8b48ce8692c89ffb04 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45301000000f58a3dee8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44100000000b63cad77dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bef0100000079a1743d0344399800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df979722368987ea000000", "prevouts": ["8b783e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "624c37000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "3919240000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sig/flip_p", "final": true, "success": {"scriptSig": "", "witness": ["3a32644baefe3ac33337db5680b91ada91bb1492e89948fe78283f042ee27a18f32a7e077dffd72a2dfcedb3c11a76ac85e79a08a4ac88d837c7474d59c03c5e"]}, "failure": {"scriptSig": "", "witness": ["2d2a002c59ae4f1ad1ff62e8b28787be77ab902f4904301a256bb931da009eaaa0b17b1e971da1628442ac83d6d8d8f1e97b9b3bc114b901a069bacb649de84d"]}}, diff --git a/txscript/data/taproot-ref/9afe6dae1af7cdc07ef615de0c3d2ebdd4f68c15 b/txscript/data/taproot-ref/9afe6dae1af7cdc07ef615de0c3d2ebdd4f68c15 new file mode 100644 index 0000000000..4ad1295e10 --- /dev/null +++ b/txscript/data/taproot-ref/9afe6dae1af7cdc07ef615de0c3d2ebdd4f68c15 @@ -0,0 +1 @@ +{"tx": "dd3b93eb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4350100000001cd7ca760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703001000000c72c4ce603c01c4200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787eb283c35", "prevouts": ["7397340000000000215e1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "621410000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["4365f1bafa45f9923db203de3ac8ed384e7a9fab5b5ff70682d274a571a3cb19c273da9aa6bd2b34be6b693eaba26bfe7e2cbabd3fb79f0845a0a5727bf14481", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/9b42d222b18945ea05823e8a6dbcb0d54a364700 b/txscript/data/taproot-ref/9b42d222b18945ea05823e8a6dbcb0d54a364700 new file mode 100644 index 0000000000..886de2acf1 --- /dev/null +++ b/txscript/data/taproot-ref/9b42d222b18945ea05823e8a6dbcb0d54a364700 @@ -0,0 +1 @@ +{"tx": "55f3a2c603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5b010000003b874fecdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0b01000000e740bcee8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4580100000096508f98011c849e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac56000000", "prevouts": ["4ff72300000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "9d0f53000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0", "b9943e0000000000225120beebf2e29d62b55aba368e7e892512e69e2ef37d942bd7f6bc768a8958380305"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "0f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e40618ced8556b537519ff4ae76117678a5ce8c97b03273c29fa3282403423df211491142a38ebb10a24e36aadbe0cf227dedfd0966bcf56b2aea8b33dc3fd67f"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a0125ce869dfcbad463e82b09ee300f32db0e22e1716cfd6fb616cefb0ac74cc40618ced8556b537519ff4ae76117678a5ce8c97b03273c29fa3282403423df211491142a38ebb10a24e36aadbe0cf227dedfd0966bcf56b2aea8b33dc3fd67f"]}}, diff --git a/txscript/data/taproot-ref/9b4d35c34d31ab2b9e6a0becef710c9b00ec976c b/txscript/data/taproot-ref/9b4d35c34d31ab2b9e6a0becef710c9b00ec976c new file mode 100644 index 0000000000..1961fe426f --- /dev/null +++ b/txscript/data/taproot-ref/9b4d35c34d31ab2b9e6a0becef710c9b00ec976c @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cd000000001739216b015e94010000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7968b000000", "prevouts": ["36f40e00000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09021d0e349534330893be62c43bf685af661b5deade0e796f154898d44d7530c5ecbf482869a96c1dca3c401c1cbbac55725c36d42e27620af71b1c8469fc7227e96b95218e4f8e8b0bff434249370ca6e8497f5302b1485f8ef61d3da1f0e788f1fff219d5616dabf4995b68f7ca0704435d99993c0f67b7eee5e0d2bbbef538f606c575d54143153fe24c3290e15022f0bab428fd67dc89580af173da65143a37c4b062f8c60dce2f4bf2d26c127db203821c357c72df8863193fd8d0de1b762b872be6e9afe9c3cff474d7fa825bb5ccd3820680794df6712957331ee8f1d0e090a31ccf0822418061ef32bc2db6daebc9c051ec1f72fac11905989a081c0565d61a71c95e4a0ac2695d7f10455117ade868a109f8713085ba1c5537ba85560d4ec944acc9ea75da0561e3ccc91bdf3fbf47c143ac4fe74a8eca893c2e033cb32e49c91d15ecd9ac9ca791fdee1a49a61cd1b936b081d9b60e8cb89a117aa7a7ccb67a461638fd0fbcacdabf01d2d6c0ab7e2563334f24397ba0857dc4da22e9528176cf818553d368eb6d209520140f06827d86094476a290d5e9ac05d752e58e06886f193352fbd921ee45cd32c6e62ee8a297a1741da5304f537bd13f8b1b7ce9cf5079b649cf50180902bfbebf85fa66a5980032331234f62e1dc8aef84c7437bde84b72b1776f861c9a2ea937bbdf677a00f225e5befd2c34fd67686f1a023ab4c12bcb38c94e7550", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ec3e8652ccdad0df59b5761f2ea097b8016af2709c74f31f9ca84c9f99f70f610826552c6add4a61cb16ac7f3706b11d0158c18b61683494ca90054287b9ac7bc2fd9879a2ee2ae7d76224c991edc718b1729f7f1922f570a67a21926d2cc48d"]}, "failure": {"scriptSig": "", "witness": ["4d0902883f4eef938c9952b2f2c72ff143ff181a42a1d180e3b595395c0e98240fc25815fe095bac959a256a3d4a5914c9ff25b548addb7097982fecad7ad4b54a1f3b1f3e5c0267b73ce9b5732c6a8f083896e98a34b05b7fe4bbc9b178c8b5c15ae1071a244e87e38ec6c5afd208d5ff4aed4c281f3c39a3f2b14103ee4bb9948b4e9e650c413be5662f0ed9340211481065fbca9b6e37fe1422930f29e070c88ef2fcc75a3775073b09208d1dc60cf4337b8d7402588a8eb6af60226281b8f1feba0d961eeef878b46b4bb0c20130145cbaadcd9d52204839700fb5b5135a3e75c50d675aa21f4412f71b4699f3f846574db63999a6dafb5956c967ec6ba80e3aa92de521a298fe901fce2e0fe2a0d1835b3cd42a05f420dc02824704cbfa65a59e0b62ba42d0b68270be62376b03583635db5cea65fc867f7d3f67f3921153b79489596706407b1190dc95c4043c94766e9026e990e5e9eb0e2ff91c00e3c9dbfa49014c99b1b956ad4c1bd8928bf1ee741a336af4d1f8416874904e6fe32e47ae88bbd07df2a802fd1fa61b7c7c197091ade9e91c7fac65f2cf8b9327293fd6c71922ecdadec083d48dfee6a1a5074468bf78f2b8df60d045f1b6b5ad84766dcc07a4c16e485e59d63cd8494bdbcfa0538aeeb932640ed257b3b8ab501064dec04086971fe269948f6f81e797cb5ded2f881504b32c82c46205f36e1f910ad44082f0b3f7b119172e1a7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4faa718416d21ef008df2257ef512539448f5ca520db3fa3c7b8aa919421e6092eedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}}, diff --git a/txscript/data/taproot-ref/9b51c6d0b56ce78a3dd7924a0c74626beea4b529 b/txscript/data/taproot-ref/9b51c6d0b56ce78a3dd7924a0c74626beea4b529 new file mode 100644 index 0000000000..74b8691034 --- /dev/null +++ b/txscript/data/taproot-ref/9b51c6d0b56ce78a3dd7924a0c74626beea4b529 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce00100000057728689dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb2010000003f48ebf8048c75b400000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac751fe021", "prevouts": ["016e5600000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945", "13e05f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_81", "success": {"scriptSig": "", "witness": ["e13295c7b6ed57a759038704cb8ddcf0808fe35c803fc1457862f9900fa469f9462a0315d3c3880b499fb50096b0540d80f23bdc98005da87909a8928753d08c81", "50638f7cede42607b05e090bf1ac6d41a5a84c4929cc25c2da17c34d977b4b42870d7946377dd689c4c2e096a153831cfd9694f76933b4d225852f5916897f0d7cc071fef6cc91a660fc5df03d8e86571f931d7e613b53ae5550b59a1715b187cee2b4bf1bfc2282fb1d0a7182090163f183fcbe241440c03ad1c789151ccfeca21deb266a51c17c4a5d29dc79072e084a3d729721d5fb86fd35373f277a2862408302635620f322a64d1440ae5ef50931f8de8969250859c9115e28e24943326ce02a365d7e5870490aa8df3a685497e5e7272091d09038541e1d919362dff3971dcab173b3572692cf2c5488ef1b1ae79dda0aaadbb0"]}, "failure": {"scriptSig": "", "witness": ["9aa7cf253ec29d548228a588e981555279ca42d5b2479bb0f774c6b009fdbd4cf127341e4d00b02b977f5dccf48587fdec0c07e373343a22447782773da7898381", "50947eade5523082efb2526fc1ce6790501a5ea02eb097910424f44142541929dd3a910215affd9b3a4c1c2e8dc750c9aa1a48c8ded93fc8fc6bdb067381b3e9ead203af6f47d3a5b7862e4f3deab7dc6edca0afe1ead31013d57e6be66830ea914d9e47f50bce83d6adb3f391da"]}}, diff --git a/txscript/data/taproot-ref/9b62911307d4c57e65b67719613737ad5d45433f b/txscript/data/taproot-ref/9b62911307d4c57e65b67719613737ad5d45433f new file mode 100644 index 0000000000..7a924109a3 --- /dev/null +++ b/txscript/data/taproot-ref/9b62911307d4c57e65b67719613737ad5d45433f @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21010000000ae3668c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127048010000008de810588bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40d00000000fa4dd06f0403f6a000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870d92972e", "prevouts": ["96975b000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "3597120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cab1350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "47304402202102236249a2c7ca5dbf805a527d929f15d385667c6de48eae33debe18c14ab102201f0d31e8944160dec4c98499ab94f0467ece919f9c83bba062ade9b72261ed0603004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "483045022100ff0f8af7011e35ce0bc791225830a59fd29bc471eb2074beb42c51d0e79a241a02206273dfd59e248dc077b982e88ca651bac26ae2a79bcbf89b7d5822c6e0cbf5800301014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/9ba6a6cf62c5826ffc6fcd084371c29d51f194c7 b/txscript/data/taproot-ref/9ba6a6cf62c5826ffc6fcd084371c29d51f194c7 new file mode 100644 index 0000000000..162fd32c8f --- /dev/null +++ b/txscript/data/taproot-ref/9ba6a6cf62c5826ffc6fcd084371c29d51f194c7 @@ -0,0 +1 @@ +{"tx": "d97d1cfb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46601000000d2c0dabe60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703900000000021a8ba701f3112f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964a030000", "prevouts": ["4aa7410000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "15ab0f000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "5a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936648f7288da451c6edcb2ab904ab412d7719851ebe4c732831d3fb8a1e081c682db79ef349d3e4f05529a42271c6cf93f8e06fd8991a688edddf7288612a03eef8b5457f6f65490151d40d3d05d55f9c92d8dec73c7aa55a79aa7c51354918829c531ca70e78518003474f611c07657b0808402a053b744a80e6cf25146bdf24b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367960d7b37dd1361aee34510e77acb4d27ddca17648a17e28475032538c1eb500da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb4949da8d2968254411aebae49708200d0b19b59a844616925b107b397a8b89bee9c212f1ab0dfa1a42522b9ca3467b009d36f3b841f39cdc4da4a0520ce4fa4"]}}, diff --git a/txscript/data/taproot-ref/9baed9539fb0ad3446fb36b9804e562244aec18f b/txscript/data/taproot-ref/9baed9539fb0ad3446fb36b9804e562244aec18f new file mode 100644 index 0000000000..3345d158ec --- /dev/null +++ b/txscript/data/taproot-ref/9baed9539fb0ad3446fb36b9804e562244aec18f @@ -0,0 +1 @@ +{"tx": "d4ff116302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0900000000f64f3be68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c482000000007d0525a00173622a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d17e085c", "prevouts": ["e5b54d000000000022512074d6c61045a03724ef8fd881d073e11ff568ecf53a923220aba8b11cef73942c", "fb75340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b274c5efd2c9897d6afd12185a48991ee50489712c76155d50b07e4f830953e"]}, "failure": {"scriptSig": "", "witness": ["6aba616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/9bb0ba96392a718e713162631e2036c2a0708ce2 b/txscript/data/taproot-ref/9bb0ba96392a718e713162631e2036c2a0708ce2 new file mode 100644 index 0000000000..49a6dda733 --- /dev/null +++ b/txscript/data/taproot-ref/9bb0ba96392a718e713162631e2036c2a0708ce2 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fa00000000486720d6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb200000000fa9d4aef03b15daa000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac24ac6649", "prevouts": ["0aaf3d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "804b6e0000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ac7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f6e1ab16ab4bc20af15f35a7f6b67f82a67b85511624b76e02698979773111889f9ef29ad3e74b34f129235a64deb65fb580c2718ff9462ea3ca43b3a4f56170fc485b911b91245b46c320351c8e1d13bb30ee22c3f953d2224593bd4b5088ca"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93621ea3e1176867e27a76e6bfe64b0f928a3852297448d22c2e9793b9d6d23c8f132d0ccdc2029b00ec7048abf887bee187f4acce1681536a58b887d4e93139fe875006811b549bdf6e8160f30212dc3199b386e615ec459cd6a9a101291e049b6126490c72a5b15e8927e2896ebf8102d665fc08f8a92e888d3aee8fbb5026d2b"]}}, diff --git a/txscript/data/taproot-ref/9bb98651acde18815c952146548c472023a22072 b/txscript/data/taproot-ref/9bb98651acde18815c952146548c472023a22072 new file mode 100644 index 0000000000..11a796c716 --- /dev/null +++ b/txscript/data/taproot-ref/9bb98651acde18815c952146548c472023a22072 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3c010000003492e39adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccc010000004291f994019baf2100000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac92000000", "prevouts": ["4ced810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "102e5100000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_3a", "final": true, "success": {"scriptSig": "", "witness": ["51b67b449e083bbea12e4d732039d6e9458dbca041e8cdacc6092706154f23c9721b41d26d738a8a206906876f5c36b69047ec883c49b62b658f866fc0b8a68e81"]}, "failure": {"scriptSig": "", "witness": ["a7d37dfaf176d232e348a4bcdd544f0a0e684beef3662be4f81e6e4f61e4951eaa4b3a294d8ae5287681c3f14645099d0d360e9c6fba489d3e69ae11a40b6e963a"]}}, diff --git a/txscript/data/taproot-ref/9bbe3f1ede4caaf74b619e6e82cb6b6f779f366d b/txscript/data/taproot-ref/9bbe3f1ede4caaf74b619e6e82cb6b6f779f366d new file mode 100644 index 0000000000..e815622a6a --- /dev/null +++ b/txscript/data/taproot-ref/9bbe3f1ede4caaf74b619e6e82cb6b6f779f366d @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1200000000f79331a1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1c00000000af1cfe2a0186b90c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d3d29e43", "prevouts": ["46751e0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "1b83220000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09028511e012394139000bc474cbba2e91828002ee1683d62562f44cbd4305dc55106c19ef457daf4470ac49b68596c0a2472a1ff336f24ce431dc440b5cac5c64c7447544ab72369925e9fbeca386f6073c0e6f2aa87c1227b8ef450abee94fcc89f71c4f16193249d67af091917262ecc40f88e9f2535ad72f7d8c2781628c4c96fc7ed17c77c4879ed77fa4ee71a86dba366a6a2720b1bac55468b05b8751ea1aef16a096ac7b60f13294523cf0891ce5c9b7f32888d4b33eb973e0a222cffd75eadca880fd2238f2a12fdb95957f399fbd0208d403eca733a4d4646be9e17e3bdaa17c64af6397935d237e49a083ea46b1b8c27c952a6dfdb13cd9dc4341e9e33c336f9f61ee332361de5cced250a8033e13eef8a1b56886f5b4e299e9325f391a676b48b10b561f5b9005b08dd2c97814edcbe1d4d84455479a477dfacc3e44b71c34de0641a6821f1a2d86cddac537251cbdaa0170d14d0e6dbbd725aab806c49fa41979ee22c893d4ce2c3c816507207dd248ece7a85aae1b10fa218488b47a60747bf95bb2e5b8cb33c2587b484238b645f2717f0b6ac8a55409b91fde74f7338e8ec911baf31aab2bd1749765a9a94c9f2bd01f7892fb54d49d868b3270a3ae5a1ee577e0f98b9d484bde5a4ee561bfc6770fddbf62c7e2a175762d43ae654e99a87450a72541152aa6c1b88d0a583aee33d43c1475d2ccb788aa18b1ffcc6650464ed71884de75c7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef60611d2eb8e1764aafee2de1c0cc952281cc47e938078f6f5fa59ba73f89875941b26b476c022edf868776977d31e53e85212ba204fe552062798c457a392dc1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}, "failure": {"scriptSig": "", "witness": ["4d09028af4cb89c337cb0aaa5e26b169472571b8797a849d19cc8b3ccf89aabb9c7fefcce3d209e0ab43f3fd293014b9837a7990f53d56712165af825c31986ed9a36f9162b63e97b1849e8761b5d6939228aa1b0790de195dc963bf55aea2346fd9c8ed8be829181f769ff476641f3d20c6a18efb4a55200a76b3a25c683dda241312071fd4d9099f48600f73a56c6d1c086baa41e762fa1709481025f26ef886a168d5094efea51fc571b4db67c04ef79df0b80fb7ec9631ecedc0cd62f0045ce17983b05c9becbab53fb6249d0e39df7157fe0867a8a7f133f0fce9e1302d46e6e4e592c045cdc56e6e78fc26404db05cafc8717ff55bd5e9687fc03d35ffd7f576301da6fae93ba6906f7cfac82f8d2845c1166f34f3de8fbdd8f64f9ee72ab41a40611fb637bb3fa636f7be04ae26ea4fe645a72fa9f25e89baba9550c7a2078f1df10bc8a68b0b17c0586c9b5c0374c4aa3735a9af48b6a5e3a2e8d145e05b6c71c077471dee5b0532efc99645fdbb26f59c5bbfe0cd930e5a258f1b0146c33f67d12ff2b4271e6a3dfdb1bcbde181d93d90c3495519afc96dbef113e60e9a7d0661c1463e0dc42b515ae78df35507416385347688f062aa0abe1741a49d45303ee27e12e70f868456913ea58c9bb8935600e5857ffc7c2514d4346af8828c37f798efa6470e44fb3d9a5a62d99f6c72650b7d449ac6dcc55a9c54f7c5cd9a7f8bd9444216023f3d3a7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e10ec0b51bfc4485592d1a8fc32a0105404420a8dd2ba09b048dd208f3df546c127e5a3ad1358e4c8217aebfca59af3ae3bc6dd2d33fcb7e66f52e86370eeb61bbcdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}}, diff --git a/txscript/data/taproot-ref/9beb9170ecc8bc4e97002efea295cafc58d55688 b/txscript/data/taproot-ref/9beb9170ecc8bc4e97002efea295cafc58d55688 new file mode 100644 index 0000000000..151e89f473 --- /dev/null +++ b/txscript/data/taproot-ref/9beb9170ecc8bc4e97002efea295cafc58d55688 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bed010000004b8c4692dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc00000000064d1b7e701d6ec0500000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5d040000", "prevouts": ["d41126000000000017a914927d550e2674fb9e1f6ae1260d00989fc596dd7f87", "690e290000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "f37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364fb8570387c74e796d15284503f002089d8bb47567604cc51171761387d9a6214c9f6a777e87112c04511ef8a291d390ec48b54e57ed7e78d9086ead135876e880eaa4a5149b34d26f0437dfc3cc15f8b829f232fb4e000d97f0d76bcdb6c884"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa7bedb3584a87481f218db37ff1fd20e008c2f171ef887df99e3acc75d9f4a6f1d93ab99c02c1580916967b23bff6c51eda165404bd9578af086db7302f1c7275"]}}, diff --git a/txscript/data/taproot-ref/9c1a6591aef6efd4346aa9f750f87940a9783107 b/txscript/data/taproot-ref/9c1a6591aef6efd4346aa9f750f87940a9783107 new file mode 100644 index 0000000000..3bdf49cbfc --- /dev/null +++ b/txscript/data/taproot-ref/9c1a6591aef6efd4346aa9f750f87940a9783107 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb001000000f97f388a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702801000000697c5d8a043f238c00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87fe000000", "prevouts": ["cce97e0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "fc540f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ef", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652f3ac1aace3c10cf444e97bb7d38ad5b50faf5df229a4892c0d3ad9e10ad091215b4c606cdda8e0cd0631e1e6566a3457cf9b2eb8ccfe9cc1918e65b703d3f7cd241e6bbc5ebedd8f50ae206f1f82a1e41ff5c139455a0ddb0d368f52a47602"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41645f371c8079005f8f776d501e78f2a21020e20da39870ba1dbf85c4a15b7eacc28207c7af5a37f80d9c7bda068b6f89abe5b5cf72eaf80ed3e31c2f1c9dfaa6c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}}, diff --git a/txscript/data/taproot-ref/9c3a7896381a924c326a82a884be65e632a9f190 b/txscript/data/taproot-ref/9c3a7896381a924c326a82a884be65e632a9f190 new file mode 100644 index 0000000000..94d71fd2dc --- /dev/null +++ b/txscript/data/taproot-ref/9c3a7896381a924c326a82a884be65e632a9f190 @@ -0,0 +1 @@ +{"tx": "a115863c038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48b0100000096e9c4c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49901000000144124f9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf9010000004abe32e30189092c000000000017a914719f78084af863e000acd618ba76df979722368987dc000000", "prevouts": ["e7c0370000000000225120975437f6ff12fc45d8ef3d74f3d05cfb35811edf79338d42e1008b4e2cf45094", "6ef4350000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f", "c869260000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09022ef6775c55da8bde108420fca4ddb99f4c8d91494476301bf3e0d5537c74b70e3cacbbb2142caf78dd2b767d5173f0f3490b25ddb57851f8e76247c728a2f7c64bbdbf2de4a3a14be4a8379114ae6f0d1e04d7338c4597e4bb79b704147b6d5f22373ae9a338d2e0e26d6bdb5ef9e606fc0f0225045a415cce0b05756972064bda704b00b7605c5b8a0823881f2026d897cfabd4b49136260b7a20b748128e12d39af03d5953d034a406ccc188d7c35a3c00ea18c58b95ee79b01ae3702030a64589f8fd7705b9c85eb658058a2f10ef5b1929f004c95e0280dc515d68923bc2abc739b0835f19aa3830089cb74ef6cfa9e99016c261fa9860630ba7d6382a270eb61f036f40fc33d326d1b00d482b03bf4ea888e80fb209caff7e8b8703ed36303434a9eb4ce5dc2f92aa2bcd44568e17fec866140f01e458b7877659a97dd1058800e3f7645672f5eeea15d6a83d5054bdc1ad88e27da941df87c5c6947fa52efa4ee5d2765c30bf3062c4d9f59b67fdec4f5c0db0da718f3c7cd645aceebe99329ada54fd99c54039925e62e76a53b732a23fb15fadfacbb04d6501448c8c40e44165f2d89202dd7305e1be76485e3461a6a3bc0bc64ed8f67574236c47347484c9cb0960e058a49fd6b1554f43197aef49da5cc0bf11bb998037513d0473972b679ed9d3abac8e43f7ae8dc99fe551f1aa9c6ab9a492fccd91a3ace183796772019de4b121fbd975", "947d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89828c38da3f3e346edf59d2f92319d23f93cd7e709e1c3907c38a06ec412d61efe847a112bc0d43d64007e06b59459a0c0ad8818c3210afd17f00e931ed6a3b8"]}, "failure": {"scriptSig": "", "witness": ["4d0902189ebccd35a8c56645eb040f2740f2f31231d3ca373a7f5e13dcf15b898005d4cccb4c8567f1485b9c0b82ca1637baa18471a7750657aeb8d725d21a5f97e070d36472f4772ad92555c64f9664cfe0257767f1a7e24919c67bc7cccf46812c219073463743cdff6a5ca420fa01998b2a85dcb694914098c9da6e5571ed4a7965fcfe364b84bdd9a5bcd756beb7f37484fb910d3b8eb1172feac4f788509694e01de58950ec57af7ac69e596c0ce8650b6d64fee8175bf7177f494e0b24b9783c22c83c856a519d18c273afb982807601c64d8e246343926e3e4662a5f830ed176ccf53243e8706681b8fc60556e46aa61ee4c7f12f15d687f4c3be2d4f5ad0705bab10c417adb1f2fab2bda7b3fd0297b198db502deaa5c6aa83c286358ade2d0c16e1e21b36210125eb61c5c2076275b169aefd7141e860bcc01c127ec2bd108b884fd45ea544e739262ce4710399214d2f17806971c7a330e715b26a6456a8a01180349db1db589bfad3a5439542c5cbd2e58aa8183ecb8adc6b1a4821f3cac1ed2c282faccfdd0799df3850e415112444bbd1bb12a5d1c7ea970a89ab28f3dd8f43a0374931efbeaf8a0167f13e5a3bf2247ec365ea540ada381ee88d60e55a155b57fa3051dc0936ef804f9ba5d3bf929a41c974cdbcf1903f9fa47417fcb9b230b7db2a547e43c9845e139fc797f10128fc57622b2e73119ebd89b58beb8baf7c6626a6eafc7075", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a9be5c2685d91ef557cf0947b16abd2128cd8ef8101163de4969c73a48a3f3202e00206903aca02b9ef6b315776a46e2bb12ad4a7f610ddc80848357a2bf29da5432af4ca45b9bbe99b3e8be0ff589ddab81e08d94f2d38bc0283112328f69fdfe847a112bc0d43d64007e06b59459a0c0ad8818c3210afd17f00e931ed6a3b8"]}}, diff --git a/txscript/data/taproot-ref/9ce105ac118fb5187b993ba8e83d9b199dc86fe9 b/txscript/data/taproot-ref/9ce105ac118fb5187b993ba8e83d9b199dc86fe9 new file mode 100644 index 0000000000..44ec6c215f --- /dev/null +++ b/txscript/data/taproot-ref/9ce105ac118fb5187b993ba8e83d9b199dc86fe9 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48e010000001eafe6a2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5900000000fd8a98450287b78a000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac6f000000", "prevouts": ["9605370000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "21fa55000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "", "witness": ["30450221009b2722d1f1689f2480760fc08ce6c8857a2f2e681fba01edef937ab1a86c393b022001834acdf9f396329968b90f07cb2879ab0a0e374ece804c1f949b5982f6427603", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["304402201706bc807e41337680cc860e84a34e1e8ab6907ded6cb0a350c07b84965dfa2f0220091e8858f4d4706b0e48634941ff61bcc9fc8a408dbc2136e1782f9c690a233c03", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/9ce973c4df052f54b32f61eb27b74cff377e6752 b/txscript/data/taproot-ref/9ce973c4df052f54b32f61eb27b74cff377e6752 new file mode 100644 index 0000000000..bf4eca0732 --- /dev/null +++ b/txscript/data/taproot-ref/9ce973c4df052f54b32f61eb27b74cff377e6752 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127016010000005a40fda98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cb010000005cc4a369dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cab000000003c7930a40216509d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac25272e3f", "prevouts": ["2ae70e00000000002251204929a185ed20b7f7e86ae8920b068b5e7d5df0975bee6bbfbcd97b6bb81e709d", "b3c23b0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65", "8b34540000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["df", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936744d5f1fe8cccbe7a1aaa208055fcd73d33095ca4828da666b0d1eca647814e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5115b534b99635107bf366447ce9661d5eae557250694ef66e76c31b44d1abe134360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d27e649847556e23192b8aeafe173c243f56175d6d7082b77d4d94508f7534d8345e83ad245d963f373c443dd6457dec3808a4f865920e34bbc543e7d04d4c3d1c315aec02adde316e700f87e7c47f474d1ec7cdd06b196ee567d81a15967a13360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}}, diff --git a/txscript/data/taproot-ref/9cf29382585d7d87b68e19e5244cd47ddedf35c0 b/txscript/data/taproot-ref/9cf29382585d7d87b68e19e5244cd47ddedf35c0 new file mode 100644 index 0000000000..212ef40b19 --- /dev/null +++ b/txscript/data/taproot-ref/9cf29382585d7d87b68e19e5244cd47ddedf35c0 @@ -0,0 +1 @@ +{"tx": "9a15a34503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6700000000b98902bb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47301000000b91d6fd260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703d00000000c51f3a80025f6e7000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964c000000", "prevouts": ["e6fe26000000000017a9141582f8bc3490e924b143f387e99eced40303eaed87", "fca73d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "973b0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_28", "final": true, "success": {"scriptSig": "", "witness": ["0b630d3287e3e85358955715f2f0a3f4e5eb1e6afa47984d58d93a641f8f0c85ff6f85114616b4ac1257a62699a40b11c88e474166094f1a71ab96eeaff883f2"]}, "failure": {"scriptSig": "", "witness": ["caa9ddb135c95030d0e1c412c4d93870d366d1b9ec3b6665f52e40293303ea623101ee592c430f9248c2587460f5f43666ed3b4a97fa8b08db20b2db5930e06f28"]}}, diff --git a/txscript/data/taproot-ref/9cffb02f79fc72e41c0ac0b800b862fb39b0a7fd b/txscript/data/taproot-ref/9cffb02f79fc72e41c0ac0b800b862fb39b0a7fd new file mode 100644 index 0000000000..9333c0dedc --- /dev/null +++ b/txscript/data/taproot-ref/9cffb02f79fc72e41c0ac0b800b862fb39b0a7fd @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f100000000f59b89c58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49700000000fbb20ce604dacd49000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc88977143", "prevouts": ["5b30100000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "0b153c0000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "837d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e6193e4630789cbfbdcb7d6fc995ac4f032c6d5611c1f6b733abe8356e59ddce06294a5d2648496e5016f850eddfdf01467fe69221e8567db6ec356a8117d8a748163db171dbfcbf374971659a5a65d0378eae0ee15db360ca8cf80a8c2e13046"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d4241eba4335af55cb703ef1b6547d641330ec95ac5c4cf0d3e8e3ea3eadc07c09d3f278379d69ec93b9031f683f10c8ab57e2d08c050c4811cb81bd332eb9e3ff15e37d03bf407745d47da370f693bba1bd1439d95d9059575aa23ebc3ce6e3"]}}, diff --git a/txscript/data/taproot-ref/9d13b7a6b273e9242c1092d047290e60291087da b/txscript/data/taproot-ref/9d13b7a6b273e9242c1092d047290e60291087da new file mode 100644 index 0000000000..5770e6a08d --- /dev/null +++ b/txscript/data/taproot-ref/9d13b7a6b273e9242c1092d047290e60291087da @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b400100000067e43aff60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701901000000e9710afe02937a2d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4879c000000", "prevouts": ["19c62000000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "b6700e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "4c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b60f374068df7c3adbd1ea091e34cebca1ce39bd416cfdbd5223e6e299acb4c6847bb38ebdfc0ac99f7b57f94cb3711bd799e3f024c53d691ca5d12dd06ff53bd30287fa60720c35e6546eaa391bbb3975ba5e1722a6124c426d678e7f784bd9"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac26d679bf3e8de49490d281730f914e806b1d94cee4bc2d775ba3680f9ace98f724f53fccbc5998418268712ec4a55c070b8ba5ae4e04e2685482dbecadeb1c847bb38ebdfc0ac99f7b57f94cb3711bd799e3f024c53d691ca5d12dd06ff53bd30287fa60720c35e6546eaa391bbb3975ba5e1722a6124c426d678e7f784bd9"]}}, diff --git a/txscript/data/taproot-ref/9d2325335a737991316f3231a676fb415c357be8 b/txscript/data/taproot-ref/9d2325335a737991316f3231a676fb415c357be8 new file mode 100644 index 0000000000..ede0669f03 --- /dev/null +++ b/txscript/data/taproot-ref/9d2325335a737991316f3231a676fb415c357be8 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff2000000001c75619cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4900000000cff75994dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b07010000003c029216047236f3000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8784d7ee4b", "prevouts": ["ac7783000000000017a91408247b8d3db4e641d0be1ff23f14280256870a5187", "06404d000000000017a914b60a534933f6e50f3846e396b9868efc9e681f4187", "4408250000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1655142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["829737e149730f35d49cc71ef0e5dc5a78d0a82a669a8d3820dc6ce454be71374970a23d87752512deae5f5565adae93d05958d0b8266ffc47742c389bcaff46"]}}, diff --git a/txscript/data/taproot-ref/9d3dab224014b620dde2b56cee3fec23463cb909 b/txscript/data/taproot-ref/9d3dab224014b620dde2b56cee3fec23463cb909 new file mode 100644 index 0000000000..1eaba609db --- /dev/null +++ b/txscript/data/taproot-ref/9d3dab224014b620dde2b56cee3fec23463cb909 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4000000000968b3edf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270df000000007d2befdf02b2673400000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac65020000", "prevouts": ["6a47240000000000225120363e143e65a8c3ceb9072edb61818663e66ab42c4302b81f45dac8c3551b5de2", "27c911000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a0e3c1fe12052284d0803cbff9e1f4b5700444776faa5407abdfff7c22af0e38"]}, "failure": {"scriptSig": "", "witness": ["6a5a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/9d6211da7d3f0bda14d5067af27a1abd46dd187d b/txscript/data/taproot-ref/9d6211da7d3f0bda14d5067af27a1abd46dd187d new file mode 100644 index 0000000000..09128e618b --- /dev/null +++ b/txscript/data/taproot-ref/9d6211da7d3f0bda14d5067af27a1abd46dd187d @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba000000000a4dea4a4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c51010000001e406ea960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e01000000c86dabae0117a21000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac57020000", "prevouts": ["0ca3270000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "d08c4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "08ab110000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a80", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363cc6c18dbb2ad1cefe6366db899026a91e492c9d37a466c4a7f55432a4bad27920e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e16014c92f678e181bf1dc3c918b3709f7d7746b7ca1ad43207ed3c2b1249c00bdd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d9fee1d17d522d8600ea529ee17a1f25da379f68e3940e5d1c004f35581e554ab44d35a0b3fc5d8cdca17f6fd766b3b7f076a7a891ad519d38c56688c70ff9dbd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}}, diff --git a/txscript/data/taproot-ref/9d6647e7af1e10de1b3c608d829400e5663b3d7e b/txscript/data/taproot-ref/9d6647e7af1e10de1b3c608d829400e5663b3d7e new file mode 100644 index 0000000000..9e98c19e28 --- /dev/null +++ b/txscript/data/taproot-ref/9d6647e7af1e10de1b3c608d829400e5663b3d7e @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c38010000002c06be89dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7a00000000a16685fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c7010000002dd89bb302d4447e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870e000000", "prevouts": ["c10b4a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0b942700000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "29fb0e0000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "47304402204f706f03a0f3d126c1c369ef5e64567fe561b29f0673774f209c572d8ced6c6d02202dc968afbd20503547c8c438729fc56f236f25bd7087f0914e3a392a14f987840100", "witness": []}, "failure": {"scriptSig": "483045022100f2d0d08b3cc8d7d7a6f50f87a0e65b472b823d06798c9ccc93a97b79eea4ce1a02207317d721674eb5284277f938bccf7853fa205392ded546fc67a2a373506f652d010101", "witness": []}}, diff --git a/txscript/data/taproot-ref/9d86f6cf43b5947de7d50f80fec0483a9072ee0a b/txscript/data/taproot-ref/9d86f6cf43b5947de7d50f80fec0483a9072ee0a new file mode 100644 index 0000000000..b1b0ddb148 --- /dev/null +++ b/txscript/data/taproot-ref/9d86f6cf43b5947de7d50f80fec0483a9072ee0a @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfeb0100000087f4e5fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41101000000bf8e4fc9046e05b1000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47878e020000", "prevouts": ["9ae07700000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "0c683b000000000021581f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936269ff6546b497129ba1fe09f7f94be9a0d73dd3621c79696a97c5ae123801203edc23a266999aa1773fe99be867e95cb2abe2d57657b7a4dc20a388644aabac6d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004539f0e83d2be49ca995d97c64064bae5b8c7dff64f3bec17af779836b699250933d2e072fd8e8376d3a54b2bea1bfbfff1298aece70c0bc2934c8eaacc3044fe58f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}}, diff --git a/txscript/data/taproot-ref/9d8bf71616bca5ac31e24117c80dad52352d5c2a b/txscript/data/taproot-ref/9d8bf71616bca5ac31e24117c80dad52352d5c2a new file mode 100644 index 0000000000..e12abd3997 --- /dev/null +++ b/txscript/data/taproot-ref/9d8bf71616bca5ac31e24117c80dad52352d5c2a @@ -0,0 +1 @@ +{"tx": "81f75e6703dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cae0000000014a05bb260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127036000000002ce4eb9c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702201000000586df89c03fad66a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487470e335d", "prevouts": ["52384c0000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "aa2a13000000000021521f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "06580e00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "d97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363255b317c7de6e9ae6bb70a9fb776c4c6a00d056fb5cee6a264a49253b234c169208680e05d04c3942bb784f68e647b385a50066aeeb87d1b11822ef550a3a38682a6e83df749f265180f93fd54e474915a8abfc6fef0a760c06d61a0bf42967"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361d56eca119efe8600c7ddbecaafaac765d2e5fc0abc9d3eeeeb65fccd7070d9846c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2d5942624d66fc39e30c2a996d85a0dad9a6418b79db996452744438b84f9614682a6e83df749f265180f93fd54e474915a8abfc6fef0a760c06d61a0bf42967"]}}, diff --git a/txscript/data/taproot-ref/9da24604599fa08b01181b48265429ebf1cb213a b/txscript/data/taproot-ref/9da24604599fa08b01181b48265429ebf1cb213a new file mode 100644 index 0000000000..db380e26ae --- /dev/null +++ b/txscript/data/taproot-ref/9da24604599fa08b01181b48265429ebf1cb213a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6f010000002411c5ba8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cc01000000e72a29ce0200e059000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966a000000", "prevouts": ["699f250000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f", "36ae360000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "c37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bfec9f4a544cac12ec45faee03e073e2ca7a1afd48c2e8b5a3a7ddbd5cfcc3ac9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e8d213d90ee48874bbf2b18160b4fefa78452fd9fac91ad5f640de90a3ceda28c"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e1906c602469d9808f25282c821ee4b4dcb0a7f347257f6810852481d8753948638c14f042a58a31b61c3859e3b726944cfc511dd17ecaa68ed5dba7522a36ac78d53ca9a9f93e78db88a883cc9c42dbf55ad09041fa37b21a93adcd191d7180"]}}, diff --git a/txscript/data/taproot-ref/9db297bad5b8a7a06f76713a5b05cdf2148f3b19 b/txscript/data/taproot-ref/9db297bad5b8a7a06f76713a5b05cdf2148f3b19 new file mode 100644 index 0000000000..3d8ae082e4 --- /dev/null +++ b/txscript/data/taproot-ref/9db297bad5b8a7a06f76713a5b05cdf2148f3b19 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270db010000002e0520a960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bc00000000add0448a04b7351e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac07010000", "prevouts": ["c18f0e00000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "51ca1100000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "447d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e46ff9fefe634101043d8ca11d5a4647687c0df4bd98e414158186cc8065d9a91f7b6e2c095a2b9a1b3d0ba71ae2a36fa91117ca9fadc253f03c0f98f0de350244f357c04ffd5ab4b0848fd0bc62a9916d6f879ccec8b8201b6b82c9f83bee932"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93685122a638a9254058212aed1298d113a9036b8f89f151ed985c2121175e9df03288d1d486ad1cd5e981ede7314b9e0cd98a009052c160e03e008903fffd682c3fa4004b2cd3f2b5519985ef4ce40029d6249627881f39179d9882ffc68f5bb6a"]}}, diff --git a/txscript/data/taproot-ref/9dc1141da1d44addec511e26f89d5046f97da2c6 b/txscript/data/taproot-ref/9dc1141da1d44addec511e26f89d5046f97da2c6 new file mode 100644 index 0000000000..2ff036f76f --- /dev/null +++ b/txscript/data/taproot-ref/9dc1141da1d44addec511e26f89d5046f97da2c6 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1100000000c319839760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270290000000027cc25ce0383556300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b1030000", "prevouts": ["e6d3550000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2", "32340f0000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["30450221009f7df4ccb7286f01184071b2f2469e5e6d722c72bdaa5b81d0388e786cb12fe602204dae6ebc306b7645955a0b84c9b88e5d8c8cbdd3451e63c80b1280b339c9a0c283", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["3044022015dd4161c186d3aff010b31cce213e8deb239140a647b3d1c8bc78530800002c02201a0dd4eb46ce03f267a7d8f137747f2e8eac2dfefc81ff83ea23e582b3c5b39b83", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/9de0c2afad49fa532a8fea5e4dad68a5f1ab8a22 b/txscript/data/taproot-ref/9de0c2afad49fa532a8fea5e4dad68a5f1ab8a22 new file mode 100644 index 0000000000..7627ebd05e --- /dev/null +++ b/txscript/data/taproot-ref/9de0c2afad49fa532a8fea5e4dad68a5f1ab8a22 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8801000000e3859977dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1f0200000017508a9f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708601000000d56fc4e201266d0000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7e89ca15d", "prevouts": ["0f5467000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "e47e5a00000000002251205857fc26f723a58058d8b22639f4b33f8ef23084aa37309f77fdf87ef7a99b1a", "92430f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["44a1978381621ea420f72e8990d0e7e3e28b43fc61e5871ce0943344d4e89fad3c52f36026a30816ab6735b4080d6faaf738c7c90a71229b6fba0ca2720305f7", "87855a", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93607866517f563f914300dc56dfa5f8b2e234717fbb3f83d73d2cc5efe2ba41a0ed98b24582cbb8737e8c7220d7d498ed31f2b9f710dc34600e46a3149ab474161d7d68e31704311d4b712cdf1e1d8e79c279e23740497741197ef9bd8a24d462d629f5f2ff4b5efda05305db76ce9925e0213f8c3960aba617c7546d52b2974abc697220ad4d17d3512c24d5ae155b6adcfb044ab79ab20bd38e1e28a80464f484cbd75784e993be530d5676f8dc2ee09b64f1f32f66cdc7b4ff59c4092b7cf376ee8f8c1e1fa9aab23cd1073c3056ca33bc71f7534defd8cb78efeb53cedcb5960dbdc44debd3a9d6581183ec7e582c81ae2ba327dcd9a8a8596b9498c5442e0f6f4cf1c458df91a0afea0d2c153bcc49a5c91080076e369005eee9d0f0f929c287d66d90c4cbe9643f4dd5fab41adb0ea5f21af54c16a7905d7aa75be9e79abb756e94dd6dbf8811f581a6677dd5040b0770d6580c8a23956aee345bb51bf7e732609e0d9888e8fabb595ed61aca9adfd730b42bb4be3264e3b48daf2dfdb1dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c02e90a504fb885b35041a93f57bf95bff975e3ce3b01edd50e093d99d3d1a7000000000000000000000000000000000000000000000000000000000000000076077fab5cfacfe0d44da24115518e7cc923cfda0846fe7d6664ce76c18ae77effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4fbc6152007b768a0a9e0ea555589417531593915a16dcb5161fa990fe790e2193b77feb85593374d68ba2893ed797c76657c07a7c180e1e161979ce40fd06297a169906078a0293dbc950d85ed90e3a1c6acd68c7233757f5f87f37ea46f07264225bad0351757cee8fbc4204b2b1c4491d39d7192eb176f116ba4cff6f2bb641533f7966d3bc46e7b79fec79f6d1f4df0a1c250c0cacbcf443017af88329adefe7756b0306fc33d2eb0028f4ee0fdb0a1974fcf7045f05d180ebd9603c6150000000000000000000000000000000000000000000000000000000000000000136517a08a3d4af2465b8c7ec780a2358a75ad5f187b663ab087a650f574e59a37bda4a363bd5cba9df5a222a4cd106bc990d013c633cd17f3dc6a39e3467108b67086733584b7622003be83be8f789fa11afe304d7e275cc0beee4ea78d11afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6ff2c617481b75c05b00bd34dee98a92e192ec68ab8484dff43174aea4c66a85623f05c824104f4894efaa986601a7a0a173fcdabe3bf55f33f03d6e9324c0330e981f9e9d7858cf2744234d067f7c65c2f06e45483768054a3cf417124ddf90000000000000000000000000000000000000000000000000000000000000000c857f6b8c4189b4ab1c06030d0f3bbc9d6efcf5e4be3c29626e522a27a0d0ec21df30051e5e20486210b635d36c83ff9cbad4f361067a21c9ef9659cbf15e489de0065e2010eeba19fe5ad09a950e50d2806c8000de4dbb8e5489b2204a312bdfd9d0203e8dcd91d0d623b187e073ac11e62e92ea76c3bb72e9e90e1a35cccd6", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["44a1978381621ea420f72e8990d0e7e3e28b43fc61e5871ce0943344d4e89fad3c52f36026a30816ab6735b4080d6faaf738c7c90a71229b6fba0ca2720305f7", "e522", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93607866517f563f914300dc56dfa5f8b2e234717fbb3f83d73d2cc5efe2ba41a0ed98b24582cbb8737e8c7220d7d498ed31f2b9f710dc34600e46a3149ab474161d7d68e31704311d4b712cdf1e1d8e79c279e23740497741197ef9bd8a24d462d629f5f2ff4b5efda05305db76ce9925e0213f8c3960aba617c7546d52b2974abc697220ad4d17d3512c24d5ae155b6adcfb044ab79ab20bd38e1e28a80464f484cbd75784e993be530d5676f8dc2ee09b64f1f32f66cdc7b4ff59c4092b7cf376ee8f8c1e1fa9aab23cd1073c3056ca33bc71f7534defd8cb78efeb53cedcb5960dbdc44debd3a9d6581183ec7e582c81ae2ba327dcd9a8a8596b9498c5442e0f6f4cf1c458df91a0afea0d2c153bcc49a5c91080076e369005eee9d0f0f929c287d66d90c4cbe9643f4dd5fab41adb0ea5f21af54c16a7905d7aa75be9e79abb756e94dd6dbf8811f581a6677dd5040b0770d6580c8a23956aee345bb51bf7e732609e0d9888e8fabb595ed61aca9adfd730b42bb4be3264e3b48daf2dfdb1dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5c02e90a504fb885b35041a93f57bf95bff975e3ce3b01edd50e093d99d3d1a7000000000000000000000000000000000000000000000000000000000000000076077fab5cfacfe0d44da24115518e7cc923cfda0846fe7d6664ce76c18ae77effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa4fbc6152007b768a0a9e0ea555589417531593915a16dcb5161fa990fe790e2193b77feb85593374d68ba2893ed797c76657c07a7c180e1e161979ce40fd06297a169906078a0293dbc950d85ed90e3a1c6acd68c7233757f5f87f37ea46f07264225bad0351757cee8fbc4204b2b1c4491d39d7192eb176f116ba4cff6f2bb641533f7966d3bc46e7b79fec79f6d1f4df0a1c250c0cacbcf443017af88329adefe7756b0306fc33d2eb0028f4ee0fdb0a1974fcf7045f05d180ebd9603c6150000000000000000000000000000000000000000000000000000000000000000136517a08a3d4af2465b8c7ec780a2358a75ad5f187b663ab087a650f574e59a37bda4a363bd5cba9df5a222a4cd106bc990d013c633cd17f3dc6a39e3467108b67086733584b7622003be83be8f789fa11afe304d7e275cc0beee4ea78d11afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe6ff2c617481b75c05b00bd34dee98a92e192ec68ab8484dff43174aea4c66a85623f05c824104f4894efaa986601a7a0a173fcdabe3bf55f33f03d6e9324c0330e981f9e9d7858cf2744234d067f7c65c2f06e45483768054a3cf417124ddf90000000000000000000000000000000000000000000000000000000000000000c857f6b8c4189b4ab1c06030d0f3bbc9d6efcf5e4be3c29626e522a27a0d0ec21df30051e5e20486210b635d36c83ff9cbad4f361067a21c9ef9659cbf15e489de0065e2010eeba19fe5ad09a950e50d2806c8000de4dbb8e5489b2204a312bdfd9d0203e8dcd91d0d623b187e073ac11e62e92ea76c3bb72e9e90e1a35cccd6", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/9de4c3db0a099c27c523988b4b750ce3ee2c0ffc b/txscript/data/taproot-ref/9de4c3db0a099c27c523988b4b750ce3ee2c0ffc new file mode 100644 index 0000000000..a35494f2e1 --- /dev/null +++ b/txscript/data/taproot-ref/9de4c3db0a099c27c523988b4b750ce3ee2c0ffc @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705f010000000381a28bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfde010000001fdee4ab01e9047600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acdbd92745", "prevouts": ["55c40f00000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "cb836e00000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51f2809a2eb594a6d82ed798bedf8d6754ddd1a8a74001a2f8f1c3cb07bb651864f3b3fb8d5121830dc5ea13d084a01bce62f4c2426ea7fcb92dda33a6ec3d9661"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93643c2517ac3ab4c9161235a0b54014a7814087b294481d246f392479809e3784cd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51f2809a2eb594a6d82ed798bedf8d6754ddd1a8a74001a2f8f1c3cb07bb651864f3b3fb8d5121830dc5ea13d084a01bce62f4c2426ea7fcb92dda33a6ec3d9661"]}}, diff --git a/txscript/data/taproot-ref/9e080c9060b0017ebfc6f81bd854014a8fc88ee8 b/txscript/data/taproot-ref/9e080c9060b0017ebfc6f81bd854014a8fc88ee8 new file mode 100644 index 0000000000..a26428c225 --- /dev/null +++ b/txscript/data/taproot-ref/9e080c9060b0017ebfc6f81bd854014a8fc88ee8 @@ -0,0 +1 @@ +{"tx": "08aca4d7028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48701000000c4c226e3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5801000000dcb7abfb040634aa00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87b5000000", "prevouts": ["5b9a3500000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81", "7dc8760000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["964c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456bbb2d2aacfa419948546f2c8aa96b4ab4a80289c3c8034e795f45f733cf7ae0b35fa22f4b25dbc3a6b67e691e1ba7f45df255baed4abd058cf23fbf36a7f21681a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}, "failure": {"scriptSig": "", "witness": ["4c5296", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b186acb2a5feb9ca494b2668e3b95b217c5b1a118ef72c41b67fce4e6b051c90eb4e626fbd1c5a1d96a595c16e39be42f50aa7a1faa8ff1a1c0cc640b6e10eb9874a9774daa89f30be275a1ff5113653dfa1548b9628ff9725cf694401ebdfe4"]}}, diff --git a/txscript/data/taproot-ref/9e0885e261051e23c61d7b6859e9c25f16f9aa73 b/txscript/data/taproot-ref/9e0885e261051e23c61d7b6859e9c25f16f9aa73 new file mode 100644 index 0000000000..2a920bd2b8 --- /dev/null +++ b/txscript/data/taproot-ref/9e0885e261051e23c61d7b6859e9c25f16f9aa73 @@ -0,0 +1 @@ +{"tx": "ce6d8fb40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707b01000000a82eaabe60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702600000000318dc6de03fb901d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e7b3b94c", "prevouts": ["945c0f00000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "65c510000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "387d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663dbae3fcd58a782f045d72728c5bacfc693bf32c12881b703312d3ef1ff344f9b60e5914c50703ee8fed26b085ec7bf74c965cec3b126e70865dabf0c3179e2a12168afdb4ef286e7748ddb08cf408d85b089f504486378d2bfb535c0d2875b"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93687eb9cd48618043924a0552f13e304cb7cf31192705149ca53d1915b0f7b733ffbb5a1fe7b9516d3f9237414125c5ee80cc77ac3c2791cf19c93edd24acc7f158fa601fcc68a78472d280e0a6f10ace0c22dad9ad93c154f995d1132d7b2f793"]}}, diff --git a/txscript/data/taproot-ref/9e533595a0cd03757f4ce00ca1a54a38453f6274 b/txscript/data/taproot-ref/9e533595a0cd03757f4ce00ca1a54a38453f6274 new file mode 100644 index 0000000000..324498bdfd --- /dev/null +++ b/txscript/data/taproot-ref/9e533595a0cd03757f4ce00ca1a54a38453f6274 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0f020000000b347dcbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9800000000d4e7428104d53da800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79686010000", "prevouts": ["17065400000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f", "71505600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "187d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faec2668268b08b6c5058ff907ef397af6488febb6d6ea42f9f262b28546ce31faeb0356d5dc7bb189d5700ce63be65cd47bafc75bda640418bb3b77b52e492b0f"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936de248b3259490a8f0e1d30062da8e3e2b08bcf3de85e2266d4c4622ab2525e61ec2668268b08b6c5058ff907ef397af6488febb6d6ea42f9f262b28546ce31faeb0356d5dc7bb189d5700ce63be65cd47bafc75bda640418bb3b77b52e492b0f"]}}, diff --git a/txscript/data/taproot-ref/9e7cd3ed8c99ea2f99c6c55da41e1a2e4c56fb9b b/txscript/data/taproot-ref/9e7cd3ed8c99ea2f99c6c55da41e1a2e4c56fb9b new file mode 100644 index 0000000000..4cbe7798f7 --- /dev/null +++ b/txscript/data/taproot-ref/9e7cd3ed8c99ea2f99c6c55da41e1a2e4c56fb9b @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270490100000013ecb1ea8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47c0000000014f64124025d7c40000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acbaacd11d", "prevouts": ["250d100000000000225120a2880b97adcad5e9d951ecbfc4186ac77c307365c746cd6918dba256e34886ce", "13f6320000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "success": {"scriptSig": "", "witness": ["4a4b60f20052e77fa5e17f0f78dddc61af17054366c298978de230333c885d93e95ab6a8134b6e7e9cb1b4967a308ddaa357d787584eeb620ab20a1b7dc360da", "1cdd65e76f83b2dbab7e250b2b2af8db0a04726cb392d0f232516ae3cb68d014541ca3e63a447e8ff52eadf4aa201210c9f4711964c5b663c1a633fda71af67135d709f832b51f284909e49d2ce464c05e80d69dfcbfbbcd3eb0429fa09140d70c35cbf1c1564970f3c71486e86ab5f9d1b88ec50ec8760fa6024695f1605f0568f69217dafd2f0858a37463081bccc4b6693d6b6062de223bef28b5f72e590fa6efa8ff7a3b2e3362062453cbab08e85f5772ce7f2275f3c178f4ed2ec31c588d372e2f02dbbd22a422f0c4fb450884b715e3703606a48f075628ce7e2d41ee63271e84e58d68", "750442c441325163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936038317a9484741889b65c6c22a4d2befdac9a678d76b2139ff47cbccdabce0b075f9de8df9315d179ab13788a9f0a51aed124e9640fe933e0f2dfcd9ba53c650631439ea9479dd43966b5504a57521f1af14b4790d111c4cbcdaaa06b43a1d2c2d818ae92a6038e6df4e77267968ceb432b81fbab4ebf89d2a9e818069d61c087f36f6b993284bd299bca34b1a11009a2ac5385792b05da61d3dca9472536a2e8a47e91632c7febab8b31522c67292f5f625403fe8973fcc5108275eedce267860a161f6a6fe54f76f5ad160876535005425790db445f57b5b3831be508169355c76d28e8ad9d664eb67c41e2e14329e89b79108abfd032672d949297150b8f4fad6d628b62d3fbdf07582a7284e2e3d85250a63e5900c1526f9548cdf96a93b00000000000000000000000000000000000000000000000000000000000000009191506396eb586b31c9d87517b8792c8c3a17034bdc0d3961fc908c8159255b6c6a9bb578cda592892c253df30cdab068ec7aa209c413ca97183e14518fb3db003c5eabb59dd96d3a7f84b7c8e277eb49c48b1a9a0e3e47a50aab828286fe23aee95ca313d50c59641d7142d949b6098ced445b5b01f5d1c99d703db933e1ac604b6ddef78cd4c47ce10b866e3efad318d59660191e471bdd2194bf328a62fdbad3e00dd4963ade259ff5db3df42dbcdffe2ac5e1c22e0b8fa89e5042046e0f0000000000000000000000000000000000000000000000000000000000000000f787ccd98da746b19981235e716eef61efbb45eb09898bffb9102775e17e4ab71525f4431581d1859a3fe28dda84a8e05ece074e1bf73eff9ae9ccc8bdd119dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e3016f9f9f0caac60190d697ecbad2ea23264a15326ccee406c1d2debcd99bc1519e7f5286023b9d9ada950a832a7c6c497f1195f9c9700e4cc3b0d7652c08d95a8bbc6a44f965eff8b9ad39018af091fdeeb7dd381382eead642930f8600db152a61b9c3d06841939315c14abd28633038ec8d28f77e12ea8001c7cd16a079026b531cb72704102c66830c4be1fdb7821c7101f6dbad3ace793033b347a86015975080c91c305bf53061e64a4e3fcfe157dae50046d86486c5285ef3ef4d15508fc2b4f97f5096ef799f97eba0a39cdffa8d74567559c66fb0dfedac41173046eb626bc5e88b8a1186b7493a9566b7438856599dda96bc4b06349dd58a6795000000000000000000000000000000000000000000000000000000000000000016482ce883d75875f9b58c0c52203dd0094428e1080c20b1909393fbf3ab3915249fd5c976b4b439c8e999d18122f1b3819ccc62e4f184826aa80ec2fc633f967b64d246947cd5a4e73b402db89139cdfda66f8a53440ed6f62dd8f19c1de714f27197236c1b61553e78131a4eb06ca345c24328ae271b4b92a999637123f13683bed5fcdb5e2736f2bd04ea49d7a09a01016aa4b975c7149b1339984f2c4da19ed4eefef6001b5fe776689838adeb4b94263f0a13eaa636ec29ad664ac03f17ec14fa631165009ec4cfcc06ddafc5728535436fefbc34bdab735cd9fb07f81c0000000000000000000000000000000000000000000000000000000000000000cede8a0759d10e57ac431416240020aa1041d88dc5ea25e80beb4f813b948e10ffd2f236b14bd8ae5fffea290c7f6185094e436a0c3c12682fca2d542c6b54d7b26dee6de2be63b3c5cd0d3732c9a3b1a936a016dfb69ec3deba56a3997d7fae30db2a65025e8a47c9c537ae20a4510e816bda13bed12168abfa5de2cfd710c6b843a456cedae9a8c041b3f3d24a12964af86793708450f7f964b4773be4de7f76699a2b09f0d63ecc32afbd3e7e093edc892989190f778e643d8fb47172861c60abc276ea1f64dec42f37feaad848a37b07bcecafa2a30df41080bcca811fd200b7ffc88f1611bdbd0b157f033263a58e491f31ba4d6c0a94f3dfea301e91e300000000000000000000000000000000000000000000000000000000000000008dfe6489bf48f6d3f6631088c12e0b1dfdf29904b6b58d73d3a36ddb3ead01fce7eb01e964bc836fee76a110cb4b53e79e3494aee516c5debb8f7e422ee40276eba6e7d9981f508979fe7fece1ea94f6471faa57b9851a679674b6802778e2c64bbb27ab0758dc5dc51ed0b395e80d9ea5010146aa1438592554d041de1dad617f84c15d0d8a058d7a255bcccd7b29b0e05ce4f3a77399991ade7ec24513d47e493a2155b7efbbcefdc64ada9767566bd2e635610831ed7793409a224e3c634dff075fccb2ffc6270452d3d19b29c42ec59fa6d222f8dcbdbd13a4587007460f8bd4004f2eee7c0f550c29ef21f56fe0f3143417d6799079eb8081169d49cb6e60eec5824bfbe4510df2c33a7ab8bc9066a1686f6e046c63799ce91404f2b3f2e090cd534e843476acb5c7221f1ebf96d617251741dcac6370179580f62c881562d3723e0b1997f3f2c1e6459aaa9aefad842a5eaf0ca86aa0e1fa1ad8c44403c97616d6c4573e9538b9da4fe42e00326fd178df218f0915d2ee0d7f31aa42472d4a415b09b6c465334a1de7425c93db2bb0a0a31bfacf7914c05df1d44c13cea886b4074c506ea43a458508c06f5d2e09d0a634ff24643fd2732d0c0ce608bf4418568e5f4dc4d9c10cc7f51535fd9506e57fac47f6538778f470188b3092b70000000000000000000000000000000000000000000000000000000000000000d451538220b62b15eb837dde746a548175548de2e34828d6c3e21b46a140c64f5af24904a3770e347b475bcd37e69f01bccb44cb672cc2e091edba220307c2b9a35d310fb7880cedb5aaa258873bffc03b1728c981367fab4bde83e8013cc2a131ea937cc9d462877bb7cc8a698eca9df5243fc292d919436388a67a97fc36c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b3d2f9bf76b5e7f269099f19bfc11d67ffdb0f7d81dff8f85af90095347da85ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff904cbccfc2fd8552081cc9d94479f68f56bdbd8ca0e764a0473c53832929347a70f725975d16a543bff6e6429387999df01469893c61678a855a421415b277355960e2acb4d1f4ae8e93692c69cc178531bcb90543b69dbe8ba75e4c2f794ff8dcc2ea513dc34c35fe0662f48cf0c473a7433d5a789d39a21df5cc77e502999d7944f53d7474a42d645e2eaf665493201816057f307ff181c9513d9b81c6afff7c244780df2b822c8603ad8b7c5c2cd394f61ccda89559f17ab7adbdb38938fa1e0586a1d0b87ff795c835f64e99b11e3165df8b2d0e90a4227af6576ec0fe044887ffb3aac40ba5988059b4d32fe8b1f721235c644c6d4e895cad48b4ef152effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7b7b8b85b0c5df1bf94a8ed42d63a20d5ab7873b62dce2a4b7e0fe75ded19f6bc50997156d6b6a43003b4b097de50b426293a49ef32d20b4cf4aa10e1f9f6a33b75f1d24542de0ef4dc28aee12be2e13407198faf5d6c1701201382d3cc694e6b91628552a7e4a3a47bb7fdfe1fa5d6ee6a914f73e3ad93d0d2ea5b18f89cf9012d68f6ae7d50ef18a65911259e28b70a2ec9edd99be44f2742848de01c1139d4fe4fe128396b3c16521cdac94dcd5758b5c1e3d847d392b5673519e9be3c8f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3e392f4165719c3fc591a221a18cd76d487a20aacb1f6eb5e90f6e3fcb603b2bd968e26e2bb195b9a749657edf13ab8034a5591d809ec65349a77b352235266eedbbed849fcd5cd85dabecac8a0f95060c63a2591a9c4c30e6fc2f681dad4034ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff496e6e91cb7cfdf79d57bfb33739f04be4206abd598eef2dbcd30502e8d8fcb608d0eff949b55a8d3acf725a10096ffa528dac1425cbe77e0767d9f70a4f297c8d419cf1db45d736321fe436422c91188d6293034a6ef69090da00ee0c806d6205128635787105ab2fbb65c2f9cd90518c50a19119ffa61d88eed3fb3567028dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33b53f64cc5b42f98e6a545543ae061b4447e606f29d2b330878531c757faae2bbc521c511e5a977f87e050b7e2483faf1f07f1ef31bdbb96e9f15ef77632ee8a395bbd3c906994aeba0c198d7ebe1bc11370c12204f5ed90f396b299f361b7debe005232c9eb4d2149e0a8f861061b6da21fbcb4266037053e9d88ef930fa28000000000000000000000000000000000000000000000000000000000000000035eb9ff40d576cbbcccc148c325fb4511c3513f3e9fa22642ca8437988eb18e6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b5682ffdef1554936f423a87dac08d9c81b23529a58291f655ce958a51e043bba149b5315d1b32fc5ec2f3a3215c12b34df9b5127478e70245ac1e45097ae37014bc7665b5a987f8027c6fbe028e975157cf00a9a0d04d52c9b20f4b16e62d075e9c384c0cced8236246496f61292392b7e0d94e06bdf63f85438c95ad4c2e", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["4a4b60f20052e77fa5e17f0f78dddc61af17054366c298978de230333c885d93e95ab6a8134b6e7e9cb1b4967a308ddaa357d787584eeb620ab20a1b7dc360da", "a2d563c755f3de1f62a1eb8f1445f638642861ea23334cf6739ac5cf9e0715143d7a56b2ef9061d75fdd6196cbb0d17b7eb340d4c6baca0b7666b1a64fc044a9046f821627862a198129a3006a64d2fb798262b9602a218fe96933bed19ff85b860fd0e21cdb6987770f925f32fcada1634785cb47e35f52ed654ae731d1328cc18787cd2059e8ac65e9b0bccb6bbde5c6c7ceaa163fbf996429ccdf8bbcfad702faa2273483d2226ed91b972b97f05716ea26c03e32075d44a258371e918a4bd70e7139061b49bd68ec8cebcefeee0c248b5d0b3f7d2c35b63673be07350f49af6e8843c74a", "750442c441325163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936038317a9484741889b65c6c22a4d2befdac9a678d76b2139ff47cbccdabce0b075f9de8df9315d179ab13788a9f0a51aed124e9640fe933e0f2dfcd9ba53c650631439ea9479dd43966b5504a57521f1af14b4790d111c4cbcdaaa06b43a1d2c2d818ae92a6038e6df4e77267968ceb432b81fbab4ebf89d2a9e818069d61c087f36f6b993284bd299bca34b1a11009a2ac5385792b05da61d3dca9472536a2e8a47e91632c7febab8b31522c67292f5f625403fe8973fcc5108275eedce267860a161f6a6fe54f76f5ad160876535005425790db445f57b5b3831be508169355c76d28e8ad9d664eb67c41e2e14329e89b79108abfd032672d949297150b8f4fad6d628b62d3fbdf07582a7284e2e3d85250a63e5900c1526f9548cdf96a93b00000000000000000000000000000000000000000000000000000000000000009191506396eb586b31c9d87517b8792c8c3a17034bdc0d3961fc908c8159255b6c6a9bb578cda592892c253df30cdab068ec7aa209c413ca97183e14518fb3db003c5eabb59dd96d3a7f84b7c8e277eb49c48b1a9a0e3e47a50aab828286fe23aee95ca313d50c59641d7142d949b6098ced445b5b01f5d1c99d703db933e1ac604b6ddef78cd4c47ce10b866e3efad318d59660191e471bdd2194bf328a62fdbad3e00dd4963ade259ff5db3df42dbcdffe2ac5e1c22e0b8fa89e5042046e0f0000000000000000000000000000000000000000000000000000000000000000f787ccd98da746b19981235e716eef61efbb45eb09898bffb9102775e17e4ab71525f4431581d1859a3fe28dda84a8e05ece074e1bf73eff9ae9ccc8bdd119dbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7e3016f9f9f0caac60190d697ecbad2ea23264a15326ccee406c1d2debcd99bc1519e7f5286023b9d9ada950a832a7c6c497f1195f9c9700e4cc3b0d7652c08d95a8bbc6a44f965eff8b9ad39018af091fdeeb7dd381382eead642930f8600db152a61b9c3d06841939315c14abd28633038ec8d28f77e12ea8001c7cd16a079026b531cb72704102c66830c4be1fdb7821c7101f6dbad3ace793033b347a86015975080c91c305bf53061e64a4e3fcfe157dae50046d86486c5285ef3ef4d15508fc2b4f97f5096ef799f97eba0a39cdffa8d74567559c66fb0dfedac41173046eb626bc5e88b8a1186b7493a9566b7438856599dda96bc4b06349dd58a6795000000000000000000000000000000000000000000000000000000000000000016482ce883d75875f9b58c0c52203dd0094428e1080c20b1909393fbf3ab3915249fd5c976b4b439c8e999d18122f1b3819ccc62e4f184826aa80ec2fc633f967b64d246947cd5a4e73b402db89139cdfda66f8a53440ed6f62dd8f19c1de714f27197236c1b61553e78131a4eb06ca345c24328ae271b4b92a999637123f13683bed5fcdb5e2736f2bd04ea49d7a09a01016aa4b975c7149b1339984f2c4da19ed4eefef6001b5fe776689838adeb4b94263f0a13eaa636ec29ad664ac03f17ec14fa631165009ec4cfcc06ddafc5728535436fefbc34bdab735cd9fb07f81c0000000000000000000000000000000000000000000000000000000000000000cede8a0759d10e57ac431416240020aa1041d88dc5ea25e80beb4f813b948e10ffd2f236b14bd8ae5fffea290c7f6185094e436a0c3c12682fca2d542c6b54d7b26dee6de2be63b3c5cd0d3732c9a3b1a936a016dfb69ec3deba56a3997d7fae30db2a65025e8a47c9c537ae20a4510e816bda13bed12168abfa5de2cfd710c6b843a456cedae9a8c041b3f3d24a12964af86793708450f7f964b4773be4de7f76699a2b09f0d63ecc32afbd3e7e093edc892989190f778e643d8fb47172861c60abc276ea1f64dec42f37feaad848a37b07bcecafa2a30df41080bcca811fd200b7ffc88f1611bdbd0b157f033263a58e491f31ba4d6c0a94f3dfea301e91e300000000000000000000000000000000000000000000000000000000000000008dfe6489bf48f6d3f6631088c12e0b1dfdf29904b6b58d73d3a36ddb3ead01fce7eb01e964bc836fee76a110cb4b53e79e3494aee516c5debb8f7e422ee40276eba6e7d9981f508979fe7fece1ea94f6471faa57b9851a679674b6802778e2c64bbb27ab0758dc5dc51ed0b395e80d9ea5010146aa1438592554d041de1dad617f84c15d0d8a058d7a255bcccd7b29b0e05ce4f3a77399991ade7ec24513d47e493a2155b7efbbcefdc64ada9767566bd2e635610831ed7793409a224e3c634dff075fccb2ffc6270452d3d19b29c42ec59fa6d222f8dcbdbd13a4587007460f8bd4004f2eee7c0f550c29ef21f56fe0f3143417d6799079eb8081169d49cb6e60eec5824bfbe4510df2c33a7ab8bc9066a1686f6e046c63799ce91404f2b3f2e090cd534e843476acb5c7221f1ebf96d617251741dcac6370179580f62c881562d3723e0b1997f3f2c1e6459aaa9aefad842a5eaf0ca86aa0e1fa1ad8c44403c97616d6c4573e9538b9da4fe42e00326fd178df218f0915d2ee0d7f31aa42472d4a415b09b6c465334a1de7425c93db2bb0a0a31bfacf7914c05df1d44c13cea886b4074c506ea43a458508c06f5d2e09d0a634ff24643fd2732d0c0ce608bf4418568e5f4dc4d9c10cc7f51535fd9506e57fac47f6538778f470188b3092b70000000000000000000000000000000000000000000000000000000000000000d451538220b62b15eb837dde746a548175548de2e34828d6c3e21b46a140c64f5af24904a3770e347b475bcd37e69f01bccb44cb672cc2e091edba220307c2b9a35d310fb7880cedb5aaa258873bffc03b1728c981367fab4bde83e8013cc2a131ea937cc9d462877bb7cc8a698eca9df5243fc292d919436388a67a97fc36c9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6b3d2f9bf76b5e7f269099f19bfc11d67ffdb0f7d81dff8f85af90095347da85ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff904cbccfc2fd8552081cc9d94479f68f56bdbd8ca0e764a0473c53832929347a70f725975d16a543bff6e6429387999df01469893c61678a855a421415b277355960e2acb4d1f4ae8e93692c69cc178531bcb90543b69dbe8ba75e4c2f794ff8dcc2ea513dc34c35fe0662f48cf0c473a7433d5a789d39a21df5cc77e502999d7944f53d7474a42d645e2eaf665493201816057f307ff181c9513d9b81c6afff7c244780df2b822c8603ad8b7c5c2cd394f61ccda89559f17ab7adbdb38938fa1e0586a1d0b87ff795c835f64e99b11e3165df8b2d0e90a4227af6576ec0fe044887ffb3aac40ba5988059b4d32fe8b1f721235c644c6d4e895cad48b4ef152effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7b7b8b85b0c5df1bf94a8ed42d63a20d5ab7873b62dce2a4b7e0fe75ded19f6bc50997156d6b6a43003b4b097de50b426293a49ef32d20b4cf4aa10e1f9f6a33b75f1d24542de0ef4dc28aee12be2e13407198faf5d6c1701201382d3cc694e6b91628552a7e4a3a47bb7fdfe1fa5d6ee6a914f73e3ad93d0d2ea5b18f89cf9012d68f6ae7d50ef18a65911259e28b70a2ec9edd99be44f2742848de01c1139d4fe4fe128396b3c16521cdac94dcd5758b5c1e3d847d392b5673519e9be3c8f1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3e392f4165719c3fc591a221a18cd76d487a20aacb1f6eb5e90f6e3fcb603b2bd968e26e2bb195b9a749657edf13ab8034a5591d809ec65349a77b352235266eedbbed849fcd5cd85dabecac8a0f95060c63a2591a9c4c30e6fc2f681dad4034ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff496e6e91cb7cfdf79d57bfb33739f04be4206abd598eef2dbcd30502e8d8fcb608d0eff949b55a8d3acf725a10096ffa528dac1425cbe77e0767d9f70a4f297c8d419cf1db45d736321fe436422c91188d6293034a6ef69090da00ee0c806d6205128635787105ab2fbb65c2f9cd90518c50a19119ffa61d88eed3fb3567028dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff33b53f64cc5b42f98e6a545543ae061b4447e606f29d2b330878531c757faae2bbc521c511e5a977f87e050b7e2483faf1f07f1ef31bdbb96e9f15ef77632ee8a395bbd3c906994aeba0c198d7ebe1bc11370c12204f5ed90f396b299f361b7debe005232c9eb4d2149e0a8f861061b6da21fbcb4266037053e9d88ef930fa28000000000000000000000000000000000000000000000000000000000000000035eb9ff40d576cbbcccc148c325fb4511c3513f3e9fa22642ca8437988eb18e6fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5b5682ffdef1554936f423a87dac08d9c81b23529a58291f655ce958a51e043bba149b5315d1b32fc5ec2f3a3215c12b34df9b5127478e70245ac1e45097ae37014bc7665b5a987f8027c6fbe028e975157cf00a9a0d04d52c9b20f4b16e62d075e9c384c0cced8236246496f61292392b7e0d94e06bdf63f85438c95ad4c2e", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/9e94137b564120169fc22f85678cc20df3a1128c b/txscript/data/taproot-ref/9e94137b564120169fc22f85678cc20df3a1128c new file mode 100644 index 0000000000..dfa8148b56 --- /dev/null +++ b/txscript/data/taproot-ref/9e94137b564120169fc22f85678cc20df3a1128c @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdb000000005eaf85bf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e0010000001162e7efbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9701000000c3c69fd004347af5000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac82745761", "prevouts": ["612151000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "c6b8340000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "f439720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_fc", "final": true, "success": {"scriptSig": "", "witness": ["853d42ba217ade276bec4bea9889ac9bc09bd83ccd2a574c1ec175793897451a023b7a3dd01ff5bdebe81973ca7a3aa93c82eb4c451744e825ae82138795337a81"]}, "failure": {"scriptSig": "", "witness": ["2197770bd3e8af3068f5b727a940172231dabd48c25a549f8fabdbf7849cb03d66ef506ec44d013bee39596e01a81a55d1712dfc9969d7cc6b04e92a8a2f5e1dfc"]}}, diff --git a/txscript/data/taproot-ref/9ea50ae0758462d0e77fe1397a5af6f83ad15f39 b/txscript/data/taproot-ref/9ea50ae0758462d0e77fe1397a5af6f83ad15f39 new file mode 100644 index 0000000000..526eef44c4 --- /dev/null +++ b/txscript/data/taproot-ref/9ea50ae0758462d0e77fe1397a5af6f83ad15f39 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0d01000000ccfbefbebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6000000000dc712be3025d9193000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5db0833e", "prevouts": ["4dd627000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "bd686e00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["cc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4c890db8e530b3b97e91b56063afadbbd8e6ac326e3356562c0a5ff1591f041d611c8e78922f12cf5b391747592eaf9e84d545161f4f09ddc8c51091bc04ba49d4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9132ef9050946e44b1b7e4a7390d57682430e3f2d85fcffb45dfde53ebbf6533b9ff415677aca4bd8bea8fa89699624d8c5f018d44ea89c1d7716b3c6d0480766d64d66e5a8ef59726e977ff218232e5171732e5d132f479dce590bd8ea056135478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}}, diff --git a/txscript/data/taproot-ref/9eafe1e70dda380dee958b8ae1138ab758f76857 b/txscript/data/taproot-ref/9eafe1e70dda380dee958b8ae1138ab758f76857 new file mode 100644 index 0000000000..62b7a4b8fe --- /dev/null +++ b/txscript/data/taproot-ref/9eafe1e70dda380dee958b8ae1138ab758f76857 @@ -0,0 +1 @@ +{"tx": "47c0016f0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700301000000248adfaddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca601000000923ad6d7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb500000000bc64099104f8507b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72f050000", "prevouts": ["71151300000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "c3c7480000000000235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "db32210000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["3f60ee6422cba2535462f4db96604e19e6933f9ddc844f2cbae9020787628186d28d2d4a69e121e342ddc673acb66f074bc82c6bc9cc69c5bd04dbc197acfbd0", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/9ee645ca92c85ae4515e7e01d35579bbc6cb046f b/txscript/data/taproot-ref/9ee645ca92c85ae4515e7e01d35579bbc6cb046f new file mode 100644 index 0000000000..7325539ad4 --- /dev/null +++ b/txscript/data/taproot-ref/9ee645ca92c85ae4515e7e01d35579bbc6cb046f @@ -0,0 +1 @@ +{"tx": "232bcb1b0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a201000000a1df09d060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f201000000b8a452ae04e91d1e0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87b413c54d", "prevouts": ["175e0f00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "f6db100000000000225120c230ba0a2d20add5df8769fc65d7fc3a12d7cd95ad679e3207a6c75325eb884e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f369480f07347d294c5ec55b6a8cae19a0490f895004383b3ec97d49c181391a"]}, "failure": {"scriptSig": "", "witness": ["6a2c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/9efceb8b8d6841f20ca0f194b19427087f5a97ea b/txscript/data/taproot-ref/9efceb8b8d6841f20ca0f194b19427087f5a97ea new file mode 100644 index 0000000000..208e66cd89 --- /dev/null +++ b/txscript/data/taproot-ref/9efceb8b8d6841f20ca0f194b19427087f5a97ea @@ -0,0 +1 @@ +{"tx": "a16810340360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270320100000001d67dfb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701a00000000ce8a8e9e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40601000000d70e389401384e260000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79622030000", "prevouts": ["40320f00000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8", "2701120000000000225d202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "41d2360000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "437d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e83b3e543c1be24a694e5b6685838ec47a730681350c8079fce99319dc90d9ab403d8f160074737ef82cfbb3f905f5039c6634e29d53352416ee52711c9b5e3cc1cc59ecfca53d850b1637d6273d8700d7dc702fb5baeba7c0d1778aadee75959b"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365897004e5f672ac93567f286623682ce4a0a35c34d22bab90c872b273d023f79eb1e69b2064177327a27f356e828bc3139f73429a3608cb2420b3294d8fc1681cc59ecfca53d850b1637d6273d8700d7dc702fb5baeba7c0d1778aadee75959b"]}}, diff --git a/txscript/data/taproot-ref/9f0427c58e85128c73cd97a9ba41519871d70331 b/txscript/data/taproot-ref/9f0427c58e85128c73cd97a9ba41519871d70331 new file mode 100644 index 0000000000..288a041d16 --- /dev/null +++ b/txscript/data/taproot-ref/9f0427c58e85128c73cd97a9ba41519871d70331 @@ -0,0 +1 @@ +{"tx": "00b76927028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4250100000051bf30848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c20000000038c234a6029a2a6e0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76c020000", "prevouts": ["61da3a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "77cf350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e0", "final": true, "success": {"scriptSig": "", "witness": ["35540c96d2bfcca0452351ba875b59e83ab1f4d5d0fa61dc4ed7ed92b4093546ba99177546d6cf56947268693dfdb10fd157965ad74192149732ea5f85c2b81183", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["34d491b130dcb0ae19d2353fbd64025d920e705161fdf0b754baf6a5b03b973c268c756e206c3a1f773d3ddc6e1c388ff03ae03cc386f617bf060655d0aca78ce0", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/9f07a530e3bc65a6d0a8da0a8ad697b5dc9ab202 b/txscript/data/taproot-ref/9f07a530e3bc65a6d0a8da0a8ad697b5dc9ab202 new file mode 100644 index 0000000000..9ad3cb0a2f --- /dev/null +++ b/txscript/data/taproot-ref/9f07a530e3bc65a6d0a8da0a8ad697b5dc9ab202 @@ -0,0 +1 @@ +{"tx": "4fe15df402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c790100000077a4d0f7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1801000000465f338e022e7dac00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac43000000", "prevouts": ["f92b510000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "5e795d00000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "437d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362c503a4390cea1e1efd273895e3e36c6de149914d80a97a30106137d896fa43dd9a73345c989c90f21221bc9fa2fdbe5d62b34ad323157a62317cd84046f2af72db79fc77699d349d3583c063c1ca5cb78d93faef419ab336fa45db1a25ff641"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a84e311995f98367a2a93ed7b61478a76d5defba7ed050312f02844091a9eaa94274b5900613cb2e14ccbb49f92be42e903262ce34f92c4d0a103e0ecbbdfe862db79fc77699d349d3583c063c1ca5cb78d93faef419ab336fa45db1a25ff641"]}}, diff --git a/txscript/data/taproot-ref/9f0aaa42e73656b0fce8443aea84266d564470e9 b/txscript/data/taproot-ref/9f0aaa42e73656b0fce8443aea84266d564470e9 new file mode 100644 index 0000000000..40449f7893 --- /dev/null +++ b/txscript/data/taproot-ref/9f0aaa42e73656b0fce8443aea84266d564470e9 @@ -0,0 +1 @@ +{"tx": "4b419ba103bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe30000000088c28bd08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cb00000000ab5264a260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709f010000009807c48504d038ca0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d33e7c40", "prevouts": ["2bbf7d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "af753c00000000002251204b9049d3a4bee03b6d234dd4c8f499fa4ef0a49d04247a5113735801c2defee0", "5551120000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368f473022b83f4d732c0de08884fc6e64a6a991aee44950e226c71d5763f7c410"]}, "failure": {"scriptSig": "", "witness": ["6a73616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/9f1fe443098130f838ce7d5c1460cdc0f13bb12e b/txscript/data/taproot-ref/9f1fe443098130f838ce7d5c1460cdc0f13bb12e new file mode 100644 index 0000000000..b1ded70f7a --- /dev/null +++ b/txscript/data/taproot-ref/9f1fe443098130f838ce7d5c1460cdc0f13bb12e @@ -0,0 +1 @@ +{"tx": "d4ff116302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0900000000f64f3be68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c482000000007d0525a00173622a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796d17e085c", "prevouts": ["e5b54d000000000022512074d6c61045a03724ef8fd881d073e11ff568ecf53a923220aba8b11cef73942c", "fb75340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_9c", "final": true, "success": {"scriptSig": "", "witness": ["802a42ae5675834395947fcb3301ea27e1f88de1c06305b5e411769cc3eb0f7e6aa758fee41cb45d165baada061ef4f9ad04c228c39304ceb2cde313b177aea602"]}, "failure": {"scriptSig": "", "witness": ["0355d69a42e370d45f177be489afefe75cf14be29e730dfc681d2c9b39dd86de1be6d1b5e5a13e8724d662a1ecebf029a01d9f93ab41eaf4dda7039e1b9bc8f99c"]}}, diff --git a/txscript/data/taproot-ref/9f282d2e013696b3d63d9269bf869f906bd8cef4 b/txscript/data/taproot-ref/9f282d2e013696b3d63d9269bf869f906bd8cef4 new file mode 100644 index 0000000000..30d63cce3b --- /dev/null +++ b/txscript/data/taproot-ref/9f282d2e013696b3d63d9269bf869f906bd8cef4 @@ -0,0 +1 @@ +{"tx": "40d9dd910260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cc0100000012faedd7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3e01000000bdce0ea40285d78d00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487a77b7a2b", "prevouts": ["2dc31200000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "55a47c0000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "947d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823ee723c85209fe64e13625f9e221aa1a5a0132ad156eaddb44490f9df3bced660235be472b05f11e998cd7dc8896eb16b23bac01933cdabddca8bd45937e3454"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cd5c5526e8b6e5bba0b8549e6c10fc917e32634749acd6fe76e24f40621e4ab46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa7085091e7b587d9e3d903161356c0634077d7e43e5aac1c0c25d5c3c805eac670235be472b05f11e998cd7dc8896eb16b23bac01933cdabddca8bd45937e3454"]}}, diff --git a/txscript/data/taproot-ref/9f78e819952e56d7b1961320d611fdc489b34e51 b/txscript/data/taproot-ref/9f78e819952e56d7b1961320d611fdc489b34e51 new file mode 100644 index 0000000000..6369115253 --- /dev/null +++ b/txscript/data/taproot-ref/9f78e819952e56d7b1961320d611fdc489b34e51 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ed01000000980d4ec98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40a02000000fb01bfe604d937760000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48738fdec36", "prevouts": ["e7e9370000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "685f4000000000002354212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "f87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367d28bb4086bcad3c01f7529c578d8b63b0b6c407c08968e5bfbdcc4c6df9aecac194f5b64ca7905ecbca48e3f65ecb2f68dc17df34a907a9e0813d7f728c588e9e87f1230a4dffa49f76a6d91b3ffe7dc371ffdd064326b56030bc36a92eabd9a0f16f4cfe8b052d74bbe565102becb5d9831a57baf41b6ebc95ac4a46ff7ed8"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e9b3730ae0e9b8e06af6fa3903dd842ff49b91f4387036eb6432f756cbb46a1de5422b6de6500db2bf907e4c5314ebb405475f57406f25afe5ac62a92a9e6c58b"]}}, diff --git a/txscript/data/taproot-ref/9f9bfc59905231b990a2d55faaa21a4cf26c8781 b/txscript/data/taproot-ref/9f9bfc59905231b990a2d55faaa21a4cf26c8781 new file mode 100644 index 0000000000..b1068a843e --- /dev/null +++ b/txscript/data/taproot-ref/9f9bfc59905231b990a2d55faaa21a4cf26c8781 @@ -0,0 +1 @@ +{"tx": "f43d36db02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1700000000fe6134a060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270be010000003e5d2c98033b5d8b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac2b000000", "prevouts": ["170b7f00000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989", "32960e00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "967d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fc1eee9341b55b342bc880e6adbdd53cdc9613ecba777072f7bcad421f4395212729135af56592d99186c3f010fd31ebf46aa180b9496740b245c4ec874c834ddfa3c45458ee21e782394432ca1779912e92f35e0ff52c3985a5265a8dee58b3654e31a1d81b19a8c2670362b3a1330b2f2d66c8db1c8314023a61983d2ff610"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936aab9624243e0b9e984d7a536e29f62b11f4b6f668202918f5cad885cf8171da63f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bf86d7708a8015fd8c392d5dfda539be3c55b3d42b83ba5bec57bef080407e280ad15d5ff3e747c4643a2e7779e2cae74c1db700bc0de7d47935e7ffa6ea968f"]}}, diff --git a/txscript/data/taproot-ref/9fd2c2accbc395448a7b5d7d8bcafd190ce329a7 b/txscript/data/taproot-ref/9fd2c2accbc395448a7b5d7d8bcafd190ce329a7 new file mode 100644 index 0000000000..9d3a8c1b28 --- /dev/null +++ b/txscript/data/taproot-ref/9fd2c2accbc395448a7b5d7d8bcafd190ce329a7 @@ -0,0 +1 @@ +{"tx": "4b419ba103bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe30000000088c28bd08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cb00000000ab5264a260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709f010000009807c48504d038ca0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d33e7c40", "prevouts": ["2bbf7d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "af753c00000000002251204b9049d3a4bee03b6d234dd4c8f499fa4ef0a49d04247a5113735801c2defee0", "5551120000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/codesep_pk", "final": true, "success": {"scriptSig": "", "witness": ["5164a501ab32e15e9e3c23adadff22bc621cc2941d2556b87b03a508ebcedf186b1452f373101e87165c0e90b925b2d6a2d4504ec6df161837fe6ffdf88a89a601", "ab04ffffff7f20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba05000000800087", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da6cc091e0a8cd8c992defa26813cb6b91db62f9622e0f05cf39923c26861d57bac00967532285e5651a233a5d3d97b0c986d2b78702c704bc34e0fc184218be"]}, "failure": {"scriptSig": "", "witness": ["9b67a30061f0a5c1986b1876193bf412b442c91cfc03ca8a1ebf0eb10c08a58f9311887d9d686725e982104112362571b923525bde686102f6f12be796bfa69f02", "ab04ffffff7f20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba05000000800087", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da6cc091e0a8cd8c992defa26813cb6b91db62f9622e0f05cf39923c26861d57bac00967532285e5651a233a5d3d97b0c986d2b78702c704bc34e0fc184218be"]}}, diff --git a/txscript/data/taproot-ref/9fda11dcb9654da892e82b6566c4aeab962c8278 b/txscript/data/taproot-ref/9fda11dcb9654da892e82b6566c4aeab962c8278 new file mode 100644 index 0000000000..2fb24ec291 --- /dev/null +++ b/txscript/data/taproot-ref/9fda11dcb9654da892e82b6566c4aeab962c8278 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c71010000004ff55bce8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45000000000c0c2d20502325f8a0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac3b000000", "prevouts": ["c9644d000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787", "75c53e00000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "96", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ecfde006308150423bef8aa56b6413bd3f073574ad71e6210b8ed31bba8cafc4eb4e626fbd1c5a1d96a595c16e39be42f50aa7a1faa8ff1a1c0cc640b6e10eb9874a9774daa89f30be275a1ff5113653dfa1548b9628ff9725cf694401ebdfe4"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362fbabb5db73937a530b9f0def2837a539507418901e7622f5d905eab1607cdfc1bdee2e16a63898e861f6346f98a8f5f2a90fe2be47e52912f18205e56fa5c07b35fa22f4b25dbc3a6b67e691e1ba7f45df255baed4abd058cf23fbf36a7f21681a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}}, diff --git a/txscript/data/taproot-ref/9fe5d577717a9a11e4740f29f231fa15b9f4d01c b/txscript/data/taproot-ref/9fe5d577717a9a11e4740f29f231fa15b9f4d01c new file mode 100644 index 0000000000..d1680b8e96 --- /dev/null +++ b/txscript/data/taproot-ref/9fe5d577717a9a11e4740f29f231fa15b9f4d01c @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe000000000930c87d0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2a00000000cbde473a01036620000000000017a914719f78084af863e000acd618ba76df97972236898797860936", "prevouts": ["e1c0710000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "1def81000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "47304402205b083d7b3cb3f17ada2bc1041ba1de5c663db5e5ed4e79b6029a95c605079f6d02203e8ccb853b5b8db54c9c5faff5397c824d2675d750efb31c5c69ba7ac39ddacd82004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "483045022100ee78dba8677223030aacb6dd161326d004e574759eb4103242f0c00172948727022030adf79c1c6abc4c5af368abd91cb228f7dd70b3b4b1279079a8f32c67d05f658201014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/a01b0232919914b0a33ff87262f8ba59543b0ab6 b/txscript/data/taproot-ref/a01b0232919914b0a33ff87262f8ba59543b0ab6 new file mode 100644 index 0000000000..a10a2233cd --- /dev/null +++ b/txscript/data/taproot-ref/a01b0232919914b0a33ff87262f8ba59543b0ab6 @@ -0,0 +1 @@ +{"tx": "5546a66c038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d400000000b5d77298dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b120100000066b879f3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfda010000004fcfbcc7041d3ac4000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf2010000", "prevouts": ["968f3a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ebe5240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d3e1660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_95", "final": true, "success": {"scriptSig": "", "witness": ["e84803ce85205a41a43df53d568f63f8f346b92a1e7bf717914f776b12834ed1be3f55a2f58d18d24a06f24f0f902667a5d94f4d24a6503c3f979bfae6764128", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["89dd635496138974a37ebffedfe59f49ad8e2097daaa3857a104e9fa608215165971823bc03bc4831d9d012681a530de54da49e895e32d446c4a3bfae68f9dc895", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a027f0c1c564bf78407eed47f2a9f03c60eadc02 b/txscript/data/taproot-ref/a027f0c1c564bf78407eed47f2a9f03c60eadc02 new file mode 100644 index 0000000000..0ca1e02774 --- /dev/null +++ b/txscript/data/taproot-ref/a027f0c1c564bf78407eed47f2a9f03c60eadc02 @@ -0,0 +1 @@ +{"tx": "fca5d31203bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb801000000d35e6ddfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4001000000e5f842af8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49500000000cbb138bd029ea525010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b6000000", "prevouts": ["208c780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "859d6f00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "eaec3f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e6", "final": true, "success": {"scriptSig": "", "witness": ["121e62952257555587343d62e407df07dc5b15950df2db8c56570a4d2dc1bf1b7caf6a9f4ad1dcc7724d58c75774aedcf52142bb9b675403eb3b211c013fdf0882", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["951e0fb07e827b0a8f589288751d295eb266246153395c5d65c3e78fb204249fe9d4d90b7a5e81945f948c4851b08b14f4e617d52c53daa7219bafec8ec3f546e6", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a0482c5ebc234aebacf836bed890b373827b5958 b/txscript/data/taproot-ref/a0482c5ebc234aebacf836bed890b373827b5958 new file mode 100644 index 0000000000..5cf0817361 --- /dev/null +++ b/txscript/data/taproot-ref/a0482c5ebc234aebacf836bed890b373827b5958 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d60100000045a55a8fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c760000000073f099380186396800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2586664f", "prevouts": ["f629120000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544", "06e05a0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["ef", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93652f3ac1aace3c10cf444e97bb7d38ad5b50faf5df229a4892c0d3ad9e10ad091215b4c606cdda8e0cd0631e1e6566a3457cf9b2eb8ccfe9cc1918e65b703d3f7cd241e6bbc5ebedd8f50ae206f1f82a1e41ff5c139455a0ddb0d368f52a47602"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41645f371c8079005f8f776d501e78f2a21020e20da39870ba1dbf85c4a15b7eacc28207c7af5a37f80d9c7bda068b6f89abe5b5cf72eaf80ed3e31c2f1c9dfaa6c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}}, diff --git a/txscript/data/taproot-ref/a04e38678141417445359665f17e2c444cc55835 b/txscript/data/taproot-ref/a04e38678141417445359665f17e2c444cc55835 new file mode 100644 index 0000000000..8be635df29 --- /dev/null +++ b/txscript/data/taproot-ref/a04e38678141417445359665f17e2c444cc55835 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffc010000000732978e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270880000000072fd39a2034e918800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e776a0d52a", "prevouts": ["c1b27a0000000000215e1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "57e90f00000000002254202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["e4eb2e5c01db2c5b9db34a40e1ecc9df9d595262605d1edfdef071ce3b0817d8eceada0922be4bad565f02cddc3a9e4cd3511d2d4e5d807c47c8cdd21f6d5468"]}}, diff --git a/txscript/data/taproot-ref/a05131b921bd9d6b4ea47f249e51ee98efc05f54 b/txscript/data/taproot-ref/a05131b921bd9d6b4ea47f249e51ee98efc05f54 new file mode 100644 index 0000000000..2dc645c35a --- /dev/null +++ b/txscript/data/taproot-ref/a05131b921bd9d6b4ea47f249e51ee98efc05f54 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc7010000003a0d4fc5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1700000000c98173e6018bbc4f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87921bfa49", "prevouts": ["658421000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "ad0a4c00000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "", "witness": ["30440220617804bde9751b8e890809c5ae8cb4248073155a3e13528353f768c0f0ba8a5f02200113f5d6ecccb5da08e0bde30bdf39c3c00a0780d316404fff35f4a72ced2b0003", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["3045022100f18a3f95e2004bd66a0a3a0815525e7972b561d3e272814b34c80e0281bb5263022002f128c1be80d75ebafe7a5b7d39090b044fecf53711c2c207993e40f9d4341d03", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/a080874cf108744cedfbb712de9629eed229ec49 b/txscript/data/taproot-ref/a080874cf108744cedfbb712de9629eed229ec49 new file mode 100644 index 0000000000..337fe5c37f --- /dev/null +++ b/txscript/data/taproot-ref/a080874cf108744cedfbb712de9629eed229ec49 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42001000000e00a97b08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c413010000008f316cc504fb1b70000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a640010000", "prevouts": ["14ca400000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76", "66fb310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_26", "final": true, "success": {"scriptSig": "", "witness": ["23388bb3a5f4f6abb0332f564b193dc02a0cd02cc61add95565958256289a4f6d6f0acd3a0109a874c4b9506ba9e20009fc8531f773b5b27389417744e41482481", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7a2c9962cf680d1a1949e1777423a989b9237cd5a84cbba496f3845ecf411c7fef3976ad52bf74807c25f8416ebb7b109279aa53cfa926a8d478ec4525563db326", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a086f46eaeca09d3649d592dc5a55044d8de1f41 b/txscript/data/taproot-ref/a086f46eaeca09d3649d592dc5a55044d8de1f41 new file mode 100644 index 0000000000..7a0c4a5a83 --- /dev/null +++ b/txscript/data/taproot-ref/a086f46eaeca09d3649d592dc5a55044d8de1f41 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b990000000015e6e6d3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3c010000008991028ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6901000000414a92e6031b996c00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acd3000000", "prevouts": ["7bf1270000000000225f202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "1007280000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f", "867e1e0000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "d27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa1260ed9ec9ab1e79007d15fbab81df65c0fb14652b0fe58f2b730a3e13657de0e39f192d4dec24b48e9231a08b7d2e64fac2040aad69c16c1d9eedfe5fb62ebc"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e00def9a487cc21401761fbf52dc8ab7b9916cdeb8a2e13a665b6447e5fe6b3009b801fc18e2353a9cd4de337bb33433fbe6225e21bb8b5572b0acaa50d11b7f3"]}}, diff --git a/txscript/data/taproot-ref/a0951cc6042b25d64914d945c4e3758a0407ea87 b/txscript/data/taproot-ref/a0951cc6042b25d64914d945c4e3758a0407ea87 new file mode 100644 index 0000000000..8cc97d8112 --- /dev/null +++ b/txscript/data/taproot-ref/a0951cc6042b25d64914d945c4e3758a0407ea87 @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c201000000284b139001864900000000000017a914719f78084af863e000acd618ba76df97972236898786010000", "prevouts": ["6eef0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_68", "final": true, "success": {"scriptSig": "", "witness": ["677efcd2049ae6dbb42fded0ce28f72dd12eadc92f8136f6756f9b034b8eb7615d6066c637acda634ea7548db5f5369997b43b662a9375a2b26966087b42c43102", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a55fa646dae7e86847c3d31ed2c1676129007e5469172b8ba702009de06d4c7a70938f5e4ef21cef3af388fe1f3f68c477d0d03b08b263b35e32ac42dd1a020568", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a0c092d70e81d7131ac1cb03d9ac8db9d2c0709b b/txscript/data/taproot-ref/a0c092d70e81d7131ac1cb03d9ac8db9d2c0709b new file mode 100644 index 0000000000..4374c92962 --- /dev/null +++ b/txscript/data/taproot-ref/a0c092d70e81d7131ac1cb03d9ac8db9d2c0709b @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c00100000051c121fa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703b00000000d8839a9a038a522100000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874c59263f", "prevouts": ["e94a12000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "eafe1000000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "b47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a8eb7b62c5fe5ddbc3113da031846421086c0b7ab5b0b159fa40d7d79be15e64eb712e9c877d580eafa00acbc739496391db115356dec5d41c0ac008be904b5898ae4fb28ba039f9030001532aa52d54afebb8b1d186c7283d6707334cdf0cf3"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed5b4f8de6a475e1475ecf0ed158bd12476ce010b28dce6527e02a32226fe48562e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd7e736a60655dc533a38837433a3a305c9a2d5b0314030c91796018120c3e9a44"]}}, diff --git a/txscript/data/taproot-ref/a0d64b88f7e1a35f28c08292725d25214520f7a6 b/txscript/data/taproot-ref/a0d64b88f7e1a35f28c08292725d25214520f7a6 new file mode 100644 index 0000000000..c959d27ec1 --- /dev/null +++ b/txscript/data/taproot-ref/a0d64b88f7e1a35f28c08292725d25214520f7a6 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127075010000009e5d05f1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0a01000000bbe4edb3018e8b46000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478715087253", "prevouts": ["3e281100000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8", "f75d75000000000021601f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c57d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363903e3bb34d25cf71b6983cf4f2b76fbc603b2adde28e34b23c45d7f67d4a2394a4f1964bf857a391dd30579e6c45654815fe99168eae3a652a179c44e1715327def1cc2232d9b1ca5244635fcf6779cb15e82fb856baa2ca11d8fd1da35295f"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e6d35158b06e93427cedf9700445f423da8a62a86b9572893cb3b0c5b8130f93e00378a892e4dc43a17c9ebd71803200f2f24c9a40c2827c304e59be9b4a7df0b"]}}, diff --git a/txscript/data/taproot-ref/a1258cbda9cc624bb9f238882cc84253a1dc87c2 b/txscript/data/taproot-ref/a1258cbda9cc624bb9f238882cc84253a1dc87c2 new file mode 100644 index 0000000000..eca64a77f4 --- /dev/null +++ b/txscript/data/taproot-ref/a1258cbda9cc624bb9f238882cc84253a1dc87c2 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4910100000045a9a31203bb9d36000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8724030000", "prevouts": ["845f38000000000021531f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["1dff371c0f48cfce29e4d1379377185cdbd69cc7427224110ab9dff4e29f28ea6b2a1651841473ef5b0f5ed2ad0fbe587aaa778f04f4456f364ce1af0851add6", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/a1430a0798548b8c620d89157e6f2a54d9f94f2e b/txscript/data/taproot-ref/a1430a0798548b8c620d89157e6f2a54d9f94f2e new file mode 100644 index 0000000000..d7c29e8a53 --- /dev/null +++ b/txscript/data/taproot-ref/a1430a0798548b8c620d89157e6f2a54d9f94f2e @@ -0,0 +1 @@ +{"tx": "98b7339702dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6701000000ce4b1aba60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d400000000185f3c8b02ea2a5d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48721010000", "prevouts": ["58bb4c00000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7", "60a5120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_88", "final": true, "success": {"scriptSig": "", "witness": ["9ac70dec29b2d3b092978378623c536333802faa1d197b5a9126542d8a8f655c9825ac68cf05536e49b469ea4e590d48d4b1d33bbfa2f030852beaa3d03733db02"]}, "failure": {"scriptSig": "", "witness": ["1d0539899e4afc00c6b5a2a46c857894e39ef5f40ac0f41971a439b814642001fbd0475b4c60100e0dcbca00073b89b31aab779df85964e6e4e4ff412eabd0bb88"]}}, diff --git a/txscript/data/taproot-ref/a16835f468084695f51026fc26ce3f842fc97714 b/txscript/data/taproot-ref/a16835f468084695f51026fc26ce3f842fc97714 new file mode 100644 index 0000000000..b31e7575db --- /dev/null +++ b/txscript/data/taproot-ref/a16835f468084695f51026fc26ce3f842fc97714 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0a00000000de79a0db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48d000000005b9d85b103a002680000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787cfaf4061", "prevouts": ["7c9e2700000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "aaf3410000000000225120efa68a115895f942057851c042deb7d61335a3ab48b9e56d15cb953fb46ad7bc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93693a02b6204e347b33b2d98f85c3b8af4711c830846c7f7c064463fb607dbf182"]}, "failure": {"scriptSig": "", "witness": ["6a45616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/a17272e8d29e6c955e3b27761ff0e3908e202ff1 b/txscript/data/taproot-ref/a17272e8d29e6c955e3b27761ff0e3908e202ff1 new file mode 100644 index 0000000000..258b3bd2a0 --- /dev/null +++ b/txscript/data/taproot-ref/a17272e8d29e6c955e3b27761ff0e3908e202ff1 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cea00000000937427d7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5000000000476245d802ecc273000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689870d97cc2d", "prevouts": ["dbfa5400000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "704f21000000000021601f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["504c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f933d08853672a2275403f631a185860433b7a30f3dde2a4cbab45ca4cd5b5bf04d1c6645dfa5bcea0755bc1d945f129b754bcfdfa4df703b30809220c35586032cb43424d7ca27a7abc5fd0c2fa249f92b1e992144deb3864a86d466f79c2cceedc10b0e9ea9319d9c2157dfe80b60aa665931711963da9ab109764ff1ab789"]}, "failure": {"scriptSig": "", "witness": ["4c5250", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454fe66249dd01ecee23c2f5e0ab3cfab587707d36ba83a587f4ef7ad777b411580826552c6add4a61cb16ac7f3706b11d0158c18b61683494ca90054287b9ac7bc2fd9879a2ee2ae7d76224c991edc718b1729f7f1922f570a67a21926d2cc48d"]}}, diff --git a/txscript/data/taproot-ref/a175484c1508738494b7c85ab928bb65c4a07f42 b/txscript/data/taproot-ref/a175484c1508738494b7c85ab928bb65c4a07f42 new file mode 100644 index 0000000000..bf7986859c --- /dev/null +++ b/txscript/data/taproot-ref/a175484c1508738494b7c85ab928bb65c4a07f42 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709a00000000122eac46bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdb01000000f84b9d610414df8a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acc3010000", "prevouts": ["2fb60f00000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "e1c47c0000000000225120a607964ea93077ca088588fe8df58ca0f1df7737d7763c94d5c7768cbab371de"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682236f031bcf8158863f62814cbcace59e68087524fe7963c37c3cbb351e6c152016530e482bf934dddf93f5dc5c8477f8e54d8918bd8c9b20d47f007dad28fe6f3617d560800e971f99646d89bd2028caf0c6d02b6f505a11fcad3ec349c801"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd05043d7db3391e92844c941c401bd083e4053f3eb43fc17e8ceb6537f5686293df6a2e62376e6a3587300ef2d1a395dd90428413a52508272625b5a1a189adb591a16be56540de55d9fbfa115de937b3aca1e4dd0f5a93f17ebd2ebda95183"]}}, diff --git a/txscript/data/taproot-ref/a17a5140033f84e309aac8415b2a580b4050203c b/txscript/data/taproot-ref/a17a5140033f84e309aac8415b2a580b4050203c new file mode 100644 index 0000000000..461b47d017 --- /dev/null +++ b/txscript/data/taproot-ref/a17a5140033f84e309aac8415b2a580b4050203c @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9d000000009313006660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701800000000454fe720038533720000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4cdccd43", "prevouts": ["d1d765000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987", "7bc40e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_8b", "final": true, "success": {"scriptSig": "", "witness": ["51326a5167baadf31a00bc3d2b48d3c3cfb07acf7730c83e95b38e5f666f75d92979d2e684501eceb5fbb9af8c7a86d08ee9b429114ab4cf3cda44d753dcaff7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["6b16e7f81810078d188c33250f16bffb3f542f0b746fe2adfd7b71f3b3c5d5f11558fb927e6ecd7a2e948e784074b97926eaa25f45e014a4cd3f6163ee64fd3f8b", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a1b572d1fe5a9c9111033297ae5ff70014c256ce b/txscript/data/taproot-ref/a1b572d1fe5a9c9111033297ae5ff70014c256ce new file mode 100644 index 0000000000..e42ed982fd --- /dev/null +++ b/txscript/data/taproot-ref/a1b572d1fe5a9c9111033297ae5ff70014c256ce @@ -0,0 +1 @@ +{"tx": "bec0953402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9e0000000094ed6d9960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270eb010000004ac8e1f601e4ee1d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8789e0e922", "prevouts": ["686f600000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "10e70e0000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f768", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173afdf1522df456d7fbfe0d29a7744cbe637017dd01cd6de5bb6b2c07ed06f430b01c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45438ad321f710317d8f3678f772f8337c845de7a4601c479cd7219e318503b74fdf1522df456d7fbfe0d29a7744cbe637017dd01cd6de5bb6b2c07ed06f430b01c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}}, diff --git a/txscript/data/taproot-ref/a1e666afd74df95cb5c06318730dff9116d6a22f b/txscript/data/taproot-ref/a1e666afd74df95cb5c06318730dff9116d6a22f new file mode 100644 index 0000000000..7b62e01096 --- /dev/null +++ b/txscript/data/taproot-ref/a1e666afd74df95cb5c06318730dff9116d6a22f @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c22020000002413a1c9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6701000000ebf5dac603056f6a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca045f754", "prevouts": ["7aa5480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "691d2400000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "997d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93659100ab1d99009eaf631522d0390412a62a32905c7f687f8ed538c1d75c8e249e3e7df71444e7cc76d8e211582e4acb0f4a71a503115fbd605db9d475b3b0609413afa0de0ff2ef52577d4c80443f6003c675907986908c28bc93ded208ca160"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93617fe6272c5fffac4ddc4c47d3a6fc8218dc4d9298ec687e863b37acdb8199f2e2e3b986c0375fedeed2562a6fa36a7b38b0ca47fc0125e42be2f4bc52e49716a3d673df10a8cc98fc65477367c7f3bb838b82569297570384f0d4df8cd49e6dd413afa0de0ff2ef52577d4c80443f6003c675907986908c28bc93ded208ca160"]}}, diff --git a/txscript/data/taproot-ref/a1e97b7bd972796aecfd4b83180776a015f64a8e b/txscript/data/taproot-ref/a1e97b7bd972796aecfd4b83180776a015f64a8e new file mode 100644 index 0000000000..f3e5d82a45 --- /dev/null +++ b/txscript/data/taproot-ref/a1e97b7bd972796aecfd4b83180776a015f64a8e @@ -0,0 +1 @@ +{"tx": "d9cbeb5702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b06010000007bcede8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706901000000a3cb8e8102bd1e2b00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acf751961f", "prevouts": ["eec71e0000000000225120761ee5da1a196558fc88c883f4c68738765f8bbbf6c28fcf877f70c5de6e3c55", "e7850e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_3c", "final": true, "success": {"scriptSig": "", "witness": ["c507825b3f9bf70f017994ae1df5ac75578936bead8bb05b78cd70c87125a69a7c46fbadf9b2f51f4e2765a6106a176d24e1a4992539ba56828d4985faab548682"]}, "failure": {"scriptSig": "", "witness": ["01244039c8ea5b9a2a132f9b114e5b22d246af4e78d2cceebbd75f5796d4155d064da7f5887bbf9ab0b3ebb7fdf2e1da9e2aed8854c5fd92415f57eff6efa0343c"]}}, diff --git a/txscript/data/taproot-ref/a2124d0d2b17ee1f1e0998338eea25cffadf437c b/txscript/data/taproot-ref/a2124d0d2b17ee1f1e0998338eea25cffadf437c new file mode 100644 index 0000000000..b26aa4a44b --- /dev/null +++ b/txscript/data/taproot-ref/a2124d0d2b17ee1f1e0998338eea25cffadf437c @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf03000000004470afcedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5e0100000089cf15fa0167036c000000000017a914719f78084af863e000acd618ba76df9797223689875024b63a", "prevouts": ["d3667100000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a", "6789570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "627d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369bc6aac193a2262f175e26a90d4e5bab3913dfe7b51f554c807a6921f2d2c0809fadf8666e14892eeb42c4caff758b4cfca6e22c4a95966045c21c8e48555a5679949ec80dae58a557a09f1025b3e427a5f07bf4ca030ef1ccb63f0b9143cb03815577f72abc2219d93608f0bf386debaad95a87d0f429ecb808b0f22f69367f"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082be3373372acbd8f7355a742b339dc4113bb3ad1c8e82e6b2233d51ce74beeba4a979a031634820b293704e38f33c20e5acd9cb2a8735bda71fecc5f77708044027529efe07ed3ec82dce77345a5c0eb368b138839946732056b6a908dbf5f05c"]}}, diff --git a/txscript/data/taproot-ref/a2135bcd7d491b07a72fbd501a3b0be1b9f3bdc2 b/txscript/data/taproot-ref/a2135bcd7d491b07a72fbd501a3b0be1b9f3bdc2 new file mode 100644 index 0000000000..0c692030f8 --- /dev/null +++ b/txscript/data/taproot-ref/a2135bcd7d491b07a72fbd501a3b0be1b9f3bdc2 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41001000000e9f03e5d0270ce3100000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7f0d49b42", "prevouts": ["99d0330000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ca7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fad3ea1307367f624c7798ae24e76be5e7488cb515c8e68b506a720d3dc582d682065bfcb7199ff8296c5f7d41f3b2c6067d88c0a33f2878328c609d56cc191f12"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365151d9a62ecf9f92cdb971a6167587795b5c91d8697e265bdca4e7bdbf735582d3ea1307367f624c7798ae24e76be5e7488cb515c8e68b506a720d3dc582d682065bfcb7199ff8296c5f7d41f3b2c6067d88c0a33f2878328c609d56cc191f12"]}}, diff --git a/txscript/data/taproot-ref/a21f2d7b6393cda8bcff8df7034062e8925f6377 b/txscript/data/taproot-ref/a21f2d7b6393cda8bcff8df7034062e8925f6377 new file mode 100644 index 0000000000..7290433b26 --- /dev/null +++ b/txscript/data/taproot-ref/a21f2d7b6393cda8bcff8df7034062e8925f6377 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d200000000e2e3d8f2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc5010000003f7b88ba0234cb5c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3c020000", "prevouts": ["62951000000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327", "bbf54e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b0", "final": true, "success": {"scriptSig": "", "witness": ["593d88a581ae2068becbab43fefd1d17ffa613cb98b37a3a8b63ef4e476e067e8466eed57b0e08ec18bb88d000e9f14b8ebca24888c0eb6db06d114e3db4d622"]}, "failure": {"scriptSig": "", "witness": ["d829372431cc203d9de3d6850a28ee9793748eaeb53e292c2533a44764cd414f387231fd303d2e96344cfdca1088ba84d673a00c19704086f4c137bd223abe4bb0"]}}, diff --git a/txscript/data/taproot-ref/a2452fe77f45ef6a612ce676a6ad9d9002b9331e b/txscript/data/taproot-ref/a2452fe77f45ef6a612ce676a6ad9d9002b9331e new file mode 100644 index 0000000000..63d8584c8f --- /dev/null +++ b/txscript/data/taproot-ref/a2452fe77f45ef6a612ce676a6ad9d9002b9331e @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4eb01000000db6b973760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706401000000f98306f1010fe10c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a648000000", "prevouts": ["3f4243000000000017a91448274ba0d73ec00ce63e7922c9d87a48fd0c670f87", "04e712000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_mis_83", "final": true, "success": {"scriptSig": "", "witness": ["90cbe6d26f857fa883258d920cbdf22387c79b10ff494ac881ac7757bd1e49ffae3b557583913b4161163c1bdefa8d417579be5431bdc8c5d22fd8e2d9a327b182"]}, "failure": {"scriptSig": "", "witness": ["e4c347484f9fecee907d5ea84cf457aacabb6f8628c4b46d156aec0ee8fafec3905ca034020a3f856ee7e9b76dbbbc88be6378dc1afd24b3a26160548236d48f83"]}}, diff --git a/txscript/data/taproot-ref/a25b4431040ecd4aca97dad2844cf0080a40800b b/txscript/data/taproot-ref/a25b4431040ecd4aca97dad2844cf0080a40800b new file mode 100644 index 0000000000..d6c2f415bc --- /dev/null +++ b/txscript/data/taproot-ref/a25b4431040ecd4aca97dad2844cf0080a40800b @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1200000000ec2ee3f4019a091400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acfba1de46", "prevouts": ["2b2f5800000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["96", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ecfde006308150423bef8aa56b6413bd3f073574ad71e6210b8ed31bba8cafc4eb4e626fbd1c5a1d96a595c16e39be42f50aa7a1faa8ff1a1c0cc640b6e10eb9874a9774daa89f30be275a1ff5113653dfa1548b9628ff9725cf694401ebdfe4"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362fbabb5db73937a530b9f0def2837a539507418901e7622f5d905eab1607cdfc1bdee2e16a63898e861f6346f98a8f5f2a90fe2be47e52912f18205e56fa5c07b35fa22f4b25dbc3a6b67e691e1ba7f45df255baed4abd058cf23fbf36a7f21681a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}}, diff --git a/txscript/data/taproot-ref/a26f67d81684b9007a2109269de4afe49d23f938 b/txscript/data/taproot-ref/a26f67d81684b9007a2109269de4afe49d23f938 new file mode 100644 index 0000000000..f334688527 --- /dev/null +++ b/txscript/data/taproot-ref/a26f67d81684b9007a2109269de4afe49d23f938 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a000000000a3952b5460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fd010000003122469d0459d21c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374877bbe1c4b", "prevouts": ["18610f0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f", "4db40f0000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d9c8c610c58b12163b15ce1ff0c983435a041d13f702eede880a5fb51dce7b8bbce26b858ee1964694df49c854956bd940a4e6651ee2613ac0889a0ca62307c4d72c52511105e97e14983251382fdf68bdae07d0042fda702379b1c9403b67023e44a45315583d327e7312b81cb8f53dec35ca32de8466ced99ea71e9219129b995e0663487f2bddd900c74ad42782a9c835acf86207646b774bb477d587572328d90ae425554246818ac43f1d8e3b189c8d28461b4468ccccadd31674ae163ffba23d7896e9fb65f8b9c99c34057cd73f6c86893f7320894b884c7553efe7e6e9881b7f88932f10cff6d493bcb0b95fb7fb160789e627bbc1ddbdf36f06957c30c8bff80af6305085aa6f36b4c0400a971cdaa9bf8afda35dcd11ddff5f5cc4339a6d602f30bcbb976d6aee00e81841ed043a959ec2150fd868d7d849e322ea402535fe2183efadba2ec82321c80eb01e2a2ba6abf2833171702a9b9e775833f9ca70f37ccc835cab225090255925fe40be04864f85fd2e70ec40d6a6388ffc9fba87c716c3f00dceb0e97a83bb8a7b27cb9f65fa4299aa454db0990a2f0fb75376f4c95368491900fa2baf8982997c80dafbd2a045638462df603e9dd00e03b9ce90595cdfa04ad10eff0cecd58163bca944cb97b5af01389b995b0a9b8b370a57d548957b25b256ab1cb762fc77324128f5e195aa0cc0215b6abf664ade60af5ebca4b7731154c775", "617d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4e8a9e18f0e69854b67be61a040c3060df6bfbf530bdefb330c865ce8049deeb0e931380661372836164f4a50b3ffb46f1fe83bc177b7c1bf309591800c178bdd304186c0a2faa80f59261766b0cb9b0760b78eb1f31f166a6f091ab62e6898"]}, "failure": {"scriptSig": "", "witness": ["4d0902430eae536e3faa601a9e76609811e76a3dfc9a1296c3e47ed14eccd00ec12de8dd5d86813dae402d0b309129da5fefe13b09e30658f5ee798ab210d2775dc0a835fb84cdedd3a89c8384a99c1f27a8a08052caf06188bd85a1d3a0f89c84ed2549097a76c87343fdd01621a6be421df0dbacffeb3589a7f504fb7b848f2ad4ca397b67e75756fb22a37fa4599f826f59e839e770c7b9d6487b7fc434d93ee1a7e78a8c75413a1ab29c3ab90dd2d2da6875c8542b2422f24cad7e5d2ba8243962940a1f6505284a704c10e28c577929c8e74f23d96b5d5929431fac1a7e75ab70a2a1ed9bd2475b07253d23686033a4e465b9eb32a20a4b81419d3c4796282d298dad6e2610f415f1be2c43720702653bbb467da91390ec7d74a7fbfa0c21b0d116ec394b7205aabd6cbf62257034a44414eaa5f0c50d46b9e388cab815cbd45b683f69a72a94302de34d5294b8f6d7712e69ad8ea68f827d9f874ec3b54815cf2d8697984cbfb270c068d2e89d23fb88fa8b9bab375b563a102ebb2de69a13d7c7bfbde807c8f50896b4be261043eadc465e458adc207757d425860b53617b5fa7f5f6f2b7f95cbf1b878204488b467f7178cffd1ef316dab4bb1732135b3de5b9bb227e511d8a56578cd3668750c23119f3df2ddd45f85fad2af46c46dc6aa36f34cb815a642f2352b403db64e2b4fa77d4db8e6e14ac3ea1c25d10b6a911a95cbb7076c9ed3151bf75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d6338037856eb5e5100eb03828e7e22b5e2035e7682cbb657d792b71d534eb2f43a93d7e1c40927dcd10fd5d28aa4402a453542c320ae883aef57b2a7090ae6b3ab6b2d4691bf881316931c587f0a213fdb9026021e80f212e72f88982a6bfdc"]}}, diff --git a/txscript/data/taproot-ref/a293d31bc0cff7b14f873a325579ef283c8e2068 b/txscript/data/taproot-ref/a293d31bc0cff7b14f873a325579ef283c8e2068 new file mode 100644 index 0000000000..0b91537104 --- /dev/null +++ b/txscript/data/taproot-ref/a293d31bc0cff7b14f873a325579ef283c8e2068 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb501000000739790e5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc401000000d48d3cbfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c06010000008bfda2e203856df3000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6a988fe22", "prevouts": ["3bb34f00000000002251201aa53d82b3e96e8e01ae5203880cf5cebef0e054596b6f65010b7ca42a314e33", "5cd8500000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "7f6954000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93636ec3b08c91f84b7488277bf883618c6df6d611cc9638a5cd67e555f32bc0de1"]}, "failure": {"scriptSig": "", "witness": ["6a26616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/a2a3d1e6a386b04424a390d174bdd394f0b88602 b/txscript/data/taproot-ref/a2a3d1e6a386b04424a390d174bdd394f0b88602 new file mode 100644 index 0000000000..30674d104c --- /dev/null +++ b/txscript/data/taproot-ref/a2a3d1e6a386b04424a390d174bdd394f0b88602 @@ -0,0 +1 @@ +{"tx": "6a7bc0ae03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2d010000005909f2bfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc501000000c4642ca8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b22020000008a37259c02ef808b00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4c7b8943", "prevouts": ["697b510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a86c1f0000000000165b142540f27e90740933c99d4f17ab2dfc6c82951cfb", "e3fe1c0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["1c8ae8c42dca6eec413a2a33e76060a08817f826743139ab4caefbf03e884c281167c767454bc3c057abe112dfabda4a58e393e744ee39c71cf5ba744b10c43f"]}}, diff --git a/txscript/data/taproot-ref/a2ad73830bfcdf027adbf16721e9d3b54303b060 b/txscript/data/taproot-ref/a2ad73830bfcdf027adbf16721e9d3b54303b060 new file mode 100644 index 0000000000..b9d1be0ae8 --- /dev/null +++ b/txscript/data/taproot-ref/a2ad73830bfcdf027adbf16721e9d3b54303b060 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c68010000003c978ae7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6e01000000196033aa023d2f98000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac56020000", "prevouts": ["530253000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "25e24700000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00639668", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93601486982337d932f8a5da13542a421b8e8f9ea3c3f47614babafc47e0d3ee68833a51c0dffe7e5434825b6cc7212f0d90dea7a5d3b9982f8882f19203896a3c56fcd0fab6a67c3bf230276b49a6ca24f17dacdd3ceaaa340a5ba0b2ba475b0ee81a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db0a763bf19cfa833013adb8a01fda43f5416b14010ea87884a0fe04caa7ffcc6bbb2d2aacfa419948546f2c8aa96b4ab4a80289c3c8034e795f45f733cf7ae0b35fa22f4b25dbc3a6b67e691e1ba7f45df255baed4abd058cf23fbf36a7f21681a75fe046050f41c6fcdb9e38a8e16ceb2d96bb057130f662fa5c2664fdaf5d"]}}, diff --git a/txscript/data/taproot-ref/a2c43c8aa3d41b7eab2ae20fb1f9e973802d902e b/txscript/data/taproot-ref/a2c43c8aa3d41b7eab2ae20fb1f9e973802d902e new file mode 100644 index 0000000000..8eff24b61c --- /dev/null +++ b/txscript/data/taproot-ref/a2c43c8aa3d41b7eab2ae20fb1f9e973802d902e @@ -0,0 +1 @@ +{"tx": "d181cd7103bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1f02000000538bccd660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704f0100000003fd78e5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf30010000001a08da8c020568e0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ace80c3a31", "prevouts": ["725f600000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "3713110000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "e23c710000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821fd87b85adb72b018dc8118730af51fe2e1fc2345a45c291032ad5ea0f36db09afcaf82673e7b509fa61dcb6f9390da3a7ce1e18401449d1277235bd9d9c04d9a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363801b0fa4cf19ddcf56ab9da9960ae09931238675d987d4e01d2f119420058266b70d0ea7480f8ba050345bd8e4e7681bbd8db77ef27050d0a3831748599db67afcaf82673e7b509fa61dcb6f9390da3a7ce1e18401449d1277235bd9d9c04d9a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}}, diff --git a/txscript/data/taproot-ref/a2c7ad1b00fd60ced001c83967d4fb945e86a28a b/txscript/data/taproot-ref/a2c7ad1b00fd60ced001c83967d4fb945e86a28a new file mode 100644 index 0000000000..5173b5d083 --- /dev/null +++ b/txscript/data/taproot-ref/a2c7ad1b00fd60ced001c83967d4fb945e86a28a @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a1010000009c56d373dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbc00000000662fdb6e03de2e7d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd858f22c", "prevouts": ["c78532000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "4d314c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/minimalif", "final": true, "success": {"scriptSig": "", "witness": ["a6462aa0ea470e7e5c32fa016f17fa7bd944e60fff375b5c3d3a24dfbcae204ad958e244ecea882182ced9c81b658a32811b319012b9e7465b483d1ad799c316", "01", "6320871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac676a68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692f0de23ee769069055d0d6d05652e1367445947e897223d0b74ba21bedb5258c23c60128fd3e7af8adaf4abc6718bf379ce4956c06c6d05419568a3b7fbb4becdfa5022fbf9ae5dfa56f4098acf4285bbe92d9aeb187fa2d4d396f6e0eee31df9d9ff7331949f40b876b1f64f1a10013ac65e222e2c8b225fa80db88dddb53aa6a2d9e7459765b4c09c28753bc2ff55d05ebac69a2359cac2688619c9c27618eeb68ce69b97818447ab7b9a4ba90bb798d21d9027f4de024baf5f3b5f4da875d446577c2ae0ff5873a151ab353523af1af4fb00651b9bde1c1989520e7d338bffb609e59d45c7d1e0be4118ae582299f3fc1b7f496d16d6ab2d0d6e0f7a455128ce34dda559eb1787d0c8deddf8f5f19f9fd4c2ccb2eb142b7063fdfa79ad71051bfd8661ff100df5daaf9353084b6d3751b20c475840529a2a7efac33ff2efdbb6b7c86f986531e7bd2af85df536ab9da539cb9ad98883aa4960532e755ead635b927ce0af32fb24943035d26d0ea88bbdc698d8d4264beb9c7e8103a368881360dc44ae3d69de3386cee559eb49e6c76a737e105f9117431d64c73a13a31f98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["a6462aa0ea470e7e5c32fa016f17fa7bd944e60fff375b5c3d3a24dfbcae204ad958e244ecea882182ced9c81b658a32811b319012b9e7465b483d1ad799c316", "003031", "6320871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac676a68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692f0de23ee769069055d0d6d05652e1367445947e897223d0b74ba21bedb5258c23c60128fd3e7af8adaf4abc6718bf379ce4956c06c6d05419568a3b7fbb4becdfa5022fbf9ae5dfa56f4098acf4285bbe92d9aeb187fa2d4d396f6e0eee31df9d9ff7331949f40b876b1f64f1a10013ac65e222e2c8b225fa80db88dddb53aa6a2d9e7459765b4c09c28753bc2ff55d05ebac69a2359cac2688619c9c27618eeb68ce69b97818447ab7b9a4ba90bb798d21d9027f4de024baf5f3b5f4da875d446577c2ae0ff5873a151ab353523af1af4fb00651b9bde1c1989520e7d338bffb609e59d45c7d1e0be4118ae582299f3fc1b7f496d16d6ab2d0d6e0f7a455128ce34dda559eb1787d0c8deddf8f5f19f9fd4c2ccb2eb142b7063fdfa79ad71051bfd8661ff100df5daaf9353084b6d3751b20c475840529a2a7efac33ff2efdbb6b7c86f986531e7bd2af85df536ab9da539cb9ad98883aa4960532e755ead635b927ce0af32fb24943035d26d0ea88bbdc698d8d4264beb9c7e8103a368881360dc44ae3d69de3386cee559eb49e6c76a737e105f9117431d64c73a13a31f98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/a2ccb0337cf44bc0b3562bbf7dcdd792989d5faa b/txscript/data/taproot-ref/a2ccb0337cf44bc0b3562bbf7dcdd792989d5faa new file mode 100644 index 0000000000..8c13940605 --- /dev/null +++ b/txscript/data/taproot-ref/a2ccb0337cf44bc0b3562bbf7dcdd792989d5faa @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb000000000e4f669ec04ac822300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a666040000", "prevouts": ["be952500000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090294fad9d9bc6351fdc94a7656afba8e89e5b812c6783493607a705880eaff1d63d8cfbb05a417579db75737cd3968abc12f70acec2df8eb9b4c546bf9d65017846ccbf6a2b245ed571bd16fcd5798304b39184a3ae968e101d288fef11a1da81d5b0385df894b44d857ee1973418f340ec899109cc89ff39915142f1b3bd692136dd7b39e6f8399273156172436f8cdaa2acd91c244247e385e7dd7b3ae2f200b578cc6d05f86d3a0804953e7c4e76a080408110420014e78cd2170f59d51abe1cff9a532fa5a8efcad381b6c909fce21fede9c800215eaff842449e8e2bbf98590047babb43b1e452a08ba542e25f1a43b924d7c00c45429949767f9778025b2a671986d23f396a8108581502bf5715a287348b92b53a1695b7206ca70c95fea0745b88d592d6cd8e518f8ac9f5bca3b46572df53f660faef30ac24f45566a2bb301b6dbf5b1659c4a2de17907531ca4d8bd5dff7cd50bc5783034bd546529680fddfda909da11af34fc21bd52ae5386941c0a539a93f9258363d35d5a289ae5fd70f17bb3573bb6ec8b1e20501d90257da1253cde48cd8af24bd29a12181683361a802f0e5ae73d53f9b379aebadfc81181a4ab063779b4dc6f77f1c47b91d9f97c86c194079e479de12e07d39bddbf5198c9373da9a4b27a66c33b6015efdd892d6243237655402791e8a882511f0bc52f3b1ed4c15d21bebc24c052d1fced800fed6ab363bab1bc75d4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362999d4fffedb03f009e32ce21e56d156cd5a3e9aac3f7c46145f08b7b6c81b0f70b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d8657208959ac4fa8a57d164b76708dc6f63c2efb2484bc5a77a391ceb66b2f5ad6b35f745d0948d124101db49c294d83630876065ae400dd84de1c183cd8c786ec24f9"]}, "failure": {"scriptSig": "", "witness": ["4d0902224dbb5cc65ce0dd92bdb20bdc334a3500936782a9cac75aa5987e27a9555ae9b53b8272aba9ae29b1fe58a74e7af7515844dd1c5a6de2eb5da739c71498eeb837e21f5b6fa7bddf9f8c1f96f0fef15baaf56c679fa3bd8c737710ad12d08104c2633ba7bbef4c24856aa9f82ba758e98c5f74e0efc51924ad14da596bdf94793f498eac18f8585edb2a522096534c52a21b63378a3db58f8f281bf7f18ba8fece00df01f12a6766b7f0d7b86e5e23e0c1b8a61445347b9a6fbe2bd4bc7b08c96765c5296dcc83cfd7570f56959e55af1da3e3a62fb82389e972cb37ea002c5e3d8ad64d6f5c95071fe89dcc54cfb979d42a19100092d501b07520c41a6848b3bb25253411938477e2c586703234a413952673d02dba6c0e9f3608aaabefd7c02a8c7b570545c976bb4b81f7ed8d1399e3b427311378269a5d464ebdf85305dd2041fb01c50e125531dca89bab32c4d5e20c7eeb4c75080d980e41d96500b1ab043fbe1a7d2343415ea21c81f26eb77a0a9ecb6f967a082790852813c946c811994adddc14b42304cf79e541652c2a37010c2b490217a86c2689cb48e066f297d403d6e63316cfb9fa2f583bca07dfa3c690fa0c971890e7f73731d89ac19691e4cf947492808656c0eca895845bd825847655573280d39fea3400964205e96b96474a7aedd7317a58da42f3e95be942e01bdd8a49e73666631aa1a4e2bd9a92cae6b54f9f6eb9e2f67561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93698f67b82a647171bd8e62e386c086816d8191afc712ffc3b55ea5f04f05c8f03e05ff666526b724612289f11d9af684c97588c9b58f885be5f0bca0261c5a78c938b5973806e5396d9f6a2ad240022103fc2376d5af9a7129252a47c1a6405aad5a470b8497850c3a230fee464eb343180400453804118582df887251250b2f1"]}}, diff --git a/txscript/data/taproot-ref/a2f70a0c20b111ca1ab34de6f2319109527a564e b/txscript/data/taproot-ref/a2f70a0c20b111ca1ab34de6f2319109527a564e new file mode 100644 index 0000000000..99dda4da16 --- /dev/null +++ b/txscript/data/taproot-ref/a2f70a0c20b111ca1ab34de6f2319109527a564e @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708b000000003bc37beebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8401000000aa486e00015ea55a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1e098721", "prevouts": ["322111000000000017a91448274ba0d73ec00ce63e7922c9d87a48fd0c670f87", "d110710000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2251202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["31d78719058083e83da50049f7f5e9dc1ff4c8049e59853f1a2b5a64a95a7e08a161ddc9bf87f24fe39c335d48f9299fd21e5bc8ab0e5e4948929d043d21b0d5", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/a32041608e8afe0ca18b503f0e9c30cd1480f6e2 b/txscript/data/taproot-ref/a32041608e8afe0ca18b503f0e9c30cd1480f6e2 new file mode 100644 index 0000000000..c9440f130f --- /dev/null +++ b/txscript/data/taproot-ref/a32041608e8afe0ca18b503f0e9c30cd1480f6e2 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a010000006c9b93db8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d601000000fcf1a38ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b33010000009c6a06b504e4ebae00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987182a0b5d", "prevouts": ["29c3530000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "0ffb35000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "bcdb2600000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "6c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa2e65fef4aab856faf00f568df948255673469e3e5fcfbe6f15d7212245640ae7ade389b5221dc8da0332285833f8f90d31bff9f5dd8cabba4bb6916c2c5f203000b960c1063a40dfb5dc510671dff140eefb73aa6757bc42ddda0d13c6b661"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa537e729fcf8585ba70be9503b33ad258cc8c70f658d9ebd11d7348a395e977e6872a8a6de95a80dc4a6e95ba0e12854eab511c8acfff04c6cfab0ff55ad6b178"]}}, diff --git a/txscript/data/taproot-ref/a32cec9ef7fd885815ad4d76f8a45026473405b3 b/txscript/data/taproot-ref/a32cec9ef7fd885815ad4d76f8a45026473405b3 new file mode 100644 index 0000000000..1020bfeb3a --- /dev/null +++ b/txscript/data/taproot-ref/a32cec9ef7fd885815ad4d76f8a45026473405b3 @@ -0,0 +1 @@ +{"tx": "0200000001a86a862f8a1bc1808f7ba2abcc71e2c0ff30c2c698fc832f6545a8dcb978b6cb00000000003bb9f1ec02bd2aa1fc110000001600143f886f8feaf75ad7bedd5713d4d148e7c97c1134580200000000000017a91402e53bc18808b3955166f5113b83b265fa421e998704f78020", "prevouts": ["de2ea3fc1100000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid_opsuccess", "success": {"scriptSig": "", "witness": ["6d02d0213a37fd5a30867aa1387a81339fc2ddd1d3cf93c769e1d1383d69d5bc7e92044187af535f3f12de8952a123bf6cdc45dad9163ba4efd411fea48ca188", "20cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3ac00635068", "c0cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f370d37925ebbaa58968ca2d1c370a50dc7325130308285a7d9868d3ad5a34267b01c94ae67cd857f8f23543b618b38154b6c0432568bb8cf7638fb55d4cc0a24e"]}}, diff --git a/txscript/data/taproot-ref/a34ff67c5e9162f46fa22c082d21a7ac7a23c3a9 b/txscript/data/taproot-ref/a34ff67c5e9162f46fa22c082d21a7ac7a23c3a9 new file mode 100644 index 0000000000..6032d5d5e7 --- /dev/null +++ b/txscript/data/taproot-ref/a34ff67c5e9162f46fa22c082d21a7ac7a23c3a9 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc900000000ad2a3dffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5001000000014b29e90202c4900000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6db010000", "prevouts": ["7b506f00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "9412230000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "473044022040a892018fc73a356b7fe23f749069ec79e165913f21c1a04a63694f7db0fae202205668d51c6fcffa1eeabc76b5de44df2a9dc8238aba9eccc6658c15c1dfd29442832102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "473044022047a161dc84e361ac65e3c873c518fb2c1d1bc3424e76c89ae6d59229bdaa491b0220408620098a8a676cb3cff43f54ed3613e015e32655b7c600fd7a6cc67d64e172832102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/a3770de2569e6bc576e5a3947ac08e8bbe24cb5b b/txscript/data/taproot-ref/a3770de2569e6bc576e5a3947ac08e8bbe24cb5b new file mode 100644 index 0000000000..48f6da9c36 --- /dev/null +++ b/txscript/data/taproot-ref/a3770de2569e6bc576e5a3947ac08e8bbe24cb5b @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cb01000000cd9868e9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2b00000000cd3ed02203b4d76700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc734010000", "prevouts": ["3a08110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ba875900000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368440119a86ba00e0fd0b2929859510ad60f42825154794cb59f75e9814c77960a7d0a3f3648f0d829df7cabdb8f0af96ecc09ebc190c461c6b5fbdc9f87abaf73acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365c6e591f067e3c45f61af74326cd1da3b20a4081ce43e1a5881a0f018aae470fe30d689b41c4cadafebe300f1e3aad2e0751ea174af1d1313cd49baaa526270b3acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}}, diff --git a/txscript/data/taproot-ref/a3823af6285ec27ac5824bddb591a1f209bc4018 b/txscript/data/taproot-ref/a3823af6285ec27ac5824bddb591a1f209bc4018 new file mode 100644 index 0000000000..bf0130e5b1 --- /dev/null +++ b/txscript/data/taproot-ref/a3823af6285ec27ac5824bddb591a1f209bc4018 @@ -0,0 +1 @@ +{"tx": "32e88e8b0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ef000000009ea8758704c0f81000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac55867d32", "prevouts": ["480a130000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "9a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e874224dbe9932044562df2f9dbf2ed3a87afba7bd9cf6855f9f40e4c24add8036ef17902325999cb16876d9e124f321b7a2400c6233e0b61b95917979ea167214"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362dd94ab6ac3ba59fc544244dcd9eb18ac121794a237f6dbebbd82fbb662320abda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e75ccfc706e32ae7f6b2a63f59d728082bfb2443bbee0d6dae87ff94b5ceebef57e56d08eecb8b548a03ce82dd22dc92a64f1be159e88ba8944ed4666490b777c"]}}, diff --git a/txscript/data/taproot-ref/a38819d7d0147d7cfd3e537fe3756def5a12274d b/txscript/data/taproot-ref/a38819d7d0147d7cfd3e537fe3756def5a12274d new file mode 100644 index 0000000000..3372f61946 --- /dev/null +++ b/txscript/data/taproot-ref/a38819d7d0147d7cfd3e537fe3756def5a12274d @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1b0100000056ef84c6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1500000000048e2596dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e000000009ecaa1df0136422d000000000017a914719f78084af863e000acd618ba76df9797223689875e000000", "prevouts": ["f4dc280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee4f4f0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "53ad4d000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/oldpk/checksigverify", "success": {"scriptSig": "", "witness": ["a38abf14611e9ff1d34569f50e5ad70c70c0ad2c047d938ad2b2a0935b80f8cb6900e47ddc95c94d1eb0bbfa9084da5b49420934f189889d03680744d4b7ddc1", "01b82103871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba01b787", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936380fd5bbdbe4794ea806caa5282c1aef1ffe7d45b4d59f1e9bfad28e3ae4fdca981fadee890ab4417c631792739c4ef8fb641e8446934fa0c8e1805c6909f26281276199cbe4e146b3e88d862cccc3aa4bc6307d35ab5018dae88bfea6394e5f459cabb6ab8c3678b74468069be988139c89c57e63462e56e8133cfed14536d81dd4df20fda0be7a55ac17f98a2aef20e321e01e857502a1cfe23cb6a4ad15866ef67e84dd915acb377988412d057835ef837084affa2d0a196ad926b0944a0ca5ee8aeb035ad1d4ef60ba4feb3fceb7383c5600a25eb23627ffada3881a0f6a4d1f74f48d4492f1e0d45f509c9657df63343859227ddf7f2609ac6ace00e705712f857e99c90e704ad61ead5306e2eb41e85853cd64144b1c0edf26fa2e09017c6b0121788120229dd303fb71c48fd037e58f2c5360624d464c160b0d96d9aa9209aee4db1949f5c818182820cafcc77b58f0cee811d9c138e6e925c6ed7b5822c7dab2635ca4d983bce69908efc2d6c8e3a4e02d107fe54b591d6c8cbc0ea2e862ced977f81641729beff04e69bc449bbaee4ae229138f125e8f575c30a32bf5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["3c0b1e0fbd5b5a33aeb59c33de952643664232300e1ed72158ee7c07544b2883f05ff592b537b06d8478520d1140d76bc9b5fd6b6c44d4d5ab286556044ab9dc", "01b820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba01b787", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a4ab26b19b12dd5ed84675a14c998105d6f885db851af25affc21adf58dee419d170c934e59191828af4b443d621af5306292ce84d9ec7d56e4d5e95f4a2b883b6fd696714014486fd7f93eb277485a7e6b2ad9076f6f17fc1c22a649c512cece24022bfb434738800d6aeadbb65c0b5f1c54fd97b098ababd1df24d7362e80f41af64fbf9620aa43b24a95927199d6cd96f713b6c21c4241494f6ef0a4794b137108eeeef0d1cdb0bf8b9c7668f98c08793001c20de814582aa46fe17366f71bdfc32c1e1c145969abcbef65c26a893c9816b7a71a91b71dcfe4a49fffd792905e89fbc0a67267d9092cb76689d3f43e2e6846ec5193713df91969e861cb60c31b4d84c9ed58356d00f548e6c0b7494dab0ae598e30a63a373db1671630b0e008f7f368b69fdb42cf55796ee854208b1524a7b7ad1fac452c6296b4ad4fb087b0a6f9680ce7f5ca5bec9338fe334e6832114c99db2b4b78f7605856e14f0f922c7dab2635ca4d983bce69908efc2d6c8e3a4e02d107fe54b591d6c8cbc0ea2e862ced977f81641729beff04e69bc449bbaee4ae229138f125e8f575c30a32bf5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/a3ad36fa2c2c376afbf409d8fb83e076d6d87bac b/txscript/data/taproot-ref/a3ad36fa2c2c376afbf409d8fb83e076d6d87bac new file mode 100644 index 0000000000..3649311e74 --- /dev/null +++ b/txscript/data/taproot-ref/a3ad36fa2c2c376afbf409d8fb83e076d6d87bac @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9d00000000e8af27168bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41900000000f499c33c02627c86000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac0e38aa56", "prevouts": ["e39f5100000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "229f370000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6aef", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c819f8b552bfb697703837962fb5d6d337df981c1fc75a4b0c4677dcaf4c57d1026557b708b5ff4838890b3ef28f2dfcc17fbcba41194ca68927d7f0eaa3f8db921261d9825d6464319e11fb6c7a9f7c01f613629293fb1fa80574c155a587736c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936850341f24ae52694fce0385034fc0ca207bd809c3dd5acf22e07c8bd464ce0dd70b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720cc28207c7af5a37f80d9c7bda068b6f89abe5b5cf72eaf80ed3e31c2f1c9dfaa6c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}}, diff --git a/txscript/data/taproot-ref/a3af8000afdeacd1c3d6137959029e3b260c72ad b/txscript/data/taproot-ref/a3af8000afdeacd1c3d6137959029e3b260c72ad new file mode 100644 index 0000000000..541e855371 --- /dev/null +++ b/txscript/data/taproot-ref/a3af8000afdeacd1c3d6137959029e3b260c72ad @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1102000000ac4cac65dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b710100000030a16be304f0b149000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374871ce85d41", "prevouts": ["40ac2300000000002251200330f6e5108e4b6ba1453dcbe3913edfcf5a50e8c8a7a117f516f4d28e4936cb", "0f2a280000000000225d202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "737d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e85062220981136031499d54282dd1dc217e6360b68c94112219f47c832c6b09fa8cadcf9bcd23f9249fd09eb8b2b9ca63044a0ccef58f4cae9402f6ead4c2071"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa1755d4e71afcc10f3d2573fa2263bf007b883f1245d387f3f26fe0befbe96d0f3ec5aec6a85c1ca54f3417a27e00c281f3765ee450a46261b59de169989c9a702c501a2f323d94577f3c4b353be8e702d3f9991edd341efb02c3132264010bb33a63f37675deadbbcd666ca6b38ad7090050f3dcc6bba45985e955ec185c53"]}}, diff --git a/txscript/data/taproot-ref/a3b21dcd0e4adb6a0ef920d74555d2f699917d39 b/txscript/data/taproot-ref/a3b21dcd0e4adb6a0ef920d74555d2f699917d39 new file mode 100644 index 0000000000..f9075ec82b --- /dev/null +++ b/txscript/data/taproot-ref/a3b21dcd0e4adb6a0ef920d74555d2f699917d39 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b90000000044735f0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a5000000005a25110d02bd811f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8714020000", "prevouts": ["8cf00e000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "bb0213000000000017a914381003aa1ce42a7df73f2dd1e6e78ae0a36c6b1c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1654142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["a7453dfdeb8869b5bb652ffae48f6657b375ae7df60698807dd8d42c38f5a6eec49f150bcb1ba18149b1b52c375342794f0a329b99cb68eb140cf357ca19e900", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/a3ce74eabac11a8d8a11955afa3ad09d86b22961 b/txscript/data/taproot-ref/a3ce74eabac11a8d8a11955afa3ad09d86b22961 new file mode 100644 index 0000000000..100ad7c91a --- /dev/null +++ b/txscript/data/taproot-ref/a3ce74eabac11a8d8a11955afa3ad09d86b22961 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6c0000000082abd590dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf4000000001ad7dbb460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e60000000013b495130186bf0800000000001600149d38710eb90e420b159c7a9263994c88e6810bc720b41b44", "prevouts": ["0cc849000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "fc1a5d000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "703713000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c34c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667037ae3d106809ce95ad6513527bfd5a0b48627df6eb2b59a2167c6498316646ad1aa2e9998afd312977ef35369de24510af161418b16660639891f4f8529ff8cfae4f24e00136258a4229df9ce1533cc743f70cc4e5c0214ad74c09f63cc0b9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}, "failure": {"scriptSig": "", "witness": ["4c52c3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936325295392cdb69462e5fa0b7e1c132defbdb6aa7844957c05fd0634208e0d9391ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900457cb9328b065f9eb1f6f110e9fe7273590c885552330e2c3269c2432845ee2744cd8777bf679e716871b092f46e3a69645e6fd098b2f58cf3078cdf1926d6f261"]}}, diff --git a/txscript/data/taproot-ref/a3d08eda208b96260cb5b47c1478e155264ff8c1 b/txscript/data/taproot-ref/a3d08eda208b96260cb5b47c1478e155264ff8c1 new file mode 100644 index 0000000000..7d7d029a00 --- /dev/null +++ b/txscript/data/taproot-ref/a3d08eda208b96260cb5b47c1478e155264ff8c1 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a801000000aa951bf3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bac010000001c53bd7ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe9010000001c47564f026e879f0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca040a226", "prevouts": ["0c261000000000002258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "8c5a260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7f456b00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e4", "final": true, "success": {"scriptSig": "", "witness": ["e024351a3b37dcebaa1474684171d9baef2ed8e829e8ac5f9cc2f8603f446a44b6372f13e163438b21ccae47a1c3b71a1aa44fb100a2ba48abca6d92c3eac1d383", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8c14e5c28ba217a2a0b9e5e1144541a12a6b6f168cb4f11927030c4ed7086abedeefb7df8795729eed921e0b3a8ab21eaebe87b9dece8ea74ae0757fd4008b5fe4", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a3e5f143cabf7cdb1f6111fd744b4230796b6064 b/txscript/data/taproot-ref/a3e5f143cabf7cdb1f6111fd744b4230796b6064 new file mode 100644 index 0000000000..fe0575f100 --- /dev/null +++ b/txscript/data/taproot-ref/a3e5f143cabf7cdb1f6111fd744b4230796b6064 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f8000000006d3588dc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709300000000775f78d38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45c01000000bf2c651d0114714500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1f010000", "prevouts": ["14030f00000000002359212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "0f160f0000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "13d73e0000000000225120b5149551dc0241ae0d4420d11e06c98ebd87b9a952c2fc2c5fa7ce9cbc250e4b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "167d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936394c54942360201b0e5a9c52bdb8553d3b85213f639fc7674feca5a4529f4e0b46c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa654bbf7a6388e898988522fa7e5d2ba9e6951646cde29fc617f56e0c3d8e4d50afd13a3b2c4c421c5355668ae9e4eec8bcb7618363c6e35efd204a43726d22d6"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6552d9f0078438d40136d7ff6a38e228e91ae2f5adfdceb2d12241afedfa4e08719dd3b5606bc946287d150a5ecd03b0f8e892d08bbecd28ea2e3769111c28051e3355b9fad1d20bddcd1a8531bcd58c93c4d9ee4159d68db4e08ecdffbe17e"]}}, diff --git a/txscript/data/taproot-ref/a42eb9002c5144273a55bdd736db4fde19aee488 b/txscript/data/taproot-ref/a42eb9002c5144273a55bdd736db4fde19aee488 new file mode 100644 index 0000000000..0499469c89 --- /dev/null +++ b/txscript/data/taproot-ref/a42eb9002c5144273a55bdd736db4fde19aee488 @@ -0,0 +1 @@ +{"tx": "cb12a30301dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b410000000093957aa004ee5723000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c8010000", "prevouts": ["e701260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ec", "final": true, "success": {"scriptSig": "", "witness": ["f671cd90230e59c99f43246d5ef545b039ddb07eee4eafcb7e762383f5f8f05fa12e2fd888ec24463dab47f7eeaae2e3f7465558fe6d42244e1b7076fe27c57903"]}, "failure": {"scriptSig": "", "witness": ["24d7bd17c40082d1ea1c4c34ddcafa36f6f645554947258aae820d3df0d3dd099d1e83a8218def63bf804543e97007f61429814d17974322650350bd51221b20ec"]}}, diff --git a/txscript/data/taproot-ref/a446bc4e40187735edce2ecd8fcd0e7ed43952ee b/txscript/data/taproot-ref/a446bc4e40187735edce2ecd8fcd0e7ed43952ee new file mode 100644 index 0000000000..e3fd863379 --- /dev/null +++ b/txscript/data/taproot-ref/a446bc4e40187735edce2ecd8fcd0e7ed43952ee @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d1000000007867cfcbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf47000000009ee3dbbf01c2b77700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6c0d4c1e", "prevouts": ["55523c00000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "ad3d770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/script", "success": {"scriptSig": "", "witness": ["744950d34e41c67563935eb0feba01124ff2eb3deebbd8f2fb7d01a9a4f422bc5cf2e941a659ec3818e2ff6dba56b48d7e35faa21cbe4d8020952eba9546464e01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "503649286e99ca454968e6a58006ddf2a84da5aa86807e02bf27971d483d0091c1d21244ec4579fb8bf719c18ffc64ed357fecb7793dec9c42889c91b8377e56e0022c2d1e4e6846e4a8c039a076e1d7f02d8a3d13f2d999cdea35eefd86b1faf3c72f68daf650a578a71a5d32f6ad9f9fdb44e38629a942eb13276d4ae8f5ee86c296bceb9a6856cb850f453e31a8c79eb9ba78fd01c24ea30f8b36568b981382fa36c47f186c0b1b758ecfa914c8b08c237c997aff85f83846f613649c4275946e1cc10de782324f6dc6a2c2332a7c9653353f"]}, "failure": {"scriptSig": "", "witness": ["a9a2da3e97bdf73fe0202f6f9491f249110d4337a3de5556b638db26b05d811503395f4efa8f00c9674e51fcbede64058b201f7f0db2b2def94d5204e2f167a002", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "5022c15322a98cca10055037984c8f7c1fc5a8d7e545709fb9da6db45bab7ce1e714435eff81ff68b22c94a7b28b3b8abfebbba8d463e6b3d85b30917d8fb5ef614bbcc9d69779e92ff30685dc4f1d224f49e1c6ffda9d4e944e58c4fe261e17e9bf0f22400ba63d376606f972eac3ddf667a4668a3fcafaadb18b94d599ec8ebe7cf2305ce17330b3a5d041bc7da35168a1b8d4d963dd3a809c54c84738dea1fb24a4ede875a6de5bdaae5bf483e050a3819e2b28ec1cff5125e930165e4487ba9725d0f4c5eb98618b514b61d4722798d85c669757dd5d60b6f48db862084f54ad52182f5ac95ae5aa24b42a38516f"]}}, diff --git a/txscript/data/taproot-ref/a45d7d60a1eef620afd536f4d69cd4196a0fa6e8 b/txscript/data/taproot-ref/a45d7d60a1eef620afd536f4d69cd4196a0fa6e8 new file mode 100644 index 0000000000..22cd5de2d7 --- /dev/null +++ b/txscript/data/taproot-ref/a45d7d60a1eef620afd536f4d69cd4196a0fa6e8 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701b01000000bba7c5fabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6801000000b62f87d103d8d78700000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac0e687c36", "prevouts": ["37c01100000000002251203261e4f5d874791dc168faa2b4a2c68848e71e1814a86d26b34f54a7b16af8d3", "be1f780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_1d", "final": true, "success": {"scriptSig": "", "witness": ["9e5596a7d6e0167f2cdc966eb0027253600ef10c9c2e71bc5f95ea1aa4c272fda7b82ae9bc9762bea5a1fd85c51eb4739b474b0ad266465607524007f81ea4ed81"]}, "failure": {"scriptSig": "", "witness": ["097fd97cde86b0bdbf8cf4e0affa7f9be88e093af052871846d97ec0309089ee6a7a48888d31535d88d7a663abebd77612c0d6e6e50165422f057c7cb36539581d"]}}, diff --git a/txscript/data/taproot-ref/a460475c32082067af4eb3aca7203a69381aec6f b/txscript/data/taproot-ref/a460475c32082067af4eb3aca7203a69381aec6f new file mode 100644 index 0000000000..5a1f8c3596 --- /dev/null +++ b/txscript/data/taproot-ref/a460475c32082067af4eb3aca7203a69381aec6f @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffc00000000cb2d96c4010b104d0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7969a020000", "prevouts": ["adb67f000000000017a914de933560a9a700a6d4f856bfa5cf61713cb34ea687"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "235e212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["9812921cf248a3062afe01f52b057f93bc52be09c8e70356114c3dac90a44a78e9a37585aa57022a1bb560677e47262ea82588fb92ec25026b7373ec8f443817"]}}, diff --git a/txscript/data/taproot-ref/a47eeeeb9c724e0247b882207d4598df2b1f9db0 b/txscript/data/taproot-ref/a47eeeeb9c724e0247b882207d4598df2b1f9db0 new file mode 100644 index 0000000000..09572007ef --- /dev/null +++ b/txscript/data/taproot-ref/a47eeeeb9c724e0247b882207d4598df2b1f9db0 @@ -0,0 +1 @@ +{"tx": "4296b05c0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d701000000192c02da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703800000000b70f74e6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c010200000054072fbe0445ff6e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e4cb024e", "prevouts": ["0526100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "099f120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "39c14e0000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "d47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef9197423ce94fe6d3a105485c3c73b77ffad3b95ed69b8a8a6b271b9e98a9e69ea84370bdaf8fbfa2c728119f306db95ff534e2e627fabf0c000f69380d4e93e"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d3902af40bb61a9efe79ee43d7d4f3634249f4c0f866d22c6fec937b93868b1cc94371513ed03fc9b5b146a2753e7b1ecbc6d9bbcb6df59d8f1ce2dd42b56b227fe8633af3ad90c30a4ff6253cd799a6a417bd03591c5308acef4cef6c60fd438c2fd1368e2cc97a2933efae2d13561032948a77b2cd5d87b5e0b8010cd9f32"]}}, diff --git a/txscript/data/taproot-ref/a4b22b3869f32433a3caeafcc3e2dd92c010757d b/txscript/data/taproot-ref/a4b22b3869f32433a3caeafcc3e2dd92c010757d new file mode 100644 index 0000000000..14994dd4d0 --- /dev/null +++ b/txscript/data/taproot-ref/a4b22b3869f32433a3caeafcc3e2dd92c010757d @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffc010000000732978e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270880000000072fd39a2034e918800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e776a0d52a", "prevouts": ["c1b27a0000000000215e1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "57e90f00000000002254202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["a7b105433b4b1915ec19c609d0b6840b2317365b6a7eb657bbcdd76d3d3912ab855ce3c33a90f875c923d0c169d56c5e39986a1740ce00a05bce538bf8270c29"]}}, diff --git a/txscript/data/taproot-ref/a4b538f21947ef1c76087aab101911f7a2cd4ab0 b/txscript/data/taproot-ref/a4b538f21947ef1c76087aab101911f7a2cd4ab0 new file mode 100644 index 0000000000..9cfce6eeb5 --- /dev/null +++ b/txscript/data/taproot-ref/a4b538f21947ef1c76087aab101911f7a2cd4ab0 @@ -0,0 +1 @@ +{"tx": "48e98f73028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d8000000003dc93bfadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba4000000008f1f5de404739f53000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87e995ba23", "prevouts": ["5d97310000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "9d9e2400000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "0b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362a0eb75e0ec60f99eea3c4e68929a801de09f0e4bcbbd6e06765583d12703af849153cc622aa353482ad0128e41c922a496803621b9ad28f713d97cdce77464b2c78e40500fa05b550b7f6357dbf83024c41a574f6a1706762c104fa8aec3fcb"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360bb3fcad263c09d62d88f37d53a8d6e8b6c0ffad9eb9ba751d541b924f6b0c72784d9e7ee919b8817f3904ff7d27b5c3a4ce3798ed5b994b75288b8e9341d9b42c78e40500fa05b550b7f6357dbf83024c41a574f6a1706762c104fa8aec3fcb"]}}, diff --git a/txscript/data/taproot-ref/a4bb5997e547796263c8fda8ffb4c87967e2ea43 b/txscript/data/taproot-ref/a4bb5997e547796263c8fda8ffb4c87967e2ea43 new file mode 100644 index 0000000000..c244ca9a8e --- /dev/null +++ b/txscript/data/taproot-ref/a4bb5997e547796263c8fda8ffb4c87967e2ea43 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ad01000000ef211fe4028ab70c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787f3f31e41", "prevouts": ["be800f00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "4730440220636fde6853b48edc1b78fbacdf8768615e54e640313826ec042c4aa2f54c013202201612a55ecb781ea6823b82e2ec5800c9dca08e26a0e064599c82f5d7a398ef220200", "witness": []}, "failure": {"scriptSig": "4730440220031fae161179bb8add96b7c89a51e67734bc2d777ac835884d1165ce7e2eae5902206de02e996289ed42308e0fedfcf705b229d90349fcc01d5197a814fee4e6d855020101", "witness": []}}, diff --git a/txscript/data/taproot-ref/a4c0daa47b25c77cdc37c485b2ddaf4db6edaac6 b/txscript/data/taproot-ref/a4c0daa47b25c77cdc37c485b2ddaf4db6edaac6 new file mode 100644 index 0000000000..16bafc6261 --- /dev/null +++ b/txscript/data/taproot-ref/a4c0daa47b25c77cdc37c485b2ddaf4db6edaac6 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f801000000038e6fa4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c00010000005e6f05c7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6c00000000737b03c302ffe3c000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac65fd242d", "prevouts": ["a82c3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d5b75e0000000000225120733adac9df449b2595d1b217303cc00a8e3c5ae4d51e5f74120e9d2d90d81fcc", "1b492600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a4", "final": true, "success": {"scriptSig": "", "witness": ["fbf8792532c477932b747a99f61b557d12cb46507713730600155cdb8f3a776c503ee471a29640697d98e34d9119a061ad3caee33cd9d9bbac787aaf5dcdf4f901"]}, "failure": {"scriptSig": "", "witness": ["7f8c8537664c6f2eeaf91b657ba7cc6895d1aa0fe2c0885f37793add2c395d16089098f6604d651e3475cf543add9736e3f120d2c707dee16aa349af6ad83490a4"]}}, diff --git a/txscript/data/taproot-ref/a4d7bdb95ff0421ff9f027700815f81ebac50d03 b/txscript/data/taproot-ref/a4d7bdb95ff0421ff9f027700815f81ebac50d03 new file mode 100644 index 0000000000..647c65e27e --- /dev/null +++ b/txscript/data/taproot-ref/a4d7bdb95ff0421ff9f027700815f81ebac50d03 @@ -0,0 +1 @@ +{"tx": "bc10ab850360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e20100000056ca8ef0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd500000000f9c6cbc3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfc0000000042284be90453929600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e73aa04c47", "prevouts": ["1d5b110000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "dc1d28000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "74b25e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d2", "final": true, "success": {"scriptSig": "", "witness": ["f2e1c3063dfad656cdd87f5e5a153559fd347131f02e4d0cb00b9816c408f4d9f56702b811d6d890880b926242802e654fa08c69e001e2014c5f725971923baf81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ae543c27c9d7e2b5dacf2092b56cf7326e3f7ef44348332872fcd56cffa4dea037e5bf77c583353c48f518246297e8b5455c1f8cac2f6dc7f8516d0786006f16d2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a4e49ce4052c6a3e72232ff2f764b972159ce65e b/txscript/data/taproot-ref/a4e49ce4052c6a3e72232ff2f764b972159ce65e new file mode 100644 index 0000000000..fcfae4045e --- /dev/null +++ b/txscript/data/taproot-ref/a4e49ce4052c6a3e72232ff2f764b972159ce65e @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b910000000007b8c7cb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d2010000006a6039d303ae933100000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748784110e48", "prevouts": ["759f24000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "1a8a0f000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902618ede92b79a5b81809f6cbb26b0f1acb3409e7eee532034a88be8a398ec0fc9e8bae35b7130da34b76c6912521a66e6d156c4a61b6a4f19c323dbc56647c7c09cc0a995a9624a6108b3adca49d3e5c558bbe4098b4f03aca75acae8806c408593df9b242a22bd3dbcfc450464dc687e8ba3b5ac763210a91aa5588ef48fbe706f33b0a91f8b4057efee182b3d7f8e9d0f6d2d1bf00d3380b2489ac28bb722a2ae386d09a12af0bea36b4609b5e1662abb9688b845a97909a07ea6ed082482cb0f8a18571a19fc332606d53ecac060ab8f585ed152fe4bae3d7addbf5e19266680e723d15620ca051f419f395fd3ffbea6c26439ee3d45b49c3040bea98f21b09311d37d8c076987c6de0751e3c37e1d3e2145e1fcc15bb7571deb64e30470e3d5e2579b9ab2fb01e48ebd18244e466d8aaee7532374064a7915e91207994da877a90a236c05e5874d6a68a05bb549a3e635b20ce0d940a3a92fafdde7b5de323c40c4d66c02788ac7dd75a3244cf2d50d30ced6e9ec73c2e1c813659c64316c1d224160491a95d95580d1bc38262f85a30179ca2209b0e9150865e01025bcea9b2658a567798805f89ddfa0928b28b1b0127a6aad69d598c0c878a5cb05c830f758e09dc456f7e69c8570e1ab65c9dd11630fda7bfbb2ef3cd24ffa4923ad5e4b200b2da300f8cd2d4c288e06175249c71acb366ca55fce5f376df1e3309f9f9e7a3816f667b2c3de75", "5a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa16aecc6ca17fc53cd4672680bbeaf62b9cce164f53144e8804363c70dd634bddc531ca70e78518003474f611c07657b0808402a053b744a80e6cf25146bdf24b"]}, "failure": {"scriptSig": "", "witness": ["4d090262bc2c10a1a04aeb55a82a0122da77b0351c7d4b28d13bee21b1822a66f8067a9eb096f98fed70a9de8e3cbc91cf3e9f0e13cc236280597a9265fc990d257bc8ab3da5717d7b43be30598cdd6f584c5d3e467ad444ba8b3d1160b268d9ddbd9c978e4911bc9e245d3483c9e4a1ff3861ffaccfaddcdd9c6b0146f3427e7157902ce167f7aec7783e48fc11ab3873dc205b462de4211ecf528330b39ca6ed5c288037757fb1d92e09b98fd4e34cb092b7e3a92c1db4821a18f49c423e672b23ab77e00b3d19d542384532ccb7567d295ba784d9fcda882e69953760480a70da3ff80cda93414fac989f2144248bb80e0c3b61eb68d6e0758e15d54d6f5e8db8c142fc7174077e4dcc32e6b10a293a0559cbbc14e96c8b4ad0e2e75ce138d7db55226d499dbd777a3ad7868098f973501c799bad6dab3bec7eb26d178842846ba147c734e1247a38cd869611b312e003c758321273bf4ce164fde63ea1024ec514420a512df157829071ce5cb78f064e870c1b796c7e7d1f94ac816b798de27e0188a8a3b7b563ac0204af27b398fab1c3e04ef5ab6ae9048d5ace29665802543b28237c2ac917173755a65d6354e70f823b9aa88e0f564e55ec4084877d211673c3c76574b6c2be8602bc4478ac8c9821b2928d2f3619b1929bcecc35acca42f3ca385cff254af0519d0c12ab85cc8422f15a6a91d08d249d92633ebcc8f345811268894700d4cb352d75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bb365091e02541d750ef46249caac5d7ae4cd563209d5fc3ab846231dfad5f298b5457f6f65490151d40d3d05d55f9c92d8dec73c7aa55a79aa7c51354918829c531ca70e78518003474f611c07657b0808402a053b744a80e6cf25146bdf24b"]}}, diff --git a/txscript/data/taproot-ref/a4e87c35b253e9246a0bd98cbe936ecccbf2d89a b/txscript/data/taproot-ref/a4e87c35b253e9246a0bd98cbe936ecccbf2d89a new file mode 100644 index 0000000000..20aa5b31d4 --- /dev/null +++ b/txscript/data/taproot-ref/a4e87c35b253e9246a0bd98cbe936ecccbf2d89a @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8900000000e8a3feaa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707c01000000afd25c9604adb63500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc65ed682f", "prevouts": ["d10f290000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "52ec0e0000000000225120a04971ad2b8c16a17e70d417eb355b323e82da2726ed216775e912c08433fa96"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369dcce049c3ca75880493e046b41be90d5f823e94fd712225d408efa6e34d380a"]}, "failure": {"scriptSig": "", "witness": ["6a6d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/a4e89f79f42904ee1b600ddd79f2d3e27c855da0 b/txscript/data/taproot-ref/a4e89f79f42904ee1b600ddd79f2d3e27c855da0 new file mode 100644 index 0000000000..a32bb19e14 --- /dev/null +++ b/txscript/data/taproot-ref/a4e89f79f42904ee1b600ddd79f2d3e27c855da0 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfea01000000f5e5319edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7f01000000447e5a1e03ef0fcc00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874bd55a28", "prevouts": ["f0347a000000000022512017e91ee0326ee2050a26c2cf73ffa8316bb13627b7c7250ab1d4d36a20fb6045", "5da4530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936abb130808be8125d340e7afa0707ecdf35c3f77b9e0336bfcf0ee3f8116d85d2"]}, "failure": {"scriptSig": "", "witness": ["6a4c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/a4f449044130b59be750db18b3dd9cfd3bae5588 b/txscript/data/taproot-ref/a4f449044130b59be750db18b3dd9cfd3bae5588 new file mode 100644 index 0000000000..ca60fa6c78 --- /dev/null +++ b/txscript/data/taproot-ref/a4f449044130b59be750db18b3dd9cfd3bae5588 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4be000000007e34d8a360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704c000000009d55639704a6b64b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6f14dd35d", "prevouts": ["34853e00000000002359212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "86520f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_51", "final": true, "success": {"scriptSig": "", "witness": ["60fad9cb2ef641fd2568fe31d2da694e720492e5632a431391143f9573de0152a805ed2e45e23e1996e1c605e032315b8dfa107c764f26ac133ccfaa4f303abb03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["6a7fa61fa0ad828f8814bb99dd2442f9b7418b22342b44fcdea19b331d8be058602b08b1a3758dc1df186f64b87df2c5d93309c81b098f005ff063600672786b51", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a4f68b87043e04396cfebc9287c9d7280448eacb b/txscript/data/taproot-ref/a4f68b87043e04396cfebc9287c9d7280448eacb new file mode 100644 index 0000000000..fc11a83a58 --- /dev/null +++ b/txscript/data/taproot-ref/a4f68b87043e04396cfebc9287c9d7280448eacb @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd9000000006f1fc6ecbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6e01000000753656c9038b73c300000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388aca1000000", "prevouts": ["eb125600000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "6b7f6f00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "e67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bda127a894a5039ec4946eb5e413110ae843599cc7241c4a3c4a3a9c1b93ad088256d6f90d235a6ba3188b640209fb1b87a6d8106344fff793e748ee999a397d93d03784866e2fdd94d7d1b7c12b1f0da96746c05c19b8696f0ac6a701ba8135"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e92d7728fe824bb86fbd19678fc348031552299afe2faac0cf612835804e2a859ea19512c809756aa5c58e4cd3562935caab0c2ca4eda8db33914ce4decb3cfe9d11a7792f25f0da70e8485da42647201d1062d1bd001b767f1b05dec6877400"]}}, diff --git a/txscript/data/taproot-ref/a4faeb187eb7094b39e0f0699026cacbbb9d2ea7 b/txscript/data/taproot-ref/a4faeb187eb7094b39e0f0699026cacbbb9d2ea7 new file mode 100644 index 0000000000..f3b70b993d --- /dev/null +++ b/txscript/data/taproot-ref/a4faeb187eb7094b39e0f0699026cacbbb9d2ea7 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfab01000000353da8e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa900000000724751d30155c54600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1ed6a542", "prevouts": ["8b607600000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "23c780000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["89", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea0237369b8fe49ed1b05e21155f7ffba4fa029aaf0d531232d0302472e08390b90b3e537e0a498718b42d83f823725a04b39327b9237d74ba7af037a7c89be8bd8f71710e2f4773b226617f0b144a9d046788db13e8347a383f909c13421323cf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e15f4861bfb2a6452ac4a4804b2c6a2c641047e4f139d9501cd1bf471f8e5b3ea6913d98effacbdfffd2adbbf71932929e08e9cbcb7e06a345b8d84d9192524cd99d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}}, diff --git a/txscript/data/taproot-ref/a4fb1b9f52700ffd6bf24f06e73666810b0e3260 b/txscript/data/taproot-ref/a4fb1b9f52700ffd6bf24f06e73666810b0e3260 new file mode 100644 index 0000000000..538c576ba8 --- /dev/null +++ b/txscript/data/taproot-ref/a4fb1b9f52700ffd6bf24f06e73666810b0e3260 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bae00000000e0364cf58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46100000000669af35004b73f53000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca91b3e44", "prevouts": ["43dc21000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "923d34000000000017a91482be44661ef9d172a86ea47619409ff206130f7487"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/emptypk/checksigadd", "success": {"scriptSig": "", "witness": ["66f66dc43d5bab9b14f3c2043e7c9c8f5b48eea7b9a26d1fbb5c2053d5ad26f158ef14efb526af95e741b301b9ddc874aa544674b29eda87ea49e44def600a34", "010420871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab6877fe4b93adbae43ba31547b2a28b8426e0e264fdaed20741da068e2fde6e79c828b389cc6fa067cc52fe12ccd40f3ff3a983633ea848ec15a2b4831982f7737d8b833e0825ba099c8467f76b1421be2b77993c7e62810ff98ea5481a16a5d99cf36381d9d9a20d2ce9dedaf9116dfe3a9922c76fb47afa7d001862ca7c11a241ff59189a6703879e4c72ba11924ce43c0100733bc95eae687ee9079c18adbe9f9dcc9df76457daf667e614b0a2c9769f05bf9e4612cf41468a5c2edec8b27561be12136e03a34f8e495e73b5ead1813b7376b7b4741440bb77381e68f2c66a36d3584cf1098f42b1db0e5adb952c76295af580ac8e57b6e152c1a3838880c25423e484f9a894f0cd7a4f7a55204cb9503269f7db7c978ae9e1aae745e8cba1e95faa8cd3a458c6fcfad037bb3042008f870bffa75e1adfa3bc03f6ed1f3bf446321ead565d6569148652da647f2ba80fca39d16e6d7a41565c11b66fda799209aee4db1949f5c818182820cafcc77b58f0cee811d9c138e6e925c6ed7b5822c7dab2635ca4d983bce69908efc2d6c8e3a4e02d107fe54b591d6c8cbc0ea2e862ced977f81641729beff04e69bc449bbaee4ae229138f125e8f575c30a32bf5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["67ccc0728bf9fad1ff3f340d11258558170c1ed2901962d8a5b0cdd03b69e39bca660bd274c98fe768d09184690e7edc805f72c0f2c0844782e11374bc30f338", "5400ba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368cc4d632c25fb1473ebc2c4691dff712f1529879b16cf6e01c3498b371ad5643f043ba3d030a3b9cb1de0a60e5c22d352c9a6b0167bb0429c65653ad93c6b5ad75df7d692cfa002fbaff39a633e2a3d0c51d8dadcd4fcf0c857fbd83ad169fef2faba22bfc7a47f9e635144f510dd0bf27279d7f381c4c7abb10bfa7caa6f45212b1384dfb83dad558f50952f8dc7a4c93fc05bc0bf8f252596f3f99dcc4aa25ab6fe4c1776346de255528baa11f4624c0da11cd67d3944bc9e3c23527f253a174940966dd57e339c9cd051354c05cad3fffcfa87d89865f388df6a9793fb850795b387e411ef7ecd738a90c270a9e8b41d104f0901d65be980e017742035d2ed5a15550423aeac2e288a32ca51234efdd8592bd1b66a7f846be8561b7af73c90baa320cf1711a17ed2a311e1783897c17c40a4468373563049ba8a82c1cbe704bb8d89f21761581480cc9fb789613a87d31235185f9da4b4384725e898ebf0d2c5eddaeb8557ce0f7cc7880e698091ab104cabb34aeeeb5d0f57ea86d1ebc555dfde575d48d1eaafa8343c63d6f5425984d2425aca274be02e47a5142e089ba2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/a506dd32985fc68730bdda9ec17bd68456455ba2 b/txscript/data/taproot-ref/a506dd32985fc68730bdda9ec17bd68456455ba2 new file mode 100644 index 0000000000..268352458e --- /dev/null +++ b/txscript/data/taproot-ref/a506dd32985fc68730bdda9ec17bd68456455ba2 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfa0000000056f07197bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2e00000000e97e04addceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2e010000004e146fe30155a353000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6ed721a49", "prevouts": ["41e1250000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "b7c76800000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "603822000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_1", "success": {"scriptSig": "", "witness": ["fc48c577f7b5f3a703a5457be6f551460eeec93367865b5e2166424adbd1ac3f295acb1edf1714f4860d94394f74ea0548e4029291eaacbf244d914336ab151701", "503968e07b294f35feb7b41d27b4819473f873691d15ff549a9c12cc197e081edc87f8aaabd5ebeafa67615807d69a5b8c59ab0fc24eff57f7038dd2a483827b9df9939d6c556bc4f61675143f9caaa0ee0eb629928a741ee0c0249ac16173d1cfc9234322a1176ae0448323160a0563b03c500ff64963073b7d70cc0f6f06b5590fbed5bbaf8ac6"]}, "failure": {"scriptSig": "", "witness": ["74b5530153f0d51da985b311d560f666dfbb61e8b9bdfca17b755d9895fd49777944913f55fb6a495648a81575841648e376dfb3e9221ff8b5355d0abb1c093201", "50ab65cd189b8d11a3d39f9aa1c4e4348f27eb114f13c04376a07b961672d9f88eb38e1cc0356851fc987efe8dc2b46d4fc293720acaa06889605c608a90cc198133cfe14ffbb4468fc36bd8f61935282308cd22b7210c1b193d6d10ff0c7865c5bc41e2f93eab4be9657499c5a2e6ba1bd68d979dbf272743232180969389e056d43b368c"]}}, diff --git a/txscript/data/taproot-ref/a51dfad994645830ec06457aa99a3680c881234f b/txscript/data/taproot-ref/a51dfad994645830ec06457aa99a3680c881234f new file mode 100644 index 0000000000..f828e020bc --- /dev/null +++ b/txscript/data/taproot-ref/a51dfad994645830ec06457aa99a3680c881234f @@ -0,0 +1 @@ +{"tx": "19d3c01403bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb400000000d4d080ff60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700b01000000657831fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49400000000aa2e2a9604f321bf00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f871a000000", "prevouts": ["0c0877000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "894f0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "be6b3c0000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "4830450221008f55521fb6f7b72388272102c08b0552b3196cad4de688785c363ddf2dc08a1a022069babc1ba2081a37ce9b4b4266842ea5da2a13d9d0bfa2ddafd691d1381442f4022102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "4830450221008b70ded494a4076203863d4eb5d8e5c5ab630ac1dae865777894a00fe390e37a0220372fe37418928a39b8867f2e57e66abdc633a07b5a652f199845798216aeb573022102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/a52cb7e463be1bd639929b2d3988c313fb4189b5 b/txscript/data/taproot-ref/a52cb7e463be1bd639929b2d3988c313fb4189b5 new file mode 100644 index 0000000000..ee8d416238 --- /dev/null +++ b/txscript/data/taproot-ref/a52cb7e463be1bd639929b2d3988c313fb4189b5 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c720100000018c71abf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b800000000898d559f03957a56000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48759030000", "prevouts": ["83a74800000000002355212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "20d90f0000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "d67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e81925aeb587789c20eb4609a9df455cd23a7da5ff4c702feb6a2f003989c380a08a47f828b5683f18d8d2a0301cf32ab60b8042f73dfba3f43f347d91ef120fb4bd0211bc754da142cb3564162304068e34e33074851a6380a45a2a3191e3f102"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362b0e17b8bf42b7e584614961f092aed83eff492a60c922e0543c90531401fe8f1925aeb587789c20eb4609a9df455cd23a7da5ff4c702feb6a2f003989c380a08a47f828b5683f18d8d2a0301cf32ab60b8042f73dfba3f43f347d91ef120fb4bd0211bc754da142cb3564162304068e34e33074851a6380a45a2a3191e3f102"]}}, diff --git a/txscript/data/taproot-ref/a545cc27e2d474a7a7b7ae974d6c61935d3bdfb6 b/txscript/data/taproot-ref/a545cc27e2d474a7a7b7ae974d6c61935d3bdfb6 new file mode 100644 index 0000000000..b8f0d327ec --- /dev/null +++ b/txscript/data/taproot-ref/a545cc27e2d474a7a7b7ae974d6c61935d3bdfb6 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cde000000009f5d27808bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d201000000283e3bd98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42700000000da52b0940417c3c800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e52a3644", "prevouts": ["6fb15200000000001653142540f27e90740933c99d4f17ab2dfc6c82951cfb", "55f23f000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87", "a8d8370000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["30440220598cfe5677068ee7d3f8d23516d7f12f26863c7ce363ba0ae679b3d9ab8f00c8022033f63fb7accd3895abd01f7c381f4166f0fcd309d239da4d2f34e5a783675c2703", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402201962a3ec2d64685ae979b254f13dd532803ce2c9cded4f32114bb36ac1c081f002206cea3880395cdf053a9941d48b417ab90bc1a6604b09b5bb82387986ad539b0303", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/a547e004e80194fef36be8b3932bb2a42502c7b9 b/txscript/data/taproot-ref/a547e004e80194fef36be8b3932bb2a42502c7b9 new file mode 100644 index 0000000000..0b021374a3 --- /dev/null +++ b/txscript/data/taproot-ref/a547e004e80194fef36be8b3932bb2a42502c7b9 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45c000000001eec319bdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc6010000002d1bd40e03dd94810000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79633219028", "prevouts": ["7cdf33000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "d3f44f0000000000225120d1b91456e68c356a2c859a7d0862df581c6fe76c88121c19c4713ce29cfc8e45"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "797d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368e9ed2886e7908e27181476c22eef50b42616dd4d44ef70273b9f072453f43980793fbcba16d5416bd6f0933503ffe6704f239223875a49be11ed5869ee331b55be39dc57762be2d9b1a04aa5b570805d23104bfe4fa54c392bda5d51f7f4540"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa0b1051acd7c1b2d32995b3df0c6921af5f8ed3327e7e16cb8a5e0bd007230af127aec9530f4cf05d3554e63105b96634da39f3c52c35c251ce860693e97320b3"]}}, diff --git a/txscript/data/taproot-ref/a54e57e8c7e474bf56e54f46813916ef373a9d88 b/txscript/data/taproot-ref/a54e57e8c7e474bf56e54f46813916ef373a9d88 new file mode 100644 index 0000000000..61746c5815 --- /dev/null +++ b/txscript/data/taproot-ref/a54e57e8c7e474bf56e54f46813916ef373a9d88 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704001000000baee91adbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4c0100000055b2f3940307357600000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6a048da2e", "prevouts": ["6aed0e00000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "77d6680000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["b155cac647d3a0fb0ea2fbbc1aee38b1e76a67093bffc5c29647aa83bc0ce13318ed70863611ab4ec13fa0038580dff9c3e61bfb5cba4794f036a1575c23cf130ea96bb076942e2677916402cc07120d25739fc5", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/a56763f3af3e1d367ff0097d69c129ed4bae7f00 b/txscript/data/taproot-ref/a56763f3af3e1d367ff0097d69c129ed4bae7f00 new file mode 100644 index 0000000000..03efe1c334 --- /dev/null +++ b/txscript/data/taproot-ref/a56763f3af3e1d367ff0097d69c129ed4bae7f00 @@ -0,0 +1 @@ +{"tx": "4c61934d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b570000000092d58fcd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45100000000baffc09e01cd1c3700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acfc59935d", "prevouts": ["cfa9260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1b133900000000002251200120da136b46f6e1c164adef9ba0d2bbe634d7767c7946122aa4909c89df2221"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_aa", "final": true, "success": {"scriptSig": "", "witness": ["8cf068babb2c0c13e3db94dcb2c9f69b5f104764182a1e578613869dd03d4ff64f8745de6175c713d73a2491a62bb989fb3cdbfee11d9ef353af36547802a04a01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["22e0f9b2e60b85843675de81ec6f465296914fcd0f19bb529e24d0df00da2213ac8f298f41d449c0e04ae5d34671df4d7fc031ecc159eb322f8b5bc05e93bf22aa", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a5706ef86f9f5e79c7eb3a0ed8168f28bdc25f87 b/txscript/data/taproot-ref/a5706ef86f9f5e79c7eb3a0ed8168f28bdc25f87 new file mode 100644 index 0000000000..1ed99fd466 --- /dev/null +++ b/txscript/data/taproot-ref/a5706ef86f9f5e79c7eb3a0ed8168f28bdc25f87 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c850000000050957517dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce601000000ac49e6a1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5101000000703ea34b033cef1101000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a641020000", "prevouts": ["59c348000000000017a914ff6a0b1cf86e786bc6de2387f1927f71fd08cd0c87", "fabd5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a3736d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_93", "final": true, "success": {"scriptSig": "", "witness": ["df4c70f13b8f5d4c14b7b2cb79dca889bd2eb1478bc03a936b124688c978c5963643c698aab7d14e9f681bdd30bc79a7cd0042f493fa54399a617035fe11de3b82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["26162aa5f56f85577691407bb0e37d318c7f92c3b0e17eec3376255a970b709601cb3aceb03a3407a1cffcdf90a24e8bfc9b586be9cff7b5db48d43a2dadf62d93", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a574eeebf64538810c2a45c5864f3209361e1c96 b/txscript/data/taproot-ref/a574eeebf64538810c2a45c5864f3209361e1c96 new file mode 100644 index 0000000000..f560d1b21d --- /dev/null +++ b/txscript/data/taproot-ref/a574eeebf64538810c2a45c5864f3209361e1c96 @@ -0,0 +1 @@ +{"tx": "d336dfaf02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ccf00000000eb3e058b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d701000000e10936e7046a80940000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48745010000", "prevouts": ["c49657000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d", "db093f0000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ef7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e87a25236fb2b0caf4a960afecbd8538cf949b3ef5b854c8fdc156128073078e11b030008666d4260a12bee868d13ea953ce9c9319f2222d8e8469ea0b912b8ceb"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b1d33bd2ec2ef2b80e561b3c30cfb99b356a60261a599d7e1f2ff199de481a6e8ef60344f111a9c34d055af59cfd42b130acbf4987ee3354719b7c9974e4d449"]}}, diff --git a/txscript/data/taproot-ref/a59cd78a997d502a498c2b597cda9c8cb9b435e4 b/txscript/data/taproot-ref/a59cd78a997d502a498c2b597cda9c8cb9b435e4 new file mode 100644 index 0000000000..6e4e2237f8 --- /dev/null +++ b/txscript/data/taproot-ref/a59cd78a997d502a498c2b597cda9c8cb9b435e4 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbf00000000a56b6a2060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f400000000b6cc542e020ae337000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acd5656735", "prevouts": ["148b28000000000021561f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "a4aa11000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["76f3c1c5360f37e418543fc90fdf11d4bc49ee0f5761f9397c721536f011ef6bee48fa7085ddb2789aaa88835f495523673adc441d8fbc12423c05431834c02b", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/a5aaae5e5cc3955871ba97a7c41d307fef2b72eb b/txscript/data/taproot-ref/a5aaae5e5cc3955871ba97a7c41d307fef2b72eb new file mode 100644 index 0000000000..a8aa7d3de6 --- /dev/null +++ b/txscript/data/taproot-ref/a5aaae5e5cc3955871ba97a7c41d307fef2b72eb @@ -0,0 +1 @@ +{"tx": "6ebe113f03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c480000000082f72a8cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba501000000f5b89fa8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcd00000000c556cf97037ed2db0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acbb000000", "prevouts": ["98a94b0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "d2402700000000002251208f7166d23fc1e45fbcf26b51bd386ab915626b0708475a8743064036728c78ed", "8f956b0000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "e97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e88b8d8a8d8c003fabb93595bfceed403f9a1266ee95e7fa8447cccdf398ce498db8321554bafe286e6661652cf416d3db0b455024b23404eea069d656c79e4f25"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e84a72ef51eb7f1fd93b7716e160b4419190ea5192ffe31c8263ef308a11abcda602e473c0179dfd44294f4ddb50d827cec9d4b4e0c6eae7f68c0301f0fdfe7e6b9e5e4bd2cefcda110a5bf613694738c198174b403d264db4691720c8f18fc7b8321554bafe286e6661652cf416d3db0b455024b23404eea069d656c79e4f25"]}}, diff --git a/txscript/data/taproot-ref/a5ace5adf4a44f04399e15b18f44e6a83e13b549 b/txscript/data/taproot-ref/a5ace5adf4a44f04399e15b18f44e6a83e13b549 new file mode 100644 index 0000000000..4f5af7d060 --- /dev/null +++ b/txscript/data/taproot-ref/a5ace5adf4a44f04399e15b18f44e6a83e13b549 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9a01000000b5f930dadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8d000000005ea06fac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127044000000007a558cdd0125890e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b1000000", "prevouts": ["5c0c570000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "7bdd4c0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "fc3d0e0000000000225a202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c9", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720f48725aff660a72fd31f8e9799fbe605d57d774c031cecd8b6989780acb581b6b24737b64a51a2c518aa096a7a1ea5ca18eed83cdd20aa73c19d83535c466892"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d510b2b16248e513241b83875342c0ccd59e2b6d40dffb5019b56610da5b5de422d74e6cd8e612cb42cda5f7f42dc10fbfe42e4e0a9faed92158fa7e41e5f92051e17d2416a1ef9313076e185902c26d9ae3ba1c967c4fe3d78707cdcee712bc7b1"]}}, diff --git a/txscript/data/taproot-ref/a5b907c867904b2e2631128c5f637988bef1282b b/txscript/data/taproot-ref/a5b907c867904b2e2631128c5f637988bef1282b new file mode 100644 index 0000000000..26cabc7b8b --- /dev/null +++ b/txscript/data/taproot-ref/a5b907c867904b2e2631128c5f637988bef1282b @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40300000000adc681c160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b301000000dee1962b01d87c34000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478764020000", "prevouts": ["f8753600000000001656142540f27e90740933c99d4f17ab2dfc6c82951cfb", "65390f00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_csa", "final": true, "success": {"scriptSig": "", "witness": ["221e1e1f3eececc228910338448dee6024c7288f8c252bfec6a82722f916b512993669a6e26724735390f42f619be92a22f916665ce809bdefc3eb63c759b5cf", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef32555276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}, "failure": {"scriptSig": "", "witness": ["221e1e1f3eececc228910338448dee6024c7288f8c252bfec6a82722f916b512993669a6e26724735390f42f619be92a22f916665ce809bdefc3eb63c759b5cf00", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef32555276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}}, diff --git a/txscript/data/taproot-ref/a5c7d3a86b0f7fd48476aea167e188ad2e930dac b/txscript/data/taproot-ref/a5c7d3a86b0f7fd48476aea167e188ad2e930dac new file mode 100644 index 0000000000..5c2d8b7560 --- /dev/null +++ b/txscript/data/taproot-ref/a5c7d3a86b0f7fd48476aea167e188ad2e930dac @@ -0,0 +1 @@ +{"tx": "232bcb1b0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a201000000a1df09d060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f201000000b8a452ae04e91d1e0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87b413c54d", "prevouts": ["175e0f00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "f6db100000000000225120c230ba0a2d20add5df8769fc65d7fc3a12d7cd95ad679e3207a6c75325eb884e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_keypath", "final": true, "success": {"scriptSig": "", "witness": ["5b901a4110669a243d2b1eeb05469658a3dc98adb1d7bd56c7c637fe495d38af3aad12243a99cd5b81af57cd02fefff61656d4e179954f3a1f6ba88b6115ea9e"]}, "failure": {"scriptSig": "", "witness": ["5b901a4110669a243d2b1eeb05469658a3dc98adb1d7bd56c7c637fe495d38af3aad12243a99cd5b81af57cd02fefff61656d4e179954f3a1f6ba88b6115ea"]}}, diff --git a/txscript/data/taproot-ref/a5ccdd516198da910321185e29de6f20d9be2985 b/txscript/data/taproot-ref/a5ccdd516198da910321185e29de6f20d9be2985 new file mode 100644 index 0000000000..78b832e6d9 --- /dev/null +++ b/txscript/data/taproot-ref/a5ccdd516198da910321185e29de6f20d9be2985 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d02000000a05c23cf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e70000000024c7cacb02189b38000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987a8344a32", "prevouts": ["0e0e270000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "ae3f1300000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "9f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e93df6a2e62376e6a3587300ef2d1a395dd90428413a52508272625b5a1a189adb591a16be56540de55d9fbfa115de937b3aca1e4dd0f5a93f17ebd2ebda95183"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936327099b01b253298afa4f7cd9d288beb4aefe51868cce630b6f9dfce458fab5ee7391eb2542a03443f1c351bcd0fdf78b6f5cd40e118bcfcda3d325918034371ee453f7f7ccbda5a0ba96115b963083e4b2e9e93a3abf82e4dae88dd7e6a6b566f3617d560800e971f99646d89bd2028caf0c6d02b6f505a11fcad3ec349c801"]}}, diff --git a/txscript/data/taproot-ref/a5d4903bde9105b510f48ef3783702f402c38289 b/txscript/data/taproot-ref/a5d4903bde9105b510f48ef3783702f402c38289 new file mode 100644 index 0000000000..0b6df5b1c1 --- /dev/null +++ b/txscript/data/taproot-ref/a5d4903bde9105b510f48ef3783702f402c38289 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3c00000000038eca4160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270650000000086bf9efc01da691800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac09bb0336", "prevouts": ["9b0e76000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "3acd12000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902eec2e5a57d677921aa4096b27e673aab99e6095c2094b15af3537f8be01164cdd3ea6510c2c74c68cd36b1cf0be60c3824f19bd36a3462cb5ac7e08db9df41d96c4f7ab6fd8f106635912e51b082a2848c5bfb02ec6000d7efe4f6694170a3a2093f1029782f675b2667204b8638dc957e76d3f5a894c2cfd3581361c2f06a35ef6fe913fe7f0ab9112b1ef2c4a2c5fd84fa449f4795765b025f3f8da609f4a80fccbff16d30aac4246f49f2cd18ab97355156dddc16af612a05b65f56bc170ddb0b8163a0dd5677bcb6718ed4ec9bdce3f614bd322f7eba943e26cca0f3fe141f02c2fd0f728970035effe127950da0258fbea1780a2d956085748424d3d41a16148da948e7d6e115d355436ed2d385e7542d4b75fbd95633b43947c2049445a6136a82780b035e8941b4d5aee7b0fb9a0887d44fd67b4ee47f923c7f1714673ab8c2b2ddd3fdc975ddaec7a3ac9ddb8d9bb74bcc86595f27668d49beeea4ef7053a84af86c9434571da729603d8647b39fe6d173d70fc8c7ae6ca7f40c5a3cd6d924ea8ef86e621e44696d8d5c99bd283d7c4f7e533f8ed07dccdf5ce13e3970c9534fd32e9601ac4b4bcffecc6b385ef1672b67c941c2e1b91332a12b8dc3a28900dd5546dc7fae081100c70851f052e0c668a7fffb79667009f7e6af9544135ceaae30b3efc6647c9865a71cd01cbfde034eee5724ae7a826a6552690c93308bca3be2ae16604875", "cc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac391effb841e4c3f4ca92b599bc572f2bc6440711e20bdc5ba4fc353379105b198f95dbc4edc81931664a748b39a9978dd32dedaf5c850114f6bd2f5098c050fb"]}, "failure": {"scriptSig": "", "witness": ["4d09028695c928210b8a04282fbfe862a176d53daedc4f373270b87a731c794df8a5ba9babfc041a3d2559894981d2033f68b9e65fcc30886452be0a17f7913f06e13cf00f61424f331dc32df986fe3e817cd25153eee79f062c58bb21516c9f4bfd2bd57e63190004d0c8de74d9a858f80453c92a26168df1ee86a6570628810c311da96ea1552827306efc86de691c94843a887e6d82ce1b0e454de12fcb294e41d81936a9c26ff62b7c289b6e17d649f3901d5214c915cea5b5b2b8f5b4cc7c8f23b6336948429946d6925baaffdcd30908657f7e3b4b0927d499d93ad2f1c0af5654e96c001b55122ad9a07a4d7e55da201776171c08179b53e3603375660d28a92752fa35d72630f777617cde4738fe39e9bbb5fac7e6fb9aa0a512aa9151e83a410cead4e136dac1d042be70176ad9893d0151f2c83e4e607c8f4b2e441c4a742f01f146998cce2c5108b2066e200ea5af86f0f1736294873424a4712700743e461d49a31cef41c0d11da73549e1f2aea5a1f073b93ea6af5cb02c8fd6cf4983dfc86fdf1d1a3437aea4807b4fe3e3ccd1b9669f840e7fb442cc2c7abba36fecea288756f1aa31464d06de6c313b90fcb003653339ce222ba0fc7e9561dda2cc6bf148aefcd8cae1dcb1a5d62a048cefd0b5e18fea383069ee4261c479fe60a98c9fda82c4bdaa6a388f52cf4c848943df42a37cdbee53e5d5c60455a6bd9b739b9adf55c5883e136075", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8f31245d0339f22fddf0c8a157372cfa350cb7b4c29fad108e38a2a212532063d8f95dbc4edc81931664a748b39a9978dd32dedaf5c850114f6bd2f5098c050fb"]}}, diff --git a/txscript/data/taproot-ref/a5f0f80d6202449807c3c23b59496812943f4d12 b/txscript/data/taproot-ref/a5f0f80d6202449807c3c23b59496812943f4d12 new file mode 100644 index 0000000000..6e97bfa79e --- /dev/null +++ b/txscript/data/taproot-ref/a5f0f80d6202449807c3c23b59496812943f4d12 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c33000000003fb3db2960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708000000000f56cb0cedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5600000000b56ec84c033b18af0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac87d19161", "prevouts": ["5469470000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "ad4f1100000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "392e580000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "747d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9d51b7afe827d3ebe2ba9d78269a9de5b698f1c4b4dd21f6a9ac5eedea4c46567ed562df09fa99b9816795ca593030d6e2a26df3d36427b327259a2f453cdc8077aea6ccf316b47e40a0e3636c5ad4f7738b9bfce630d4a478a0dbfcb51ed93"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826e257627f53ae21a01782ee3e7d4da03b01bc19a25fdaba4c8a32b8ecf0a2d91bf4492fa00dc56072e72009d776219274bea6eb51adb458249eab71940c27cb4bfbb1ef2412aee06f4b75b9e20a72d4d9707545a4ae77abc538f76b00105406a"]}}, diff --git a/txscript/data/taproot-ref/a610da0c9997c31b63719e6fe71e9b82d48595ec b/txscript/data/taproot-ref/a610da0c9997c31b63719e6fe71e9b82d48595ec new file mode 100644 index 0000000000..7c9845970f --- /dev/null +++ b/txscript/data/taproot-ref/a610da0c9997c31b63719e6fe71e9b82d48595ec @@ -0,0 +1 @@ +{"tx": "0affb4e102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb601000000148475f38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42101000000c9d6518c023f499c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf4e9e538", "prevouts": ["110a680000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5f3e3700000000002358212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_9e", "final": true, "success": {"scriptSig": "", "witness": ["ed0921a70f405b28f146ee780fe72d7aa100ee6487cd304e5ef0c1ad64e2786e7801ec6e9e89efca57dcd7ba92347680ec58009f8cdeca548938e006adea4d1283"]}, "failure": {"scriptSig": "", "witness": ["707f61a7b7877effdb59b96e8a661221cef02288cb18fb588cde977d58bc77b2703acadfa8d5e49065795b658a98406355c10a2500a1e0e9e42ce7dd40f12cd59e"]}}, diff --git a/txscript/data/taproot-ref/a63c8dad9a5b7049824ad507266f11ef32fef7c3 b/txscript/data/taproot-ref/a63c8dad9a5b7049824ad507266f11ef32fef7c3 new file mode 100644 index 0000000000..d648eaeebf --- /dev/null +++ b/txscript/data/taproot-ref/a63c8dad9a5b7049824ad507266f11ef32fef7c3 @@ -0,0 +1 @@ +{"tx": "7a4c3a2f028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43e00000000402394cabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf43000000006307458b036973a8000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374874c040000", "prevouts": ["887434000000000022512003ab4180fdf64546247c5e9f6e4b9eec37b1d29fb6f370a343f066de5418d90b", "20ad75000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "final": true, "success": {"scriptSig": "", "witness": ["ef4e3ecce5d603e2d157e805fa5065208266e33fd73623d634c8de72e786f0311af4cb7678bbf2159735c79f83fe03a1a89cc7191d09be3128e2430e2b7f37b8", "40aa3b83941ca7138c8b99c297ecaf38b30f45cee32bd171fa246b253f034d39a77078b2c441861fe83c78db80d7a38b3f7bacf4b698898ba38e4e79f1856dc4ad6a16affed09ec4d6c9a2", "4cdc9925d14c6a90de73495e12e353b24d1bab3e395e525bfa7801b627f0b4e87848425136ebcb9db95449f5953ba463a95ef31b42a3cf0b40e2a4cc2e38ea793ee9b93f98bf3526908a43602118c4837ddd5b66d5dd1d72e356161d3d3ec27bd92143416829ede2a102bee99dcb87bf3469cb550b0adb0a469b36d8d6de17dfdf028e23163063fd42bb48833c5f567f083650fdaf927174fdfb6586dbb757513f9d72de77e5dd84d1d9b751c146a59275e1951767ce3cc2e53d3a813252d4c47b30da077dc3e6574aabfc5a5c823286ba68da388751732556e70a7c2b4c6d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641efbbae90d977c0a77f4a6d00a1fdc193ecaca05aee87ad86fd7458efc1bf9850616ba036f0261d3fbb05bc424770fad9d81a2fab9eae73d3c6a84d24acde4cf7d259f27303adeefe063910662639cd9206b8eed45d51f9a3ddc7becb8e1d697b81bbe024263f56fc7a5f55cd5c1f3dce1d35803fca6550652a1481f3d5d41582d86073393cae44f941e67fb2d850fa0d7a841f3f7007760f5a04dab5a6c76bf8e13d57cbeea15c73e171cc780d6a9ed9745a67e290449b49e5bc260f913c109b2712604811149f7e1fe8660b15f3e9c7c27b36e0865176f061702b8197645464b90c25eadf8e3e7dfb1e0fec34e85834a1a5dd46e16fe1d533563469e8c1b505fa9a39ef433ee7b7ce87bd7d2ac142a5c16fd03db838e94b94ded093b75bdf93a2a91e66878d1a6a955a8d70f562f6276e393d3ac94b5eeab37bddf8de0f74f7f54bd02628b355177f1dd586f09e37f1b80ec17858d180db76c7ee658d4c390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058daf0b4fadf03c4de067af76b756c06c36d23c217cef183c97956a3fb3177f7ae9b9f79d9ac6ec5c9f3f07e75b6b2eb78d303c91d98a4f03fb478fa73d35778ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000dce634dd5f9bc5e08acfd55a920a255912d7ebfb63916c4272554460fd5ae1f40000000000000000000000000000000000000000000000000000000000000000"]}, "failure": {"scriptSig": "", "witness": ["ef4e3ecce5d603e2d157e805fa5065208266e33fd73623d634c8de72e786f0311af4cb7678bbf2159735c79f83fe03a1a89cc7191d09be3128e2430e2b7f37b8", "a725c68ec8f406dfd7dbf5a273f87645e55f6f5239a31ca00c76a2c7c65d37942611ca42e24d2db79d1f7f6e5466e7bdc2da45f856237221c84dcf3043d3d61b251cb4c9f1b338946c17", "4cdc9925d14c6a90de73495e12e353b24d1bab3e395e525bfa7801b627f0b4e87848425136ebcb9db95449f5953ba463a95ef31b42a3cf0b40e2a4cc2e38ea793ee9b93f98bf3526908a43602118c4837ddd5b66d5dd1d72e356161d3d3ec27bd92143416829ede2a102bee99dcb87bf3469cb550b0adb0a469b36d8d6de17dfdf028e23163063fd42bb48833c5f567f083650fdaf927174fdfb6586dbb757513f9d72de77e5dd84d1d9b751c146a59275e1951767ce3cc2e53d3a813252d4c47b30da077dc3e6574aabfc5a5c823286ba68da388751732556e70a7c2b4c6d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641efbbae90d977c0a77f4a6d00a1fdc193ecaca05aee87ad86fd7458efc1bf9850616ba036f0261d3fbb05bc424770fad9d81a2fab9eae73d3c6a84d24acde4cf7d259f27303adeefe063910662639cd9206b8eed45d51f9a3ddc7becb8e1d697b81bbe024263f56fc7a5f55cd5c1f3dce1d35803fca6550652a1481f3d5d41582d86073393cae44f941e67fb2d850fa0d7a841f3f7007760f5a04dab5a6c76bf8e13d57cbeea15c73e171cc780d6a9ed9745a67e290449b49e5bc260f913c109b2712604811149f7e1fe8660b15f3e9c7c27b36e0865176f061702b8197645464b90c25eadf8e3e7dfb1e0fec34e85834a1a5dd46e16fe1d533563469e8c1b505fa9a39ef433ee7b7ce87bd7d2ac142a5c16fd03db838e94b94ded093b75bdf93a2a91e66878d1a6a955a8d70f562f6276e393d3ac94b5eeab37bddf8de0f74f7f54bd02628b355177f1dd586f09e37f1b80ec17858d180db76c7ee658d4c390000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000058daf0b4fadf03c4de067af76b756c06c36d23c217cef183c97956a3fb3177f7ae9b9f79d9ac6ec5c9f3f07e75b6b2eb78d303c91d98a4f03fb478fa73d35778ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000dce634dd5f9bc5e08acfd55a920a255912d7ebfb63916c4272554460fd5ae1f40000000000000000000000000000000000000000000000000000000000000000"]}}, diff --git a/txscript/data/taproot-ref/a65e2a892ee1771cf4861f2c1bc2d5f505645c14 b/txscript/data/taproot-ref/a65e2a892ee1771cf4861f2c1bc2d5f505645c14 new file mode 100644 index 0000000000..6c64012223 --- /dev/null +++ b/txscript/data/taproot-ref/a65e2a892ee1771cf4861f2c1bc2d5f505645c14 @@ -0,0 +1 @@ +{"tx": "b063326b03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfd00000000d54304dcbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe900000000f78d71fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707000000000eeb7db83038ea0cc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df9797223689870b010000", "prevouts": ["daa652000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "f0016e0000000000225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "33870e000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3045022100f81b8bd0e5856e3eea9ceb7a34c12f671328026bf899b61a060b387234269cc60220282122f39466da35d6ffe4a7c2a6e38c2ce97ab4464dfc9eba2d1b0d06a30b3f83", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3045022100e75e677ca31a354f30032050d1126fd0546e139de92a73a5392bdebbed38158c022014973c9342a6e814ab9ed22a17b67e9e04d31507de7cdd7d9a5151e3dcec325583", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/a66d01f6351976b51603542719f7e00648878dc0 b/txscript/data/taproot-ref/a66d01f6351976b51603542719f7e00648878dc0 new file mode 100644 index 0000000000..acfc7bdbab --- /dev/null +++ b/txscript/data/taproot-ref/a66d01f6351976b51603542719f7e00648878dc0 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8701000000bf8067dedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca100000000d2a15cb9029568c300000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47876b040000", "prevouts": ["d3fe700000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e24b550000000000165e142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_40", "final": true, "success": {"scriptSig": "", "witness": ["e426331a8fad2cc97e797187ef99b7fb1e378c4b008a351c3c78fcc06c2f00057798b65a87a8f8be462cc502689790c7d9425918e1204cccf4eb617969dbb42603"]}, "failure": {"scriptSig": "", "witness": ["04499c1d4b3d8718dfff9ce4e57130b60d88e4fccd295f0ad8449031d050ffc80c8e162bb14652433f5b3c9e08c5b22a0cfad24b1c9b900f8b017783a4c534bd40"]}}, diff --git a/txscript/data/taproot-ref/a686f07063eda38bb50a12b8bff95eb203e492e2 b/txscript/data/taproot-ref/a686f07063eda38bb50a12b8bff95eb203e492e2 new file mode 100644 index 0000000000..6ecb9d87cf --- /dev/null +++ b/txscript/data/taproot-ref/a686f07063eda38bb50a12b8bff95eb203e492e2 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3e01000000c939c0b1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3c000000003e7a40d504d3214600000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a603000000", "prevouts": ["72c32600000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "70d6210000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d668", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936661e017775885ff16b303f239ff1d68a27e8f3b845da3c007af0c869ad5cd4dbd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51e30d689b41c4cadafebe300f1e3aad2e0751ea174af1d1313cd49baaa526270b3acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08296d09828da376c7d22ded5a4cf88780a729051831fc4ab0b26d0bae49a473f5539caad535bb8d51429d9c94edd44271a241bcdcdcd941caf815b31d1e73ac1400dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}}, diff --git a/txscript/data/taproot-ref/a6932b59aafceeb75607a7b5c0b5d93b3f2e17dc b/txscript/data/taproot-ref/a6932b59aafceeb75607a7b5c0b5d93b3f2e17dc new file mode 100644 index 0000000000..5dc9b50567 --- /dev/null +++ b/txscript/data/taproot-ref/a6932b59aafceeb75607a7b5c0b5d93b3f2e17dc @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ed0000000005c790a2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6c0100000018167116dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9f00000000e046d60303b5e5830000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e74d241b32", "prevouts": ["69900f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ae0c58000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "92f41e000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4b4e321dfd5536232eaef67cd7779b0e400c7a17a369dbe44f6d3cf0436c0a34cc80764b3c3e93e4958bf58fae47a07e6a3ac966c9bf86a1c799b8570c4674755"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364111e840683a1cfa1052f9cfdcf24e918a2939e690b2f7481352b952cd61f4023f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f61f73219d91856056394a010eb6c8ee7f13c9683181be224f0fcf47ad20d61b9aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}}, diff --git a/txscript/data/taproot-ref/a6b7a9259b013c7a8613e1a5291dff6a4c46e85d b/txscript/data/taproot-ref/a6b7a9259b013c7a8613e1a5291dff6a4c46e85d new file mode 100644 index 0000000000..e4f22dc83f --- /dev/null +++ b/txscript/data/taproot-ref/a6b7a9259b013c7a8613e1a5291dff6a4c46e85d @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd3000000009fe7febfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b86010000005573ef0e03daf96e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787dcce0e48", "prevouts": ["492f4f00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "2c5e220000000000225120d0cab111a0a7736e4b6d77027eed86efb57774f05b322cfbf052f28c507b8b1c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "b17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cae86cd3dd9bd9d0577c5e628f8c108447049b8824610cef934ea775cccad27dc037589144f6259b59768147ff9100354b3b8b337e77dac87d022b72101a452a989f510e73a03c44610e5cde856f75a0d7582565d561698089d126c5e7f66809"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d00392cf6f299065ffbf5a36392615c3de37904e8baeaf39337c685dfd4950987965eeee556c39a9ca7aea66d0df3ed5bb1c1b5d1b815eb2ab41d6c7fc5721f63804e0ef706f1ca5c8b2fa38155abc6bb5e2265734815bc03afdad0836bb7f05989f510e73a03c44610e5cde856f75a0d7582565d561698089d126c5e7f66809"]}}, diff --git a/txscript/data/taproot-ref/a6ba23753e57cd1a1f2d7e37472e4679a0f113a7 b/txscript/data/taproot-ref/a6ba23753e57cd1a1f2d7e37472e4679a0f113a7 new file mode 100644 index 0000000000..ffeca1c769 --- /dev/null +++ b/txscript/data/taproot-ref/a6ba23753e57cd1a1f2d7e37472e4679a0f113a7 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1101000000c10c2513dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4a000000001013795b0240fdcd000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac35020000", "prevouts": ["660a7d0000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "ea8852000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000062", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f93f6925a87bd14746adb659f1fe3cf13cfffe886e85290181fd9d778229362a9b124451a95f66d328740c8f74b6bc79ec66573930240463dbcd03d8389735ccc3a658b9783cc0a28fcc02932d4b85eca4f49aba0b4fac0b36a7e3a0001ff4113fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4a90fb3f53527a925db2b4d49a3795cd34d4dcf648c4b3a4a108990f2ed12b180a28c39ce330a19a0d6c22ddc640bc3609271e6194de475fecd1ad84a88d361935a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}}, diff --git a/txscript/data/taproot-ref/a6c5d8b49fda54f8534027bba1269af6af46da1f b/txscript/data/taproot-ref/a6c5d8b49fda54f8534027bba1269af6af46da1f new file mode 100644 index 0000000000..eb446a307d --- /dev/null +++ b/txscript/data/taproot-ref/a6c5d8b49fda54f8534027bba1269af6af46da1f @@ -0,0 +1 @@ +{"tx": "1708ab0302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1902000000fef83395dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb400000000292d34e70146f851000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87f4000000", "prevouts": ["dd835a0000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4", "51594f00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "417d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e53f01d9cbc4ce44e53bf46e342c1ac713c14ac9ff1cc3e88a31c5570fba253bd819e00a9246c8c145cff8a91ff4546d478c6c8e3d7b4e3f7e61102a4388494af"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e6b3e1503a75cab4228de52cbc7114305d9c61d6436e3951ac91baab2f1e550532d46fff335db0bc559e9bb1dfa0a13335da6dee7eeb053c06bd06875f6e68356831d286b681d36077bb0670e25d1d3b2bbe36e9d696c3276746d4ede397eb7d"]}}, diff --git a/txscript/data/taproot-ref/a6ccf2fabae7c6419459beefef87fd1e78fb2d4f b/txscript/data/taproot-ref/a6ccf2fabae7c6419459beefef87fd1e78fb2d4f new file mode 100644 index 0000000000..bc26c57525 --- /dev/null +++ b/txscript/data/taproot-ref/a6ccf2fabae7c6419459beefef87fd1e78fb2d4f @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca801000000af0593dadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1e000000003ce8e7810303907300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b3a96d28", "prevouts": ["2743510000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "27ec2400000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "e27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ddc5ef0753cfbbae9ae95a5d7a8057a0f244ed9534f11134802dcf3d6e001e11de3dcad145b88b360fb9f51ed5363f34910a171e61f360dd6bdf047d4a1b93cb212021a26ea5e00fb993aa3d0fc1bd1e431f365db69035b8e4625845fc9b697c"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e0bc8e394a89b61e744ca0843579507fbd14c939f32cc2eb6ce7075b90210fcdaec7827d9bc9e4e8e39cc141cf7690ea6843d6b50eda1fc8d5571fb149b2aabab"]}}, diff --git a/txscript/data/taproot-ref/a6f23c5bb6dad507a24fea1ceecc0df2a026481c b/txscript/data/taproot-ref/a6f23c5bb6dad507a24fea1ceecc0df2a026481c new file mode 100644 index 0000000000..3b90beed62 --- /dev/null +++ b/txscript/data/taproot-ref/a6f23c5bb6dad507a24fea1ceecc0df2a026481c @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4901000000213507c5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5300000000f92f4bb6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf150100000091782beb0145d3670000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc4eafb2e", "prevouts": ["6e315000000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "96f25c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "60086b0000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "0b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93684c23a4f834a7effc42b1c4f88dcc82246b0d4e764e461eb4f4db8348ecfb3306eee185c5450ca8ff820874ed786a77ca41a0ece110e4e1e272b53628d0f659ee0d9bed60e53dfa6fe8b58229f37daf0597893c765c7b30814eb9e16fca89b86"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef92671edfc08b1595b62488145cc68a42644b51379cbb9ed71181eed5e56f97e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8784d9e7ee919b8817f3904ff7d27b5c3a4ce3798ed5b994b75288b8e9341d9b42c78e40500fa05b550b7f6357dbf83024c41a574f6a1706762c104fa8aec3fcb"]}}, diff --git a/txscript/data/taproot-ref/a708a2f8ec818a38ec29e17b587179a32b43d704 b/txscript/data/taproot-ref/a708a2f8ec818a38ec29e17b587179a32b43d704 new file mode 100644 index 0000000000..25e42af2f8 --- /dev/null +++ b/txscript/data/taproot-ref/a708a2f8ec818a38ec29e17b587179a32b43d704 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3101000000c451b5dd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127015010000002772d9f604f9e86c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df9797223689876014a635", "prevouts": ["13265e000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "6cab110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "2b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670b7161a5b1cb29051dcb3b6acc763e0bb56982feda88150ccd46d276a32260d527b3d6e358222ba6f0d0e44427df3c74648eb5abf60e34311dababed48c5c2bd74d03d2cf0ae79996d1bf896237ca201e78f1b4c5ece550af4c0e01e9fa9886"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e44f1db148647e579a127c5c190f6913605985e391579ddf83e446378ee4bc7a1d75fc84f2af88925f7ad475b3203cbf9256a43a0cda52d14a3416be93a7fb1c4d74d03d2cf0ae79996d1bf896237ca201e78f1b4c5ece550af4c0e01e9fa9886"]}}, diff --git a/txscript/data/taproot-ref/a70da8709e12ffb27292ce7290967a40c89cf126 b/txscript/data/taproot-ref/a70da8709e12ffb27292ce7290967a40c89cf126 new file mode 100644 index 0000000000..9b43debdc1 --- /dev/null +++ b/txscript/data/taproot-ref/a70da8709e12ffb27292ce7290967a40c89cf126 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaf01000000ef6fe8da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703c00000000151d319e02c354820000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acb4e81421", "prevouts": ["e0b1750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bc630f000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3045022100e3ea4829c15a3bf776b65a0fe0b1e6bb100a0413eb3b20dd5820721f3a62cce30220223e98bd049ac8f17a050b740e2a8cff561ace71bae3711903eb991d6e66976082", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["304402202e4e74cfef2382a010e10be770a5126740c96b42c360beb847292202b380fe49022043a288cffa8855e928ed3ad9029d166d467591dee6597cf40b5e941982dd81b082", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/a72f0993c4460fa269fecd7c19909f1a8f319d4a b/txscript/data/taproot-ref/a72f0993c4460fa269fecd7c19909f1a8f319d4a new file mode 100644 index 0000000000..f2f537ab78 --- /dev/null +++ b/txscript/data/taproot-ref/a72f0993c4460fa269fecd7c19909f1a8f319d4a @@ -0,0 +1 @@ +{"tx": "2b467a1e03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3d01000000139453f3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b81000000002569e0acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4c01000000b62770a0012fe80c0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc33010000", "prevouts": ["8f265c000000000022512035205488698c55c3e7035f1484d2f513744eb9d8b6fb6f0df083f7669ef0bfda", "7d6a1f0000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "d6c05300000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902346020a3263d5c4c92afc2504229468ef459e0c8a9425c4b8d7ad735c4ccb785c9498de5c43d514bac29008e912d831cf2bced5c999b623ff09c62adf6557f97ae80d9e399719012a7d1818a223b88fd05226bb64f4410d12c988e3255557b67fa6820165b381a9852e5e7a1c65d27ce16d1a13b893e68d6e1a5a4a7779735685573fbd3f40f31d7b19f02187a97d4069eba036d9e3c34ffca5326f3507b0b8f3bc18803d1e1e1b297e5c6ffd68e0263ec749efbcaf3394297688a5a82bc869a2e3361fc6ab00381d17e644540619e23e06c328f5ba3925570d4e0d672633b571014293081eaf061ec8026cf778e4639dadcab6db4e70281c6b5a6edcef61155f3b41bf44c1c0b87ae762458aef3e3afe7958edbf20d24453040f80538842ea10459d5537825a3f8643daa481d567b0fb169e8c194f1aaa697479cdd94e45e9cafda25267ea6bef876bce509606e4c8a465e1e2395455bddd09d08e3bffcbf397b8e3736568834900b2d4655bf8e1beee4e7eb3eba37ad9cbeeeb467de3c84187621921a6a12b8d66e632bebf7fd93f93acf4c2f200067a4f61956d776145f4c67e7c8156db0586407a9438f23190b426d1569138af117f08d062371cae0ad0d58e023d755ba0498661894ed3ce24eb3afb5c9a245a058072621f58289a70b4463e331aa052570f8ab87060962c9ced574171afcd493da05c0eb34d3a4216e010bc30138d695cc181875", "e07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a9c082d7a7f7de44a9f5e716083bee5abe71d27348a6c6c8c4ae2385abf8d44dcfc84644ef9fcb418936abdde9e6d46d404f44a19de7b4f5c4865233c46051e9a410273431f29264d27122ed0946ba884bbeaa1cf1ddeb7776ccdcb7bb2f1db0"]}, "failure": {"scriptSig": "", "witness": ["4d09023cdc65778912e029db5fe78cc6d0b5525d191b55df27ad4610d3fb7db57298422c170fe1d73a30c1667b0282287d9d54a7ba2b101737721a7476993b8a90d38472e7c2d0acd92f1cf21549b7472adfcd070ccaf6b875206e4db55e2f9ed6cd848bf44e340cd155a04ea322aee16c896614c4bbfaa6e8f6b38f0ccd72d9ed8789a9b7597eebdc6d0c6c92eba9fd7029d391807df09619fc2883f1172ac79d004fe87c89974245e5077a6ef34286a24cf2f96ff82403cf12528673d08083d4b52b343622f1cf9d63c62fed5fc18274173fa2766944e4f3b0268cff4443f771e8781519ad8bd4cfcfe70f6b562735c35ddbbec49b4cbf5a84640a6a7d1d22254ed80f65ed54e63fc545f5732479218c1ff2e15a7f5625c152cc6a1c89a8459b585c7f04ffce84ed0569514183d1c6ccb76f6c772b651421c6b52ea282a1fe049ab742a3017f8a15b8984c8adbd8860a3503a0c6ea08db6faa6658eae1aa36be517a65921509e62b8de98a22d113b2e644cff96696e3196b27920461e8dbc6f4c02a09736dc6b25387b13bf94bca5762ee58d82ba67037939e65e39b2cadde03d71b2efb4ca894fe8574d95dd2d10c3916c37f6b4552b1bb65e636e5c4d424de266883004593f8db6752c111a25448ed4bf9e70bda17b69c780b0374a7aa852f14762a4cb4ad1ad570f0047966505ad03410abd8836032b83cf3fce8a71f463ab4fb02b4cdbea4b2059d4b75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93653ef5c0f24be88f175543190b3df0cfd9a18eda71b356c1e4a2e53d4881e725e8e461ced71aca9bcca55b69078fb4637b626cf10c8373b915aa1b57bf9dc2b76cfc84644ef9fcb418936abdde9e6d46d404f44a19de7b4f5c4865233c46051e9a410273431f29264d27122ed0946ba884bbeaa1cf1ddeb7776ccdcb7bb2f1db0"]}}, diff --git a/txscript/data/taproot-ref/a732f61f7a104110a42397e2f2bcff054f17f50d b/txscript/data/taproot-ref/a732f61f7a104110a42397e2f2bcff054f17f50d new file mode 100644 index 0000000000..2fc2ddd85b --- /dev/null +++ b/txscript/data/taproot-ref/a732f61f7a104110a42397e2f2bcff054f17f50d @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0a0200000089a51db2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6301000000b13edf8504c9d17400000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac29b2eb20", "prevouts": ["4612240000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258", "7a71520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b4", "final": true, "success": {"scriptSig": "", "witness": ["be7e3880ca6e693cac1a5f7889b2e04ad8fcf784d322dd445711a14b845f980a726f127e294281ba8f5a371ca3abda7ef5d65b57bf5cc940de9b0f93cfcdeb9683", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7ef176ec3b5b8e94bc337627fe40b23168678ae536a574515e51fe301b78516c38d4453cf77eb2468ba3a5123a5fc2f6f4dc946b5299b279d5aada1bb926d962b4", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a736014c5e879818948ab14c8851770efe5d5fbb b/txscript/data/taproot-ref/a736014c5e879818948ab14c8851770efe5d5fbb new file mode 100644 index 0000000000..65581ff4f7 --- /dev/null +++ b/txscript/data/taproot-ref/a736014c5e879818948ab14c8851770efe5d5fbb @@ -0,0 +1 @@ +{"tx": "66f1c1cd0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ea010000009c1919fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e000000000477db4ae01416e1b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4879c000000", "prevouts": ["77a610000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "afed0e000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/input80limit", "final": true, "success": {"scriptSig": "", "witness": ["5334ea9e86c7471e37a8b4d5526bc777286b69216c68a844e99e50793190372976b4027c2d9672d4916d60f11b1bdbeeedeed5383c2dcc9f8828f31bde8f845e", "34935091b35283d2de16b48ee783ac66311b6ca0edc7b43b5205053f47522eec8534fac18aa726240187128ec99ebd521e90f971d252f3c4c735939c807f73d659dc58e7434887fe7e9b9422c7223808", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93633f145906eb3b0b9144503b7e952fa7ac030804bf21818b76946b0617a1dc901d4021eb67a5422f2c264ab2e161e443ad68483a924a10f3067064f47bfc1aa823d0cff3dcc0a2d4e46fc30f48a30ceeaa99fba3feb9f110c8632a3b2fa3f4f4f8fbdead7f8de6a8aad36d37b0d589bc9244c1684fd5ac3294cec67c7c6e587a6904ede5a53833ce5d447360be78b94add963f9070eac219e9b04ee2bdd400ddd04364ae3f3c0d48023a93d8481ba8ff7adab87d79476f69028f3fb22b08d057964bbb3ea34308947c748760264ee9e03eb1f98d2b66028dab654f580a418be99661f479a6b0f557293064f4a690bd09af98d8bd3a778ce8944b23259946622ee8f58700e34290ee018923271c5b5338c26b1c5ef6f25154ea2cb21c87cb2bddad45cd3b88d2dbb65b62cf977bb614d0efb5c9353a8b35cfa01122561253231744c2c32064ddb3ff0f538be34c536787771f8aa5aec123a81e8014a979ffa6906075479528a5b4db5d683c0884af4c8976d652dd9505f85dd291fe0843ffd0ff27865ba15c8822e63cb0be5982c1ef15a41fad555080e76aad0b72a8aa15726acd51679a62f62b306cf011a5d1358e6ba8e189d7358bc43376d46dcace83895e75b2934214492b999e4970e4990c42fb0eac353aa09117e3e38145bdbc22646e577b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/a73a44e1dbbda1a5482aab336034e0f3b2631b86 b/txscript/data/taproot-ref/a73a44e1dbbda1a5482aab336034e0f3b2631b86 new file mode 100644 index 0000000000..9e17e39491 --- /dev/null +++ b/txscript/data/taproot-ref/a73a44e1dbbda1a5482aab336034e0f3b2631b86 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a020000005f503664bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3a01000000af22f6838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45a01000000ec72071c0131d9410000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc7bf29061", "prevouts": ["8127570000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "5719770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4e193e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090235768cc18c827edbc85865db0e988cb5b087aea9388ccfaf882c583719a0cfdf8615ffc50c0449bd2f76210a99e4a2c6d78a6e9d76bc7cb276b1de91886e6905d0b086018a1de6c37cd8bfa48aafc0ee04c063fe0bd102bd1407b19000390a77fea54f87a9576ea959d4be9379a20cf94100df7cdeb59173933133c38b0884125a9e997c58e6ef2a0ecc7902f5f7d48e852b738d3ab4657ea88a29fcb53a8aa379403dbad6b3ddb0913f1b8a8662e41d80f4b9f87daf4587bec216680991e4ef6eaec2d21a83291f49b0b10b146f15a02aad8f346e529fa7536824f156184b373df9169ddcc88415995537434a208ea94cb45357989220c2e9a0caa3650097413871c015b020e5eca366975eb4c86fb0576fc3d49ff90a4086365d2979cb38f2735db5bc95f109476ca68b391204e5b61dcd085fe3b075834d266f6f815884ffda7b43debe8f46ec694648ffb6e95f4cd72d9757e0923b2ffe0f090ec181c2f3a533bc1b00ce5850920916777d45a54cece91289e987e797cee320ac6097f0c941f9ca59a2f08ff378195f2e080c4ee150be00da65419286ee9e3a80eda2a6ce4e09721e913ccbc3c7b54422603602fbaa881c0d2d66bbca7b7f7be2670167c512a71c08c9cd45d102d2fa0d328bd1741e20d95aeeeeeed3db2ab1db20a8bad87833418897f35e6587a7427ec2f33fd730ffd169990e7e7211eb6db48ad411faa35811f4098ab71c8e75e7", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe99ab9c338d93c77fb73e36d1c4a98d4f4968424582f3ad48770429ba47f9c01ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045809bd2604b63a9913b428e9bd239a7888c90ad67a336710c360335112147f5da391a14412c925771c32fa4c7776d5872be2a56fee9c5a8de868e7e6e5a4c84da"]}, "failure": {"scriptSig": "", "witness": ["4d09022527e500d120152e18c6e624bb2fde94a3a4f66e7e630e9836935fe44806ba207ea23ff722849369b25be6e16f49fece2bf2e5fff4c0027b8a6792995e97ad33849d39d5421d7c08ffded882a25db3d4e73908c5735ec774ee705a90f380e900420b6715ffa313c178573d8d6c4a9bbd2bf67e4235f7e0720c0ef8bee3224e0b13b8835d88062126170d329fcf7e11ec3e3db3e49ca6e3f6f49854f443072e1f3f988dc5b234d26516ccad4a4268aa4909a96cf1380553097ab3ab0db61536357d6635d21de410a2a81869c8c6eba6082a13ab5aa5bb63c2c4ceca070941e0ae742480ecbc127d6d1156dd3c7f71065f3a39b66f5577301e3978551ab3d1dfa8f0e633123cd2f9f041b3b3f7c911f5060ba6d0327cc368905bd1e2a46e24b7c56a546577eab2035af69b5ae767e72ad4fbc415e25564850821811e598fc8c33e5e834a236faf9cc90b4b9c87ec6eaf43fb91cd1953971c7f43ac756b728decb5020c50ef56fcbcd16f6e4157010d4264ef85c53f67b9ea8352ff1bf37a449f47eb1c7bad1498b0af78af01ac973a6bb3f68d93cf0f890f14362e4a53b53861efb9e4ccc1d8a51e242d08c5ff3bdd2e420db9294fb8ba3c197eb0478308be33416a003e8f456cb8adfaac1cb07fa625280b44e7ddbbf572415c8c81742a825887b1924f2025625199e78bb9d14998915ee9eb98657e1eb5a6857f54f51d4773eeb5b7a38d17eec1a5987561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360513f5f632a7f8be58086e0894937cecc6daf0ca2d073151c884d599ae841f03ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b292a4f502e305109d81040f98432632ff806e9beae33e8faa7e022234476532106df482d4085282f873fe38dcb59fc4eea3656d896112fe243f784a0cfce46b53"]}}, diff --git a/txscript/data/taproot-ref/a742d0a1cc22ae97a4d67dae7649bce1710b89db b/txscript/data/taproot-ref/a742d0a1cc22ae97a4d67dae7649bce1710b89db new file mode 100644 index 0000000000..409c4e0592 --- /dev/null +++ b/txscript/data/taproot-ref/a742d0a1cc22ae97a4d67dae7649bce1710b89db @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3b00000000110e443e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d6000000007304bad901c0c94000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac97000000", "prevouts": ["32502700000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "2ad4360000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "483045022100828cde6313848c24476a72f2b71e49823f118872ba1aae36c5c144fd38e29eb202204a36eb88e21ab4de59e851968b047406b2e5028e4ca303dba5ddd1669f856c2e8200", "witness": []}, "failure": {"scriptSig": "483045022100de41570bb83244d8a2515d1ec806a05c3749a96f7fe9bc234a8a36155089798f02200f8fd23a97f60a695c8931d32f2ef14158d724defc916738d9bfab3926a98ca8820101", "witness": []}}, diff --git a/txscript/data/taproot-ref/a758aa7b471d865a094148a124f948d84c1137bd b/txscript/data/taproot-ref/a758aa7b471d865a094148a124f948d84c1137bd new file mode 100644 index 0000000000..b82479efd1 --- /dev/null +++ b/txscript/data/taproot-ref/a758aa7b471d865a094148a124f948d84c1137bd @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706f00000000c32c43f2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf320100000028b9c79a0196fd4300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac7d040000", "prevouts": ["bd700f0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "b5d872000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/emptysigs/nochecksigverify", "final": true, "success": {"scriptSig": "", "witness": ["", "a42d66e22764169649205bf660a36401a5998de14e4e22ac5fa0f49349dce91254650d6f18dc28cac415e74088abc041f585e96e0c884e7de64d36aff8058e70", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac91", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b87c3d13bda4bc96912d9e1d3614b88ea00288653983e5946dd79f95cad56850892bd312bf555f4ddaee895b667ff52e0154e570fb3b21fb70ce55962eaacfa82b8a8694f12869a73a7c9258692c0a516e36ca599c5440cd48185ae688899f972334d1082e7cf9fba1fb8bfc554039e0d30e1d717d7bd10b1687557faeaf94ec531fe2ceb6eb6fc38e892c8463543d75fb6857ed3555003db7d30631ee24ce556745e6d5f13398b82293345b14639057cfe7c9133f3a817857bdff96787ef39c49602cf62409ee25e64fef6eaf4f70b438998ea376bf89aac812460edc6098d5da36431739388703f162bfd6be43cc18929921c1c825eeda473da76ec1d4f9fb59fb388f102ea0ad67c71defac059c7c8b93c58afe1a654026c6fac78536b8b1901243e25851de0d6781e7f528327af4772fe14b340f1eedd75761d4eaa742157b0a6f9680ce7f5ca5bec9338fe334e6832114c99db2b4b78f7605856e14f0f922c7dab2635ca4d983bce69908efc2d6c8e3a4e02d107fe54b591d6c8cbc0ea2e862ced977f81641729beff04e69bc449bbaee4ae229138f125e8f575c30a32bf5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["", "9c418e456752bdad7c2a2d78dd2db333058a2e8bfb74a2b52dad6b93bca13e67de20aba6ec94b42f141ce7c8f2919f900cbd63cb40934b67e8dcdaa9619fae31", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad0000ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362eb6571610c70f380db264fcf96c64d03665ff198a8b827b7dc791c63516783eb15bda27b7d8ad82c85268f5d7748d6dcf4d5072bcbe6bf1db653a2b9f2a52aaefcd318d6541bb5a7c7e45ebeaed5c7d25dc635446e705c786f9c4ce147f37a9d7197dbb5cfd3049014661f05d5163a8221229ada4cd88087da855b3b81d63fd0b4b5ca1a0f5388bb0d625260e6bd80c4a0feaccd254afb0720be0eacad2de6c8dae29fcb2d9844e6741948f3aa4951320b2ca0e41fcac9fedee7a10c5c5bbcc67dc10fcceb6178979afb039d0ca186b3f923d92479e0d54bcf61271ab453ef19a06951f11ae8cfc71593005298dcd015b99ad04d1f6c27a7163f3dc19ce9a31d4d2a49b2999dc23f41d9ca3b7abd0a877a9fecd5f2ef4fd5885309ed79fd905492e27c5aa3537568f6734824d9e13d17b040b5b13f58e286505de213f86581d977acef7f6b695f70556e0cf280f2f492800c5063304369626aa3de8e4870d2a17002da8b6956793790e2522cdbbbc51c3e76cc941c9170ee3ae91039a9479105f3564c54269032898a6cd874ff4d1fe0ed410013dc82714eb7a54d64226e3868b0e659112c9f7f4ef135ef7e3677927c686e2cfb83a5642dd1287d117c18623babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/a76b07ca76b8129996817bda9c15cfe6c801c496 b/txscript/data/taproot-ref/a76b07ca76b8129996817bda9c15cfe6c801c496 new file mode 100644 index 0000000000..2a7123623c --- /dev/null +++ b/txscript/data/taproot-ref/a76b07ca76b8129996817bda9c15cfe6c801c496 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f801000000038e6fa4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c00010000005e6f05c7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6c00000000737b03c302ffe3c000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac65fd242d", "prevouts": ["a82c3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d5b75e0000000000225120733adac9df449b2595d1b217303cc00a8e3c5ae4d51e5f74120e9d2d90d81fcc", "1b492600000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d24c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820ec8a0a1d660d587d93edd278a1416bd3a7fb5c67f78681973183382c988e9bb422e3784e386a40d51dfdc8b2696050c6780884f0aa6a0f3f5d0b1b514784d82ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936973a7bdafd3a5ef35a7e23347c5fdd71b10175a725fb4e7f58b4fefebafdb0115d26c3c7079b274e62542512e39807ee92511541c708e3b51bc61366b8def992ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}}, diff --git a/txscript/data/taproot-ref/a777b3aa2b4eb6ca1a87d04550c620145fe1fd1d b/txscript/data/taproot-ref/a777b3aa2b4eb6ca1a87d04550c620145fe1fd1d new file mode 100644 index 0000000000..ea9252c0e2 --- /dev/null +++ b/txscript/data/taproot-ref/a777b3aa2b4eb6ca1a87d04550c620145fe1fd1d @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8801000000e3859977dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1f0200000017508a9f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708601000000d56fc4e201266d0000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7e89ca15d", "prevouts": ["0f5467000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "e47e5a00000000002251205857fc26f723a58058d8b22639f4b33f8ef23084aa37309f77fdf87ef7a99b1a", "92430f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_24", "final": true, "success": {"scriptSig": "", "witness": ["57d29c2b50a27ced58aab6a3c76a12c7ad3b9623b943af4a48702d9de690be2fd078169290c1dd1971a2619341656b66e10275c86e6754072abfdb798e920f7c02"]}, "failure": {"scriptSig": "", "witness": ["3551c4fde51445d427eb98a70efc9e5bfb2163ae2d5133a85c1edb7235bf8af3e850dfa6675b240c96bc470db72e9d17bf57c49006ca487e4e9d41062a410ce324"]}}, diff --git a/txscript/data/taproot-ref/a78c1ce484d2b06f18054390abe8ba3738befc47 b/txscript/data/taproot-ref/a78c1ce484d2b06f18054390abe8ba3738befc47 new file mode 100644 index 0000000000..08b88ad4c9 --- /dev/null +++ b/txscript/data/taproot-ref/a78c1ce484d2b06f18054390abe8ba3738befc47 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2901000000e28d14cabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf02010000006dad27f30176a80c000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478703010000", "prevouts": ["44a84d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9959750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_36", "final": true, "success": {"scriptSig": "", "witness": ["40d5a58c9885ab7b1d1b678f6341099506d6bd43698166fe9693788d68c3202d405084d971bd6eb3c5cd0961931e990efa18c030af1d944e42704c294e4db4f502"]}, "failure": {"scriptSig": "", "witness": ["5c6e9893b26b4a6d283f23a6f0f8cb1f11ef43e00fa8aac44ab80ff72cc50d96b10c9af93888770b3b71256cf70dca77d9367c0e3fd22800a4784c2e1a6c417f36"]}}, diff --git a/txscript/data/taproot-ref/a7ca771886a4f3f8ef1274e272ed3b75f1c52957 b/txscript/data/taproot-ref/a7ca771886a4f3f8ef1274e272ed3b75f1c52957 new file mode 100644 index 0000000000..db0f9a7e76 --- /dev/null +++ b/txscript/data/taproot-ref/a7ca771886a4f3f8ef1274e272ed3b75f1c52957 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700500000000d5fa4fd7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2f00000000fc361b8a0386bd590000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df9797223689879194515e", "prevouts": ["7158120000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "8aa7490000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c668", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364338f70e5e33632588fc102a877b38a4fdb50459f63c5574a90f5a912ec702d9d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514a68ec639edecebbcc441a95b015cfc7d67c6cfab51cac7643a880d3dd4163fb31e5a3cd6e337eb252bd8d7a8d95e14a531fbfbee4d245debca50b247e512ad1"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d7e5dcbe8dfb5ec682ee6209548eff1fd1425d8165cb88b4f9c5546369c4bac6a39aac74ee3f63949b9c215c515b0db1b113f4639b3fb19cd99ba22ff01310c728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}}, diff --git a/txscript/data/taproot-ref/a7d8752018d8cded7995daa9e4cd387a0f75eafc b/txscript/data/taproot-ref/a7d8752018d8cded7995daa9e4cd387a0f75eafc new file mode 100644 index 0000000000..cbd57f46f1 --- /dev/null +++ b/txscript/data/taproot-ref/a7d8752018d8cded7995daa9e4cd387a0f75eafc @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf55000000004245bcb4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b17000000009c83f3e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3a01000000932991810400c0e700000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac6fe3af24", "prevouts": ["3f1c6e00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67", "ceaf1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "75615d00000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ff7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8cba978c9f8bb8ad08bb333d68e8bfcd03859985a79755d391cef5d6f406deb57187b9e30f7e626b28b6dbe2d7b101f74e326290698090dbb0a7eb7a50daae87a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93601da56f1886d9f6f914134eb53345fabd457f9b9efbcaf83e02a7ef8dfaa155f3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f59f882dcce043ab5273f79d0d152c35fae0f251a6812c7f2d3daa07c20029a516c082ffd0388de178727289f9edc245ed8244bc4e4186d1c7a66ea621fec0ad"]}}, diff --git a/txscript/data/taproot-ref/a7edc21f3d053cf490a4f0032887dd77602ce962 b/txscript/data/taproot-ref/a7edc21f3d053cf490a4f0032887dd77602ce962 new file mode 100644 index 0000000000..c04c45997b --- /dev/null +++ b/txscript/data/taproot-ref/a7edc21f3d053cf490a4f0032887dd77602ce962 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0a01000000b500cca2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb0010000004057a30b02358044000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7da000000", "prevouts": ["8e402500000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "389821000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d64c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7d6bb54cde9cc6775748a201bb3f5d5704911b2e65f691925d2f8dff2efd34cd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51e30d689b41c4cadafebe300f1e3aad2e0751ea174af1d1313cd49baaa526270b3acfa007b318c5da81cf6562f4932e2754570ba3b679b809769f541be0a6b617"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1360d69898a7d9d7cfe47282f038ce081b7b00f0e720fcc7ce2a76c05a52019262a5aef24b6a1c01bacd2a24a37cefc04a347b590d10f3bd98469f969c355217b0dccf8e3471e4a61057d1540548a04f67f25f6a36812a8ea9d07747f2e4b3a8a"]}}, diff --git a/txscript/data/taproot-ref/a80117d2623452c4c4d047ad5ffdcd2cfd707957 b/txscript/data/taproot-ref/a80117d2623452c4c4d047ad5ffdcd2cfd707957 new file mode 100644 index 0000000000..d098b52b19 --- /dev/null +++ b/txscript/data/taproot-ref/a80117d2623452c4c4d047ad5ffdcd2cfd707957 @@ -0,0 +1 @@ +{"tx": "b3c1472202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf2000000000576e88bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd70000000004c7aada0154af38000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374876209cf31", "prevouts": ["efcf20000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "a7286400000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f64c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e88526c13eb9f3ceda07aab2d6470ded7d71666b865703d69a451a4808570d93ab836f202d3609bf617cb7b4b7700532182ae3d2e1a09e3b3f38346196fd93b669cfd1883d9d94906422bb83623918edcd109683f826bcbf676882b31fdcf44192fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93643ff5ae612146c623386afcd59c1296ef50bdcb60fcd6c7914b141fccfe9e234ece7439a6da18213b739641e86399840a31603efd6bc35e889cb5cc2f58e891a69cfd1883d9d94906422bb83623918edcd109683f826bcbf676882b31fdcf44192fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}}, diff --git a/txscript/data/taproot-ref/a814c0230632e5c08f097102f2033615293348b7 b/txscript/data/taproot-ref/a814c0230632e5c08f097102f2033615293348b7 new file mode 100644 index 0000000000..2ab5851edb --- /dev/null +++ b/txscript/data/taproot-ref/a814c0230632e5c08f097102f2033615293348b7 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2901000000fe70cee560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c40100000092a97d7a03d69a2f00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4a846650", "prevouts": ["c485200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c66f110000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_72", "final": true, "success": {"scriptSig": "", "witness": ["11e22a9e4803cde68c6394178c87bb58aca43a6acf77019d87ad91e3c6c671dd7fc40b515b8ca1e601b764945ccb365ca6871801d05571783d480089b1d9693183"]}, "failure": {"scriptSig": "", "witness": ["54338879af07fd4bde5c2f7c68edcd64ec57c357b701c48cd732917be1fd800693456971040f5f75476bee95ec3579dd7cef72a2e8c4f8199d042358a9fb081672"]}}, diff --git a/txscript/data/taproot-ref/a83603464a89b1ff53b86c47af7c54b0f8a72405 b/txscript/data/taproot-ref/a83603464a89b1ff53b86c47af7c54b0f8a72405 new file mode 100644 index 0000000000..1f1a18d01e --- /dev/null +++ b/txscript/data/taproot-ref/a83603464a89b1ff53b86c47af7c54b0f8a72405 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42a000000003ca5b8c5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bda000000002a7cdb2b04cf6957000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487c7000000", "prevouts": ["013e340000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "9b13250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_1a", "final": true, "success": {"scriptSig": "", "witness": ["970035fdf6c2a35ebb629e3866a63d1ad69b6ee1eb66de87cb661f8a8fe3173f2bc76a5a9aebbf2bd493f92e5f84bac6d418c499852642cc5d64b58b4abd787683"]}, "failure": {"scriptSig": "", "witness": ["4c37d4dbf74b8e1bca59778650430b3745be9d4b1228eb549c230b0407d0c4333818bcef4c632cad10bb17b74df923f3a166c32a9511b73351ab8f515ce3499d1a"]}}, diff --git a/txscript/data/taproot-ref/a858130542274ac050eecd7df40f62a22f2af3e5 b/txscript/data/taproot-ref/a858130542274ac050eecd7df40f62a22f2af3e5 new file mode 100644 index 0000000000..9d5a178f7c --- /dev/null +++ b/txscript/data/taproot-ref/a858130542274ac050eecd7df40f62a22f2af3e5 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4da01000000f19794d98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49201000000e17d8ac402e45f79000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65afb4455", "prevouts": ["b8394000000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "18193b00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["84", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b09f12ec1a5fa4aa343993f316f0126821d68bdf7911bc110cb6f7136d98f163462b9d29a734e556c6b2d2347029c074a964aefd93d416389a14ef3ddb3da113c419005ce053ef5676128682d79317eecff4f27ad8f3a341c1729484208650bf5e521f6248097fdc64ff5a0a6cea9e07e7c649e93dab8ac6058acbfaf1ad70aa"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694086fc36ff4db5fca7b596fd90c3389887398c2c7f02b2c132cac3937a1991e1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900459910ef1376b2f57d6157bb9e8c31b4bd4b9d07432c4b683bf27102948dfaafec7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}}, diff --git a/txscript/data/taproot-ref/a87851edeb5a5db0f65fd04d5730500bf77c3e76 b/txscript/data/taproot-ref/a87851edeb5a5db0f65fd04d5730500bf77c3e76 new file mode 100644 index 0000000000..afdde25101 --- /dev/null +++ b/txscript/data/taproot-ref/a87851edeb5a5db0f65fd04d5730500bf77c3e76 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8100000000cd228e8dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa4000000004c9db3ce04ea51bf000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a60d000000", "prevouts": ["11384c0000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7", "6aa37400000000001659142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["d94c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363223f590d275dbf98f3959a26c5345f553357b5bd8a825b42274d58542b11fc5131be74f8e69d59b35718025ad78971477354696379895e31ee13c64e6c94e9a3a6c94bbfbe0c8d8162307ea587875a7b29cdfde589bfdf70042a40a3445f95ec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ce5a205315494d2cbc0845b221baea99481be73664e5e27f84c5797e8ccf74a7a3ea69b746c966c84daf122809976a6bce8b1d887b17a6e963c4c690b8a790e73a6c94bbfbe0c8d8162307ea587875a7b29cdfde589bfdf70042a40a3445f95ec19ec7aa48c905d8ed6637f3c17c0400a43c560e5c859444683190ee16fe2235"]}}, diff --git a/txscript/data/taproot-ref/a8a3b52078ade562edb5a7dc6ab61ce4b3cca2ab b/txscript/data/taproot-ref/a8a3b52078ade562edb5a7dc6ab61ce4b3cca2ab new file mode 100644 index 0000000000..8a951c3930 --- /dev/null +++ b/txscript/data/taproot-ref/a8a3b52078ade562edb5a7dc6ab61ce4b3cca2ab @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f3000000008d771f89dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd500000000c1cefaf2042f856000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf2b3e221", "prevouts": ["23500f0000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43", "c97753000000000017a914e014b0ed75ce4306970c9f63e88b08a5a7bb4d0f87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "617d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e2d9d76ecaacf763fa245da0e21bf637d9a70bbacbab17d040c4c51a52a3413843a93d7e1c40927dcd10fd5d28aa4402a453542c320ae883aef57b2a7090ae6b3ab6b2d4691bf881316931c587f0a213fdb9026021e80f212e72f88982a6bfdc"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e83f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820063b43826002dc6eba62f224851f0eabb14759fb10c707a6afd7fdb59e93aad3ab6b2d4691bf881316931c587f0a213fdb9026021e80f212e72f88982a6bfdc"]}}, diff --git a/txscript/data/taproot-ref/a8b03c8e24ef968616c561f18edd3944caccbc5f b/txscript/data/taproot-ref/a8b03c8e24ef968616c561f18edd3944caccbc5f new file mode 100644 index 0000000000..77e376964f --- /dev/null +++ b/txscript/data/taproot-ref/a8b03c8e24ef968616c561f18edd3944caccbc5f @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff0000000009808edabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba601000000851525c48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47701000000859dffb10302a2e2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374871878ff56", "prevouts": ["74b9810000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "6309280000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "0ace3b000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "597d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faa393999847c63b69274661db27cd2e7bb4343911a06570db858c301dc754c7eb4be962498b383c32e8a84fa570ade752f3a2216469b10dbfd65078bd8e1b5998"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a236af21b488012c2421836e39d217363cb976e6d84d75dc27b845e8fa3877b3e1a055bce30035b144601862be42e0b1f1d387c5344cafae4ff25a0d1808b56acd61c62feef9509bc7b3762bc81079411fa6867ea4986820580c60fa1e8298e9"]}}, diff --git a/txscript/data/taproot-ref/a8b6c76ee96d3aab811609a8979cfcc67cff79c6 b/txscript/data/taproot-ref/a8b6c76ee96d3aab811609a8979cfcc67cff79c6 new file mode 100644 index 0000000000..4cd0c3ec0d --- /dev/null +++ b/txscript/data/taproot-ref/a8b6c76ee96d3aab811609a8979cfcc67cff79c6 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be200000000ee786e5160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bd000000003fc93dccbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5c00000000b8e3e08703aa61a2000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a678fb6231", "prevouts": ["1b322300000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "217511000000000017a9141a56e0fb41afaf4b9e6feff1797087c69015162687", "f93a700000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "9d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a832c2593bdac0cb0b42624935007d1442180dae3fe4e49dcedfd3101f5729d872756956c694637235f847009e8e23b8c05283b4a047903b3fbdb647ae4209c1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364d9cfd389e774c529beca95e1955030c310e90019de0d0c1b56b68b6d8ca0660e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a832c2593bdac0cb0b42624935007d1442180dae3fe4e49dcedfd3101f5729d872756956c694637235f847009e8e23b8c05283b4a047903b3fbdb647ae4209c1"]}}, diff --git a/txscript/data/taproot-ref/a8cd8ebe1c92a5ce01cb9d553c32988d450e82c9 b/txscript/data/taproot-ref/a8cd8ebe1c92a5ce01cb9d553c32988d450e82c9 new file mode 100644 index 0000000000..047f67cd97 --- /dev/null +++ b/txscript/data/taproot-ref/a8cd8ebe1c92a5ce01cb9d553c32988d450e82c9 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0901000000304617538bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41901000000d85fa7830225df550000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ace8000000", "prevouts": ["d42d200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "517537000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_14", "final": true, "success": {"scriptSig": "", "witness": ["5db449c20988a545b2c3b5f047023aa6b582f5149664cdd8ac8fd4816e980dfd564f6114607f398abfac602ab58fd1d8a69889a2384c28fd8dbb486f591d524f82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["9399abb7aa94859a85d8277e3a6200ebaf4e87f9a3bc74fc366b52db04938298abecf8289cfbd7c8efe9e119940929e81c23d2dbb78f510e009ebea74a1952c814", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/a8f6f74ddb0e0e8e8361ea297e0abac830cc1dfd b/txscript/data/taproot-ref/a8f6f74ddb0e0e8e8361ea297e0abac830cc1dfd new file mode 100644 index 0000000000..48cbafae4f --- /dev/null +++ b/txscript/data/taproot-ref/a8f6f74ddb0e0e8e8361ea297e0abac830cc1dfd @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf090100000080c5ae2e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c408010000006b50ec9a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46f01000000809ae9ca023333d50000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e78c000000", "prevouts": ["8b6969000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "5187380000000000225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "971f3600000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["f259980f9f225d7b43c3471d51a041623278740413d717b078cf94bbdfcfe080250664c119f639ad9c92d5beabe942124a2293c1a07924c261b1283a169c8c20", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/a912b73ec5ce6f1628bcb8d8e2dca4f96fb71c5a b/txscript/data/taproot-ref/a912b73ec5ce6f1628bcb8d8e2dca4f96fb71c5a new file mode 100644 index 0000000000..97eff394b9 --- /dev/null +++ b/txscript/data/taproot-ref/a912b73ec5ce6f1628bcb8d8e2dca4f96fb71c5a @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cf010000002d86ee8cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba5000000005702dfc60407903000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a627000000", "prevouts": ["e2b60f000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "91282300000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100b2294fec2090424a2bc0a41d32ee1200089bd3acc05f34a7300ae8fa367c024702207d8c120680e254106dcc929875cf72bab4870e2611ea3b700a28e71008cf55b7032102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "473044022078e1a505fd632debff7ad03779c8596f10ab310d178f048c3f34b7ec91fd132e02206cbec89154cee6b01a5a062e75a7d7ef5e435e258f8173517d9c93e611b5aa09032102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/a91984528078da07c39af230d966ecfa33124d9d b/txscript/data/taproot-ref/a91984528078da07c39af230d966ecfa33124d9d new file mode 100644 index 0000000000..4706f60c9c --- /dev/null +++ b/txscript/data/taproot-ref/a91984528078da07c39af230d966ecfa33124d9d @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46d010000007fc9e944dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd50100000032d28935bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9401000000353048d30172b24c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ee4b014d", "prevouts": ["17883d0000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "4e40240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c40a6f000000000022512026ecbdce513e5cfeb779eb6a118aa90fae67510c7ee9bff64af6ca27f9068c2e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "success": {"scriptSig": "", "witness": ["7ac11bb78f6874d82c97842aab9a20959d7ae4d83df2dd8a8858170678c05f0a8378d25abc8e73105705cb5ad5c9227f9427f8789caed1c4be27f0587bd643a9", "cc26a8dfd73130266b06a6a47254e04953432f4decbaf8e28dfb7203c052c76cc5a66c1d8a9a2db33603831ec0a0a84cb1cf7e35d6ca1c61f38765c15f9f21071e5580ac3af5545267773a0024d487ff0be757055c80d3fdfe97c5950f521910ef12c3850392c121da12b15ccce7e329a98fce1597ec9d6008e17b", "4cdc07df07fcb3cf785b22ee27afa90728be120f1ac0a2e769f9272c5edf1fb6ce565a0d422a5371039e21c90d6a96379b3c7b115df2ef9cf3c5dfbbff451a8fc49af5e71a097a063fc5fc0e51954038d4ed83b0b917dedff39b353d16332f6c73ea87c2f17d34ee0ee448bc6281ff38f3ed58a92492f6b27bb4cf8134330a59c4387fe0b42aaa77ba10cd6f18c32b7c54ab11e4614a22ff211af1109af450ab8c9b2aeada03ba8fe470a7f6eaf870dd19a9dc98d7b9234e3dbfcb78a62b17b380128fb56fd93d7c1a731626a031f70f1eed6975bee3211391cdd52df9736d0442c4413251646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360aea55674e4a11d078f591c1d921a5492b3bb1be59c0888480755169b7cb15871b7d6818b35e0ea957fad9863835d6347f8f6d9876df5968ca112bcfbceea191949498aa0661d911fbb3348dbcbac453fdebadc4dcd6e311c35c7a5ebf5bbb8bb3920587ebbb9fabc18b7b5c766e9cc9224f8e189e96604be4f961e6da30e1098ad20ddb8bada843816d8e39090b6f68402c2f42ed7e4ff2296393411067a3cc738678ade87a0f60fdc733941515cba8985a82e53060b8d87ae1337100ca868b8dcd092bea6f9e0ab4424f42e6b521eb0ab30e23651fe2bdd8792a11b70c0811ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9e78b7ff580b9714966e7b7b3f9ed004f3990177fddb99b669445d7c1658bdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ede07d4dc7a6bbc7633f9636c3cae9c9db2a0684350bd4065f892a977c68dfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000008da7e7fc95bdfb9802fa80d920249c2a040024a29c3d7028418946dfb418b33cde545c1438d0372e217a29e61fbda9bfe166556b40c8ff5588f9b2f8951784a711ce63ac71f4b06b9613a79e6108a6e59a2aea5a02d73ed398ca5f6873371ae4cfb0fd2388ef534f0ba1d41d6104a73537cbfae9352c0718fc697592e7056a5ae684870c35202af39cbe0f4d3dc2f44bfb95cab676962ba44b0db6f5e781031ec272ff862a0c809875f9bab87ecc81f2b0576517f3a9963117b503365b64c7a55bde9dafd590f07e9bd8096ae18426952cd7a6a5d90d1b22eb178eb948f93f3affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c57eb9ca01b12caf07c899b2156122922d93e5c05d7b2583e362d173f8e6b01f8d0016d6aba064b8a962d3b2a6c67418815cda9f1d614693aa3e7d82d1106256c5c857024d5dd604cdce5349cce83df62f353eb06e19c5bbad5b461003943ddcd02d97acded234e511f7ef67a86668958c36c395c197a567f77189a2ae0968fc69c3c29c8c0dc361e29f35fb38537a07141885ef9c8697bb4a755b3f65b4fa700000000000000000000000000000000000000000000000000000000000000000c50e512d885169807860ecb1359e927f1d3026393c57dc608c349a7d92d1fbaccbdea492e545c2e9487711bbf6956b889bc74fff183d4785aa28a26b0a090ccb028567c5aee05ea6e1fe0f29ad1629fd5a2489f448148363c89c91b1e16b35a4e95a2bb7d8dc76b9baf117c4390e476b7284bd4af1eae0050ccb46aadf905a5a6952d7b6ddcd40ee4770ddf66cc91abe733ec79bb7da150cd579f6e34ae438c", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["7ac11bb78f6874d82c97842aab9a20959d7ae4d83df2dd8a8858170678c05f0a8378d25abc8e73105705cb5ad5c9227f9427f8789caed1c4be27f0587bd643a9", "9f5d8529c066da90b7c26740035edfa3f15481590570e26e07f4158bf395ae2191251d82f3146488e7c8007b9e6eb88624b0ae7e7bbd405f68db4c3d5bb83bde7148f38acde11f5ab33c3fbcd2636b5725dbd640c658d4851759f78cdb87fcfd0ba9fe8a8b60c793223322fb7cbed449668946433b2663810ebc", "4cdc07df07fcb3cf785b22ee27afa90728be120f1ac0a2e769f9272c5edf1fb6ce565a0d422a5371039e21c90d6a96379b3c7b115df2ef9cf3c5dfbbff451a8fc49af5e71a097a063fc5fc0e51954038d4ed83b0b917dedff39b353d16332f6c73ea87c2f17d34ee0ee448bc6281ff38f3ed58a92492f6b27bb4cf8134330a59c4387fe0b42aaa77ba10cd6f18c32b7c54ab11e4614a22ff211af1109af450ab8c9b2aeada03ba8fe470a7f6eaf870dd19a9dc98d7b9234e3dbfcb78a62b17b380128fb56fd93d7c1a731626a031f70f1eed6975bee3211391cdd52df9736d0442c4413251646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360aea55674e4a11d078f591c1d921a5492b3bb1be59c0888480755169b7cb15871b7d6818b35e0ea957fad9863835d6347f8f6d9876df5968ca112bcfbceea191949498aa0661d911fbb3348dbcbac453fdebadc4dcd6e311c35c7a5ebf5bbb8bb3920587ebbb9fabc18b7b5c766e9cc9224f8e189e96604be4f961e6da30e1098ad20ddb8bada843816d8e39090b6f68402c2f42ed7e4ff2296393411067a3cc738678ade87a0f60fdc733941515cba8985a82e53060b8d87ae1337100ca868b8dcd092bea6f9e0ab4424f42e6b521eb0ab30e23651fe2bdd8792a11b70c0811ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc9e78b7ff580b9714966e7b7b3f9ed004f3990177fddb99b669445d7c1658bdfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ede07d4dc7a6bbc7633f9636c3cae9c9db2a0684350bd4065f892a977c68dfcffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000008da7e7fc95bdfb9802fa80d920249c2a040024a29c3d7028418946dfb418b33cde545c1438d0372e217a29e61fbda9bfe166556b40c8ff5588f9b2f8951784a711ce63ac71f4b06b9613a79e6108a6e59a2aea5a02d73ed398ca5f6873371ae4cfb0fd2388ef534f0ba1d41d6104a73537cbfae9352c0718fc697592e7056a5ae684870c35202af39cbe0f4d3dc2f44bfb95cab676962ba44b0db6f5e781031ec272ff862a0c809875f9bab87ecc81f2b0576517f3a9963117b503365b64c7a55bde9dafd590f07e9bd8096ae18426952cd7a6a5d90d1b22eb178eb948f93f3affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c57eb9ca01b12caf07c899b2156122922d93e5c05d7b2583e362d173f8e6b01f8d0016d6aba064b8a962d3b2a6c67418815cda9f1d614693aa3e7d82d1106256c5c857024d5dd604cdce5349cce83df62f353eb06e19c5bbad5b461003943ddcd02d97acded234e511f7ef67a86668958c36c395c197a567f77189a2ae0968fc69c3c29c8c0dc361e29f35fb38537a07141885ef9c8697bb4a755b3f65b4fa700000000000000000000000000000000000000000000000000000000000000000c50e512d885169807860ecb1359e927f1d3026393c57dc608c349a7d92d1fbaccbdea492e545c2e9487711bbf6956b889bc74fff183d4785aa28a26b0a090ccb028567c5aee05ea6e1fe0f29ad1629fd5a2489f448148363c89c91b1e16b35a4e95a2bb7d8dc76b9baf117c4390e476b7284bd4af1eae0050ccb46aadf905a5a6952d7b6ddcd40ee4770ddf66cc91abe733ec79bb7da150cd579f6e34ae438c", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/a98e2c1c0077687fbc9166f61a386e4a7023ae4f b/txscript/data/taproot-ref/a98e2c1c0077687fbc9166f61a386e4a7023ae4f new file mode 100644 index 0000000000..8e8e5b3baf --- /dev/null +++ b/txscript/data/taproot-ref/a98e2c1c0077687fbc9166f61a386e4a7023ae4f @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa200000000fb3d70f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49f010000007d25f0a80274e4bc00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8783ce9f30", "prevouts": ["3ff27c000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679", "638142000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "6f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361835f9abe9a741de0e36f4900df38cc6cd8be0480d341e9b7353c9d58c608762796126e2d69a152489172163b4bb3b76a5285668b37fe09a10764d2324ee4a01a6ef766bda57b4717926485a86d332fc460fd2733e6a54825f17015621dd4290"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936702c3c7c1f1da03c8b27f2bc575737070d61786cccc09f33c0640d21457e29b546c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa250e9882e2e133b56af40caa5e77ecf964d6e28c7a51ea626a8db4d1e1f7bbb4a3f8f9fe88f0f431b5ffad473abfcf1c4b340e1c7daa1232bf4c86f035b8cc51"]}}, diff --git a/txscript/data/taproot-ref/a99032acc713604176f8d95263865e2c6dd015fe b/txscript/data/taproot-ref/a99032acc713604176f8d95263865e2c6dd015fe new file mode 100644 index 0000000000..dfeb2e29c6 --- /dev/null +++ b/txscript/data/taproot-ref/a99032acc713604176f8d95263865e2c6dd015fe @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c330100000072fc8e80dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c83000000003e0d57f5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1d01000000594c5146046d9223010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79661010000", "prevouts": ["bb6c5900000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d", "aa9357000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "edbe740000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "dc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362be2eeb3e4370d4c69f7ce59bd76cde59e3fcce79660aa43abb7ce9c746ff5cf86395c8bc923896e22972506a7f348d4e1ec7a5bf3aa363c117ffaeeeab3b8c4ad29df8a0e62e4f40897f8996914b12118c918ca2851b639742aeab01f587290"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936622093dee6774f07419f4929649c97094c7480c0dfd32637f9af19a1dbf7f73a7ec7f48ddb853ff8ec7c3ca68869c312ba33903dcdb15647a5295c052617846c86395c8bc923896e22972506a7f348d4e1ec7a5bf3aa363c117ffaeeeab3b8c4ad29df8a0e62e4f40897f8996914b12118c918ca2851b639742aeab01f587290"]}}, diff --git a/txscript/data/taproot-ref/a9b04af95ae95e9a60941ab351fb387c007938a2 b/txscript/data/taproot-ref/a9b04af95ae95e9a60941ab351fb387c007938a2 new file mode 100644 index 0000000000..8ccfd4a512 --- /dev/null +++ b/txscript/data/taproot-ref/a9b04af95ae95e9a60941ab351fb387c007938a2 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41a0100000058adf9d98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bc01000000feafeba002c3807700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac0756be2a", "prevouts": ["75b6380000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f", "472441000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "7e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93601763a9a2ad9de81aacd638dcfd4fda3d0aea4cfecb2218c942c0044c1357ce3e4e9bfb46536bdbe14fd1969523d98350611f9c0fc6236e31514e2d43f59e146f2e4a14a40b0acbe20218e44481fe6660f01d2e0cf04e3bc8d4452bacd1080d1"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e846c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fab95efb91d04564594d9dcf752eb8fd975bf01996a0bb9f9eb7163324924bcd44fa5d068ae686a8bb1ac9947127542ac866077ad522de57cab26ce701d52bc951"]}}, diff --git a/txscript/data/taproot-ref/a9b58c8a3ebf4f2c3c8af6242b20c43aa733d6c5 b/txscript/data/taproot-ref/a9b58c8a3ebf4f2c3c8af6242b20c43aa733d6c5 new file mode 100644 index 0000000000..371389f21c --- /dev/null +++ b/txscript/data/taproot-ref/a9b58c8a3ebf4f2c3c8af6242b20c43aa733d6c5 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf101000000673c277b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4370100000035cb6dc58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45d0000000023dea660014dee30000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47879c010000", "prevouts": ["f5ff280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0bce3600000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "67f0410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_53", "final": true, "success": {"scriptSig": "", "witness": ["bca52a308ea9cc503e4a56e8b76ba72a2c7527ab3924670a2699ac00f6041665e818cff9fd2719ee27efc7e67e9c6856e37e102a7beb5dcdb7b99eabade779e481"]}, "failure": {"scriptSig": "", "witness": ["290bbd2e84cad0d8171e4e2ec772ae058e958508d478b4ab0e067ffe5d835bab3ae40149ec150f8524a0e6bec7ccb6559acd0cefd987a5796d13fc69eb2ff4ac53"]}}, diff --git a/txscript/data/taproot-ref/a9b81c4e5e52ddeed6c3bb9ecb2f67d7e056eb1f b/txscript/data/taproot-ref/a9b81c4e5e52ddeed6c3bb9ecb2f67d7e056eb1f new file mode 100644 index 0000000000..bc2e04d19f --- /dev/null +++ b/txscript/data/taproot-ref/a9b81c4e5e52ddeed6c3bb9ecb2f67d7e056eb1f @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41700000000818fa90adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0101000000f46e8321024948840000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e784621a3f", "prevouts": ["e47a390000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278", "b2b14d000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ada", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936908709641cf32dc4788f906f7e3621a0528df09509ddf1e9982e4479aa4b5d9a3ad7647dae649c97c815eebecc244cfd5d14ac6da92e0e18049c71625e2af9496ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936868af79d4708fca6e37519c0f8ad1a0e8e0651f5b156ad2621a5318cd7dee94748d61d9b48b1fd3c9dcc7ce9fbab23c91d7bbaaf6610449bdfa8b9a4fdaeae22ee4d75780d36bffae9b56136e6d27c02b8d233efdc800bb260bfbba6a6f94b87"]}}, diff --git a/txscript/data/taproot-ref/aa0024897deb20273f4fad0f856967621953d402 b/txscript/data/taproot-ref/aa0024897deb20273f4fad0f856967621953d402 new file mode 100644 index 0000000000..99c8dec143 --- /dev/null +++ b/txscript/data/taproot-ref/aa0024897deb20273f4fad0f856967621953d402 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf330000000056a475b2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cba01000000746cca94dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cca00000000ed67c018043edd1c0100000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88accb010000", "prevouts": ["e2be7c000000000017a91441ce0eb0e6e5800ced23a872818e5aaa63be0d5b87", "3be74d00000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "38fe530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "bb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bfcd38c1da080d9fa5f350ac5c5d82a433c6ad7048f1837ebebe4defa9773a5a1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454c3d251f378473e49463283b18fa00944324abf75c7e60d6956acdb0e7ed03a7354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936597c2f6b8dc6d15eebfc9ce9773556a5675730a3f06ef70be75161d60adb64d2d0e13bd92b8f417e9a9e83db8f63381783cc5b261abc3d56b5d515d800102f0ba4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}}, diff --git a/txscript/data/taproot-ref/aa0d4dde043c88d76ca0b51949f90e102187198f b/txscript/data/taproot-ref/aa0d4dde043c88d76ca0b51949f90e102187198f new file mode 100644 index 0000000000..8466345d40 --- /dev/null +++ b/txscript/data/taproot-ref/aa0d4dde043c88d76ca0b51949f90e102187198f @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700d020000005955ac21bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1301000000b41584b4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b35000000009f42a30602486899000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c5b9435a", "prevouts": ["ac30110000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "f49e6700000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "7202230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09029545fea06d348ae6624e1c2545fcbe83430063ce13acf465f55bc5faa1aea3fed5cb34f9ce734f5a4a81dfe9eaf2248afdb4ecd223722b2ffdc4d03248d66d4bbbac76d42a70beeac94857f31fc0166892df72f77f49ae5a78767f167bf772a07a98afc46e36d0f4dd741d2b87523cca6458395d28d36deaca72107dd8fa7e0af8b420a4b899cf33240a23064276c0d372e29e7230ad2b12494eefd73a419631e61fbb49e04eb223f37cad74107b23211effae45b6849633cf216aabd66bfc3a5b50ac3ac2dd3b22f771b325d66925bafeb593e88f713496661a176a4a85746825c515740c2b33412a4d74b13140d21d5e8a87458f445aab6440494d3094be25ea54febfc54cf69eeef18371a038f9eb716869bae6fc137c73226a047c1104e35aa1f3f9d105bd449a269463808b6bf981f1bbc60efc8970511d196f9c90e037f5bbdcc666c7bfc1ed19a601d5913a7f20c7bf23e0bb8502f692c4a81103006e17dd4c362810bf502d2481f23c01f8e2041d5a8ca9f4574038fe017f6e150a7f4c78a4d26a307089889ccbb8708de6036650a93c08c111a909f6111fece4378dc1221238b62f3e5549ff7b6aa4e63dd6d4130a02089ed4140a8cc67abdf444afe386004387cddec22d41aa5aac473a048b3800d83d2257ce979d902daa1de78c4601ecfe3491c8a34fc9d8c21471920ccd56cb264941bd8c4469556ca493e4217bd7a545599ec5fb9d75", "a37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363dfa57dfd82955cb3c2f71f4cd7fb6c8829916a42fdf422289d8c886c1cea6eeeebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7accae923b25d556389dd5dd645f6d7ddd89a07a74a73dddd3d85d7b65ae33798aa"]}, "failure": {"scriptSig": "", "witness": ["4d0902debded4a128c081b897dfd50e79e5486cdfb87ce58f88de1fd8f4f02a9ecb27266f07a777b3ee1b67a766762b74c012fddd109cacd3e5311980d75e7cd6da8273afcb0f3410ed974b15d8dbafe36e803e13b8f941c22a6f8614f9bd7c13f64be931fd0ea5354a2a8a811539ee67109132977911e190246cdbd1e115505040435a3b29fbd9b70962b63d1027acd470f4e3e7130d40199f33dbb3c573f9552cab23d6b62915f2d6025efc03a3fa33fd5813afb58bd7213dc18dd824f48c8163c780030929e8787cd59e5e450e941d754f6045abfde62d5156bea8836d65500cf3f275641c27b2b4133483d416648aa6585b52d356d253ad5c6e165efe27a92b6ec86354ae8f54bae78d17abd8661f0b98ce0962d1d045714b6f073a8c924920e2d6d491ba7abad2c6e4c963995849ac03e0a898555ccdee86fcc12883053c218807da5aa7a0362ea2bc979bfd6deb633d49c186d26d269c7ae93790a7549068fcb3f98cdbecf914222223191a6d2b533bd008e2b55ac2ba5c1c8732b7aef037aca22a72bb983e3a1619b3f90f4eea9763fb28addf281c344ba1399cc71a2be4917ced7062f3a14fd2749dfbc71a300f1958b45a9f12c33e541e5ad3fcecfe4aae2d655cd7d4496fd6d48e524076a95a4f2039900a5276b402e15c7b68ab40fb1a8e73749be8010d265d33f2f5ec482a4710c3231adaa72554b42228224a2c046303b129f76043d355f5275", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8842663f27fdccb53374929a05698df7a3618af6b1227ea033500411481dec31ed2054b94cb6efba565738f5dbf6ee5a67458962b65d77e1cf5e0d2c1c00b2210"]}}, diff --git a/txscript/data/taproot-ref/aa17922f64ff7cd6d4aeb56bfab8af47218a86d1 b/txscript/data/taproot-ref/aa17922f64ff7cd6d4aeb56bfab8af47218a86d1 new file mode 100644 index 0000000000..40452b43c4 --- /dev/null +++ b/txscript/data/taproot-ref/aa17922f64ff7cd6d4aeb56bfab8af47218a86d1 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44601000000379174ae60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700c01000000bc09d7fa046db3400000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f877d020000", "prevouts": ["b65e310000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "60391200000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09022ae802224670715d13146496fbec411ba7cd021183576a4da576c5e7df6afab0e2f7703d5bba5162b779161bb33b72d459e59b56a14229a279dfd58a2810cb209257ded4c8140ddfd2634db4d14b135aa8019c3d6cb0aae2e98d268e32ab9acf75400928e12a21e0b0e8f021e96bb09b34a4c89503846f206ce34b90e3e85e103c5797dd74e8f22d334752a2767540a28dc4de88ed0b7ac8632706da8d65b935ad71017de5ae2ae86ac5ba0551827f67f53bfc0bad7c4f96952b4330b2a06d020dd03ce89234d5bcc9c71cd7d55bf23ccaacd1d4fde6c846a5a6be88f630a2ebf5f2d823c82d312a3ff8a4e4f581ac7bf187fc1362f46d8cddd7181e9115dc30f85f963aedf354e2d412a4a8410835b34b28748e75f6faf6acaca5c56aecb03b334d10b5aff219dace3883518ee582fd1e83f218cd77005514ef6d4ceb3a16011e71f692dfde80bc81769f7f37a057451e56e8e43264c3d173a32b01a92bea68fcb6384846449d4b56e3cc476417b4c957cb776c2dd2351e23910349b344decdeba6c7a25fdb7e9fa85012e2fd8b99d313a99ca393408d4b8aa353361a4d017fb3ad97caadd1cbd3adb7aec97014ac8a7c8d23e16853815477748aa8d1cc1f6b7d1bb294fbdead603fed042e5de6cdd5b98d5b785e7fb0f3c4e61f307981c225c2523aef15fdd34ef8c83c27f9820a647b03c687b1b5a379fcd1a4491de9bd9551a7bfb434fca6fd1c75", "627d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93656d54f472826838e1a603c388c018d7e2c442e320e1b9fe79e87cbf43c9b1b239fadf8666e14892eeb42c4caff758b4cfca6e22c4a95966045c21c8e48555a5679949ec80dae58a557a09f1025b3e427a5f07bf4ca030ef1ccb63f0b9143cb03815577f72abc2219d93608f0bf386debaad95a87d0f429ecb808b0f22f69367f"]}, "failure": {"scriptSig": "", "witness": ["4d090222c733a1aff26dafa63fb9768f3d0600fafadacad8057e99bf90d3f1f37eeffdfb09e59697c521f0e4803e05e56f9f3f798e039bb7da0fcfe460ba1332e9a22d9e3403fcea2ac1e215fc559e6a81afe356daf73a0e77505772e64c54f5a26ffc157e9c31735412eacf8e39643689b78e0c741348f09f8a5dad152a621664273cea665cc13e9ff35717f2631522d971dabbde3a54a0dd0b09870955ef1d2de98d44881b7a5c776b604a9cbf7fa6a4504e4f1b624b1f1f59e74ed52ce83ac1c30aeb69102b1038a662d802d3efec0aae30eed412e2533607cee148ef37970c5662fcccbeb035f867498fe57329e18c038c1cc51ed5e1ff60a95aa69e048a32d985bf7dee6599cbdedd8783cf3e8085eb29438a36dca688beac460e8a3631c143e593e545f87af6f2a324e5c3644f10fd6a334db07b1dfd9802bc0d7accfd24cd6f02d0c051d34018db2955993017f1cc32b87ece0dda6aaa49f9658120956b80510d0f06f1a5323ee6903bfe1990182f31ee270b96765e6433ef695d7a4f002d07236daa1f6efa67b190f8b1499f4df76485518b2fac4f906d0e63d3eb0fdd57e5b37539a89243ae7707a66964b1e90ef41d61a69928e73e447fdd0b4819e77c5c292111b9de58026936e505a38746f15013a7ed2893e71d427ffa9c9a7b22c0ab2a827f2cfa5701ead6202ef29a060c05380aea813c122cde0ed0cf9ff1b75e70ed8c02de4036e0c67e75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936054631cbd4c23a7a986551177d2d547e6cd133349cfae470f4b00878641ba0dd79949ec80dae58a557a09f1025b3e427a5f07bf4ca030ef1ccb63f0b9143cb03815577f72abc2219d93608f0bf386debaad95a87d0f429ecb808b0f22f69367f"]}}, diff --git a/txscript/data/taproot-ref/aa376ce844fe5f3d69f1047c99cbef99e732dbdd b/txscript/data/taproot-ref/aa376ce844fe5f3d69f1047c99cbef99e732dbdd new file mode 100644 index 0000000000..6ebbcfeec0 --- /dev/null +++ b/txscript/data/taproot-ref/aa376ce844fe5f3d69f1047c99cbef99e732dbdd @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd20000000060f33779dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b70000000001ed470278bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ab00000000c60fe4de03dd71ba000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987a6000000", "prevouts": ["e3725e000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "5044260000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "2a20380000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "017d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ae3d185db005c09585d5b0f947903fc32969987416884748fade3bb438b9cd79d7f8ee1a917297df4869582a1b348cabbff1db4a1952fbd39d89a346cd02d0a88810a2a55ef559e3dd2f859359930339f67e2de31eeac841179b888fd41fd8a3"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c9328a947efdcbc124cee070bf3f4cbfd90ae8e6a9d27cdf09ac9715c089de0e54ce7cc5f439b597f56fd9de2c1657ae9d64eb6e71f5398fcdfdc60a0bc251e633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae05873438be84f92d1402d5d55e9fb409fe52800aaeb5db180b239b834bc1ca2"]}}, diff --git a/txscript/data/taproot-ref/aa471973e1dc517ae959d5706167622da05bab46 b/txscript/data/taproot-ref/aa471973e1dc517ae959d5706167622da05bab46 new file mode 100644 index 0000000000..229131afb4 --- /dev/null +++ b/txscript/data/taproot-ref/aa471973e1dc517ae959d5706167622da05bab46 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1b020000001b786e618bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ea01000000fb510c0860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700f020000007a80c8d8019ead11000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d2de3b4b", "prevouts": ["ab2348000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "bb733b0000000000225120c52c9d5db69f3d85ee35b65e5555252fc0470ab9a3dcbb72267f75438b29b283", "885a110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/emptypk/checksigverify", "final": true, "success": {"scriptSig": "", "witness": ["1693bfe5b28d435d17ac23e9b193024d3c7a1ed0f364352c5b0b607a3b33ce903f5cab3637a41d6f22164e60b2d7a0a2a6b804a1219c1bf3da94471784ed8ec2", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d2db232a58a684473efffe5f8be15c17374986169cf18c1adb110b544d48679b6f3543d66dd2934a4b4b5b83f3181725b5ccb68f1096ac62351c7c97bd1fb9501b8110e709da1864e3fbcb3b5249515c34bb807e7a52bfe6718950e769cad388c56ff404b78dc0a0b90d50115d89846b94a2b0a1f0895318a364e3dc179dd61f9b1e0d638a311a5be1486a7a4c42f89ed43ffd1d5b18820f631006aab35c0b2a02b593180c53027b35b862cc29f04a25efce114c7682377a83dbcf64f6fe42598064c72ae707f2b03b7d69f3c0306a0bb5edc9aa2d90aecbb96bd412d5b1ee8f00d68262204427d46410b755bc31a6012df0b06b921e6cd021b936d3d4c99eead90212921e1142bda8cb81c5ff3145b34391c40797432570ad9a88a0958a1b955fe09784706370c5f6fd13c48513ab6cc16af1e04504ea44462b93ae24aca3b2228a833ef2c51accd6ee09327b5cb9ad2975d597ee135bfef0964473e20f824ec199d2a72d3d5f5ff6ee974913584144656ddfc893ea617971c4925fe8b7e1c4f556906203221bddfee6deb7780e80a3769637a05bcf2efe708f1aaa4a6ffdc17363486d1e033637af9f6d28292a4f4527a2090bfcb5efca2ed9c0d63c01e16c98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["fbfad8d835135af4001e59862b3e17fa552904e0a0ce2e872868206be76519ca1dbdfa700541b0b064ebd20e3cf5be2043d83d3b780e4ff926f91b48c65ec35d", "00ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b37f9cba90643389dcb84f8bb3d7354cace0c9189961587fd423479e33fe4bca7f7bc4310acf33ff6106d71eeafb5e618c06787526c83b3a4f243d9848205cbcd98a80529c2a931358c54a01926483afd2817144d11587481c84348a7a5d142851dee7e8956e7989ef1b2310726d24273d46cfad50082ad927e9fc98f9c143d160fce98e5a349b93a878297fe66e998ee720c75d1643072843d75bdb4b18b12adcdd58f284ab1c59b498a19651ff144478d4b0b5a2922bd70cb075f336fe9f4b68777d0bbd7b6c4a577c7fea562e9f4fea2126efe76f3d0ad98be5dbd6871c94c0000d45126f851620d2066634add2abef2580dc803514e3ba652e78e482b6135b10babe6957670b3c4aa2c76f4112b74affc1af435c8383e13a10ccc3e8ee7052652d5467ddd2e384b678ffc365e66fbacf63a4fbd01922cf714b18ee68a4e383d323036182d3162529448348339fc9acae0372091043e56911cb51e390ea725dd19e02d4685ba017b89767b5c8376f6b66370e3202d9e807c9c5b06b99c098acfa6a9da80a755a207eb5a3ad02b1a2cff248af93ddec122a727b43b9e8dbb8b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/aa56f625476b200e65ada22557c871b0993ff86e b/txscript/data/taproot-ref/aa56f625476b200e65ada22557c871b0993ff86e new file mode 100644 index 0000000000..bc8c68e714 --- /dev/null +++ b/txscript/data/taproot-ref/aa56f625476b200e65ada22557c871b0993ff86e @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb70100000009c40cc18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43f01000000a76706c2046e9aa400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a61f296e39", "prevouts": ["7e7f6f00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "395737000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a6e961960920036299d1290338b03b5fc0897f2d1c8c4c30f54431f2f0ee319875bc139b944cf1f8d9ed8319ee656276635441c9dbef5e9eb4c61f0ceb683bead4fef1ce24aa15771c39819008f8fd2690127aca0aec153183e70aed34d15336657496d8b13d384313b7ad283ed3b4c5292d6b176114427cb3fe829cf130dd77ff5f11ce3c672c5977051de6c6a7ff55f64183600a82656c96402e98f961e727d93b5b34d8a32d796071d788cb1cdd6212e6740bc003f6f33e7d9fe189815f33aca8ca32c35197fb65562669c2f1466fc27a7d78f4f20b43ee3d8c20d2f51bb8ed6fd203c7097b3920f0598a07b8b2c6661bcba2c61971974c50fa88cdb7f9e3cca427ce61eeb88980b1af88ddb9bc121fa6f908ea9ac784f19b1662dc862cc789f31c0a8d92d90549c9b192c2362c668fab700dc9a744fb8645fca7e66ceecf523df27c017b001039084cfcaecc4f3fc957e37f26464b7f1957cfa1f0edb6396eb9b9dedc5eeaa59a3a122e1f80b60fa77c78d5052ed476e8aaf910094db652d41955f9cf148b476fb1824cdef660d8cf66ddd57d946b6048cc8265bcbfba522e74d42a6a4914cb35ab6f6847adc7f2e3d1d18593dd7cba6c11770d319856183767c77754ecbc734c40e5dff8e8bd104f69e5ee5720ab801718227155131d9815497d51632d3ce862793423863967c90f8f6bc2773de8f88f40a79608b4498abcb7514cd35c01455075c3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51073db8fdd32dfd70cc3c0b801d057b12e5f9f3471dc2e8803f572b477b94c5e2cd8777bf679e716871b092f46e3a69645e6fd098b2f58cf3078cdf1926d6f261"]}, "failure": {"scriptSig": "", "witness": ["4d0902cbc5aa41643b6c51d7b13a9a3ec2bfd5cfef5cf0f3ff575c817e8be58f2ae4c07c71c6c5f7ab6b78f7bf50065c5abaad1147d417d090fd16f5174d56dd97fdce6603cf36ca929f3968b77b7f426e8d579011b3a783f4b31ac9c5b9f4c962e1242a6556b375cf9a2ecb331bc7a301bdf245e5476ab1a4beffe73294404c26866f596e282869777c6f3c62c1b2822fc667ed42ce32b806135cceef6abf45611f2a4a006e4031cce851779b65ebca91f456dfe34a2bb391143b7c31cfb8bfd36287e20d3a94cb2f5f477b69e87af3d7dd7848be6204645f04db752f36d664591e4ef3786f81153ea3048528ed9e68117b1c8b58dce4652d3de1a2df1ee51926b7e8e33f84e1deee0283c4b990c33b3cc2fda057ec41d1514476141bf012876f160c355b16772e2a83f2cd8edfe491bdf73a428c68cd94412ee12e20dc5927891912b633ba5733ceb498c516289af39d6c593fa32147b7b0e218e55257ee9eb03b74a779b09a4cd5b5f6e5121ad6f2bf75bc453dcb608a6031004eb57c61dee83442533c82f90a664f3d4b2192d666df4b2c3ee7e328b80a6eb6e5dcba7eae4303ce1719fff7f71a3e67bf8a4645c38706af0bb1b40a117000314b63cb1e637f0e8e9fb529d56d1797acf1427771672099e42403357ea9603774cb05a16c54bde721e45fb61d2967c17cfbdb6a88b921e4021e047e39e4fb918fe3d240c9049cabe43c84280d89e439aa9b7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a346b8ad70cbb62328f229bdbc3f197dc64b80564f2ec5a0a874aa96f70b3c11ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900457cb9328b065f9eb1f6f110e9fe7273590c885552330e2c3269c2432845ee2744cd8777bf679e716871b092f46e3a69645e6fd098b2f58cf3078cdf1926d6f261"]}}, diff --git a/txscript/data/taproot-ref/aa76c2e6c5a061d0580802966b8efb8804164d68 b/txscript/data/taproot-ref/aa76c2e6c5a061d0580802966b8efb8804164d68 new file mode 100644 index 0000000000..b4692ce469 --- /dev/null +++ b/txscript/data/taproot-ref/aa76c2e6c5a061d0580802966b8efb8804164d68 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8600000000ce2f9983dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4601000000204160840467558b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ba17e93a", "prevouts": ["35af690000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43", "468324000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "617d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93695bb8d2654824dd3955526038f4022aa362c37fc7f85a8eff2e4eedc1db354e88a99f3582d6399c0406dfe65dca998a5ce57b7e950df5f64352e1bbf6c7fd210dd304186c0a2faa80f59261766b0cb9b0760b78eb1f31f166a6f091ab62e6898"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820063b43826002dc6eba62f224851f0eabb14759fb10c707a6afd7fdb59e93aad3ab6b2d4691bf881316931c587f0a213fdb9026021e80f212e72f88982a6bfdc"]}}, diff --git a/txscript/data/taproot-ref/aa8eac8fb7ebd4e613d8bdbce660665b3f45fa66 b/txscript/data/taproot-ref/aa8eac8fb7ebd4e613d8bdbce660665b3f45fa66 new file mode 100644 index 0000000000..eae7a6beaf --- /dev/null +++ b/txscript/data/taproot-ref/aa8eac8fb7ebd4e613d8bdbce660665b3f45fa66 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127076010000009e98a7e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb70000000033ac90db0331e2690000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f878995083a", "prevouts": ["2bc7120000000000165a142540f27e90740933c99d4f17ab2dfc6c82951cfb", "e0b558000000000017a914d574841bde7bf0817694c799002118e85acf040e87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["dff0006548d0260c0a1dac0892042eb1e23b110b81a12e1d068876601929ed6ac8749a22e15e624632b52257c2a704abf274f6d805aee49c4b3668b32f2efa00", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/aaa6693d92f9027513267fd416bd6201171873ac b/txscript/data/taproot-ref/aaa6693d92f9027513267fd416bd6201171873ac new file mode 100644 index 0000000000..43ad3b3fd4 --- /dev/null +++ b/txscript/data/taproot-ref/aaa6693d92f9027513267fd416bd6201171873ac @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6c0000000082abd590dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf4000000001ad7dbb460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e60000000013b495130186bf0800000000001600149d38710eb90e420b159c7a9263994c88e6810bc720b41b44", "prevouts": ["0cc849000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "fc1a5d000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "703713000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b9cd8a3131493f9a38a21fcb48f1eba7224ac37029eebe06423782cc0227356a6b70b7a62b5c5e0df92365fb7d59f0bc38341b3d2e340457f550b81c2c042a2c34a04a5098447f4e0398dc0c9a2c4efe1278fc77be1b3d48003403aba1647b18fc8d6c1b07c83ef33d2e4f6f549d1e37a8a4712f5ca3077e4083fa19c096182fca0777e37589bc4580da08a05badd8730bf744c4992f5d50e09f508d744d3513fb4e219b36b5ea7738b1ce4f855932bb3cd87cca3066cba6663ed3ed25149aa013897acd25ecca7572fb466e83e2d0415c9aa6966072bbc72d7844a948a578a8976593b24a6e318433ee35188a12037ebdcde58e40c27745aba9875db31d97a2aeac76c4b49722ec8240b2872409a8d41addcf54646c31b8d758151ca431e11c12c94691ab0602ed63ca4ad0063aa269fe92180628d9157ea1002bf9b04e1f21dc77542cbf93670541053b0bf2da4be5bc2f9d6889574141d15acf183bbaff9c7a1ed845136486d7fb708d3b0a870067113d93f5add14823d7100e62015364b60d46996ab563139069663a27841b7c812d0ffcd69a36da0def4988ef89f3b1c62ed27eb39541e747e402b7e8e5f2fe1dcb115faeb28d7377ef2fa157886512f57ce8d8b63ba8b5143e91ecdfd7fd135f6cd352193fd910e2e5862c998bc956034e841142c6e231b382418c0a92e44b1607b80179d30c8ec5c9b07fac7a31d3f64bcfb5911377e71b8c75f6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b6ced9e64c6943ac670763abd5f717e15a7508527424507437b13b7c3de1f72e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bc80a3081e946651089c17942e2d2b7e0a2ba8b51162f8e9c4f29cb18d1603310a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}, "failure": {"scriptSig": "", "witness": ["4d09027b619195d54a4b56dd9a65e2f82bfc8d9d39dcac3973f228597b598b7df306aaac130870a83828d085d2549a149f97652604785dde1d37c687e5cdf29a17a451e9508c624ef75818fda145e62fb23a47b08e7fd9e3dcf4a5c057100a538e921018a9e7debbdc364607738d22378455479e577cfa3773e4927726f5f970ee2e997b0f3a3c164ae45811306ee93ae2c497f2545e1a79cb2152d86e301c5d1e5c8c0b902c947459a5fc6c4a739b24d0e30bf52551399f845b1c725b79c7855ec8dcd89f922110407a7da6c9d5b46d7969a30175eb0c7136836b07ad23e95fc81e2e986046449b8b329da5a258e48cc7e4dd33a3efbc0e06b56526247c092476ce3028951cb9a34d52564d73d4d0c0b743e0a6a639b1e1a974f4e83b231e396a0425b27ca5dae555f94bf4efd7746634fe26e5d0548127abfc8dcc0adf24d0e81053ea6eae37e394c59715aff0dbbdc8f97bde90611aca3e800942b5cd785a5b66b2579b7e411b6932c9a0c8be3be66a6641d3ef79d2a8366d7f6ad1d0089bd0692ddd33c68edf3116ecfd7fe8a102a994fae2f118fc0d91b7dda468b006ac2ec69415e943885310b20ac51e9d25f9ef762465517e59663e005681eb1d6e9fec63d30a27cb9f676c366582b265362bc58968b589fd07640f66feaa137072f8746f423fef594e7d975069aaa83a158219014be0a4610228c4cec86a5d4b4dcb07f7c17cc2eb55036f4e8df77561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936de506355e3cf60ace4cef323af6093f7f8acc431ceedff9be89b34e31adfa37dab836f202d3609bf617cb7b4b7700532182ae3d2e1a09e3b3f38346196fd93b669cfd1883d9d94906422bb83623918edcd109683f826bcbf676882b31fdcf44192fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}}, diff --git a/txscript/data/taproot-ref/aab859864bc25e0a7b430273941b291f2b765ba7 b/txscript/data/taproot-ref/aab859864bc25e0a7b430273941b291f2b765ba7 new file mode 100644 index 0000000000..c83ed67e2c --- /dev/null +++ b/txscript/data/taproot-ref/aab859864bc25e0a7b430273941b291f2b765ba7 @@ -0,0 +1 @@ +{"tx": "d2300b08028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40302000000f7c3138fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4401000000dfa691ce01a7032d00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac6b020000", "prevouts": ["21ae390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "358e5700000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b2", "final": true, "success": {"scriptSig": "", "witness": ["7be32c72334b10d1ceb87f1628d69a055e362ae6399e8f3caea7734554d7f404b806c40f527deec4f936d3c3f5efd89b95f0dca8aa6719bcb3288cc2bc952919", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["30a2af13cb5dbb0192b2e4c32f4677c39f56879e7f39ab9adbf9bb63179d2bd9d9de71928a380b53e028f4d5c145f2971c94f0bba6058422bd827c7da9c47063b2", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ab1a9283d7a85a42aff52d1937193ca27a794187 b/txscript/data/taproot-ref/ab1a9283d7a85a42aff52d1937193ca27a794187 new file mode 100644 index 0000000000..3b826cec84 --- /dev/null +++ b/txscript/data/taproot-ref/ab1a9283d7a85a42aff52d1937193ca27a794187 @@ -0,0 +1 @@ +{"tx": "d21e6dcb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44801000000e3a0c5abdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c52000000009db4d7d80252268f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5a61c420", "prevouts": ["4d7d41000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "c9354f000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/checksigaddoversize", "final": true, "success": {"scriptSig": "", "witness": ["46fb23060054e2ae7f44f744498642d34576a50319d408c31a9aa40c4754fdacf7d8505910d566fd902d1b2824351e39b6bc737e3534c9c12b5f54a0fab7df02", "04ffffff7f20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682419aa8d327067d95b4d536ebda455395190dd39e18c03232c492cd77bbf5c60655563be430965c12747e751ecddd5d613c326da0f298b6d45d5546ff9dd2ae4b9207f7f22c04ad05799130349bf7a540cf626b5f0a6721ec598560e06bc37c524a194b587849a62681eb9ecfc58471f5db76a054ad222105d6bb4a3b31f73358dcad47cba8e25f74a6437445fae536d2fc98c7487c1d21b3cfb5f5da8b0c2c7f51ab2403311907e0e6eefb69db0ea9627a1f736af8b880d64776e77cdcfad0db33a6bcee22afe78593b06e3e9eba900a802e002bc410d58121b00203e38fcafd9c9a4a65bf2c3535fb687f4d013bfbc8370da866330e8ae0a289930d67ad7eadec89f6dd5d95ee9482e5d679fc9b2ac5b5f79305e9bc53f8e44773a97b7da7b264c52f17389da701e27ebeb344ec2483d6d2fbd801b12beb3b02b8a807d69e5f8f1ecf0284d5344845e5c6781a87f37142204f7c9741aa330acd0daa91ff9e2b619b683119747c3df61c0924a6b44488817af04f06674d926c898b0b6db546464e05bf50edce7b1f5ca81822687132cf7d30ed84f6dc8ca7e183a338d302e00ae160e990742032df386ec8547eb181c0d102fa876c1cd80d9ef530fa1c065d2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["c022a9962f27b65ba8ab2636af9f7be02b206ba5ecfc1ab6808cf5e49bfff897137a29532a6e74f6a941c57403777143643f7996349946723e8231eb1d52b7d9", "05000000800020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ca373a9284d9516d65ca57d42aeefe677abc27971d99a0e576ea3e033f0e37e18e226a88f8de1ffdbf8653e5e5c99d8ed6854f82ec6180716e498db4090bc6632eca1c10f6e29adacebae9c18d35728cfda46eaa96261d129acdc4b9e453cdf8e00a42427634156bf48aae55d12e65b2b6cdc4abb92f4ff102785641e1ad0d5b12d8443b4b548fc10604f059128cc28d89f7aec36eeec0a36f070495d2024be6b4d9c782523004c55b59cdfe76d2b17eaca8dbca1786e586c09b966ccead252fef997c426d9e949c5a3515b5e0042d45e4be44351c6f149d4fc020759a6f4b0d67374e7caf20322e7084d9546ded12af1d1c5a4e1ba9f0c95d59cab087df6e422f503472e6304a227f15c06c4bf90b77a0576afae68bfe51800240c398f7b74c3dfc6c9c46ba420c22a4b23a6e73e8909bd27f9a6cc2eba3b71442d590039c84de8a0e517ca4f4c263b0ab1b11f7cea6a468382fed8b4a21a3e6c2259e4be3735e9e781db25a304cb2b703fb372b5fb8e69d12880f4d83920da47a594e16bf0d7b8ad7363e0a6ef78402a031bc0a044f5a7e6c01a5c111176c74efd8c6d7787a57b391dd67ba025b9a60505ecd7fa3b5ed0808730285af9f495e709e1f92ab88b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/ab3899ee5c2ed560ae6beb77e71e4950fc17aab3 b/txscript/data/taproot-ref/ab3899ee5c2ed560ae6beb77e71e4950fc17aab3 new file mode 100644 index 0000000000..62cb033bd6 --- /dev/null +++ b/txscript/data/taproot-ref/ab3899ee5c2ed560ae6beb77e71e4950fc17aab3 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45401000000823bfdc18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4180000000071fce1b204401f74000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac97050000", "prevouts": ["167039000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "9eb03c0000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902afaedba19cb07ec09801623e11075a7ababb418ea1b7c72a87ff84ab94884be0ff71ed539686fb926a5a8e18f3a529710f152f7d75586ce74c16f7e698a04d7a3d5e9087794f38ba5c142d6f8703d3e92545eb79478f909ff27933cea4e107c57b944b4db8c28397be2b62a24f2524c9f4c6ebb62120e65fe3dc54311b573f267932dd23a179b51486ee3df1e2efbe176d93e1172f177ae1d00b1a7475cf9ba06799a9546950496f3cf8baff20ee660d0d98a1cc31e98561a5a9ee018a8907d9ada2957a91a98b742d80904e4005615c403b06e184d52d32f08b96c2f0307b2a79d73843c4ce0cad81c21bc936ccf777a00362ed5c2295b49b2809ee15b4def6a493a3c64afa02ee7322a0a56a8717faf742b7b28b56b7cd0f2138dec6498799576554f5d387c9c3a7ba8e33d8305d529b585bad9121620ac4011e603a3ff94524fb1be6d6cabaec1c188f7012b2fc728b1ee92dba8f4a6fb43d02ec841f4be3bbb291319987fce484e11b500d1acbf8d553e9aed556ff6fd17a88477066a25f6556f2af28c147aca567d34b33ae17105192dcdda8f1b6c96748662bc8428da0c4bee1616c2197215c7aaed62894bbb43c2fb5bad3831052d055aa2e2d78a1c6d23445e27cbad83fdbfd86558fe8d46ab871212c2cf82232477640c01c3673b305d891992dfa26d73e696e928fd355da5437211f6d15d6107b9d8c1e6ffabc4dadb6dd682fdc95c93975", "5c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936747197b798ab967e07c108f007a4e907b9ac872703c3a06a0173ecb6d9f2921e0ebd37c9b7767cfa75ada9a6605680756deb542ec34cf1dc29d9c7b172412f3174e87bfb4d3d415907d7a3196832fc57be4f6d746253c89a46e8e4c968740366e8f45a3ac55dff4b7d62b0bc42204f13e92c55212ff162d480a58edc7717abc8"]}, "failure": {"scriptSig": "", "witness": ["4d0902ee4099c1b8af946c46ded066c6a996103ea2900a9f9448f7f9ce44826a2467b76235b369763273f90a1dc0261df39f8e85940c155532f372907c8b28317344624df52d38fe54f1205efb313d927a1e234ae6ac3096ec247636bcb7b9af082a4d4492758599673e4dbe94decb5bd6d9637926ee909d9904218632c4197de102d5844db217b68ebecd3d7bb48d853e4f1fea6d07fce5877a82f29a195e9f1e656b77281cefd2808215ec157cd56aae00592212c9f3ab650cf372d69091d0a1a34fb1403bab22c1a0e15305c413f789c2a01cd21b660565fa5ba9f75471a261dc0e9a629a43a8ca651d93c6c74023526c2998068a6cd19fe7ffc8d2764f9a275694cc0df97438e287f01c4a2fae01c0ff148438b698bd2f19ff0319a8e5d9d7cc9402b8c1890b0b8aba1e0a8c6eb8e8a9806942a862035e8d1453dcd13d402423284b5d563a9ddf71e6d8facd5a5455c07a86e876aa9dd53b998df32cdb78605ec8ead49f9e0c7a3a80270d7e10aed5fbb3b40b9780343427efdb4223d694e52cb95db932e52ccb040530a601c6c25dcdf6cfa488f77d370767b8533180399b98d41e3369af4ec7f28a4bb419e3ddcafbcd604cfee6733dfa23992659ff75375e8f38dc16ab6ffa42551da4dce6e787055ffde5e33c8c2c1ce58c07096cb7c3f1578a32daa5183e727e9827d1978f58d854651a2c3dd6bdb6880dff44a5e4e906457513f70aed30da9e5175", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e24e037abdf69c22f44b0c591ad93651f749184eaa819a8a63a5d4092bdddfb78f243c72f4e074898aab8058b3c73fee97ec3b9723e213834a8398e97170c1356"]}}, diff --git a/txscript/data/taproot-ref/ab3bd8d93632f274ea33e6bac92fec9215c4f20f b/txscript/data/taproot-ref/ab3bd8d93632f274ea33e6bac92fec9215c4f20f new file mode 100644 index 0000000000..445a18bc87 --- /dev/null +++ b/txscript/data/taproot-ref/ab3bd8d93632f274ea33e6bac92fec9215c4f20f @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba0010000003f954bf360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706501000000f7025ddc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ec00000000d17f70eb03851b6d000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3a773856", "prevouts": ["90ed1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6154110000000000225120685f1f4d981f8d279e9288f3fac3f130840e4486d97e094876558f7ee35a7d24", "1f353f000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["304402201ea9793149473141599ef76aaa580bd98f5b76a3c859ee25a8cadc4e20593e4d0220393b8c9b051abf0f4bd2a9c2662964b9b2c836899d7f97cc0926c0642a090a1aa0", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100ef3fb4bcebbdc0847da0040badbfdcb28262eca9e90b23e6a5e8cf61c38f13f802201c199cc72e1c3cf48228ddd38daf02350e3e9b159d24ad5f025fe475b74c86eba0", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/ab3f300e2417c10f0eedeee88f719e82892e53a2 b/txscript/data/taproot-ref/ab3f300e2417c10f0eedeee88f719e82892e53a2 new file mode 100644 index 0000000000..f06006825a --- /dev/null +++ b/txscript/data/taproot-ref/ab3f300e2417c10f0eedeee88f719e82892e53a2 @@ -0,0 +1 @@ +{"tx": "dfd2e9c702dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3201000000e75193c860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c6000000003e731e9f04828f2e00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7eae9964a", "prevouts": ["f48f21000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "b6d40f0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f04c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045ad7df43f1383df9f0df0a1e0ce133acd14e2258cbe9a702da78bb61f4d1a9bc80eb43d08761fb76661299d0344fd2d8bfc7de5e7c6dc622156e95971f4b8396db5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}, "failure": {"scriptSig": "", "witness": ["4c52f0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936276aee05659d89654db507d09a750387aefafff0901ff8ece8a28a5fdcfac69a8e2168769c1e98187b117731eccdce651c542044ebcbbccf53ba5dcae5773e361c2a3c32f2d98482ccc0ae7bd6919d8eb72134d3589ab943a0402c8a931ea420419704ddfd13dc63b1b4156372563d65f148a89e112fdd9cbf47f8afee5da0a9"]}}, diff --git a/txscript/data/taproot-ref/ab5267db0c03e93e08f51b597821900db93ae75c b/txscript/data/taproot-ref/ab5267db0c03e93e08f51b597821900db93ae75c new file mode 100644 index 0000000000..433ae0d345 --- /dev/null +++ b/txscript/data/taproot-ref/ab5267db0c03e93e08f51b597821900db93ae75c @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c00020000002b7885eb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e50100000052310cfd02d0af62000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac12010000", "prevouts": ["b53f550000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247", "eed40f0000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "847d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e83f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08276735f386d1a4700f0e60fd19c47be953169b4ae01039887cebf253884ac2528c568c76d6b344a062dd798f6575db1f1731d6a7ca3f2682e7e1b801cd94d3826"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369b280e7b0e172100b660b30f153c20cd729b6a3e92d21f97d20774fbf01245e83f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08276735f386d1a4700f0e60fd19c47be953169b4ae01039887cebf253884ac2528c568c76d6b344a062dd798f6575db1f1731d6a7ca3f2682e7e1b801cd94d3826"]}}, diff --git a/txscript/data/taproot-ref/ab8bd300852ee0d05f0c8d476f4205347466c6e3 b/txscript/data/taproot-ref/ab8bd300852ee0d05f0c8d476f4205347466c6e3 new file mode 100644 index 0000000000..16ee36a0f2 --- /dev/null +++ b/txscript/data/taproot-ref/ab8bd300852ee0d05f0c8d476f4205347466c6e3 @@ -0,0 +1 @@ +{"tx": "487bef7002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1002000000de8b8aa4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c69010000002054ea8402c7f0a4000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87a505741e", "prevouts": ["b4c85d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1ac8480000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364dc685ecbd8fbb467f50be3541444cace52e2a96f82f6e3a97ffe7c20b40a1e235701ef224ad20174d0190f97f9f6d3f23a41bbc27fc82fd96c9e1fc2f7b2cb81ef28805a30acff873fd9260c6b3bfee2b626467fb0ce04f716d513a8a4b08b6f288028cdab461d62f9273620b97315e6e9af9458f777a616c1bade2d3f6a89e"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f183944a14618fc7fe9ceade0f58e43a19d3c3b179ea6c43c29616413b6971c1fd87b85adb72b018dc8118730af51fe2e1fc2345a45c291032ad5ea0f36db09afcaf82673e7b509fa61dcb6f9390da3a7ce1e18401449d1277235bd9d9c04d9a72d00f85eae87f4cc31996f158484f267a3b4b9a04e006b9a1cff5c0be2781e"]}}, diff --git a/txscript/data/taproot-ref/ab8ffe370320d075a8c7b9daefaf545d29b7ac1b b/txscript/data/taproot-ref/ab8ffe370320d075a8c7b9daefaf545d29b7ac1b new file mode 100644 index 0000000000..076725a333 --- /dev/null +++ b/txscript/data/taproot-ref/ab8ffe370320d075a8c7b9daefaf545d29b7ac1b @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc10100000045d79042bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf650000000093c03899033fb4c3000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac0a030000", "prevouts": ["9f9c520000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "0ae7730000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["fb4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d514c1cf5ffa00c6c7050afc353617823cd679ab4db6c6aacae1c16f62a2980653852b51aac478484d8a075e848b67a41ce9b347e1249fa49816f898b909a6d4bd5c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93658233aaee0e6be68e94a661d667ba26ec53439df00cf64033a82f3558122bc08006cb24f353cfca0d245645f6b16ad599c212098eee86bd01fc37c5c4a863127c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}}, diff --git a/txscript/data/taproot-ref/ab9b4c72f3a16b2e16d40652ec33ca2a8ee4d3ef b/txscript/data/taproot-ref/ab9b4c72f3a16b2e16d40652ec33ca2a8ee4d3ef new file mode 100644 index 0000000000..93e23d6859 --- /dev/null +++ b/txscript/data/taproot-ref/ab9b4c72f3a16b2e16d40652ec33ca2a8ee4d3ef @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f9000000002952ca0e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703501000000ec13486101dbaf04000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ebb0ca47", "prevouts": ["2b700e000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "1417110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "cc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa45716b950e27a233a501a90011450809f321d0f7541cd1975fe5718ce8e53406ec1da8cea892037e805a477afbb54b1f5ec380954f076c0bcd3c4e3d4797a8d6"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eaf68f276ddb4c0fc7f0310a620a2f1f9fe6c0e4e29d0e280a559099e56625bc6391effb841e4c3f4ca92b599bc572f2bc6440711e20bdc5ba4fc353379105b198f95dbc4edc81931664a748b39a9978dd32dedaf5c850114f6bd2f5098c050fb"]}}, diff --git a/txscript/data/taproot-ref/ab9c711cf8bbafb6cdfd30f945bfcb03cf0272b6 b/txscript/data/taproot-ref/ab9c711cf8bbafb6cdfd30f945bfcb03cf0272b6 new file mode 100644 index 0000000000..516b9931b5 --- /dev/null +++ b/txscript/data/taproot-ref/ab9c711cf8bbafb6cdfd30f945bfcb03cf0272b6 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9600000000431e98c960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127048000000008ede57ff04e6946e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987ddbdc542", "prevouts": ["320f5d00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "6a0f130000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "47304402202a8ba61e58c9d7ba6cbcd346ef5c7351f9d2a0bdb7ef7c857111135bdcfeefca022040b7385d8f2a8df68fd527196e4d88138c4bf01b4c160db908b51928b563838d8100", "witness": []}, "failure": {"scriptSig": "47304402201914b8fb7b2ef0ca7b231c5ddc350f2d53699dea6c0d9b369e58590e81a6ba270220552b7f1712a4d9a2439b70adeae3fd9cde34be3c36392e53b111590d0bf757bc810101", "witness": []}}, diff --git a/txscript/data/taproot-ref/ac0b35cbd93f63ed7452d6acebde72ca9fcc3d81 b/txscript/data/taproot-ref/ac0b35cbd93f63ed7452d6acebde72ca9fcc3d81 new file mode 100644 index 0000000000..d1c31a372b --- /dev/null +++ b/txscript/data/taproot-ref/ac0b35cbd93f63ed7452d6acebde72ca9fcc3d81 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4160200000022cbc59f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700c0200000019f988b38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46e00000000d2570be0027ad87c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc70deadc2a", "prevouts": ["d5b6320000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850", "59ad12000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "5152390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "867d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936926f2b50f3fbd9ffe22dc41af4426bcb82a03b8aad9cfd0cba46d108de7a4ac73ac108bed01ff7a3c4482bdb9637a0c08eda3eca9d378124f08be0fd1593c53eb98f84b0d7d6fcb38bca0562970da4fa4ac9189daad947902c07179846baca90"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f28332fff4e521a34f62a6094c9ca083df763bc212ee1a103146f1ea11bafd96b069f256e7b53185a64c953a8831f99a2248244dec917c9fc219bffc52b204f"]}}, diff --git a/txscript/data/taproot-ref/ac2088d883a0a84ac9d499824adcbd32f90b53c8 b/txscript/data/taproot-ref/ac2088d883a0a84ac9d499824adcbd32f90b53c8 new file mode 100644 index 0000000000..fa99360a7b --- /dev/null +++ b/txscript/data/taproot-ref/ac2088d883a0a84ac9d499824adcbd32f90b53c8 @@ -0,0 +1 @@ +{"tx": "bc10ab850360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e20100000056ca8ef0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd500000000f9c6cbc3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfc0000000042284be90453929600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e73aa04c47", "prevouts": ["1d5b110000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "dc1d28000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "74b25e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "797d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364c421c3900c3463ef8c952c4f696eeb0bc35e56e2135d4a2e925409c37853bd90793fbcba16d5416bd6f0933503ffe6704f239223875a49be11ed5869ee331b55be39dc57762be2d9b1a04aa5b570805d23104bfe4fa54c392bda5d51f7f4540"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bed135788b70ac7e03f21dc901124d8cbfe8ea126f939efbc4c5594a61331086b1663b8b45656caee420ee834d80103f5ad80f9c4de199ff6879db0155217f4eccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f45727aec9530f4cf05d3554e63105b96634da39f3c52c35c251ce860693e97320b3"]}}, diff --git a/txscript/data/taproot-ref/ac3cd67c26d777875eeebe2e90c716e8bd592ff4 b/txscript/data/taproot-ref/ac3cd67c26d777875eeebe2e90c716e8bd592ff4 new file mode 100644 index 0000000000..9dce465669 --- /dev/null +++ b/txscript/data/taproot-ref/ac3cd67c26d777875eeebe2e90c716e8bd592ff4 @@ -0,0 +1 @@ +{"tx": "324e93d202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9a010000002b5640d48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fd00000000938fb6ab03c0a05f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca2c5a437", "prevouts": ["7def240000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "57833c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["8d", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93698751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d593f37adfd687dc0da405a76cf860eea33b50edba83aa9aefe64ccc08331b86a062cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004529493e63f0262db246dc905ef3bca459233a7269b5efdd4093c0b189ca3e559193f37adfd687dc0da405a76cf860eea33b50edba83aa9aefe64ccc08331b86a062cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}}, diff --git a/txscript/data/taproot-ref/ac93b3ca2d9c1ec6e07725af461ea07bb19c4dee b/txscript/data/taproot-ref/ac93b3ca2d9c1ec6e07725af461ea07bb19c4dee new file mode 100644 index 0000000000..c44db52452 --- /dev/null +++ b/txscript/data/taproot-ref/ac93b3ca2d9c1ec6e07725af461ea07bb19c4dee @@ -0,0 +1 @@ +{"tx": "bbfdf13103dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba801000000044ebdc3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba3010000006ee87db8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0700000000b29ebcbf04633b6a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc791357b23", "prevouts": ["55991f0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "bf142400000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335", "5a22280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ab7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082a05ea26d8201abb1a5c146c7fb3e541bebd813f78d5cb214a01f0b6fbe6f45888cb303569f28fbe8acbcc2d27d183e3a68170f5392df28f40a03efea695d856e"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363cf3c913a0d0151d6af78c78da1c827a410891daf294851874f6597f4ed324381084d1aecbe4c7880bb8a882fc35fa9ebdfb0d7259cb873bd54dfc151a0965e70144ecbe7fb1e6c18f5b14cfe26e6e35ca66fe7cdb676ad740673ee849f6d44e7c07bb1aa10d02d314eb70c923196d0e49e71087637e2d5a1d7fe44c2440c398"]}}, diff --git a/txscript/data/taproot-ref/acef576be556d6720814253fa450ffd2684c3c7b b/txscript/data/taproot-ref/acef576be556d6720814253fa450ffd2684c3c7b new file mode 100644 index 0000000000..0cce5b0fcc --- /dev/null +++ b/txscript/data/taproot-ref/acef576be556d6720814253fa450ffd2684c3c7b @@ -0,0 +1 @@ +{"tx": "9b03967e038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40201000000116593bcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c30000000008140a59460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bc010000003f8a038f03ce439b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a61f020000", "prevouts": ["fa123a000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "d8a45300000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "95390f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["844c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51120199479ee6d2d4c88363683365d3fc0e890ec8511afbf0335c75bda2c0295827135a2a7712dc4ffb0f490ef0a9e18994dae8053f69b06dfd6a349e2375b7df7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}, "failure": {"scriptSig": "", "witness": ["4c5284", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362266a7dcf41e8820204b3c7c313a73998dbb7a25b9b7d0a8551836cbdc8e1fb771f92e1336a687ea436697fbd19181210e765b944dc821397d885c783bf2f2425e521f6248097fdc64ff5a0a6cea9e07e7c649e93dab8ac6058acbfaf1ad70aa"]}}, diff --git a/txscript/data/taproot-ref/acf314897698e9e208634f10df880184d9a7754d b/txscript/data/taproot-ref/acf314897698e9e208634f10df880184d9a7754d new file mode 100644 index 0000000000..b3592e9eaa --- /dev/null +++ b/txscript/data/taproot-ref/acf314897698e9e208634f10df880184d9a7754d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1d00000000065a48888bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f300000000cb7a9eb304fff3a800000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac0c020000", "prevouts": ["f03a7100000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "75223a0000000000225120cf3d4a21d95f409285a815c665903ee1793a8187aefd3a8003cd262b63069349"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d303776f49134788675b6d5b8e7b8eaed975f4d3e59d9f0e5d87dd448448e55"]}, "failure": {"scriptSig": "", "witness": ["6a1c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/ad1589197b44cb0c659b26869de6c66b103e9682 b/txscript/data/taproot-ref/ad1589197b44cb0c659b26869de6c66b103e9682 new file mode 100644 index 0000000000..01a443f26c --- /dev/null +++ b/txscript/data/taproot-ref/ad1589197b44cb0c659b26869de6c66b103e9682 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d901000000d5ab22dfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf98000000009e40c06902500e8f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796b4d1895d", "prevouts": ["8fbe0f00000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8", "f80a8200000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["30440220789eb29595867f82396e51d5c7d9f29952c0fc4f15adcd99147964726678e0ac02201e539d06a9b8036bbdc86fae321b6e02c6617bb2cbad6db08de13a2250b29af931", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["3044022078042c6547ef7114819b28d5f39cd7658f2774d195dde461f784474718bad9b002200fbc52b8cd87a8ceeb47da23e70f33fcc7ad67c4716828202877590f7b5f6b0831", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/ad16650f9e472fb459eb487a9f883c894760b565 b/txscript/data/taproot-ref/ad16650f9e472fb459eb487a9f883c894760b565 new file mode 100644 index 0000000000..af6dd11e7e --- /dev/null +++ b/txscript/data/taproot-ref/ad16650f9e472fb459eb487a9f883c894760b565 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b56010000001507ac2fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c880100000047f521e4028cc57200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df9797223689874a000000", "prevouts": ["8ab320000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "3c7654000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "867d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364703c1194851d3d768ad1a24962dbcbbc112958428edbb9508a4568f63128e38ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f4576b069f256e7b53185a64c953a8831f99a2248244dec917c9fc219bffc52b204f"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d95cb9e4ba0f14f7a61daff0d77db36648450ca2d57fdcf621c9e46ecaedc2ea0adedab43a8ab423f9b5916bd9a862eb4f524e14c7176baa6699ffba0690b6e8b98f84b0d7d6fcb38bca0562970da4fa4ac9189daad947902c07179846baca90"]}}, diff --git a/txscript/data/taproot-ref/ad382a856cee976ed155aa5fae9828cd059ccb26 b/txscript/data/taproot-ref/ad382a856cee976ed155aa5fae9828cd059ccb26 new file mode 100644 index 0000000000..69d7bc34ce --- /dev/null +++ b/txscript/data/taproot-ref/ad382a856cee976ed155aa5fae9828cd059ccb26 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0d02000000f8d073b0039dd41c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac60040000", "prevouts": ["1fc51e00000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "107d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082dad4d220d15ec254ba214a445cc73922794d5f92559e27b8850a422e98de131f09630471a62c8657382c38b342878f0042beb3ba209e0ca1417f9db2e3d45f6dbd940ade039b405c8439b762bfbc73f9441ef227e6f687b6d94ebcbac32155c7"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365814385e7aeaada39c80cac3230b4e4d86779350f7373f36ef6f8a954e148cf2da7506a3091a1e28dfc5b9aac4646748f840add9c91a317c4120c5f1dff96d2e4520b5ceb13d27db1b37ec8ee9ee9482aafd08fc62c5401b1fb7c7b4ff374c3d"]}}, diff --git a/txscript/data/taproot-ref/ad4069abc0712cf1f3c8508b699379282bbf556a b/txscript/data/taproot-ref/ad4069abc0712cf1f3c8508b699379282bbf556a new file mode 100644 index 0000000000..1248ac843e --- /dev/null +++ b/txscript/data/taproot-ref/ad4069abc0712cf1f3c8508b699379282bbf556a @@ -0,0 +1 @@ +{"tx": "c44943fd0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705e01000000f83269838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f01000000d07eb1f80331d14800000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc15bca94a", "prevouts": ["76f80f0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "dad43a0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["954c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93629aff60e439a9718fb9441d494108642f29be2d6809c2540641ffb56ffbcae4b3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082adc7c8b3bda8f17728820267d55a41d559bf30f92e294931cb4fa644579829c4d4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}, "failure": {"scriptSig": "", "witness": ["4c5295", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51aab45d9ee0154589058109bae8be3e72a724d93a0656d7cd013110f238c03b0975c046d699a38e7801f010fab6b697cc237a48311758c02bc29e281a6d7a682eab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}}, diff --git a/txscript/data/taproot-ref/ad58a3216af0b6f002972233963f6be39c7aee60 b/txscript/data/taproot-ref/ad58a3216af0b6f002972233963f6be39c7aee60 new file mode 100644 index 0000000000..e404e2ec54 --- /dev/null +++ b/txscript/data/taproot-ref/ad58a3216af0b6f002972233963f6be39c7aee60 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21010000000ae3668c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127048010000008de810588bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40d00000000fa4dd06f0403f6a000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870d92972e", "prevouts": ["96975b000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "3597120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cab1350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_6f", "final": true, "success": {"scriptSig": "", "witness": ["2c040c7778bcc65cda8395e7ae062e13853bcb5c861388366263d03fb307317c58e8b78d598290d629d0b6548b9661d177061b7e80254969222349ae5df948c182", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["9e5716207969a18ac4adbec99a101d03e1ba3a535a4364a8c32eaeac0eacc6d165d0a3f344bb31e5f81ea744d1d6c571a71687eb566b5820f8ea73fc2420b9ba6f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ad67e4cfbdacd913d6561d8fe08f456a4341a88b b/txscript/data/taproot-ref/ad67e4cfbdacd913d6561d8fe08f456a4341a88b new file mode 100644 index 0000000000..20cac90cf8 --- /dev/null +++ b/txscript/data/taproot-ref/ad67e4cfbdacd913d6561d8fe08f456a4341a88b @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2c010000006700468d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701b02000000de835db602815d6100000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6f3010000", "prevouts": ["61ec530000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "4ef50f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["de4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365d68cd89157a1768344d3693d5ddb5d4f8008c6471ee21a81a3a4b68d16bfcc31823ff0d5c6a769fa09e08a59a2485b611e1511239bba2f80aba2b92be945f1b811034f174cb7bd77652d345f06878a8d4eb3ae1b92590cd10e2563bf228d2d6bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361a24f92e0fd66692248020bc486fd34464c8d03dbe31b3b0085981632dac5adc23dda11617dc042479e1d576056805c31872018ddbd603e5e1ceb926e90a3395bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}}, diff --git a/txscript/data/taproot-ref/ad705acdd20e8da3a2171681cbf04df9fa98a3f7 b/txscript/data/taproot-ref/ad705acdd20e8da3a2171681cbf04df9fa98a3f7 new file mode 100644 index 0000000000..59454d2974 --- /dev/null +++ b/txscript/data/taproot-ref/ad705acdd20e8da3a2171681cbf04df9fa98a3f7 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42e00000000888dc23702e4e4350000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898796acf448", "prevouts": ["37be370000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["cd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936305e2bbfe940f420c214662e3966ca6ecb30394037d73a78f87c1b0a0c14e367fe052270a8089f5fc5ef9a63e8f4df43751c17d276a547e2cd275b71d0b6242a8fd238d2decf6f7142c55252dfef824eea080278838d8f4f1f0f617cfe47b5d91029910a453e765cd82c29c3b576a90579a453f3a941b6b6175fa922e9a13196"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93679da927ebea46a5f8996fbcb41ba1476306b8185e9784cfd3fab60be6d7447790aae41afa256ed506dae95e698e8dcc0fa26e2618e50e74a83d05bcf51ab890d620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}}, diff --git a/txscript/data/taproot-ref/ad8af6e7441c7a1e3628b69f1ca22b74068a2278 b/txscript/data/taproot-ref/ad8af6e7441c7a1e3628b69f1ca22b74068a2278 new file mode 100644 index 0000000000..536b51eee9 --- /dev/null +++ b/txscript/data/taproot-ref/ad8af6e7441c7a1e3628b69f1ca22b74068a2278 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce7000000003197a88edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cea01000000b341e2960409599100000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6e0000000", "prevouts": ["745348000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987", "f5084c000000000017a9146db815d9819f256ca5d1e70b15558a98689cc52e87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "483045022100dc4a0c1f7116c24b0267bae3735ef4ec04fe060b1f6d55e8cd232c392db401f80220028f4991338f75df258163fa70a9db009594955c8ef0a5c0a16b3649ac74e511914104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "47304402201c3ef58e787111c074aa64c7937924c0b1155bd0992253ea0bba254a2bfbb0ff022070aebb6d8f372d8c4b663071ea6afa00b43368c5f2ae9d18dc618f1479442644914104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/ad9cdf2ad4d35e3f1e5279c581d0394ae2aa6972 b/txscript/data/taproot-ref/ad9cdf2ad4d35e3f1e5279c581d0394ae2aa6972 new file mode 100644 index 0000000000..9db9034296 --- /dev/null +++ b/txscript/data/taproot-ref/ad9cdf2ad4d35e3f1e5279c581d0394ae2aa6972 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6601000000e283ae2e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46f0000000047eb5b7102ce5f95000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787a9020000", "prevouts": ["5f6c5f0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a", "3359380000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e7", "final": true, "success": {"scriptSig": "", "witness": ["1aa95253650cc6d00a356588dd7da7ad3c29b203f2fdcf5a6d4de877c86da7e9e8ac7bc37a62561e1aa29ebbac1f18727b3a450ed56b7a80b0b6d2d784941b6d81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["df05766cc097f87d57410e983792f6d30a26c2826ec54429c66c18e4f06c78c8e34cbb0bb7305a27314f3367022214517487177d0e352b55b2542bfb9f33225ae7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ada6178e8321efd51626a855bc6e5557d68ca3fa b/txscript/data/taproot-ref/ada6178e8321efd51626a855bc6e5557d68ca3fa new file mode 100644 index 0000000000..c777b7225b --- /dev/null +++ b/txscript/data/taproot-ref/ada6178e8321efd51626a855bc6e5557d68ca3fa @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfeb0000000068aa1af660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c0000000003ed329820294e97f00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48725bbbd2a", "prevouts": ["f0006f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "da2e1300000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_4f", "final": true, "success": {"scriptSig": "", "witness": ["51f2527e40f3c83d875e342791e5296256ff69e845f8b18d97625782c0af94569a38aeab1ce7071a24bb4016880bce1da4c5d26de354f211e2b35a9fa131d8f6", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["41b2d8cc2138842cedc7d45cb864c1005bbb1cb097d5eb3de46e6317324293e56cddd227fea706548bbf66400a2f7b32d0dd31f015fa97fc1951ec5410f313444f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/add98ecf3dbbc875a84ca24db0f18c054af38335 b/txscript/data/taproot-ref/add98ecf3dbbc875a84ca24db0f18c054af38335 new file mode 100644 index 0000000000..eaf588e8ec --- /dev/null +++ b/txscript/data/taproot-ref/add98ecf3dbbc875a84ca24db0f18c054af38335 @@ -0,0 +1 @@ +{"tx": "007958d602dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9e010000000160a5b4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2302000000b9f715cc01b1a3b900000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a5020000", "prevouts": ["8ce35f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "47386e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_11", "final": true, "success": {"scriptSig": "", "witness": ["3b5d6864aa8b433301841fc85ddbcf12ebb46b666238eb0b881222149f7d4dd5ecc0f416bb1e1abc3971ca0cd951af99ce876f5a95fab1dbaf84fe06464aced982"]}, "failure": {"scriptSig": "", "witness": ["5358641b54d1ac74d8e48e6e15852693d4ddb9e024818b3d2811c9f082f0a380f2bc49f761b727fd1e0450912cd5c0fe81f243c703f85f401c2d458686f60a7511"]}}, diff --git a/txscript/data/taproot-ref/ade2c248d7512985cd0840191f643e986e49db2e b/txscript/data/taproot-ref/ade2c248d7512985cd0840191f643e986e49db2e new file mode 100644 index 0000000000..a2f39c073c --- /dev/null +++ b/txscript/data/taproot-ref/ade2c248d7512985cd0840191f643e986e49db2e @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa200000000fb3d70f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49f010000007d25f0a80274e4bc00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8783ce9f30", "prevouts": ["3ff27c000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679", "638142000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fd", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082380f015d033fe7faead4766c682a770029d5c79030785f2d26c440da4ef071fea3aa70c847d82166fa4c32b27cb78dba1a5c77b2d4b8269442df723c9129fb762c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367abd407fa50d9a42f4099c8eac0d1d23fd0b10ba46053f4def08af2f64e6c099e0a7be32fdcca7a506e9ce249f658cc089bc7a3d23614d55e872a83e7956fea4416efa3a61de7db58e4e5b27e55eab88df01883130071a88e8c07ccbf4e37c61"]}}, diff --git a/txscript/data/taproot-ref/aded7ddfdd7ffa25f49bad4502033ca4a8591786 b/txscript/data/taproot-ref/aded7ddfdd7ffa25f49bad4502033ca4a8591786 new file mode 100644 index 0000000000..5802a78b65 --- /dev/null +++ b/txscript/data/taproot-ref/aded7ddfdd7ffa25f49bad4502033ca4a8591786 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40e00000000fb7b46b8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb201000000c6e24f480102291f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1932c947", "prevouts": ["d42f3f000000000017a914a2a8d85df2f20a0aaff7224012fc4cee13e29cb987", "219e2000000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "b47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd7e736a60655dc533a38837433a3a305c9a2d5b0314030c91796018120c3e9a44"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fad5b4f8de6a475e1475ecf0ed158bd12476ce010b28dce6527e02a32226fe48562e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd7e736a60655dc533a38837433a3a305c9a2d5b0314030c91796018120c3e9a44"]}}, diff --git a/txscript/data/taproot-ref/adf617416382c5deb595144ff94dce09117c3181 b/txscript/data/taproot-ref/adf617416382c5deb595144ff94dce09117c3181 new file mode 100644 index 0000000000..099795dee0 --- /dev/null +++ b/txscript/data/taproot-ref/adf617416382c5deb595144ff94dce09117c3181 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c60000000077e8b85d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e6000000009e49a865016e35600000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb9000000", "prevouts": ["2580370000000000235e212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "0ca03a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_8b", "final": true, "success": {"scriptSig": "", "witness": ["cf64ee3a79e442811f63b0ffe23daef785a9ecdb87cf959732eb729e831c4655faa61e8523d42834c141936cd0335f189bfea17fe510969612697f84875633a5"]}, "failure": {"scriptSig": "", "witness": ["8a0d36835b26f9d683f3d9c19b3d4eeab7dd4d637e2a3638c71f10745d71bcd3e2f5ff33ee2e9b226970d0d07930cf49ca4aaedcfd90816e50fe0af79389e3168a"]}}, diff --git a/txscript/data/taproot-ref/adfe9ae4df4e249a66eb91fd2f8b26ee063e6f76 b/txscript/data/taproot-ref/adfe9ae4df4e249a66eb91fd2f8b26ee063e6f76 new file mode 100644 index 0000000000..c34c764670 --- /dev/null +++ b/txscript/data/taproot-ref/adfe9ae4df4e249a66eb91fd2f8b26ee063e6f76 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c00100000051c121fa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703b00000000d8839a9a038a522100000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874c59263f", "prevouts": ["e94a12000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "eafe1000000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "3b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a1daf2fbdc5eba8a219f1f8635fe45cf0e30925345452464a53096773d109ba7ef84fce916674b46359d0327d7b56c183d26d6053da1b16053a1f90da8a1d4e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369517bd2ec6e222f593b12487f5a7b1eaee696b6e0fbcce419bd0b390383a361246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fafc7fa9328de6285e10958c6b3d6f5d3c073b4c582e31cb42904dcf82d4bed78a29f15cefa9911251712bcf83078e1db490f7db40c14a26e0e577f39f7cfaf11f"]}}, diff --git a/txscript/data/taproot-ref/ae32aa63248b35fca6503c67fb4fd2acf15a98ad b/txscript/data/taproot-ref/ae32aa63248b35fca6503c67fb4fd2acf15a98ad new file mode 100644 index 0000000000..4b8b291a89 --- /dev/null +++ b/txscript/data/taproot-ref/ae32aa63248b35fca6503c67fb4fd2acf15a98ad @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc400000000722b13ffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1101000000ea73819702fc8940000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f872fbbd44a", "prevouts": ["04a720000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "b70022000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090255a68059051d49dc036a91ceae241a396273c034f022db6a818141bf265dc30c5201cb46753304681691b9649f09da7741a7b64c377e606fb3856414454f237ecadadac897ba1fc4b311aa512b072fe017e284a2890e2496dac58d38f87105bdefc99d683fb855f817d799b305d9b16884b20d0d38dd1ad8ed26f885533b19a0fc60a17da9a28bee8ec2836d2ef863fce90fc5e892dbb95d9e75ebe39de2568b6aa42c26140a779198ecca7bea5cbe76f87ff0d508e6b81e7c21cbf275526ae9a1d2036d1e3ec75ceb5874c5c2566d614224d944ffe7fe9ed70e9ab34c04f186861021e4d43f2010e0bf7865491c460cf014dbb672dbd60984f30bd7441f48eb5c9a14dde7c48925034fe695622ffe1939929c06357f1d9543b449f2624258c4c7356d987120e3e2bd149a41000202e6c96eb12be79e085762ffff999a96a03609e6387abddca33e4699f3470ed89d55a68c3be9690f50ff10d119b316d81163d2c0aa6151c66e1571e3934fc44257e996f4aed98683f43efadf64d039c8a0ba36ed3feeb6ac2ca131c344aa4faef408e4133cacc2101c354e17fc6c90fdde4122aefc8b4db4906ba621cfda6c80dc9bb27978127e0ee088522436cbf1cfb0e53e161dbc0360e60d20047ec17ebdf1b2e2098e08f9d57c0d35c434647fafaf33be22884bd403059003e627e72e9942afb2cd0a76f5d4a245fbd46c8f7da8ccb52465774f7635bd211275fd", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6f6cfa678e6eb5d7c16d1e165dff8cc02eb6f9167a730e645b4ae310f8d0f8feaef31cbfe48887fad20fb93d6cf3134c2cce06fe301c1f80fb34276495816473effc93d9a59775ec6af4eadc6f66e855123af6e736654ec63572366f38b17272c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}, "failure": {"scriptSig": "", "witness": ["4d0902320bd827e6f25766fbb1643379276937e6ba22a5479e7f7ee5a2a62c12daf809326a5c1cd95a8377784ca82184e72ca5d80324d673d8cd14d377f3731a59b5120fe4f94c096eef8a217cbc9491a47d0e16db08b50326954b1c47fd6cad8db16547c520d10be8850430302a25b54aca05b69d86f1012258a7357d541d0ac3b7f14ae5e7aa4cff2ee59abe7308a166d54692f84e78fa4e735a054a570410c2f7517444008bf5581761801bd93fc3a32c00d2087792f0bced0098fe0505549310bb449450f45f500b3f7601c118ccc3864fdb35ee06004ac141019fd21a21a4c2db18be26840e267f066016cff913a31931240896195d0e1662a0f0f335c8e864cdc97c2f4bb18eab43888c4935b89def484de71b370e8644c2d290698e8071656b88f6ad173268780c6eed6d034c055c2c772e5260bd44693f98cbe8b182b915c1dd50ef469637b5293f73c696aa0edf86c62729f158e32304a27ed0af0317e2d88135f44fd8292b45f12285a76e040574efffb387b75f7466ee3f98a066b0249c0b4db882b5dd8956400ee89656c363b8b0f116b94d80576711c3d8134f6475f3511a1d7bfae37b31fc3a22412ed184c2d85d6241e2f0a97e6ef8b04bc81f028a06f4128db6fc57397ccf2ea40b32ba1593b52e4121986cbf415d9e98e6537bf876bf78a516ffbfb04e739cfb3c04c1e021240d62fae3e9f4c14bb9e4c798d105394d8e6bbebb82b00d7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93639d1288aac8e3de47a92a81d83162e567702fa83ce81d1d7859f59a963fb0a5beaef31cbfe48887fad20fb93d6cf3134c2cce06fe301c1f80fb34276495816473effc93d9a59775ec6af4eadc6f66e855123af6e736654ec63572366f38b17272c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}}, diff --git a/txscript/data/taproot-ref/ae87ecd86f7053ab8d71a8f1fc84c2d2c62b472b b/txscript/data/taproot-ref/ae87ecd86f7053ab8d71a8f1fc84c2d2c62b472b new file mode 100644 index 0000000000..e7f9f6050b --- /dev/null +++ b/txscript/data/taproot-ref/ae87ecd86f7053ab8d71a8f1fc84c2d2c62b472b @@ -0,0 +1 @@ +{"tx": "ddd1479b0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702c010000000c199496bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfca01000000ce7dd895015e5252000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67e020000", "prevouts": ["67df110000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "ce3d7e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ad", "final": true, "success": {"scriptSig": "", "witness": ["052a73ca708259b3bb65de74ce0515e7e734dfd1339562a3812ccecdeeb095a984282b16d81ff7add38ab390de4607eb3034eb9ab6f4d70b93289b972533a91601", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0f8931209156bc3f0ee8b5ac577dcfe8d80b7ec008817e6ecd5de0b6e3e36efc5095c83f795e94962897556aab4651fbc5b68067ff269dda82d8345b8cb8545dad", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ae887143b966f102e6e5967f76ea3c041af92e65 b/txscript/data/taproot-ref/ae887143b966f102e6e5967f76ea3c041af92e65 new file mode 100644 index 0000000000..0c49465ffd --- /dev/null +++ b/txscript/data/taproot-ref/ae887143b966f102e6e5967f76ea3c041af92e65 @@ -0,0 +1 @@ +{"tx": "7c5fc7c8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cd0100000043a3c7eedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0f00000000209d439903a82a8c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e763020000", "prevouts": ["4cba380000000000165c142540f27e90740933c99d4f17ab2dfc6c82951cfb", "d2fc540000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "6b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8a2960a95becb1bbbe0636e0493c58f712af9b8da417013d797bf12c130ac56070886d9e3726a9aa8a2b94454683b5181a970edd894e0d0cd75aad09f75436b2"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e85c9148ab8fb2f0e3b60c30486bc2998c5a9fcff153a4260746061263c245b36a70886d9e3726a9aa8a2b94454683b5181a970edd894e0d0cd75aad09f75436b2"]}}, diff --git a/txscript/data/taproot-ref/aea2776fad1a4341ceaff3aa6cf21d9c37587a96 b/txscript/data/taproot-ref/aea2776fad1a4341ceaff3aa6cf21d9c37587a96 new file mode 100644 index 0000000000..1536bb4084 --- /dev/null +++ b/txscript/data/taproot-ref/aea2776fad1a4341ceaff3aa6cf21d9c37587a96 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6400000000d6c56a950144091e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf3010000", "prevouts": ["53272400000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "", "witness": ["3045022100e9e465b25b90ec4eae268ef097fb812ce90072ac31c7776933d00f87ccc3f12902206810ed43604b92f161ddee0e83dbbe0e744a39104b412b51700cf83ee01df40e81", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["3045022100d9a904875514a7aa3e65f5a9d3352506fb833af39f699af134638e442793aaa30220507ca95fdf22ed259e4735b46cc6aee4cd83fe6b3edc21e565430d2b47ea4a8d81", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/aeabf0753dee7e4de87a4ffe6e1414931333b32a b/txscript/data/taproot-ref/aeabf0753dee7e4de87a4ffe6e1414931333b32a new file mode 100644 index 0000000000..c6d1d3e6a4 --- /dev/null +++ b/txscript/data/taproot-ref/aeabf0753dee7e4de87a4ffe6e1414931333b32a @@ -0,0 +1 @@ +{"tx": "8bbbb434028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f7010000001a4f028560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a5010000007c0d8cd903a9a243000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc79e010000", "prevouts": ["bcb73500000000002251201aac33169e9e7c3154d6a008d33b220a63d8a9ebf4646c8ee915f75ae7529b5f", "7f111000000000002254202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_1", "success": {"scriptSig": "", "witness": ["d2f9ec4434fc2ac4979f7c04e488493ee4ea63447b7ef13a368a98518994a09256a7f90bdda1dffcf99431017cbd3b64005e647ca38c1a5f20c2829a59ff0b8d", "9dea30801666942bc30596a757b6eee144dfd44d4c2fa2b4471d057e67f6cfe38909b4b9c2bc868c14ace2c9b5be461ec6ade41dee10002b767c43ddb633baffdfdf4a3b6df3d8069cc2a57155a738abe04e94623cdac78fb96cf500bf09aa551e7906323cba85c438510d0049f947176fb882854178c62fa905bff7a383111004eca216edc79741f93dbd6ec96799cf1282960d7798bd20376ae8ab15ad3609171f0170f27e527d494ddaf368d75e37f0dfe153be1c3d7fe30e4079f5507694ea5900acfefaf1aa478cdfd5", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c7bac8717a1f08a6b77c9fbb718269890891be6758928f5cb3459153ae0de08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000830922897e89e68c07e04de6d130a27a5a951f6b1aea2d24f385224743fe4c81ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff694a2fed14c09c6754383f2742dfe418030d1e2c2b2d9cadf387b2a0b16a674cbfc87899f716171e154af0bccbf57f58c200423513fd20280e4271c015ce23d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0764280133642a0ed4b654cc75dfadf1e378ce8acdcbe1f4a0f7a47f7d20191c0efc8634b965b6826569b65bbffd03219f5c4d8456855a0953aedfad181fda86acd927010d9a5ae3a537588717dfae67083c7634f11bb0d744d4721be4cb0020ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffded0dcf006e86da3002739810e9ad712096942420be48d9757cd65133947cc3bcd0d4f9505d2e403cffef6a6039352eddbf9a714198b1bfa01d247685e1772482d1417f69a2838888e3a6dd70ac5912ee50ff90eb582cda45050b26021e94bfc0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fcdf3e831ff2a692396b71aeceaa5752edf7d64553043662bdb2d035fb6f12effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a1ef1c2c5ab25bc5f00c54aa521540a4bc5a22373dd3145d69f7b626b451135f26739ad8b291a182ebf937d453bffaf5086c66dbd78a4243f5b0af19440d010062781e17adece575d184c126c5da260c183814a1f67c6a33283d2fba36defc93cc2de204cb8a81ef1684806085128d0ce219fdc369074a7dc46fbdda93dab33200000000000000000000000000000000000000000000000000000000000000003a87f62c494f2a95168b096362df7318617c6cb887ad731b45580133eed928454594baebe8131bde06413f226e83bb09c3151fda212ed80d12bee7005552e1a1217f6beed3ebf104cc984d6e6da46579dd5abd1429d4d2f47aca227449caeb7efbd6af6b3c830949083609f210edf4ec0010a880f769894781ee19f6adb76794e00f658893eedf5989891add29f45acfe46abab84de632ecce600a81f7679979ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa85a8a68199b26ce7c96d456241b7d90151eb88ab81514a583104294333511af701c01f1e0d14775ed14889ed08edd4ff91ff3f0e0fdbf97d8de74ccce18be1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045fb260a6bc61047b69ef16e0cc4bb8ee88d9aeae61c1a066039634dea89385dc54d401b29ad7fdac3595fec3fd4df95bed63a5a08c9d98d8e153add63b22a2a0000000000000000000000000000000000000000000000000000000000000000b235ad0219ada7c0df38535235f11fa8135fa1542de32c2085f2897fdf4955ceffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68725897865e09ad9e12163864a1fdc5a83a32b6c064f95c1c8a9a36a897f7db75cc6f29cf10b949d2cc7cb57622633bc213ea5e692ce3d44657d8c5c707c5ba31b43609c459b7b7901f80f51492bc95378fb3f51f4333f40890d02bf8835b8292c971f13f0e411919275c65512e9c41d69d3146f117cac27a17ca58231b69b30524b4ded2a7a7bb414a6358cf90604f43cd149d2ee54f056f74e93731c4e526e4344c442186c15590dab0b903a653a642f61d736b49f9482ec326949b95d911000000000000000000000000000000000000000000000000000000000000000095710be98c313fc8abfe4dbe5e065e2e4c224318d84f1d0db7c7c3096588aeff9ff0b86d8a356851e3ee9cb426803a2b8ba4eed715f6804f35175197f9887261a569e2ef4d3895e1a175463355399ec2cd499b34c4977fccb1eb2faa5ac1effc61847e55807b96fe13424e8c3436e556c18ec0bff5018646dd1187dc4baf8afa39e6897e52e177ccd3cda3515910c5a85e4cf5360d6a6a91df37cd69e6c474f1057f7a6dff52f81da94d713d78d8e2a7302de7af2a79eaf7dea0841eb2eb46f431791a44b0a9f0111d1748d1b61a8e0359989ee9d0ff21d3b86129d7211f658c51446878c7085bf068c96163382f5d1e38130a4cf5390fe250df3257ed33f6a073f59ee9a2f14d32e113351088b0fe1afe58ad0c33793836685ef598c5b421780fe98e94eaa9bd32f02ad5d46c507f9d47d4e5df03244f5162f84934b75e6cd8f6525ca88eb66d3294a6b8d93267d4765ffb34ae1aeaa56683eca4eed616eefd625e750326639c16c7742950cea1f7d372481df0a88a1bbe8b8f0514d20d379fcf0c142b16cc6ab3cd60840e65406333199e12f456259f1390a1a79e87cf247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828e7d646be89df0357092d4bd543bdd6a111a6b61aae0450bf922173932ba59b39c19407a62e4a2e22f818da2908bfd56a6f51ea96e1de5d81b178866d230f2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}, "failure": {"scriptSig": "", "witness": ["d2f9ec4434fc2ac4979f7c04e488493ee4ea63447b7ef13a368a98518994a09256a7f90bdda1dffcf99431017cbd3b64005e647ca38c1a5f20c2829a59ff0b8d", "272f7a1f236902cd20ad291a7a6a076cc603fd2200d9162b36bee2ec618f823f4bb6fb0dc87fa61339e1e22da3d3d8a2868e0a921807fa3564fb3b003046fa3484ee876a0bbecfa359eadcb1918946604807c53f7581fa1b1736b47270219e1eb26d9cb6dc959825c7684c1572bdb596188e93ce617d02d8a846632712da739246328c451c10d22ace4202a544f85846a75e316f3002620f3e92971db914f251ad86cf5a3fcff9d6961025bdbc4a744d816d28f5ce2e6bb2222c2de6ad04d9343b0ad67b7c7775dd3b7eb4", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2000636ead686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead527cba5387", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c7bac8717a1f08a6b77c9fbb718269890891be6758928f5cb3459153ae0de08ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000830922897e89e68c07e04de6d130a27a5a951f6b1aea2d24f385224743fe4c81ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff694a2fed14c09c6754383f2742dfe418030d1e2c2b2d9cadf387b2a0b16a674cbfc87899f716171e154af0bccbf57f58c200423513fd20280e4271c015ce23d2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0764280133642a0ed4b654cc75dfadf1e378ce8acdcbe1f4a0f7a47f7d20191c0efc8634b965b6826569b65bbffd03219f5c4d8456855a0953aedfad181fda86acd927010d9a5ae3a537588717dfae67083c7634f11bb0d744d4721be4cb0020ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffded0dcf006e86da3002739810e9ad712096942420be48d9757cd65133947cc3bcd0d4f9505d2e403cffef6a6039352eddbf9a714198b1bfa01d247685e1772482d1417f69a2838888e3a6dd70ac5912ee50ff90eb582cda45050b26021e94bfc0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7fcdf3e831ff2a692396b71aeceaa5752edf7d64553043662bdb2d035fb6f12effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a1ef1c2c5ab25bc5f00c54aa521540a4bc5a22373dd3145d69f7b626b451135f26739ad8b291a182ebf937d453bffaf5086c66dbd78a4243f5b0af19440d010062781e17adece575d184c126c5da260c183814a1f67c6a33283d2fba36defc93cc2de204cb8a81ef1684806085128d0ce219fdc369074a7dc46fbdda93dab33200000000000000000000000000000000000000000000000000000000000000003a87f62c494f2a95168b096362df7318617c6cb887ad731b45580133eed928454594baebe8131bde06413f226e83bb09c3151fda212ed80d12bee7005552e1a1217f6beed3ebf104cc984d6e6da46579dd5abd1429d4d2f47aca227449caeb7efbd6af6b3c830949083609f210edf4ec0010a880f769894781ee19f6adb76794e00f658893eedf5989891add29f45acfe46abab84de632ecce600a81f7679979ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa85a8a68199b26ce7c96d456241b7d90151eb88ab81514a583104294333511af701c01f1e0d14775ed14889ed08edd4ff91ff3f0e0fdbf97d8de74ccce18be1c0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000045fb260a6bc61047b69ef16e0cc4bb8ee88d9aeae61c1a066039634dea89385dc54d401b29ad7fdac3595fec3fd4df95bed63a5a08c9d98d8e153add63b22a2a0000000000000000000000000000000000000000000000000000000000000000b235ad0219ada7c0df38535235f11fa8135fa1542de32c2085f2897fdf4955ceffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff68725897865e09ad9e12163864a1fdc5a83a32b6c064f95c1c8a9a36a897f7db75cc6f29cf10b949d2cc7cb57622633bc213ea5e692ce3d44657d8c5c707c5ba31b43609c459b7b7901f80f51492bc95378fb3f51f4333f40890d02bf8835b8292c971f13f0e411919275c65512e9c41d69d3146f117cac27a17ca58231b69b30524b4ded2a7a7bb414a6358cf90604f43cd149d2ee54f056f74e93731c4e526e4344c442186c15590dab0b903a653a642f61d736b49f9482ec326949b95d911000000000000000000000000000000000000000000000000000000000000000095710be98c313fc8abfe4dbe5e065e2e4c224318d84f1d0db7c7c3096588aeff9ff0b86d8a356851e3ee9cb426803a2b8ba4eed715f6804f35175197f9887261a569e2ef4d3895e1a175463355399ec2cd499b34c4977fccb1eb2faa5ac1effc61847e55807b96fe13424e8c3436e556c18ec0bff5018646dd1187dc4baf8afa39e6897e52e177ccd3cda3515910c5a85e4cf5360d6a6a91df37cd69e6c474f1057f7a6dff52f81da94d713d78d8e2a7302de7af2a79eaf7dea0841eb2eb46f431791a44b0a9f0111d1748d1b61a8e0359989ee9d0ff21d3b86129d7211f658c51446878c7085bf068c96163382f5d1e38130a4cf5390fe250df3257ed33f6a073f59ee9a2f14d32e113351088b0fe1afe58ad0c33793836685ef598c5b421780fe98e94eaa9bd32f02ad5d46c507f9d47d4e5df03244f5162f84934b75e6cd8f6525ca88eb66d3294a6b8d93267d4765ffb34ae1aeaa56683eca4eed616eefd625e750326639c16c7742950cea1f7d372481df0a88a1bbe8b8f0514d20d379fcf0c142b16cc6ab3cd60840e65406333199e12f456259f1390a1a79e87cf247fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff828e7d646be89df0357092d4bd543bdd6a111a6b61aae0450bf922173932ba59b39c19407a62e4a2e22f818da2908bfd56a6f51ea96e1de5d81b178866d230f2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}}, diff --git a/txscript/data/taproot-ref/aeaf78544ff09661df34acf0ab140ca8f6834d93 b/txscript/data/taproot-ref/aeaf78544ff09661df34acf0ab140ca8f6834d93 new file mode 100644 index 0000000000..072875a4cd --- /dev/null +++ b/txscript/data/taproot-ref/aeaf78544ff09661df34acf0ab140ca8f6834d93 @@ -0,0 +1 @@ +{"tx": "ec16b2e503bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf71010000001e2984c9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cff01000000d37921d6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9d010000006e9e6c8f0155bb16000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8796000000", "prevouts": ["55bd6700000000002251201b1a5025b4fe9992b0e02773e7f35e6be2fc0ec95e56c0e62f01a84c1b9caac2", "4966600000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2317250000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367bcfe338274b1b9eb3713335acbbd071cce1617cc6f1391b8f2a52678a8c2e0a"]}, "failure": {"scriptSig": "", "witness": ["6ab2616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/aeb2510aa3d77a9c6dcf533982e3925d74a03591 b/txscript/data/taproot-ref/aeb2510aa3d77a9c6dcf533982e3925d74a03591 new file mode 100644 index 0000000000..8eff19ac59 --- /dev/null +++ b/txscript/data/taproot-ref/aeb2510aa3d77a9c6dcf533982e3925d74a03591 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d200000000e2e3d8f2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc5010000003f7b88ba0234cb5c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3c020000", "prevouts": ["62951000000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327", "bbf54e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "447d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8288d1d486ad1cd5e981ede7314b9e0cd98a009052c160e03e008903fffd682c3fa4004b2cd3f2b5519985ef4ce40029d6249627881f39179d9882ffc68f5bb6a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08208f12ff2db60e07951e3ece83f8d4c41d9b16f9cd93bc43e76ab3ca16313aee1430173849036d038bb15ccd29e38ea974083458e0cf50b14971883c73e09395afa4004b2cd3f2b5519985ef4ce40029d6249627881f39179d9882ffc68f5bb6a"]}}, diff --git a/txscript/data/taproot-ref/af3246dfb5ebe1bed3d537e239a99af7422239e7 b/txscript/data/taproot-ref/af3246dfb5ebe1bed3d537e239a99af7422239e7 new file mode 100644 index 0000000000..127ab7fdc5 --- /dev/null +++ b/txscript/data/taproot-ref/af3246dfb5ebe1bed3d537e239a99af7422239e7 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5c0100000075641680bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8a0000000017e471b5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf300000000ac1340c303f3d21d01000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79694c84f5d", "prevouts": ["ad2d7f0000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "7d0e7e0000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6", "9da622000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "eb7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7d98603ca11f2d62da2f097293e2a9fc40838a31eb24ff9d7fe998ee66e0434e58e476735d98d5a1185fd7ff42bb7b31cec58182079010d151d415fc7d6c3e4c2ce937a5de573933a673baa3adefc0607b7a8b345eb0a9388ff089ef522bdd2"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fec5402c57463b820a037283baf958dfe8fa8ff5b14330867ba864fa7bbb305c3f13c9f2c0ba7c3724f3080ca99cfd230291165bf004db5bbadb2403d0b759af84ce21fa65bd655e7fa8dd3695f51b098b96b5173f87464f2936878bf520f49fc2ce937a5de573933a673baa3adefc0607b7a8b345eb0a9388ff089ef522bdd2"]}}, diff --git a/txscript/data/taproot-ref/af39e152ec29cf6ef9124bc09c621887cea05402 b/txscript/data/taproot-ref/af39e152ec29cf6ef9124bc09c621887cea05402 new file mode 100644 index 0000000000..f532828321 --- /dev/null +++ b/txscript/data/taproot-ref/af39e152ec29cf6ef9124bc09c621887cea05402 @@ -0,0 +1 @@ +{"tx": "deb4eb260260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708801000000b89731f8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b360100000085b672c00156510a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a698744740", "prevouts": ["80ad12000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "eebf20000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "3b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93614dfe64472aec633187704e5e239fcd5c5090a7796420cc2de2328e6e5d0b2fdee7dbe7f66d64a980d12157b84c42445cf47ca482a00d5396c717810eb35e86629f15cefa9911251712bcf83078e1db490f7db40c14a26e0e577f39f7cfaf11f"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936617393d62275fdee443a8234280e41d5e175967af62b17afa1af3cdfa9c72adfd450a1526d7659d1d0ab8a304ec78556741ee62c830e21f1e920b63ff49823b3524213bc04a867e2e908d02e9cd05b1befa37bc2f591ad783cb0f6fd2a1a72397ef84fce916674b46359d0327d7b56c183d26d6053da1b16053a1f90da8a1d4e"]}}, diff --git a/txscript/data/taproot-ref/af4d15714a467c338537aaa00108e2bee33e8426 b/txscript/data/taproot-ref/af4d15714a467c338537aaa00108e2bee33e8426 new file mode 100644 index 0000000000..4c8cbad9c9 --- /dev/null +++ b/txscript/data/taproot-ref/af4d15714a467c338537aaa00108e2bee33e8426 @@ -0,0 +1 @@ +{"tx": "4fe15df402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c790100000077a4d0f7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1801000000465f338e022e7dac00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac43000000", "prevouts": ["f92b510000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "5e795d00000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["854c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a8a30cc5f8be195df182d3a0e5016923565d012c99df51a6809fe7dcf26e6445717b4e30a5884e3e55754911c167a338fe4fe766d1d9ad9fb23fde5d0da8b2aeb2a240b376911c9876b3695f79f395ec3f2d97b1695e5c0e7f397f1ed982e79a1b6e729898dfeeff93e2067a7d076aa1bb7914d367b163cafe54fabf88cb14d8"]}, "failure": {"scriptSig": "", "witness": ["4c5285", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936991387851c8cb36895aad31d9483f47fea8c6c064a0164a0cd6e51381ab611551ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045952384bfcd198c969b60204543b8b578741ae3068409132e955e5c7af181f3d3734b3a7050eee065844830ad8d45a710891f78004f5e7f35b8fd72bf3ee94449"]}}, diff --git a/txscript/data/taproot-ref/af58cb52355f4201682a37056445b679070634b3 b/txscript/data/taproot-ref/af58cb52355f4201682a37056445b679070634b3 new file mode 100644 index 0000000000..dd09db0ef2 --- /dev/null +++ b/txscript/data/taproot-ref/af58cb52355f4201682a37056445b679070634b3 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2e0000000021998959dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd701000000289af2e28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49001000000cc78bb2b01117a7000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acc484a04d", "prevouts": ["5bd120000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "0a98200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b4ba39000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_bd", "final": true, "success": {"scriptSig": "", "witness": ["cbf23365cb8880b133d27b3d20c3cccc29fe770e97aafa1521ac972d4c2cb1b607d19e1ad6bc0c00cb86e327fbe7b7eb490bb73be336576ab7c4285b92b7ec0a82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a7f8ce60fca0759d86bd881fbfeac239709c0fc464072faec998076586f156bd383ca59126ba719524d83634bac11d8d770490bbb92df2577ed827ba954861bfbd", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/af5fe2e1f2c809eb47dbe26c8a45e6a55718cce6 b/txscript/data/taproot-ref/af5fe2e1f2c809eb47dbe26c8a45e6a55718cce6 new file mode 100644 index 0000000000..9b93abf83b --- /dev/null +++ b/txscript/data/taproot-ref/af5fe2e1f2c809eb47dbe26c8a45e6a55718cce6 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e000000009ccca0ec8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44301000000298165898bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e700000000f154399c02849c8e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966d030000", "prevouts": ["a9371f000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "49f43300000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85", "fb803d00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "97", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369753cb1a5a2e209ace27a7eb8605f5f7017a5ce229afe5de89ccd0b48219a4f45a7303e26d6b86d2a780c30dbeb7ba87c6a0494b901c3875fb9ca7f2f12bb2fd373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362b9f3130479ebcff49fd970febd3f22cafd2118ccf82fa26a081c98b144e890c088456232115bcc24dec0b5a24cea45f7d15fc3427ff6cd91fcf5dc3f7efaf083288455e3867d2ff7594cc417650f42f79f93c98aaa5c5ef25eb3554c8bf2ec6282285524a15c732567d099967405d35f7136f74f48f011bc4ab279ad8d14f14"]}}, diff --git a/txscript/data/taproot-ref/af7648fbe02efa3d9188b9b61ce6422012612477 b/txscript/data/taproot-ref/af7648fbe02efa3d9188b9b61ce6422012612477 new file mode 100644 index 0000000000..68493b9e3f --- /dev/null +++ b/txscript/data/taproot-ref/af7648fbe02efa3d9188b9b61ce6422012612477 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc701000000c9ec5c9303ea284700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acfa60e623", "prevouts": ["70d2490000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_df", "final": true, "success": {"scriptSig": "", "witness": ["35dc529b40db63194d9535aec01fa52120529785c86f0de6ddcd00d518c37e6a2a250b192ac880acdf33caba9bc2faf5426d9f0edf9625043ec863f6a92437c902"]}, "failure": {"scriptSig": "", "witness": ["670b1bc7c74622e6f1bf0ab98abe803b48a381cb70eda81e44f36308e73cd7eabc17c358501e8bab93d976bc68da1bfdd6675e6bfa1b567ff6865d3fe2e655f8df"]}}, diff --git a/txscript/data/taproot-ref/afa5c3718b0a518cee419488c60f2f2741ba28ff b/txscript/data/taproot-ref/afa5c3718b0a518cee419488c60f2f2741ba28ff new file mode 100644 index 0000000000..e3c83fe697 --- /dev/null +++ b/txscript/data/taproot-ref/afa5c3718b0a518cee419488c60f2f2741ba28ff @@ -0,0 +1 @@ +{"tx": "73092d65038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46c000000004658eea8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa401000000a7b39fe5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c450100000060837bf002397b12010000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a60fdfb23c", "prevouts": ["afe43a0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "7ec5840000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee20550000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "697d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0827bbe6274b0dcd2777fc9b1075bd65318fdd52335751f1d5034a6ddc9c2a447578de3449b5e2c621283b68ab187cecafc7aa77a8721601b5317d3484f84536019"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b7af11fbeeafa2e26d6ced4a592e7faf61316ffa4728fe11920bc0a66ec98491cb7a7ab5fd71851d574a9c26887a3027e1173994a10fb9074a9680b95d402bf38dbbed29828226c3a1e74b431b518dca4e99f1ee054f76cd9b7bd5529b5cc8688de3449b5e2c621283b68ab187cecafc7aa77a8721601b5317d3484f84536019"]}}, diff --git a/txscript/data/taproot-ref/afb161887b4215368f593a2d8d8b6bc32170698d b/txscript/data/taproot-ref/afb161887b4215368f593a2d8d8b6bc32170698d new file mode 100644 index 0000000000..89e0d53357 --- /dev/null +++ b/txscript/data/taproot-ref/afb161887b4215368f593a2d8d8b6bc32170698d @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff0000000009808edabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba601000000851525c48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47701000000859dffb10302a2e2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374871878ff56", "prevouts": ["74b9810000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "6309280000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "0ace3b000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902e8e2a3911e1bff2fa3c4af1bc21243f6a834f260cf8a45deb24e4dcea3a99066e2307133f37cbbfe293ea141cadd9a4dd6438bc8da73ae0a01d8d901734469bed1bba87eb66086cf67e2aa9090726ff8a65d448a45ec5afde73e2b01c7a7d6fc0933d7cbcf0b39a6ceb0a67b693dcf784cd711b7bb15972b8a86470a75b9adf05308a078bdc3619b5ef299b0e4bd26b571dc77c8364f588f0b2489610ff0ee96b2a13a56eedae4f4d1490054746f610a2b419d1a6b49e53507e2ec7d3292e4d368b89f9cc2849592fe253c18a92385d93032157aa51d3305f0849bb3ab936076d03650b590b720851e18ecb026c399d835546cc9f4b4438d56d2cde0e08fb04a4815197b6175917310348930121ac7922edc1076068a6dec8186fbb9fb643b91589d4db8fbed751c5e1fc51faf53b606ed49d1556556ea55ae538e4de6881c59f693d8a4dc682a4ac513f7d1bb540334d075356b12b102ce9e6f69a3407fb34fda3ff05be62e0d753a00308b365906892b7b4b8c071b00ff331aee88c3ffc0e83e7c7d6d1eb522ff9258de018918c127a9704314652711d12773f6d9cd56907c0f1cbbe23d435e5ce1d1a68e141e91147d85c3f03eb7c13857033c2208fca3c666e00e1f639ce0707a2c392d54561f3f9bc926fc64fa1feff8324737870e45e912bd4e713dd23a47e7109abcc6eff986b24748ee27353e918b775a84ab599a9a4aa3220d3fbf77d91f75f3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d364ae2d506c0e3a74220f01cc1ba6cfccc161ccd59a1bbc3e0ce3e51240b4b1e8db2f81248ad9ed5128a6abc5bb92ba3aeb558dfcb95d0b55c9fe030b8e1ae1c9fc6c767d5aa72b6a61d813f4dedd67fc97d91e71acf86e276ab6f41d1da0fa8c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}, "failure": {"scriptSig": "", "witness": ["4d0902633fd27b06bc6bbd5d48e8427495c63be19e420b0fef59f0913ef0c5e5b601b1ff61677cd840af631165ff3bec87362c2d593b4144b5f8b45ca087d173f116b4b62310952f06a057d3154818a2ce6209a4afde69e73962ef6fd9fe6c0857be663eb4e8978d463b20f33f08c4238fd124f2261df2d644ac6bd8277ce3963c88c415140bd655841eb4be252a74158fc8c3f3ede1a5cd650dc5b9979700bf08ec0c481f5df6002b2b728a5db9bde5d5816d895d1ea5714e7ea8535cc09082f22d5b84ade610d0d60a1463221ee67cea6deae01775d13cfc1d3f77029578c89d34f1c6c2e9d25bdca41fd18dd6153bfaa55afc087bf9d436e3b7f4a9d8e15433b225bae863a53403f985a88ca2e22a0efb61fe741e8884e0bac9db99baa711eaf780a5efd3e0660442aea3bd8b9d34e860ee021a95a0b762fe2d739cae6456695c503c481ccec8f584c36547d96016a5b42c0c91ba1c469ef3d6d3ce349586daa13ea1dfe7f92f49e141f188896b8e6aa3b2383aec26206123651a28e301b6756b78b8a31047453f27a7e7e533510f919cade4ef6e4918c065ebf6e427c4389b00065e3cb6844657ac0b29ed017a7b2b2af12c3ef03668914de2ec0813283cab255b3dcfc171be041fa8009d2c91d4197d7d5942ca46b1f0657de6441693ac7300d7bab75eb526c0b686fa449614aeb23af4bf481897024eebfbe4b2b86b51c658d5137cd017770f6f90a87561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082c145688b3898d8a1374847539a36067c996b07f78d82debe95e7e288000a7bb1b9cd72275efe6b477d9cf0b54cc21959221ed58300fa90def59e56d53bf5ae178c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}}, diff --git a/txscript/data/taproot-ref/afb93dea86c318802ea31536847bc3786c8bb47c b/txscript/data/taproot-ref/afb93dea86c318802ea31536847bc3786c8bb47c new file mode 100644 index 0000000000..7f624d8f79 --- /dev/null +++ b/txscript/data/taproot-ref/afb93dea86c318802ea31536847bc3786c8bb47c @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9500000000d03e1c89bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd101000000992df1f804e162e200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac708d0a37", "prevouts": ["a310810000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba", "b1dc620000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a767488fe42262d771f95d10749b7596819dd0a85061a1366a23d9cec3529dbf37f8d6a4384f014fca2d3cdbb6112c7d6167187a43622fb7ab70c92b59ba97398cf3dcdb1aca371f721e0e3bf2b2651b51ce3ba34aca28f0f47f34a6674cf0fb6779b1e291bab0968202ad270cf91a37e8e31cb960dc611520cdaec411dbef0bb438b99b0a7baca4c5e023deb9dfa7f55f0d7c88254219d1d3c98dfe892bfc8f8324df57a3e5b194b205a3c7f8aa1cab1620a3fdc223fafd171ecb77cce8d929758597b5c0dedc9d4f406ea14d44e0aba6bacf906745e14634ba22c2d6adecc5adff9ab3378b04fd87f3178620c97c49e5a7d9a10dc4fbdec708826d17697df6c6ca981815440ad0e511f84ea6a59a12b1df196226cf591713eb0cabb7b00f4f1d4f40f607eb6a7c507e1ac6fa066076680ebb59ec4c99338001e72ef655f1f099e7a090b31e95872c696e526e62b2c5954af635d44740a1da0cd4652e3ab75129698ec2953d332e3b3e36aa9dec875973cab9f403c6645a5b24909c576b715ef36f0e0fb57360f5055aacb7d71a55cb29abe039a297828208198f2978d0590d3a38d01219c3899d2c539c990df2530622775473b7f0ba933b387801ddcdbbe9d392ed7df4f0289a986b6563976f98dab72bfd3d8d9759606cc298b7c4201a300f0fc18e6f9f98bd3fbedfaf70f77889e4921d85798eb8203cdbbca8ea0814f2f4db802ffaf752968775", "c87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366ecdbb67ef0066ec076e429fc04f46dda670ca9551cd024f28a867117fd70946da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e65775dfb1ab8912d99abba269b246de78dce1dfa6fdc8b38f44f7be80bcbeb76c308d8e78b0cea59e70bbcac5990a047bb63a968328232757672e5e931dda055"]}, "failure": {"scriptSig": "", "witness": ["4d090250fd27dab27acfa32f56d759b2189bb517126d1d58cdae68b0d3a6d7ebd46d0401a1e864699a0916fb10b127258ee5ad4577d7fc38f477e1eff0b6e61675f7b576d1249f26b5d5b50e72d298952ee6b9242e8657beb8d5a1ba10b864a1acd35f0ed833a3a500dc64df8bfe02c80109926344fa28e37118551fe5736ac39032695e7e2b97b02a1b857ca030c63c22870af71119aa9ad4a47fa96c61224c0de063824b48c7de543b5ba08ed42f6eb663781b0745ec17cce9ce5c9a63ea2d6508716db7ecbd1d857e70f7c5b734b6b60f8c017a415b107bb6cc4029a29eb85517ccfeb60e05ed10a1c589050b5ceaaaad33620ea9b3a58f5d8d163776c9a4082cbcd80db648d6ece66990f3a771a94d353c88312e76a045809364c60a73a3b90ddc68d7d04204139ff38be71298dd3331e4738ed805f3d9ed877897a169ad30b59bb834029c4dcd1913f2526755edbd6b4d23ad63e53dabcc96c3de8c0bdcd9a2f41da0e14058b9831d65964caf40a85f1ae005d1162eac570ef6b3f6e391b345accb4e4390e54b1212c44da9e5c3ba8c4905054e719326b653166bcc856588902aba38e792149b7bba8e1d9d23cc2b38d197178911f79ee7b8bc6c0c155e0e3f24b049ff779c8f960b2e36730757b3f9cb8a5c9392de83fcf56b5d845724f7d41486e3e0f92da3189c0f56d43cbb55b439af9dc8f06f18811849d40fa6914d4bc1e8ef06bef75c48e48875", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c0a8280b2b2a3355b689f18819ebbf93b19ad428a3d20831a21570336086a5905323990ac9ba96640afb66df99f25054f5788ad16157a03b33c6c26a70bd925e21136d3d9ecdf371b2101a7e86edb56e15b10ef185a8506988239bb2b5a4c43e"]}}, diff --git a/txscript/data/taproot-ref/afcc94478400491055613ccd42f75d4fa9c1ceab b/txscript/data/taproot-ref/afcc94478400491055613ccd42f75d4fa9c1ceab new file mode 100644 index 0000000000..a982f29e0e --- /dev/null +++ b/txscript/data/taproot-ref/afcc94478400491055613ccd42f75d4fa9c1ceab @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf500100000025b6048bdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf0010000009bc157c302da139300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d8000000", "prevouts": ["923e720000000000225120279eabb29e123e29b3e35f5f3a43ff6342d7d66d04195fa790bd9d720ea8f0a0", "4a6f230000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["83", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936777ff8a9412e94f7b77cdcac9df137438df90b973affcaf29cb29560429bcc3e8ed6c904d531fc0d19ced9482d4cbb64035dc55104164ba190923612d3f9e9a82b9d1447cbfb5d72d5da72ac5ad193469eaa6b44c038aa23e2a9d2dd480586adaf3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93683933d45c3442f615ee20a7137db960cea3b9cd87b48587a4de9c490e5a6c9c899aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb439b32d44b6ff86c799acdff23ced11a294722ef2b8af6951bf8429e3bda52b31af3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}}, diff --git a/txscript/data/taproot-ref/afea0adf1a155b6acd7f6a1aac9dcfd781f953f1 b/txscript/data/taproot-ref/afea0adf1a155b6acd7f6a1aac9dcfd781f953f1 new file mode 100644 index 0000000000..aa37ed8a1f --- /dev/null +++ b/txscript/data/taproot-ref/afea0adf1a155b6acd7f6a1aac9dcfd781f953f1 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1d00000000065a48888bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f300000000cb7a9eb304fff3a800000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac0c020000", "prevouts": ["f03a7100000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "75223a0000000000225120cf3d4a21d95f409285a815c665903ee1793a8187aefd3a8003cd262b63069349"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000089", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936918449c1f1d7e2aefbe78c65a77cf74e4228164403355e620ea48ba4f143fa01b90b3e537e0a498718b42d83f823725a04b39327b9237d74ba7af037a7c89be8bd8f71710e2f4773b226617f0b144a9d046788db13e8347a383f909c13421323cf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0825f4861bfb2a6452ac4a4804b2c6a2c641047e4f139d9501cd1bf471f8e5b3ea6913d98effacbdfffd2adbbf71932929e08e9cbcb7e06a345b8d84d9192524cd99d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}}, diff --git a/txscript/data/taproot-ref/b0225ebc20fa76a5b5efb83881756503681565fa b/txscript/data/taproot-ref/b0225ebc20fa76a5b5efb83881756503681565fa new file mode 100644 index 0000000000..207afaf20b --- /dev/null +++ b/txscript/data/taproot-ref/b0225ebc20fa76a5b5efb83881756503681565fa @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1701000000233e40828bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c407000000004acef7c7044c5ca200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72614dd3a", "prevouts": ["a8956b0000000000225a202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "ca23390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_52", "final": true, "success": {"scriptSig": "", "witness": ["02938847ff632f0f0c15c9da24e9f4861811b6531ee8af7c9e02f39ad63ef28c10cad94e45d7e63ada960257dac7134e318c5fc4e3631d9ac5cab2fd1104c8a4", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["73932d62aa9804ec33dce96cc8d8cd7584c04c5a33c2622c295f30a583122cf80cf93ba581f052ef81a337da361eb6b1c1de6e1cfc8da709e8c30d9851609ee552", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b02921b398ef06202f6f3b3f652c3c8f10888607 b/txscript/data/taproot-ref/b02921b398ef06202f6f3b3f652c3c8f10888607 new file mode 100644 index 0000000000..4f1f905678 --- /dev/null +++ b/txscript/data/taproot-ref/b02921b398ef06202f6f3b3f652c3c8f10888607 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c409000000009364ac4260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ac01000000ed34be6e039fbf50000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709310e52", "prevouts": ["e41f420000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f4301000000000002251205fbb8ac28e580fb39d87ab9ecacdc52316773607abc8ac10a5707b0a5a311000"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_35", "final": true, "success": {"scriptSig": "", "witness": ["4489f55740956045636f25efa0cbe6e85b2c8ee4d441897964459e3cd03f05acb364cf48b8ada980762c69be6321049428d0df54f118b99f1b835aafb9af4b3402", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ec20d8ad8daa4cc44419b71add25a720ba43571d629c871e26a246cf9b160e5f6a0fc2fa687cea0778b0a1ac915f06cba52040d8eb94ea040e0029b3af0e266335", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b068dde987664207f704c5b73a6444bd16d46da8 b/txscript/data/taproot-ref/b068dde987664207f704c5b73a6444bd16d46da8 new file mode 100644 index 0000000000..cf56f72a5f --- /dev/null +++ b/txscript/data/taproot-ref/b068dde987664207f704c5b73a6444bd16d46da8 @@ -0,0 +1 @@ +{"tx": "1a1da20f038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c496010000003477079360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127029010000000b0db5c160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700e010000000bfac8b303bf195b000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487198ac73f", "prevouts": ["ed513c00000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "fd2d11000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9", "5ac90f000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "b67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93602d7bf344b6095ff9cc0433017c53b008386fb3f597f891117b70dc62f0c39c7781c07d8975c94d77b7f566737b45f640ec74b2b98cad100fb0cff19b6594ed691244d1d955381053a5c36db6928ef13bb9242569ee84b58d7018329936aac78"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e848df663f65f0e27b2d1567423d7462b229bee90dcacba8c1bf1c1a66aca7f6821d9a3f11774810afeba87c9188100d693899e640a37210c96e3be6a00ac01d4"]}}, diff --git a/txscript/data/taproot-ref/b06a48e5c2bc5a6b1fc1fec7273e5642a15c8c13 b/txscript/data/taproot-ref/b06a48e5c2bc5a6b1fc1fec7273e5642a15c8c13 new file mode 100644 index 0000000000..5f5a2e0659 --- /dev/null +++ b/txscript/data/taproot-ref/b06a48e5c2bc5a6b1fc1fec7273e5642a15c8c13 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf070000000062aabd978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f10000000022d1bc9003560c960000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb3c81660", "prevouts": ["78b26200000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "1625360000000000235d212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090225807767cddd3374bea047dc917aa65ddde9500a4f784a5475f11dc4d628a2f955e9d72912892e9623eb0f203ab77e10032e634036cf2003ace8b6842bb6197de20edaa6aade498a89585d703af8e07290591314d078fc0843ae351874d2eb7b6d8f2ef5d9bc6c22bd43af2a2c27a44b63b8ab2d570c6b21dca418c986aa8be530ab6d1db50754a3674e8a4593a35bff580992e1170d9a890161930e100a870d254e7b22d9e2090e57a9dc6cbc471049f17c4ab0e2ff55f692eb88690b907a619e159c7f68872fac64c5e0e4bafe6f9cfebd6b64ebedc5fcc0fa912adf54c0409d8a9db1ecdfb77182ab68fb7b1a6ef72f43fdce054b94031a07b2e58ce5f2198aafe8bfc2ba167e35c9d2ad9f8225d5f4ed1a8b9c413c926cd7d69ecde7c63b6304dace749363ea462e9d4546b9cab81a1c09d5b28c787390e7d1379fdf7f635d4fd93305c3f34e87c8ef39bfdf50504b97c6a30e16c9dccea3bdb3b8fd08594ad445673bb629dc3e8cd0693433c8a630e755a4bd51f6e90a1271b2ff591feb49eb1b477993a3608c44bc4e344891301720ff6c4d140c2ded57659605f3c998c3ff60db73e396de772ed312a2b083094b30d026c80f3e91686f015465665a2f0b421dbe9968553f1b4263ba747582105322dc53250dc6ba483fc0e931f31b528c90766ec692015565b8404f064f44acf69615fc38bab734d57350273aef7863c8b64291de596641917584", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93687b90958d8851f8faa791a740c8e3d6af0bcc9b19c9a9104c49c045e7b5d9363462b9d29a734e556c6b2d2347029c074a964aefd93d416389a14ef3ddb3da113c419005ce053ef5676128682d79317eecff4f27ad8f3a341c1729484208650bf5e521f6248097fdc64ff5a0a6cea9e07e7c649e93dab8ac6058acbfaf1ad70aa"]}, "failure": {"scriptSig": "", "witness": ["4d0902c232fd8782c69989f630df34a3fed3b47664fab8d68a4b3ab2fea23d7077d103e58d59aa2e87dc60281ce6386fab2796d20098c04252945a82b2129388d5646ae87124c7ef1be1faff5b766dce9390ae2852899b6e64c375740bbf30943cea03f6002ecd65e85251c740cf4431f9d96b1e72052e2d6b09056efce86fd8ce56d752817758f5aafd71a3ab3510011453b6f0d40fda91b3040934b59ad603f641bd254c35ccab398d6ea4a4f7f2057f5a8c0a4520cb27073766fb7ce6785d398ed7c5cdf11a7fba3c07e872cf0a7d9c30800d3a7f9c1c2f9db7ec208fde50e1af7130e64f0ecb21ddf8ed4486e4e907d3ffee8b8934830c2fdecd4f03a8a811d2b53071471fb9e30ecb18d4be64af405ef72a8a9e7e771edb7a7408001922cc4364dab5b9658994afe148864d1cfffed68a7cabfc31cc046b2112943711f2afea1811c734637d0035bd1add11155fcc92acafbb4db9ec3fe103fcdddc0b2f0cef43c0a310029dfc2df33e946642057a31441e5df68eddc9428d25503dcf8d9fd8e3e0e7e3d2a36405de1f3b98d16d05e322fd004b0bea658c01c73a96ee69ac20ea606e2170fccf3a7eaaf5195418ace9009e36129b0b231a45bf164571cdee42157a01a6bfb6e0b3085173f44c168b9006a5a8756a20d48f5b431ab85462363fd5c47cda75f58fe208856583069d8af0e3d020bc0e1dd8d78490f0ecfcca2a45411717354a42a63b91137561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93616970ca0a1645a57dd7e4993535d76d7bd8f0b29a77eaf17ba06fe1d93791444c419005ce053ef5676128682d79317eecff4f27ad8f3a341c1729484208650bf5e521f6248097fdc64ff5a0a6cea9e07e7c649e93dab8ac6058acbfaf1ad70aa"]}}, diff --git a/txscript/data/taproot-ref/b075dfb300337efeb5bdabad39fff800ee516fa3 b/txscript/data/taproot-ref/b075dfb300337efeb5bdabad39fff800ee516fa3 new file mode 100644 index 0000000000..5c2830d964 --- /dev/null +++ b/txscript/data/taproot-ref/b075dfb300337efeb5bdabad39fff800ee516fa3 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127021010000006fe273ab02ff3b1000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87cd000000", "prevouts": ["1b07130000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09025c73a78f2756d264b727f445a0c2966587566bebaa0b4909fdf57273a0c1f229cb62f9667e1c4f824ba89cda36c5b581e20326169466388becd60f066f4e6d525a6a6c1d01ee84dfa23efe8bff2f481cc00996602104f3cc3833f052e9f1b6b0ae1e8cda9cef064b37b361411bc6f27afbbd323aff2512f7b81a951e671351032cf12c849ebd7ae332bab4cdb0033dd1ef2fecb9b27da0f08370e1df09daf0c9d561ce31859d3beb8fd1b42e34fce3e4c7f9219e7456dc0f825d4682d8c6f05137a20643f5d59b64eac1df8627f95754060223e94e833f5904a6e4d5829bb9cf89b217bc1501b701260d3cfcad2a55e902d51cf82ee74319c76844ecb067e06cd750e2e70b738abee804751679dca275cc14a161ca0bc07e016dbe0ab90e2f35195dced5a0dc91961f62f93aa1afba98200d87835390189d1c73e6fc21fa3d5a823e315ef8c2e1040441eb8f5ccdeca5d03ff2aa1eedd6151c3407b29c17e426347bc05c329763109233e8386a8a9f84f56abb45d44475e03d5cead01bba223d6c2c343e5c5ce10410c8de4e6631401ed6a443f14eedd76b49fb3ce82aadf976f305e8842ed58f22d81985c27af5e9f5449721b4e514b4f4261ac3998b6d694c1f533c50c3e01dec592b8bcd72fe26d3bd717d3cf81c5dd903cec3b52d152d54b621c7bb3de609d18ae6e3ec5646f3d7f75bbe204b441095ef5d5a45d93df8046e687bdeb82e95398d75ea", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d46957f69408ac379450e9bb4389343450626e215c5ed15c0a7aee568fcd444532777cb2583add22ba560e78ee9942bfe3080d15b9172e7f2c8ac5adf5c65a1c36f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}, "failure": {"scriptSig": "", "witness": ["4d09021fe139ef2f28fe9b836b87a916cdc079bc6a39d8c815596d237edffae5a131736609cfe655cc3fd898781f7641f0cd70151ee13806e43e5d2dda37e538dcaff3cc82e917cc234d9b39c30853ee7dec592a410cd98e1690436c4f6031c859bd372c37a16270853724e50413f4a592e410f24b760fae202d040fb67c880c5d504711975f6ca0cbe25d0fcb8ee628e6e188a188499f2f43e2f4d6b0b5e288f17e9117705ad1728792ff7b149b3928b13e617612e6d75cf39ba4e409391e081e90801e06690f124aaabb9abdec4f8f3a2d79cc0ad386ca6fa9d927ddf99081705d598ce8a18556ef7b9f52f0a4753eec9b55989585774b192205cd33d0b912fe8e863d42601523a49fd46f5df4ef70c3d0bde51a3abf84935749abc273790fdef99e2555eb3681ea165e56c54fb670d87b2ac8f8a8ad536f9a5dbd38157a3ef5b47fed1f6e45dc2058434862784f10c77ed61dd874e2b1a662709461642eecfff4161ea4986c23a03748170c4fc33e583dcb1fe7606e398dc4ad7abaef2a53a3a03d5531e9031f078201e710106d77e52d74660cd5ef9b10464ab69e78bef058fec08972a6f259519fae0776ecc6b81b9cea7bb67820d3fee59d4c978883ab9522fbc0212a77315ce83e6b00b5cc582b0ac710f8d3cb29fc804e0ef16da7d799cf41b6465912830924393f9bd1603733ddf8eb7fe62d2dd352db45bcf004bff89d6f01effbb0952a1767e17561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369c26013edb97e3ff451a8f909180c8326a435dedafe5a83ac52c9f1bf8b152f16aea47614063a58d04deed750fbc1e2c170629d7889e26e95c64d3b658c7538905d194d5538f9d0578f97aaac3520494006fe8ed5ea4118540907b045326452835c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}}, diff --git a/txscript/data/taproot-ref/b085cb29b4ab162f71d870e1b8f890fd0cf23cd6 b/txscript/data/taproot-ref/b085cb29b4ab162f71d870e1b8f890fd0cf23cd6 new file mode 100644 index 0000000000..a2a88ca800 --- /dev/null +++ b/txscript/data/taproot-ref/b085cb29b4ab162f71d870e1b8f890fd0cf23cd6 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c0000000003bd730a360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b701000000ad8a8be30263f44c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487deff4536", "prevouts": ["9cd63d00000000002251200fcaedfb972c31a562a88e2127675cb61d773b6b9ce4a4a9159012ab236e47b8", "09b9110000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902addd150bdc5faa9073d3026a89ee3a83638e006b85fce8df78ff3a5342cac9f0f8ffd4979aefbafd524a3800293ad76a76b34f84dd4a3b78e536c86aa056d764787fb984bc77e060196cb9ac369affdf5eb3c2d1fab5307950ec3877075c0dfe6d877d3c1ddf55f09d924619eccf87c0dae4f4f995d57266fa5445a49e10e2cf39b3f548235c4378cc21fcc3c356341e0910c9b811c55dccef17788d7471e063b0cacf18d805d597ded2fe81e4114d6ffb90f29f13e369154e376bd9b7a050c4f41f9765666a8188490caac683cfc4d9a20bc8fbbd34be1826c4d8f5550275e4aece9ba372f149145022c8fc3ea9b71074e287776cb455b841bd4059b4231ff30d93e94d36f311ec69cd967f062a51ccbb7fcac7a533b4518151b54a9fb619e17f4a25d8d4356c43e5f485bf335d710a825b5ba74f47eee53d14faffa2ebff59f31c99068735ed14c9a22781016f4992415590a7e0472a30d30b117d57ae33a3b0c40ca1cd16c1b5aa1541444136bfecd46add624d95abb5dcde73b39ade4b2db82b5793a14da1cca41e2918deb5833e4f256d7c6f200b1688bfa2ed4fb8a9d45c2468ec32f5b069a56f266923242b2a98c93f847b97053a295a325d4799002013e88d0dfd378efcc9539fdd077c66998e0a443916cf50d71b24c9a54e43a6d6cef56c9b47b5344682466b0d8ae2f7b7b0c92255abc5db2f8e49a86fce194ce78b8170728670c23c5e75bd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef20d31d73af45144650ecda4bfa65e941320968360f95ac17d612a18851d4fdede6356752267b6a4958657c43b99b93cfd40f762fcdaad4937ef48d6413f31b5843f54915b2c97abdf26ed2d562b36c2375ce95d63af6aa508e6368a687449"]}, "failure": {"scriptSig": "", "witness": ["4d09027739f2ea80564eb4ff7bb1ceb524c01579510d94e3a290a69b3399a812039b89574afbdb86bcba9fa0f516082b61e41e4668a2cb9715a2a7052421104434edd8b75d398c3bb2a00a41e25a55349cdf6b1a354082d4fff8a1472ca2fdc6b302672807a635887d1e562a935edbe0de04a1aa37830170c07e3cf04f9b607545289aab146d87e481f5c67456f75e8c59dbe39cfbc19b4290b296a077e7db0a542e9c3a5aed74a8b306d183b491e8dd4d696e7c4683a95b619406f5522705671d6da9f8c92646e84fdc5b3dfe20aa68bf45da12ed9c418e5825d64726ee64e4c6bef2d3b03d92ffb5d5cccce2ed73d91b6198bd6149fbf490fc668f1627c43420d12af28257b1f78e4a1ca224bea36c0b684821c253ef37eff25ad911b600a94ff4330aa62ac6ce23b4b569d639b2e9654d651b1f1392a6d049b39682feeeb401bc4c9ad33ee702d507f36d54ff846d5885ba81d4fd599776ceb049ad3d43c0f1aef9e99059b965db1181c794eecd57101a2b1f5fb741da4e1253d7b60ffe29d7b8dced3a7940f9a9070688654322f70df2bf54af903858172d05571d590f31fe7e785512b997c1f444d5acceec7734c6ad8a1ffeae1bb4c956252fb86bb8f92446f7d8e80ff9ac0a5b76e425a75cc1a20071d66485428ff11d9e07fe7a9c93f73fb22c023e512704b75713bcdee57e6b38ecd6ee32e66a4878e331560a157e4a5d2d76057a33ef15d592c27561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51631743d48971d1733c6ca7857843602fffe2e4122fe98dc3fa85acbd6da797d181cd61fd18311004a5536d1440b72b537197adb3a0d17581cb4a1679e89097edb5843f54915b2c97abdf26ed2d562b36c2375ce95d63af6aa508e6368a687449"]}}, diff --git a/txscript/data/taproot-ref/b08ac583665d8a49691a3a09c1d5cc1ee3b8a416 b/txscript/data/taproot-ref/b08ac583665d8a49691a3a09c1d5cc1ee3b8a416 new file mode 100644 index 0000000000..a8dec052ba --- /dev/null +++ b/txscript/data/taproot-ref/b08ac583665d8a49691a3a09c1d5cc1ee3b8a416 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe800000000f78152b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3501000000776103a803669483000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58000000", "prevouts": ["8c6f65000000000017a9148bc1125bf4e3450c593a5be1ae9a05461832d39a87", "f6cb200000000000225120a4b352e79354edfd3e864ed1ce6cc38f1a5faee50592882c88cc9fa5a730b850"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1653142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["2d6ac4038ca612d9aa5964b6877692495030730eaa4feddcf58aff6cf05b1ad3b83ad532944b79f035bf2d523d92a80d442edec9788a52ed82e1cb17a312f542", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/b0a4831326c413d2804c49788050b9f91a6403f7 b/txscript/data/taproot-ref/b0a4831326c413d2804c49788050b9f91a6403f7 new file mode 100644 index 0000000000..e0ec213de8 --- /dev/null +++ b/txscript/data/taproot-ref/b0a4831326c413d2804c49788050b9f91a6403f7 @@ -0,0 +1 @@ +{"tx": "1dd1ae6902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce500000000026e16df8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4100000000051563e9502ec56810000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc2caab52b", "prevouts": ["e99947000000000017a914de933560a9a700a6d4f856bfa5cf61713cb34ea687", "3f4a3c00000000002352212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["c121ee29e14189ecf575f48042069fb1cb2b67dd6b993ad51959e998da257d68d3a68e24af1b5a566a1cdd1366976d79d186e98fff0e84827211c49253546ac8"]}}, diff --git a/txscript/data/taproot-ref/b0ad1929e6a50924bb0dc2de48e23ed645f857f7 b/txscript/data/taproot-ref/b0ad1929e6a50924bb0dc2de48e23ed645f857f7 new file mode 100644 index 0000000000..c1a3325392 --- /dev/null +++ b/txscript/data/taproot-ref/b0ad1929e6a50924bb0dc2de48e23ed645f857f7 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5400000000ddaec8968bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d5010000003ef568afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4900000000daee1d6e0386b1db0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac56000000", "prevouts": ["92bf790000000000235b212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "309640000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "c96623000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e04c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93660eaf4545b5f7166123e054cf15eb738fe32912d9aa58946aa01c3af8881f1593713490b1e7aa24138c57a652efa6d547b3fb45fa4f05027d6d9331efbfa4d517cc0cd924d9aecb0bc2fcf01621d0e73a88693291594fa52fe0219caeccfa5b3"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364be51c95465cbea3588c9b6c76130e9be14a08cee11d82588795957f6f854169ed9d9b4b668c8953715b364fc922d70c032801be88e8b1547978372f57dddd133713490b1e7aa24138c57a652efa6d547b3fb45fa4f05027d6d9331efbfa4d517cc0cd924d9aecb0bc2fcf01621d0e73a88693291594fa52fe0219caeccfa5b3"]}}, diff --git a/txscript/data/taproot-ref/b0c00b0f653fb7d6d9c6d10a355b006e90bfdefd b/txscript/data/taproot-ref/b0c00b0f653fb7d6d9c6d10a355b006e90bfdefd new file mode 100644 index 0000000000..4e408fc5e1 --- /dev/null +++ b/txscript/data/taproot-ref/b0c00b0f653fb7d6d9c6d10a355b006e90bfdefd @@ -0,0 +1 @@ +{"tx": "2072d98802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1502000000525dbd8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704d00000000be747faf02cbaf2c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71c86fa53", "prevouts": ["2ae61d00000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "45be1100000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "4830450221008f0c40df843421f9995dc8849f3172df73d4b5fd29aadcc223b653fe669ec833022009210cdc0ad39a9379cb9238adbc1aa5caac67c361c7fa00eeb31fa978f029aa022102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "483045022100c4c9372bc11cc688d6f1c6991c3751d7ea1790aff7667073b59aa93cfde5207102206218bee0f56bea822b59ea8eb941d8ae5165e8233debe0813cece3c23eff08ef022102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/b0c6d5f594246c874ab683269116303a280482fe b/txscript/data/taproot-ref/b0c6d5f594246c874ab683269116303a280482fe new file mode 100644 index 0000000000..c92d53419f --- /dev/null +++ b/txscript/data/taproot-ref/b0c6d5f594246c874ab683269116303a280482fe @@ -0,0 +1 @@ +{"tx": "5ba8d15b028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b100000000a28f43ffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4301000000f4d3acf404f3d25800000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87e490d753", "prevouts": ["4153340000000000225120dc3b17a9e97101dd89a6713513f87d72e341f4413af90c87ebb03089172b5d03", "e38a27000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f14c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360c9deb8d7324d76c36ab4f0759c9a5c2cbf4147d65f4b6b168ab1ae532394b7618ea1dd842879684de6ce36adf7429742f60d84d7359dfb2eae76d7b546c72259feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}, "failure": {"scriptSig": "", "witness": ["4c52f1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f5b4495dcd3a27e5602f5de3a080a46677a554abf7524a5bdccd10201372c8add300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d513887c728222b860c37147d016a38c71344b48ea7c651274945970f6f23c5cbb4cd941a6bc152cbea0496b075d4b2611b435301778200e60e8b4147cd93749673"]}}, diff --git a/txscript/data/taproot-ref/b0c73ceab30b62cfa56f40cdfd49c1ce58f55a01 b/txscript/data/taproot-ref/b0c73ceab30b62cfa56f40cdfd49c1ce58f55a01 new file mode 100644 index 0000000000..864941a86e --- /dev/null +++ b/txscript/data/taproot-ref/b0c73ceab30b62cfa56f40cdfd49c1ce58f55a01 @@ -0,0 +1 @@ +{"tx": "da12e55f0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fc00000000eea8349660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703e01000000fdb2d88004830d1c000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ae0c615b", "prevouts": ["ec020f000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "54ce0e0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_csa", "final": true, "success": {"scriptSig": "", "witness": ["8f1a24494dab1f03b22408d30520e77aa4b48f8efe7bfd25e309627ca6ef94831c5b9e9893ec34b026caab7ace36a85ea44d74fd60d608b08b4adbfd946aaa99", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439befee6fda3cb49175c9fcdc99039bdef34bed6f8c885214259c1ab60f6e0548afc8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["8f1a24494dab1f03b22408d30520e77aa4b48f8efe7bfd25e309627ca6ef94831c5b9e9893ec34b026caab7ace36a85ea44d74fd60d608b08b4adbfd946aaa", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439befee6fda3cb49175c9fcdc99039bdef34bed6f8c885214259c1ab60f6e0548afc8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/b0d9006bd4700ed6403142773e914c7bb257d345 b/txscript/data/taproot-ref/b0d9006bd4700ed6403142773e914c7bb257d345 new file mode 100644 index 0000000000..072800f47c --- /dev/null +++ b/txscript/data/taproot-ref/b0d9006bd4700ed6403142773e914c7bb257d345 @@ -0,0 +1 @@ +{"tx": "77f1ef930260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d8000000007f6b15fadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7801000000785a0adb01d6d25800000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac0f040000", "prevouts": ["0be812000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "b5ed5d00000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d3d8e8f866e5c93cba06d034c6b0155dc3fb6dcbd1bfc23f94a2cd6d77087a79e8e97acb88a684ebbcf6cd53614657887cf2ab5b7ffa8568b23c580b7cee3fc759745caf2cf1f64f8d8e099707b0430cd5fd31acb7685c6a1867b5bc101b65c89699cbb3a49a3897e0d83b291e8d094574fad4ed03d5ac8d24902fc0d71816e5a01cf78466d0111abb0b3e024e5370f04f86266460cd148af38066a9e860c0847b320d45fde3aae686ac2b310fd0bf93ad880531303bc7f2d255d45e73de07d6fca8354843ef40cee7aaca7bf0a9cf1aa0266b7033d46512959c919a0dc469d3ea8c9e088f6952906d8357b118c976c65519fad6a7ad6a821a520095ffc14606c72631dd95a79efe95914a01937a0dbe25ad0df2539c40a0b6cc7476508b543e54e7925f703533143e8316c1dcc1a1e34c3cabd3e12844f89a0df860daea8b272ad0f051ef337e2708309be9b2396fce6c7de72da317cdff67b98ce2e1216aee213c3f50ee2abf3dd3560408b42bdddd8e8336a73e40085d1b188b3316dd4ac7f635765bd465c6fa35c9791eec15e38b6aecf672eccd911b447cf8e19ba7672a2aeab4f44cb25e76d787d6bfd0e350023a8ab46f0a251b535ba9946ab6768e452c08df6fb79f41652e42abf050d5a97c84d1dd6bc4786238ab259c635664debac17cf199666dc5fd13017896868fb3899eea4147d92148f3c6633c6084a4bb1448c5f182983d9a25f575", "997d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa40197dfa5e15d56b0c52ba6c1e960d9371338186786a853de15f9da987536b6f0e580b14ffff5bbee812c9f6e3af6b100c6b4cffaf41971c257964f1fb14f6f9"]}, "failure": {"scriptSig": "", "witness": ["4d0902ba389a32aaa53e4ec0ad44c9d8814f282e8bd985c5b24c932c4ec9101951fcaa12437d38d476ba2e04b73ff6ee55766553e676532e78610356df94be8c3b3f9a24bab69cb55844372babcee11d2cf244f125eafa0ac50c2ca0c871fbaa4ade748dfa14014c83c5854b74c698b42ce3602f98c25f7e15d6804356ee77085a9a79ff23638663a7adea296198ecf3cd44c1780b0baf2c91c7206ea060e82742ca1b2dae45e1c096ffcc2ae1263410e832623f12751ced80fa1fd300676e7da4d18f9aa8f78ec9640dff223deee293c230fcc4b3389ccbd80d97f2f249d3ac1aca366ec81cbf003b84cae439f312714e3a08a8c595d6f2e4fabad6e855c1a9d52a56dd210c8306721edabdf003fcd5c1aab55ab55fda70c623a342b2e0e22ef877cf05c988445c35bccaf0f1b6b11a459689c07b7bc445a8788dbfcead938e9c6a26c5f1f64d2aa102d9d939d2323f005e6d7a1a95d69bdcf5c7c36eb8b3a18219e03930f460d903efa02636284ffe60039ed141bb122e9a7552b3097ce713fa9ed4ba55df01b250e7a537a09f588624d6762e9d9d65cda6abcf5f6c4fbd2056df5a7bbaaf489d29e3b19780b2484b0cd1eaa1489fa5c9a1272b6a1e7d6d6fd514d5ababfbe88cd90dbce7d6c8382a69a24c9781c2f5551b8671047fc64f49ca9f6a3e8986ded806a9bca38b001d959f67262c010bb09a827db9877fa71495ad4c03c6adfd338b8374cbf475", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0822e3b986c0375fedeed2562a6fa36a7b38b0ca47fc0125e42be2f4bc52e49716a3d673df10a8cc98fc65477367c7f3bb838b82569297570384f0d4df8cd49e6dd413afa0de0ff2ef52577d4c80443f6003c675907986908c28bc93ded208ca160"]}}, diff --git a/txscript/data/taproot-ref/b0e3df60a56490ae4dccf3851d020b40b21b8b7b b/txscript/data/taproot-ref/b0e3df60a56490ae4dccf3851d020b40b21b8b7b new file mode 100644 index 0000000000..688584d688 --- /dev/null +++ b/txscript/data/taproot-ref/b0e3df60a56490ae4dccf3851d020b40b21b8b7b @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf16000000008e795ba101d0fb450000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc79020000", "prevouts": ["0b8a700000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ec", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365b2437d263ee0812a46b558174956b86c0172ee942f1fd166ed8fd2626e33ca1b17c496824b626c02ab547b0eab6d99cf720fc5f5950d9f56a4e0f1a7586e075a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369250ad1237d5633d63cd08d0b09aa1b36322d1a916eb5c296c4ee8f819a8dac8ea5b08b003f1d8a082790805ee2a5a4def5fb527637606ac665fe1637cb888218bc5bddb1ae8a97e111feaf10767a648ae88621f6e3dc27f3d4b61f2a6f156b2a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}}, diff --git a/txscript/data/taproot-ref/b0ec063bde9113e41cd5590763cc5a80a27e57df b/txscript/data/taproot-ref/b0ec063bde9113e41cd5590763cc5a80a27e57df new file mode 100644 index 0000000000..247ba75ea4 --- /dev/null +++ b/txscript/data/taproot-ref/b0ec063bde9113e41cd5590763cc5a80a27e57df @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc101000000c198db84bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcb0000000017fde2f5039f7f8c00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8716010000", "prevouts": ["56ff250000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "2f89680000000000165a142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fe", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e11fa2939e65832b6ff7989f1e054fda271120b52cec29bf8626e2a96fe398ca78fd22261ee209e04df9662f52c9dcffd1f6e65f5b546fd3c131bfb02c186b05f664ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663af012b32f8cd1cc038c1d6c2a62e919380767bc592e88c57dc97e62501e69d1fa2939e65832b6ff7989f1e054fda271120b52cec29bf8626e2a96fe398ca78fd22261ee209e04df9662f52c9dcffd1f6e65f5b546fd3c131bfb02c186b05f664ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}}, diff --git a/txscript/data/taproot-ref/b105a50748888b6356015fc47a88bc2be5715d6d b/txscript/data/taproot-ref/b105a50748888b6356015fc47a88bc2be5715d6d new file mode 100644 index 0000000000..65bc917fff --- /dev/null +++ b/txscript/data/taproot-ref/b105a50748888b6356015fc47a88bc2be5715d6d @@ -0,0 +1 @@ +{"tx": "da5995b202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba300000000e933e5a4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb40000000057e27db101a5fd2600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac59005b4b", "prevouts": ["fbbc1e000000000017a914bf07e8218e5a3c93fa381357100b6dba1ff2a91287", "4a0220000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2354212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["46348d658f319ed8e5e84e982370a36f8491173a86692b9da360a4075f02aede095bad76d7ee1e122c1a39d990b0987229848868db4f88a6f1b9810355a2f8cd", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/b14851f777181f4d6991a19eb5faf986f6c5d922 b/txscript/data/taproot-ref/b14851f777181f4d6991a19eb5faf986f6c5d922 new file mode 100644 index 0000000000..b0ddc298a3 --- /dev/null +++ b/txscript/data/taproot-ref/b14851f777181f4d6991a19eb5faf986f6c5d922 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cce01000000b3e4cc8d01b08b0800000000001600149d38710eb90e420b159c7a9263994c88e6810bc78d3fd55e", "prevouts": ["ddd4540000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_1e", "final": true, "success": {"scriptSig": "", "witness": ["1aa2b00dab226a1614867273b5cbaea6697e6eb5f0f7550c269dffc763e80d293ead063e8602322512500c46b66fe2de223e525bfd509e9e6c90783f5c7eeb1c03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ef811be4e94b39e868a761df447fba2f0d661c0aab700cf68bd0103a7a5082f1ed3b710cfb6403ca70ac2a6301a1b980b4ae3d86cafa8d4d943655b9c453086b1e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b16c3acf4e0fdb0086f5e645c0abf5248401f236 b/txscript/data/taproot-ref/b16c3acf4e0fdb0086f5e645c0abf5248401f236 new file mode 100644 index 0000000000..3877cc288f --- /dev/null +++ b/txscript/data/taproot-ref/b16c3acf4e0fdb0086f5e645c0abf5248401f236 @@ -0,0 +1 @@ +{"tx": "af5f933c02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2d00000000e528e6848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c439010000007ad0089d046ddda8000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac76000000", "prevouts": ["1a906b0000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "abfc3f0000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/branched_codesep/left", "final": true, "success": {"scriptSig": "", "witness": ["4523737481b1266900a60dd0715caa3d8050e4b2273427d4fb5a605322f3ba6ebc4eb06341778556cbb9e26f8681ed4aeed30f0ec3214a91bf51e6e585f4be0583", "01", "4d1301e76af030918e8d96a5e9c2094c9ba06d0ada8d0810ebc2f79ad890d92025a41b5cd08bdfc0cf7d4c9986cceba43fa0e9be5c2377c104330d94f07ea76f76de7aaa32e78ca0685201fb53e48ff30be8b782d5aacce7aecdb4508fb3a4147892070176fda3b74cad0a6f35c859d5e0d7627ae9b9ca8fdb5a4b5b652d3629350b6e6f11f7de2a627705b189459ee6bd1a593add61bffcce4e74b7b6af7efdd904948c80a13bf6734dd07387413a317d6a1134ecf76aae32aa7cf062cdb54d519d560c7a8549bc2fc161f890e330d20d78dced8994561d3d2bd7cdc1ede9bf9342f772d50abe38243c80d5649d81cd34a40ddfd49451e3305d4428e8856314a7308213c662f7f2d689b318f65bfcd530b15515dcf57563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ccd8c60a773165cc937efb02bc1b35e1115ac0671e1767a3af984f55e4d3c01bac00967532285e5651a233a5d3d97b0c986d2b78702c704bc34e0fc184218be"]}, "failure": {"scriptSig": "", "witness": ["8962f0b4e7c0263efd37394edd17b3c3bf9ee95c25efd464d1df92a111014e055adb3f5da6f85b6250dd1a9169c4c1c8b555e842bdea3aef2b7f283184f2f3b3", "01", "4d1301e76af030918e8d96a5e9c2094c9ba06d0ada8d0810ebc2f79ad890d92025a41b5cd08bdfc0cf7d4c9986cceba43fa0e9be5c2377c104330d94f07ea76f76de7aaa32e78ca0685201fb53e48ff30be8b782d5aacce7aecdb4508fb3a4147892070176fda3b74cad0a6f35c859d5e0d7627ae9b9ca8fdb5a4b5b652d3629350b6e6f11f7de2a627705b189459ee6bd1a593add61bffcce4e74b7b6af7efdd904948c80a13bf6734dd07387413a317d6a1134ecf76aae32aa7cf062cdb54d519d560c7a8549bc2fc161f890e330d20d78dced8994561d3d2bd7cdc1ede9bf9342f772d50abe38243c80d5649d81cd34a40ddfd49451e3305d4428e8856314a7308213c662f7f2d689b318f65bfcd530b15515dcf57563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ccd8c60a773165cc937efb02bc1b35e1115ac0671e1767a3af984f55e4d3c01bac00967532285e5651a233a5d3d97b0c986d2b78702c704bc34e0fc184218be"]}}, diff --git a/txscript/data/taproot-ref/b1776090f6173a9a430ec315e3ed5aabd24b1b72 b/txscript/data/taproot-ref/b1776090f6173a9a430ec315e3ed5aabd24b1b72 new file mode 100644 index 0000000000..20da9c8c70 --- /dev/null +++ b/txscript/data/taproot-ref/b1776090f6173a9a430ec315e3ed5aabd24b1b72 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3400000000f74ebda1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd6010000003ae740d901134630000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48757010000", "prevouts": ["a750530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "71fb250000000000225120199333ae2814ece819e66b6eda683343e1bb1d0c50810e300807466af2e93101"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936342529f4bbd62010952df5aa365e09694a0beaf9b870f79f3a07fd65a287ec77"]}, "failure": {"scriptSig": "", "witness": ["6a31616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b1a7636cf60adfde2e1358221f019b1e6b4155d6 b/txscript/data/taproot-ref/b1a7636cf60adfde2e1358221f019b1e6b4155d6 new file mode 100644 index 0000000000..130da96d80 --- /dev/null +++ b/txscript/data/taproot-ref/b1a7636cf60adfde2e1358221f019b1e6b4155d6 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127042010000002bb691cabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb3010000006a9750e360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707e010000007fb4f7fd04ef69900000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb3b44031", "prevouts": ["86751200000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc", "695c6d00000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "bbd7120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_7", "final": true, "success": {"scriptSig": "", "witness": ["8315fd5c3d2b13597202ae29fd5f14b518ec83978a94fa219ed3381eea2945c54347ad9ec3bab91865b4c8dcb398073743086dcfdb350b66e5a4362c4e68f13b83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3ce6377c37ce0024d6f35dc7deeb34796c29d64fb0cef7bfd62d6906b93e4834500958a64d6651b58bc7e108ba19cf8f89baa42ce29fa0896342f4433925ff7b07", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b1ad5a93a73ac48400168c0d0d6867c722e2ee94 b/txscript/data/taproot-ref/b1ad5a93a73ac48400168c0d0d6867c722e2ee94 new file mode 100644 index 0000000000..f5561e93c3 --- /dev/null +++ b/txscript/data/taproot-ref/b1ad5a93a73ac48400168c0d0d6867c722e2ee94 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b200000000ea14fb878bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d000000000294766f002728a7600000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87bc010000", "prevouts": ["72c13d0000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f", "12c53a0000000000225120a7af56c53f6997dc9f888a8c6887a5f8ee9cb96a9d70fc301f3f9e386ed85991"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ae4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93687ed348611d475a2912210bc8204a20bb00aa96f38a8888f1ea4486413b1a5a6d53bd36d32adc19f711473d01abcb44e7ab561baea4d664230dfa9381cfa8f4828a09ca0f6d73d82e88e284042e116dab9fe2cbfafc110f6c0fbe5b2788367c646ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045bf410b10c26f46641013d73a91af66d7632b0672c14a8d3b0dadcce48aba69ffe0b789927f620aeddbf74aea18c74264c468c5fe823a741d176e0a42636f367e46ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}}, diff --git a/txscript/data/taproot-ref/b1b4eed63248ce097e83d9f1723c6762b7de9c27 b/txscript/data/taproot-ref/b1b4eed63248ce097e83d9f1723c6762b7de9c27 new file mode 100644 index 0000000000..bb2f3ad8aa --- /dev/null +++ b/txscript/data/taproot-ref/b1b4eed63248ce097e83d9f1723c6762b7de9c27 @@ -0,0 +1 @@ +{"tx": "a67a7ab50160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707a01000000d50a14dc02bb6f0c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5a000000", "prevouts": ["a46c0f0000000000225120a2b42a3d113bb3bd52e1704c60ab477d21ed62730f87bd557087d89b305101d6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365796547f4e6a3486b790cf242f8b11aecb4a0209f6696518a51333fd17057295"]}, "failure": {"scriptSig": "", "witness": ["6a71616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b1bf9f8b4545db1b4c96961e0e20f15216c0e8b5 b/txscript/data/taproot-ref/b1bf9f8b4545db1b4c96961e0e20f15216c0e8b5 new file mode 100644 index 0000000000..be403d0272 --- /dev/null +++ b/txscript/data/taproot-ref/b1bf9f8b4545db1b4c96961e0e20f15216c0e8b5 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa201000000a54e1d1abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff600000000058fe3ae01afaa8e000000000017a914719f78084af863e000acd618ba76df979722368987b0010000", "prevouts": ["b38b84000000000022512005ff23ad1561e684c08dc4654c3a622730f716f9dbc5d4d5a4cd20d536b8ae37", "e07864000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93665e966627d89ed7c11a6fe076b6d05158b5eb3f9d5a5f655bd22fafbcd8e8b08"]}, "failure": {"scriptSig": "", "witness": ["6aa2616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b1c08a839cd0acb873c5f79044f09ba166bfa26d b/txscript/data/taproot-ref/b1c08a839cd0acb873c5f79044f09ba166bfa26d new file mode 100644 index 0000000000..671bca0fed --- /dev/null +++ b/txscript/data/taproot-ref/b1c08a839cd0acb873c5f79044f09ba166bfa26d @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7501000000e6d878d9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3f01000000a46d7fa2018ab5160000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7e2c51b57", "prevouts": ["edec250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "902024000000000022512068a70acb8902a9bd7a8a0bf24e1b522fed50855c0b1040069930cd3d961acf32"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a897063338365c0b13a26eff7985b69373cacf065397f325e0727d23d4450987"]}, "failure": {"scriptSig": "", "witness": ["6a2b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b1d288dfd536ad13a01041e19c9c11fead33ff91 b/txscript/data/taproot-ref/b1d288dfd536ad13a01041e19c9c11fead33ff91 new file mode 100644 index 0000000000..805d1a864c --- /dev/null +++ b/txscript/data/taproot-ref/b1d288dfd536ad13a01041e19c9c11fead33ff91 @@ -0,0 +1 @@ +{"tx": "6b76e011028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47901000000f2a234b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cf000000007d7052db024ba54300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a3000000", "prevouts": ["2531340000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "dc6d1100000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "f47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa056823e3960e672c2faac6672d149a4ac5db30e5c30fec842c5078845a2fea890bfc944cea42013591059ba9f4ec0a95c62699d2133b38017223ef90bcb8e42b4a87a36ff2ed7228bcfc2438815b30cc1c98339504e1b834e10aaf4a034051"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682115a2dfa9b95e696b2e1876a43d90a8957d7c1a0aa8ff9ef276528e0707301bf93feda87a2a10f8ccaf134f5ef6c2a0b95d03f8827da72e1e875b6e78a8a5e876f4540117e7e2fda63f7a015ec774d613b8932caa4388fa9ce7145d42cc7f6"]}}, diff --git a/txscript/data/taproot-ref/b1e426a1d9ca218fe8dfbd94e4f84deb69cf3add b/txscript/data/taproot-ref/b1e426a1d9ca218fe8dfbd94e4f84deb69cf3add new file mode 100644 index 0000000000..cf52be42c4 --- /dev/null +++ b/txscript/data/taproot-ref/b1e426a1d9ca218fe8dfbd94e4f84deb69cf3add @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb500000000cce811ac04718e6700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876c000000", "prevouts": ["889069000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "47304402201372b7b7415affa8d3a31d7d460063a924f66bdada8bbac4d28d3b0fdc1ba8c0022073caf6a462020ac81fecfbd367190fea654b7ff08d0576352600411c07b97a2a01232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "473044022044a72a8e7b670dc72045e89e8194caa82ad3645f93f17a8182f9d8ce21b29f43022030c4bb3114aaba72e0b5eae6ede44f4945c81d051bb753e52ba318f50dfa49b901232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/b21f2a634774a50314c4e0ef19018373cfff5761 b/txscript/data/taproot-ref/b21f2a634774a50314c4e0ef19018373cfff5761 new file mode 100644 index 0000000000..4ee1bf8907 --- /dev/null +++ b/txscript/data/taproot-ref/b21f2a634774a50314c4e0ef19018373cfff5761 @@ -0,0 +1 @@ +{"tx": "d105fdc102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0301000000971ac2e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41b00000000099cdcd0044657a70000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79617aa1023", "prevouts": ["43046f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c8213a0000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f5", "final": true, "success": {"scriptSig": "", "witness": ["23578c1e3a91ef0dfa332e6c5f58b6f8a1326086c1c7f132e92a17743a8ecb1270c9c7a29f195755c38741e41418904623b09aa69c86ff03882ad7b2512d0a6f81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["da0ef200be08b34b52a38dd86ffd4fb1a09e600f236028eca5b9dcbb9e23092a51cc8f5e5095ffe7e3730997fddf64eb77ec3b8709a7a72cba234cb65c14cbc2f5", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b25b243c1918bd286e71165a606917ad6566dcb9 b/txscript/data/taproot-ref/b25b243c1918bd286e71165a606917ad6566dcb9 new file mode 100644 index 0000000000..035cb7bcf2 --- /dev/null +++ b/txscript/data/taproot-ref/b25b243c1918bd286e71165a606917ad6566dcb9 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4700000000041e430c102ce663f00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a664db913e", "prevouts": ["125d420000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "b87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369c645b03c2051c6beb7aa80d32191caa487d851613efaf1c31edf92889bcbe40ab6940ee0f3b13da6463e2f516d6c168d9c5d733b385f1180629b82031abf4ccad8c3985a8e2539d42260561cfa7167d8724d0e4cbcfaa47665e96933724a3d86960f5e71abb11fb1594f725adbdd26a9f61c928558a58ca58d11d05eb565d16"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365f3587725e5247e447e4cb6b14e0c535c8313d8ac3ac5420f5f1daba6f6e0dbaff5a0b04042772840f11ed5a15b1f6f5628d6ed53a9b814a67fccb7bf41c87856960f5e71abb11fb1594f725adbdd26a9f61c928558a58ca58d11d05eb565d16"]}}, diff --git a/txscript/data/taproot-ref/b279bf9258b4c48220f05e2e891b91c7b13e0572 b/txscript/data/taproot-ref/b279bf9258b4c48220f05e2e891b91c7b13e0572 new file mode 100644 index 0000000000..5e8b738104 --- /dev/null +++ b/txscript/data/taproot-ref/b279bf9258b4c48220f05e2e891b91c7b13e0572 @@ -0,0 +1 @@ +{"tx": "a115863c038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48b0100000096e9c4c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49901000000144124f9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf9010000004abe32e30189092c000000000017a914719f78084af863e000acd618ba76df979722368987dc000000", "prevouts": ["e7c0370000000000225120975437f6ff12fc45d8ef3d74f3d05cfb35811edf79338d42e1008b4e2cf45094", "6ef4350000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f", "c869260000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e968", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369091fd32923117b71e5ab9b92a9d13a05584ef6b1cd43e2a5b18703bfba3f09acf301e2cd98ef2d5c028e1b110cc6503fb01279ff4eb452c3408c39d22674b4dfc7f9c78871d6a598c7c7c3f4c8210a5c47caa8abf9700608b6e75845c74a6c5"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360382dff41a76e3f98bd5f592608b4db8a292c887d72fd2428e596a0b3632a30fead6d3e810571e3af6462e6592387cebd820372bb489ff10eea7a83e6cd68e83cf301e2cd98ef2d5c028e1b110cc6503fb01279ff4eb452c3408c39d22674b4dfc7f9c78871d6a598c7c7c3f4c8210a5c47caa8abf9700608b6e75845c74a6c5"]}}, diff --git a/txscript/data/taproot-ref/b2bf386739903299a1cce995ba58544747eee3f9 b/txscript/data/taproot-ref/b2bf386739903299a1cce995ba58544747eee3f9 new file mode 100644 index 0000000000..5be3e313ce --- /dev/null +++ b/txscript/data/taproot-ref/b2bf386739903299a1cce995ba58544747eee3f9 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c71010000004ff55bce8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45000000000c0c2d20502325f8a0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac3b000000", "prevouts": ["c9644d000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787", "75c53e00000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100e36580573e0a91d83bc09082f0299661313823e7209f148b8d24fd7fb24d766402203fea28f7195f9da5736cbc034e6814e5677d7cdf1e82d8a7ffa6ec7ee6027f7d02", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100ee5f2f79d1dfa297deb5e9d30940b1d3bf18ff8834e93d97ee1cdce6fe334584022043d33a96df3ccb719bd0b403a8b1f8d5d2052c81656880854070990252baf53002", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/b34497bedf19b0567d48c3bb9d3c6c6b7285bf56 b/txscript/data/taproot-ref/b34497bedf19b0567d48c3bb9d3c6c6b7285bf56 new file mode 100644 index 0000000000..8fc74b13d4 --- /dev/null +++ b/txscript/data/taproot-ref/b34497bedf19b0567d48c3bb9d3c6c6b7285bf56 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44900000000f5f5607edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2400000000a5a0567a0347928500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a66dc2b32a", "prevouts": ["ddf93a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "57904c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_31", "final": true, "success": {"scriptSig": "", "witness": ["7fb04c03105eb712ed2d128076563b8b30f2f03bfeb616f3328177986172e52d658a19b84d106954de7195396167fe7231c36719ef075a18e673f7c5f14723d881"]}, "failure": {"scriptSig": "", "witness": ["8821379d423344363033262f0dc7e1a0eca6be4b8c1b8da95f780b0f4477745d9e2cca68605640ed89ff1a7947969d34d7f39995e632a62c0b534399f8ac0e1131"]}}, diff --git a/txscript/data/taproot-ref/b354cb571d5964e5709107acf8b69b7a52691648 b/txscript/data/taproot-ref/b354cb571d5964e5709107acf8b69b7a52691648 new file mode 100644 index 0000000000..bddb9973c3 --- /dev/null +++ b/txscript/data/taproot-ref/b354cb571d5964e5709107acf8b69b7a52691648 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff901000000939dafac8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47c01000000d2c3b2ffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2801000000052131c304cb62b800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c6010000", "prevouts": ["1f9b64000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7", "1e9b35000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "49a720000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3044022026a14e608bd2246518963f984a9e5b5115db068eebad21bc3cf427842d648baa022040f8a2a0e6cfdd5ec2d386836ef4471903aeb51035135613129d668e99e17a978a", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3045022100ce87c284455926c4e3c8c87af70f206abefaf9e8f69b32e44b2198d863dfd8ba022046b01e4f4024ecb9a7f2a28cec55d456f1193bb9d053c62d25e49a4b900079948a", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/b3621ec700f1905ab8a89bd0dc990c56dc5b2619 b/txscript/data/taproot-ref/b3621ec700f1905ab8a89bd0dc990c56dc5b2619 new file mode 100644 index 0000000000..f5a959df3a --- /dev/null +++ b/txscript/data/taproot-ref/b3621ec700f1905ab8a89bd0dc990c56dc5b2619 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e000000009ccca0ec8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44301000000298165898bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e700000000f154399c02849c8e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966d030000", "prevouts": ["a9371f000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "49f43300000000002251209c5a589e416b2bf8d886ac38373c12ee12085629030d3f34ed2b7cf34700cf85", "fb803d00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e54c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b15c6036a676a492a4bf737064ce6a21b64de8ad159d3b2e60d879468caf8957d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936899bb7d21500b6999eed5216ea1db5a9ff8f61deccc2645d4f480296bc202312deb89faaac3ba7f5e16436fc8221b82cf02c075e22a72f26a59deb249ff0d9e9edc23a266999aa1773fe99be867e95cb2abe2d57657b7a4dc20a388644aabac6d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}}, diff --git a/txscript/data/taproot-ref/b36fa07023f7e2c301fca71c92d63d4b9d3dbfe8 b/txscript/data/taproot-ref/b36fa07023f7e2c301fca71c92d63d4b9d3dbfe8 new file mode 100644 index 0000000000..15aa96385c --- /dev/null +++ b/txscript/data/taproot-ref/b36fa07023f7e2c301fca71c92d63d4b9d3dbfe8 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b22000000000e68496b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41601000000d14c8d5b0305ca5300000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac832c5e32", "prevouts": ["ef35240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6975320000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936036751089af36ed5c0ef7dca2a713ca9b31e3a2dfbb12490c74aaef9653ee48ca81c44a09079faa406e9dfe20ff322801dbd7fb1c55ee11d2e1c43aeb4d3cbdeaf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}, "failure": {"scriptSig": "", "witness": ["4c52e4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f526a05401741d274ca9fd789911b95efb3576d14523fea071e177c96656d1d00d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3e0b789927f620aeddbf74aea18c74264c468c5fe823a741d176e0a42636f367e46ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}}, diff --git a/txscript/data/taproot-ref/b3acffc7854d876acec4be4e8f02c5785c9786cc b/txscript/data/taproot-ref/b3acffc7854d876acec4be4e8f02c5785c9786cc new file mode 100644 index 0000000000..2a7611ce63 --- /dev/null +++ b/txscript/data/taproot-ref/b3acffc7854d876acec4be4e8f02c5785c9786cc @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b500000000011604128bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49200000000a36624610468c3470000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac78010000", "prevouts": ["c58410000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "78f438000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09028457bbd4dde9afe54c6c2f8bf83f35729e8a3c9e3f23c7b45ebe65b3357ca85ba15558e0f24533deb2ad2e0dfc079668e04eb421c0e2c28a1833f987c5703e15e99e9f16c1d7e2cbf21118c5c7a42bb57c03f20c696c809013509da488b0900c36ccc11ed60de7f2b3193acf4bca28e7471e4a4f3e92e18db3c80be44d88366eaecf124256cc09d419f3007cbd45e532c7e161d444960db0a606664e7489063dc115f699143d8262d93cdcd2e852f54de92a5455b2223ad2026a3f055d922a3b7f3058b3ebc2058c266a163f2c1e61e34e6673ccd0de302bc8246ca75f0732b32cde0b5c37b8a43742ab926f9a48c4b3542ba852c7c6265855f72cf618bd01c288c6da46285171dfbf34ef42e0e834681adca76cbfa08b77612f94b9b1d87b85209cdfcfce4a87c627cb9b4f60a3fd0b5fcab7c8bc062549dbbe439c71ef25f2b07824f1d0559c3608866f73d7fd9f84d702274a5f665dd297174046d225cf284ad5e1e09c55f1d3e928555a87a15bd8832beb55fa30d5c30d23778b366a85fd66ac86fa77767709a37d79154f7a1efec1ca022b58707f95c575b80cd0faf4a9dd54d7086c392a13972e59cc84cf32d2e580412fb43af3f35545097afc5ebff4ea2674454b5dd4d21ba1e39a91a676820063c0b5b86e2555feb5e55ce9d14fd1f37e606c00b460cf6483502886fb49e26c6c98df83c3857a5e7c9f437bb66396519ccb05c6fc9264b275be", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08215cb0c87b91becc5e8e88545f518ccd4dd82a3936db012f0c0e2ff8a479534101a521886ab29756862a71c0453b77f880429f1d68b1fae0f34d555c1e4747b3e7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}, "failure": {"scriptSig": "", "witness": ["4d0902448027d910a2c28dacaec9bdd36e54d01a99672e8db16135ab21ec0692430600c747da65853b1cf02165f4678d55c1bcbc8283c376e90dd59705b414f1da4a9ce01bccb19275b5eb0b8989b4b07a4c855cfbab900a8ed67f4450e5e8cc1362e31d0214557b4475a4156d36999c20f30ea4647742c65ecea157f0057e92fc45cbf9aa47a6eca8ceabd833f0c0a3f6e09b0345e161c1f7fe5d481cd0d7ad86896a57f797ca4270b3eb89a1f4e194d5fccd5be89213155a5ca76c9e019fb7822290116f7b3cb3195037f42ac343a08dd8fda33c5384e19d1a3f222120eb6abb57f47ab64fd5c12484368fc506f9607dd06c552a69c2b68913caa2f0d86e85c99c76030a11f49685653b4fc48903daa0ef2c35e8b1f53ca50b027134027dfa337e051c8c03b9135423e051f6300f649c1fc7e44a58d0589c881749c20dbd3c2c81d4ec965ba222057687889889e36b6cb24659f84a1ae2424aee0e1ac18c378c0f8cdea39cf55d91209ab5eb8e044222187baccbd0a177a66028e1068125751b781bd8031af392fa08ee6c72199b8dc266373ce74d5c52fc4b6b81f620f40a45a6de112a0e4b41a1c2587b7353b791a55ffafafb742d9d4de2895f8105a388e3852bf220ad0328c2c1d5ede8ee77152506efb453129419062688877ee09540fd932f7f89b42cf7921e5d4de7fadf405303b58bf8eedae10e67d29e8385a7444428f60eeba39051ce4b8c1e7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004573668dc71689fe0651b36a481e24aaad53f2818649afcdf831b4092eda1b840fd3726db1c97dedfc82502578948b1d779eb886e6296c36bf50b8d2fe25c32b8a344cebdb8ecd56ef01fad0911d9d88482970ec36d3a04b84eda7f5b5c68ec938"]}}, diff --git a/txscript/data/taproot-ref/b3b35af21b57765c4439d83505e2c122bcd9d159 b/txscript/data/taproot-ref/b3b35af21b57765c4439d83505e2c122bcd9d159 new file mode 100644 index 0000000000..2f80d038ad --- /dev/null +++ b/txscript/data/taproot-ref/b3b35af21b57765c4439d83505e2c122bcd9d159 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf330000000056a475b2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cba01000000746cca94dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cca00000000ed67c018043edd1c0100000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88accb010000", "prevouts": ["e2be7c000000000017a91441ce0eb0e6e5800ced23a872818e5aaa63be0d5b87", "3be74d00000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "38fe530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1657142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["ddaca7147b466835165381f7ed37d503db143637d11c7f16d815ec7bc34c0e9f3a3dba96eb04d63e872619684c4194998a63514ef6ffe93f0eaccbaa87b1ba47"]}}, diff --git a/txscript/data/taproot-ref/b3e2b23acbebfcbc2e5f4e54d4fd7005740cae7f b/txscript/data/taproot-ref/b3e2b23acbebfcbc2e5f4e54d4fd7005740cae7f new file mode 100644 index 0000000000..1ecc22a58f --- /dev/null +++ b/txscript/data/taproot-ref/b3e2b23acbebfcbc2e5f4e54d4fd7005740cae7f @@ -0,0 +1 @@ +{"tx": "dc7f15740260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705f0000000035065d94bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfce01000000f213c3dd049fb7800000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796be95ab32", "prevouts": ["b8bb0e0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "cab3740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_96", "final": true, "success": {"scriptSig": "", "witness": ["34560959274ce200db1d719b55427c3303d033c50526abb970120c21652c1fd5b042a3f3c49127804a8c8adbe59568dbea857e4c659d85397addc46c6801573781", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f302f24d0117461617ce1b6b980dfc41fff8cd5a392a2ca79afa0ef89953151aa3facc1f97810d994aff6d4c78fca137172cc5262e030d9deb5713444271bf7996", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b3f7745d61088bde2d2244a961085a6e8ca22a22 b/txscript/data/taproot-ref/b3f7745d61088bde2d2244a961085a6e8ca22a22 new file mode 100644 index 0000000000..078c12ede8 --- /dev/null +++ b/txscript/data/taproot-ref/b3f7745d61088bde2d2244a961085a6e8ca22a22 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127033010000009cf2b10cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2201000000378971070259bd8600000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47876dd8b95c", "prevouts": ["f1be110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3569770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_42", "final": true, "success": {"scriptSig": "", "witness": ["9f78e6a85ef709de7f86cf0d03afb24fe26ebf8b0838c59205b84c09c0b6618bb13a587e2e95d0ca877f3a7d77caf5fff1347cad9c23141bbc6a379e69978b75"]}, "failure": {"scriptSig": "", "witness": ["5600a15e3d3dcda56bf739d4b2460c7e70c94ba5b898979da5995e9024d91915c69804b009ae0c69dec98bfc8151ff4f2afa620a9b6a2749fe8ba1e4c8ba387942"]}}, diff --git a/txscript/data/taproot-ref/b3fb8896212c7278ddd055ebe8806a9aadfbdbf4 b/txscript/data/taproot-ref/b3fb8896212c7278ddd055ebe8806a9aadfbdbf4 new file mode 100644 index 0000000000..6a9ed58cb2 --- /dev/null +++ b/txscript/data/taproot-ref/b3fb8896212c7278ddd055ebe8806a9aadfbdbf4 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c700000000bbe4adda60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708e0000000066bff0d104cae04d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc00050000", "prevouts": ["16044000000000002251203931946bff2228105059183c00ae321e35895921175a46193bb089ee2b225687", "44b610000000000022512088bd92c864bebf276ea78553bffd47e68dcce8f95537d9019b0b776be36b3d44"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688b84dd89443b974221dd5eff164e8c7b4057a81ff0cc18ff546def1b21c1105"]}, "failure": {"scriptSig": "", "witness": ["6a3c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b42a78220d5bf6c02b4d64f379b4963da854ecf8 b/txscript/data/taproot-ref/b42a78220d5bf6c02b4d64f379b4963da854ecf8 new file mode 100644 index 0000000000..94fb92dec5 --- /dev/null +++ b/txscript/data/taproot-ref/b42a78220d5bf6c02b4d64f379b4963da854ecf8 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47e0100000034d6f85adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8200000000012c3b33dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d000000008f19ffce02f518ac000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987d0010000", "prevouts": ["baec39000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "d7d2500000000000225120b982c4866c93df3772712b36d4336b477e2dfe66f304c80c21f6bc33f20b8495", "8ecf23000000000017a91418261fd2fa0b0480c86b918607add1dde9f7026a87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "483045022100da1b4e54c424c8fef5e652a21593fc43edc68fe19436869c978748b96c6c8e370220590e270596f36e2a5c33e3ced8f8ccc5532124d2e7a2c78f161cd6da7ca9c2c791434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "473044022023bd90580bf102b8a2e6f2dd3c092f8a5c299803237ab3bdbdde10261c8fc74102202c43afa40239f58b8992ce023a963ca87bd50783c6b9ca999883cf25e9a7989a91434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/b471b7933c10f89f075ebd244fc7dce18cc064ec b/txscript/data/taproot-ref/b471b7933c10f89f075ebd244fc7dce18cc064ec new file mode 100644 index 0000000000..fe47317fca --- /dev/null +++ b/txscript/data/taproot-ref/b471b7933c10f89f075ebd244fc7dce18cc064ec @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41a0000000077b56489dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdf0000000045bcf180046ed1640000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a647a36e60", "prevouts": ["e4d03d000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "4dd2280000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362c7d9ab9143a7761e2df5d26d7dce1bb1763a647714ba4cc57b12c7d6fe17e6cd81cc5051f53cb756176679d36bd97691fe000700c9f2a0965e3d67cfda5d0f8a81c44a09079faa406e9dfe20ff322801dbd7fb1c55ee11d2e1c43aeb4d3cbdeaf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb43f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824d4fab40ea135233ddc8c9f724889f007818f7ffad5749db3376d8fcf405e18faf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}}, diff --git a/txscript/data/taproot-ref/b4881b1ab0b628b8e08950b8799b2a7b2f90f6bb b/txscript/data/taproot-ref/b4881b1ab0b628b8e08950b8799b2a7b2f90f6bb new file mode 100644 index 0000000000..8a315bf3c9 --- /dev/null +++ b/txscript/data/taproot-ref/b4881b1ab0b628b8e08950b8799b2a7b2f90f6bb @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa0000000003a5d8e9060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703b01000000b886ef2002b9017a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87de3e9141", "prevouts": ["613d6c0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "1208100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_dd", "final": true, "success": {"scriptSig": "", "witness": ["bfe7fbaea9e6ebafc9381e9106abc49428b4671512b0473af5735258dcf67890912a355d6966818247a937598c69cc96531125a2133b11e801d7228c73ecdaa703"]}, "failure": {"scriptSig": "", "witness": ["5132b07bcc6acfa772d3138671c3aeef0959298dfa8fa65d479c55f37a9fb161cbcc8ea2ca8d38a1da9ce524097c03023b700950b6bb5105cfc31de866ea1408dd"]}}, diff --git a/txscript/data/taproot-ref/b4b0e6e8de840a729657842fc3f326a51926695a b/txscript/data/taproot-ref/b4b0e6e8de840a729657842fc3f326a51926695a new file mode 100644 index 0000000000..1a70a81d1f --- /dev/null +++ b/txscript/data/taproot-ref/b4b0e6e8de840a729657842fc3f326a51926695a @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705c00000000fc3ba74b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270360100000034bc366cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfa0100000055a193d8039f024700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca335554b", "prevouts": ["c58a11000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "75690f000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "91f92800000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["3044022074e56ffa3a4d847aa657df9bff182c4d04ca6703dc0472e30f640c62643e846802204657a0386fe4f248370d383918cf4368819da1ff42714343fab31202303c261a02", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "witness": ["3045022100fe3d0ccde45b37f951070b3fd63855b43be9601dcd7424a46f29b6b02f10412102201c28d54a18ee32cec518e1223b89360bc9aae84abc523ec6204e9323a220be8102", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/b4c0e993f516711b0d2941c1993f065eee0512a5 b/txscript/data/taproot-ref/b4c0e993f516711b0d2941c1993f065eee0512a5 new file mode 100644 index 0000000000..0d502a8ecd --- /dev/null +++ b/txscript/data/taproot-ref/b4c0e993f516711b0d2941c1993f065eee0512a5 @@ -0,0 +1 @@ +{"tx": "8b21c5e6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c432010000009e90c1d88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44d000000000d1ee0b404151f6e000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac44010000", "prevouts": ["bb693e0000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb", "20ab3100000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "d47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e1d15be41604f0459412a6d9aa888e4d019cca614dbd3b30e8d19f8f49981c6d3eef830f28a0ecbd34c70640f7829eb7d86b0cf2da24853f16b74ab53bbfd728ea84370bdaf8fbfa2c728119f306db95ff534e2e627fabf0c000f69380d4e93e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93669e6d8ef22861e07fee4583a5ab47fb4893c942079130ef347ee1cbb0ba45047b93338c7d107e01cff6d052285c57a3fa3547f5f14e99776c0371239cd8619173eef830f28a0ecbd34c70640f7829eb7d86b0cf2da24853f16b74ab53bbfd728ea84370bdaf8fbfa2c728119f306db95ff534e2e627fabf0c000f69380d4e93e"]}}, diff --git a/txscript/data/taproot-ref/b4d27baa0c7f4d587689db8a9529b71fa55341ec b/txscript/data/taproot-ref/b4d27baa0c7f4d587689db8a9529b71fa55341ec new file mode 100644 index 0000000000..64d2e0bfbc --- /dev/null +++ b/txscript/data/taproot-ref/b4d27baa0c7f4d587689db8a9529b71fa55341ec @@ -0,0 +1 @@ +{"tx": "caa0da5f02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa6010000007ac8318cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0f0200000026999d930300049100000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac207a7f41", "prevouts": ["a2016f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "fae5240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_e9", "final": true, "success": {"scriptSig": "", "witness": ["1fb82bf0788365d728b9ff776845a4e1f6da622c3a3295c1075ab60b728775a56f1011bf9abcd25f0f6b4fb7c1c50cee22ab9747d0c3802a8c50e3ba5365cfca02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a5020f0599578459c0780e9c3b5c31a50d7e7746c1b31a86c18f61edebf412d0d89c3e8dc51e10fabf432cfd1c01e623abea27728e26071ff4f2146db7c316c4e9", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b535e18acfb42d8eca463e3d005649eeec97a029 b/txscript/data/taproot-ref/b535e18acfb42d8eca463e3d005649eeec97a029 new file mode 100644 index 0000000000..2b43c6dd95 --- /dev/null +++ b/txscript/data/taproot-ref/b535e18acfb42d8eca463e3d005649eeec97a029 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c496000000000fcc65bbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfef010000009a2231fa0450179e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47870d661d36", "prevouts": ["4a9e3b000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "4982650000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "success": {"scriptSig": "", "witness": ["80fb1b5f90655833fb2fb0d6544b68b278de03509ceecdf4541097c227c5d12b7f92fa5e55f14d4d3aa3ee121077bc96e339253480e204a5518b6f302c2e2429", "50f83aa6dbc36226127df9bd7f4f11dd44b4564bd055dc6a444b407f57b32cf927e368aff72559a720863118400c618ba399e55609f5fc1179d6b71e77cbfd1446f2330ab168753a9446f5ed4ab346f402ef05e51c45ef88771b98f5cb3754cb17134b350320e9c9fa337765e77cc50a29575fdde5894d121e8da51572acc7412c42f83ce285264318fd37fd8e7ae56dfd63970556fb593e4bea75fb66a42d319c0fb740a7fe9c2f73e0ec5224aee24d72327a9a4ee36c438856e3672e92619fdda171"]}, "failure": {"scriptSig": "", "witness": ["567eb9d22b837f710af064336faed00db3b47f08f118c0d9e4d4ba4b117b35fe779cc346421f0b4e3856060641633fade6d7bd71988fb22e87e0d9b20b9e840b", "508e48a54ec604c6853f0ff01aa13a403804219a8119d8054779accb0c4f1141a293d2696e38346244d19cffc8f2363e41711b4ae9c67c4137372a1ae83a3aad8ba8e8282e06130cab41ba926aa565f40b01ef02748111badd2199443071f85233a701e0c767d70116c7aa151e3cd4d53d487c5fb8ca6bbd939cc342f52f15d18259ed480b20b484f8afed1edb18429667758218e3b31537d0d3f833796852e94cf5a61e93738c88b321187c3e072c6fc406fa79ee9cb6"]}}, diff --git a/txscript/data/taproot-ref/b537477b73545075fe86dcab51eee08a1eff1f93 b/txscript/data/taproot-ref/b537477b73545075fe86dcab51eee08a1eff1f93 new file mode 100644 index 0000000000..5713f7dcdd --- /dev/null +++ b/txscript/data/taproot-ref/b537477b73545075fe86dcab51eee08a1eff1f93 @@ -0,0 +1 @@ +{"tx": "fa183ec302dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b530000000029438bd260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709d01000000a26a9cc804691a39000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7b8b82732", "prevouts": ["2b15280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "acb41200000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_1c", "final": true, "success": {"scriptSig": "", "witness": ["fdf6052c7128cb3d7cbe7b01584ec28858463c9e347f1776890c13ff6f9c822293d102363c44d36e16bc450b9d21ce49ba3a3f33dd04e04d559fcb38d5cf839683", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["aa09de2c1d11bbc4f812f1cf5c869732780aa67ca6e755a34bcf1829608d28f85d21aca0b3f60aaa2e90e2086ba15bf80ac55612322747d7af2aecf7c1d8020a1c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b545791a846adc504218666c3218bfaa83bc90d2 b/txscript/data/taproot-ref/b545791a846adc504218666c3218bfaa83bc90d2 new file mode 100644 index 0000000000..1d824d14f7 --- /dev/null +++ b/txscript/data/taproot-ref/b545791a846adc504218666c3218bfaa83bc90d2 @@ -0,0 +1 @@ +{"tx": "97ca34d70260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127044010000004c539de760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f0000000002921dd9f0244a22100000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48781000000", "prevouts": ["264b120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4732120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b5", "final": true, "success": {"scriptSig": "", "witness": ["3b2a5952a72457b7b400ce8af078faa4007c2fa0dc6721ac6bb4779e311f2809d329095342fb90a773f2635129d25fb0f5e2f46f4d00b2e4ef0fccebbe21f67101"]}, "failure": {"scriptSig": "", "witness": ["e2a81bd58fa54fa09bf8575704de54873d6576817d7f581c2d3e7d0a900774450a9597d4f54b16e46e1345b5c4dada41270b0e458cb4bfd3d043f09674980d1ab5"]}}, diff --git a/txscript/data/taproot-ref/b56d0867bbc5b009c7f592e99f5d598f728cda80 b/txscript/data/taproot-ref/b56d0867bbc5b009c7f592e99f5d598f728cda80 new file mode 100644 index 0000000000..8d54462565 --- /dev/null +++ b/txscript/data/taproot-ref/b56d0867bbc5b009c7f592e99f5d598f728cda80 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c720100000018c71abf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b800000000898d559f03957a56000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48759030000", "prevouts": ["83a74800000000002355212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "20d90f0000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["bf127f6c66b7e1102e7e4836650d9806400ed78271d46cc373e046582cdf8390c98ecc85b9404e8eb4b8e9e9b79bed4773fdb5eb0d950bfc127e46a8c7225e62"]}}, diff --git a/txscript/data/taproot-ref/b571a84a7a61d25a217f263add5e84836c981aad b/txscript/data/taproot-ref/b571a84a7a61d25a217f263add5e84836c981aad new file mode 100644 index 0000000000..c072031727 --- /dev/null +++ b/txscript/data/taproot-ref/b571a84a7a61d25a217f263add5e84836c981aad @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5201000000c07a9ac860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703c01000000d90833cb03dc493500000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc90186125", "prevouts": ["5c76260000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "80e51000000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "", "witness": ["3044022002fc22cb5825c98d7bd61746fa0370018ac55f3ae979ac16cc7c8ebd432135a8022069913fe82371b7bb7b9e5791aa9f2734f4b9a2ec187bfd1342519f8d227b8d5582", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["30440220540cbd88fd5b5f45e8d5470557e27c89c6379a2a87dc3d2e15536008fe93c215022061a594385c325818d40303c0489d5f913f71d62c722443f0f080e98527afcae282", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/b592aa01c9d16fda0673296c91e16d85378ef308 b/txscript/data/taproot-ref/b592aa01c9d16fda0673296c91e16d85378ef308 new file mode 100644 index 0000000000..43dbb651a4 --- /dev/null +++ b/txscript/data/taproot-ref/b592aa01c9d16fda0673296c91e16d85378ef308 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703100000000aae7c1ca60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127001010000004823318f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270060200000039d291e50304902e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e70b3b865a", "prevouts": ["076b0e00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "6753100000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "176f12000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e144d0ff37a890039c0ba21f76704f7cfad8b9e86a035546ebb7c5a6ad2c2135a28cfae4f24e00136258a4229df9ce1533cc743f70cc4e5c0214ad74c09f63cc0b9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bd5fb013d649a0b113a2236243da0be0326b44fd96f8b22737f30239849c7b4bc63b209b29a3611ab6267155884a7f894b498570c9db6a86ba3046458c9f77af637f7085334bd6ace67733ad5f759fad65febfe656f63b2b30abaed1d2ea29dc9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}}, diff --git a/txscript/data/taproot-ref/b594302e03843a9f9c9551e5065d334f5788b18f b/txscript/data/taproot-ref/b594302e03843a9f9c9551e5065d334f5788b18f new file mode 100644 index 0000000000..640697cecd --- /dev/null +++ b/txscript/data/taproot-ref/b594302e03843a9f9c9551e5065d334f5788b18f @@ -0,0 +1 @@ +{"tx": "4b63d655028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43401000000a620dba3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1201000000e5f7c897016aae05000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374878343df53", "prevouts": ["fabf390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "197a490000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype1_byte_keypath", "final": true, "success": {"scriptSig": "", "witness": ["884d96208de777f6364e510bbc81304d672ef7db1a15dcf8bcb2f398b0883e272073807a37ffa0461435a5af025f423ca0b2d9b5d35bb0f0d8c47a35f4e8d8c001"]}, "failure": {"scriptSig": "", "witness": ["884d96208de777f6364e510bbc81304d672ef7db1a15dcf8bcb2f398b0883e272073807a37ffa0461435a5af025f423ca0b2d9b5d35bb0f0d8c47a35f4e8d8c0"]}}, diff --git a/txscript/data/taproot-ref/b5c23ef36f914bfe6734a376e3ff23afa4056cdf b/txscript/data/taproot-ref/b5c23ef36f914bfe6734a376e3ff23afa4056cdf new file mode 100644 index 0000000000..905529a43a --- /dev/null +++ b/txscript/data/taproot-ref/b5c23ef36f914bfe6734a376e3ff23afa4056cdf @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c700000000bbe4adda60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708e0000000066bff0d104cae04d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc00050000", "prevouts": ["16044000000000002251203931946bff2228105059183c00ae321e35895921175a46193bb089ee2b225687", "44b610000000000022512088bd92c864bebf276ea78553bffd47e68dcce8f95537d9019b0b776be36b3d44"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936269f9110b37a3f6304bf0d8aebdce70c5dee6f88f5a6dfb0bad103ece716e201"]}, "failure": {"scriptSig": "", "witness": ["6aac616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b5f858c267b5596e80a4ca9e1d9d9fc97493a161 b/txscript/data/taproot-ref/b5f858c267b5596e80a4ca9e1d9d9fc97493a161 new file mode 100644 index 0000000000..284f0bada3 --- /dev/null +++ b/txscript/data/taproot-ref/b5f858c267b5596e80a4ca9e1d9d9fc97493a161 @@ -0,0 +1 @@ +{"tx": "603fae9901dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2300000000c5bac1bd04e5355a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac8e010000", "prevouts": ["62125c00000000002256202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["b492d21c321102276ae54fcbf77e697296436ec49857e79b4e0a7584486c791422a1272287f86f4f5d3201c76c402eb6c628126578e460265310ed7aea9a1c76"]}}, diff --git a/txscript/data/taproot-ref/b5f894878cea25475b042e2e6dccf49267130d0f b/txscript/data/taproot-ref/b5f894878cea25475b042e2e6dccf49267130d0f new file mode 100644 index 0000000000..6bbd52b400 --- /dev/null +++ b/txscript/data/taproot-ref/b5f894878cea25475b042e2e6dccf49267130d0f @@ -0,0 +1 @@ +{"tx": "d86b930c0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706b01000000d429abdc0248030f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4873da65f51", "prevouts": ["e828110000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "4730440220457a47572b23dd0d2a48139bbd294dd602f0cad076ac14ae0886ccf57e812f2602201a54df631df3eee230d529cf98784ada27e28f7c38a4467e8800040b41e84ead03", "witness": []}, "failure": {"scriptSig": "483045022100936308966ca9b9c527e9745cf7d2b5f2967b4bd835046a2d2973600a87ee3267022004bb1a268e144013a0ebd54a6206a35437c296f6b7e0a374c7bb1c2406b7054f03", "witness": []}}, diff --git a/txscript/data/taproot-ref/b605240fb46dc5b5a62d8e4fe44362074c17cd79 b/txscript/data/taproot-ref/b605240fb46dc5b5a62d8e4fe44362074c17cd79 new file mode 100644 index 0000000000..7ddd1bbc2a --- /dev/null +++ b/txscript/data/taproot-ref/b605240fb46dc5b5a62d8e4fe44362074c17cd79 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcf010000008c867549bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe200000000ef2a1b630206169c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71bbb9c40", "prevouts": ["35f922000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "d5937b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_1f", "final": true, "success": {"scriptSig": "", "witness": ["3d51d6ffe85877bd6004b393ef7f15b111ba6d02fad2f9f9661b53daad79f924d545836a6feddc88ed39436c384291a1bc5fcca53b2a2485290361ddb750df3603"]}, "failure": {"scriptSig": "", "witness": ["b3291bee08e4d9de85e3a72f891616b457b12e09495bfa31a8e9210132fb83e42ba7e5673343d4167b4c92aa327ef24486d03271070cb2a14998268a78b589531f"]}}, diff --git a/txscript/data/taproot-ref/b62a40520073f939f2c0c9f173f5df055dbcfe5e b/txscript/data/taproot-ref/b62a40520073f939f2c0c9f173f5df055dbcfe5e new file mode 100644 index 0000000000..2d24a5ebf2 --- /dev/null +++ b/txscript/data/taproot-ref/b62a40520073f939f2c0c9f173f5df055dbcfe5e @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb70100000009c40cc18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43f01000000a76706c2046e9aa400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a61f296e39", "prevouts": ["7e7f6f00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "395737000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "47304402202c91e7f01d27010cded1cdf6210b8e9c1aef45a1d3cda35c826ecfa6534754bd02207524e69961de2b9a3d678dd3525112b09426f58be3a27b56d6fa9add335e84a15400", "witness": []}, "failure": {"scriptSig": "47304402204c06704c3428f9330bc27477f70a27c9bae8972f8738dda3275092ca46a2652002203649cda029cd903c61848928680ddaaf5159c5163b6e0cad87e50a043c64a8b4540101", "witness": []}}, diff --git a/txscript/data/taproot-ref/b646f8b3b9e38907889dca9d182ffcb148c5eb86 b/txscript/data/taproot-ref/b646f8b3b9e38907889dca9d182ffcb148c5eb86 new file mode 100644 index 0000000000..88ee50e33e --- /dev/null +++ b/txscript/data/taproot-ref/b646f8b3b9e38907889dca9d182ffcb148c5eb86 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c455010000002e8aa283bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1c010000000ded30ab019a4146000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478713000000", "prevouts": ["2248400000000000225120fc4f9d8aed21e545c10b3b4fb5f7ffa2432ec2f4c867e738428f21cc99cd5336", "4c276f0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["ea4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93645dd27374e1e3840d53c2eddc23e77f3daecabe9190b2b544b03414f960ba3ee83976a7e8bc20bfa4c53f64ff2df47d867849c8cbf6df51014735817968d498535c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}, "failure": {"scriptSig": "", "witness": ["4c52ea", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4209c1516ced38e23a698f2fc59f604e56c30e06a1cb7b1c589f3d617aca8a56aea47614063a58d04deed750fbc1e2c170629d7889e26e95c64d3b658c7538905d194d5538f9d0578f97aaac3520494006fe8ed5ea4118540907b045326452835c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}}, diff --git a/txscript/data/taproot-ref/b64c6d5ba93dfc04d7a168f3316abb231668ca1a b/txscript/data/taproot-ref/b64c6d5ba93dfc04d7a168f3316abb231668ca1a new file mode 100644 index 0000000000..1ba30d12d0 --- /dev/null +++ b/txscript/data/taproot-ref/b64c6d5ba93dfc04d7a168f3316abb231668ca1a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb600000000b0eabc15bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe500000000b52cf8660410c1a200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47874be99750", "prevouts": ["4bbb220000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "61aa810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_11", "final": true, "success": {"scriptSig": "", "witness": ["754c6bbbbb47123cf5061653be919e1c7e9a44b19d1ce850dda4fe02230e9d2ccca6bac0eee738facf790fce0061d544554a12a0db3a258a8b1160c4bc835e8282", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a3ff602ec2a4530a3b327108b02ffa864190fea846935b9da5199c0fa9f6e25833749ca4ab1672e94bb4e0c8de654f2190f24c0a1334f37b25a7954e4b8985c011", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b66c4be98c84d4c925dd2af48a775cc657d0344d b/txscript/data/taproot-ref/b66c4be98c84d4c925dd2af48a775cc657d0344d new file mode 100644 index 0000000000..d185c645b5 --- /dev/null +++ b/txscript/data/taproot-ref/b66c4be98c84d4c925dd2af48a775cc657d0344d @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127080010000003832b55860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f600000000395e212301b0d0000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79609c18144", "prevouts": ["126f1200000000002360212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "1cc50e00000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["fc2469f70d2142b6c5a1bc787c6753454192d596cfa5390f25fdd84f537c2ffc2924d14846e63516a9c8eedfa1d017bfc24af99d1ad2bb0ff02030359d376267"]}}, diff --git a/txscript/data/taproot-ref/b6737bb08c29b827385850c321cf5d8413acfef6 b/txscript/data/taproot-ref/b6737bb08c29b827385850c321cf5d8413acfef6 new file mode 100644 index 0000000000..7eff83e8c4 --- /dev/null +++ b/txscript/data/taproot-ref/b6737bb08c29b827385850c321cf5d8413acfef6 @@ -0,0 +1 @@ +{"tx": "7712fd3c03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc600000000fa2131a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3a000000004f6247e1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff3010000003fb10ede01318d5900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac50880832", "prevouts": ["21d5720000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "a3c12000000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "1de070000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d34c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08279688f26c44e4c38ecd8996ded351dfac291f6a9fe2ce500158a378a1caa9ee2234a5a049dfcee5b69ebdb7c70e6242c675d1abc9cd58c84d7f9a8e8e1277a43a4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}, "failure": {"scriptSig": "", "witness": ["4c52d3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dac4f378a9a739f7649f71d424bad959e415e848838a94c69104635e832cea3b9dff863108f68b54d204f4b43b2fddebfd69630b8c1a20ba8be96c4e7e2557a5003e045cb689fe4fc6de332c618eb0cdce02c2dd8aae7c6dd6f70bdbaede2814"]}}, diff --git a/txscript/data/taproot-ref/b67e4f02f0ff506105dfa4a0171d89ceb6d26cfa b/txscript/data/taproot-ref/b67e4f02f0ff506105dfa4a0171d89ceb6d26cfa new file mode 100644 index 0000000000..e1734d0cc8 --- /dev/null +++ b/txscript/data/taproot-ref/b67e4f02f0ff506105dfa4a0171d89ceb6d26cfa @@ -0,0 +1 @@ +{"tx": "06cb7a96028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42e01000000df4b95b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3200000000adddb4a50374fb5d000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acea040000", "prevouts": ["f3563e00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc", "fd30210000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063cc68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823b9ff415677aca4bd8bea8fa89699624d8c5f018d44ea89c1d7716b3c6d0480766d64d66e5a8ef59726e977ff218232e5171732e5d132f479dce590bd8ea056135478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93691eb1c3299922e83783cf541642d83e80fab5b37c6dac002e0721b387482d418e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0d00ae7d77688765097c61dd6dc7203a99b1de19633b0fe895af4a245d0fe1ab9735478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}}, diff --git a/txscript/data/taproot-ref/b68b738158b1aed99780946dcf5925a67eb68cca b/txscript/data/taproot-ref/b68b738158b1aed99780946dcf5925a67eb68cca new file mode 100644 index 0000000000..70d0028c7c --- /dev/null +++ b/txscript/data/taproot-ref/b68b738158b1aed99780946dcf5925a67eb68cca @@ -0,0 +1 @@ +{"tx": "103e89be02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b830000000082ed4bd360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709600000000ede849cf0184480a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e70c17ce26", "prevouts": ["149c1f000000000017a914bf07e8218e5a3c93fa381357100b6dba1ff2a91287", "e7361200000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090267fc598d5d0990aab5eca74a300797727d5da5385f212423b091cc7f2acfa60548df3a5cb82ee4c876de16da801e2ebd5fe8475cc30cadc6702ebb12f00b5f8539eaf618a09b5181b85803347fb9f8e598ae19bc63ae84dce1ae3f9e8e7756966ac249855ff750144e912780ddd39c2a5b70f27bff87d7f00fd6285e51ef24ad582ae24bed990085c4cd13b0d32be8d6aee7b079890ba38b8e726cf7d44e1257930e2dd64fd41cc58722b4adee6be37aec54fb05e620e0c5b5d63802f527cf867e5464d1f0cc86a192d5e93a8d67bca994877e0c81d3b0de7419ff86db787da60b4172f12dcd47bede99d2ffbb72d43f802d915f8d948e41db713e7233e210523126e4470165dc66e35effc2da885e5c464a64a6b899fac7fc25835b4ecac0b8c07380e37a9fe968a4b4860fe840763e665c85d5da803d29f5e5e32b896b351f0cb77ba4a8584a58a1493d06cd69dd2b1ec4308ba00bf6835c6c9a23ddb8f1799d4c886966b226b1d5090677ed11e50f295bc0e61f484dd42e15dc48484ec0777f3b03efe6110ae38a3e3aeff626cdab476e673b68804f5af62c17895fbec895bc6a42c3706cc48774dc6a3377867b82ae4421478d29a97d78ab1a0cace6b97b123de08f39bf1f92ae6603c8b0584092de737e7a317bc5141764344dd8f4fffe096f4b360f4111657b613d3eea8d7b7d173fab23a4b67316419e7fbc8b7030a418d1eec06be385482375", "437d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faeb1e69b2064177327a27f356e828bc3139f73429a3608cb2420b3294d8fc1681cc59ecfca53d850b1637d6273d8700d7dc702fb5baeba7c0d1778aadee75959b"]}, "failure": {"scriptSig": "", "witness": ["4d0902783b6c6baf1e098e5de445840e1ee526e9dd14dda816a7e697dac5d31be1ef733973aa233c2167087e226a7b8a6ce4e0a59fecb61f28bf9a74de3e6c796c7d73399f9de452978d7b488e61c3e232707b4abecec3c5482f190e16642efac6fc8cb99eb6603b226440193c324c9896b2b3ff646e40dba03a8b0e16b5642f75792a7c7d524c4e6b3150aaf6a8b081494783a76a5c0ea4cc4e206cad37e0392f33b5b31b0983aed42db4660796319245b56c3b13dcd909370631d91c65bcce5cea7f80ef52fa90352d222dfdf6c8af7d7becb37405ee4266af2d36d34a974bfc828ebf27242b370e4caee6d399117df0e27a33f74b3c0780bfbeb43ff6649cbad7511396ba9786b7ddcd021c5752f77632dd0354dbc44b30cb638fdaf6be8cb03ce428835dc962809414f2fe1a9a5927c648c1f0941256175f203ee8bde81b6320f2e11683e77837d7a14dba5ebcf0e5fb2c42febae600f4a6f5610b47a7a16c8989c3b413cfeb797bcb66b73df50dd124a2ff1f798b0fc5b17c5faf2f98dcfe9584ef1ec7239e3fb29a136a31e1f96e3dfb65b098fbf9273cbad3879f90e0ae01c8fbf06a7a09c4aa8c1117b7ffbbfcb49a1b32d1dea98ad54762256b5c871a52da38b8c2f9b1a4d2aaebd3d6a6dc9b0eadade95ae3d17ad21b6ecfe9dd73b775b1416c8d7c3a06f8f3a6e5b4af79e6993b11a6b6870e3c9e0a78ac6a6b16eeae2d344bd22fbee6f7107b75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824274b5900613cb2e14ccbb49f92be42e903262ce34f92c4d0a103e0ecbbdfe862db79fc77699d349d3583c063c1ca5cb78d93faef419ab336fa45db1a25ff641"]}}, diff --git a/txscript/data/taproot-ref/b6df4711f8c031a1f3fc609594a2746d2d4e3d62 b/txscript/data/taproot-ref/b6df4711f8c031a1f3fc609594a2746d2d4e3d62 new file mode 100644 index 0000000000..547875d1b2 --- /dev/null +++ b/txscript/data/taproot-ref/b6df4711f8c031a1f3fc609594a2746d2d4e3d62 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1102000000e34a2009dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bde0100000060eae28fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c540000000002789cfd01dce73200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acae030000", "prevouts": ["6cbd6c000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "4c421e000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "b0574a0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902ea2a8543d58089589a40b07f9ee7d8e6ca0b93852ee3965f129beca3d7c8c31858b1e7cd9247161961c2f08ce0d61fed0332457240000658dab3fd5eeadaaeba07f8f0114379a61860299044b9887ed039c5468a2ad50f2d9c91820990bffe87f5a49fb8c34aef2ae4d76dd932bb9256d3aa3c8b513260c6b544025eb4eecba0a138ce6f273b00f5c5a904db028f1f2fdc4ff0dfb2cbda1929147478f84d9fd3bc70b914f3299fec1d849be2dfe5e51902dec6e1c88bc24896fdbd7045b7ee7f5807f54b27f6a6932e7ef3b118a75f9c1189aefcd3b0d68151acf6db87aa01b9e657354e9502a308435d7cdbc2039e46cb2de6027aea7d5f7a37bd3587ff6b27c787b8eb3512d87288180fc03efccb6f74cc1685ed9beef4a7f3dab3cd913e93ef088c060378332ee4e4ae97bd42ea901b63a5c87bdce557173a84e659c9ae69eff47d8a5f945305ccbdd689bfc41da73de2b5d6b0ab8cc7c69490c6187d4dfaf38e2628d801bbeaab7a05aac804a3f23a73c0698a3d4462d30f7d1eb3893039b2a0bcdccb5f529a42fbfc5ff5daa945f2c7e28e48e151def0b9a53f5e993174cc6519630b4ae1678ecb77195907b392be24fbec8b2683a932488ee9f2f85cb346a06a033a8e05c686407a9eedd676653ffa7ba700aef9bb5fcb36081889f89a2e9dd89088cf4a9208cdff32ba6450ae0b74f891a15eff8a7a5a1a7905ffd6d70a56821de4e8b8036e75", "8f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad1d8c040d98f7e016b556934cac423be94b74d6bd2b0327759368d6fd53a8bada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457f8fae370a255a677f2f729010dbb329fa966ed9a0dd82e5083dd7ea90426dc47"]}, "failure": {"scriptSig": "", "witness": ["4d0902bfbfda238b86155a766904b0624aaa9ae74aa5c10ce197c8c229b94e56a4fc85ceed26821a1ea73c92033ca70e957b8dbd9a9b3abe4057eae50b98894b4333e65e01058f17698b3f88d538617a3b07ba3e007601e1f66064a1f6bd45e603a182b0240b651af669f5567b1e754e8f43c5d14e1b42a55a015c9abc0d3483b97c5c8a26a6eb12f9fa7535ec5767928c2660e60d0dbf72182c6bd2d6a448bb4bd2e942a76290c5bc83fb46a8ea2642f3d34be05801e93805c1b4bfb9a63cfb81e3bc2bff57ba188746dae79077b27fb150d02f6ded4cb71e56a2a4201728d78a63e1246b2ffdb6d4b3a36637d0e950ca84feca553e8f4a8cd1102deeaf3ef5429c4a35829b4bfaaf93a8d53b1bee41947ace99d1081c0806edc8a8c7d2d468edfa9bf53bf7f73367631579c0e54dd7c58ecf8986974d3294b1824e0ef99db38354f9250a79a9157233c47626f1883734b3ff6443fe8f2cbe4ac3711ca63560ed7c877a793b4f0d0e8be7a3fcd60a22d5709fb2a255df764ccc8190fed807f26fc4e7e70e265f752aa310243b5a3d5ecbcf84e4309cdd340b0e93e1b2865ca37530dacd4ce6921d48273c78ce05be0d8e1734aba468ad940209d8dce8a20855b9009a7c013344fa43a591369b52d95d7257d5679ce5727609981a2683994d62c40d5be554d9d3a5b857179e00cd75a5a9a27faf76e0737e46d6cee23d300965f6ab002262d0dad76626ddf175", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93659bcb84e47153ff4e79014703dffadeed7ba3d8123da0f5fd44832628b9f5c46a79f40e3d51694d686dc3a1ae4413ff10533c43d32121e1e1cac9518583e4de2dd5f972b05e2f18c3e7c797b604beeb8879a3af7f1e10968a0ac8aaf9d489fe7"]}}, diff --git a/txscript/data/taproot-ref/b6e1970eedbfd9c6a474d94f15274687adf86c2e b/txscript/data/taproot-ref/b6e1970eedbfd9c6a474d94f15274687adf86c2e new file mode 100644 index 0000000000..0662f878a3 --- /dev/null +++ b/txscript/data/taproot-ref/b6e1970eedbfd9c6a474d94f15274687adf86c2e @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706c01000000ba310ba08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41100000000bb14c6b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b42010000002e7adaf704ccf9680000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987d84ad23d", "prevouts": ["3b2c110000000000225120e0fbe9053c6d2a439b1df3d9c89ed0e68b8279a92dae6907e23437dbb3b4029a", "a9cc330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6891260000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "2c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa44f4b784770790344d4d1238d6245096bcc9e2ff88373fd56766bafd01d3e44ecc62bd398c27c2bcf203967681d855a98ab83c6f29a4f091e05b1c584209e732"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c923690eabf3e888647cb597bd60e90f4b3beb7649a22c5f2f6c3fb70e5402f8da733fe71e3ce0c37752cc3ed22f63651cf62c657cae6a4db35497744053504dcc62bd398c27c2bcf203967681d855a98ab83c6f29a4f091e05b1c584209e732"]}}, diff --git a/txscript/data/taproot-ref/b71c95db43c402381d9a9673ab063f0735eb1d31 b/txscript/data/taproot-ref/b71c95db43c402381d9a9673ab063f0735eb1d31 new file mode 100644 index 0000000000..c49d1b06a3 --- /dev/null +++ b/txscript/data/taproot-ref/b71c95db43c402381d9a9673ab063f0735eb1d31 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3200000000bfb51208dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf700000000ddd630b103d1d6aa00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796cb000000", "prevouts": ["b68d4f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ec455e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_4b", "final": true, "success": {"scriptSig": "", "witness": ["bccf6e13050aeb8ac005e70d8018d8107e34f741b2369633964dbb497d651d804189b0cddd15cec8b0e3759f14988585d474f90d4ab502756081b2a349860d1981", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["51599d223b7052c676a9454d653433b56f94f2697326ec796cd3b37efa0d666e3e00920c32fe2613350b98393a273c95605480fcf1b625dc2a4b43c7973c7ff34b", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b71ebb4f48a1c213c17c8b1e9166cc38b072dc9d b/txscript/data/taproot-ref/b71ebb4f48a1c213c17c8b1e9166cc38b072dc9d new file mode 100644 index 0000000000..81916fb108 --- /dev/null +++ b/txscript/data/taproot-ref/b71ebb4f48a1c213c17c8b1e9166cc38b072dc9d @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3500000000f75e818ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdf01000000a0889ad4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b87010000002757f8a404a146990000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875dfe903c", "prevouts": ["79b65900000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "221d220000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "80fb1e0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["dd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2823dff2991922f121728685824385d20f53064595141c17e375e09b6c17310e1f075c573bc42ff1b5fdcad1a87ebee849fc17bcfc5c414a2a4f901b5a19cd44f11caf36eb2bc7b2ba56ad05f43983925bc55248f9b66a13a767efbac40c00"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d5adfb4b655ff7e7194216f0c9ec7a59b69961b08133bf278a8ed5672f2f6a4fc12d2886f924517b8c41f4755cb69ff55f68e740076f0e346dfe7ab1da23e202491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}}, diff --git a/txscript/data/taproot-ref/b72daece9e0661e0bd4c8a41d26c73ba8eef4882 b/txscript/data/taproot-ref/b72daece9e0661e0bd4c8a41d26c73ba8eef4882 new file mode 100644 index 0000000000..9ab237b428 --- /dev/null +++ b/txscript/data/taproot-ref/b72daece9e0661e0bd4c8a41d26c73ba8eef4882 @@ -0,0 +1 @@ +{"tx": "81f75e6703dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cae0000000014a05bb260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127036000000002ce4eb9c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702201000000586df89c03fad66a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487470e335d", "prevouts": ["52384c0000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "aa2a13000000000021521f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "06580e00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["e2724605c4d92803b851d6620f06e0d958a4b1b46f4b00b63c352345415d348718303dca66502c00dbb004c294b733f60a36fc50534cbd729ca50ea92420f08f"]}}, diff --git a/txscript/data/taproot-ref/b795709244b876a1f75a1d801c74732832748ebb b/txscript/data/taproot-ref/b795709244b876a1f75a1d801c74732832748ebb new file mode 100644 index 0000000000..95cc07fb81 --- /dev/null +++ b/txscript/data/taproot-ref/b795709244b876a1f75a1d801c74732832748ebb @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf19000000009d3e6ea68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44800000000855c81ec04bce4aa000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478709000000", "prevouts": ["c8fd7a00000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9", "b6d4320000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_fe", "final": true, "success": {"scriptSig": "", "witness": ["73f0609d8312d50f238ef85197f18969449b5e42eaf67672e52d267bc2ce04873cbdbe489a991fbf55ce250b5deeb979d151f00834aee929b2fb5fc830c7e4a783", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["6759884cd9dd6ddf52603745cb0d4119162bc3252a8c5ecc6387b2ff47b0b12c26281611269371ea660cb960f3c06c3a0d343d0e4135a13c1ffb4d6c5e43ba69fe", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/b7a501079daff65d0e768364b11ab44c69980aa7 b/txscript/data/taproot-ref/b7a501079daff65d0e768364b11ab44c69980aa7 new file mode 100644 index 0000000000..a30d506805 --- /dev/null +++ b/txscript/data/taproot-ref/b7a501079daff65d0e768364b11ab44c69980aa7 @@ -0,0 +1 @@ +{"tx": "5fbef0bf0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e4010000002fbbd3ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702400000000b17fc38b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4020000000022f32a9201149c1700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6691b05e", "prevouts": ["0bd8110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "02e3120000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2", "37553d00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09022809a22ce415cd93da3551dc7ffd852852cab6f35d23cb1d0d7e613eed9fc66abf2e19981a69be7a410c3cf6dfbbc6231d86b6a1e3b66a6c09bf9e862619cb01695f6cd14c2f38ed754875265275921449bcd49ae4f519d7991c8db15da5f847cf9ded8468e0d7d8869beb37f5a0966fe88dea7439c83f28be66f6310f2ca48ff2c078312ff7dfeccf1571f35d440fa1621e437680415a1db4328534cc3b94b59bf9a302e5df863888cc6bce065cff43d4ffe433ab606a3c424981a47ec784cb08bc42021ce359eda8dc514f8b5483ae94b96a1d9b4fe6e24acb41cf3e61d90828d4df299ad7c8e657765c03029efbe005c678a7a749ec5e37a58c527bfef0de1cd4eeba7a8dbf2ac25609e6b8f80781f774cf2e8edf1c32937d430d05a32daaef6cd68e07d292d7a826c330f1fafb00bad4c8b81b8f1c7936c7b5ae82af8cf3d996c01da49943982a2acbbd30e5567f2ec0ae9d162248bf58a345330711afb2fcf9b78220b5f12948efc31168b9182ccd59653533d984156ded6008c8939c8671e8c11f727bbc6345131b4fad70476f8d778655b6183ae5e15376d7f2ccc060272d13e30c21ec881b046f01434866929f57ba84fc81790abf3e5410f472b77a69f45fc8c9d2c67989736834a3b8b8cae459096aaadd335aba72b1366cd10aab3a332cef8714d060ba2dc11456a0365a972f8264006ac38f77164895932d9ba45ed2fb62e287375c3c75", "317d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93631b55cc0c5b23f0878108315b133cb569cbdbe54eced0808ecfcc8dcd3b5cd21e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84187c77ca06c68e3a239e6fea37385de49c0e93bf09ae3a990bb588f1e26193612f65ebf74c8b951b09da599ea3d6f486010b8cccb0a2142ec39aae62c1ca3e7"]}, "failure": {"scriptSig": "", "witness": ["4d09029ea27b7aa5fec2c6f890a40deb4f7d968e92c778d31ba59576228222aa7f3216dde170cce0627ef958c3ca920e9a2ce49e8b562413fa8aac8c9c45909fd83bd56eb890f642f19abeda30106d70e81c66d2c0124b2ce5dfd2f284f114b16b872b5b7025a3174492b681d51f78978e3dccbe7cc543ab7a4ae59366d1bddf226939c70981719d45ab400069303974689b4708742b6847562484d343770a7271a4ba3f3a4247a862d6b34382f6de0b68669b67b44469b5c7149539a3a3dcb688a6f700715e79e08d81b190afab120018763bc5ecfe7798b36d5f3c4fec0eb709beb648672433ee1ebd5e41649cfcc3f8409b317fd7c2ba3391a18f299d08542ed3ae9b4d8a498bf4b694a2ac403ea0629a5f4b4b448cabfe8696eb3856fdcc13b8724240481507aa3079024292df65d5394ea4f58567eb577440c64b4acfe485eb01cf96d018193c9e795e7d40af5e4f6d83b08be0a28c12befe2fc20b6506912cc23eddad14ec750fff90f33ecac2e82c6decce27bc4bf5da9ba9ca6746d42f16a6dc4cdd26a5f234baaf7a1b109f7d4c5bdbf3b02f86f69ca32abbca3b2934be5063bd6b65f96817d5248df49fdc3daf99740241d2d80763f6a6f7c578d57827886ec5513f3da4d4fa30f4776b3a598a9f9ee6337f4f198597f093be704d76a7e557dc1001000c3d6d8640a5e68dc1628df821d3a79f8ce3c70a120d15e1bc23b191e6a047648d7a2b9075", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f104fd43f647cf48bfa03c2b2a6872b15b37af0458c377c74f4ad739ad26066de4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84187c77ca06c68e3a239e6fea37385de49c0e93bf09ae3a990bb588f1e26193612f65ebf74c8b951b09da599ea3d6f486010b8cccb0a2142ec39aae62c1ca3e7"]}}, diff --git a/txscript/data/taproot-ref/b7b1691a7efc0fca08ac5b931ccb3dbf5aa891d8 b/txscript/data/taproot-ref/b7b1691a7efc0fca08ac5b931ccb3dbf5aa891d8 new file mode 100644 index 0000000000..16277c0d02 --- /dev/null +++ b/txscript/data/taproot-ref/b7b1691a7efc0fca08ac5b931ccb3dbf5aa891d8 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5301000000c8edde918bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43e01000000b111da8a0260cd5e00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac99d03b50", "prevouts": ["5d9f2200000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327", "3afb3d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_bc", "final": true, "success": {"scriptSig": "", "witness": ["f5dc1e9f5a2e36ac4c1d6ec4efe5c9ba754ed1eca39316121f45cfaa9e9393e6aa45ab57aec86393120554af15cf16633ebf8683f294b241ddb9349c2683927101"]}, "failure": {"scriptSig": "", "witness": ["95f49ff7c5d6609b50c638245a04fe676228f552aca436297f596b9c7ae88f49d470cffa6ec0b8a5658731c9d527af5a8c5070f2c37dd8bc297d0976552f198bbc"]}}, diff --git a/txscript/data/taproot-ref/b7cc907a8b0d3c3e1994be68a40873b4e99a5f78 b/txscript/data/taproot-ref/b7cc907a8b0d3c3e1994be68a40873b4e99a5f78 new file mode 100644 index 0000000000..65a3328c56 --- /dev/null +++ b/txscript/data/taproot-ref/b7cc907a8b0d3c3e1994be68a40873b4e99a5f78 @@ -0,0 +1 @@ +{"tx": "2bd6955703dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca700000000c8472f80bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4600000000d13b7096bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf22020000007262dfc601ef371a01000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac991f5956", "prevouts": ["846a520000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6", "8cbd7300000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "3c5a750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_de", "final": true, "success": {"scriptSig": "", "witness": ["60ee1849f70397dd53b2c5014afd28ac9b5168cb4fd39d9cfe2a33bcb509d273118e3cd069227e56503feeeade700105f347e8f4db802570c9b84f37bb349f09"]}, "failure": {"scriptSig": "", "witness": ["811911d8cc800e5bac115ecdd09729f4ec4055b4c97e67cb4b609bbb718e373cf0ef14f4c237699562e12211b9427860736810871689943baf1238885b4aa45ade"]}}, diff --git a/txscript/data/taproot-ref/b8079c5bdcff63a0f477e2f79dd8aaf4928abda7 b/txscript/data/taproot-ref/b8079c5bdcff63a0f477e2f79dd8aaf4928abda7 new file mode 100644 index 0000000000..74eef9fb59 --- /dev/null +++ b/txscript/data/taproot-ref/b8079c5bdcff63a0f477e2f79dd8aaf4928abda7 @@ -0,0 +1 @@ +{"tx": "83cc59aa02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bca010000003af476dbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc6000000006aef47a201686f3a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac94020000", "prevouts": ["5b6a1e000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "26871f0000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d3aac2ee03ff761670d75d570c1e6415f11113d875e7640d99f370f2f823c02e22a66b502779d6b233f9a5a075cab3b2a5d3e595dfdfe607248b2d2d8734c7b9f4d7ab890a2001a7be6cb25cf630fcd24657943ff80a7c5a11988ecbf9e80e4620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360c9e55bc2fe3ef8dfdc81a5c5017743f46c247ba513700e3a77c0392e087a2b01863a41bc3dc2a7aa524e62e66740ce82713c2a995d68e9803c1affe373c89601029910a453e765cd82c29c3b576a90579a453f3a941b6b6175fa922e9a13196"]}}, diff --git a/txscript/data/taproot-ref/b809617c671f07711eb77d11353900df3a1020b0 b/txscript/data/taproot-ref/b809617c671f07711eb77d11353900df3a1020b0 new file mode 100644 index 0000000000..e100c8f0cb --- /dev/null +++ b/txscript/data/taproot-ref/b809617c671f07711eb77d11353900df3a1020b0 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be200000000ee786e5160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bd000000003fc93dccbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5c00000000b8e3e08703aa61a2000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a678fb6231", "prevouts": ["1b322300000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "217511000000000017a9141a56e0fb41afaf4b9e6feff1797087c69015162687", "f93a700000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["7e4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4efe8c29822d261ccff72913d153de8b886275dc8d15210ffbb43fd45d8b4e8e401215e29d5d13de3b6ed62165bc3378402ce71158bd1208562fc299f33fc22fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}, "failure": {"scriptSig": "", "witness": ["4c527e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93623f8fe7108d8d2644871df6900a0fe81471c37675c8944fa27134bd5cabedd2fbe9bce0da1a8e0eb2f55600b1edecb05394963f1d059e6505f0ccee9d28b62f6faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}}, diff --git a/txscript/data/taproot-ref/b83c1c0b8c3121745e8e5a5de023dfb379736329 b/txscript/data/taproot-ref/b83c1c0b8c3121745e8e5a5de023dfb379736329 new file mode 100644 index 0000000000..1e4efeda6a --- /dev/null +++ b/txscript/data/taproot-ref/b83c1c0b8c3121745e8e5a5de023dfb379736329 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45c000000001eec319bdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc6010000002d1bd40e03dd94810000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79633219028", "prevouts": ["7cdf33000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "d3f44f0000000000225120d1b91456e68c356a2c859a7d0862df581c6fe76c88121c19c4713ce29cfc8e45"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936050e4717a932781b58420bc98b1449b462749c8b90f030d521274e1d9d2820a1"]}, "failure": {"scriptSig": "", "witness": ["6aa5616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b83df399d9754f536f1c099dfad005119a65be7a b/txscript/data/taproot-ref/b83df399d9754f536f1c099dfad005119a65be7a new file mode 100644 index 0000000000..c413f3467f --- /dev/null +++ b/txscript/data/taproot-ref/b83df399d9754f536f1c099dfad005119a65be7a @@ -0,0 +1 @@ +{"tx": "32272e2d02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc400000000cf2c1cae60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d101000000bff585a60172ae45000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69d78181e", "prevouts": ["f8e8500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ae000f0000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902fcd5ccaac3277274c885ecbd13cd7175500623b9fb97ff2f869e2692422865ba8426b29a2035ebbea3e832e99a94d94e6dac5bdbc1bb42d9c1f8f70400fb21cc130256499e4516eaa82142063a796eeb2961ffc895a7b136a5e0a43990d45691af70865f1ab456e27d4fe486fc548bd83dadbbc70e68d20f6b971256042465618655e7c3128ecab20b656ac884fd444341babf56f6436069541e0ce70bad083ba2bc3a792bd0688f057880b5efe97e51cb8a0562d4aa9f4d93deb74dc24dc6b8a88657914dd12b864c65b954fa26ea623a471878ebef7d6420b8267ca25142dcc545e12ab34bcb2361ee6170a765e7f2abcc14d4e7b587f72939be775268ea88b4b29b0c21cbad0972f1bc16d4c28a6e289ecbb271faba2a2245f65d76a07196fad19ad8561f01a07947dc3a2b088a66d47311ef80ef347ea40352715d784a3309100254a0e607c7bebf436a857e780cc8aff08b6fbd33d1b78fe3ecaa99a7273933c5125817bc39e080841a5c93f5cd22394ac57e834a0e263e30cbdce9b99cd5c01b5e49d5047c8d03003e07b7bb4e189d092fe76f8bb326e4ffff6b45daa5a555900a9524fcf9507f09c5a787d85dc604917ee8730e63c521f4255d09fdaf339a7b2ea221d76d6a442f139cab05efde25c3eaa2d2218a990a29644f68678fa12b803c4c39e21d4ec8d1610dc699e25cd509cd581892d63272b5663774b7b20a1a9e53faddbfbfa975", "f77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ab40a058b7c313978774c1555b16602cbe206701d99a72007414dd67b2fb202e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e80a4dc25bef94d3da1f821dff96c297a1e496d55e040bded104527be104f359289411b885fbcd56b4d2cd2e695cafde2fa2de7097172cb34b20e1fb870aea9a6a"]}, "failure": {"scriptSig": "", "witness": ["4d0902aff08fda62482b24b5f32fe34827834434205911d753f2d77ecc56d42edaa6d653bd43e1721a9b1f588e2ae2a1e6d987530d402a1e4d57a8861c7a976b079a283bf88c46aff9e94f08785978372c4b2af5c352f399fa25f11601d6470acca48e4b396d6b79a1209c8006a0a50fbb371065b7caf28c7af6aaa3e5c9e6c4ff2fc88de04bd91cedc9a911c062a1a19c0a3e42c4b04e4cca5e3ef8d64aca722ddbb6c6fbe6349b6e6683e3919869fc14cde247bc557aea4ffd9141a69416aadc45e5778a665bd58ac91b4726726cccd8776dd01a1f88512577b0a9e0e2109fd4c8ddd4c5a61b70909fba5743b5461137c9bf7f4961e4762e797553348b25c97e746f5ee29dd1669bda8c1a024502069815d3eedc9a4457d00c9a070686efbd4baf749a17bde187f70ccb0c2820c3346b62ed6ab071a4f60814f8a4c7a7d18074306a4a7e85ce2ebc925fb8ffeb64c316d93ce453d9a36fc000387761bce43dd5567c6d4e06dc522521b3aa39cea40a1305cb1c77f4a251e46b4611dad3f9af2b6d119b9701b32d6e270b87fb26fc1ec8a83fbeaab7eb1dec8d50ce8a5b63af74852c4896d80e3662b7ca2424755955a9c620a4e854c4bdbdc9581135488ebc3fc902ec5d4e8a439d97e17843e59d495e33c05adf3002788c245e2deb1456cd1ba1c2d10dfd951e5d5149865ee9acb29980b163865388cba2b9d516817e360cb2c76a2e580a8fc5454a05be75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365b7feda3faf3b509a00db86c0dc57451a75b4c8e29704952ed7181b28626181681b72a8cc1600d8047fe8b56626831fcb5b55f7ee61ebb9b8b91fcb4b55947dd0f5943df1a7722c938328966c7e5ac747f85bf050d43cd9195f6df88860ae066"]}}, diff --git a/txscript/data/taproot-ref/b83ffefda146d967a06f51678c18eff540980695 b/txscript/data/taproot-ref/b83ffefda146d967a06f51678c18eff540980695 new file mode 100644 index 0000000000..0a4b3895d5 --- /dev/null +++ b/txscript/data/taproot-ref/b83ffefda146d967a06f51678c18eff540980695 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c429000000006320e29abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5800000000394a92ad03058d9d000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fceb010000", "prevouts": ["57323200000000002257202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "ab5b6d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["dec9becce88c7c6ee39fcee29799b588f4e9694890ad4d72d43cbdac13b43b56712e17786a3b14e0edfc289967f985fcfec313b8d86e770a57ff687c43ebeb15", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/b84cd36f16a07a3e7153b397d87779a08b904316 b/txscript/data/taproot-ref/b84cd36f16a07a3e7153b397d87779a08b904316 new file mode 100644 index 0000000000..fe80906bdb --- /dev/null +++ b/txscript/data/taproot-ref/b84cd36f16a07a3e7153b397d87779a08b904316 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3a00000000e20d6af9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c56010000002af908f40301a1b1000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487363aad34", "prevouts": ["c6e55a000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "0950590000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3044022052f16b724718d5d77b170aa4a0649894eaff50e35b4ba654ebd8133c9d49ccc602205a22bc37c35edbc45a40b447096237ffc711a1d1c5e07f7d78c960db3354688902", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3045022100bd8d09d38b897f1c0801b75640ac816877ca0cc745dd3164524ec5dcf23645bb02200b3ccaaaf17a5c1b60126f10109508e8bc3f64c74993be06e5e97c0df7f1c10602", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/b8500830a3e73890fbb7f1b5e546f8dd9a851acb b/txscript/data/taproot-ref/b8500830a3e73890fbb7f1b5e546f8dd9a851acb new file mode 100644 index 0000000000..5e506231c6 --- /dev/null +++ b/txscript/data/taproot-ref/b8500830a3e73890fbb7f1b5e546f8dd9a851acb @@ -0,0 +1 @@ +{"tx": "e051097e028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45500000000dc24bba48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4730000000064d00afb0499a17b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e789010000", "prevouts": ["24093e0000000000225120c7cc4d9ecf94fd1d6052a234c093a72236440d0ef34d0ac6810605a4931ceb69", "e12440000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "937d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6989904a8cde4fda674e6637e527bd6de2a53b0230c00b4e7a907379bd295f79625eb62ff27a7a3a1f9ea411032fb959ab5a0c50697db7fef72f456b5013f4a62d371a9b01f30ea116c30e8195d2d6eb7c97c8692c0c95de95a904f83b96ad4"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eef80e072d9ae36a55284136a2c9e76672de3126f98fa88525427fae9ded2e51f65737139d8cb51b826e6105ecbce8352aa10f0d50686f2268ca6d7900ff7d4462d371a9b01f30ea116c30e8195d2d6eb7c97c8692c0c95de95a904f83b96ad4"]}}, diff --git a/txscript/data/taproot-ref/b8684e0746d02b30dd7444f365d9552810403e85 b/txscript/data/taproot-ref/b8684e0746d02b30dd7444f365d9552810403e85 new file mode 100644 index 0000000000..94782fc4fc --- /dev/null +++ b/txscript/data/taproot-ref/b8684e0746d02b30dd7444f365d9552810403e85 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46d00000000e4e24797bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd0010000006cf86596dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbe0000000039bf39d9014d7b6700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5e010000", "prevouts": ["b9ba3900000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "cd767b00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "7a8f2100000000002357212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c0366ec45a9d9bc801592451e6399fa02357b8334be28646395e2ec94ddeb39bb1543ca1584ea503ac3e69392f5078ffd6b6e91116d56d4435edabf7e60c3346210b38210de6eed18078ec7fa9def7ef716a428e93131bd2794f7c122831166ac03a540c31f8690e86784c9a52b0566b025d98d660ac37324cbdd21cd10c5515324223f91f2f2364f3b9a161cc8d201503f97a8a087b890961c411eb315bf828248be007511906992f2eff0c0f69bfaffe8edb48e706bd837eb7a12b0b5464657b0d4d6080cfac16d6ab7b26f7ada4e39c077b4e5d36ce06ff4de1b5361c1db735067d04aa8f6a550285f3785440f394eb3c5b987c7592af4161fe625562d267754e69cc133001d3f3fff9868fdaf8f671140f32e95a6daf081916d95d71c134070bff5a89b9d3b347bb83f8e5d60b6c78b7be40ef0eaea57ac7a4ac9ccece84d933812ca2e8cd2b99f18d74e69090d07f2bc3dd4768df412c1e22b7cd51c4a1660cd7dcb23c94315b7b5fb392c72bda8af2462da7d0b12db581ec3bdac5eacdd03f5a664e7bb64b6c1a2cd4464538a2969ce7c8043807d16792880a2c26b4262aa814ccd540735f14795a3328e4ffc86b95c6c68d71b197272c7a127bf23fd3a7edb03dc474461bde9a1ae94e881ebe8fef3efa2545e93e734fe9377465ec16a3c1169b72040e1594a4249781f8b93bf68fc19d06e27b6e13c65d5853ff89bd01f48f0849c5f667f675", "a87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082337e31cedb20dd0ec36f43f7131008eded9387a241f89ca892d220549655a6e95def3d75afa0626f5ab572f3c9ae49b6567bf85ec43d0b3933062a3ad8b1e492"]}, "failure": {"scriptSig": "", "witness": ["4d090250d67d916710fb89098556f00026adf7b864251a16d2cb7b2d2b61c409a5a4d80260cc9c69f755a8be6ff363326b30e804216b940723a2db3e4c66a11c02beb83b3f4eb3bd7defaf0aae6cf6e1ddeeb1d12d32da2654d1b983f1e826d0733ed6db62713ac19998f8cf6ae472b5a1b45de9810e548d9ed7f3019581983ebc882a75e4d3b31153b28bde33cf86d8a5ab5360ee3818747f452128d16f2886535ed99bff3f262720527fe8628c3c9c966bedf38180ddfaa743a58b96195e0fd2389d284d15bf4e75c28759bd80457c4b3de89fa6a6751a888346094a99479cb9ad620348f838fd3648154f1cb56140018031883614ac7f7c2e0d052ced1f65223ce138a2170f221fe0b6e628eae6c309db58fffea2c9ed23f787951fe32e37a24c02139055a8004b8df1faf53ae69ca059d97345aedbad464cb1d383be4137ec884c5b89ad8be4c74710a3a244d498840b4effb5fc489d1e06b40d9f8639ea2dbaf645af36f6c0076bc791245a6a26056653019da3e004a424dc02aac1fd8491b451743610b7d33b30f841a3e4374acafe4a49e914d111585d7ee95f350d4bef51d1cfa650d2a031b57625db0fb5f8403829c1ef4b1626f0ad61b95200cb870b71fe93f7e118f1254d918268b1b76519a5fb06b17cc111ded39d4b91d12d5dd38c46cdade09bb546bbcf073cfccb0a37304799665f8bea124ba6c01560e7a1184f237b7bff1edc1340f17475", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366970443a5f937fd7e30cf678e864feb942aa0b5cd234984b56eed725c04cef145480c0b3df47fa838c1e54894d9f77b7e2e8bb4e3c514b095e8a55995fa5d8569e26d26d9f798657ab1642d8194f1f5dc9158412142f65824f82701f20125ac7"]}}, diff --git a/txscript/data/taproot-ref/b8a16da4c5a5e56d3c75e8933ac8d444b9d06ecc b/txscript/data/taproot-ref/b8a16da4c5a5e56d3c75e8933ac8d444b9d06ecc new file mode 100644 index 0000000000..cf5a5ab353 --- /dev/null +++ b/txscript/data/taproot-ref/b8a16da4c5a5e56d3c75e8933ac8d444b9d06ecc @@ -0,0 +1 @@ +{"tx": "32a22d0702dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2500000000efb94c898bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46401000000695cd28101bdee5300000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acab3f1920", "prevouts": ["d04b53000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679", "5d2f4200000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "537d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93665ec05b081d8cd7cfb81d71467256aa2a6894d13c77a9fd61c7ca1fe9e406c9b2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fde150f8c7b4812d3362c6afa34922f3b5cc4b63cc9e98285537a088f4a7fe3bee"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829a54256964294f7e46fe5d25ab3411c34d3792ff29ea326544b7c68695f53859e150f8c7b4812d3362c6afa34922f3b5cc4b63cc9e98285537a088f4a7fe3bee"]}}, diff --git a/txscript/data/taproot-ref/b8a400a5412cc152b17a2cda851c5874dd5ead2d b/txscript/data/taproot-ref/b8a400a5412cc152b17a2cda851c5874dd5ead2d new file mode 100644 index 0000000000..9acaab3d6c --- /dev/null +++ b/txscript/data/taproot-ref/b8a400a5412cc152b17a2cda851c5874dd5ead2d @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bae010000006b85b084dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1c020000003e333c8a0305983e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7beb20230", "prevouts": ["9b361f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "07072100000000002251205109082c92be6cdaf88bccd1fbf3eb83cfab83a783afec3533a63ba21c303957"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936354bdfc687dcb90cdaf5d25b86065c592329a4749c4c36a0ad850fdc148b768f"]}, "failure": {"scriptSig": "", "witness": ["6a27616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b8a97f2ecce17499487b6afbfd74dcdb69711ff3 b/txscript/data/taproot-ref/b8a97f2ecce17499487b6afbfd74dcdb69711ff3 new file mode 100644 index 0000000000..d2f660e889 --- /dev/null +++ b/txscript/data/taproot-ref/b8a97f2ecce17499487b6afbfd74dcdb69711ff3 @@ -0,0 +1 @@ +{"tx": "7f7876df028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4830000000034c2a7f160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270da00000000bd4927c901e6090f0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb48a7a2d", "prevouts": ["7e07350000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb", "36b70f00000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e64c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93623815ccbf6fec00b3e507aa7d5724ef597227ebd84c2b7f91468956cf3ee8c66d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51575d1df7a3e4c47ed4bae99c3344f7d42d0c4d3b112e8138771efc2bc74e29dd3ff737734404bbc9015f34371be38b9f5376f1a60720e7cf7da81354011ad4f7"]}, "failure": {"scriptSig": "", "witness": ["4c52e6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93697a95948ed2e3cb613b3ada11a161da3add6b7c74ec133d99efecd0d159759ced300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51575d1df7a3e4c47ed4bae99c3344f7d42d0c4d3b112e8138771efc2bc74e29dd3ff737734404bbc9015f34371be38b9f5376f1a60720e7cf7da81354011ad4f7"]}}, diff --git a/txscript/data/taproot-ref/b8b534195cd5db1dd0cc83d99d7face7ebae029d b/txscript/data/taproot-ref/b8b534195cd5db1dd0cc83d99d7face7ebae029d new file mode 100644 index 0000000000..fdc0be032a --- /dev/null +++ b/txscript/data/taproot-ref/b8b534195cd5db1dd0cc83d99d7face7ebae029d @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705c00000000fc3ba74b60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270360100000034bc366cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfa0100000055a193d8039f024700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca335554b", "prevouts": ["c58a11000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "75690f000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "91f92800000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6abe", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f2d5359d5c824637daa1dccfae2526f7581d719b807a72f9216dd7beac93c786d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51f60e2d3154f769650886384bb096233f0069490aec77c98efe910f3ad816f81d7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363048c6f46b8964ec3ddca6b987410b71b075e8047b63352cf4d6b057f019c8edf60e2d3154f769650886384bb096233f0069490aec77c98efe910f3ad816f81d7a9dfad218b10cddcf05e9e788f58784bb5d8eb58cc0f6cfe4d23ba63d85e381"]}}, diff --git a/txscript/data/taproot-ref/b8ba77481215495fefc3d9c89e8e4251b1514f9b b/txscript/data/taproot-ref/b8ba77481215495fefc3d9c89e8e4251b1514f9b new file mode 100644 index 0000000000..5bfe2ad36c --- /dev/null +++ b/txscript/data/taproot-ref/b8ba77481215495fefc3d9c89e8e4251b1514f9b @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270490100000013ecb1ea8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47c0000000014f64124025d7c40000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acbaacd11d", "prevouts": ["250d100000000000225120a2880b97adcad5e9d951ecbfc4186ac77c307365c746cd6918dba256e34886ce", "13f6320000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e468", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93632e765439daa048bb33f9db790a8aba9692d1958e0de693fa6e1c64f973cb8f2d53bd36d32adc19f711473d01abcb44e7ab561baea4d664230dfa9381cfa8f4828a09ca0f6d73d82e88e284042e116dab9fe2cbfafc110f6c0fbe5b2788367c646ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51bf410b10c26f46641013d73a91af66d7632b0672c14a8d3b0dadcce48aba69ffe0b789927f620aeddbf74aea18c74264c468c5fe823a741d176e0a42636f367e46ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}}, diff --git a/txscript/data/taproot-ref/b8c25103015cf79375d6f576186c9bf014842e27 b/txscript/data/taproot-ref/b8c25103015cf79375d6f576186c9bf014842e27 new file mode 100644 index 0000000000..7ed6a8e98f --- /dev/null +++ b/txscript/data/taproot-ref/b8c25103015cf79375d6f576186c9bf014842e27 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca9000000009dff9cf2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8e0000000003edc09f0396a2ae00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689872927853a", "prevouts": ["872f5600000000002260202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "759c5a00000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["dc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366c8229ef6249eef7d294f23c9bd7511150aaa9bb9283ed908def3a40c2c66d128080c17c1a9ba5ea8a3780f9d0897aa41ac6e03bb9fc27a0b4027847c33ef9f08f84e1cc8430872045fc695723e7e8ea88aa60745b893850b41017408051d8396d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a38e917535475cf2110d0b0ae2ac5bf0f6bfd0fb66e9319f96694509bbaa8cb206d96bf27adab25b1c800ec6de9073e8fa8f2a3b567072b632cff39ce61bb3673"]}}, diff --git a/txscript/data/taproot-ref/b8c863f970b2f3c39e353171b5902be0355002ed b/txscript/data/taproot-ref/b8c863f970b2f3c39e353171b5902be0355002ed new file mode 100644 index 0000000000..606db95a3a --- /dev/null +++ b/txscript/data/taproot-ref/b8c863f970b2f3c39e353171b5902be0355002ed @@ -0,0 +1 @@ +{"tx": "b76923990260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270be000000001e0361fa8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40c02000000c541bcca04e7f550000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987fe5af33a", "prevouts": ["2373110000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "71844100000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ed7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93653d0566d70d930cda13d1b062e2c88465358c715016c982afb82a06e0ad8ccff998d6970ca8674a6d6a6636f00d706375e44157ef6300dc02db98f8ce0d082c1d19f2c0f6744ba7ac1f5ff1e4bbd0a31d1cdb1f5d58d1dbc476492d0098121b5"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362a8804e07b9224c1961ba20baa4cc70c8c0737ff46ed8d377d0925d64085806f229db830b5291510bfd4e55fc2f3a45cfb4105ece0af57cbfe0942d597b32d0c27d2631c3cab5fe643277004a2e6838e79a7dd6765c91a13be066042b33c17d3b131de5807af4725e3fdc8c81388bc895736ddb6e799e7163e8586c833ffc627"]}}, diff --git a/txscript/data/taproot-ref/b8daa1c785e390cba67ca10da7ee578c00efb805 b/txscript/data/taproot-ref/b8daa1c785e390cba67ca10da7ee578c00efb805 new file mode 100644 index 0000000000..bea27d1084 --- /dev/null +++ b/txscript/data/taproot-ref/b8daa1c785e390cba67ca10da7ee578c00efb805 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbe0000000064ec2af8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce201000000970d9888023a6b9c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874e000000", "prevouts": ["24ae4d0000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2", "a8e9500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "487d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ebe5e2af3a3c1a6754948d639a5542927d59c509fd5287d02d091c2a39a812b527da89940c9c2be3d3cb1ea9fc374137a74dc3bafe909c68993f298761996d666"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936379a98b85b817e20bc3376f43a8b74803a7c6b50cc59446ffb1c9510b7649235edf94ae33f5606292dd7c11b30be28c4e66005bd3313ca427ad5ed734d53452840210bd7db211b82a407c19f9567cde5a01f8f2a3c3dc032c7ac21169de78447"]}}, diff --git a/txscript/data/taproot-ref/b90034052330d016cb6261caaff33ff9b2007d1d b/txscript/data/taproot-ref/b90034052330d016cb6261caaff33ff9b2007d1d new file mode 100644 index 0000000000..15e749c0c5 --- /dev/null +++ b/txscript/data/taproot-ref/b90034052330d016cb6261caaff33ff9b2007d1d @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfad00000000a2a222a28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40602000000952b84bebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0c000000007b93a1dc01c8cd08010000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487078ca733", "prevouts": ["be076700000000002251206e4088e3ab3053e34fa9f42678349f51acfd745de3b6b8ba599a97db56ef8c25", "59dc4000000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "0d6b780000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e668", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363c8787110c399dd6a0c6d756e60eda0cff5ff48042b3961bab6f48a69e180bd63f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08225f2fc2293577bab1371dd996050d2a4e8a01eb34ee2db6c09974277461b3e6691bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93615e2e378f02ea6f7ce0cc7f488a9f895da61864d8652fb9a6ebeb0f0a3c3389abd4c1b076909910aa73b6afb36aebfd26014933f900bad794466c6fcd625cde53ff737734404bbc9015f34371be38b9f5376f1a60720e7cf7da81354011ad4f7"]}}, diff --git a/txscript/data/taproot-ref/b953ae08ca074cfcfeda2be630b7eabb0a0feef0 b/txscript/data/taproot-ref/b953ae08ca074cfcfeda2be630b7eabb0a0feef0 new file mode 100644 index 0000000000..a95b12247d --- /dev/null +++ b/txscript/data/taproot-ref/b953ae08ca074cfcfeda2be630b7eabb0a0feef0 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9600000000634b90858bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48800000000344f78fb01beec02000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6c14e4b3b", "prevouts": ["520829000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4", "bada40000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d47d6a591cabcec873405f70266ef9b449bbb661e70e913f5c6f7abacf68414d3da7f20ec44ea0c236deaffde6efab934d360adb6b1ef008f271a526ec7cdba39048511e8e7c789ed514f9b13c26fe9741cce3b90a661d5b889439e5d7d62c33484e62ad4f4dce8d32582292ffe4d070ec4c8f9d723f4844058420a1d2537a8779fb9a42ce7bededc340d517b18f18dff67f3331aaa53e77c1288b33e0659f28d1436a2dfbcb096f3fa7a9e82e4786f556e1925c35cb013c45081eae57c540ad3cab3ce1c281550896845d8655ab71cdf8a708c06d5e54834baa17056693353b5dc04ae9334b2c10884d411bba0cd4e3fd984fa90f4b1e65c93fd2cb10728f751d98256c54b1d5d60fed0e78dcbd500dc356cdcf890680cb3c77c92e45c4ddd12e63ca3d1030639b0f9d2870e33b774e8d3b66c5032eced1bc99d923efa37b6ff74dffa59a90dedaee32c243845aa41477abbc18aea66fd7d8b62f57cb32be897197769682fb2416e7d5ab926f268d9a4bddef2f123b5f72d6a815e7d059ffd89b1153ff46fc4270b9bb40d5a0599c596362d692c06f2abeea5bb5ba7bfee1ae36fdd7cef72ab89f2e37b666bbb7827241e994666012b80d44990e765c6cb21b75d212e364b854e8ce7e2280710fe693e17eb5c2b5efd090243ca88e975a99137aec767e7b0a8cc26a136a7facb806aa7e36a522d8e37d1af4637583ea07b2aa644956dc50448f9de475", "3f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d04e294f7a5b40072490018d5d8a3de038b17aff9339380d2d4333d5f6423b4d728e192bc5f69ac80b4a6e0537a86a2095372e08a2c76143a8a8a3d0ed1b85bc06da1f6599d7e514a71ffa8a2afff73792fcf1df1b953d2196d009aa835a52703985aa46dcbff8b0495de750bd1afe74a661312f7eddf1146199ee1ea8c08aa"]}, "failure": {"scriptSig": "", "witness": ["4d0902b75caf9c5aa0b18720b832ac4a860a72079b0933cd4aee7f6a42767e6bdc2fb299ff8b15d94cd461a60fcec57a65f88997e2b82088dc241e59c4a30edf5cb9514594c59910600c16b7992eb68858c1d504bbb3f6e0b3825645656b307107a06112a3d7232d92b8aca56de6ead6f6ed4d8e1fd6e97535744f9087b3dc8c69a521e5eb9c7c12c35f98eb5170638598eb057617179b6bcabc45e7e7b88822db163ed9c1eee9910c076bedddbbb32366280c40dcd22de76caa6f62f7db968727e17dbe0fb3bb94e9f6b0d47c3d4bac1ac14dcc7eeca79c000bccf71f1abac60157aee194a9efa8eadf12bf8262c205d2c1dd9b5ff12bcc0b83ca007cfd8515c1c96b8a403b18d440ffa22f7ed5d3b99c0d8288e765d7908bdf22df77246b203a9018cec284205578fe41ca1cc21582dd13b7a60d87c99e18f520ea9a0d13cd471a0e1100aafae7af41c962daed23a3f3cb52f0f42dee62002bcaf208cce0461ec5853d9c80a50469d1fcbeaef6641f7911fa6ba4368bd810e552400de6a60423bcf431f3111c6e443a8450a170bef34eeea444080016ad97b889604296ebbcfb11b9a2102d5905e226c5501c6e27a46661e55da12ac9fcba9749541402f49e73b1111297a618b67bad0e43fdccce6edcf674256a1b4d98dc8a87f6cf67340064ca7a4abfb0b16a69f28accb3299af1f72961123649f74b3c647c06204d6d6a850f6977e60376862e615ff575", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8d874772a13c5a1227fda830887213a5c965a8abbda46e6162f44fffadfc4d1ce03985aa46dcbff8b0495de750bd1afe74a661312f7eddf1146199ee1ea8c08aa"]}}, diff --git a/txscript/data/taproot-ref/b95d3cec25b96ed5bf972cb98ca8c6476eac7630 b/txscript/data/taproot-ref/b95d3cec25b96ed5bf972cb98ca8c6476eac7630 new file mode 100644 index 0000000000..e41ae9a7df --- /dev/null +++ b/txscript/data/taproot-ref/b95d3cec25b96ed5bf972cb98ca8c6476eac7630 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ee00000000e3d0b991bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa8000000009f4a9bdb032cf480000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796122e1a27", "prevouts": ["a2331000000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "dfa273000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["984c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c161624a971c36aa6290c86687ec80062b931dc8c82c07703e18fb2ec2014c60afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a4b5563559956b4521d685614895115ff3b761ab3fb4dd1d8def3bf310bb092b594c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}, "failure": {"scriptSig": "", "witness": ["4c5298", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a12a44ae7bb936654d5435f70f6326205890d9cbcd8f02cde2bb6c76aaa7e01eb806b7a00459a4c1bc30a7ac808d25283aa8d21c996014515e9974f153b7e8517bb22a9d6ce3a4416076bcdc0e15ff24e2eba93ece471e96a0af39f5a01dd3ec6e2c0067d6235544c969c57bb6383bc4dfe8083fe3443e336f29d85bd1c9f087"]}}, diff --git a/txscript/data/taproot-ref/b95e31c70d4e1c7f52eb020450f422dc69f2b3f1 b/txscript/data/taproot-ref/b95e31c70d4e1c7f52eb020450f422dc69f2b3f1 new file mode 100644 index 0000000000..4b6c019bbd --- /dev/null +++ b/txscript/data/taproot-ref/b95e31c70d4e1c7f52eb020450f422dc69f2b3f1 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfad00000000a2a222a28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40602000000952b84bebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0c000000007b93a1dc01c8cd08010000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487078ca733", "prevouts": ["be076700000000002251206e4088e3ab3053e34fa9f42678349f51acfd745de3b6b8ba599a97db56ef8c25", "59dc4000000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "0d6b780000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364b15973f9e600691a7121e5a6d9041a72a23eb89accec8cb085df69123b371a0"]}, "failure": {"scriptSig": "", "witness": ["6a47616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b960c57badc5a9291e8064176397f05700f998c2 b/txscript/data/taproot-ref/b960c57badc5a9291e8064176397f05700f998c2 new file mode 100644 index 0000000000..f2a203f91b --- /dev/null +++ b/txscript/data/taproot-ref/b960c57badc5a9291e8064176397f05700f998c2 @@ -0,0 +1 @@ +{"tx": "5d45ca5a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3100000000f9556abb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bb00000000953fe6a9045d685e00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8eb7014c", "prevouts": ["0290260000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e", "4f64390000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090232a7d9540e819110b107f6806f46a011f436b75fb93fe17e39c8ee0372fe984a240250a8f89e9e33f4d8f379d28d0a1423442646c2fca29a18045f0ba3b2604739e3bcb29ec9009d3f67a34463f4d3fcc99f56cc92487a0a4d2ad91a6342e074ab46540ebcdb38cd9da5e2b50f1201e593a7a47eb4af02f96189c31d0611e0f4f9a8beb5d78214a78ac25272a79c3f8318c263d3d19c2c5a6aeabf5122827819a2322b7f5d4ade23260119c5e270a0d11141999237f190d5622fd5170bc3a5bed81b8419a8ab7f4c20aec0ba572df27723ee8479df0f9c4b5ee02d017790e84df26d1ad350d4828f9a622afb00a4b82ad5f33a878a0156f5e2d8689edddb11fe1a646924021476d4afe3004d347fc7f4298c0627232902d43b1cd8c5995b2d1ee48dca2a3874e61f8a20048fa0ceca86e772781399b118b25ef6f02d353b23fbb6d14779161847aab61803d52aed242941a8c737887347858dc0b97c9e92b9222e62a44ec035e42703218610b25ad1d7ccb25d5f21b06a9f863cfe54f094b7ef8a2b06e02417add8727c34692534ec7d8586e04ee236c8afd05aa2a4096c71e8bca3a3adb1e0f6cc31ee9ce7714929f2510bc994c2eb2e83b59e57f585cb85ac2457f723b5cb2eee76490d7638adc392e71478edf1ca486ad85008ff302d130c2f1a047229bf819f061df89bd590465df3564c81f6f837ac3c461678540a863dc4a291cc14e30a541575", "777d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936241614d3e8cd52fc3453eb56ac2732fb9749715b82b545e0f2eda17e1fed7410da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed76a514a469a046f8a639d1762af89c30ccdce4827317950871fa39f73bf898af03474d1f6825ec143575bd2e16c5d5a5b633189d07c1a3af4de94c30aa06021"]}, "failure": {"scriptSig": "", "witness": ["4d090210c346f34eb67b338583137ace294a1aebed3911dee8c3dceca8e91c55e3627e2f8f5c70edd8c6df28db02a4db35805d8f191c106f349c0d9a80e71616a0d5c21f957ddb16c65f29ab300ef8efcce8c442db76d27ec5d4c89a145cf16781cdc0051799ed1683f30f4efd4f2c3aad0ced47f41090a8bf766f7b0d6d4d27a3f60ef037224aff7e719008daf73a18afd001da1f32ea188f5de3471ec641cbe4d4a2eaebfd4523d17d3a90136887284082386956f1fb9594b737c3a2e901eff31e0edc7ccf6ab28f595a736b0a4b609934b77ecff3b7fd2eef0753758fef7867c5870b42f68e589d325189b24b6ce8cf550acab48000c2f0964412c086767cc9f7060abc3012a108d9c875325f83feafc4c43b4946814fdedb69fa8353bc65b9ca68fc553ce7e4f604f96e8ec2f5e139a759c2937486074b4282bf0ede4ff90ee41678bf23198dd93dae501abc1860a8999fceaec36e55917c79c2aee4ef98e0d25d544879340d06bea0ac4bd5c247cb60dd49ab4082b6a14742fa85dc3e842319e814ee5cbc09903cb53ed210dedb42abf09d3739d2152b9d1c141011d341a02605dcec05c6fd5144ad35d88719b81df2effee83878ef28572a03ce12c81ffc6c31591bf8beca586461da8b6eb5ba416a4c52fe17ed9be78d799d853cf5e3fffd80f46519a2f1711fed22e1ad91bee20c0c6ba9032ee7a127fe94bc5153c22b28371e896598908f4886f775", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8afeb4bd46271bdc4aa2a06eff134ee0adb3f92d28971d2f43ac771ecfb2750b1f03474d1f6825ec143575bd2e16c5d5a5b633189d07c1a3af4de94c30aa06021"]}}, diff --git a/txscript/data/taproot-ref/b98b3ae70f7b3075d295829a4a779d63ac54efc1 b/txscript/data/taproot-ref/b98b3ae70f7b3075d295829a4a779d63ac54efc1 new file mode 100644 index 0000000000..eb44d8e671 --- /dev/null +++ b/txscript/data/taproot-ref/b98b3ae70f7b3075d295829a4a779d63ac54efc1 @@ -0,0 +1 @@ +{"tx": "dcaf384b02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cda01000000cf8850f6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd400000000479871ed013270a100000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc4ef5541", "prevouts": ["db3f47000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "03855d0000000000225120fc12a8d66cb681b25d9244e35510bfc0dfd4b0ce262903c87a066ca254a38f8e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936651597828edaf1ec5c9dd157a6c1e84adb29e876232419c139df01e87050662f"]}, "failure": {"scriptSig": "", "witness": ["6a06616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/b9c4f033e767c62469be7d0c9837ff7976269c03 b/txscript/data/taproot-ref/b9c4f033e767c62469be7d0c9837ff7976269c03 new file mode 100644 index 0000000000..0c7559a343 --- /dev/null +++ b/txscript/data/taproot-ref/b9c4f033e767c62469be7d0c9837ff7976269c03 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5c00000000bbab6ce0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb500000000c4ee82fc03fcbb79000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f878865e72f", "prevouts": ["34dc260000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1", "8bab550000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "cd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936305e2bbfe940f420c214662e3966ca6ecb30394037d73a78f87c1b0a0c14e367fe052270a8089f5fc5ef9a63e8f4df43751c17d276a547e2cd275b71d0b6242a8fd238d2decf6f7142c55252dfef824eea080278838d8f4f1f0f617cfe47b5d91029910a453e765cd82c29c3b576a90579a453f3a941b6b6175fa922e9a13196"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93679da927ebea46a5f8996fbcb41ba1476306b8185e9784cfd3fab60be6d7447790aae41afa256ed506dae95e698e8dcc0fa26e2618e50e74a83d05bcf51ab890d620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}}, diff --git a/txscript/data/taproot-ref/ba1c9764d8c0c80309b24333c675854c1e92edf6 b/txscript/data/taproot-ref/ba1c9764d8c0c80309b24333c675854c1e92edf6 new file mode 100644 index 0000000000..5bd8d87a1d --- /dev/null +++ b/txscript/data/taproot-ref/ba1c9764d8c0c80309b24333c675854c1e92edf6 @@ -0,0 +1 @@ +{"tx": "88a47fd8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c442000000001eaf11b1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf21020000000137c7d2049d1696000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc370c5044", "prevouts": ["466038000000000017a914525ca05541c81a105639c2efb802eaf5596cfe0187", "94b8600000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bfec9f4a544cac12ec45faee03e073e2ca7a1afd48c2e8b5a3a7ddbd5cfcc3ac9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e8d213d90ee48874bbf2b18160b4fefa78452fd9fac91ad5f640de90a3ceda28c"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e1906c602469d9808f25282c821ee4b4dcb0a7f347257f6810852481d8753948638c14f042a58a31b61c3859e3b726944cfc511dd17ecaa68ed5dba7522a36ac78d53ca9a9f93e78db88a883cc9c42dbf55ad09041fa37b21a93adcd191d7180"]}}, diff --git a/txscript/data/taproot-ref/ba1e6bbaa2a233a2a9e108339e2a03d15db6c21a b/txscript/data/taproot-ref/ba1e6bbaa2a233a2a9e108339e2a03d15db6c21a new file mode 100644 index 0000000000..ceb19b207a --- /dev/null +++ b/txscript/data/taproot-ref/ba1e6bbaa2a233a2a9e108339e2a03d15db6c21a @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3501000000d42eb6c660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ff01000000c3ef7ad960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270af010000003e9053a503f715690000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7a21d363b", "prevouts": ["1cfc47000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "edf4120000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "94c6100000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063fc68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694b89f2c9aa4f05454573899159481db85bea08e9a51a1491468cab82b3ad58099aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4690da805934f4f93e9c0efd4d4edfea04743fe60c173721d1481257c7ee1801e4e0df2464f99a35d5bc9fbf69ae3045675e957332f77327dfd622124d00cb4df"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e979609d128077ee19fefa6d4a5ef99e5cd2ea32c1a2ff3bbea06157366b07e58771b6e792b25070418091d57f3336a76b43209d1f0f67eabea9d94d6d252d60aceb16be1ebf4fc69deaf064fc7bf5d7ff2149818b5ba4c28c799d30ad567cc959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}}, diff --git a/txscript/data/taproot-ref/ba213f9e83bc18ee5d889ce921f71786661cdb49 b/txscript/data/taproot-ref/ba213f9e83bc18ee5d889ce921f71786661cdb49 new file mode 100644 index 0000000000..f1c95891e2 --- /dev/null +++ b/txscript/data/taproot-ref/ba213f9e83bc18ee5d889ce921f71786661cdb49 @@ -0,0 +1 @@ +{"tx": "cdcd5a9802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa500000000b8ae7dc6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bde000000003c6de5f402e5588f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acc9000000", "prevouts": ["a5346f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e224230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_8d", "final": true, "success": {"scriptSig": "", "witness": ["ee038fdd8bc71ef14a370e519b0379c7953ce4f05b4f564315288d1fcf85078e3fd1446e11bbbd68d919d106bee0c647dabcddafc0551562fa8914a65899263403", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["6eeab9143adbb3c61f29938a1ee836c6c0935bf48783c9d794631c96841f2c4ed1c73540ee96b8d3fb5033fa547e225242871081b822556d71ce4f4f75b80dc38d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ba60320519e241dc303d027571c1b6b6677274ef b/txscript/data/taproot-ref/ba60320519e241dc303d027571c1b6b6677274ef new file mode 100644 index 0000000000..74275e7fdb --- /dev/null +++ b/txscript/data/taproot-ref/ba60320519e241dc303d027571c1b6b6677274ef @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf06020000005a8d6e1adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4600000000fc86371d025cac980000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787141e232c", "prevouts": ["22827a000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "7aab20000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "8e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d512a2ca63ffb455d99d5e48d0ce26693d60c39456d7af39366f9ddaeb418e2954f33cd0b31c9bc4dfcaccd89caa263c020d1b70f58e7e0e884ce19a773d6b5f30b2981ae69232c3f6c5ff759e9ad4102f31f3fc5e7a3a4ffd34dce2e2e06026"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045df5339745586104756c1fc6d4b54e2b6a7d81daf8b03d1fc2a4a51881171d1a3099eb053c54d8f72c6d7331f9a1bb3bf1b628df692ad9b7eecd4e01f4a47bb5aed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}}, diff --git a/txscript/data/taproot-ref/ba66a56ebc2679a2d9e33cd52effe2bf5657ba63 b/txscript/data/taproot-ref/ba66a56ebc2679a2d9e33cd52effe2bf5657ba63 new file mode 100644 index 0000000000..978ad75912 --- /dev/null +++ b/txscript/data/taproot-ref/ba66a56ebc2679a2d9e33cd52effe2bf5657ba63 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca501000000580c3db604f64b4e000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce6010000", "prevouts": ["2926510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_80", "final": true, "success": {"scriptSig": "", "witness": ["975cf7e75f24f1001d638322626a92d040e1840080b79b68d55ae4a3cce3e821fa218b0c276e5f0325550959133c82bfd5a0ac54edf7843766a0c1fdcde06ced83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["edfbcf6ef8812f0c9289fef29458750a771593910ee4b3a385ba78c1dea78375289729cd1f265c8e7eafa6f29a70f36f042df16df8506977cd8ed85762f7518880", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ba71d7ae4697eea6a410b7c4d7d542ded867b329 b/txscript/data/taproot-ref/ba71d7ae4697eea6a410b7c4d7d542ded867b329 new file mode 100644 index 0000000000..254cd9b842 --- /dev/null +++ b/txscript/data/taproot-ref/ba71d7ae4697eea6a410b7c4d7d542ded867b329 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b800000000041ad790c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42f01000000ab6dc361024f625900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac25af454e", "prevouts": ["dbfb260000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17", "a8f73300000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090293ef17bf1fa91f04d0b8b89561878205c62e6abcd2848db48e9afefc5692257fb659812a041bc5613b20cae249417bd75457bb1dc9e549e93b90b402126834642811092bd589d7a536f571ac31d065876f9fce6dae907cb4181efde5f99d8e51c342d162246815af7b493a6ed4d86acc6b2927a0959aa7c2ab2077135ec9eb67639fa97dc284ce3e722dd5e32c6fa0c1f6bc454dc738a97bf8a812d4828e77feb15e87c4e02063dfe94552b548d5c9992f442a44dd28ec37fa6e862b3f75a0519de0ffd45bf2568f163db900f89e46e3d9d407cfcc3bdd662c25f9ca03901105754d408f98069624a38fe69b2bafcd0fb55292405a1a8b3bd08da62d18383e4cedd12a6feac39c3c30b40874ddb55f4355a6d35ba615f27641c55c3cf822911649c7d6fab98eab20d0b131bee2a15f61e4f34cb727b3e6126e2e6d3d309d32eeceff29ef8adada28f02eb602d6eb06708bd4dd7376bf5f9b8e5db867e374e29d02974e317fd35b591949c9a9d05a90ea0ce61fc68c7828ff9205226a46822d801c51d2198e0a12a5304fd8b74935b47647c28cfea893f2e311db5829c033b749d96a7bb9c967c55dcc744812156deb0ffe57c1c1f6ad32cc33812f5d99473f7bc77084d5cf0ff7e0e085c549c0986fe2cec4b2ad46d5bde3a22cc7e18a9b7f32a4ba8bed15e19a3a268114d7d3eb562fef99bbf5f3fc454f5db73ec791d612f9fb450ed8261220cb1c7589", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ec9b674b6978b70ca392c5eae7e83a8b3e88bba03d1a19232f64d1d4e5749809886f85ebb300297009aa959255e1f8e976b091c7e06b33477ed400c40a83b4ccb3e0a345cce78c1fe891e9b22b966ce84a8b12623d949f63d5e15e148dd67959d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}, "failure": {"scriptSig": "", "witness": ["4d090252e5575fbdf6faf0ba0191b2588ffc308c433e98a153ed48ffadec721607983a686e8cd9cbae745df144c864eaabc2f3d7d588feb5af050ba4d1335dcf8b4ebe035a5ba4b74f35770175015f0148507128ed6c7e21f71f37d3acbd693251db8886782b140740b74138a6b4c3f624a756c085ee5a8c0b962b3c1ef131c2a17ec2e8cac5927f1613dec9ecd854e3f913c82123e821a42db55211a1ea5df526fbdf273a5d1a33b679a5ce0ba624abc8e6b2b855d820549cfd44af4f3e816bc7135af9891ac6c272c649e5f8b22250c641a41d4d5b1a80c6074a2c99cab8f250cd3e54a0d2d2e9cb58f7f1a052643b037d9fb1a68dd622de0687d989e4d594113136036bf001f70a6603169eb672231ffdff8526d23560ccdfbe6cd6209cf7d2bb0897fe3d5af2c8e40bdadcdc00b6d7d6fc6b7b15cae136f97d22f4dfe2ac1590a9404f5758dac119bb842a62a3a66a66d1e913f2a6425816ece9318ba35cd7656f4fcaa2536c3fe42d793aedec2a9b2dcab6e5c9f57cd7f0ce83bd717292a195c9b3416d6469a7871430654c96f9bca568740f71df574df1eadb78b9de7676672e3e3173785cc74e9ef18097bdff44fa0442871cb992d4ded3ee9613314b8003515a90bb6ee33c1fc1ece5002af9b68de57ee30df851195e757529ee5cd4fb4c66562601829d195198809d7b2d59e963706be83f997056f2f18aa3ea4b353cb870cd989e49a9fd5ea7ae7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936908709641cf32dc4788f906f7e3621a0528df09509ddf1e9982e4479aa4b5d9a913d98effacbdfffd2adbbf71932929e08e9cbcb7e06a345b8d84d9192524cd99d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}}, diff --git a/txscript/data/taproot-ref/ba830627ab470b34e7d889cad07110a91669d64b b/txscript/data/taproot-ref/ba830627ab470b34e7d889cad07110a91669d64b new file mode 100644 index 0000000000..30a405c6ee --- /dev/null +++ b/txscript/data/taproot-ref/ba830627ab470b34e7d889cad07110a91669d64b @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe30100000030bf24908bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b901000000527fb1ee02a3f9a600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac15e93a5d", "prevouts": ["33896b0000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588", "92d63d00000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363886a001b09f635a34304806ead39fcd4b50b9b619b2b6bc0eb87693aaa0e04953249301ac20ee33639c015b4a618b106ac87c8ade2ff7aca8998bda2366a260c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367661e28ff42a08d72c3d32c7503c1e2b25874d2f6a5abb894f6bc68d84afb9a8b553f13873b7614c747e02d52f281322dd98cc8d4ce789920cf593b75c6f05693959a095ba405700a8bdcb88c47f737d45523ad768f5b3698c80add34f2e764b"]}}, diff --git a/txscript/data/taproot-ref/ba88104330b37c0458b14c5d53739d04527f803a b/txscript/data/taproot-ref/ba88104330b37c0458b14c5d53739d04527f803a new file mode 100644 index 0000000000..ab16a80716 --- /dev/null +++ b/txscript/data/taproot-ref/ba88104330b37c0458b14c5d53739d04527f803a @@ -0,0 +1 @@ +{"tx": "da0c3ef601dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b190000000029ce61fc02a28223000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987a512d032", "prevouts": ["acc625000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["3045022100d827c78cc6c8469955f38ebcce0da421cfe33e5917c97c4d1e6aef11cbc613730220504c9adc9e61e9fb428030a8fa6c9a57a778d19c656fe491e342a1dd6a67297703", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "2200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3", "witness": ["304402203d73098df48a8a66efc76370fb5cdf484540419a8282aface6eb4bc971438623022077efe8581f1fadb82fb18b27992ba1ad048d2ae042d4b5902ecbd62b2033bae903", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/baa4d60cb12ba51a47909ac8227ee6df6d0dc0b2 b/txscript/data/taproot-ref/baa4d60cb12ba51a47909ac8227ee6df6d0dc0b2 new file mode 100644 index 0000000000..6b0e3875d6 --- /dev/null +++ b/txscript/data/taproot-ref/baa4d60cb12ba51a47909ac8227ee6df6d0dc0b2 @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1401000000cb03ad92028bf17300000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac3fafd534", "prevouts": ["83137600000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "fa7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366c55d1291de37bc0cd0b0f7c57f56af990eb1972b2f3e36942e3050d61bb245448c1a9074fcf4072701b6c332871422b1ccd41e69925b4b38aff436cff44d889284b3c1002850d4c89a68130d64a5a5ee29d0b1bb458f5120fd1f649ff1c37e66ac496a48f5e08c9a0063585476106fe61a3ff4222f4c7aaafd1f65bf01170e2"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e89ffffd8cde8e3769edf5532f5f6b1952f639561cd4ccd6343a91fb81843409ef1076b289256cd19daa60d704e81db3a39e457bb71d9d0e29c4cb2075820e5e1"]}}, diff --git a/txscript/data/taproot-ref/baa96c5298845a9d61eb221acb395d2256d66ee5 b/txscript/data/taproot-ref/baa96c5298845a9d61eb221acb395d2256d66ee5 new file mode 100644 index 0000000000..5413438771 --- /dev/null +++ b/txscript/data/taproot-ref/baa96c5298845a9d61eb221acb395d2256d66ee5 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127075010000009e5d05f1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0a01000000bbe4edb3018e8b46000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478715087253", "prevouts": ["3e281100000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8", "f75d75000000000021601f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["7eb34c8d1a1387448db057283b1804092fe8bed759b596c8dfc46534dc3d0f1722ba7889f2042d25cb663e37ff265891415c0a89e5b0424d7b65816c493c5c76"]}}, diff --git a/txscript/data/taproot-ref/baa9d2ad62a330c543ec07ad2137ad8de21565a1 b/txscript/data/taproot-ref/baa9d2ad62a330c543ec07ad2137ad8de21565a1 new file mode 100644 index 0000000000..b03c4d6b92 --- /dev/null +++ b/txscript/data/taproot-ref/baa9d2ad62a330c543ec07ad2137ad8de21565a1 @@ -0,0 +1 @@ +{"tx": "a3d01f1001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c770100000035a382b702fba44d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc759010000", "prevouts": ["41624f0000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361a24f92e0fd66692248020bc486fd34464c8d03dbe31b3b0085981632dac5adc074cc5cf84a1d913e1f5647d3427cc0d6d469f0e5b86c78a49890e87126542fa0e1c61743bed8ba943c0dc40e80402f7423773c7111097ca9c5a140b1b3c94b9"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360bc51bd168651c63bebcb5a0fcd6ee1be5c250061dd549ccafb897d97d2a0ffcd13faaaba0b83fb431d1a23feb7d5de22e491a7fb36e5108ab00e1ac0e7366690e1c61743bed8ba943c0dc40e80402f7423773c7111097ca9c5a140b1b3c94b9"]}}, diff --git a/txscript/data/taproot-ref/bab370c81fa011cfbd5f4933e8e203b69b4613b9 b/txscript/data/taproot-ref/bab370c81fa011cfbd5f4933e8e203b69b4613b9 new file mode 100644 index 0000000000..b7c2878fa5 --- /dev/null +++ b/txscript/data/taproot-ref/bab370c81fa011cfbd5f4933e8e203b69b4613b9 @@ -0,0 +1 @@ +{"tx": "e4c3fc72038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ad00000000ef3908da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270740000000074614a9ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1001000000e3195ced032611a5000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487bd79c71f", "prevouts": ["c47c41000000000017a9148bc1125bf4e3450c593a5be1ae9a05461832d39a87", "ad5b0f0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "b47b560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1653142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["56ce4aac32ddc9b0137d682bf44e63f566123fbe72d36ac728c4c036e10f935e932ca13d7c8abfafe7f931daebe311f7a74c17285775adc4974f5334e62efd80"]}}, diff --git a/txscript/data/taproot-ref/bae295c693b97cb9ce1c49550985444f7083bf7d b/txscript/data/taproot-ref/bae295c693b97cb9ce1c49550985444f7083bf7d new file mode 100644 index 0000000000..fe25e83c2a --- /dev/null +++ b/txscript/data/taproot-ref/bae295c693b97cb9ce1c49550985444f7083bf7d @@ -0,0 +1 @@ +{"tx": "c273581502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf30100000056f903e4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb901000000a48e00d50318bda000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787f9020000", "prevouts": ["c6aa49000000000017a9148fdfffe253d045df4a2985902e5465482e50374187", "da125900000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2360212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["beec2376560d540aba6c3ed02d7cfac13e24e9ba2aa6adaab3ea03441f54fe5e25ce154b67c1a0b40e9cd2da65b692918c4773b9676fa8a30c6f734919612855", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/baf106403ddec9a4e35d93e4d7e9c8858a1db975 b/txscript/data/taproot-ref/baf106403ddec9a4e35d93e4d7e9c8858a1db975 new file mode 100644 index 0000000000..10eeca7dda --- /dev/null +++ b/txscript/data/taproot-ref/baf106403ddec9a4e35d93e4d7e9c8858a1db975 @@ -0,0 +1 @@ +{"tx": "c99d682202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5e010000002c0ba2bebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf67000000009fdb47ec02affe8e00000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79659a35950", "prevouts": ["2cbd26000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4", "dbd56900000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93669f2c139be00fa1c9661184516144ce5a6d9ace7645806e68661c56c0e240889d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d513887c728222b860c37147d016a38c71344b48ea7c651274945970f6f23c5cbb4cd941a6bc152cbea0496b075d4b2611b435301778200e60e8b4147cd93749673"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93674f520513e79457cf4495a2bb1d0fa039ba02e927188e1401590d675eb0e8e803887c728222b860c37147d016a38c71344b48ea7c651274945970f6f23c5cbb4cd941a6bc152cbea0496b075d4b2611b435301778200e60e8b4147cd93749673"]}}, diff --git a/txscript/data/taproot-ref/baf7af0bebc3219aa43e93f239abf44c3c75cc84 b/txscript/data/taproot-ref/baf7af0bebc3219aa43e93f239abf44c3c75cc84 new file mode 100644 index 0000000000..96a9a8fc43 --- /dev/null +++ b/txscript/data/taproot-ref/baf7af0bebc3219aa43e93f239abf44c3c75cc84 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f02000000edc4c2a1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7d00000000b6e37ef8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b970000000032ac10e903965dd000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c020353f", "prevouts": ["db0b40000000000017a9147e06846ce22cd5e23f7e03391c0538498e0e18ed87", "234c6c00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "693f260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "215c1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["ca40b7b6930883ea4773d0a5d65f6d0ca782ec6b7a5254db897aef0eb51e0214c651abb28ba77c3e02b75e8110dd9e73eb30e9654b7a3004f962b8bcc1d9f935", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/bb00878c7c40b024bd20fd9e026f76cc0f01bda7 b/txscript/data/taproot-ref/bb00878c7c40b024bd20fd9e026f76cc0f01bda7 new file mode 100644 index 0000000000..ce247e9b69 --- /dev/null +++ b/txscript/data/taproot-ref/bb00878c7c40b024bd20fd9e026f76cc0f01bda7 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6c01000000caf387b6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0701000000d913f3dbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf000000000d47bb5d904ec5a0d010000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acef05f434", "prevouts": ["5591730000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "a0b64e0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "88954d00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100adf0b5c7fce312bfca152bef09bfeffeff54f562953e06529c43f48db67fb4a502206e88b5700e794d2dd7f247a12fcff802052474109397c0fe9c579b0b0091ce4a032102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "483045022100a84ca6818390bf29e4d1994c4b9d9fb4754fb1bff4ece03745f030530214d6d602200ce39a19f127dfcb702bca006eae4b9f4e9e6c3c50b9365433d0ba9ae8d96c93032102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/bb06616585d2cf60ef82187fc0334f6ddea3aafc b/txscript/data/taproot-ref/bb06616585d2cf60ef82187fc0334f6ddea3aafc new file mode 100644 index 0000000000..705aed8cf6 --- /dev/null +++ b/txscript/data/taproot-ref/bb06616585d2cf60ef82187fc0334f6ddea3aafc @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3d000000000652fa9703c1fd7200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acde63cd56", "prevouts": ["7af97400000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "48304502210086ea90cc5c0728dde80728c034b5f5d7fac95f6ae8d2c33709cd8c5e42060daa022049e439d5201732b05eec818672fc4a721a99f33137803e2a8362e331048fa53b814104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "4730440220458935b7ce817cba8b030fc203ea244413afa5c774155a3c8df693aa9e9ed47002200d6efbcf65dcd22b0d73cf5e298b7d89c3171bf7327d5e2710234026ef9616ae814104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/bb0848b612e67f32638209d33374606f9f878516 b/txscript/data/taproot-ref/bb0848b612e67f32638209d33374606f9f878516 new file mode 100644 index 0000000000..b415999820 --- /dev/null +++ b/txscript/data/taproot-ref/bb0848b612e67f32638209d33374606f9f878516 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd801000000872a088c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c418010000008af1d13301eb745300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3d95c32e", "prevouts": ["a1705a0000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "2fb636000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["bd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d6822c3ab459532077d5f4bfcf7544c522d220251729d5888eecbf9f185531198751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d50e634e19498d3396bfa452af2ece499faa564dc4b58fae514f4ede8dd179fb909e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900450cffa7efd13876b56a4fb6d16fe87f2b3bb25d39f5e6fb1dfb5ce04c0283c8690e634e19498d3396bfa452af2ece499faa564dc4b58fae514f4ede8dd179fb909e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}}, diff --git a/txscript/data/taproot-ref/bb213f4cc6adea71bcd254acd7a66de7a21a8fb5 b/txscript/data/taproot-ref/bb213f4cc6adea71bcd254acd7a66de7a21a8fb5 new file mode 100644 index 0000000000..67a32d2242 --- /dev/null +++ b/txscript/data/taproot-ref/bb213f4cc6adea71bcd254acd7a66de7a21a8fb5 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcc0000000071630ddfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5d0100000077f260fc03d5faa90000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df97972236898796000000", "prevouts": ["5be962000000000022512064408326fad1f8311f590f6e6ba281aab75c91070d1d43ff117e995859b8513a", "a8d4490000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_0", "final": true, "success": {"scriptSig": "", "witness": ["d121f7b2fa46772f2cfc578befbd81b504abefd6778e5865b2c5b6755c31495101a118f46f050c81cbbadf2ffa0c9c6b08d2e446670a69be17d0290a8143215d01", "fd57a900020f02c3225354a96ffd477821c7786c05a231b56f81d951b932bd379fad0980", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4aa4f7c8436ca8d8981f6f5734f4602dfc0c44e18db601a12eb96596b0cd18640e63690ce5cc95121adcc35e07ced275f2317c26a179d197ac053960f0f4f147a1cb17023e1e615d13464769edd83781954ce40c3e997c10d9d563131adf152b0b301466fcc99b487f54bcdf71fdafe08c75b498cdfca3ea44357f25a0a6ec1207896441457fd2b6c92ace09ad12d6a1cc6b03727b3353dcdfd94d4fb9d5a4f5d74f2796b98f2c27dc0d9d31f80b5c4be6860f52f23a3a23047d434b27debfdaa5a5078d4000d66a22e2c7b3b94a6a7821f00597277fa5b950f8272c7903fe6ef223bac505f7b73447842270fe9ad944c23bba89cffd18d813eb3c3f2c24dfee534b9c8f80c0cd634f790cfecd39060a61cc867d995e38f8c6a0545cebbec068e85966b052432e8ff002c73077be3268fdff064ea813fbc6f3f7637440b79e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2f2ca99382fea6afccba9d7672b7238401aa02b3b5b65688095ee89641bd0d65891ad30dc566cd59f177e8cbac8dbc3c996efc49302767d1b5e8302894ec74300000000000000000000000000000000000000000000000000000000000000001acc7e6410c48b21f942db9b7b4f79e17ad6a1c7b719589c08a3fdd6624f970e69846db1afc2154e1c9b23714d29820591741b528a79c50363c0b8135dd178597c6cf129cdfefe06dd1b65bb9b9833c588f329ca16e44f4922ec27e42f62a21a78dc34601aeabf1736ec43781ef95b3e08c43d501af801162a35b11849c3964e7e9cc8b5df612fdcb98046254270875c794792c2f1795b8a882171fccfcf5a3584eafa4dff58e1449b3590ee1f833d71be88bea01fa882e89dd9e6148cf49fd1336381ecd289df25dea3c476bd57aeee10d0a4768f98395d0c6ed4bf356b9fedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0e5cd23fea34561ccb7889a4f3b36be34e31b5943a06d8296ebc608c9d6f623f000000000000000000000000000000000000000000000000000000000000000055352ef2f6f7fc99a3c6a206ea828aa4e121e5112a7c5da62760a74958cd5984d868bf4ab5cd3050056231123a19adfc4f0723563dab4b706f9de6e6b5726c807e092985e1a1ee2652ddb19520a43f0cedd86b3699c87c18cc5962ee2f78f44f9e1c3a244d9f6facf3574099b42dcdfffc66292e8ba642d6f825063545a645e40d074afeb4bb9161c3149ae3e5e41690ae09ee6a59fe6ead775dcf89b4a4e29fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bf5d21a9c1b7fb9354cb3098f96d6935ea68dc47503ca75a2482ff80c6cef1effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869e424456dfa56753d4e9e148e949946e27dce809fbdae6e5feab58e8d27c1a00000000000000000000000000000000000000000000000000000000000000005022de3fa16ca886cf2a7b7d19434a609127511a912f61d63e9581885edd48b7c8a75cb4c1835c21d3ffdb9773c68f02697633377815b13b49d519281ec51bec0000000000000000000000000000000000000000000000000000000000000000335425ff4e513ffd6c10b8d74664ea3700983559c48b23ef405bc66be8820272"]}, "failure": {"scriptSig": "", "witness": ["d121f7b2fa46772f2cfc578befbd81b504abefd6778e5865b2c5b6755c31495101a118f46f050c81cbbadf2ffa0c9c6b08d2e446670a69be17d0290a8143215d01", "42269ce82f5929d7b42290dae7cb60c53a31b6a7e3b3e6eaea5b5598591109fab37e9d", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6eadac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4aa4f7c8436ca8d8981f6f5734f4602dfc0c44e18db601a12eb96596b0cd18640e63690ce5cc95121adcc35e07ced275f2317c26a179d197ac053960f0f4f147a1cb17023e1e615d13464769edd83781954ce40c3e997c10d9d563131adf152b0b301466fcc99b487f54bcdf71fdafe08c75b498cdfca3ea44357f25a0a6ec1207896441457fd2b6c92ace09ad12d6a1cc6b03727b3353dcdfd94d4fb9d5a4f5d74f2796b98f2c27dc0d9d31f80b5c4be6860f52f23a3a23047d434b27debfdaa5a5078d4000d66a22e2c7b3b94a6a7821f00597277fa5b950f8272c7903fe6ef223bac505f7b73447842270fe9ad944c23bba89cffd18d813eb3c3f2c24dfee534b9c8f80c0cd634f790cfecd39060a61cc867d995e38f8c6a0545cebbec068e85966b052432e8ff002c73077be3268fdff064ea813fbc6f3f7637440b79e3ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe2f2ca99382fea6afccba9d7672b7238401aa02b3b5b65688095ee89641bd0d65891ad30dc566cd59f177e8cbac8dbc3c996efc49302767d1b5e8302894ec74300000000000000000000000000000000000000000000000000000000000000001acc7e6410c48b21f942db9b7b4f79e17ad6a1c7b719589c08a3fdd6624f970e69846db1afc2154e1c9b23714d29820591741b528a79c50363c0b8135dd178597c6cf129cdfefe06dd1b65bb9b9833c588f329ca16e44f4922ec27e42f62a21a78dc34601aeabf1736ec43781ef95b3e08c43d501af801162a35b11849c3964e7e9cc8b5df612fdcb98046254270875c794792c2f1795b8a882171fccfcf5a3584eafa4dff58e1449b3590ee1f833d71be88bea01fa882e89dd9e6148cf49fd1336381ecd289df25dea3c476bd57aeee10d0a4768f98395d0c6ed4bf356b9fedffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0e5cd23fea34561ccb7889a4f3b36be34e31b5943a06d8296ebc608c9d6f623f000000000000000000000000000000000000000000000000000000000000000055352ef2f6f7fc99a3c6a206ea828aa4e121e5112a7c5da62760a74958cd5984d868bf4ab5cd3050056231123a19adfc4f0723563dab4b706f9de6e6b5726c807e092985e1a1ee2652ddb19520a43f0cedd86b3699c87c18cc5962ee2f78f44f9e1c3a244d9f6facf3574099b42dcdfffc66292e8ba642d6f825063545a645e40d074afeb4bb9161c3149ae3e5e41690ae09ee6a59fe6ead775dcf89b4a4e29fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4bf5d21a9c1b7fb9354cb3098f96d6935ea68dc47503ca75a2482ff80c6cef1effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff869e424456dfa56753d4e9e148e949946e27dce809fbdae6e5feab58e8d27c1a00000000000000000000000000000000000000000000000000000000000000005022de3fa16ca886cf2a7b7d19434a609127511a912f61d63e9581885edd48b7c8a75cb4c1835c21d3ffdb9773c68f02697633377815b13b49d519281ec51bec0000000000000000000000000000000000000000000000000000000000000000335425ff4e513ffd6c10b8d74664ea3700983559c48b23ef405bc66be8820272"]}}, diff --git a/txscript/data/taproot-ref/bb4c46289dbd303f6704b3a08d9e02f4c48b84e6 b/txscript/data/taproot-ref/bb4c46289dbd303f6704b3a08d9e02f4c48b84e6 new file mode 100644 index 0000000000..cd82bd085d --- /dev/null +++ b/txscript/data/taproot-ref/bb4c46289dbd303f6704b3a08d9e02f4c48b84e6 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4600100000096211854dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0802000000ae1def8304d9f05c000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987ce010000", "prevouts": ["77073800000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "36a4260000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902984083f971962febc2c9860df8dbd8699ca3fcec1a80f1b154752afb2bfa600e958f7ef313d6cfd20a5e6f3ae7ab897ef0cfc782af2a4185e6346883b8ae3ab07f3b7efa36f594be222d6738725562c44af05a495355b3f14a2d5bbae2f3e749cc735de4420d6316f0c3efae0eec72db55cce81826f68bf6475a9c7dcbadbeea486777f5a11718fa0a838fb82c89cb8517ae1b716d2cd227b58d496d998d62b53df1303fc734396fdf730d10cc641962e61ea09e4d6d34464cd4f306ea5df12b3f59acea54d40ec78298e7fa8c921b1fb67a81dcbd96681fd85ec7c637a0eca2696d8d48ec5a8ecec13638b37c239cdf1018853ae111b906e75ea9f3e69ffb912000ba2d5e5a7c408366093c7d69511e4e3ad83fe692827d8e0def82629e64d4a378cf59dbd07bc48dbc0281bec4e2e578718c5698079cb66b0c347a5d6ad263863640089ebb391d8e7552d3579ac4e5a3db829ca1f6f7a94127c78e5be2338695d45010d7af7f73b5d6d8c4c74354419b103ae2bbc8e050764e43fc198fd2279ee94901a990f590f1fd27b391451406a68859981f92a53e27860fd49fddd170e06fed02e483d8cdd43c977abb16fa54c4aa85480a8e7d620c37d08e371cb315e8bb1d7e978dc2588dc59ecc494827e98f0fb6621d6c9f38cb8b57eb22215058f4a3a233f6db5cca02e2bb99a1c860fda02f0c096b6610a52c70395c6df0c41e6d4041385ef9f8d46f75", "ac7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365d10d3505502b83681f86b5c9bb7a4ac3d4a0d96424a17c6ae9b696d9543a30775006811b549bdf6e8160f30212dc3199b386e615ec459cd6a9a101291e049b6126490c72a5b15e8927e2896ebf8102d665fc08f8a92e888d3aee8fbb5026d2b"]}, "failure": {"scriptSig": "", "witness": ["4d09026ca67e1918315273ff584130fa87692d8728f8624d2d55e5f24260b40f42677080994722e90ac5823ab52aa7e7b9d28bafb6abb149eb6d72e21c1270cb57dc1dfc89e103ae0ffa061688e495e902f874d94648fb9dd0a863518a6da81b1eb3a1f1a622d1723e78fdef3029478f2a97ce2a9a9d46b4c31449b7315da3cadd0fd1a4ffdcaa3b7e1e201e8136d51c8821a081a2acd8c5d78fd9476e923359fa4e28f1a1f1ac82539276daec1d1d231169c6bbe9d1dbbfdee0f36085e058b5d2a4ca6477a92590978f1a5afd2d8ada44ce79b3dd92a07db1cb614f611302f81e048d618ea1a941f4ff7d429471d69b3887440a89f1be49bfa34590a3c691f3f66a7e3b96d101f882f782bf079616687f6fd478ba0d6b916e33bbf8b816aab4bce598b414d2a08591742ad31c50eb0488ba1fc92e6c49e30074819d97049712c7782df2dc8cdb2c4db2f9b825bf44688efd725ed74987ea039088631433209df39ae7a6509e5303c6e62f02723085ebf6885b7f51c19f8c650dfc000009f82d8454cf2dacdc21c2aaeeabb9839b0a887acf92b672b5f26a168bd84dcef0bc0de9c22151ba1f2f17d75a17b4af6cf0509db86db70b0f15114749c727e585bb3e2812e207e2619e49bfccd6b24dfdd52a91f7e2f6951faaebf2cab15861a575b1feab4e43290ecc5e3d47091aeceda97843280fea4b68c5f6861108b0612826ce6e1d09e65a5eaeb34214d11075", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e877e3df24c23560dc7d916d43eb4e055d70ba52495a1ba5531ef20ccccb2bc5f4126490c72a5b15e8927e2896ebf8102d665fc08f8a92e888d3aee8fbb5026d2b"]}}, diff --git a/txscript/data/taproot-ref/bb4cc97eb2c8303964e3730c003f85cb88a0211d b/txscript/data/taproot-ref/bb4cc97eb2c8303964e3730c003f85cb88a0211d new file mode 100644 index 0000000000..301f66b2d4 --- /dev/null +++ b/txscript/data/taproot-ref/bb4cc97eb2c8303964e3730c003f85cb88a0211d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4e00000000a4ee171060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708b0100000082b99690015cef6a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc8000000", "prevouts": ["f6f17d00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc", "84ac1100000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a8a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a57a923cb0dd0cd2e6b76c48071b6322c8175ad0a8d13c02ef85aecf2afc050a837054ce51ecdc9e3a3777b2a8e44b7f174730ae5a790047b9842df02ff9276d2430956d1468bedd56ced1f149c0a08e9d241f188aa41dfacb5e515f08af1f16915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93619a55fbef70c8b7cc656576193fa332be9fc9118054e5528da63a20c6970f02acfab3477f7b3c3eab66b712f7a90f2a0c89c5ec16767e7d6e87c9be44117720e9b045cee6f1e54629d213b8dbfcd9de8aba2dd7f34fe21c75d81b8576e463c6b"]}}, diff --git a/txscript/data/taproot-ref/bb7141b532ed1aa0b98bd58bc84ec2e08f2e47c0 b/txscript/data/taproot-ref/bb7141b532ed1aa0b98bd58bc84ec2e08f2e47c0 new file mode 100644 index 0000000000..a75fab1e83 --- /dev/null +++ b/txscript/data/taproot-ref/bb7141b532ed1aa0b98bd58bc84ec2e08f2e47c0 @@ -0,0 +1 @@ +{"tx": "757a763b028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c476010000001189b0d6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3f00000000aa93a3e00138d3410000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5f354861", "prevouts": ["8ba4330000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a", "91555b0000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_3", "final": true, "success": {"scriptSig": "", "witness": ["384ee4fb4d496f70a06229e8cd09d2a04dbd57daae4fc7ca23f2a10d0392e3743331b19d4eb71f89acea580f07d154d2b6ba4e689989e2529d80a4f503e64a2303", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["cfee87544a77568c1d7685042c5de42aaf0417477075056b53986d9cfbe0f4adb0453d878cc44b92a126ec9792dac29cc999d0eb2d5b84bb4e1e3ee73fd6f85c03", "04ffffffff20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba04feffffff87", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/bb7fc95bb6e35ae77514934a3e4ffa53a6516e13 b/txscript/data/taproot-ref/bb7fc95bb6e35ae77514934a3e4ffa53a6516e13 new file mode 100644 index 0000000000..2c20ee9185 --- /dev/null +++ b/txscript/data/taproot-ref/bb7fc95bb6e35ae77514934a3e4ffa53a6516e13 @@ -0,0 +1 @@ +{"tx": "7fe69d4d0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706601000000d2634dff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40401000000a84fafc5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0002000000b17c94b301c64a37000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48713020000", "prevouts": ["0a4311000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "feaf310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8d227a000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1c75ad5b0c19c64f5d3a7fdf07b71b1a8f8b99e999958fe2a8fbfcbf733553f9475ca33d7e1e5f2997f74dd285eec8a0e5cba5080c4482d5b595e9662ee4b93be0a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367d0d894f81359a419367fc8ac631148e3eadd39a7159e1d5f784b52cce329de7bc80a3081e946651089c17942e2d2b7e0a2ba8b51162f8e9c4f29cb18d1603310a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}}, diff --git a/txscript/data/taproot-ref/bb85f9b909ffd0ec974d57b8e96a0afe8031c95f b/txscript/data/taproot-ref/bb85f9b909ffd0ec974d57b8e96a0afe8031c95f new file mode 100644 index 0000000000..7c6dd2c7e2 --- /dev/null +++ b/txscript/data/taproot-ref/bb85f9b909ffd0ec974d57b8e96a0afe8031c95f @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701c01000000ec402aaadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0c01000000553296460139f8080000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79629030000", "prevouts": ["dd961000000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7", "f5212600000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "cc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4c890db8e530b3b97e91b56063afadbbd8e6ac326e3356562c0a5ff1591f041d611c8e78922f12cf5b391747592eaf9e84d545161f4f09ddc8c51091bc04ba49d4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9132ef9050946e44b1b7e4a7390d57682430e3f2d85fcffb45dfde53ebbf6533b9ff415677aca4bd8bea8fa89699624d8c5f018d44ea89c1d7716b3c6d0480766d64d66e5a8ef59726e977ff218232e5171732e5d132f479dce590bd8ea056135478fd9f7e773d9cefb2e6c2d4f28929a19e0115b3c92e29fd8719e7d86d1ae"]}}, diff --git a/txscript/data/taproot-ref/bbb302be328567aed2f8a9548699284ede429dc6 b/txscript/data/taproot-ref/bbb302be328567aed2f8a9548699284ede429dc6 new file mode 100644 index 0000000000..e62fc7bb24 --- /dev/null +++ b/txscript/data/taproot-ref/bbb302be328567aed2f8a9548699284ede429dc6 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270980100000024408861bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc0010000009526508501d78f510000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7b999eb5b", "prevouts": ["1e9e100000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "7d097d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_49", "final": true, "success": {"scriptSig": "", "witness": ["204b61452f9fe2fb1644e91d0ca36695254feed8785abd3325db874c547c91572b2f1761d2ffa90b2a93c95a49d286533238f378297c2acb5e2eb7b0755e37f702"]}, "failure": {"scriptSig": "", "witness": ["bbc793ee902203e310aa3b4301fa4d7302103c559626d0574b354dc520c989f3eddb6d8c6718f7bc3e284a4bcd31f3c720f139560e8c6d24897c7a41b140edb249"]}}, diff --git a/txscript/data/taproot-ref/bbc60e9c8fe20335286b1b4c11f2554bf44bde1c b/txscript/data/taproot-ref/bbc60e9c8fe20335286b1b4c11f2554bf44bde1c new file mode 100644 index 0000000000..669b2c507e --- /dev/null +++ b/txscript/data/taproot-ref/bbc60e9c8fe20335286b1b4c11f2554bf44bde1c @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be100000000ec6e0586dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf100000000fd59c1ae0257407d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a666000000", "prevouts": ["82e01e000000000017a9141d8eff3030620b266a8bb5e50900ecd7b2ab72da87", "111260000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21561f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["57402a79b3e34fb69adb8b73c9d4d342a664fac0487a866ab4b684cacd69568755b3fd53b9b7c1c095388601fae8a88f38cb55ad2a3600a606af17cd42a27027", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/bbd6a4aa19b13347c78851a8c39dc87ba2c6cc26 b/txscript/data/taproot-ref/bbd6a4aa19b13347c78851a8c39dc87ba2c6cc26 new file mode 100644 index 0000000000..71a77f5f1b --- /dev/null +++ b/txscript/data/taproot-ref/bbd6a4aa19b13347c78851a8c39dc87ba2c6cc26 @@ -0,0 +1 @@ +{"tx": "53f634e403bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8d00000000fb2721ebdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c86000000001da8c8acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5c000000003f491bb602892f0601000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7ad000000", "prevouts": ["2902640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e4a94f0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "e76455000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c1", "final": true, "success": {"scriptSig": "", "witness": ["d48795d278f51367d376a8c5b3347124429f9a6d16bac06a83ca0298e3466ed83ef0892cf4983bd1b037b3b76124c2d81437b7019fb053841262394ca5b7dfc802"]}, "failure": {"scriptSig": "", "witness": ["0ba57f09640013df5738ef1948c73db63feb1b5219a4a0fb4277720579deebc06826e0fe2630b1cdf70c8e60de098725216694f45c022bd81437ff2fa70674e0c1"]}}, diff --git a/txscript/data/taproot-ref/bc18a41aa534670b3eb06ea552eeaa43a8bf670b b/txscript/data/taproot-ref/bc18a41aa534670b3eb06ea552eeaa43a8bf670b new file mode 100644 index 0000000000..c0a32ca172 --- /dev/null +++ b/txscript/data/taproot-ref/bc18a41aa534670b3eb06ea552eeaa43a8bf670b @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127008000000009184f39cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8b00000000b18bd5d28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43300000000963b85dc031aab6f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7697ea15d", "prevouts": ["9e2f0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "3c0a27000000000017a91486e5fab3386e07350db4c59e442dbaac96c1816287", "7c613b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "235a212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["58175476044a116be4e68d81ab3d7e6c5b8ff3c5bcc29620e7e8706c8e9a04cbd5a2c8424767b86dbba4a5fd3809175bbce64f1d301898a6c4eef159c70fae7c", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/bc44929f9083ce895cef6e68e78c51d907624850 b/txscript/data/taproot-ref/bc44929f9083ce895cef6e68e78c51d907624850 new file mode 100644 index 0000000000..2af5f31e93 --- /dev/null +++ b/txscript/data/taproot-ref/bc44929f9083ce895cef6e68e78c51d907624850 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa701000000f7176d97dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce401000000c70bcbe401c58e01000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ef01641e", "prevouts": ["75707700000000002251202eded5f58e3549770351ff682af5b38d1de1354573522cd8f1060c49001c6d0d", "9d5b480000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d18d5ba7e45c34badc4e90cee645c54b876f7f533727ef4633edf3b7bfead266"]}, "failure": {"scriptSig": "", "witness": ["6a3b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/bc61d16fcfe7499f1dda3e1aebd61701783f32bb b/txscript/data/taproot-ref/bc61d16fcfe7499f1dda3e1aebd61701783f32bb new file mode 100644 index 0000000000..2433261588 --- /dev/null +++ b/txscript/data/taproot-ref/bc61d16fcfe7499f1dda3e1aebd61701783f32bb @@ -0,0 +1 @@ +{"tx": "10ea334502bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8b00000000fb9e01a48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41402000000a58a699c023885b700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487eb020000", "prevouts": ["761e7c000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "7e153d000000000017a914b202aa31930f9cb7b85a632f41f1539f30714abf87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "483045022100e00cb280a9fbc8ed27fbdc1a1684322d90191a7935deff2b23d3029a3742920a022045947575715ad69202135ad7f07f38e1ab9956abd66bf39f11045178c3b3af6a93232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "483045022100eeb3c5cc3dc2659769bb7f4129e3e16cf63cf88bfbaa8793a1d19011c0fa84e0022054f780b1d64e8a4363bba38b9fe081ed29e9ecc52c46d0da13e279bff943328b93232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/bc63fef6a6e1da11f5ad9cdc8c82557d301f7f93 b/txscript/data/taproot-ref/bc63fef6a6e1da11f5ad9cdc8c82557d301f7f93 new file mode 100644 index 0000000000..3cfe6ea91c --- /dev/null +++ b/txscript/data/taproot-ref/bc63fef6a6e1da11f5ad9cdc8c82557d301f7f93 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d101000000275cfca3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5201000000eb0037a702a3deb500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374879c010000", "prevouts": ["c22c3400000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "f5b983000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["98", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936862595c5db495f9659b55a4931c0d6b5790089471348683bf5da646fafe3acb03f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082241df2003654f0fe7fc4600eb797dff990a6f251f130f49fda58fcd5b0cbb08c94c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936135308afc3f1b0427026314dc25c4582126331f233b7d3a6426128e486397ca6241df2003654f0fe7fc4600eb797dff990a6f251f130f49fda58fcd5b0cbb08c94c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}}, diff --git a/txscript/data/taproot-ref/bc94c09d187af83d11bc158ffad91041ae1cccf5 b/txscript/data/taproot-ref/bc94c09d187af83d11bc158ffad91041ae1cccf5 new file mode 100644 index 0000000000..b70e7b42a3 --- /dev/null +++ b/txscript/data/taproot-ref/bc94c09d187af83d11bc158ffad91041ae1cccf5 @@ -0,0 +1 @@ +{"tx": "59b68c5b02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5b00000000757001b360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f90100000023805aa70289676e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc3e020000", "prevouts": ["b8776000000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a", "d7ba0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "627d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e889c476762c97a1f480fe93da3602a750f62c0ee9bbab5a4ae1c7a4219e84dbc327529efe07ed3ec82dce77345a5c0eb368b138839946732056b6a908dbf5f05c"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fabe3373372acbd8f7355a742b339dc4113bb3ad1c8e82e6b2233d51ce74beeba4a979a031634820b293704e38f33c20e5acd9cb2a8735bda71fecc5f77708044027529efe07ed3ec82dce77345a5c0eb368b138839946732056b6a908dbf5f05c"]}}, diff --git a/txscript/data/taproot-ref/bcd93267863bf6c12c490fdca519c9a6fb257676 b/txscript/data/taproot-ref/bcd93267863bf6c12c490fdca519c9a6fb257676 new file mode 100644 index 0000000000..8f49d77a88 --- /dev/null +++ b/txscript/data/taproot-ref/bcd93267863bf6c12c490fdca519c9a6fb257676 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be9010000003b4ab8d18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49301000000992f62bfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c36000000004f65d726032c18a700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5f079022", "prevouts": ["617c220000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029", "dc55330000000000225120884291612dcc22b2c0e2cf19d55719f5f9dfe9624bd12dad94712b18ad4d330a", "c6da520000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09026316b3093e23cff5690a75befd7cff394a52cf7787e8654c43261bad0ae27abfd44e3d11c05bbc6e169291527cc0f4b05c37423d26165a9dbb082ed968bd6c683fe43e0cf34c12bdd6c2bbc66540b69a0ae144094abb7915888128b105a11f4de02353eba4eb2530803e14dfc07ac199002b212a24188b9e4f8cc0627190a56d547ed23a2507013cef2f1b8f2ca05356db533832fa6da70c31c65344a535d09b7f26a8d03f4f8e1303a368401f99300fdb02e79bc4b61bf78bfe9b8c494e3a2ada666c8ece2fb35ab5071fc0e135bd5a9b717c8aed49023e51fb504dfa1acbbc3fdfb6b37ebcf8e49ba646420d4b0e5ff7a26ced95774a58de0f76636f3824a359677420022dd07e81f1057163ee6171773c3a86d4ca42cd18b750cd288ef9d9d22e08f74f2a5b2a1da0b11cd9995d2c8b7b4bf24d72e00e2c5e956f84db761b40e14b0e9ac43d720da48fabbe946a54688f82dea65984a4db1f6ec6a116b8d78936a0c6ed4e6373bcf3a49f293d7ceb52f94dd7b511c5fa1acff68938736200c1e0faa878a51934afc483a4b8fcd4d3b30ff49394a57f9f7285acab6591b4db76c3cb33986af636daa8d12b2422211dc6fef8c7caf1baeab2603864ca5d2f429cfb8961eeb8b5c9f36e0ff50048b7e9181086d23bbafa0454d441c78a210e09f48540414010f0e92302ac8554ccfbb209ea9bb040a91578f8dd84abaabce2584280531ab9001ab3cb75", "287d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082462eebfc32d9e48af9ce92e50735d36faef083a1171bd1899835a9be2fa30ea55b4ae3ee914d52223472aa57f653ca8073aef0e7910b2553778e1ae03228475361bc10490c3b13d9c4f63caefcea4aba06d3a92ca8668ebd56c703a638058ee7"]}, "failure": {"scriptSig": "", "witness": ["4d0902dd9ea2ba14162add791a826aa4d18a2bf83aadd9fa241e5ce02e32edf1e21604725da111dc2871901330a81248307fdae3749a7bb6622be0017b88aecd56c8fb6784b529c18355ca4392e369fe39c4ec899eaebb1736791d517cee8672d415dc4a1a6d1e2a53326aced46560b4e4c6440838be5333ba364661b4b936d2cb5e9092bcdf53a18fbd9dad2873390ce9d70a5897a9754d089d66dd5a6e5c448c677fd45ed4aa4c8399909ac76508f67e413087ec3e422be2c5a6b1024177101929ac548a3929db2f130aa99c640587e909b53345662449ad6051f94665459f1ecf1b5f7a28ba891ee9bb94de167eac25ed1cffa509ddf4dba7c71d2b5161ad5ba24979f00e01c8f38a9f216e350c2462c6d87b9aff146cc2a6e140944830637d9fac839b488eca6e06b4f529e25af9e092cc77422f21f170d94944db3c2083e8ac972d19b6891dc09aa29c75ee1f28d982882675efd5445525666b7279edae27205508c041d2e5ff6beea552cfad24739ebcdb352e511f33e7d7a5d8c2fa68e96136a2e2e7d8a3427f7d6e5aff3f747f06375589b19f0a86d5fb00e280a6c6ff1282decd519207f62ddafa3f14597a506517c5ab0faf16b3f530c7c7651f9a14c93b335bcda499637407f5ddb7c342c3ff36bb6c9ed6144764652eeea2296dfb3621ba5f342c31335ecb60f407a6f0a7efba1966d35f210dfd9ee9309c18c141d4ea62c094864c276de4b175", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e896153d9d0825641ad9dc2862c4b07cae929842b36229bdcb06007f7d47362644efcb4d33820b2e80b50b7a60cab20b6261c566fe48480267b41ad585cde9a4bb"]}}, diff --git a/txscript/data/taproot-ref/bcdee1bf1b6f002a01bcb15b07e1ceef6be9c962 b/txscript/data/taproot-ref/bcdee1bf1b6f002a01bcb15b07e1ceef6be9c962 new file mode 100644 index 0000000000..6009aa296b --- /dev/null +++ b/txscript/data/taproot-ref/bcdee1bf1b6f002a01bcb15b07e1ceef6be9c962 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42300000000b20b5953dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4baf0100000081d35f7204231e5800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fced000000", "prevouts": ["db4e380000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "31d2210000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936efd379c9bd4c758e31629b45da72255f4fbe43a7d074fe2e3f642017976348fe1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045135ed0e678ad02d8eb601751aa1b9acf14c9c27e67d62b009394546cc2bb02284b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936084e1b08cdbacecafb7fe0fc3375aa5281f8489002cb7af196f64e737a534ac134849a28cba9aacf50a598dea57ce3ca224575357c4c8c887db8ba6ff2354671f69ea04c091b2bc3b7c7ae53ee1804d998a6447fcbbef49abb62b7a394c4c123854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}}, diff --git a/txscript/data/taproot-ref/bcfbb863f9751dbc9e52565fa18f52d7cfc28dc0 b/txscript/data/taproot-ref/bcfbb863f9751dbc9e52565fa18f52d7cfc28dc0 new file mode 100644 index 0000000000..2a5624da8d --- /dev/null +++ b/txscript/data/taproot-ref/bcfbb863f9751dbc9e52565fa18f52d7cfc28dc0 @@ -0,0 +1 @@ +{"tx": "9ca1b5ad038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46400000000a64e37f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e001000000fa4a59c660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703701000000d0973dde03647656000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd90b845f", "prevouts": ["ae4139000000000021511f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "4d750e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7465110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["0ec179f5aa9aab3890cce0bd1f48a6488eb01e39c43647fffb3d4715e58914dac41fffaab53dad2b6f3bae7f48c508c1baf0cd580756d01b34db596112971498", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/bd06f79eb234682d1b026c5b614cea268261d69b b/txscript/data/taproot-ref/bd06f79eb234682d1b026c5b614cea268261d69b new file mode 100644 index 0000000000..1c068a07b9 --- /dev/null +++ b/txscript/data/taproot-ref/bd06f79eb234682d1b026c5b614cea268261d69b @@ -0,0 +1 @@ +{"tx": "c10517cd02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd0000000008c471e8b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49a01000000bce4bdca0378d8a400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d4783521", "prevouts": ["59bf6f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "536637000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_5e", "final": true, "success": {"scriptSig": "", "witness": ["5f36dde2a806443a28c62c5e35174eaa03da2458f83478089899614f9737fb9116f0885286c095af83ba64d43e14bb6ee6a637cd0e004f5d2d357c950260d0bd"]}, "failure": {"scriptSig": "", "witness": ["518f7a889717ea067c416eba5560f8ce9405a39894357f02cb803a566343a4b81c7d2df2abcf152d2f9eddf7ddffe779a022c1e884d7114dfe3efbcb0fa6f50e5e"]}}, diff --git a/txscript/data/taproot-ref/bd10e29dccdef5c1bc2693b295ca9c3ee1a5e9fb b/txscript/data/taproot-ref/bd10e29dccdef5c1bc2693b295ca9c3ee1a5e9fb new file mode 100644 index 0000000000..95165104d2 --- /dev/null +++ b/txscript/data/taproot-ref/bd10e29dccdef5c1bc2693b295ca9c3ee1a5e9fb @@ -0,0 +1 @@ +{"tx": "615a5ae8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f501000000cb91e5aebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb600000000f9c80c9a0168a86500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac40208a60", "prevouts": ["8d6035000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088", "62a67200000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "8f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a5823ed2420796b51d928b322338d26a1b11db5af291eb20326b952994336cfce4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e81f261744aaaab7b61bfd8b873ce05c274059b1d1cb072d2d2c67e8900f407405dd5f972b05e2f18c3e7c797b604beeb8879a3af7f1e10968a0ac8aaf9d489fe7"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369dd7d600adfc804e2c499c39b2008fe85e995bb2ca03b92b0580b9363b6d74c2ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457f8fae370a255a677f2f729010dbb329fa966ed9a0dd82e5083dd7ea90426dc47"]}}, diff --git a/txscript/data/taproot-ref/bd4570befca425281b554426e78e723b29b91aeb b/txscript/data/taproot-ref/bd4570befca425281b554426e78e723b29b91aeb new file mode 100644 index 0000000000..babb00e6b4 --- /dev/null +++ b/txscript/data/taproot-ref/bd4570befca425281b554426e78e723b29b91aeb @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff40100000023239086dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1b000000007b8490a101327b760000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79613fcc133", "prevouts": ["b0486c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "47c754000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/1000stack", "final": true, "success": {"scriptSig": "", "witness": ["2f8144252e57e2ff668ec3e4f237ae5840a370eb2f20eb22560bfecc7693b401766c4898f6d52974f274b58378b6c916e297548aa1d170e07290aaaab569f311", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab71800260cc4c45d928081596c283425b86befc4cf867721566fba167b9248f9962f30cd6fbb48af3455887495dfee86d4a98af282e2d7bac6fb2ca2e45891be3a6edcfb587287623b4acd2d694696a040c035c3516bffcbceafadc18652f0116feb5c363cc9ca7ae37fc813d8e2765e43ab73c23e8259fb2c39466019f40dc69ec72a5666efca96852a89de09ab7aeffee4b172252222f5c5e8b6c3009c9df82670f592845de8ccf6ed9bbefe639facbbd54f6cf7f8beb23a81bc5872764b7c781e74d39289c012c9134c71aff2c94895c0ee3473cf7b2b9f1482daaf679eefbf975fb4201e0a2b814c3bf547e47eb4a23672ac784435f04b7336600ec6a82dc784183e7f3cc14811fb1ab50df3116b5ed0f06967eb560f7b9991615332c0ef3606a7ffa22127f3860c477e614ab0b0e9d584049910be53886cda4c5b22b7fece622d42e15d9a09f8ac238b01a6949cb9ab79b540250a90b3fc35ed3b857ba67cba4445e9cd0a613a5e6e514eea7a9da662a1fb003dc0b1555d407474a0fa29f0302a595cadbe6f0743d5ef50dc2b0826f0f2e0e84d35ce4b31a2be87bad075dfde575d48d1eaafa8343c63d6f5425984d2425aca274be02e47a5142e089ba2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["29d1cca0486ba0e3d27e539fe1535f40da0bc2b0cd6308caee1a038a00a697aa82cce42f11a621c5250f59e468c62cacf9e98937655e26a12d7d2c3a5c6e5c16", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad517676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767675757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575757575", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936153e27070caa292b693ba4ddea8b9482a94a8730fa33c3b3b79ac286ebe40d98bb9d4f1e1e27d029ac6035bf75b0bf88e449c1157741f34d74a96fa066585cd40f99255f893286e215f8002b6d42379ac05485fc11174807e91a31d72f31064dc7fa482117f2c5ad3e450de7bb7eaab611474644f8e1f61caa7962547399fb88342aa615c18023bc33d53d99e896741c8b9f092f128901fe7c9ab35d5600ba72a7eb899eb88c356ab781f6b961c1d6de999781ad65362895c26bf88f330758ef0a72f7d97ec67241c9c95fa34ba9ebf41e4b62c116447535fc0507b0528b1da112264249cddd61d525ccd9ae6ce25acc100082ea9e5e5b1e11e9dc8fcb842061b7fe5c11f617e89d9c8027e8e5abc775a151a67e9ae53e23ce27de7d6b1c7da91877336e92e5a41e5368ea40610a7e213130c1b8bf4fefe5f8f2ad406b661c206a1fa3da1ed0725b15b20ccd115752a72fc7118badcbaa8e05d81ae5299a6df4da1ae37bd6e3382ad5e5e5895bec0d8addde979cb59da276665f005ec58aada8e1b94341016fef68bb49557d2278eb05de13cc05cd27e5f6f381c44fd0963b076f28feb26558d4d064770c2eb738b0251c60e0a639239140ddba0ceb61ff7c3e738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/bd4b0d5ede1b9b28ba821e22b21d2e67eb35fb46 b/txscript/data/taproot-ref/bd4b0d5ede1b9b28ba821e22b21d2e67eb35fb46 new file mode 100644 index 0000000000..3087c426c6 --- /dev/null +++ b/txscript/data/taproot-ref/bd4b0d5ede1b9b28ba821e22b21d2e67eb35fb46 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703f010000008417bf8f02fd950f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a66f040000", "prevouts": ["1d8a12000000000017a914b202aa31930f9cb7b85a632f41f1539f30714abf87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "225d202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["2f3970c4d5172c246e2ea982a8bb87c9305b9cbf15d84bfd540d941f6f122ebe2ef3c3501030089b489936ea72e2e92c2663ed2b20a02369ba745daddc80a6f2", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/bd5b6bd1cba3b3c9511abe6e7ba85869cc7271a8 b/txscript/data/taproot-ref/bd5b6bd1cba3b3c9511abe6e7ba85869cc7271a8 new file mode 100644 index 0000000000..b9060f9ba3 --- /dev/null +++ b/txscript/data/taproot-ref/bd5b6bd1cba3b3c9511abe6e7ba85869cc7271a8 @@ -0,0 +1 @@ +{"tx": "0f23d10e02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0602000000ff1278f3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2d010000005422bc8b0191e85c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4878f7b482f", "prevouts": ["ab6a490000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "388f1e000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["80", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a254e7cc6b57a9a94b6584709e7056848938ff7b5d3cd788647ee9c8c010053bd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b44d35a0b3fc5d8cdca17f6fd766b3b7f076a7a891ad519d38c56688c70ff9dbd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93689697d7380f4ad31bdb00c7ff0dc66aa22f6bae188bed2870f771977d2fb8298280ecd46f67705e4464578fc0c4eafd6d20a38d5c68152a49fc5d0c6b2a7c87ed2fecf8564d6a652bf0232997fa790ca314d73b111c417284694cd1738ccb12191585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}}, diff --git a/txscript/data/taproot-ref/bd647eceba7eb445528903854da69225eb46a33b b/txscript/data/taproot-ref/bd647eceba7eb445528903854da69225eb46a33b new file mode 100644 index 0000000000..1707c1be31 --- /dev/null +++ b/txscript/data/taproot-ref/bd647eceba7eb445528903854da69225eb46a33b @@ -0,0 +1 @@ +{"tx": "778899b603dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c95000000007c54b39660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fa00000000b5fe039b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a8010000002867b9b101c0ee1900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2bb98647", "prevouts": ["325f4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1bc120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "09e33d000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ce60b07daa005e7e961b1cd1197a880b0926a9defc492f43af4f596fa4d95286ebf10485a7565da4888b0296454aba30a39a8416dd3eaaebe7fea4a18750e931ca477f7eac6c013e182e33a949b526b028f901138401b50189d2a4f50cede7d4a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}, "failure": {"scriptSig": "", "witness": ["4c52f4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b270b4d2addc31b8421907b0cff80194a5513593e3802bd921239c9c6063ea806bb655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}}, diff --git a/txscript/data/taproot-ref/bd806dc6dd950acd2fb4799772f9284b52b3eefd b/txscript/data/taproot-ref/bd806dc6dd950acd2fb4799772f9284b52b3eefd new file mode 100644 index 0000000000..b9e3d342bf --- /dev/null +++ b/txscript/data/taproot-ref/bd806dc6dd950acd2fb4799772f9284b52b3eefd @@ -0,0 +1 @@ +{"tx": "aeb1416d02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1400000000d2529385dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2f01000000774ad9b801e1a53e000000000017a914719f78084af863e000acd618ba76df97972236898769876854", "prevouts": ["c5d0730000000000225120cd23ad59c6016ee1812d662f3dfa4b488c728badd6e7eac21806d0875fd86aaa", "03124a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_3b", "final": true, "success": {"scriptSig": "", "witness": ["0039ced3a4e60b7417f7be29cfbbedede4cdc075ac33a70fceb0742fcfd301b8947895373ef1792ea5a97a226e4c9206957f21475c0be7c76ca15f50b84840ca82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b0f50233317f8973d9568589c79e87b3a0abe2422eb4e297ee7885dd08ffc30eb3ec01e52c478a1862c02c685da06ff070a3643fea6feecdbdebf802c10d73433a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/bd90aa727c6f46c0b214029c4cc55665db207ed4 b/txscript/data/taproot-ref/bd90aa727c6f46c0b214029c4cc55665db207ed4 new file mode 100644 index 0000000000..6ffe2559b3 --- /dev/null +++ b/txscript/data/taproot-ref/bd90aa727c6f46c0b214029c4cc55665db207ed4 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bba01000000a2f78b97dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b82000000003a48009dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5301000000e7fb77e004cb3fcd00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7f2000000", "prevouts": ["d4b42600000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "69c2270000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "926981000000000017a914971b3e5f9ac480bdcebf6ea71a9fc7de0ab164e287"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "387d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d6aad208f2c248715bdc6adf729c9891a9ee5b587a39890b212ec8f00fab902c542915153386019108494d00e6bbd0a8a4ab824ea9158d8694b82aeea9ace0ff7118923d14a9704f5c6065ead9bf1df659362e443facca38f7fc54a29b18e2b8fa601fcc68a78472d280e0a6f10ace0c22dad9ad93c154f995d1132d7b2f793"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7acf5321bd3c280560a6e93f009006b65547a58d72ede42c89f2f760c3bf47a1d1aa12168afdb4ef286e7748ddb08cf408d85b089f504486378d2bfb535c0d2875b"]}}, diff --git a/txscript/data/taproot-ref/bdb75495237a21c1632a1d8002a2de43c75cbece b/txscript/data/taproot-ref/bdb75495237a21c1632a1d8002a2de43c75cbece new file mode 100644 index 0000000000..7143f19b27 --- /dev/null +++ b/txscript/data/taproot-ref/bdb75495237a21c1632a1d8002a2de43c75cbece @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd801000000e90e4673dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c17020000001ba48a0c0414137a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdbfcc93d", "prevouts": ["a9982800000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "c1345400000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e64c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93623815ccbf6fec00b3e507aa7d5724ef597227ebd84c2b7f91468956cf3ee8c66d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51575d1df7a3e4c47ed4bae99c3344f7d42d0c4d3b112e8138771efc2bc74e29dd3ff737734404bbc9015f34371be38b9f5376f1a60720e7cf7da81354011ad4f7"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bd48f9ec9eb75f9ed6679e2cf51ddd5d7e1370016b30ba4c50a73a51ef54d3d62f8e5029e924e7d935b65d329b99c619ed2851847f9f95e76ebd19c6b8448036f7205f064a536655663faab66bf2e716758d251376e4a55710082b6d7272244791bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}}, diff --git a/txscript/data/taproot-ref/be342f285479f59388d4ad299b262298ea0a194a b/txscript/data/taproot-ref/be342f285479f59388d4ad299b262298ea0a194a new file mode 100644 index 0000000000..98682f34f3 --- /dev/null +++ b/txscript/data/taproot-ref/be342f285479f59388d4ad299b262298ea0a194a @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ce010000007fec828bdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b09000000006f3caee503bdb35a00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac0f030000", "prevouts": ["950536000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe", "2df02600000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902aa8d4b20e90453331fa307a9dce37fc19f92fe8330d08a9319a0a632a1f803039a26fadd5ca8540c6485927fb92a3cbd1e9386c4fdd6557743de564d62b2df1eadaa1f9045a1a1dec1c27f9c04101023b9e199d1d4fd77f9645ab6630375ecc949891f381a015e70f2b098bcb9ca20885a6a9a4468365630b792f17cbf5ab8f2b30cee7603afa29c82e020e47f93d6a67ce57944ee7b4dd94dcdd40f9026ae0a6ca1db23e0f4152a4004cfd3628709f8f9866a495ba9594a16f45f307a6742edfafdf6096c99c2ea4428d14f6d0e940217a090e0f474202570a539316e2eea9d0a8c41641ef66f4c7528eb92a6918b2b61cdd4172734c8e5ea6618e214830fb2a843fc0979887d7181a40811b189b7fd2d6271519b538c91f52f26dc16c3e49241cb5a7354d01304935caaf3d79d4362075a86882c1a4314e438a768019f462228e4940edd2639266cb1078e0636ce3d3e3188d8e2ef57328c192760a51d31944f20dbc4065e55ef8ff1ddbc2cd5ecbede6b2e24cdc902a0b33a41aa4af853beec8ef4a87f2e23a4aaf28880819685ac4c10b785f6772169aa2f790bf00b8b08d85bf9ba6a337ae4d145cb872856e0612daad3654981092b36f65a1ae47364de5243dcaf5e0d703a795538a39a3d8da4fe4a59e4ab087d8e1cc6d65da5b35d9ae981c8562fa5861cb9e8922d1b53178ab7189acb79bbd921a52d3795d62379e07a6e2f63c7094cde4175", "937d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c8e826522e1ca857c1f86e804e4cf6a726b8f2b2090951428365ce33c52bd4d08ba990ecca3673e7fa8965b90b12b1af4599069410dd603db7b6040d82b00ca2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd6f60e166ab3c31d6fe53c0e4c47c333102fdf48f7428a1dab907384d3ec09a32"]}, "failure": {"scriptSig": "", "witness": ["4d0902053ca9fade99b14e5569f3699c39d4fc566908d41c74805e85c43aef4e30e3b54d0abf18e17b3057855519b850be83215fa82203e186d0dea3f734dc965815040aea9fc92b7178551a3cda8cbfeb5964dcbb035f7e341e53912a25a89f174984de82b1ab47bfa1ab6bd36c325201452c580a30f892d9835e89cf4d9bb8d3a69f6d6b807db410552792113af6e1f53f0c86807ca30b823c6403e8f32d8fe2ac4a2da9bdfa2be962ea78d9d581f85390393c9325a94792f435ad3b2f76944f602fdaf0ca1a108579a25c39d0291308392f817de5cdfd1d584ae0873ed718f2505d5964b76dcbffdea5fdfa2b0099ef34ed4f1251c23533bca341429f309499346f6ff23db4de63966a91c68052c064e9be87dab97917f6fd5c468977796278a95d816ed51fed207d05a400863bd35350fa343a95b345285f54ff5b4242cc3709713c313b46e5d094e64ec4b968eea4054e9ccb9fcb44adcf14e379e7c81bf7a5ea3c88a159be69809de42fde5df2ba8f0ca45c7aab31bc657fa1eaf4dd5cec36dcf6c5168c5a60e0597e7ad7725e177969a937cc67d2276ae8fdd9b470486122135695cb66d52ca70287e8a66a833182c5c4e111f0eac056bf99c4bbf2173417ae815f232935684226c0444f52245a82cd7eb560c78febe6d3297cb6d16a65c144210e065987c306d40a78d0f65a1767b46fb7817004298b2c412099008bdb1b1e78ad657cf36bb5079075", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d68141f1158f138a84a3a31991a11ebccc606b1e605d90f596b1985e9f081fd92e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd6f60e166ab3c31d6fe53c0e4c47c333102fdf48f7428a1dab907384d3ec09a32"]}}, diff --git a/txscript/data/taproot-ref/be4056e6d4621f67f649cc023b36d0616763fb74 b/txscript/data/taproot-ref/be4056e6d4621f67f649cc023b36d0616763fb74 new file mode 100644 index 0000000000..6bdb0165b9 --- /dev/null +++ b/txscript/data/taproot-ref/be4056e6d4621f67f649cc023b36d0616763fb74 @@ -0,0 +1 @@ +{"tx": "35adfe970360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d5010000006640029abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf78000000003657cfe8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdf000000008532f2b1014faa6c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4871d222b1e", "prevouts": ["96730e00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "d08c660000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "f2fb7b00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "8b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9ce7b6ad2b5db54c83a35a4c940a86c1986dd4e23a9b088042cb3ad14ebadacda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e86a27b1635c4d20405f5eb1d8e1a675f8ac3bff005ffde1fde7fd53008c3096ff2e441b555c43a724b579c479d380c278f8ccac4217fbfdcb96526a1dcd96287"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8726c3b29d073c2dbcf72056f4f7511ea796d648b755097daf6738edf6332d6d84d7dc2c55a7521ecc297ff7217b922438f95dd9c29c118a2bf5c9e2c8f8c84f32a50ac17afa49989b8cd5fe09550e31f987b9afab4d6ff7fb0ac42074cc4b38f"]}}, diff --git a/txscript/data/taproot-ref/be5fa21ede21c3ae07d18916186307eb0dbd0b20 b/txscript/data/taproot-ref/be5fa21ede21c3ae07d18916186307eb0dbd0b20 new file mode 100644 index 0000000000..925528c431 --- /dev/null +++ b/txscript/data/taproot-ref/be5fa21ede21c3ae07d18916186307eb0dbd0b20 @@ -0,0 +1 @@ +{"tx": "a8b2c1d602dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5f00000000a06df2f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42701000000a95303a40343c087000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7967f000000", "prevouts": ["517148000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "1fc6410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_76", "final": true, "success": {"scriptSig": "", "witness": ["4f8433f2f7f1ba4576941e6e8aec25b95bde8ecfb62e2ae3c7b9d8629519096bfeeffabd5d79ae1fdb64e15529dfd4067e4767d4e0f7de3f01aecb9f39ff606502"]}, "failure": {"scriptSig": "", "witness": ["ef01a51bf5a1a9c05df3f37ef53f59e15b00c57214dc80267d115ce196a1c6306e1ea4d5fb19035e981640b897cfb590759189c0ca1520a4e8261d10642818d976"]}}, diff --git a/txscript/data/taproot-ref/be6dd32445672ad01a41728099573f056d19f11b b/txscript/data/taproot-ref/be6dd32445672ad01a41728099573f056d19f11b new file mode 100644 index 0000000000..eb22035fdf --- /dev/null +++ b/txscript/data/taproot-ref/be6dd32445672ad01a41728099573f056d19f11b @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d00100000061bcd71c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46200000000492c8d5abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfde0000000026f8a34302b303e60000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87ab000000", "prevouts": ["6f8234000000000021551f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "b983310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c2d5810000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["f14e5905ca8541b51d405c71cf3b707b00110c385335fc5149daa88a2cbdee9bf8e885b0d23f4d2d1febc8c047ff70d3e28c87b150df581dfeac0436f45256a3"]}}, diff --git a/txscript/data/taproot-ref/beaac08761cf0537284bd2fb73e52c21bf944e0e b/txscript/data/taproot-ref/beaac08761cf0537284bd2fb73e52c21bf944e0e new file mode 100644 index 0000000000..90a1a0d333 --- /dev/null +++ b/txscript/data/taproot-ref/beaac08761cf0537284bd2fb73e52c21bf944e0e @@ -0,0 +1 @@ +{"tx": "8346c76302bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfec0100000049bf40cebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd201000000179187ab04897dd9000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961d3c802a", "prevouts": ["952770000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "18786b0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09020132a6a877721f6182c4900c8c9a91ee785719f3dfbcfc4679289a1694c470b90c9077c924505af201de570bea2460b67bc20b4d0b3675c884fdc16bbe98935ba7bff6f3222652f89bfe65fc275b90c0d36c5b2b0c1c59225cca442549c7fc76e2a056ba0fe01368d4d6c46f7c804d7f4d75e0ec8381f1b1ff0cab79577028c2b69154cd021e395227da4c66490b4cdb1b52adfdfabe9c727f4a3ba9543e3e8d284fe38fd10c2cbbdd926c87377b2666ea2ba16ae6fd9286bcb4b157246e9d22c7d15c58dafcc7f824dfbc8b2ed260996d8a8545c083d9bd5f8a4797c3bf4b2d8c0020b54b7d381a8ab8f0e3e91fc27a470029835357cb11be900f086c301c65c4de2fd3e1f4d00e69cc02ef8dbe3eb99c6c4355375f172a20e7d2b926f81f542520582216a6e2131dffe588259eb75d46f4993651ccf6a0c4a40d35a76efffaa3e3bbfb2895b5352f039a93e2ca64bff32bde694c8e3803fcb7ea045e23f18beda32168645203709a71c5496190638e13f30440aac591e0cba87cfaf1880b6bceeabda515773804f242f525e90dbe4f3d308dc0f26ebde88142a7510f7c0f1432e9c0800fecbd0353acdda68a2a615bfb24283bf0839199e56c0a4a195159784af1ff3938611a6342132b83f1963153e52f99fd26d80cabded14c269d6011defb370bb4ea58f62162cf5856745a887a4120ba846127cb0c4190a7f3ef5f07ab915f5a57d974eb299175", "5e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360255f52c8249e8178ded2a32ad0258987e50c1cb8bb770ab3f43966deb2a2d7ae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e865cca6be1d3cc9714f9205dc72257def63c8e50f66dbe399f94c25bd2c6a85f30c8cbc16505271ed8ce1a03d67d2c4a35529bcf4a25ace24696315022c27c9cf"]}, "failure": {"scriptSig": "", "witness": ["4d0902808d9404fb4b3798376a988157648593747e7a034cd98f53a6630d1b615af6c9cf43478542ad720ede86dca64be382ef0e7232dbed262fc18ef85d7b108fec2e5939a32ffab50d9b9a306395a98b4438222f42f4c0bf7744e09e5c5334d80a1cf4e12e67ac261099d97b3f9564a5a20bbb1a30ac1ccaacd2a0f88877a5b27e30cd484ec42a1a1509b4964a22df568b947821363aa1b33b01ac33a12dc41a996399b9c2586588f3f0f8116bae35052bbe98590afcbb8164a88ba19ae268a23bb8ff3c24b4bf99466aee5074480c785afb89bea43717ec6ea3626da91bcf9e11a9447cde92f7f7a1be0456c9ebb54a2583690cc6cc204ba6a28f03911c9486329265f1150e7f926d1c60171010be6c7030f7a7da91caba79fdfcfdfb62ccce9b5a2273f749a541c852e9450dd0f42153d038171a22a253f9501d5b4036d314ace61142185e6767ceae26c996bd135b32886e72a686202ea4511e986c3fbbfc43f581bdc70b1eccce05ea76faac3246f41d8c44819b1b5c6c1009c12ecd268c517f2a1eb6ae8ee4ac0e8f701f79e6cb9411861314cd4df8ac183754289b71cec313e217f07928dbef2ee814970bacb39395d837db23cf0b5671d2d9c50514dfa11df6df706095cebb605911f5fcb0ccec1921508f64340978fee108ab3bec6a460f81f10f0a291e354e54ae0212addbfc48dc59b37fe353f9c779475bc2c9e18996149035ce888383817e75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f7c874ff1fbfa959c18ef617f316a882ee2198cf6b5111461971622ca58a5e82e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e865cca6be1d3cc9714f9205dc72257def63c8e50f66dbe399f94c25bd2c6a85f30c8cbc16505271ed8ce1a03d67d2c4a35529bcf4a25ace24696315022c27c9cf"]}}, diff --git a/txscript/data/taproot-ref/bebcb9f288f4fe614ba1fcc940d72dd3a2e9182c b/txscript/data/taproot-ref/bebcb9f288f4fe614ba1fcc940d72dd3a2e9182c new file mode 100644 index 0000000000..c01c11d971 --- /dev/null +++ b/txscript/data/taproot-ref/bebcb9f288f4fe614ba1fcc940d72dd3a2e9182c @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be801000000bf09559001077e01000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374871a7a8a50", "prevouts": ["20eb220000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["954c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93629aff60e439a9718fb9441d494108642f29be2d6809c2540641ffb56ffbcae4b3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082adc7c8b3bda8f17728820267d55a41d559bf30f92e294931cb4fa644579829c4d4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac8a0bed6c7bbc1bb08bce33089c031a9168eb2767a677139df21750243f2d5cc1a4178950446608ddf8409535ad79bdd567504e9e3f05b7b17ad70ac9eb9eeed4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}}, diff --git a/txscript/data/taproot-ref/bf0031c6d9edfce82c4f7c49f277cbf11c628084 b/txscript/data/taproot-ref/bf0031c6d9edfce82c4f7c49f277cbf11c628084 new file mode 100644 index 0000000000..dda9ea1ea8 --- /dev/null +++ b/txscript/data/taproot-ref/bf0031c6d9edfce82c4f7c49f277cbf11c628084 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cc00000000b8f83b5e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b000000000ea20edd1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7b010000009599d10e01c5f72d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac71030000", "prevouts": ["f6d641000000000017a9141757f4686f091b43a46fa47e92d07c87fc7a205e87", "5b42100000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "0c43250000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100b659af5bc7bf80c0cc1eff37ce34f65896a55c1b5928722bd104ad49c4575d8e0220432bb1178b580c0df0a6a1997145559af84288267326e28e33274f2adb30a24f81", "witness": []}, "failure": {"scriptSig": "47304402203185c77604a8be90ca85a2635f87cbc38e72fed7f3bf5b6167da1b72a247f115022052f94c5dab151061d03ba94f1cdaac6993fc438b0578e71ca6ccd902a03e5e0581", "witness": []}}, diff --git a/txscript/data/taproot-ref/bf1ad139661581e23e01c40061ebbcbdbce507e7 b/txscript/data/taproot-ref/bf1ad139661581e23e01c40061ebbcbdbce507e7 new file mode 100644 index 0000000000..019dcd17b4 --- /dev/null +++ b/txscript/data/taproot-ref/bf1ad139661581e23e01c40061ebbcbdbce507e7 @@ -0,0 +1 @@ +{"tx": "8e961b1c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b601000000d2b48baabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4d010000004b4050d501d0c7520000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72bcffb39", "prevouts": ["4f560f00000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "bd2f6d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a1", "final": true, "success": {"scriptSig": "", "witness": ["62c49876ef07b3464242db73f082f9d482b7d88c47d5cdaefb0696f8b368f778aac96a46d323b54768c65fbcdd1819196713f6af1948e3ce372bd0c8a4e618d001"]}, "failure": {"scriptSig": "", "witness": ["4ba62b3b90e2fef1f92a3b27aaad83a28597f4f4da0704b7156490f23b896c84d09f5bf1ef52bdcf7eb59102e61b453081e878cd30c3f461caf01a536b1c9929a1"]}}, diff --git a/txscript/data/taproot-ref/bf2b441671494bdd813cbde459c3f201b5dc132d b/txscript/data/taproot-ref/bf2b441671494bdd813cbde459c3f201b5dc132d new file mode 100644 index 0000000000..ef0b8f1919 --- /dev/null +++ b/txscript/data/taproot-ref/bf2b441671494bdd813cbde459c3f201b5dc132d @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4620100000077ad6e89bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2002000000f77fe99c020797ad00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac10010000", "prevouts": ["0b6c38000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a", "12fb7700000000001657142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["f680ed04b947655837744bfb290282b3ede1b1c03b28e020f9570c073aea52469f618a73356d310f01231c0f2514a2e3ea11b3e86f75eeb186369e46407f1b54"]}}, diff --git a/txscript/data/taproot-ref/bf34c8983707b06356e258d949ea5d5b386f793c b/txscript/data/taproot-ref/bf34c8983707b06356e258d949ea5d5b386f793c new file mode 100644 index 0000000000..a045088914 --- /dev/null +++ b/txscript/data/taproot-ref/bf34c8983707b06356e258d949ea5d5b386f793c @@ -0,0 +1 @@ +{"tx": "59b68c5b02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5b00000000757001b360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f90100000023805aa70289676e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc3e020000", "prevouts": ["b8776000000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a", "d7ba0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d2", "final": true, "success": {"scriptSig": "", "witness": ["cb494deea94a2cd8ababcb8fcf7dbc7effa7ab798ea761eedf5d548de2b675327ececfd5df4402be7a02e3fbe261c8fefdbd715c10be79eea5e927c83fc49ed202"]}, "failure": {"scriptSig": "", "witness": ["e8a6df26db3a2ea40536d18f5e81c11356febd0254cc7dbfd8b4cc92dee2591d6bf31cc12bdac996b4f175fd3b91434650e56e8841a0644e9151289511f742d4d2"]}}, diff --git a/txscript/data/taproot-ref/bf699d29a3431d6314083edeeb34fd0d30d0e88a b/txscript/data/taproot-ref/bf699d29a3431d6314083edeeb34fd0d30d0e88a new file mode 100644 index 0000000000..246fe204fa --- /dev/null +++ b/txscript/data/taproot-ref/bf699d29a3431d6314083edeeb34fd0d30d0e88a @@ -0,0 +1 @@ +{"tx": "b519aa9e02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7b000000005fde7c9860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a8000000008d3b00900238e98e000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7a5030000", "prevouts": ["b94b820000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "893c0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_30", "final": true, "success": {"scriptSig": "", "witness": ["1a366301c21fb2865414b257437c6af46ca4fa4026c61eb2ab45c76a81b611796c8e0cad59e491e89ba1278be357f59bd9cf83e2a4917655ff122a8dd747d2b8", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["727ba101668dd9d696423d14995064c79a348530ada915b63da561501941e1bf6f259c3042955d86539ce8166d91a9f01b2a2e75203eb8ef47eef4904c0242b330", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/bf79de65a5198ccae719f56cd87e06ebfa963388 b/txscript/data/taproot-ref/bf79de65a5198ccae719f56cd87e06ebfa963388 new file mode 100644 index 0000000000..2f24c9389b --- /dev/null +++ b/txscript/data/taproot-ref/bf79de65a5198ccae719f56cd87e06ebfa963388 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6c01000000b9a21ffd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127021020000007ef33ff3034d9e330000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748708010000", "prevouts": ["63bb250000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "75911000000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "473044022052d7102a163c80f64a7aae845d78b2e032c436c0dd276056382e5275aa761ce7022076b980a2f2c3b13942ec8dbd136b42bdee7ca576a458c5d2e868c04749d6237a384104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "483045022100e97b79f0a2e7bb4360de3703f8a466702afce2783ea138e3b8c6d1a134eefc5e022035717439d025bfc02900f1eee67232f6750dc7a9d3d25ee9994dd1094b7cea7f384104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/bf8f7dfface9a3a19ae105b018ef9c8464a7766a b/txscript/data/taproot-ref/bf8f7dfface9a3a19ae105b018ef9c8464a7766a new file mode 100644 index 0000000000..b639c486ac --- /dev/null +++ b/txscript/data/taproot-ref/bf8f7dfface9a3a19ae105b018ef9c8464a7766a @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1a01000000a7f6e1770244d21e00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac65010000", "prevouts": ["52d8200000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090251eea22263f54538b839a6e32c80ddff99515487950d5444108c6f8a8e8ca641b6c0487d1db717c0eac924992e8bef503da80796d3e700236bd91a046c66bf6f581d292348d74dee367df26854ae2bafdab0efcac13535eed45a6161d6863ae0dcc5309b52195f8c153bef6500ce9337d5a878607824289cdf4f96ee2e9b460a108e6ae88c4a191ad3ec30f4fa402435d59c0c5ecf1773e9ffafd97fa234cc5e228be6f36ede1a9c44914d93a40989fe60db040c120d4764a603257d10467beac52484784d9220ca4bd4869181753d9eb5920945713eb5c9404817b24c595adf19d8375075eae0163f4efe48b8f941798d28946d9c22097c66bc288bd921841269910b0a340dc412f31301768884b191bae4ec497c86dee71ae8c75873726c2e4bd0432ea697079968b652f2e5093959b52ab950bb88fe6ac328fc97b89b2069365d3c0b560cbc6f3e47dd020e76ce36c778819c8ef72c302c105d386e9fc77ba2bf426e1b61807b6883722d971f417d6297e5a4e5b908665929e72770628ce9091f1d8865f83e87baed095c783237195ea097aed852c3b4501dc818c7418db7b7f8a08b3cd91f794ca828149c188d989d9e10786ac0dadfb481f5bb4999f648ca3676e0054302f8495116865cfd34b67384e5484196f5763896fa0bc6a4b89bbffdb892ecc474486d5df3e5c3d35097d77a7819e0b9b02cd70115383c002a5240c7eeb11a7bc6bbe675c6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369789e47787c008d4b1ac49f7e3520e3ba1acc4e691f9f1b35c0f1c9c9f09fa8dd47d6f16ac79aa20d3ae71c6838a1908b9e31e7785a52acba39807bb47995dee4cef708a58e9a16c040ddf6ca6eff300c7bff2a5c928617bb01c850b0a79e89f728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}, "failure": {"scriptSig": "", "witness": ["4d09027a6033e9dbfea74785b42dfd58d65ba8e050f5c1a962def70288a71b93b29e609b52d344aa2296979c814e18dc6d773606a6be5ccacab835684150956ffba6465e2a8eb24e7c1b6b276665edc23759b8c1e11b2e60c8c1f6621f70602e29461c1c622701a2f511d787d26deda0efd5565bdedea959a73ce06e434bc94a8cfebd98c950623f4cb4ba9a19937104957765152e6bae28ea1394edd961fddd05774c25d95e1f4856cf3f81a85668cb6a2bbc15ce1324b58799cd1c42e431b5ff941744bddccbdb236105dea7256eac21766951651e44326483f405f27fbafb9587b9f7e7984ac031eff0ab84f9428a6cffdc2fbf504db623447bc8a1a7fbe77abf1e55f48568d396c005e7650bf0a7e0f0cf918dfbd682ff08b7e3f9c5059ebf02aa1b9e2ab14db294de581fffc6c97bd1dd8abb5d09c4e7bbcabe260c57dbedf61ea3f7908b6680920829e1c62a85e56c5967acf0faaabbb240fea111ab6b47415ad9bc4f9bc0dacdfb26506fda87f4e4dc053d94aa271fdf63be7b39bbe4a2b56ac4b7e11f135b17ce6825fb3154bcfee4f462c4ce2ea7e560410e0a257486e17cbe61c9edbf07163496576607b64a01e3dcd68de40344a1911cffda9c038685a76bbba29684c78cc4f4503f516f82ee5533c813b0552f19794570e082d0f329582d339ff2d00faad8a01180f0f1a62b32fc84fc20a66fabf88a0f43ed625d00fee405c5066f699f81d47561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ead70583f94efe61957c66762db35c674fdba58ede6e88df118535ee414388d1d47d6f16ac79aa20d3ae71c6838a1908b9e31e7785a52acba39807bb47995dee4cef708a58e9a16c040ddf6ca6eff300c7bff2a5c928617bb01c850b0a79e89f728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}}, diff --git a/txscript/data/taproot-ref/bff5be66a4aacf336f6a1a8aabdf35a37bd49c75 b/txscript/data/taproot-ref/bff5be66a4aacf336f6a1a8aabdf35a37bd49c75 new file mode 100644 index 0000000000..d27a402f95 --- /dev/null +++ b/txscript/data/taproot-ref/bff5be66a4aacf336f6a1a8aabdf35a37bd49c75 @@ -0,0 +1 @@ +{"tx": "da12e55f0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fc00000000eea8349660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703e01000000fdb2d88004830d1c000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ae0c615b", "prevouts": ["ec020f000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "54ce0e0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sig/bitflip", "final": true, "success": {"scriptSig": "", "witness": ["269713504f96ad0d5e815e0440517832f21c478fc2d6309403d12a480fbfc573610d537266ba1625441cb13ebaa0130c80406a24d389c7418bc393378d6cafce"]}, "failure": {"scriptSig": "", "witness": ["269713504f96ad0d5f815e0440517832f21c478fc2d6309403d12a480fbfc573610d537266ba1625441cb13ebaa0130c80406a24d389c7418bc393378d6cafce"]}}, diff --git a/txscript/data/taproot-ref/c0039aba73061b1e9d1b5673c11d9a6fec6c2d2b b/txscript/data/taproot-ref/c0039aba73061b1e9d1b5673c11d9a6fec6c2d2b new file mode 100644 index 0000000000..fb1b688e53 --- /dev/null +++ b/txscript/data/taproot-ref/c0039aba73061b1e9d1b5673c11d9a6fec6c2d2b @@ -0,0 +1 @@ +{"tx": "421bd7b302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c140100000064fee5d560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270da0100000002f966fe026fee650000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac3dd3f227", "prevouts": ["28285a0000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "d69a0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_6e", "final": true, "success": {"scriptSig": "", "witness": ["fd5507f6af4da610b2e11b16af216d70c6610eeee1f968fc780e18d4f36ef31b2023a28220727b3d8b4065b9c08b37a1852a97408079d5b77d7d75f23db9a93c"]}, "failure": {"scriptSig": "", "witness": ["29188078163bd5145a8a0de99510d5ffc89e8661cca31f30c98d499f21d967417895d29d080228ab6bc1cfab52e1ce2f5084e3a489caa5d07086d7d0d6ea14f36e"]}}, diff --git a/txscript/data/taproot-ref/c0201387de1a365edea3ae462c8e87757ac56e21 b/txscript/data/taproot-ref/c0201387de1a365edea3ae462c8e87757ac56e21 new file mode 100644 index 0000000000..6f283a7e52 --- /dev/null +++ b/txscript/data/taproot-ref/c0201387de1a365edea3ae462c8e87757ac56e21 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f900000000bceb13d28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dd010000007fcb8fed015e995a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9009232e", "prevouts": ["e33d3a00000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "3bff3b00000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638a68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d1b96e81cead6ac3d8926975c578d0c5f6545830f656c5959ed0243cedef90c4837054ce51ecdc9e3a3777b2a8e44b7f174730ae5a790047b9842df02ff9276d2430956d1468bedd56ced1f149c0a08e9d241f188aa41dfacb5e515f08af1f16915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082141ceaec0b62943b85ddb54ef2037615ee2bfdc3c88602ea27aeaa6ef1c2e0ef6e427c91532996b84ed2c37f8a26be8637de11530a49bfc255181ba6103e3464915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}}, diff --git a/txscript/data/taproot-ref/c0264fc040cf13b7e91a6413eb4b7c76c194b45c b/txscript/data/taproot-ref/c0264fc040cf13b7e91a6413eb4b7c76c194b45c new file mode 100644 index 0000000000..fb0a581602 --- /dev/null +++ b/txscript/data/taproot-ref/c0264fc040cf13b7e91a6413eb4b7c76c194b45c @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c470000000032889c918bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42c01000000160157c404c8ce8b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac88000000", "prevouts": ["2b65500000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "d0313d00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090243e0a9de6aa979cc1bd88b6f32b35b4f5cdc1ec6e3e50d6b382ffc140619020502e3dac94586500826980ef68f25c7a35c549d8cf7d2e1480a389ab4d5e2eb68d9e201ab6549c6a8b8ac426f4b82d4a89652f77b80e00df28d6616db3db9e96135e12e6c152d7c0100cfccb8615c74957764aeb7d5ad6448c51828ec198994875033211110d8b3cfb563c5cd1366b16876cbcc5db52441964cad03e76250d7582c480089a8fff6e20abacd855b81296f7c35a46d4fce3b1a3875c5fe4985c647cfda295db1c94cfab6ec04e3345f4f3a5f5313ebca6e75384ebd4c5889811996f336073b7e16116739202d3f059e6651743e73bc6b2fca133a5e1b54372f3730f243a49e2ad890f0b5594e8dcd157859956df24ba6be251c891e8cc9e715c4c4aca028eae77ab2bce2fd3222a470271a196adb8ae47bc2d7515ec7cf2299e1809df3ff2ca956a98410438adbe209cb9e04326f163f16908f45172f783805ec2a65ab2bb608f338a05c0a7c46ff040c17f3159ca8204c3e47d374a5e05684039f93cb106121724e7ed3f63a8a338c75a306da0dd8e73623cad2d9d33ab5722581a4ecfd47e92a796325510c50730059a39cdb9f52a46205a2cb87e1d2048770dd972d7fd024a59ffa9283d9ceac95216de9cec1cd754468637af08d344c773e85399d876a7aaaa02217aef357181c3865ac890b0e8c369d215c6bd480677af007b044957124d5d9759e75", "417d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa7155e8c33f0c07f7d0de889297fa065f1be8d31098e32dc97a677fdacd11d05345bbf2815375aaeee056e6b05e441f58ef8c911146e9d15e94b57fcda7a8d0b76831d286b681d36077bb0670e25d1d3b2bbe36e9d696c3276746d4ede397eb7d"]}, "failure": {"scriptSig": "", "witness": ["4d09023b22c252102d0bbdc5bdfb0b10f0211835830b2d023c89a4c6a3100b98bc91d24a22bd28a86dd359472d3ca61510f8faba76e767a64635040f1a4aab80bf02a107e53e10092ab8ca4a5af75f2d3ba5998720fd5b8dea6cde37717f3572484f316a623de86e9dfce26b97e15a2b1a0df861d003a4b38fae7dfdb5a4ffb8bbaadcbf3327e420640dfe44cbb88285367e9a38838be7ed6147945329072c047dc202a219a42c7dfdff341bbd7d1c499f863e057343b3acb88c1e3e076fcf2c89f267836fc7ebbf50eb104b55101a1fdfdf1eade9f49a9614c8cc6530ed36051cd65583af538c6c34b4004c52945b2749616749e49afd7fdef0a4d3564630fc2968533882ce1d73f01bdcbfa3e98854b96530db3248950f3c49dc29120694fe5ceb27a9585264df2ddb512a32ad320f7e636b93c19d18f8102fadbbb4be4d89dabecbcea8e764e0815de011dd680a8b0ab054521697d5e21a82a92a03fc628a7a98479b56c8f25f9c8590d83afad3d27586a8851c6bf7a8c6b4926f179db446db40e1a36e842799e78123ca9e41fcfa465a2eb617c5e12abd9b700787930e8a8e109b8162ae7e0fc8ae97d86313808785857c09df13cae1025aeba1a534b430ad1036d59b7179a69655402e648dcb2818f4b7de07ab2cb0773a8c9ffc93bd8b7e0c5064c821673174fbf1f7ec5519f5336d4ac37efcf28e7b8f44f7af6bec432d3acd29fbe57a7c96402f2175", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c59b01a00c1a8ba5a1aee08e5db1d927de1139bb693668c89cce1a6ad71d2265ebfb5abead622ee588f8a14df4b864e849bfb1ffa426a7f0fc441a7ea7f9f3e8819e00a9246c8c145cff8a91ff4546d478c6c8e3d7b4e3f7e61102a4388494af"]}}, diff --git a/txscript/data/taproot-ref/c02fa738eb666819f177a296b855df242f3744a5 b/txscript/data/taproot-ref/c02fa738eb666819f177a296b855df242f3744a5 new file mode 100644 index 0000000000..02c0ea5791 --- /dev/null +++ b/txscript/data/taproot-ref/c02fa738eb666819f177a296b855df242f3744a5 @@ -0,0 +1 @@ +{"tx": "cc6f3def0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a90100000072a16fcbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1d02000000bff28abf0409d36200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ace2040000", "prevouts": ["38281000000000002251203e6b8aa12170bf3e8ad7f10d608d1ed027d7fee17123c5116152c821758451f4", "bc035500000000002251202f329ebb629b1bb09406fd99900762644c979122f44ddf705116f636c54af1f8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "final": true, "success": {"scriptSig": "", "witness": ["2076b02e7a8c092452fe8cc7600e3d4714f6f512ea929a851b89bd5345065c98b75d96051f8b7e11f69b43a4d71281831a42fa4dd83efe2431868a258047e2e6", "2d095a1f1062fe7bd8", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead587cba5987", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f14c077a5df9569646929ff390715adf76260bbf779418b239f42b6e5c4df0bf6e04a680a3e09d2c1c78b970124d832e17e53b3edd07c25f73a974632e6fcb1bba955e8474be2e5ac086aee3ec774721171b5e328eaea831dfbb16e2e79f74edede1cb3350aa36ceb33b3b6c7090611381813ed3ae357cb7bb9b2dc70f0d254d"]}, "failure": {"scriptSig": "", "witness": ["2076b02e7a8c092452fe8cc7600e3d4714f6f512ea929a851b89bd5345065c98b75d96051f8b7e11f69b43a4d71281831a42fa4dd83efe2431868a258047e2e6", "aee58931a9775a2c", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead587cba5987", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f14c077a5df9569646929ff390715adf76260bbf779418b239f42b6e5c4df0bf6e04a680a3e09d2c1c78b970124d832e17e53b3edd07c25f73a974632e6fcb1bba955e8474be2e5ac086aee3ec774721171b5e328eaea831dfbb16e2e79f74edede1cb3350aa36ceb33b3b6c7090611381813ed3ae357cb7bb9b2dc70f0d254d"]}}, diff --git a/txscript/data/taproot-ref/c04290c4f9037a6b82b7d2392c6c80c1ae11f80c b/txscript/data/taproot-ref/c04290c4f9037a6b82b7d2392c6c80c1ae11f80c new file mode 100644 index 0000000000..6c957abda5 --- /dev/null +++ b/txscript/data/taproot-ref/c04290c4f9037a6b82b7d2392c6c80c1ae11f80c @@ -0,0 +1 @@ +{"tx": "e7e3b9f90260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c80000000068e24fd8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9200000000b1a782c802e7456700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33e6a42c", "prevouts": ["d19c12000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe", "fe5b560000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c24c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361d17d6661cc8fb2f1af7119061da5758e988d072e66a98fe62e54b70963bbb8620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e119ca94dd80cd6ec848cff445ef1653ae8d91bf4217e3b4bb0faac1831ae9489bd0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d5c78237289a8636bb429226e0de9c7befeb1ddb6aefa0b188bf3d9b51e606da144e2b32fb029cde325456c88021dd04a80b93e0665f7e39c1e8a56bfdcaf4a64b5cd80fb8cd7c947a98554a389db356265b198fc72df311d010d98c3d6e3928"]}}, diff --git a/txscript/data/taproot-ref/c066693ba1a2191967ded9338dab201a79f31370 b/txscript/data/taproot-ref/c066693ba1a2191967ded9338dab201a79f31370 new file mode 100644 index 0000000000..2dc3d6790a --- /dev/null +++ b/txscript/data/taproot-ref/c066693ba1a2191967ded9338dab201a79f31370 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c0100000093647caebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd200000000897280c9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf63000000009dfb36d60406682001000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388accbd14a30", "prevouts": ["e211480000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "22e868000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "cd58720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_csv", "final": true, "success": {"scriptSig": "", "witness": ["7839dcdcda4a68b6d8036ffdea6037a2585da1410160ab98fda3e8769595116fc1ec486a359dff8aa6e022c34e6e36cb414aa7731574a0c2f6477f8ad6603886", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bdd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a37f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}, "failure": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bdd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a37f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}}, diff --git a/txscript/data/taproot-ref/c06e8cd4278bfe18806835f29e8892fe38588b77 b/txscript/data/taproot-ref/c06e8cd4278bfe18806835f29e8892fe38588b77 new file mode 100644 index 0000000000..06f6ec5a04 --- /dev/null +++ b/txscript/data/taproot-ref/c06e8cd4278bfe18806835f29e8892fe38588b77 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127047000000008b866bc6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c94010000009b039ae9048b395c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8740000000", "prevouts": ["aed50f00000000002251204f95e2d0ca6e5ead217b338fd8f5ed161ed18d9deb82c1fc7cc39fccfd04e4d9", "414e4f000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef9dd54afee6993a303fd38df7733ffe3104c2b75362843dd01bd11eb312076d"]}, "failure": {"scriptSig": "", "witness": ["6a00616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c09fc10086b95973815a1c9f85b9e89af0b68a27 b/txscript/data/taproot-ref/c09fc10086b95973815a1c9f85b9e89af0b68a27 new file mode 100644 index 0000000000..d5def469fa --- /dev/null +++ b/txscript/data/taproot-ref/c09fc10086b95973815a1c9f85b9e89af0b68a27 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0802000000f4ac4498dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c370100000052b315f604819bde000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac2c000000", "prevouts": ["1d9887000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987", "206059000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3044022023c1fa86a88954f5ec7acf465d03a69066358cc1f41dd00038fcfaacaff94641022066878e3a4f54cb42e604936659bd75168525b2d7c6308baad77ee15e685e418f8a", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["30440220681e0fc8eaf45c7a4d3765b5b8f7b5f8cdff8c9d0a0509521717d4e78089587602204a23362f703e0bbc418836ee5ec11f616f326f7280a1deb22ab9c45df9883b9d8a", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/c0c65b781da778eab58a96c85067f90b2d4d1f4c b/txscript/data/taproot-ref/c0c65b781da778eab58a96c85067f90b2d4d1f4c new file mode 100644 index 0000000000..68b3689ebc --- /dev/null +++ b/txscript/data/taproot-ref/c0c65b781da778eab58a96c85067f90b2d4d1f4c @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b040200000046cd652b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40a0000000042a9c23e0462eb5600000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac77020000", "prevouts": ["05bb1f00000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989", "45ee380000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "d27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362aacdbaf7feb2ee84db2dc99af1e5f6e1450a5c488d9b9b44f0760fa1ba6b92f9a9c5d9290705897ef911507dd26b72756738dae23c9379fd676f365e52e00fbc5e1171eec0a28263e9818d2dbd976f4b8066e50dd8906a411b6a9dd47f52980e39f192d4dec24b48e9231a08b7d2e64fac2040aad69c16c1d9eedfe5fb62ebc"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93621ef10389913bdbd846df0d9639979edfa3f7c76677006bc1a57e34b3956825b9947182c2cf442266d627de6569afbd254a849da3e2d989b935a76fec010797d33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a9b801fc18e2353a9cd4de337bb33433fbe6225e21bb8b5572b0acaa50d11b7f3"]}}, diff --git a/txscript/data/taproot-ref/c0d2b1edf6f56cba1a8e2d0b100cb918fd7f803d b/txscript/data/taproot-ref/c0d2b1edf6f56cba1a8e2d0b100cb918fd7f803d new file mode 100644 index 0000000000..c48c9231ba --- /dev/null +++ b/txscript/data/taproot-ref/c0d2b1edf6f56cba1a8e2d0b100cb918fd7f803d @@ -0,0 +1 @@ +{"tx": "da5995b202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba300000000e933e5a4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb40000000057e27db101a5fd2600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac59005b4b", "prevouts": ["fbbc1e000000000017a914bf07e8218e5a3c93fa381357100b6dba1ff2a91287", "4a0220000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "027d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c4b75a5eca83c62ea415013ce3486a59b49eae62a9a2157a509d555c51c755a41a39935f0afddba064f6b0bc8589127966a984604296ac06f9873b8ee7d7aea369828280661f54bb25ef200c9d39138c753346ae1cc558703fbc48b26980763768cf2d3d0be95621d7446294d89d9a2894510d2dfb4e1a33e7316a17e39cfc99"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cdf75c6f1206420e3d576f860d6a0b821efde2bf3dc8c692e6dddc88ddda04bce4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8c6a1fb55f16de67c2a92ad96c93aeea32aba2f93d3355ba34bd608160e8b6bc30e32049d91f42cbcb04955cd98e985d287b85d3c77c1154d8406ae5e2d81b7b1"]}}, diff --git a/txscript/data/taproot-ref/c0d30a73338909cf56a6d97fed0221e78bb7731d b/txscript/data/taproot-ref/c0d30a73338909cf56a6d97fed0221e78bb7731d new file mode 100644 index 0000000000..78837e1900 --- /dev/null +++ b/txscript/data/taproot-ref/c0d30a73338909cf56a6d97fed0221e78bb7731d @@ -0,0 +1 @@ +{"tx": "6b2602cb0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127000000000001a450cc004ef260f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc76e87a825", "prevouts": ["d647110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_37", "final": true, "success": {"scriptSig": "", "witness": ["dd90dada34e2cb3bc0c1f80a336b1a28e617f0aecced79d25a14a8df4af56efead7547171fcf2c4f50d3fcce324131add81909360a6e82e57e467ce37f261a3303"]}, "failure": {"scriptSig": "", "witness": ["3867cde0f18449fc23edbe75601ddda66b9b7009fffe15dd979272260da4fc1dc8abeeba4ccabf453fe16db9a442b5c646058dbaa922b2edd935c0a795bd485237"]}}, diff --git a/txscript/data/taproot-ref/c0ea13628224c7cfa08a24dfe6cac5360c02d61f b/txscript/data/taproot-ref/c0ea13628224c7cfa08a24dfe6cac5360c02d61f new file mode 100644 index 0000000000..541b9fc93c --- /dev/null +++ b/txscript/data/taproot-ref/c0ea13628224c7cfa08a24dfe6cac5360c02d61f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3101000000baf8229cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8700000000f34c48e804c866e000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6bd667b36", "prevouts": ["9873650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ffb47d00000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "537d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365679c4b80b1f02a904f6a1e97bc1e5029a390245cd2e5f4f1bb6526c613587c3c1fcc94e870ec95c088fd37f5daf805336fc0aa07ac91d9d5a0c770a5a47ed76aee97a7dfb8acbc78fdce4694f8ba1e1e3bf612a81f34559c93e6dfd336d600fd892d02e0db2d70aca72db86bdb1e35d04291625c81ec0b3d884b10be9f787fb"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e89a54256964294f7e46fe5d25ab3411c34d3792ff29ea326544b7c68695f53859e150f8c7b4812d3362c6afa34922f3b5cc4b63cc9e98285537a088f4a7fe3bee"]}}, diff --git a/txscript/data/taproot-ref/c0f5b91a651c2d181d2e204758d6556b2d362c11 b/txscript/data/taproot-ref/c0f5b91a651c2d181d2e204758d6556b2d362c11 new file mode 100644 index 0000000000..e6201a4208 --- /dev/null +++ b/txscript/data/taproot-ref/c0f5b91a651c2d181d2e204758d6556b2d362c11 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b22000000000e68496b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41601000000d14c8d5b0305ca5300000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac832c5e32", "prevouts": ["ef35240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6975320000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c7", "final": true, "success": {"scriptSig": "", "witness": ["87e3932eb099c3a059fb9468137ffd33308793027e7135b38b0ecc5a08d91c45cc164d4234ebfbe9f94994d9ae1d69ac2c9ef3b2b3b5d0dcd235ed096686e31d03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7252e641df0bc016fa072ecdc25a5bbea78bde919a71fc5f2f2de2b195a4ed4f0d54ad8b20505e040c9d01f9ef590aa9a6075c04ebd94c0e7c7458100ab44580c7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c128857e0f643e229c430eb8ef7d3f5aaad861fb b/txscript/data/taproot-ref/c128857e0f643e229c430eb8ef7d3f5aaad861fb new file mode 100644 index 0000000000..b9173ed7c5 --- /dev/null +++ b/txscript/data/taproot-ref/c128857e0f643e229c430eb8ef7d3f5aaad861fb @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708100000000b5ce03e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6f0000000017b9b5cd04deb385000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87ead3593a", "prevouts": ["0888110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1a5f760000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_72", "final": true, "success": {"scriptSig": "", "witness": ["4601f45f51444d2268f82b339eecc385de6945a5b41c3525f900f19450dbe9530d6edb84c287f92e243a66a673c87803d4d308ebbda4316be2f69b2df679da9b03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3975a172f6b9b20183f14bb7f9de1a72f3c5c7ab43ef24b60ad06bb2e05fadf338c613e35c08c3e71fd711b3d47c24f6da5c168f4c613e9e89e57286f4d102cc72", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c12b71a60e309ebef55284d493cfd3665116ac35 b/txscript/data/taproot-ref/c12b71a60e309ebef55284d493cfd3665116ac35 new file mode 100644 index 0000000000..298f74b9f7 --- /dev/null +++ b/txscript/data/taproot-ref/c12b71a60e309ebef55284d493cfd3665116ac35 @@ -0,0 +1 @@ +{"tx": "6ebe113f03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c480000000082f72a8cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba501000000f5b89fa8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcd00000000c556cf97037ed2db0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acbb000000", "prevouts": ["98a94b0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "d2402700000000002251208f7166d23fc1e45fbcf26b51bd386ab915626b0708475a8743064036728c78ed", "8f956b0000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c003e47312495abd0ecea483b7c96f6c06baf07e98ce450a7ab8fc6c1d015d8d419750c06d432bee308f0fae4716b69cb6c25810329b8790fd49c679f7455a77c48cdcd8dbcfef9ad7c7a30771944f2cd4ff67f595b136e3713763062e27bf597e2a087af95959b20705299b695bcc76a7499066c9215d50f1f19d347c9606929e8c43ab2d3c8341e5ddb2e7a976063d2510ea844334a2f10fee1c2a194b374a38e3ab6d6964d755bc0e13212d27e73f5bd049b310ddca632309f40d884ffbd4a43518f5a62961bb48ab613036012a74e221a13c741ea9d3963160e74d5f4ca891448693b23cfe7ef23bcb8ad48cf9686b8b274e632515f150eaba77a1534100a1fa86c4673276316b981d8d3078e7ee0664161ffdbc80837594e11de603fee93a0900422ce8414d3d9ec31eabad215388986f38891e227d1396cd5133088788fd1284c6850ac04377717ea6b69cdfd22358623870c8c1a53b7eef11cd26dfae1a739b323e4dbd888fcc7e46e0308658560a426909489d4b1feb2a72a4042cd2a6f461ee247c48f08002b32a808e4f110f3ce3c9c632099629abb70ecc66da9b3fbb5a8749c9b147a33d669d56f22b0174c822ddb2128eaa425729f909cde6e1918db476fe7415b5713e1ef82d92e0d54e9c900746e84627a7f3ab67a68c4f52ba4928939805cb52647547755ed599179711f9afdca1c437b25d71a95b51f9495b6d66766f017516ff7595", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936efc04f522567ba440a5ccb1f894ddfa30e3ed18bf7db19d3822c68f4f6bc07d299aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4c1a4178950446608ddf8409535ad79bdd567504e9e3f05b7b17ad70ac9eb9eeed4a2033150a39b6917f88ea297b4f989401264ea3eb8667a511a69e57850c639"]}, "failure": {"scriptSig": "", "witness": ["4d09026a1aa4aff7525e1ad84d9de23fe30241b0645131eb0823fe1b7b6ee6335627908d03fb9eddac278ef646ff04d5cad2b264959ac6f25e1b57d2ddf53be312006ed4a10b770de0c068b97e514f09193b3dfaf4a5fe8f2e481cfb3202cbcb0dd886844f0bac52b8c4e8d11c13e990ac4dc212cf14e7cfd6418fb28c7255839eaf8686486cfa8ba11e1f2ae28e8028e92e4196d11f678551aae673860c2b90207c87dc73675e7e892238ee288a1cba2e68007a97af98924dd2b7ecf893334e8386e75749a121dd864ace9c3d6bc81631c5af4ce37f99ef20dd33a41fcf6b8a4bf1f7b1ea0c88bdbb0f728012bfe3e7bbc302faa78fba4886febdcd99875986a8735de6c2b4d2fe313fcff2d74ee5e92b316b4b112585ed46eced024814390a0e4cee6927ab3668932e3d3e94ad79201f4eaa5eeaf6435cc18f138b3bc125456034fd0d94a1c730f35614b898ec8c39f80c07136a617e4a07bba4188069bbaf630da2a801e4c525385a6971ef34b8e1e9fc1f8932814a12bfb6e36c90e8cfea1c01613fe57711ed3412f7255790e6d7aaa5d6f36fa3099d9587ad673890a20ac2b5f609959ed4eac6d35e6ae71a2ef50210543fcd8c2027939f36c9f792cad02d014d42822e1d22bc242afd14f1130e2817391fb27f983e15133611a49692d5619036af5b3c36abede1390da9c78fbefcdeb60846d406856ed79d67c73c13b7e57285f29a8984fe8d0180c37561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369af08a3754cbd3d543e874a27ef2608692e4496bce300b07224b27cbee5eea1575c046d699a38e7801f010fab6b697cc237a48311758c02bc29e281a6d7a682eab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}}, diff --git a/txscript/data/taproot-ref/c146489c520399688a56c27fa5210f00c10e9e5b b/txscript/data/taproot-ref/c146489c520399688a56c27fa5210f00c10e9e5b new file mode 100644 index 0000000000..b2fdcba3be --- /dev/null +++ b/txscript/data/taproot-ref/c146489c520399688a56c27fa5210f00c10e9e5b @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3c00000000038eca4160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270650000000086bf9efc01da691800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac09bb0336", "prevouts": ["9b0e76000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "3acd12000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "907d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363bb05f98c2e695c01e670dd2e228a24813d9ab38bd8282e6b549b79433642df758fa50c6d7a3057541347f50382af7d86a4158110d747d8a87c6e51bda235e7807d6dd053b835b300872a79bbaa392d17bbe19548a92a63c5948e9fc7e63dbc8"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93653f88528edb69bcf55b01eb77e975ccd2596bca40cd6e1e17cd60b66f98d72ab693163a47c3dba2861e33fa837573abaf06e3047dcd3f7c322d2576c3cfe3d489f4b63c6df7ef43e2db8ec562e1d1dc49232dee39216a09a14bc3b6a66d1e38f07d6dd053b835b300872a79bbaa392d17bbe19548a92a63c5948e9fc7e63dbc8"]}}, diff --git a/txscript/data/taproot-ref/c180a8fea16357ccb1c9e9a5b1fcde5e0137ba39 b/txscript/data/taproot-ref/c180a8fea16357ccb1c9e9a5b1fcde5e0137ba39 new file mode 100644 index 0000000000..4ecb535a70 --- /dev/null +++ b/txscript/data/taproot-ref/c180a8fea16357ccb1c9e9a5b1fcde5e0137ba39 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701602000000869bf9f460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701402000000ab8972f801e82b1100000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac09010000", "prevouts": ["a0941100000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "2266120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["ca4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb460e4b742334a3ba05c34377629280dcb4ee1c5981341754674382732961bb035dc18898993c284d2f731b7495cb62c60e8571430965d040562487638e1f1fd248a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93693549492b615adfe57dda9a6672912be33acba3c614b0a4dd60f18b8fbbcd54c60e4b742334a3ba05c34377629280dcb4ee1c5981341754674382732961bb035dc18898993c284d2f731b7495cb62c60e8571430965d040562487638e1f1fd248a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}}, diff --git a/txscript/data/taproot-ref/c195e2cf967dde5160c0de3b6a514dbb2ff8485c b/txscript/data/taproot-ref/c195e2cf967dde5160c0de3b6a514dbb2ff8485c new file mode 100644 index 0000000000..c56c728414 --- /dev/null +++ b/txscript/data/taproot-ref/c195e2cf967dde5160c0de3b6a514dbb2ff8485c @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8000000000896880f4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2302000000409c9b9802fd1ba200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdfcb3a45", "prevouts": ["2ca35d000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d", "3634470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ea", "final": true, "success": {"scriptSig": "", "witness": ["e528ab615282b5f0511a58b57e63faebf8e8947790793f371e3c9f72032feb5af440ff65e2a1a43986e65cdacf01f3e5c551d5a019bb37ed8b2272bdfe68e76082"]}, "failure": {"scriptSig": "", "witness": ["7976428c28abccdf2f940adf0684acfe07c9eba9f9b1b456d68b6759fd089665c379e5e54ceddd2e782583fe0a14c3ddf2357e4343a56e9feade163d9dcdd8d1ea"]}}, diff --git a/txscript/data/taproot-ref/c19c13729ac0ec5c7e396da5494a3f513d31d8e8 b/txscript/data/taproot-ref/c19c13729ac0ec5c7e396da5494a3f513d31d8e8 new file mode 100644 index 0000000000..3ab3d99910 --- /dev/null +++ b/txscript/data/taproot-ref/c19c13729ac0ec5c7e396da5494a3f513d31d8e8 @@ -0,0 +1 @@ +{"tx": "d6166341018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4790000000010c750d201fd6300000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478789020000", "prevouts": ["2d9c3e0000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e44c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936036751089af36ed5c0ef7dca2a713ca9b31e3a2dfbb12490c74aaef9653ee48ca81c44a09079faa406e9dfe20ff322801dbd7fb1c55ee11d2e1c43aeb4d3cbdeaf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e13f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824d4fab40ea135233ddc8c9f724889f007818f7ffad5749db3376d8fcf405e18faf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}}, diff --git a/txscript/data/taproot-ref/c1b84b02f4cf106428923ebb095dd6888ae0ac50 b/txscript/data/taproot-ref/c1b84b02f4cf106428923ebb095dd6888ae0ac50 new file mode 100644 index 0000000000..6915b404cc --- /dev/null +++ b/txscript/data/taproot-ref/c1b84b02f4cf106428923ebb095dd6888ae0ac50 @@ -0,0 +1 @@ +{"tx": "ed787e2502dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4101000000e197ff86dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bba00000000cb7df6900128ef2b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87281dee3c", "prevouts": ["7dd81f000000000017a9141a56e0fb41afaf4b9e6feff1797087c69015162687", "4674210000000000225120801095ecb8b6618653d214b38461db03e06a33e3af24d0223ea647d6569eff0d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362fd70b7ac25e6ec5d20c4437e9dc3fc360c9cad49d8a5534acf4ee938278cbb5"]}, "failure": {"scriptSig": "", "witness": ["6a4a616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c1bff9e88ae4e9b8bfd1976fa22c1802e6db3962 b/txscript/data/taproot-ref/c1bff9e88ae4e9b8bfd1976fa22c1802e6db3962 new file mode 100644 index 0000000000..0f55af5536 --- /dev/null +++ b/txscript/data/taproot-ref/c1bff9e88ae4e9b8bfd1976fa22c1802e6db3962 @@ -0,0 +1 @@ +{"tx": "b809cec502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4d00000000826028da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708200000000d8400db60264ac6e00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acd4000000", "prevouts": ["3910600000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "4937100000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["e34c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f0d1bc393c3c3c2b57b8b86a9e8a64bd1d4b9e0fd1bc4525ebf92e13eb29f90821a06fc3128a9eadf7c181b12783fc0ac677434699a36c8776c14fb861b85f3ba54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360a4f638ce23d17c39a29ede58d266fd12593fb14b584adf686071e58cd6de6a5d2593bff1b0effa885b0aee87a7b2d32e61d34e0a8c26ab8da95f21cdf0740a021a06fc3128a9eadf7c181b12783fc0ac677434699a36c8776c14fb861b85f3ba54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}}, diff --git a/txscript/data/taproot-ref/c1e5922d5f60798c78f4d0d669795bdad1a0801b b/txscript/data/taproot-ref/c1e5922d5f60798c78f4d0d669795bdad1a0801b new file mode 100644 index 0000000000..04d11f5609 --- /dev/null +++ b/txscript/data/taproot-ref/c1e5922d5f60798c78f4d0d669795bdad1a0801b @@ -0,0 +1 @@ +{"tx": "757a763b028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c476010000001189b0d6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3f00000000aa93a3e00138d3410000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5f354861", "prevouts": ["8ba4330000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a", "91555b0000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369c3c8aba3b1d9c892342e3bb33d29486ec8523eb8867e3a771f2201c80f0f2143493aeab6959567855d46871d1975f827c269435f7c9757b13dbaeb906d5d20b01b5a419c18d23e8c03ade77009761f1ea37c255231895048329572c11717ad56187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b31cd2587ef1d28654819f6adaa2ac28a0f894d9dd869941f90cec36533241ac3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821de3578bd50e4aef3f42172206e28aaa53f32c3941b8b4ddcf806814652917426187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}}, diff --git a/txscript/data/taproot-ref/c1eeed88c600ab669ef89bb18d5ef6a6830d4f0e b/txscript/data/taproot-ref/c1eeed88c600ab669ef89bb18d5ef6a6830d4f0e new file mode 100644 index 0000000000..9999814bd0 --- /dev/null +++ b/txscript/data/taproot-ref/c1eeed88c600ab669ef89bb18d5ef6a6830d4f0e @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c64000000003cf989cedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8d01000000056889d804c0d86800000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac35030000", "prevouts": ["ec1e4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a78e1f000000000022512088381247371028bcbdc4971a16b3f7d8df868484be1d753506f5bf6782ea1e55"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936443f9e607c139397158640c1b36ff7afb5325bf4b323e9b48798bcd0a0abafc0"]}, "failure": {"scriptSig": "", "witness": ["6a93616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c21065afa4b19740633e3c552a080169d12b4afb b/txscript/data/taproot-ref/c21065afa4b19740633e3c552a080169d12b4afb new file mode 100644 index 0000000000..20036e5455 --- /dev/null +++ b/txscript/data/taproot-ref/c21065afa4b19740633e3c552a080169d12b4afb @@ -0,0 +1 @@ +{"tx": "dd2936eb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49e01000000af2fb8efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1100000000d31f29b504d62552000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc89ec6633", "prevouts": ["327935000000000022512008f3b8bffed108016f8bc06cf0d4d62b3035ac315959ae84338bee34a4bab63c", "dbac1e00000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6afa", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045b9350299288462116e81ad139d1cf2552ad17a94ea609f697964ec86e4a0e9d9319d91594da7fa35d5ac76c3396b108bc28aa6233c389d8680e4f0461963fe656f5053dc49cb92d20c30fe5ab09c589302aa9886b9c794d18405aff33121a169"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936454ba48940f06012a7e7a07aeda3ebe402d4ace9093c69f202ee75e21741471ec26d78b90df0408cccf5a173a397f35b7225b23776926a85911da6ca9e3721966081f43f8c34257025162ccf1daca48ae61c99356c3eb24d5601d3c52dd9de2a6f5053dc49cb92d20c30fe5ab09c589302aa9886b9c794d18405aff33121a169"]}}, diff --git a/txscript/data/taproot-ref/c2268af10452034a5d5f9268c6f6797ab805a459 b/txscript/data/taproot-ref/c2268af10452034a5d5f9268c6f6797ab805a459 new file mode 100644 index 0000000000..5443a00a86 --- /dev/null +++ b/txscript/data/taproot-ref/c2268af10452034a5d5f9268c6f6797ab805a459 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7a0100000095d9f0a38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4af00000000ea0b84ea030401b30000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1bbc2046", "prevouts": ["1ff07f0000000000225120aee326bed25c38bbd2065ec54ba80d7933aa4c88bcaacc9a661dae671bd05d2c", "3a2a350000000000225120cf1cdbebd76187b7cc76a29147a6cff8f4ffead99137b52e0c175bb15fb623b3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4a004f07a59de9b760d587d4f325f6314ed9590119c6b43921a305306c0ac45"]}, "failure": {"scriptSig": "", "witness": ["6a02616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c22963b5f52cca482bd79213fd1c9fd9819b85dc b/txscript/data/taproot-ref/c22963b5f52cca482bd79213fd1c9fd9819b85dc new file mode 100644 index 0000000000..676ea02453 --- /dev/null +++ b/txscript/data/taproot-ref/c22963b5f52cca482bd79213fd1c9fd9819b85dc @@ -0,0 +1 @@ +{"tx": "4a4547c3028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46301000000d1c47481dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b90010000006136b0e302a00c5b0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898718b3c029", "prevouts": ["4bef3800000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "d1392400000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ff7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e9987eb7009ccae8c65258c62e5eac53ed5016922d24407b897adc5526f33b91916c082ffd0388de178727289f9edc245ed8244bc4e4186d1c7a66ea621fec0ad"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936481f5e4c3fecd787fe4d3635c6d8b344fb02d1f9c3cab01b9a7177bb21a6fd3df59f882dcce043ab5273f79d0d152c35fae0f251a6812c7f2d3daa07c20029a516c082ffd0388de178727289f9edc245ed8244bc4e4186d1c7a66ea621fec0ad"]}}, diff --git a/txscript/data/taproot-ref/c23bb15b95f0283493b5e9660535131e08c4b442 b/txscript/data/taproot-ref/c23bb15b95f0283493b5e9660535131e08c4b442 new file mode 100644 index 0000000000..ffad9f19a3 --- /dev/null +++ b/txscript/data/taproot-ref/c23bb15b95f0283493b5e9660535131e08c4b442 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2c00000000a3ce2e21dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1702000000adcbac73bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b02000000deea024702e1a1c8000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ace21d5c2a", "prevouts": ["e96d23000000000022512063372fcd34ad063156fb4dd322415aa59bbac8cc6a5a5ba702cef28a298d42aa", "ffd225000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "485c8200000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "final": true, "success": {"scriptSig": "", "witness": ["3045022100ea1e8cb884e128aa84d9e40a3c40db5fa74daef688a97cdcd9e6988d7e0e193c022045dc6b602193065d44469f3544d01626e2370c3267e9d6061182721d9f2bfaa001", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["304402205581dd3e5ef023d6b841531afe247e577b4fdb74ff032c21a2336221f63cf020022069f44da106b7ffbc8b296911dc01eaf67bbbdc7681749a0d72a088121abc404b01", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/c23dc3dee1bab058e9dda39e357268464aff6993 b/txscript/data/taproot-ref/c23dc3dee1bab058e9dda39e357268464aff6993 new file mode 100644 index 0000000000..abbc96548a --- /dev/null +++ b/txscript/data/taproot-ref/c23dc3dee1bab058e9dda39e357268464aff6993 @@ -0,0 +1 @@ +{"tx": "4e4d1dfb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a100000000b81df2cbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcc01000000b1bc72eb0373d0a700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df979722368987c51ca14c", "prevouts": ["558933000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "ccf77600000000002251209d7a18923cf92d77a70864db68b8be9c97fe6f327eec6aa2ee3bdf40725ab507"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b9798a20989a5feb5a965ca55edd87ba1217bc1ca04ecd2269077cb90160a0c2"]}, "failure": {"scriptSig": "", "witness": ["6a46616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c259be6e071636a46f638dc71fbf337480a65d62 b/txscript/data/taproot-ref/c259be6e071636a46f638dc71fbf337480a65d62 new file mode 100644 index 0000000000..495252c51b --- /dev/null +++ b/txscript/data/taproot-ref/c259be6e071636a46f638dc71fbf337480a65d62 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba0010000003f954bf360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706501000000f7025ddc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ec00000000d17f70eb03851b6d000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3a773856", "prevouts": ["90ed1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6154110000000000225120685f1f4d981f8d279e9288f3fac3f130840e4486d97e094876558f7ee35a7d24", "1f353f000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7eb1717b6b13726048969a2665ae197b80aa3a5f647d9b50693aa355611c1a6"]}, "failure": {"scriptSig": "", "witness": ["6a0e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c2606a81031cc7d45d665ff29e83009cdaeb09b4 b/txscript/data/taproot-ref/c2606a81031cc7d45d665ff29e83009cdaeb09b4 new file mode 100644 index 0000000000..c387d8358f --- /dev/null +++ b/txscript/data/taproot-ref/c2606a81031cc7d45d665ff29e83009cdaeb09b4 @@ -0,0 +1 @@ +{"tx": "3969ed4802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7b0100000059dcb48ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4101000000052af5c1039b12b0000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acdb000000", "prevouts": ["a65d5b0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "6f45560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_1f", "final": true, "success": {"scriptSig": "", "witness": ["bdeeaee1525e0b53b60a342fbbf99f814b8f7419e1a4c3609cf9e0df3412bd4c47ce6f1a34e8420e890e3da1d3b6302bd99f2933852ac9af26c1b10c8030892982", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1ec178ea05b35e92b545d8fbd11b059f8d8bb6a4a2a2e07d7f6f85028876d933474961b12ec3626a11226bc4c62b729c8fa089a0a669867de4cd6602966440251f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c2615fefcd8c48ae15d7cdf715cb7cbe15365bb4 b/txscript/data/taproot-ref/c2615fefcd8c48ae15d7cdf715cb7cbe15365bb4 new file mode 100644 index 0000000000..6d861bfd68 --- /dev/null +++ b/txscript/data/taproot-ref/c2615fefcd8c48ae15d7cdf715cb7cbe15365bb4 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5301000000c8edde918bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43e01000000b111da8a0260cd5e00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac99d03b50", "prevouts": ["5d9f2200000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327", "3afb3d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "447d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457430173849036d038bb15ccd29e38ea974083458e0cf50b14971883c73e09395afa4004b2cd3f2b5519985ef4ce40029d6249627881f39179d9882ffc68f5bb6a"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa08f12ff2db60e07951e3ece83f8d4c41d9b16f9cd93bc43e76ab3ca16313aee1430173849036d038bb15ccd29e38ea974083458e0cf50b14971883c73e09395afa4004b2cd3f2b5519985ef4ce40029d6249627881f39179d9882ffc68f5bb6a"]}}, diff --git a/txscript/data/taproot-ref/c274fc041bc18ec36b6fc361335ee8c903ba6539 b/txscript/data/taproot-ref/c274fc041bc18ec36b6fc361335ee8c903ba6539 new file mode 100644 index 0000000000..96738b2219 --- /dev/null +++ b/txscript/data/taproot-ref/c274fc041bc18ec36b6fc361335ee8c903ba6539 @@ -0,0 +1 @@ +{"tx": "e4c3fc72038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ad00000000ef3908da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270740000000074614a9ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1001000000e3195ced032611a5000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487bd79c71f", "prevouts": ["c47c41000000000017a9148bc1125bf4e3450c593a5be1ae9a05461832d39a87", "ad5b0f0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "b47b560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_4a", "final": true, "success": {"scriptSig": "", "witness": ["6f5add61f387f705b44928391e0e61f052851a5b6fc42e27ecbd22e50f941c9675a8958a35c82f8498529775d6c03090bbd893a043402fccd51f9e695a3aa57481", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a4ef629598f6c12594cf05a0b803168efd510ed412d7fe6dccb3066c1333c50bdbf86eb477835fe54992648b7af262e5f118ec9d1e9016364402960d58b762224a", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c2b521f99f9142ffd0f06f35fdbf0a1e6db3b411 b/txscript/data/taproot-ref/c2b521f99f9142ffd0f06f35fdbf0a1e6db3b411 new file mode 100644 index 0000000000..9b4bc68ba6 --- /dev/null +++ b/txscript/data/taproot-ref/c2b521f99f9142ffd0f06f35fdbf0a1e6db3b411 @@ -0,0 +1 @@ +{"tx": "b1bb4f9803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2400000000817a20b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127002000000008e1dc3c4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2e01000000783f4ee701e06a59000000000017a914719f78084af863e000acd618ba76df9797223689870f010000", "prevouts": ["90cc23000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "7ab50f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "546d5600000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f4b186db3068532a32fed88b54244ea5875c098571a7b8b359e587f4f4af633460b19c0accce5a24a056b98cce949d671afb14dd91d0cbdd469fc3f22c90b1553249301ac20ee33639c015b4a618b106ac87c8ade2ff7aca8998bda2366a260c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d0665fc26da953a71983666256fc3789345858164e4e7f74d6a240db5c0da6cab352ee2a6a8e236a875eeadb35b814571c290bf5fc32e6cf848a4bdb48a3dff6032c3262f8d7c29daaf8f9846bf0ed9dbcc4a0f9aeeb7c8ab8b4ceb985f45a6c3d30bc3225049ba56ac02c164836762858abedae6e6cb81f8117394fa9e456e"]}}, diff --git a/txscript/data/taproot-ref/c2bc316e1620048c72dc6375bd6c4de0d175594b b/txscript/data/taproot-ref/c2bc316e1620048c72dc6375bd6c4de0d175594b new file mode 100644 index 0000000000..cbe1b04d3b --- /dev/null +++ b/txscript/data/taproot-ref/c2bc316e1620048c72dc6375bd6c4de0d175594b @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdb000000005eaf85bf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e0010000001162e7efbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9701000000c3c69fd004347af5000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac82745761", "prevouts": ["612151000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "c6b8340000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "f439720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "d97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c4a25f5074612e823ed206625c69690dedc2f0ffcf1fd8ec35ac2b8f31f4b29f72d95b601af8434dcd53e2a5d08dfad1c07e45b1031877afc5b1801af7debef3d33b10ff9eee8ff434f7c79f826d5967b94922da2ad2ccade1cbab3a3658011"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93673ae5f4f7cd376f4441ea68f12423409d9361f7b0ff0edde6dbcb904ee162fe14852eda400aa94cfe5024bf6d05446bd810daab3c27f5a95b027bfb109f343b83d33b10ff9eee8ff434f7c79f826d5967b94922da2ad2ccade1cbab3a3658011"]}}, diff --git a/txscript/data/taproot-ref/c2ccbe9e06e6c7ce6e43c0b381322fc7dc10a2c2 b/txscript/data/taproot-ref/c2ccbe9e06e6c7ce6e43c0b381322fc7dc10a2c2 new file mode 100644 index 0000000000..2e2d439bf3 --- /dev/null +++ b/txscript/data/taproot-ref/c2ccbe9e06e6c7ce6e43c0b381322fc7dc10a2c2 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e02000000912e21dfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9a0100000031b47cf98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4980000000092ee46990448da0101000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd8010000", "prevouts": ["ac7a4e00000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "3b7a79000000000022512065eb0ad8f24d6d8eb63c7f85eaa52926e45dd0588dc97971df796ca5c67918e7", "18b33b0000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "847d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f045d3665eb25ef0cfe4d08419a1eb3800b7f1f14f27f92c2783d7ecc4f2c0fda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e9f6b3154707dfd0cc47160c458b5d6bbad5dbae79d1b1aff02b8c8f076d5395a9f31796df107fae040796e44aea27c7a7d41418cdc7206378fd34089f9daf951"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93676c67a55215528913c30fec21d45efa8c386b671cc94599e91e8442d85e2d1cc9f6b3154707dfd0cc47160c458b5d6bbad5dbae79d1b1aff02b8c8f076d5395a9f31796df107fae040796e44aea27c7a7d41418cdc7206378fd34089f9daf951"]}}, diff --git a/txscript/data/taproot-ref/c2cdbf0cad554855e5a2c77ade2426042fd077d0 b/txscript/data/taproot-ref/c2cdbf0cad554855e5a2c77ade2426042fd077d0 new file mode 100644 index 0000000000..a6f6f56451 --- /dev/null +++ b/txscript/data/taproot-ref/c2cdbf0cad554855e5a2c77ade2426042fd077d0 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbe00000000a95271d0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcd01000000c9707a1b01a42ac8000000000017a914719f78084af863e000acd618ba76df97972236898781bd9444", "prevouts": ["5b3179000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "9c0875000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402203bf34d1bd454373a50eec8a5e728c39cb8e09001f12513069d215a1b1680188502204f118ccef7d2555779780a1fde3d1b0f336f9132acef2601a8459619177c910902", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402204b3eb0544a48531b4bb966c0bfd3b5b6ef629545c27f893e1f6bbb12c375a0580220733de28a1be355583ae9fc59d112b671bdf0b2ac08b4dc69a6217b5819c7440002", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/c2fc3139b18939587fa9376d426b5ed6e5a7d384 b/txscript/data/taproot-ref/c2fc3139b18939587fa9376d426b5ed6e5a7d384 new file mode 100644 index 0000000000..b2539a2659 --- /dev/null +++ b/txscript/data/taproot-ref/c2fc3139b18939587fa9376d426b5ed6e5a7d384 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3b0000000048f62767dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3600000000af19cd280474a0a200000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df9797223689873baeb45f", "prevouts": ["0bec7b000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "0f91280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["fd4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365f3e79e727db2ce69498c039b8b655f97a15b215378db35ebb03872d036f84823effc93d9a59775ec6af4eadc6f66e855123af6e736654ec63572366f38b17272c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51cf0ef20a11005175256561cf2f67252fad6f828fd45e261da47aa072728c1e1d416efa3a61de7db58e4e5b27e55eab88df01883130071a88e8c07ccbf4e37c61"]}}, diff --git a/txscript/data/taproot-ref/c30440e2e36842767c6880d3419ffd67d8fc65e5 b/txscript/data/taproot-ref/c30440e2e36842767c6880d3419ffd67d8fc65e5 new file mode 100644 index 0000000000..f66a6a4557 --- /dev/null +++ b/txscript/data/taproot-ref/c30440e2e36842767c6880d3419ffd67d8fc65e5 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7001000000a1395d8cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff900000000c2c480d30471ffe6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e733000000", "prevouts": ["a365820000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e03f670000000000225120f6b24239f005e5ad8a4113ec06c48cda726a0e511c023e717379412f24fce34c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8728012ebba8229da41e85c5b00392b3bf786c257585b2b15d31aca865d893b"]}, "failure": {"scriptSig": "", "witness": ["6a87616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c30828b92e910f121013ae0e7e80f112ff29c40a b/txscript/data/taproot-ref/c30828b92e910f121013ae0e7e80f112ff29c40a new file mode 100644 index 0000000000..dc29ae2e88 --- /dev/null +++ b/txscript/data/taproot-ref/c30828b92e910f121013ae0e7e80f112ff29c40a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce7000000003197a88edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cea01000000b341e2960409599100000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6e0000000", "prevouts": ["745348000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987", "f5084c000000000017a9146db815d9819f256ca5d1e70b15558a98689cc52e87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1660142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["3d7449d3d77f1da18c3361e93814547b7c2706a727e9fda503840ec216e01fb524548e807051b5032d4b8ace50a272df365cc1bb8608790ac017d997eab25e9f", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c30e1db5cebdf16c793ac3774df5940ba0cbd27f b/txscript/data/taproot-ref/c30e1db5cebdf16c793ac3774df5940ba0cbd27f new file mode 100644 index 0000000000..1a16550b22 --- /dev/null +++ b/txscript/data/taproot-ref/c30e1db5cebdf16c793ac3774df5940ba0cbd27f @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c22020000002413a1c9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6701000000ebf5dac603056f6a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca045f754", "prevouts": ["7aa5480000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "691d2400000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_73", "final": true, "success": {"scriptSig": "", "witness": ["51c9e0ab65da7fccc01d3bd3d58d7c97ad08adb582ab798a516708555cf656e4d6c5f66658aa78c5d42acc5e28261abc0947fe01a867207f73196947a5b6d38481", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["bd03c9cf21c7618806d5e409ef472b991a286b52d2131d7c0e602691857d270b49d6b52711682b55c4046644496c905826f5230b3068d461823df725fba4bda073", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c34e8364c057d48255c31d4626eee97cb90971f7 b/txscript/data/taproot-ref/c34e8364c057d48255c31d4626eee97cb90971f7 new file mode 100644 index 0000000000..d6cb2b5b99 --- /dev/null +++ b/txscript/data/taproot-ref/c34e8364c057d48255c31d4626eee97cb90971f7 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3101000000c451b5dd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127015010000002772d9f604f9e86c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df9797223689876014a635", "prevouts": ["13265e000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "6cab110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d5", "final": true, "success": {"scriptSig": "", "witness": ["85838c332a60598ae003c09c62d8c6a00b57488a5977fe58dc59d3ac4b5e2d7b98ed6004b3104eeac1d9be88b15172a86df3662d7085e9867e0a44c15a36aec503", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["4b331e586a685915952247921e66ec5d71d2e07ff2b64a9185e6004453a31e0636e318d9194dcfb999dccbf82287d5dc6999f63243a1d36850618b1ac0dd4139d5", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c34ea38700b3874b1fc56b98fba764e26e442bbf b/txscript/data/taproot-ref/c34ea38700b3874b1fc56b98fba764e26e442bbf new file mode 100644 index 0000000000..a10fe95911 --- /dev/null +++ b/txscript/data/taproot-ref/c34ea38700b3874b1fc56b98fba764e26e442bbf @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1800000000ddf5b1838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4780000000089a2312a02051d56000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acb49fde2f", "prevouts": ["49f925000000000021541f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "afa3320000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["f3d1ed496c94623ac0a726e91f1ebdf8d2f1f8fcc969396465b5fd55d0a712c470db6ad280ddedd08026910fb3b73f38cc204ea712a73f0461c35e266bcc793b", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c36f9ecac75a1f8369062bd659d7be8116d9426f b/txscript/data/taproot-ref/c36f9ecac75a1f8369062bd659d7be8116d9426f new file mode 100644 index 0000000000..52358b726f --- /dev/null +++ b/txscript/data/taproot-ref/c36f9ecac75a1f8369062bd659d7be8116d9426f @@ -0,0 +1 @@ +{"tx": "c6803302028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48001000000509492ecdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba7000000001c4789db03c46952000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6caebe045", "prevouts": ["280f360000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65", "6f4c1f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "df", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936744d5f1fe8cccbe7a1aaa208055fcd73d33095ca4828da666b0d1eca647814e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5115b534b99635107bf366447ce9661d5eae557250694ef66e76c31b44d1abe134360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d27e649847556e23192b8aeafe173c243f56175d6d7082b77d4d94508f7534d8345e83ad245d963f373c443dd6457dec3808a4f865920e34bbc543e7d04d4c3d1c315aec02adde316e700f87e7c47f474d1ec7cdd06b196ee567d81a15967a13360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}}, diff --git a/txscript/data/taproot-ref/c3759872dcc57d4041c64cfe3164f0beae9647dd b/txscript/data/taproot-ref/c3759872dcc57d4041c64cfe3164f0beae9647dd new file mode 100644 index 0000000000..929cbf6ccf --- /dev/null +++ b/txscript/data/taproot-ref/c3759872dcc57d4041c64cfe3164f0beae9647dd @@ -0,0 +1 @@ +{"tx": "dbf3e74b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b890100000001737dbc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700a0100000096c4f09401d39209000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478760000000", "prevouts": ["7252240000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "189a100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a0353c5fbec3cc02a1bc5415d9b11e293487c4582e3bf764f748581ab8af1a21ed68ad085f5a382b0c2fbdd0c22361680fdc52720905ea6f5dbd48c464194db6aedcd2fc9c5943fe706019db34269a1ea53cca57e4f35fb05ac8058a5f51476448699f23776665bd579d3518c0e194fb49f63244e5db8117060de3cc6ffd2eb3100ab31a14e3515571954fcb661c2c8d74c8e506be28b545f26de328e9d2779070e53d4ebc66c177b9fd080ae4f11e27d641f53fe30f6c64c58b84ead84cae709863835327fe1a7fe4a8976b703b592dbc3d259b73e2ad87632a3f2940c432dc0d8950d3e20c8784fa2a6e25576a01ee58417463b338c8f28637c8a756bc9dc58e5849a5875bc3f702b6d37eca2704b77802926670adbbb6549b4f48cfa18565a655123c24f5062f8eb147cb15312aa871cc6c3becf43165c541b0ce8d93b20925848228fa13c09e05763ce05713c531205c76ab45b055e284ccdfdc89691a3551de7276dbddd1c547e2cde3ed75ac6b67742c95ce80ce2b4edf9f8f4a772910d9d16413082269ae065f28bc88e007b723a2539efd081eb4574a8b21c2ea77967cf3354fe09764afe6ab12d4c73cef933f480498c98c576589fd995b601c2504648c485e209a0761dc1b2fee8c09bc5612d735f694c3a508050988def09a808da552d382936217948cfd8fb0538b7d0674724d2a349c497f952732f4e47ddc45242d009cc2b8aba16f75", "367d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936081632f3fe6f9ffa833663821f6544b710f6647bb31cd6fca3974f1c38eb8a74293ebb87675db407435945ccb2e2a6a79ad6cc0b8e2f03768d51396c4a1768b6d4d2cf0b4a04f3dfea651ef6d0b2c4d5fffa0a14be5e227661027bf8174dd263cddd84017ed719a58f336e1892f80afe07727626533c4c78318e44c39862ffd3"]}, "failure": {"scriptSig": "", "witness": ["4d0902b1185ae26fd8fbdaa90c2ffc87f13436571c7b8bc43ab1bb2c6927b296eeba7eda9d5cad8204e4182bc8dfb6326e98a45b19c3e04ab998cf774a9cd59514a39519944fea0721220ec9f67c08cc8769aa11805ba2d2baf8742d7abebedd893fcd60be501824168b0d7f38636bd0f9f563f94c1d15e75db5993ed1c6b8de187f95c5ec7334ad62aa0ba08c3ec489a9fc9be069e4732f9fbacd49771b78784b5c5af56e88ff351bf5afbebfc30387753be76312b3903b85db9621738b7fb164e587972b720fa7a5fb5b858c9d101f6b13b46905834b11ee8be00d797c468f42fac1e5d94c24cee8d360a968d571de68bf927d96c377e73fdc1433290a6197b9bb7510155efd661eec9cee2792ebf1bd38a99c73d595c5b2e56a684ca28437fa71614758c34ed4660a8600d1b8a7eab51d85d2c50fe7245a178220a35f17cd0a72e5923127c6d7de0120987191a7516acf5e772ebf22b48a55ecbf6cba26f6dc0664a114188c120bbc6d8586f7a08947ff22d193ac2543bce6c83584b87b8f8977433dd41eff14ab8dfe6b98d5f8b825455d00c126b4a43705e022b0f663e2ae8dc5d30c15a3168977dda3688d4c487c28e8d24fb3b25dcf34d6e7004f32a8cf38b56024913764eab419c634fea81ff0cbe2742f6128c142051ccb614933ba48a653c29649c746f7d6f45af54a0769c00872cecef3466191c1213e713696d1d6cb596f9761f401e1eeacdf75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb94a5b3352296838f351f650ec3ca72e25dc2a412f5bb92aac76541fe277cb7178448a7537869648343bbbdc00eb4ac0785a5f2aec0111e81b0d25ebde82a92a"]}}, diff --git a/txscript/data/taproot-ref/c37b0f05074e165869fb4e36093d5d05e7f5cd58 b/txscript/data/taproot-ref/c37b0f05074e165869fb4e36093d5d05e7f5cd58 new file mode 100644 index 0000000000..e7561b0624 --- /dev/null +++ b/txscript/data/taproot-ref/c37b0f05074e165869fb4e36093d5d05e7f5cd58 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2400000000153b568004314a6900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac500a954a", "prevouts": ["f5056b00000000002251207c84ae2d9063cc63412a30e00823aa01b05bc54bcf6d9936dc1c650bbdc9e98b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/truncshortcontrol", "final": true, "success": {"scriptSig": "", "witness": ["ae8ab4a2676af693dae1493617eae9caa947f452112902321a990ac6d74668a97ca7b2de345690fcb1815bf33baed1aecade9d1324b0318ece0425e4d9129855", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20"]}, "failure": {"scriptSig": "", "witness": ["ae8ab4a2676af693dae1493617eae9caa947f452112902321a990ac6d74668a97ca7b2de345690fcb1815bf33baed1aecade9d1324b0318ece0425e4d9129855", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", ""]}}, diff --git a/txscript/data/taproot-ref/c38df517f192e8ee8b749587f2286408e1add7af b/txscript/data/taproot-ref/c38df517f192e8ee8b749587f2286408e1add7af new file mode 100644 index 0000000000..9846d9e719 --- /dev/null +++ b/txscript/data/taproot-ref/c38df517f192e8ee8b749587f2286408e1add7af @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270230000000056475b9ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca0010000002f35f8e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8900000000ccb14bf503f56ee6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898746a49225", "prevouts": ["6ab20e0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "e73c5e000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "aea27b00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d25bfca305a764261d6521057603065fa946acb912c8ef078a9b999bf9159765f90762efe0ab9c58ac6ee07d07c88c733679b2f6b8a5cfbbffbf19600e5ac3c60b9de9d2ee16786568422ac483b36fe1c9fcf95e65bd3b063efa967e10d688730cf51f63f2f8d866e6663e3b4cb94fe811e1886694db682d7576d055e1b313b79f8ca6e54d8d125a3942d479774dc7a0d5f4e722a498ada7ab9ff7e33cb285ea9a05bfc8ff664a654c0014933940d35ffb6330ad111c7ba46295d01d70b1ad1e8ef0a133c3b33ad3b8b427be3f91cdfab40c1d8987229c4083581d550d42a4f5e6456b7000ec246f155d2feac21a3a09fac2bf6a859cf6c4d01f490d9e8bcef9c62daf9504d6b14d9fbeaebe8463bf3d637aceba337e936de34abcb8c37565724a388f7b21c96aa2e6b7a9708f4a9d2a9c66ec97e68d455fa500aba487966518e2f4d4c1a37f461ed6564676d4569607b21af0360a8afab9f99fb3d27cfa42d6a93bffd3ffc7be1120514697ac003584621b33a5ce5b81b734f9ef02cb25d0190a2baeb94634c32942a2f0309eae50b104420d724fdc1a0b68418915c254da6fd68d9fb31883fb21d8cc35fb13468b0908b466787e2a7a7e4518ebc560400f6a0c0784a24a35d9dcde65b878efff28b989e80b7bf9fb3aab53a326db801dbe9c9c47b01b567e158995ca8316ce84b01614dd5b7446bb86909e9ec5ec80c2a80920ee5041b262a9284175", "a17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08204a5fb755beb1eb88fd06fac279ccb2aada241654186a69e6e0c04e3255c18f895176026b3e005afce4c10b5e59a002659822bde369bd64201565ae4c88fc95c"]}, "failure": {"scriptSig": "", "witness": ["4d090274c8897502c436ef5bd271900ed9cf2e4489580d4929443ee4b54bdcc447f5bf4ffa9ee2a9543e50dc29871f45738f58664faae0e9a0762a1c3891d331318a3639c6da5b34f1f5712fee12ea17c629d3947499670a36d9764ebeb484445d3a1b995c5a90d513b4910821e3b8973a691e594af54ddc677bdd6f3a2aaed2b2c593c45785ec834ee2909e7c4d0ec2b93020f7e01db088f3244c252fd8526847108b04e675352df98bfea502fc7b82fe4ceb001313ea8b3f29faf3b1d25350ba2ad704a823a10fc8d9f148df7bd06185d600e4f8f0ad0a2912c87abb39975335cf0b3f8aa949020d49a947271834ecc40f7509e40a01559acd39f0d8a8bc40a908424a5f991f5ee3ba5bc12a29d015bac511be049ce986e39aa14f2590e5291d5cb0d96b3b7b64636220b73c76f376767539887a8d4ceeb8671e5b5a92381f9b4e1f6a836a5881e02b8af8140cdaa1a237c6ca7258c3efb641543fd15414ffae1940b5ee1c4b0d1a641d79d6ba7af663635c61cd6eec9c1a615295f099ede06729c6c747ca7281bf648477b8eb27cfcb2c682022e055d620df8aa75a70fbb923496f4eedda6f31b942017684ce49b902cb0e6860f11bc310939b085b972f211035c8091bd5973d18fa53ec56ceed6fd5086a3dfbf0caaeb35ce20ccba35644f51538a0b8feaa810749cf605d8611a1c752b716cb22a8cffb4642292b1ad976d9a56a9813360a4406eebd9275", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936807704338d8ff9f1c6c694bb815b9b0acb03731da8a0b1434ebd817fa66edf1846c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa09531ab440e1705f1c4b791477abf2a4fd5d47d92b3cb9e3998348c9d3a452b095176026b3e005afce4c10b5e59a002659822bde369bd64201565ae4c88fc95c"]}}, diff --git a/txscript/data/taproot-ref/c3a855f0999c9f0c734c21ec479b4a2de052c197 b/txscript/data/taproot-ref/c3a855f0999c9f0c734c21ec479b4a2de052c197 new file mode 100644 index 0000000000..6386cccdba --- /dev/null +++ b/txscript/data/taproot-ref/c3a855f0999c9f0c734c21ec479b4a2de052c197 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42c0000000025baee978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42d00000000755c9fcc03cfd46800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac95000000", "prevouts": ["4b5534000000000022512014c9f4af3daae468ca53c2c267c1d6c7824da89a84a3ef6d580562d3f844fc64", "4ff0360000000000225120b7b7f868117fc9823373a98908173a9736217ba3f26290a84f96d4cb32d63ac4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b1ad425f8fa42485d7293364b8a850d7e34fa33327ba7ff1de82301dc0a195e0"]}, "failure": {"scriptSig": "", "witness": ["6a7b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c3ca44e765c59aef19ebc14444cb23801ff338d4 b/txscript/data/taproot-ref/c3ca44e765c59aef19ebc14444cb23801ff338d4 new file mode 100644 index 0000000000..2d3834ebc2 --- /dev/null +++ b/txscript/data/taproot-ref/c3ca44e765c59aef19ebc14444cb23801ff338d4 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c33000000003fb3db2960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708000000000f56cb0cedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5600000000b56ec84c033b18af0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac87d19161", "prevouts": ["5469470000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "ad4f1100000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "392e580000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "eb7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7d98603ca11f2d62da2f097293e2a9fc40838a31eb24ff9d7fe998ee66e0434e58e476735d98d5a1185fd7ff42bb7b31cec58182079010d151d415fc7d6c3e4c2ce937a5de573933a673baa3adefc0607b7a8b345eb0a9388ff089ef522bdd2"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fec5402c57463b820a037283baf958dfe8fa8ff5b14330867ba864fa7bbb305c3f13c9f2c0ba7c3724f3080ca99cfd230291165bf004db5bbadb2403d0b759af84ce21fa65bd655e7fa8dd3695f51b098b96b5173f87464f2936878bf520f49fc2ce937a5de573933a673baa3adefc0607b7a8b345eb0a9388ff089ef522bdd2"]}}, diff --git a/txscript/data/taproot-ref/c3f3469ae6022ba9a824d15d3e5c6966ecd2729f b/txscript/data/taproot-ref/c3f3469ae6022ba9a824d15d3e5c6966ecd2729f new file mode 100644 index 0000000000..7a3982e272 --- /dev/null +++ b/txscript/data/taproot-ref/c3f3469ae6022ba9a824d15d3e5c6966ecd2729f @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b930100000044a29d078bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40600000000ce8be267bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffd000000004601938b033b82dc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33000000", "prevouts": ["0ba127000000000017a914e014b0ed75ce4306970c9f63e88b08a5a7bb4d0f87", "44813e0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "691a790000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2358212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["8f6e30f3e56f652139cfd8158d375f33d485dd0df08e2f04d20e3a4c8483122635fa195cd56cae46f25bf0f0a5697ea06506b59d758f9fc437dcb656cdd1652e"]}}, diff --git a/txscript/data/taproot-ref/c42ba6332f5103b6c07a6d7b7c7a96e1345fcad3 b/txscript/data/taproot-ref/c42ba6332f5103b6c07a6d7b7c7a96e1345fcad3 new file mode 100644 index 0000000000..f26409fcee --- /dev/null +++ b/txscript/data/taproot-ref/c42ba6332f5103b6c07a6d7b7c7a96e1345fcad3 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ec01000000cb4377a0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffe010000004024cc68026864b900000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdd020000", "prevouts": ["64e73a000000000017a9140917710a6236c7a08b54f54b004ee705f2913e3087", "d82a810000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "235f212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["ab4e0ec3823951d486f9919ba80751933ed66a0103bfa7a6f7350498163a4207c3765fb3b485bf9e438288b898517a24a341a53a713d248ed56b9e4397156ab8", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c4499beb83fe2bbc215490890a252106247a0d03 b/txscript/data/taproot-ref/c4499beb83fe2bbc215490890a252106247a0d03 new file mode 100644 index 0000000000..4771461e0e --- /dev/null +++ b/txscript/data/taproot-ref/c4499beb83fe2bbc215490890a252106247a0d03 @@ -0,0 +1 @@ +{"tx": "88a47fd8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c442000000001eaf11b1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf21020000000137c7d2049d1696000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc370c5044", "prevouts": ["466038000000000017a914525ca05541c81a105639c2efb802eaf5596cfe0187", "94b8600000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "21521f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["81cf41ac01a8d340559ec283da8639f3fff7a149b72f7168ecf7c03f4414197cc498af8b0c059c0e1181f6662b53f98c1fcc8d007d3e425884e23a06c8de5ffb"]}}, diff --git a/txscript/data/taproot-ref/c46f7002e386e4c4fd5c63195b15a2720dc604c6 b/txscript/data/taproot-ref/c46f7002e386e4c4fd5c63195b15a2720dc604c6 new file mode 100644 index 0000000000..1095aa4e59 --- /dev/null +++ b/txscript/data/taproot-ref/c46f7002e386e4c4fd5c63195b15a2720dc604c6 @@ -0,0 +1 @@ +{"tx": "4b63d655028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43401000000a620dba3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1201000000e5f7c897016aae05000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374878343df53", "prevouts": ["fabf390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "197a490000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["c5eaf172084393ea09a176390f4340749936672be03925208dc1f3cbdd1cf29a65dbe5716817f2f69003e2143c5e08043bf2f8dfbd59fad28648d31d2301f8", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef3255bdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/c4b2c2074e18699523a8e60939dabe323e8cfcc8 b/txscript/data/taproot-ref/c4b2c2074e18699523a8e60939dabe323e8cfcc8 new file mode 100644 index 0000000000..02de777b06 --- /dev/null +++ b/txscript/data/taproot-ref/c4b2c2074e18699523a8e60939dabe323e8cfcc8 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b74000000004fcd769dbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9d0100000099219efd01df608a000000000017a914719f78084af863e000acd618ba76df97972236898710000000", "prevouts": ["b816270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5df17c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_30", "final": true, "success": {"scriptSig": "", "witness": ["2503a87d74c773c4ed6a048416b1efc81fcf8d395b0435b453f7c08e2d5fa2f0dcc0bc4fe63991f93aafae30dff7fb33065c6aecae2bfeff9344aae72d49921f81"]}, "failure": {"scriptSig": "", "witness": ["8b436722229002c05ea6227a29ab4f3713ab338d5186cdd97fad8a99c28afc00214b81f78110290ac1ac8e3695a2c46f2340fbd99add439f17606a80d715429e30"]}}, diff --git a/txscript/data/taproot-ref/c4c19d4cee5d79334aa9c0ff61f19d321cc3941e b/txscript/data/taproot-ref/c4c19d4cee5d79334aa9c0ff61f19d321cc3941e new file mode 100644 index 0000000000..8f46ddde5a --- /dev/null +++ b/txscript/data/taproot-ref/c4c19d4cee5d79334aa9c0ff61f19d321cc3941e @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba000000000a4dea4a4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c51010000001e406ea960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e01000000c86dabae0117a21000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac57020000", "prevouts": ["0ca3270000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "d08c4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "08ab110000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_16", "final": true, "success": {"scriptSig": "", "witness": ["be863d3cbeba81efdade24b193a1f92667829d56035609ea44bb08a9739be1c5adb31005e64216ab1cb23a0575cd5533c045a435ee02777f58da29ebf95f75bb82"]}, "failure": {"scriptSig": "", "witness": ["d3a029059e0dcc015bec136d195e1af3206f9150495ab29ed25a2747483c9b619e3b23555a2b749300d9db591cf7ddd4fe4b57d28a5a6cbedf7f7cfa5d0ca42516"]}}, diff --git a/txscript/data/taproot-ref/c4e28343af816c29311d37b8559a05b14d797dd9 b/txscript/data/taproot-ref/c4e28343af816c29311d37b8559a05b14d797dd9 new file mode 100644 index 0000000000..7e4bb864ed --- /dev/null +++ b/txscript/data/taproot-ref/c4e28343af816c29311d37b8559a05b14d797dd9 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4901000000049cf49e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b801000000bc4daa160275809a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e754000000", "prevouts": ["0c3a6400000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "53e838000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["b1a80ca318006d147a1d5e9a294c73ae01beed6bc88e14ab81d5c11d79d99e2396b4366028f860e35e0a8e59195a81b7eb4ac68f35c80f4dfdfd5e0bda8358acbd6832953ae64d", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/c5c550da4ca7e932cdd65a9656f2f7c611148d24 b/txscript/data/taproot-ref/c5c550da4ca7e932cdd65a9656f2f7c611148d24 new file mode 100644 index 0000000000..650dbbe13a --- /dev/null +++ b/txscript/data/taproot-ref/c5c550da4ca7e932cdd65a9656f2f7c611148d24 @@ -0,0 +1 @@ +{"tx": "9e51fc1b02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf32000000004143349fdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4beb000000009abff0ed03c1d68f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ace21a0c39", "prevouts": ["01b468000000000017a914a8c07d8aa161ec0fed82ac1dc93d81dd0a92012687", "54c72800000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "235b212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["80e9c356061bf2ece818b285b3817fd796f5e94296dcfef4c951890ee0a1392b75d52da360c9343ac115e95d49959626b9c80f33ebc2f427e11f0e5d889c151e", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c62a6dec1ec0c7508b82a35dfbcc1d66455eb241 b/txscript/data/taproot-ref/c62a6dec1ec0c7508b82a35dfbcc1d66455eb241 new file mode 100644 index 0000000000..6364250e5e --- /dev/null +++ b/txscript/data/taproot-ref/c62a6dec1ec0c7508b82a35dfbcc1d66455eb241 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4601000000944c61c260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706800000000ba4a2dc30216b76a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966b000000", "prevouts": ["4bc55b000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "f1b4100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "dc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e96c63bd25ae92bbd16086cd18a0ced65254d43d2db01fd8c973d5ac979d0978d49cd47170ad660e437289f08833289e3b90e14293c0ba427f1ef2b5a93f8559a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e3bfe8b0458382ba4f4ce4b13b8b707c198a710172b0004e49e202e4d70abaa7b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936754c3400f5b19129397404414e73e7234111a3665d4d5bc651a2a24db00d5dfa276acb01c569c39653cc9be144b4517abeee153b1e65c2a7dfaac73ffa4f7941ad29df8a0e62e4f40897f8996914b12118c918ca2851b639742aeab01f587290"]}}, diff --git a/txscript/data/taproot-ref/c62d08fa40199eb68353dc3045f6c961f21f080c b/txscript/data/taproot-ref/c62d08fa40199eb68353dc3045f6c961f21f080c new file mode 100644 index 0000000000..53f5365e5d --- /dev/null +++ b/txscript/data/taproot-ref/c62d08fa40199eb68353dc3045f6c961f21f080c @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ed0000000047b48efbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf38010000006d3fa388017bcc44000000000017a914719f78084af863e000acd618ba76df97972236898720010000", "prevouts": ["ee9241000000000017a914a4e57198280c195671631f8b9014214c2f083b3c87", "da80710000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2260202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["f0349b0aee20ffdcc09dfdbd87d830a0aa3a64778c92c76b12338811097b9fcf9b67ec92e0109d3a50c1dea117f169c9422e93a567b54205210b26c8f23016f1", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c63b3815a0dae098fa0dce37acfd79f213436d49 b/txscript/data/taproot-ref/c63b3815a0dae098fa0dce37acfd79f213436d49 new file mode 100644 index 0000000000..7954471e12 --- /dev/null +++ b/txscript/data/taproot-ref/c63b3815a0dae098fa0dce37acfd79f213436d49 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f4010000009c66389e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a601000000edc649680396c34c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acbd5a055c", "prevouts": ["012010000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47", "89513e000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "a77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364a2a9cdde08cc910ce988b5b3af607c33ce20f2129cfc5515902d1db320653d12915fd873a4966f8e9b4a3b328eef3933245a1c852c287990317c3760d8289da96773453f0744a158be0509abdec64f05b1db7ccf03251d8359952271b442a24"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93668c2eb14f3f3b0f24a166b832cc6f7897859f8840212d3936488d8e89e33a87eda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e389e677eaf5eeea89a70f01c0aa3bc14cf3320f4b6dd8cc61f33138af3398b5b11a008161139ac7a92b00665158d25501a881aeebdfdbf881ee45b85e0726c11"]}}, diff --git a/txscript/data/taproot-ref/c63fa7c5e9f3cfa3be54296de8fcb8c5bae42ab6 b/txscript/data/taproot-ref/c63fa7c5e9f3cfa3be54296de8fcb8c5bae42ab6 new file mode 100644 index 0000000000..721116375f --- /dev/null +++ b/txscript/data/taproot-ref/c63fa7c5e9f3cfa3be54296de8fcb8c5bae42ab6 @@ -0,0 +1 @@ +{"tx": "1aeda83f03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9900000000a9e71ddadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1601000000c1e722ec8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bb01000000a0e9adf902bb0efd000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdf000000", "prevouts": ["6cae7f0000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "02fc470000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "ca9e3700000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063dd68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c4bab67da474338ff25cc5ed4d52931383799134580fe83cedc8cfd52799276c98751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d5c12d2886f924517b8c41f4755cb69ff55f68e740076f0e346dfe7ab1da23e202491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d5adfb4b655ff7e7194216f0c9ec7a59b69961b08133bf278a8ed5672f2f6a4fc12d2886f924517b8c41f4755cb69ff55f68e740076f0e346dfe7ab1da23e202491431d89488c08702db3cd2303e8a25c8ede371a8df5f96996e099ce5df632e"]}}, diff --git a/txscript/data/taproot-ref/c66c43a4b77a41b0bcafd8714216e0e515ea32c1 b/txscript/data/taproot-ref/c66c43a4b77a41b0bcafd8714216e0e515ea32c1 new file mode 100644 index 0000000000..bad39b44cb --- /dev/null +++ b/txscript/data/taproot-ref/c66c43a4b77a41b0bcafd8714216e0e515ea32c1 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127076010000009e98a7e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb70000000033ac90db0331e2690000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f878995083a", "prevouts": ["2bc7120000000000165a142540f27e90740933c99d4f17ab2dfc6c82951cfb", "e0b558000000000017a914d574841bde7bf0817694c799002118e85acf040e87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "235d212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["5d53555bf050efc78515fc7cb41c96d7a5577eda299f538f278e08d430aea10e705ebf7db220e1af5856af41294d05b57012e168300ed505ba92d690f812f174"]}}, diff --git a/txscript/data/taproot-ref/c671d0d61110d22335aeeff604afc7a78832a1f0 b/txscript/data/taproot-ref/c671d0d61110d22335aeeff604afc7a78832a1f0 new file mode 100644 index 0000000000..bacc74ee14 --- /dev/null +++ b/txscript/data/taproot-ref/c671d0d61110d22335aeeff604afc7a78832a1f0 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfda00000000be838db68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e80100000074bdb79c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b0000000006cc0e3ed03fdbde60000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a613ede228", "prevouts": ["566f7f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5c51330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0198350000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_75", "final": true, "success": {"scriptSig": "", "witness": ["aaeba6c1347ae721ed1685124a736b3d03522c05f4eb1a01b2bb8b6d33440b30622063dd44f473bb102095c4dbdc709ac36c17dc0b49b65992348cab9968a96583", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f76413d14bb611731012362e78efbcfe20d658bf81085c416db1b1893e09f72916007c0e69aaf4f61624911b83893045ba5c3c5749bedee55aecf8f8b404d72d75", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c684723b339ed9a247b5fe843d2111fcb009cbf2 b/txscript/data/taproot-ref/c684723b339ed9a247b5fe843d2111fcb009cbf2 new file mode 100644 index 0000000000..9b70410987 --- /dev/null +++ b/txscript/data/taproot-ref/c684723b339ed9a247b5fe843d2111fcb009cbf2 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b650000000040181b27bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfed010000000fb6f19301b3c016000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487fc000000", "prevouts": ["9d322100000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "cfc2690000000000225120a276d97cc1349e693e88dad472b695a8145cd2b116efbe16166838c11f43c819"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "de7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936337de194323cc2d0e259e7f698dbd99f7b4adcc7bc7010d92bfb10064ddb4e563f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08267bf5ee6e785c98394c7354db9cd2cb879e9766d4c80c1499d7b3e856282bd13a05e4a06b32de803bd9a925f4d86502b21cf2d106a73f15ada31e997750cbc80"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93639134f96039a0fa33d353d3657d4f6c27571ed27c9ba3a414c0fc3979439528967bf5ee6e785c98394c7354db9cd2cb879e9766d4c80c1499d7b3e856282bd13a05e4a06b32de803bd9a925f4d86502b21cf2d106a73f15ada31e997750cbc80"]}}, diff --git a/txscript/data/taproot-ref/c6911c815fc4eb1fdd0b9ab9cd09d3f6af2c6188 b/txscript/data/taproot-ref/c6911c815fc4eb1fdd0b9ab9cd09d3f6af2c6188 new file mode 100644 index 0000000000..bef8dcb178 --- /dev/null +++ b/txscript/data/taproot-ref/c6911c815fc4eb1fdd0b9ab9cd09d3f6af2c6188 @@ -0,0 +1 @@ +{"tx": "52c12c3202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7d0100000055114ebadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd000000000a78541e802e64d970000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898705010000", "prevouts": ["7bdf770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bd21210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_af", "final": true, "success": {"scriptSig": "", "witness": ["2e3a1fe130f76f0975ce2f5a48f984eaba47d877b38c26b106e6462a25092e38b7847704594af22f6e7dc42466872e3c7f2321322660daa44272609008bdc10c03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3cc4f3eedcf6199066344440ca1432536c072339d4b248de0b748e303ebf125d5c30576b558570cd4a2e55a21fba5edba7c6662c60ac98b2bd85d5646dd35a91af", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c69155ad942486c3313ec96fba99eb4b629b0b7e b/txscript/data/taproot-ref/c69155ad942486c3313ec96fba99eb4b629b0b7e new file mode 100644 index 0000000000..2990e2bbc7 --- /dev/null +++ b/txscript/data/taproot-ref/c69155ad942486c3313ec96fba99eb4b629b0b7e @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ad00000000d70bf3c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b08010000005adde9fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b60100000078ddf57604cdc96f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787521e713c", "prevouts": ["6eb8120000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "686e1f0000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "02ce3f0000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["de4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365d68cd89157a1768344d3693d5ddb5d4f8008c6471ee21a81a3a4b68d16bfcc31823ff0d5c6a769fa09e08a59a2485b611e1511239bba2f80aba2b92be945f1b811034f174cb7bd77652d345f06878a8d4eb3ae1b92590cd10e2563bf228d2d6bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}, "failure": {"scriptSig": "", "witness": ["4c52de", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363088a34860ed35f53da8979e97e04104e910b65ec5cc0eb3f7ffdd72be74d9da9c9e480d0f492be6e2f1ef49af1ad63a3a1c7bbd1c59ad16db6c35add41291c9811034f174cb7bd77652d345f06878a8d4eb3ae1b92590cd10e2563bf228d2d6bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}}, diff --git a/txscript/data/taproot-ref/c694a3b9670b92c47faef2482e1c373a96c84b7b b/txscript/data/taproot-ref/c694a3b9670b92c47faef2482e1c373a96c84b7b new file mode 100644 index 0000000000..0d1f968bdd --- /dev/null +++ b/txscript/data/taproot-ref/c694a3b9670b92c47faef2482e1c373a96c84b7b @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba800000000d44957fc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127059000000009e3999d502b1992d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ace6010000", "prevouts": ["9ad1210000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "92710e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "success": {"scriptSig": "", "witness": ["a69703bebdc49ffe28abcf4254c1e74f8ec62adde182675482310127231ce7fd145b0804a7e3b6a31c29921730a32ba8172061616170deff64acf66b7623ce9e81", "503f8c9a366ad4b7874653c110b34a04d85573ccceebbf42bb1624f0fd511c90cbbff3e616b6e563b6a73d39a2261da87df0319d882f80ff1170aabe48774ae76b5d4ed0326f39bfe14af90791d2ad0670d71d2718dbc542525425a8198447b90be5b28a57ac002e78f0eeb72f5044ee454bd21c76d3aba39e7a0f15573b735227331fda5d20883ed980e3d3ac53009493fd8ab45ecad062ed5b18373454e2fc9cc2a7c57e71614a42338273be8852e9f1df3a287ed0bd698afd025d027622799f917b7b29f4a37e2679a6b8e4e696655e7bc45e"]}, "failure": {"scriptSig": "", "witness": ["ae9d34ecc3acfdabcc7bd36fafb8dbffffd3d4a940c623b580e8ce08e4a7c7417adc0cd0658cb320b61b1a5f1a17327ad4ed3d27eeea9a6999ffaf544b0cab7481", "507ded0c5c1a30ec2c4ff46bf5deb5555c6ea2ba62db47889e0ac3730a703948f7b4d21a36530e2d16b76f80eae968a0cee80a5ff46bfc2f8d77f637f562bb8348fe9ff875d7fdd5589fd4f1fbac5e83f3c64649ecda77aa3384732c8d30c85c3aba744bdf3026f15bef7e8e523626eaf26be9e64b6ce6653aa38c273b903b6ca7511e553e31a42565959cc1956e1355695a4552a6f2e2e4578dd7ff1b40b2fde29742c704b0fe9b1d42b85c6eab03cd80739e3c8e85b23b447dd1cc2b"]}}, diff --git a/txscript/data/taproot-ref/c6a2dc24e570bc2a810731231121944aa2c4a595 b/txscript/data/taproot-ref/c6a2dc24e570bc2a810731231121944aa2c4a595 new file mode 100644 index 0000000000..95357da61e --- /dev/null +++ b/txscript/data/taproot-ref/c6a2dc24e570bc2a810731231121944aa2c4a595 @@ -0,0 +1 @@ +{"tx": "4e0dd6e902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8c01000000124e14ea60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709701000000743f899101ad8b36000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4871e000000", "prevouts": ["60bf260000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "a3c812000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93632573be4a708d1acd494d76701189b0a3fd387886b4d95dd6f8cd186553549461ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900450e2995ea6b9af074c8994aee2f7f851552d9aec0cda14b2daf9a27b43dc2eeb28859d05a814eb862cab9a6acf3b7acf0881c47896b22b56466b77992f62c0511"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362c2930913668888644f6abb9a2a8056455fd3fc4d16f365da86be00cecad5d5791fd70f8e44f42202023c580ea06f1578af3f03a2439147535e7b1f16736e0d18859d05a814eb862cab9a6acf3b7acf0881c47896b22b56466b77992f62c0511"]}}, diff --git a/txscript/data/taproot-ref/c6fa56d9a3cfa039c883bb5289ea577b65e788ce b/txscript/data/taproot-ref/c6fa56d9a3cfa039c883bb5289ea577b65e788ce new file mode 100644 index 0000000000..c67d320cd0 --- /dev/null +++ b/txscript/data/taproot-ref/c6fa56d9a3cfa039c883bb5289ea577b65e788ce @@ -0,0 +1 @@ +{"tx": "8a3f410701dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1902000000d2f9abcd02daec1d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487d2148434", "prevouts": ["27b8200000000000225120ed3968cff76493ece295a6213927f156d049a0539b8afc5b562db91ee008c85a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361b7a72aa3a05c14cb6a669fa7fd0ca3554039543f0462d8a88f34b84c6433f22"]}, "failure": {"scriptSig": "", "witness": ["6a15616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c709197b022538558c64745e06cce6340703a73d b/txscript/data/taproot-ref/c709197b022538558c64745e06cce6340703a73d new file mode 100644 index 0000000000..b088e7df7e --- /dev/null +++ b/txscript/data/taproot-ref/c709197b022538558c64745e06cce6340703a73d @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1100000000c319839760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270290000000027cc25ce0383556300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b1030000", "prevouts": ["e6d3550000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2", "32340f0000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "717d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a84e3bf2953ddc9cb8e31c297a3a65f2ea0223693047b485ee05dec8a9b2b04be4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8674d0c931fae68ff43996ef27e2c8ff69e275e322181f769b95dd7ebb695302b667dde4f09f14471eadd81946489c41cf4fd01382a4947d773f1f2d4d0db4c57"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b2bba68bdba5bb63faec40886b7424a0b364c5795c89d5df60ab242d96dbfca40b90ee144c073a081d1ef827361e7936248dbf88e4cb0dcdac45f51ff02f5de2667dde4f09f14471eadd81946489c41cf4fd01382a4947d773f1f2d4d0db4c57"]}}, diff --git a/txscript/data/taproot-ref/c70d23ebccdc1ea73e6448b1df58f62d71582adf b/txscript/data/taproot-ref/c70d23ebccdc1ea73e6448b1df58f62d71582adf new file mode 100644 index 0000000000..f9ebba57df --- /dev/null +++ b/txscript/data/taproot-ref/c70d23ebccdc1ea73e6448b1df58f62d71582adf @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4300100000062fdfcd68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45900000000e93273c30153505600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac25000000", "prevouts": ["c047320000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "3e083400000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "", "witness": ["30440220573cb450c7c479523c98f5fd7c0e3aeeb22fbd9dcb772dffee75759da4b9dd9b02205bdd134c1584568c52b16feeeec73fe4e15875b18291e465e0326083df476c6203", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["3044022074260d008f6bf380e44ae47b7dd5339a2a19382b3c9530ac6a6494f11d3334a0022066b16e1e6002bfb8017dcd93322f8a9b057e074cf111913a708d5b9b3e74b8de03", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/c71d9516b42225f3514b4d1df627c022e4817ee0 b/txscript/data/taproot-ref/c71d9516b42225f3514b4d1df627c022e4817ee0 new file mode 100644 index 0000000000..6bd7def036 --- /dev/null +++ b/txscript/data/taproot-ref/c71d9516b42225f3514b4d1df627c022e4817ee0 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfc01000000e1fb988b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4080000000022028f9adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bea01000000a94b1fb4012f9338000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748777000000", "prevouts": ["30532100000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "b5243b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9a341f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100c4a77541eab702eefb7750e4886d4b888f4c7ae032224e10a7a9ed17bda1e69b022058545e74087066a9e8392b327e6dbc90c3e898d39e7ca09b651247b8610b2a113d", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["304402205aa9bbce6272bb98eca7922f03b6379467297a57fe2656b7d223e453ecf91221022016d865dc6133fcee77025a773e1a0f092f08c5d511fb4d801f2f918873a09b4d3d", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/c7252d6f48851dc47f8c3177537e12abe69a084c b/txscript/data/taproot-ref/c7252d6f48851dc47f8c3177537e12abe69a084c new file mode 100644 index 0000000000..618ac9224a --- /dev/null +++ b/txscript/data/taproot-ref/c7252d6f48851dc47f8c3177537e12abe69a084c @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8301000000820c50a18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48c0100000021f32087dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbf01000000a91f7be901ef40c600000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acac07da2f", "prevouts": ["4cf95b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f456400000000000225120269138224e3ba14f27cd7cbdc9d1fed32e4c458a99f813a17992a22634094152", "d4ce59000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b68f30278051266e32481f29671a6189c6d353ffd83711e7b38c9357ae292bfdef3840bc6208da4f30144e2790f7ad52c95799fa09daeedea4f2bb4d9f8b26232798618f38f0b364851781b96e66cca1de96243a2ea383776a2b78640b336af04751e020aab18a578c160db4bf05505201763cac112612af1054c31721257208a64f4af43c45e5547211998e16db9ce94345f16cfc05b1f9a89f661272a54271f3f6064532838a3f48054e69a9ee6a55c84397e7a4bb580041e254962e67467112f5084d81e25e4fd96298d96ddcd537c8088829b663cef50c89e18f6ae80dd70aea90519a4b5ef32eb4a7a4236439517a9ef63d9db55c1c383574c0a17ad9575d6dc934f930851e90aa137fc749c3d4fd3f7f0fd0446981ba95063db4212d7c5d14a5e976d3527358465b91ada5afd3b360db77237ad1f117aaa3e84b57f56074cb59b16663b9970d68bbcba192e336d6f8e517e7cfc2848f6a55e052f25ccd849b84f134715364648d104ab55ef2e6671e3e8f420c02a0a0ef86a6ffada4cd6f4ef3ff8a70ea4d840835edbd39479dc0097befe81496ec152f3d8586edea4241d808f3ee9e2996fa3f160493433ae02c6add47c3ca7d33be0dec67be891b81c0d0c0c0e1f9c1ea9b6fe9c6522f083054883b553e7bbe87d966bc26c81b7d20aedf8d4fbec41954fce82a22068dffe4663536d2eab6b77683ad0dc09a8b7d2af3503049f24a2259bf75f1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fbe69cbb8061b83a83f1a5e61a364ffaacb63a1b8e8ddb476f2412726180c54b4f4a9cbf846248908cc3621c28de38a375d9ce3ef1fd8ded826daa29f51353851cafc3da456d473afb79353f7068dc1822b24dbf9d7eaef6a0c8c9b611b05e979feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}, "failure": {"scriptSig": "", "witness": ["4d0902e7bfcd69aa83973e920cd991eba9a815d391e2f67cd94758f503fe66bcbf169936b6436f8403487bf6f6b179c5c0cd030cf62d297627935617fca57a9add700f43a185b369789eeea0a86659a3431599c80a459c78b62eaa4430be15f16224a70a460ceb62a78921999ef3514c01e585a5ab904ee63c6212334f4db59284ca00b12917b5873e6a926fe36fb2fa152ebbcf34124292546a03ed6bbc4d870f46067408bba5a44f28e869891a0aa4775e20fe2908632908b768a953aa6ad40b0d60d17b1ce81d48c43d2d9652ce7175a6c3fa4b1f09c4f4992e37422dbb4ad250c67c08cf420d1ef673614ee1755a0af62741f00de0f0e025b766772bd3fa4254a93eacbefeb1559a30a937daa56fa5f1714e25c0c89c5944c13aa594ae452d0a88aebd838a1395fd4989016c9c17f172262bdcbaffb8ceb48ad682e53e4476d1180d0a3e2c021f158aa6206b472042620d9cee55925f505a7c239444084a8a49879e1a3cc366a97e3eacb83ef329e663ac0c57c31a1d501488b2c727fecb2167ebc0534f2c32e6177dd83002eae9e29d37646d88cc3c85ff8f968d8dcd2541ccbbd6908eb6b4a58c45c1d929c1b9a08e526a86a219d351109f952ec1152979a54f7609e048543d0572ba5bce1b11d28cccd7f9376d9a7520a9dc6c2788391f04a90efcaa33bec155882e45690af21f1b11e5fd49f0a59f74a64a50da300437864431632dfc10c402d1917561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045a250e002f75c6b1c142228c210e3ff9b9da21a81c3d6d31af30c750433b28b6418ea1dd842879684de6ce36adf7429742f60d84d7359dfb2eae76d7b546c72259feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}}, diff --git a/txscript/data/taproot-ref/c75d0a897f9c6981d81da8b49be331ba03439313 b/txscript/data/taproot-ref/c75d0a897f9c6981d81da8b49be331ba03439313 new file mode 100644 index 0000000000..1564748881 --- /dev/null +++ b/txscript/data/taproot-ref/c75d0a897f9c6981d81da8b49be331ba03439313 @@ -0,0 +1 @@ +{"tx": "9a4d26d2028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4340000000054ebc4c9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd401000000535d55b401bc3e0000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac08000000", "prevouts": ["e42e3b0000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba", "2fde5c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_5", "final": true, "success": {"scriptSig": "", "witness": ["3e76da909411b9aa4a2821f57e1793ffd7ec31709f737922e03de8e63612b877aa259965f78bc28f8240612a1a198a565ae3bd287f041f727515659fa948708d02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c92bcc39f88de0fccf05594a42dfe3635edb57ce21917883d27a19fa0554c878a5dc33fa7839ae067eb0e322af7872b61aeafce79b30eba6b88bd373e3b2506905", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c761e8c4c51ea45aa6c56b949fdc22e5d4c60cf1 b/txscript/data/taproot-ref/c761e8c4c51ea45aa6c56b949fdc22e5d4c60cf1 new file mode 100644 index 0000000000..a7302601f1 --- /dev/null +++ b/txscript/data/taproot-ref/c761e8c4c51ea45aa6c56b949fdc22e5d4c60cf1 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41c01000000818e558c025e5e3400000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac27020000", "prevouts": ["622f3700000000002259202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["e63904a1aaf4a9aebf1f82d156b1ef26f7e6b8586b945d1c33a8575bf074195bd38c7743a15ef171cd8fdf6519c1ed314604b3d15b0cd80f7dacc5b26f871c60"]}}, diff --git a/txscript/data/taproot-ref/c763c8080d8e8e78651eaf9140b7aa3fef1d52d4 b/txscript/data/taproot-ref/c763c8080d8e8e78651eaf9140b7aa3fef1d52d4 new file mode 100644 index 0000000000..9db50b49f4 --- /dev/null +++ b/txscript/data/taproot-ref/c763c8080d8e8e78651eaf9140b7aa3fef1d52d4 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c38010000002c06be89dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7a00000000a16685fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c7010000002dd89bb302d4447e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870e000000", "prevouts": ["c10b4a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0b942700000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "29fb0e0000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_94", "final": true, "success": {"scriptSig": "", "witness": ["ce386fe989eac7c2d83399fd33490506e49a5c9e9acd1419806a333e0bd803f0573450a048cecd2febc4615c11766d2b55f52052473e30149feda2a9ef632f7f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["625d4991bb3dcc0ec03a460c5f35ed2e794bdf4fdafc610fa83659c9b362c7a2371272fc050707aa27fc7ff596547a97df0956bb0c3957a705dff7b869853d4f94", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c77f06b7f82e62ac50865f5ee4163ae369969020 b/txscript/data/taproot-ref/c77f06b7f82e62ac50865f5ee4163ae369969020 new file mode 100644 index 0000000000..b96157f87a --- /dev/null +++ b/txscript/data/taproot-ref/c77f06b7f82e62ac50865f5ee4163ae369969020 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4070200000035c405e2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca301000000f48bf49ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b52000000003a56f2d902d8daa3000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac6c000000", "prevouts": ["5bc8310000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "a32d5400000000001652142540f27e90740933c99d4f17ab2dfc6c82951cfb", "05a12000000000002251202b18b828586b5828635076972ee0bba96c3f290312125c393cc54d832abc1349"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ba06655263132793ff4f7f3ead2f9f2f86fc9ceead0ef33e48b2027a64ea445"]}, "failure": {"scriptSig": "", "witness": ["6a8b616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/c785d388c9a15886ab980f88b666d4945c7ee4a6 b/txscript/data/taproot-ref/c785d388c9a15886ab980f88b666d4945c7ee4a6 new file mode 100644 index 0000000000..8be04c8cab --- /dev/null +++ b/txscript/data/taproot-ref/c785d388c9a15886ab980f88b666d4945c7ee4a6 @@ -0,0 +1 @@ +{"tx": "487bef7002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1002000000de8b8aa4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c69010000002054ea8402c7f0a4000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87a505741e", "prevouts": ["b4c85d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1ac8480000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ce", "final": true, "success": {"scriptSig": "", "witness": ["5553abd056338fb08b4bbb5c79dd9a6ad62e1e69b98132dffee6a4aa8ec8778ecc463e52fae07201e14fcfa23151e711460bbdb9b38e3727f6a1b5152fa9dac083", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["6e0fa93028289a8dcf0b927eff3fac81b83bb034e741fa1f2521825841a22cd219eb445e0b7d9f07636541e18a878539c729e5e72175cb5da8d58b9997fabe72ce", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c79333ec6723390b7f1563f388c7a50d86f860b2 b/txscript/data/taproot-ref/c79333ec6723390b7f1563f388c7a50d86f860b2 new file mode 100644 index 0000000000..b75cbc5730 --- /dev/null +++ b/txscript/data/taproot-ref/c79333ec6723390b7f1563f388c7a50d86f860b2 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6d01000000b06dc58edceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4c010000002a7e2e9adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc90100000011c898bc0363a0a1000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a663000000", "prevouts": ["3c7c220000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "23ef240000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "d7255d000000000017a91498e55eac47e04767f832d50008ff18559102c9e787"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21601f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["754f3ae87867a6344f53f4d50002692b1af8401e629b96ac03a9e310075a77957dcb468362594e4ac069e3cfb3a6b2d23f0975c072755245d82efe0f95c911f9", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c7946ca286a4c1e04861f5fe7ff7982618728e8f b/txscript/data/taproot-ref/c7946ca286a4c1e04861f5fe7ff7982618728e8f new file mode 100644 index 0000000000..7ea8266f9f --- /dev/null +++ b/txscript/data/taproot-ref/c7946ca286a4c1e04861f5fe7ff7982618728e8f @@ -0,0 +1 @@ +{"tx": "543aa354028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44a0000000011a31ca4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7401000000580331d803fd42a9000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acad535e40", "prevouts": ["137f32000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587", "1a62790000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100bca98a852f9cbde62ceefaac0cb08b690e73a3e0d3b47f10d72f23355d3772ca0220186709f1b3a4435dc09bfa20db77937c9131c244446cd9b0d352ec70501bab0b812102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "483045022100c1c64d231b4b54e02126ac4b06ff870f1b6ecd427eb5b32fe8c58d7d6a38dbfd022070ca91ce07c0919442dde6ee8a4778f442409e31b096b1a32abf4047b49a3492812102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/c7a2d84c0203fa2c48f932ed3cdb57e9bc3d4cd3 b/txscript/data/taproot-ref/c7a2d84c0203fa2c48f932ed3cdb57e9bc3d4cd3 new file mode 100644 index 0000000000..2e14e59363 --- /dev/null +++ b/txscript/data/taproot-ref/c7a2d84c0203fa2c48f932ed3cdb57e9bc3d4cd3 @@ -0,0 +1 @@ +{"tx": "4013c48c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6201000000bf7eceeedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca901000000a70f748001caf00c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac9a82d82a", "prevouts": ["164228000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "eaa954000000000017a91439ec132e1466f40f0086baa7ac253013e83c7dc387"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "215e1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["2e494ef1cb42ca52a79be07dcf9f4a1153a518041c0afcfe69056dcee0f6a6e081bc6e8a26754af686353f1576078eab72262b3b5420112f625b2ee5ed759977", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c7aa7f6d958c6e29a221a767f1d7b3c103fe86b2 b/txscript/data/taproot-ref/c7aa7f6d958c6e29a221a767f1d7b3c103fe86b2 new file mode 100644 index 0000000000..98bc1675c2 --- /dev/null +++ b/txscript/data/taproot-ref/c7aa7f6d958c6e29a221a767f1d7b3c103fe86b2 @@ -0,0 +1 @@ +{"tx": "3ba8d6ed03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1d01000000e3bae3a4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8c0000000072f053efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e01000000551026e5037abdec0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963948d921", "prevouts": ["75f85e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74c36b0000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "26ba240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_9f", "final": true, "success": {"scriptSig": "", "witness": ["c565b4ef286c95813ce6b5b51ff2844046260175f110875745fa85081fee1ef80c0116f6fc4797038ebd8c17a89a9da570d8ba9c8801a4d4b478d122c43340b182"]}, "failure": {"scriptSig": "", "witness": ["6f7d7b44273b0bde92c1635efb75db031624b81a2fb540843eac8b187a188487d2b01f3c4adbc11b882c69ff06f411986857bf336ece7fbc55cc6c2f152515ec9f"]}}, diff --git a/txscript/data/taproot-ref/c7b48c2518d6d2a2a5acd628f2fb397cad2ac0ea b/txscript/data/taproot-ref/c7b48c2518d6d2a2a5acd628f2fb397cad2ac0ea new file mode 100644 index 0000000000..b7f5c89ec8 --- /dev/null +++ b/txscript/data/taproot-ref/c7b48c2518d6d2a2a5acd628f2fb397cad2ac0ea @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfe00000000526d26b7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2701000000c3f9d3d90238f9730000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79600000000", "prevouts": ["20c81e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e96a570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_1b", "final": true, "success": {"scriptSig": "", "witness": ["5d57158b4533e2a6888571746faa954dbc3f85386414fabd7023b25f5dcb9083a6d44833ce64f3f9db87e8c48f832c558b434974ceab2c45ab91ee55ded5cf9d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1f9f8626ee14c89bfd6462423f93c9a4f6f8892951d3abe4bee78cf76d57527e7b92cc0038a65df939b8f89b45c52a9e932bcbca2b9e26d71fd713ef377940d11b", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c814f8c932eb8ff0b1b54d8a85929406a22a72f6 b/txscript/data/taproot-ref/c814f8c932eb8ff0b1b54d8a85929406a22a72f6 new file mode 100644 index 0000000000..368a484ef1 --- /dev/null +++ b/txscript/data/taproot-ref/c814f8c932eb8ff0b1b54d8a85929406a22a72f6 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49c01000000fc23b6c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b040100000067f7ca9b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f0010000009dd718dd01c92f7a00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac43010000", "prevouts": ["ad873700000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "baf1220000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf", "f44440000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d04c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b81ff7cc7637e0c05982e17a8e208328988859d4b2b7eb979a1983188becada13f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823bd101e45a609d3b8e0b3b6f0b7594624f7e9102ef5d5dd3027418de40ebb2180d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}, "failure": {"scriptSig": "", "witness": ["4c52d0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936efbe4fce68f3b8555862407b2d13e298861a0b71ec35e363803758f270d7e6091469e71666f51d71b691366cd88792f62b60965457ad0f8cff2baa31a91ced83d191de94316b2d555b882a7ea052cdcffb2858bcf3e9dcd4db66bb89a9914d760d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}}, diff --git a/txscript/data/taproot-ref/c8172ac90dca46ddecfcb6abf992c70d492bdaf0 b/txscript/data/taproot-ref/c8172ac90dca46ddecfcb6abf992c70d492bdaf0 new file mode 100644 index 0000000000..a0b68a330a --- /dev/null +++ b/txscript/data/taproot-ref/c8172ac90dca46ddecfcb6abf992c70d492bdaf0 @@ -0,0 +1 @@ +{"tx": "b7fcc267028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40301000000e44fc5b9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbc00000000dc4397dc0231b2b6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388accd833d55", "prevouts": ["960e360000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "1224830000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "da7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93647b36fbf58146635091204325275bf32c600005bcae8b0ef3bfa655f050786d2ee00e627ce877dc7a3321ebc519bf09c5aac598ee9e81cf6d3228685de2d2a5f9a29f5cb7818ea23e4b491695dace811707e8772e99626d3237c076ba9a076d6566ba3404d3656bfd0df4a55f82c254cdba579fd51be164a5cd21fa2faf92a44"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c01f27a250fc54a819b2f6e5182b6f4b8059de1027a76afb9faeb15ebb7f4449a47bed56458bb8201cfe785d9ebbccb6afef9cc99128ad29d757c102b7b9c0a9eb0481d56926b359fa3e2e34471adba51fafc61fa70dea7541795bc082db9408"]}}, diff --git a/txscript/data/taproot-ref/c8203a41b6f45793c2150ed5554ab5bf5c7eae94 b/txscript/data/taproot-ref/c8203a41b6f45793c2150ed5554ab5bf5c7eae94 new file mode 100644 index 0000000000..9e97e11d1e --- /dev/null +++ b/txscript/data/taproot-ref/c8203a41b6f45793c2150ed5554ab5bf5c7eae94 @@ -0,0 +1 @@ +{"tx": "01000000011221809fa938f2ef41f6621f6e6a0e75e05349f5a7d7094926420abdf536093c010000000070ad45a90433d150b310000000160014ca9858c362545bc83a3b93e73b12b27a9b3ca00358020000000000001976a91472fb0c729bce8fb851f92a5ad48d3d4231beda4988ac58020000000000001600144bcade4cacdd490a6aa7afbb8ba77ed6898137ac58020000000000001600143f886f8feaf75ad7bedd5713d4d148e7c97c113409010000", "prevouts": ["2e6353b31000000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/keypath_empty", "success": {"scriptSig": "", "witness": []}}, diff --git a/txscript/data/taproot-ref/c82943e824916226a82dbcda450c1cf3f21df1da b/txscript/data/taproot-ref/c82943e824916226a82dbcda450c1cf3f21df1da new file mode 100644 index 0000000000..0bf3fc1903 --- /dev/null +++ b/txscript/data/taproot-ref/c82943e824916226a82dbcda450c1cf3f21df1da @@ -0,0 +1 @@ +{"tx": "35adfe970360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d5010000006640029abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf78000000003657cfe8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdf000000008532f2b1014faa6c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4871d222b1e", "prevouts": ["96730e00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "d08c660000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "f2fb7b00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "4730440220745645c13b4b275aac783c64d4d570fb12a959f1f428fb878c54bd13625b3b730220692113b354fb6c333a611a2439070174f869ee1bb77807a644cce3c7866c81dc0300", "witness": []}, "failure": {"scriptSig": "47304402202527f22743fe76485a67d2b696439540bee96a2c89dec0424ffa698d61d7d5ec02202170150595f24ec82a3c3d442e6566536273f96cc0422a00814f50099047b602030101", "witness": []}}, diff --git a/txscript/data/taproot-ref/c83f86babe52fc934414d829d4969407bdaa8de9 b/txscript/data/taproot-ref/c83f86babe52fc934414d829d4969407bdaa8de9 new file mode 100644 index 0000000000..1d6dc6cfa1 --- /dev/null +++ b/txscript/data/taproot-ref/c83f86babe52fc934414d829d4969407bdaa8de9 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bac00000000a4c899b2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3301000000510c59fc02e5e69f00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac52020000", "prevouts": ["13cf270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "33bc7a0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "1a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa8e84781bad1ba81b7ce5b7be6cf9bec34b59091704d19096b61e5a37e7aa266c56798b11c96dafc2935d577afad31a6537ce4b1a48ff27833822cff5fe95a51e"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369ae37181c42054bd3d996a0cb9fcac8a434e22d455bb156486fd105951d5862240401d3043d3e54134521a2f6b274f3ac0e46a5b9a6f95ac49ca3a75270b4793801cbe9d84ce1e82e006940c90d66235295537a514918e448d1b01c99be1031af2727a08c83da142d000f7f66d34a23554b296f940ffe81022e50f50dcfdd8b9"]}}, diff --git a/txscript/data/taproot-ref/c85880f71216bacfb5f45a917040c76a5b933f5e b/txscript/data/taproot-ref/c85880f71216bacfb5f45a917040c76a5b933f5e new file mode 100644 index 0000000000..027edd4bba --- /dev/null +++ b/txscript/data/taproot-ref/c85880f71216bacfb5f45a917040c76a5b933f5e @@ -0,0 +1 @@ +{"tx": "b9d6ebbf02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce801000000681a4abc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c401010000007e28d0e301fb412000000000001600149d38710eb90e420b159c7a9263994c88e6810bc77e020000", "prevouts": ["f476560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cb49320000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_9f", "final": true, "success": {"scriptSig": "", "witness": ["a4d50c81527021ffc43e6fbd6cc40e5ceabe3b5aadbf2de7ca7133677010e3d8a1dea8ec67b9ec2bb8fe716e36f51cd11a26a69558024d7ddfcb106610df3809", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["4d7be77c7cc3ca06110277ed73b6fbf51e8926ca1635f8ed75cd16ff780d79607fdeb96c019c10c32f39ef9a0197aef4ec72b60017860f0908f2d630b7b3e0659f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c85ec330c8ffb17623ec929fd4a198c3b768811a b/txscript/data/taproot-ref/c85ec330c8ffb17623ec929fd4a198c3b768811a new file mode 100644 index 0000000000..9fc12d6910 --- /dev/null +++ b/txscript/data/taproot-ref/c85ec330c8ffb17623ec929fd4a198c3b768811a @@ -0,0 +1 @@ +{"tx": "d21e6dcb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44801000000e3a0c5abdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c52000000009db4d7d80252268f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5a61c420", "prevouts": ["4d7d41000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "c9354f000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/emptypk/checksig", "final": true, "success": {"scriptSig": "", "witness": ["9b424e1044e5dc7cdc531e12877671db688a9a52da4a0cf3431e55d0c4d577a816c10033dc6e3e1e8efa220fadc65dce1ec52ad30da949263406fd68f5196304", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cd2d09394ee01f4cbf453b8e43120c6bca0157ff833036c4a91161ae8d6db3dd3595e47f783dea9cd898c640c1ccf4b7d0ff5bfa4236f535dc6b4728299c1d69fb9e9eefbd8dee3e5857c0a5c3742d0e58764b1e6eec73b89290af63b7ef8123f752582a11afed87b1aeeab00a91ac5167325e0fc3825def3a8307d2082c1acae8c13f957496bd85a8bfb196b41115877f1c292877d449cb5d56eb109a1f8e695176267bbd1b7867e2eebc439e9f1978d6a17134b75a8bbf0107687388ddeb5ca20cf31e30816ef7bffd0e43d4efa6c46d11185474d89ac75f693a7c477baa289311c864108ea260dd739a7c927abea94bbd3ef2fa436b5348a12a03476bb9e451f31f95136dbefe9a42f2bb6868f993acae25cfce8fc0d73b984508d267a487b041864f4ad19f6b2782b89895068e96969bc0c0cb50b64c3b84612df4c73208c4bcf6cb070e67449ea1a036232a8155856b27be4c634558db013e06b79c26858824757e3ab18b9476867ac69e63e36877af9fee4aeb519472ff5a504bc7e1bb8a70b57e599289922abee7f7cb3f5c4b4e0126255c9af59ddd6c8d572a0551d9a0b10fc29ed9ec9ba811a78159d56d191855f20d80384a7f598d54defaeda75074e07476023602dfde1c8d0d124f96edbab4af8198f97e6bceba6cad7de517a8f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["eae4171cce628642d6e5efa57c43cbc6d95289533e778a30726e24617dfd41fc57c1622715784b71214b1252a1b92d886f69d300f26dc1f4f8e670b4afb9609a", "00ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b0431b55481a374c89f40eb98ef9d2a1ea4a15c1fa25842c8dd1b505d3f733008998f104a41d430584d29acc5d80983bfa4388185b9ecb4fb5f364585438a9bd260600b62c8ed4db4bf12723005c7f766cb302a575f8872965ad67f65636a6b0c8f171a0659181424fedfeb48947aa5b62ebec348497eb70a0e4b9dfaff17fe7851f2fbba69e8a986917b32b5f76ef63e06d7f778743be5452643f44f99ea505f10f2cde5a4729d525a487b41d56d434ed7dc5e0aa5e11e544eae0c7246ef2b3ea5155719b875991d083ecd32183be0f5ac452a5905295b6a0b91be04b40b76e4803cbe3d00c239899d4914097448c043dde77fd42773528487758c6d087e8cf83fa64278d817919e62c4d23adcbc207f804fcd146d72915d8e061e85a8f6a6e6cb9d4e0a9220b07d19fc28732eb4bb2345d54d956bd2d189c6a5f87f1c011bb65cbfaa9ed654ade91c00c9fe4f57391c241e95cfd60b1f44f495a05086ba006260268f3fa4d832afae96ff672bd19d7e928d42bc878143589bed193337fe656f28feb26558d4d064770c2eb738b0251c60e0a639239140ddba0ceb61ff7c3e738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/c86c77b200bac67eba1a81988b36e0764528deef b/txscript/data/taproot-ref/c86c77b200bac67eba1a81988b36e0764528deef new file mode 100644 index 0000000000..fc1b27c730 --- /dev/null +++ b/txscript/data/taproot-ref/c86c77b200bac67eba1a81988b36e0764528deef @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b040200000046cd652b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40a0000000042a9c23e0462eb5600000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac77020000", "prevouts": ["05bb1f00000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989", "45ee380000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "967d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362da8eb1c279bfe4030c40984debdf0218f758d92db84bca846c9a6c0c2c889522729135af56592d99186c3f010fd31ebf46aa180b9496740b245c4ec874c834ddfa3c45458ee21e782394432ca1779912e92f35e0ff52c3985a5265a8dee58b3654e31a1d81b19a8c2670362b3a1330b2f2d66c8db1c8314023a61983d2ff610"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936034fed625626755137a076a5dc7fd4623114bcfec779f6cea9743d7f2e859f08b066835f4c858657284bc4f27395efb05761f76f20d1739098d7bca44617346d654e31a1d81b19a8c2670362b3a1330b2f2d66c8db1c8314023a61983d2ff610"]}}, diff --git a/txscript/data/taproot-ref/c8e586d3f61c1ad22568794bbfcb69f57cb8b000 b/txscript/data/taproot-ref/c8e586d3f61c1ad22568794bbfcb69f57cb8b000 new file mode 100644 index 0000000000..890c457187 --- /dev/null +++ b/txscript/data/taproot-ref/c8e586d3f61c1ad22568794bbfcb69f57cb8b000 @@ -0,0 +1 @@ +{"tx": "9701b121028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40902000000f80e52cc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fb00000000f5b250cc04079570000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961fe84c52", "prevouts": ["510837000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9", "0f433b000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "247d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a5787881982eabc9f10a574183ce87b535a8253f66971d7d0c58826076cb527312b5d836754160f4cb099c4d8b267e29847dad01b12a09dec3875f376ae126ea3506420e788c3ffd3d8d88ddb9154e82106737a8dd2b5d0940daf68f275cd0d7"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb9b18a780ce64b599d9d3042fe9b5b93046b018637f9f8cec8ef00735e099ba32f1db23017f271ba09e9de40cbf6bd4b292cb969b1168724d03b4425efd5cf153506420e788c3ffd3d8d88ddb9154e82106737a8dd2b5d0940daf68f275cd0d7"]}}, diff --git a/txscript/data/taproot-ref/c8ef39151618f6cc8716604cb9c29f93559b5a3d b/txscript/data/taproot-ref/c8ef39151618f6cc8716604cb9c29f93559b5a3d new file mode 100644 index 0000000000..8dddd58d91 --- /dev/null +++ b/txscript/data/taproot-ref/c8ef39151618f6cc8716604cb9c29f93559b5a3d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe000000000930c87d0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2a00000000cbde473a01036620000000000017a914719f78084af863e000acd618ba76df97972236898797860936", "prevouts": ["e1c0710000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "1def81000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361a24f92e0fd66692248020bc486fd34464c8d03dbe31b3b0085981632dac5adc8586fdecbef25bbe615615e0698f2a9b21ec544d3ff645908914cd0f4da91c05854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08216dab5147ee209d2bb54465ac69ced1cd5e726256fc4bc53cec72e983b39694d8586fdecbef25bbe615615e0698f2a9b21ec544d3ff645908914cd0f4da91c05854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}}, diff --git a/txscript/data/taproot-ref/c908a5304c6a71d150881ee923df19a58e37c8e9 b/txscript/data/taproot-ref/c908a5304c6a71d150881ee923df19a58e37c8e9 new file mode 100644 index 0000000000..013d01447b --- /dev/null +++ b/txscript/data/taproot-ref/c908a5304c6a71d150881ee923df19a58e37c8e9 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe601000000c65799e260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ba00000000d4786d82dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8f00000000fcfa74ef02a77fbf00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d5000000", "prevouts": ["6bf861000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407", "d5740e0000000000225120f53d4d34de47a5fffffaf2fc2c78ea776a7cd8d2ae45e19539d143c70b3fc5d0", "5eaf510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_cc", "final": true, "success": {"scriptSig": "", "witness": ["257ad40fbac7c2d9f1a9e1db11fe94e6d194cddbdfcc69058e46acfd792194a47e9db4a1310bb5a16f76584af5dd5ac853267f15f72ff68abf7cc6f1c148320382", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8efa6ef9e488aeb43095ccb5f019bcf9a725b4c0301f1f987108cccc2c353f71479d1387a06f9e82db505b3c295a715d1c64356626b5ba99499f95399c076f54cc", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c91a0b63271792838de6f8620c116c19028be7d3 b/txscript/data/taproot-ref/c91a0b63271792838de6f8620c116c19028be7d3 new file mode 100644 index 0000000000..d92af07f13 --- /dev/null +++ b/txscript/data/taproot-ref/c91a0b63271792838de6f8620c116c19028be7d3 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45401000000823bfdc18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4180000000071fce1b204401f74000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac97050000", "prevouts": ["167039000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "9eb03c0000000000225120d568b8728ac27b6616789818942be5cb929e56b49b97b92550ddc2846ca38bde"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "477d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71edbbe6d997bdcd7c7603d7696a19dfa7a137162827825260b73e89d3e21fe597dfd9e929a06047270fff43ba4c6b47136464c62381aba7ed74ab98bc69d199aa4"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365453fa1cf5661ca4e41648bac18e336e0e2b6f234348e01e3b9405a211d280e1da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71edbbe6d997bdcd7c7603d7696a19dfa7a137162827825260b73e89d3e21fe597dfd9e929a06047270fff43ba4c6b47136464c62381aba7ed74ab98bc69d199aa4"]}}, diff --git a/txscript/data/taproot-ref/c92d0b7830a59c91b7478b9bc6537abc9104ab24 b/txscript/data/taproot-ref/c92d0b7830a59c91b7478b9bc6537abc9104ab24 new file mode 100644 index 0000000000..e3ee3209ac --- /dev/null +++ b/txscript/data/taproot-ref/c92d0b7830a59c91b7478b9bc6537abc9104ab24 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709400000000b5af37dfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdd010000009d67e5be0212197900000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac7c000000", "prevouts": ["48250f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6c8d6c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c8", "final": true, "success": {"scriptSig": "", "witness": ["5ad3e8d9a3c034433bc5885320a6655c35f6fb4e4e21044159dacdbcda9705b392aae27f099a5709080f29e5818c42df824672dedb9277c7fb3587be15223d3283", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f20b460bf96dd5ce5d26f77c330de8a82f53b5576f2a8e66bae591dee0bf66460981456cc948cf5b380d81f43bc2b48eac39b7e6c4f6462a11c21f9b529fc875c8", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c94bf93a205b5120777d3d7dedacadaf6c732df5 b/txscript/data/taproot-ref/c94bf93a205b5120777d3d7dedacadaf6c732df5 new file mode 100644 index 0000000000..335828f4b4 --- /dev/null +++ b/txscript/data/taproot-ref/c94bf93a205b5120777d3d7dedacadaf6c732df5 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706b000000004daee3458bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4810100000091e255d604661a4c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac4d000000", "prevouts": ["e2cf0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d3ed3e000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_8a", "final": true, "success": {"scriptSig": "", "witness": ["3c5348f3d426d431117278556a1bd1f6999fa0ac8af1a93e61940c66473da6585068419e3ec05d2abcc43f57e5d386db0bd53db27b8c1723ed341b1dfc7c27d302"]}, "failure": {"scriptSig": "", "witness": ["0550351ea676302c8e29b537dc137b16fbe9bc07fb2f19fddb08262c010f767f655ef51d24d7014c8d81700f04c74b01d93a8c7950d416611dcfbb65e35d66ac8a"]}}, diff --git a/txscript/data/taproot-ref/c95a348b7638eb340903fe3cc3532859ffe5403f b/txscript/data/taproot-ref/c95a348b7638eb340903fe3cc3532859ffe5403f new file mode 100644 index 0000000000..6f50980525 --- /dev/null +++ b/txscript/data/taproot-ref/c95a348b7638eb340903fe3cc3532859ffe5403f @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44401000000b1151faf01043f0b00000000001600149d38710eb90e420b159c7a9263994c88e6810bc70bcbd924", "prevouts": ["a134380000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_10", "final": true, "success": {"scriptSig": "", "witness": ["c8d082fd536dc393bbe63bcb99dfe609a785a548abee33b3216dbaf05dfa98af96156992a9fe4379615e11109a1e061f91047150302685f8055bf5695655d21082"]}, "failure": {"scriptSig": "", "witness": ["f162e77ec00e3c4853db7fcf3d8d5f85418b3c457ad9107f25232686eefd6c42910d174f5404a351f9217e2af3df799b1c8f46cffca3bed06f954226578729bc10"]}}, diff --git a/txscript/data/taproot-ref/c965920ad9808bd3f6a009ce5335213895163c4a b/txscript/data/taproot-ref/c965920ad9808bd3f6a009ce5335213895163c4a new file mode 100644 index 0000000000..26a424540b --- /dev/null +++ b/txscript/data/taproot-ref/c965920ad9808bd3f6a009ce5335213895163c4a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b790100000051704d828bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ab010000002cc3b20304c1485f00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc47cb040", "prevouts": ["74b026000000000017a9144582b7676ffb8c3a2735b8e71e172a272e3e33c087", "3db63a000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000bc", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad81a9d5fb34658f56ef265a5ea50d6ba4a88b7d3df0c15a8523e96f4d1d6f82d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d516a0ed0b6cdb130b03f26b8a245e72d5247ee3941518d7e9956496f6ce27b97d7150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682cd8a89140098d6b7e3aadd747ce5bb6ed64c7673e0c8243d2c4037d581567c4a8563068286881d42b1c4901d93a483973910fd5653bf7ebbf040741f7cd837150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}}, diff --git a/txscript/data/taproot-ref/c968d693525b4f56eb70b070dbf41555841fa170 b/txscript/data/taproot-ref/c968d693525b4f56eb70b070dbf41555841fa170 new file mode 100644 index 0000000000..4474cc7e37 --- /dev/null +++ b/txscript/data/taproot-ref/c968d693525b4f56eb70b070dbf41555841fa170 @@ -0,0 +1 @@ +{"tx": "c3554c7202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0e0100000076c92ed6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcd0100000015e8f9ac0162f93d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac8ebf4b29", "prevouts": ["f7b753000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "2b9321000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "47304402202977185013ef83fa9176d431083b8ea006c249bf46248d8d379060c40e5c00bc022045f72dda06b542a894a9fe4ab8928e139c3be905b48ad6ea9407d9dfa4f8743682232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "4830450221008497a8a4f8f306b7177f773470b917d254f06199bd013267c78f1496e0565a7b022038bdb3b6ffd73226b87f75359b1022709e6c1ca74c510093a47866f3eebd64c682232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/c97c22cac658b5a97d90aab28ef2a0126a80ce6e b/txscript/data/taproot-ref/c97c22cac658b5a97d90aab28ef2a0126a80ce6e new file mode 100644 index 0000000000..e4ee6b231a --- /dev/null +++ b/txscript/data/taproot-ref/c97c22cac658b5a97d90aab28ef2a0126a80ce6e @@ -0,0 +1 @@ +{"tx": "87114d0402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bda010000001bcacfcbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5a01000000684733a90404c2710000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acefe46a4e", "prevouts": ["33a22800000000002251207a86f45d21fdb08435e271cb417d7b8bb1e066ea2bc109ea12043ac97c7d3e10", "94014c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_fc", "final": true, "success": {"scriptSig": "", "witness": ["019fbd076e3722f15c832e92193e6758fb07191e463f5d19072ce5acf798553401b73760bb149a69eeb50ee562fdb3fe44eee54d85ac3fc1e90f7c7a2f028e53", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["d9ad96e8d42bfb5e16324da41d98c52e904bc6ec5dcc6f0c4b0c14bedcd6b01d10210267d4ae016ddb5244060cf6f66183e06da4d196baaa9892e0eb8c57249ffc", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c9810cb06137edb22aba29ce495e0f5e87073b06 b/txscript/data/taproot-ref/c9810cb06137edb22aba29ce495e0f5e87073b06 new file mode 100644 index 0000000000..1008cae481 --- /dev/null +++ b/txscript/data/taproot-ref/c9810cb06137edb22aba29ce495e0f5e87073b06 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf10010000001f3f7932dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3401000000f67932efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2102000000826b9d0304a1acf2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688accafa8b37", "prevouts": ["0a62760000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "ff685e0000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5", "64a1200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["ee", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f25297efdbed2aa8c1ec8b5437cb1f621645355ab4fec48723d1bef81dab8b605e01deb44bf60eeaa09a037ba0d53221083944f657819e2d2b55bb732cda3dfdd207214d6df2d18dfa237afd6016520e9e6ed6636ebebd182087bb183877c35439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d519b8dfaa69151d05ccddc10c8c1e468eb7b78f9ad17f99ee1b916fd61bdfbcfce40899fd8696dac9e3afc960f0a100b615a3c324ed3a125e98af98336f748ba56"]}}, diff --git a/txscript/data/taproot-ref/c9888f4ae613d1778de5399e9c17e6e517df9292 b/txscript/data/taproot-ref/c9888f4ae613d1778de5399e9c17e6e517df9292 new file mode 100644 index 0000000000..d977293252 --- /dev/null +++ b/txscript/data/taproot-ref/c9888f4ae613d1778de5399e9c17e6e517df9292 @@ -0,0 +1 @@ +{"tx": "5e99ba8803bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7500000000df8a91a8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3f000000005c7bc9e9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0d02000000a28c08c40314b9e600000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75c6ed459", "prevouts": ["48417900000000002258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "685e2300000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "f0a04c0000000000235c212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["faa0a1b1251aef70c3685bfc73637131763e34d62b9aa33bb5780f7131ce8dc197dca2c1059cdaa8026c06e2d3296033eeac23bd31f342ab2bf7999193848c96"]}}, diff --git a/txscript/data/taproot-ref/c9a84f25b1d55cfc33df56ee356e86772a479352 b/txscript/data/taproot-ref/c9a84f25b1d55cfc33df56ee356e86772a479352 new file mode 100644 index 0000000000..3fcc79a5a0 --- /dev/null +++ b/txscript/data/taproot-ref/c9a84f25b1d55cfc33df56ee356e86772a479352 @@ -0,0 +1 @@ +{"tx": "fca5d31203bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb801000000d35e6ddfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4001000000e5f842af8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49500000000cbb138bd029ea525010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7b6000000", "prevouts": ["208c780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "859d6f00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "eaec3f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ae", "final": true, "success": {"scriptSig": "", "witness": ["a84935e7de5977d16b5922aff52ce3e71b50501c577410d644e6087d6ba0dc6440e8db429a4385f68ed70759eb234a95178055731a782558080bc4e13bae0d6702", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["be9b2e228b31e15939d29f0660c5e14498216d715cc3bcb3da2a9b10722470e44ff011d9c32738f989d34537550b9538ef95c5a34cce30391e8f88144558e9cfae", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c9addf4f9fd1a956c97c9babd5981d0c8295e152 b/txscript/data/taproot-ref/c9addf4f9fd1a956c97c9babd5981d0c8295e152 new file mode 100644 index 0000000000..30d7540cc6 --- /dev/null +++ b/txscript/data/taproot-ref/c9addf4f9fd1a956c97c9babd5981d0c8295e152 @@ -0,0 +1 @@ +{"tx": "c4706a100260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f700000000efbe80c4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcf0100000062bb14f502b16d800000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898726000000", "prevouts": ["9d9a100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "012f720000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e3", "final": true, "success": {"scriptSig": "", "witness": ["6871b63fd3c0e28f430be859ee58e940374f716e5c39e47e258b850be84d504770a88c3645586e4264f47ebc91556974438aef78392f59b878936a7c1548789281"]}, "failure": {"scriptSig": "", "witness": ["82a00280c9418e2fbf7a49397d1d2354ce6561a74ad6b2d88cf9f3267847b0aeacb932ffc542fa7d3a02a7408cfcf2956cbff43dc1fb8e8e7cffed784cc3ec54e3"]}}, diff --git a/txscript/data/taproot-ref/c9b398e28803f0f2e675448f50d7f4d8c39e8991 b/txscript/data/taproot-ref/c9b398e28803f0f2e675448f50d7f4d8c39e8991 new file mode 100644 index 0000000000..9c26e323b0 --- /dev/null +++ b/txscript/data/taproot-ref/c9b398e28803f0f2e675448f50d7f4d8c39e8991 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbd000000008b1e38c6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6100000000422eee7f02753dcc00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac466b3933", "prevouts": ["6b948300000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "7a884a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype0_byte_scriptpath", "final": true, "success": {"scriptSig": "", "witness": ["0f3e7f21e5f22b16c508572df5b2369151fab5d20cffcf7e24c3d8901ba4d658336a51205bf64a016c1b5d3ab4f21f766e4b89c112ff0f9b1f68b59c9a7e0660", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0f3e7f21e5f22b16c508572df5b2369151fab5d20cffcf7e24c3d8901ba4d658336a51205bf64a016c1b5d3ab4f21f766e4b89c112ff0f9b1f68b59c9a7e066000", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c9d4c34b8cbf8c16d5b1e01af0f0541cdd36456b b/txscript/data/taproot-ref/c9d4c34b8cbf8c16d5b1e01af0f0541cdd36456b new file mode 100644 index 0000000000..d4621e4d6d --- /dev/null +++ b/txscript/data/taproot-ref/c9d4c34b8cbf8c16d5b1e01af0f0541cdd36456b @@ -0,0 +1 @@ +{"tx": "2cc2c040028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4180200000083645dc7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7f01000000daddb8d20432929f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac3c000000", "prevouts": ["cf0338000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7", "3c73690000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_8f", "final": true, "success": {"scriptSig": "", "witness": ["314ee8a5e310fe2648a3d28897a720c681976566449d206bc237738e4fac05f55184abe6dd34db74e1681612eae486e22bb537fe8d7a112c394f57a1b5a8927002", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["658e0008620631287884f7a93ced9692400c38bf3f4e4e8e8c32ee688304151989a1d4260b129f8807378d5cbb8510ca8c34df3bfb1a210b2ae6e13da73e5e9f8f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/c9dd51e291d1902fcc5389ef9f70290ea166e35b b/txscript/data/taproot-ref/c9dd51e291d1902fcc5389ef9f70290ea166e35b new file mode 100644 index 0000000000..12fd402262 --- /dev/null +++ b/txscript/data/taproot-ref/c9dd51e291d1902fcc5389ef9f70290ea166e35b @@ -0,0 +1 @@ +{"tx": "32272e2d02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc400000000cf2c1cae60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d101000000bff585a60172ae45000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69d78181e", "prevouts": ["f8e8500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ae000f0000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_6d", "final": true, "success": {"scriptSig": "", "witness": ["07681357fd8e216d8858882b0449b7b01e1738466bc35a2c6349fb9cdb477af43cbf3665d0844d7baaecf26dc4682470fc4dac4d130e58f1b7fcca649c4560f281"]}, "failure": {"scriptSig": "", "witness": ["dcc081a61a3db0025177c7bad923d394d8b73b872e306cef18ce6712a7cab76e513bf4d9ebc0c206fe47ced6b99881bfc61ccecc6c0d03c2f7cc5b3f73078e556d"]}}, diff --git a/txscript/data/taproot-ref/c9ed258ea27321037ce42d665a00191863c1ddce b/txscript/data/taproot-ref/c9ed258ea27321037ce42d665a00191863c1ddce new file mode 100644 index 0000000000..52823f6361 --- /dev/null +++ b/txscript/data/taproot-ref/c9ed258ea27321037ce42d665a00191863c1ddce @@ -0,0 +1 @@ +{"tx": "feb46ba5038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45901000000d71bd59f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4be010000004e14988560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a7010000008348decf04584a79000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987a5c20248", "prevouts": ["41353600000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac", "744c360000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "28650e00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a925fb010e9dac59891c803b6a81d462f65c56c77cfff52e46d3d042538a83699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb44c2f2200f850d6a1609ea6f282082fe51ae8a55145cebb4c521120909a7edcb74b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5116dab5147ee209d2bb54465ac69ced1cd5e726256fc4bc53cec72e983b39694d8586fdecbef25bbe615615e0698f2a9b21ec544d3ff645908914cd0f4da91c05854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}}, diff --git a/txscript/data/taproot-ref/c9f4f38c06357e5794c082ee3a691a02193ff1e2 b/txscript/data/taproot-ref/c9f4f38c06357e5794c082ee3a691a02193ff1e2 new file mode 100644 index 0000000000..a574ca6d08 --- /dev/null +++ b/txscript/data/taproot-ref/c9f4f38c06357e5794c082ee3a691a02193ff1e2 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3300000000fd918ce48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dc0100000057bd5083dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf300000000c9b3ff710361ce9d0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961aad1f34", "prevouts": ["7dc71f00000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "a33834000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "59974c00000000002353212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["cfa9527db8d94ecaaa4c5f84aa069855344a8e1139532addc267645c320553d1c5ad4a9b270df90a342dd9b911679319b2f4fb7001219e073c30ee0f733f6d1e", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/c9ff164d902f41698dc1714ef130057761a13f8c b/txscript/data/taproot-ref/c9ff164d902f41698dc1714ef130057761a13f8c new file mode 100644 index 0000000000..1e6b638032 --- /dev/null +++ b/txscript/data/taproot-ref/c9ff164d902f41698dc1714ef130057761a13f8c @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb6010000005bd07d78dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4800000000f3fbe79504c03f770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cf000000", "prevouts": ["6300560000000000225120df3728be21c89bb919091ec65a63fe2d83dc46feb767b141518f7734e1cf94cb", "b400240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_88", "final": true, "success": {"scriptSig": "", "witness": ["1e05e1776b78adaad2bd6afe32e838186227902346f39d0d1ec0dc731f955917061bee9697264a842c6a1c6017cab8e2a02eab8e7034229b91f90efe394cb7be01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ed5ae8658026fb9fbf8b98482691b24930e2da2f95446930aee2540f6fd9c21ce4d8af1099c773e60a9d955c063784f0a8ef1629439e32afca12fa7fbc8d94a488", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ca067c02b5a5e0209c277a0cea71db50a16d380f b/txscript/data/taproot-ref/ca067c02b5a5e0209c277a0cea71db50a16d380f new file mode 100644 index 0000000000..58fa21152e --- /dev/null +++ b/txscript/data/taproot-ref/ca067c02b5a5e0209c277a0cea71db50a16d380f @@ -0,0 +1 @@ +{"tx": "ae141b9f03dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bab000000003d92aca3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0d00000000851034978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c445010000004f05579f031209c70000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e741700146", "prevouts": ["27c222000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e", "30c5690000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "23df3c00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090243f58a90114b6aa402bb4f9b0bceb04a56c354faadcd2b5b9336e75fc30d5e9f9d13252f48d8e515aba940330f12781bf2dcb32238d271b2594c8d1a8582a180eb34ebb90b8f13751fcab19fed4d5c8f7a33fe6ce4b976293dfd876314d79c63c6224861310ae2c1db0266e829804965e1c2117a7c9864c8f15dc999f8ece559765b9c0542ada65cd9ab908d11f5fb47c1616e8cd7552b13623868362e9b7fa6a8cbab1e92dfd8c6612e99a33d5f2debefb52b4535b958b74e991a4cc5a43871723a8bda06d5779b1bc91616dd0a339a801014b31e55346967ce4c347922956948a52f91d8751d2e1d4f2326a1afc0b13f7dc183beb529ad11b555c762b1ec2f4a3043ca77cc66e720dad42a457675725090bf60b84442f6e2acce8199eca0f8c7d395f2ca783e8619a335cd535a2869ee8cefcd76697f623fba01a42545ba6f68d83c67ef1296bf9b083268d413c8ba9e1fd5ce2fdff10fc32334f7c0b85ec3b6480cdeb962e9cb3ebb46fbc6717f80e670851a28c3283cce7e102d0195f01affbb32227166559ab085101b7a9629172b4261a7cf328cfcdaf13cc92950ffc74333e0f7f8ce3d23fa106cda339f3075467fc09fa29f76b8f1c1f2b100c72804e5368ffb58f2624b51e91e2be1cee5a87ed643fd475b177c9937de61b73752398fa21ea98f7021e8381ef7e9b487a2cd64358ffd6658362e2c8eed02061ed97829a8c39fff34452e2275", "c57d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364fa4baf48be6a9a9bfef03be76e85cf973a3cb7e8c90715eed2621d73e79b1f04639ba4332756735e08e9dd0c9395e600a8a67669bda3acb22644b013566df8000378a892e4dc43a17c9ebd71803200f2f24c9a40c2827c304e59be9b4a7df0b"]}, "failure": {"scriptSig": "", "witness": ["4d0902e7ed58a5d1e45da459f2a8e0301ddde15594acc54ff095d5d2c1d0db00b18a64067c74aaebb832d05839becaed55329079673fafa9c00ba7aaf53db021eb459d86bcf78fc89fb0cdee21f431c48d294eabb6a2a8828c3722c8dfb9211be3f0d1084c88ad021beaafee806d632f162ffa9f21fb18ba7dbd1e763d3c7f3efd8e541d988e4c15369c8580b310433f994a584413b63d7114ca1c4bc5772878c53dafff0826ccfac1cc760968b205fb23f87113ab3cbd52b0fe41667fdae55ecd89eb73cb16b89167168e67737985be61d4d215c5ee924df6f031ad9b95064eb38af55e5858321f64709b1a5e8eb28ae7e1d642427b66fdd1db886f41fc4cec2d8accd9dc6ac75543574a8ac5791295bf33874275c24f34ae216fb5cbbc43bd155c7bc443c593117ee8b47ee46f048a5773951b17c6157f5105cae16d624f45f0ddc7a465d7cf5141a58fb568f26f087ef45238957e67f1a2511533e0bdfc76c5f69fa11aed2c3e70e1cfc199806a5c8b0218e9b8cca38ca39b92df174dce8fbcecd3a216bbf86291c9f658076b7e421f153e9f643e6109e739c64b5f6030f4c96025526103cfaca2d4b34f85384667c57cf4a948ecb5abeba9ab5c4337e14a154e21d19c1ca49e483c47031bc5399c36969d7c90f8b874dc0b1a580ca7e266bce0b78e694cdee14c4d2fb79cacecb5127798c5bcfd6e5868ba26939c019edfd24a87833f1d6503b2a8b30475", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bfaddd47df3117200f65a8f2511f385e6ac107d57fbe48a596b05dda60e029cf7b7f3ebdceab6737726d3802236d8368ee483fc4ea684d1523b8c26fc56452a37def1cc2232d9b1ca5244635fcf6779cb15e82fb856baa2ca11d8fd1da35295f"]}}, diff --git a/txscript/data/taproot-ref/ca0a2329b586ff39d07383acaecfac1982afe0df b/txscript/data/taproot-ref/ca0a2329b586ff39d07383acaecfac1982afe0df new file mode 100644 index 0000000000..081db8d898 --- /dev/null +++ b/txscript/data/taproot-ref/ca0a2329b586ff39d07383acaecfac1982afe0df @@ -0,0 +1 @@ +{"tx": "db04e35402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b79000000000f3aa8f7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6a0100000042e6cff403695068000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d4ac9f56", "prevouts": ["937e200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74a7490000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c189d3ccfc4948b891aeeaa0f3c252a2902566ef59534bff7a4e867353c33bc2b8fa02a75f2c14ed7d5d0c703f04231a07d54b48265128b0f19f2675cea0a3860ede327a4530e163a08fbb39bc817df8c091647ff10fb19edf5f4101cfd44f0728600564ddbacf5f3725d0c966242f43412b32595be2c9ca0d2c059543867768a8d33d1bf79d85f5789ed848b4533d26a370a1b4a52752612c3d95f6c9d7b97cc934929db8420892ff1120b3c8c411e7767f40152742529dbe086742fadccf432c5345103c8c13190cf3010d182fe02d8996277fcb1d8c0dd593ecb0c1647922a35fbb5d082a277e9fcb414aeff4ec604e33093271e410b73792c789bd98357022d689161dac98863f8867a2e8590ab7ab931d13115977bcd8874d51deedbb047e3fb805cf26aa098ea789f097a2c6d3e9e8b9b6d34b063a2bf52fe3898469afe255722307e5eebe754d452672d60e4dda8a30e597138ff88ac859d98c0c8b4b2c6a9fef104e1ad8d5a53e845c2808e6646c9baf7d5deaec69c7a555bdd130c6a535805a4949dce00f232022cae114cf670818daaf23edb3ef951e7a9bf38d0e9bc6a574dbb62cac0361814c354890e90104ad45b2caa0cb52ff7672428a54dcaa9bcba030922ef862f3ca177f3b9177e9cf150d0195a41ffd5d614cc6fa28d3c01b9be056c8b32d725c90c5678d3d31bd1b5b1280330478832e9f6174b96b8e5d739a142aa31a2d4575da", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361761f890f132d60292ea9451ab2a689005be47319d7fbcba26241d791200a2a1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5148d61d9b48b1fd3c9dcc7ce9fbab23c91d7bbaaf6610449bdfa8b9a4fdaeae22ee4d75780d36bffae9b56136e6d27c02b8d233efdc800bb260bfbba6a6f94b87"]}, "failure": {"scriptSig": "", "witness": ["4d09027227454db5a9dce2f62dff1570059e93008b6e8c35d4e3d4e482cad6511a693458fc0d59d509576c02daf8b311fdef129763c25d11584af2f46db53929e4ffe32210c73eb4c051c3e3404f9ad77d66a9633ed5eef418fec88818f57e4eb469f93e9f19b21031ed544cc3067e30c21f8564ce1b4b5cc2ba01de9179b8f19a218c7211994dced3705ddfeaafcb061f39868d712aef73133c13c21e740a748b2189fc29efaf763b43ddf1ed875432a692de5387774f9f2aa9348cef432a97685c4ca3bed90e36ddc75d70dd32df2fb7170dcd755463f2503cef896d2b34216b5d19bf3af32add48b32873e5238b30cf69dd5fd8731f02e5ac1acb1f23ebea7d820ee214e912136d79ef5b2e262a457efb4db3b60bf93ad1a947b0cc9160a1bdb0548d5b95c2b86a99874e929ffd538da8550de01886a5b35dd961126fd7c31a2389659b8f7e5553415bb37f2344ca22ced132c0cb2ea101cf91e9d76cd7da5f8af2b000abe5683868913b7e41060349c54313f2dc7bf3177e2a26c7c4640ae7f7f9314474a5febb01a7feba1ffd9b7d7421bd0dabf6acb5a33a806120cf600965e54cabe06fde2694de8229595b732d394b3717bde45fa91aba89be40099a61dbf25c26af762285c63373ffb9b087d0cab28d21ad6a60fbbbed9feb7e67b767b529b98023459c9717a4473beed5f3b3b272a238dc98c3e9e197cd1ceabb56f567d5c6e4541e8ff07170547561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d0c3719315ff0531af977ff551a321675e96f6255e2f5d4cea630188659c9757473df9812949ea11fa7cd8f7a31f5257bc4998fae53c5743d03c7cfeceae664b355d713f01682c54eefc137cacda341f8a928ca67657dd1895f9a847e54f584f6ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}}, diff --git a/txscript/data/taproot-ref/ca10907ed5b956b8d7c600609307e951fa48d8e6 b/txscript/data/taproot-ref/ca10907ed5b956b8d7c600609307e951fa48d8e6 new file mode 100644 index 0000000000..7c4c4e4254 --- /dev/null +++ b/txscript/data/taproot-ref/ca10907ed5b956b8d7c600609307e951fa48d8e6 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4460000000086c6650edceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc500000000f5bf2afe03cdd85f00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac3de12d2f", "prevouts": ["c9003a000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "c668270000000000165f142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826047efe14993a8a73b9baf7cd14f960037ac1d53bb1921fe06fa7eee8637040814a663af4c315d4c0e419951403071b67d2106b9ce8bb6d7e6c872100135a32b791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b9fcf0a7c92dd23244df9580e55d15e57255b9f51d71ced09e9b8172bc04386f6047efe14993a8a73b9baf7cd14f960037ac1d53bb1921fe06fa7eee8637040814a663af4c315d4c0e419951403071b67d2106b9ce8bb6d7e6c872100135a32b791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}}, diff --git a/txscript/data/taproot-ref/ca10ab334b15fc1a219962a002ba20266142420e b/txscript/data/taproot-ref/ca10ab334b15fc1a219962a002ba20266142420e new file mode 100644 index 0000000000..4b5de6cf52 --- /dev/null +++ b/txscript/data/taproot-ref/ca10ab334b15fc1a219962a002ba20266142420e @@ -0,0 +1 @@ +{"tx": "7712fd3c03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc600000000fa2131a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3a000000004f6247e1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff3010000003fb10ede01318d5900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac50880832", "prevouts": ["21d5720000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "a3c12000000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "1de070000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb468405cb22a39b2e10cd1afb6cf33a44daad2098e05cd2010bbeaa225bcf768d84cef708a58e9a16c040ddf6ca6eff300c7bff2a5c928617bb01c850b0a79e89f728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b9d6e3f5d9915a7f17d348d09ea3f9ebd96660129a97625007e31c70764ffd301ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900456a39aac74ee3f63949b9c215c515b0db1b113f4639b3fb19cd99ba22ff01310c728ffffb27e62918c729ff5ffa8fa6bd185df3cc350f3591557de0b18c4f64cb"]}}, diff --git a/txscript/data/taproot-ref/ca3a2137d38c1e9a98dd585fbb1e5e6483a855d0 b/txscript/data/taproot-ref/ca3a2137d38c1e9a98dd585fbb1e5e6483a855d0 new file mode 100644 index 0000000000..f84011a743 --- /dev/null +++ b/txscript/data/taproot-ref/ca3a2137d38c1e9a98dd585fbb1e5e6483a855d0 @@ -0,0 +1 @@ +{"tx": "49871be601dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb301000000721231a4010d471900000000001600149d38710eb90e420b159c7a9263994c88e6810bc780010000", "prevouts": ["b2472000000000002356212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["571c7b7dc40213dca493216192ace957d503428885c314dbde509aff240517098ac878b539c1e639d59320025659a8295a91ab756c9aa8af233f8ece7b4c2ca5"]}}, diff --git a/txscript/data/taproot-ref/ca4f72eced8e3ace4cb06faea7d35e7831c1e5ce b/txscript/data/taproot-ref/ca4f72eced8e3ace4cb06faea7d35e7831c1e5ce new file mode 100644 index 0000000000..5ae7d5903f --- /dev/null +++ b/txscript/data/taproot-ref/ca4f72eced8e3ace4cb06faea7d35e7831c1e5ce @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700801000000b8b76795dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5a00000000f6c7ab86017eae1700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac00030000", "prevouts": ["cb9b0e000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e", "91a75000000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "347d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366a824c5b532f5dda933d832154b0c83ad7fb2ac42414be4d26e31bf47f087a0bc5a4ec1ad3c05e8d6cb6e5418cc65ab3865118805b06cbf11da98fae87c97132e97124583e57aeab90707503ff0d8dae530166a9193c4517699e1743b45d7c12"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365b9f16c64cb33bf07d6b2062c92fadc965674f21ecb7c903fe1fc58ed8d39da03f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823ac03c85a7bde4aa83325c4e9fa3803d6178be55885bf5b72d341e036ded0599070c3fd2cc03cfe72ec91581f9e22200fa4c4f6deb8dafcd335310e90efb11e5"]}}, diff --git a/txscript/data/taproot-ref/ca4f932e8cc3a4b016fedf455e955c89cd7237bf b/txscript/data/taproot-ref/ca4f932e8cc3a4b016fedf455e955c89cd7237bf new file mode 100644 index 0000000000..413c2d3ae6 --- /dev/null +++ b/txscript/data/taproot-ref/ca4f932e8cc3a4b016fedf455e955c89cd7237bf @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703700000000456bf00a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e101000000c6f1b10a040edf4700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcba4b604d", "prevouts": ["e40e0f000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "5b843b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d", "final": true, "success": {"scriptSig": "", "witness": ["46c27b068d411d00453bb2f23978d33612f157158f2d1269abfb8ed2544d04a8adf80e60ff2220e9106ea2e3853e1adbf64af1c1067c6438ddeccd3c2dde41de81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["234ec4b6bc847f464e80243ad1eeda31abf28a2f9d86b856b88941d8c2489fc1632d85df12d4f5918f16580caa1ff63ce082abc86e52c9194d5413e3042c6a390d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ca67aeff72a1ca354129ea9f32b49e63219b5d98 b/txscript/data/taproot-ref/ca67aeff72a1ca354129ea9f32b49e63219b5d98 new file mode 100644 index 0000000000..1fc100664a --- /dev/null +++ b/txscript/data/taproot-ref/ca67aeff72a1ca354129ea9f32b49e63219b5d98 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4beb0100000031c4939d02d3aa1d000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48717010000", "prevouts": ["085a1f0000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063e168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cdf2b0c702c09265c526c69132e8e88ce07fc31df75ddaef1d0c3cd9ea36fb3bde4683e2f88a3942929fc88a4cafb8eec09785ff7c9f0b883255a650cf557ca66ee26669afb6dac63e75f53b4cae6cf36ae7535fe99100c6f349ffc46155d224f44ecb3bab6b962a7ffa14a2ce082ec551943f33ce508b63a8ee30ee5e49264"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4963aabf3cc95b3b3dcf7e67623762453db9f8eda97e088037773d00ff58aedf693e8696ee404d8be98a67cec2febef1e0f75b013501a27963a3fb4300a4da26e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}}, diff --git a/txscript/data/taproot-ref/ca8e90d773aaf3a6cc447fa963353434f82c0e50 b/txscript/data/taproot-ref/ca8e90d773aaf3a6cc447fa963353434f82c0e50 new file mode 100644 index 0000000000..45bf018727 --- /dev/null +++ b/txscript/data/taproot-ref/ca8e90d773aaf3a6cc447fa963353434f82c0e50 @@ -0,0 +1 @@ +{"tx": "d76dec3801bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb00000000010ed51ba02f2876300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7c1000000", "prevouts": ["b8e6650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_20", "final": true, "success": {"scriptSig": "", "witness": ["9852b68a87443e7d0f8c72a0aefda4c1820b67a688b4e96fa603e9153677a222af819f875ec547bd48f98ba87cbade90524887f4e8a7b00b097b384f42e12f05"]}, "failure": {"scriptSig": "", "witness": ["b7dcb5993b6b8ccfdb8ed4e5418b19ba6f0d9016bd32bfecf1b180ead15b77de8c555aae32af79c63e23a0a41f3bdbaa51026ce9476a5c4f4a296260a2e6d58f20"]}}, diff --git a/txscript/data/taproot-ref/ca8ead844b2d1ee6d2526ed1a548996bc943ea68 b/txscript/data/taproot-ref/ca8ead844b2d1ee6d2526ed1a548996bc943ea68 new file mode 100644 index 0000000000..99e743f215 --- /dev/null +++ b/txscript/data/taproot-ref/ca8ead844b2d1ee6d2526ed1a548996bc943ea68 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa90100000010059b838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4580000000033dc898602dc7baa000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac08020000", "prevouts": ["31d1760000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "c135360000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "487d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082edf94ae33f5606292dd7c11b30be28c4e66005bd3313ca427ad5ed734d53452840210bd7db211b82a407c19f9567cde5a01f8f2a3c3dc032c7ac21169de78447"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8d88ca5d2ed422cbef7221efcadc1e9b79f7a9a7e5e37a381143666b41a8ce50be5e2af3a3c1a6754948d639a5542927d59c509fd5287d02d091c2a39a812b527da89940c9c2be3d3cb1ea9fc374137a74dc3bafe909c68993f298761996d666"]}}, diff --git a/txscript/data/taproot-ref/ca9fc42da81222da6dec277f6346109bf564fefb b/txscript/data/taproot-ref/ca9fc42da81222da6dec277f6346109bf564fefb new file mode 100644 index 0000000000..416ceae361 --- /dev/null +++ b/txscript/data/taproot-ref/ca9fc42da81222da6dec277f6346109bf564fefb @@ -0,0 +1 @@ +{"tx": "b7fcc267028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40301000000e44fc5b9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbc00000000dc4397dc0231b2b6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388accd833d55", "prevouts": ["960e360000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "1224830000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c6", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366adb67c50db990d0ffc018ab512ddf792ce3fc48b23d63faf640ed9594ca022e3720a820d9abe67125ff39f44ffa31194d8e2e56ac0de67f7992994257d70be631e5a3cd6e337eb252bd8d7a8d95e14a531fbfbee4d245debca50b247e512ad1"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93643147b93bbd48179e21d8eb390a9e202d46507542ccdb812323f4df5ed47756d052557e81dd342a2b41230b0afaea8d13945f509c20a84912c3e9d5b86183ac33720a820d9abe67125ff39f44ffa31194d8e2e56ac0de67f7992994257d70be631e5a3cd6e337eb252bd8d7a8d95e14a531fbfbee4d245debca50b247e512ad1"]}}, diff --git a/txscript/data/taproot-ref/cab98434bc48379e0a365fff01d6b79bf577457a b/txscript/data/taproot-ref/cab98434bc48379e0a365fff01d6b79bf577457a new file mode 100644 index 0000000000..e09ea1c335 --- /dev/null +++ b/txscript/data/taproot-ref/cab98434bc48379e0a365fff01d6b79bf577457a @@ -0,0 +1 @@ +{"tx": "ac8ef70c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f500000000cd6aca99bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1002000000166066d902baef900000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf8000000", "prevouts": ["a32e1200000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "c53281000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6aeb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365ecdf9d6b38b43c17196dc2a7eea65eed5a0468b71e2bc36574efa54ca32faa03f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821e09e6d24dde1e7a9afb38743b4c2dd55dbb58a3a1803a82bc7b3a42584fec8fa9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4434501c222c2b9303845523b2a5615208b9d5e9b8dddf3d495d8511b54149dc414f0d108097d00934ef2973385fcf188ce2945eb833bd9e90fcb9cf025505833cf9ce2244c675144b577c27c052f9ebd481172245e28e9502c6c6e8f12c64fa6"]}}, diff --git a/txscript/data/taproot-ref/cab9a4b9aa0799313bf8c71e90011d910fd2eca4 b/txscript/data/taproot-ref/cab9a4b9aa0799313bf8c71e90011d910fd2eca4 new file mode 100644 index 0000000000..96db64245d --- /dev/null +++ b/txscript/data/taproot-ref/cab9a4b9aa0799313bf8c71e90011d910fd2eca4 @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff801000000b0c13d8502d4c3730000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a66c020000", "prevouts": ["f03676000000000017a9140917710a6236c7a08b54f54b004ee705f2913e3087"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "235f212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["37d5a197074413e5cfff18078c7c380d852f8aa839695132f190dfc1e266dcb4022523404abfb40d63a3c077cca5e8f4717bc99d7098e6032665c433962bd459"]}}, diff --git a/txscript/data/taproot-ref/cabd7d24e6498c820ccd2a79a03cc481607909e5 b/txscript/data/taproot-ref/cabd7d24e6498c820ccd2a79a03cc481607909e5 new file mode 100644 index 0000000000..f11edc25e6 --- /dev/null +++ b/txscript/data/taproot-ref/cabd7d24e6498c820ccd2a79a03cc481607909e5 @@ -0,0 +1 @@ +{"tx": "c07ee00c0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270200200000062d802d1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cef00000000fd6645bddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3b01000000fb6fb2d2013a6d4300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac24ec9a3a", "prevouts": ["db2511000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "86f3560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "946057000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_64", "final": true, "success": {"scriptSig": "", "witness": ["6a9ce750dc4495b912f5de2c7936b6dc9fbe0af39f57de380f5cad36d870dc90ba56720d46ccb0f7aad7441e5d16f5a21b5fb94e64ab8da12271bf0566043c8b81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["07907fa33089d2ceb658e9e552e4d1055527a7801ad0e2a249b547b24574fcbed9145c3c2b436e8622b22f05a6b1ec42219ad1dcc5d752d71ecd51b3885572a964", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cafd0a9a6dab6200dcb88ecbf7e265de1ad5d317 b/txscript/data/taproot-ref/cafd0a9a6dab6200dcb88ecbf7e265de1ad5d317 new file mode 100644 index 0000000000..11037f9343 --- /dev/null +++ b/txscript/data/taproot-ref/cafd0a9a6dab6200dcb88ecbf7e265de1ad5d317 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c491000000007392a7f260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707500000000579abf8d03798c4b000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876b000000", "prevouts": ["f7dc3e000000000021581f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "ee930f000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["222c69bbe3f4f1673e8cf45df278568891b3a7d6fcffd5abc410b2b797aa1927f2d6ff83effa9adf6d3ef712d53a5534bb3fd91915849ae9fb719034ebf80b1d", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/cb181959ea829e3c8e81c95a1bbce81b35f8d2fd b/txscript/data/taproot-ref/cb181959ea829e3c8e81c95a1bbce81b35f8d2fd new file mode 100644 index 0000000000..5138e934ea --- /dev/null +++ b/txscript/data/taproot-ref/cb181959ea829e3c8e81c95a1bbce81b35f8d2fd @@ -0,0 +1 @@ +{"tx": "aacaa01b02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1d02000000f3d0e9f9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c44000000008657808f03639ccc000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487941a2455", "prevouts": ["d91d7900000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d", "197d560000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063fe68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cebf3516b3dc8f192542925d4b3d82199c3e0c8e4a17ec07f1fddd55aaac307b917e8250b412828d56f092e1d9ceabdbedccb5671620a7e05a1f5a122fcf72f11e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d515ba7b576a8dda08f1b482f8c289e95e9d52783e5c439690d7dbc8078ddf6e59ab44d8b0f62b2d27de7be259100200d6da1e5303b29f3eaa1b6a4eeb0c96a42f364ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}}, diff --git a/txscript/data/taproot-ref/cb1b57e08db865390f1b4cf22118530463b721aa b/txscript/data/taproot-ref/cb1b57e08db865390f1b4cf22118530463b721aa new file mode 100644 index 0000000000..1ea1e384eb --- /dev/null +++ b/txscript/data/taproot-ref/cb1b57e08db865390f1b4cf22118530463b721aa @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1b0100000056ef84c6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1500000000048e2596dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e000000009ecaa1df0136422d000000000017a914719f78084af863e000acd618ba76df9797223689875e000000", "prevouts": ["f4dc280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee4f4f0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "53ad4d000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "6c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0825b22591e944b414d99fe534a482351afe29b8e90b07993fb7f3f85b72380ca5294fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e872a8a6de95a80dc4a6e95ba0e12854eab511c8acfff04c6cfab0ff55ad6b178"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8537e729fcf8585ba70be9503b33ad258cc8c70f658d9ebd11d7348a395e977e6872a8a6de95a80dc4a6e95ba0e12854eab511c8acfff04c6cfab0ff55ad6b178"]}}, diff --git a/txscript/data/taproot-ref/cb5cd2d881a8e8202863c29e2d692b6245167dd1 b/txscript/data/taproot-ref/cb5cd2d881a8e8202863c29e2d692b6245167dd1 new file mode 100644 index 0000000000..b6b8f03202 --- /dev/null +++ b/txscript/data/taproot-ref/cb5cd2d881a8e8202863c29e2d692b6245167dd1 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a801000000aa951bf3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bac010000001c53bd7ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe9010000001c47564f026e879f0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca040a226", "prevouts": ["0c261000000000002258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "8c5a260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7f456b00000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["aa7f169ca09b5112de5218fd2061e9503480eb8c97f5a6094e304468cd47b3358daf879617418a2d2041960835dffa29e30966714b97b3855702656bcbc75a5c"]}}, diff --git a/txscript/data/taproot-ref/cb7c58b77b079764dd1fdd95626fced2ad539c7c b/txscript/data/taproot-ref/cb7c58b77b079764dd1fdd95626fced2ad539c7c new file mode 100644 index 0000000000..dbc7bf79aa --- /dev/null +++ b/txscript/data/taproot-ref/cb7c58b77b079764dd1fdd95626fced2ad539c7c @@ -0,0 +1 @@ +{"tx": "3b690b7c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd20100000061e238addceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1f020000001b923abc018b9d0600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac8a000000", "prevouts": ["180323000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "ffde2200000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "0f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa6f8d113c18817a044fae8525416b35b4656d6d7185568187de608cafb5211e2f68491001e36edf91058819766439c3f31bd198abbe3d2204f458ac7743e1d61ccf16a5e3db9e2b81c974405e52c4661efcc91a529144e47e78be5814d4a09901"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c7116f5c3e80617093632a2db9fc234f36b396a24b73f6adf68743edb71604c5d8798a2c57206b85b6eca830bd166e5350a1cd63f89078c321fceabfae97dd5c29bd03bbcbebf503f24139d653052e63a9a9f3faf73bed4a74eee576514948d11491142a38ebb10a24e36aadbe0cf227dedfd0966bcf56b2aea8b33dc3fd67f"]}}, diff --git a/txscript/data/taproot-ref/cbdd9f9ee3d06ce2cdfe2000194d0fa14bb03cb0 b/txscript/data/taproot-ref/cbdd9f9ee3d06ce2cdfe2000194d0fa14bb03cb0 new file mode 100644 index 0000000000..388a03f9a8 --- /dev/null +++ b/txscript/data/taproot-ref/cbdd9f9ee3d06ce2cdfe2000194d0fa14bb03cb0 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c453000000000462a8e904bfaa3200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75b000000", "prevouts": ["d43b350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_97", "final": true, "success": {"scriptSig": "", "witness": ["23baa00c82b9cc499dbdc6037c9ab83f4323f73ae95a0de7d0271fe4f3d2660a3aaaa2f16890c7a07940d2ba9498b73c241be285333e1c3ea78a6b57700cf51d82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["1337dd860788e13931302a7e317e5705364f2bb589159cd4363ec42493f2aca5247ea30fb521c5268763bdace0fd6176964bac82528e902a1ab83d25b0802a6b97", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cbe16c2c588c6bc7000fbb04188632167236d008 b/txscript/data/taproot-ref/cbe16c2c588c6bc7000fbb04188632167236d008 new file mode 100644 index 0000000000..84afb210be --- /dev/null +++ b/txscript/data/taproot-ref/cbe16c2c588c6bc7000fbb04188632167236d008 @@ -0,0 +1 @@ +{"tx": "b4abf2a802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4baf00000000b44aa8a6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7a00000000201254d604ccd0a80000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a64c020000", "prevouts": ["87bb2600000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "998a840000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936269ff6546b497129ba1fe09f7f94be9a0d73dd3621c79696a97c5ae123801203edc23a266999aa1773fe99be867e95cb2abe2d57657b7a4dc20a388644aabac6d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004539f0e83d2be49ca995d97c64064bae5b8c7dff64f3bec17af779836b699250933d2e072fd8e8376d3a54b2bea1bfbfff1298aece70c0bc2934c8eaacc3044fe58f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}}, diff --git a/txscript/data/taproot-ref/cbfe3b47d8728af1b60451af99e980f90dc89668 b/txscript/data/taproot-ref/cbfe3b47d8728af1b60451af99e980f90dc89668 new file mode 100644 index 0000000000..0fdc32b0cf --- /dev/null +++ b/txscript/data/taproot-ref/cbfe3b47d8728af1b60451af99e980f90dc89668 @@ -0,0 +1 @@ +{"tx": "6ebe113f03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c480000000082f72a8cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba501000000f5b89fa8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcd00000000c556cf97037ed2db0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acbb000000", "prevouts": ["98a94b0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "d2402700000000002251208f7166d23fc1e45fbcf26b51bd386ab915626b0708475a8743064036728c78ed", "8f956b0000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93626dd86fe63929c58a9e26dc691794fb2cff71343e8c54d7eaccca19ca634607d"]}, "failure": {"scriptSig": "", "witness": ["6a4e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/cc06cd6c0a43860436758eaf21a715c3ecebb6f4 b/txscript/data/taproot-ref/cc06cd6c0a43860436758eaf21a715c3ecebb6f4 new file mode 100644 index 0000000000..618d448b53 --- /dev/null +++ b/txscript/data/taproot-ref/cc06cd6c0a43860436758eaf21a715c3ecebb6f4 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5e00000000bb4e8ee2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8501000000acba6b03047a1da200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac91030000", "prevouts": ["a3a5820000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "952e220000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "b87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faff5a0b04042772840f11ed5a15b1f6f5628d6ed53a9b814a67fccb7bf41c87856960f5e71abb11fb1594f725adbdd26a9f61c928558a58ca58d11d05eb565d16"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93695dc9c98a36c2184a4aed19b2e2b490335edbf9105ab62ca8297ce8361fd2945d64c15a931058236adef8a4965d2af6c40e751c52c93bf72b53dfa72cc6c024bd12296fcc73680f3617d8f33f0de746e19dcfecb08411ea531ade48d4ab609a0"]}}, diff --git a/txscript/data/taproot-ref/cc13210738ed00cc6f24c6bdcc72bc63f13783e2 b/txscript/data/taproot-ref/cc13210738ed00cc6f24c6bdcc72bc63f13783e2 new file mode 100644 index 0000000000..0b796a6c95 --- /dev/null +++ b/txscript/data/taproot-ref/cc13210738ed00cc6f24c6bdcc72bc63f13783e2 @@ -0,0 +1 @@ +{"tx": "d1497db003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5a010000000ac409eddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1802000000b7a057afbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff7000000007c740f92045d5fac0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce5030000", "prevouts": ["d1a0230000000000225120595c2c45ec3b255cb7947059399917a9363337ebaf1f68587c1f93f355b1a53e", "d84b2000000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1", "d77c6b0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "7b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936338668e4e5aab28bcde1228c1172683f4e862ace4afbb2c726076e6970101528d15ee116aef2a5177f7228fbf74f7a33b70e884325424982f9125cdefb107591d34322f35809060e9857f404c38bdcaf402c3d07c78e42a3b4d1eaa304dca88a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688ea954498e4daa92a6ad47f2895ae184189a1c00dbf2f0b5426ffb4ba470bbc3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082565447efa486312fa493bc3efa8d0ca00e2c766484411258b08f0fec6b85156cd34322f35809060e9857f404c38bdcaf402c3d07c78e42a3b4d1eaa304dca88a"]}}, diff --git a/txscript/data/taproot-ref/cc3fcfad22ff1374fc57610045f054311fc92f6d b/txscript/data/taproot-ref/cc3fcfad22ff1374fc57610045f054311fc92f6d new file mode 100644 index 0000000000..8191f95605 --- /dev/null +++ b/txscript/data/taproot-ref/cc3fcfad22ff1374fc57610045f054311fc92f6d @@ -0,0 +1 @@ +{"tx": "613ba07402bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2b000000006ac1a3f4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9601000000db51c5bc04110dc900000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787e2e1e433", "prevouts": ["42e6670000000000225120531ded2803baf703e9b8f23e3d6d5459ce6d94a03d15c5d2addf83c32bf56dd4", "0c7163000000000017a91480e36171416c0f598c1c20ba17ab3a3cf10a438e87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "success": {"scriptSig": "", "witness": ["935646b576b0b11572ecb7d763b3752d1b3e3071d68da7989bc27b0a11e41c2484ea9660583a3ab9eb0f36df160c9695f81df5ac47b4a66b087ead00f53a488b", "82a33283e5d5c118bc3d691b8db05e02da66167cc666945c453ffb4a09ea4a4472f9364d2e6916bb47f5525f79ee246301e8f3b5402002ee1596b70345de3028792e3e7493ada914165f2cc1af7df32cd3bdd523ed818868225a87bd58614d6621d163c6c60a90c06a34f4005fc5a17cbf96fde743024c1621781857a3541283727569c1749751335dea0142545e2b3a41a6db82280f82c229f7552c6b87", "7529dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32505163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936209fcbf868c6a92e3c0922601247e008b3969bf10bdcd8ca5fa998dc09f06a802f0687d3d34dc8b489cf59c8c228dbf015289fca3e4efd1722cfb109cc2081b7ca6089e21816ee6fd9a868544bf105dae013cb095fc7c6576ac374e7e8f3f8a7602d400119a30f02884c803070bed436c54f0c764acba1003e7b049809258f4f014d23742a8b0635629b71bdc4b60db6613049ead7caa2d9b094988249ecdbb9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1943d105a940d03e9376e8b3e63e48c7f2ff317953610e0508c36b01b926f3cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe393e179a7c211225fedfe245fd3ff3e5b3b1c166e4ec0cb700ba82adf7aeaf5ad30f1d4b86ba70fd5952ff2c48b877f705fa7be27f33e4586133d7e5e03ab43e1599d86a25d8f86a682e21d7f29ade2766977671fd4b7506d0d0b5207b0389f00000000000000000000000000000000000000000000000000000000000000007306296b50d506f086f706301f20f725476797ace7d41d8e468e65190ed21eaa414484a1e0e20d9687323f6fce972a7a1fd6e153a4ef49341e3410a13e0063c2a182bfd0ee25f13c6ae38b4288d9a81f069ad6c09f922b6ddbfe4a3348425f453eb697bc1fdc52047a055b28f979b09368d0da8f46da673012037611c64f24321754d5499f8d4371da62fc4af30a52025d38436a936952f1b22a2f152627c609d22eb9d1dc260d11d3d0ab60b5b2aa1111fe23dcaa8498d486e83fabbf555ffaae55a871098d440d13c08dc61184cecc9fca543fd2d38fbc3f0a8209d0e327ad3e1ea5d1d342e58f9725d4f24f287d7f695e6f7367c0b147c406839b6f030da936a9d2298abcbefa3909a813ea3e209227741a2f982d73f026fa7995b10b7941ca1c65131d3215c8773fd39e328aa908c34c88767ae8beb7c98bca985e9e69025922cafb18a8e3286b8333f1c32af113971af648debda5f7a678f807a69a704ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5066f4b09a82745bdbff3fa2cfb73c1e652e1607b0bff475648df74fd8cf08f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013af8904e1b79af564ab7f5afff68a2e3a7266ad5fa82631bbd9a95c5349fe52241c28ae717ce886306e999440b0dbce9372afc7b8cd81e3950bceef0e6d5145923205cc3475b468205b508844fff1cba286c6c4e2ff27b038252313498562a8f0ea45e8cb1d1c5851995e10985ecb619a06de0a240887d1a160813387d846a42410ae81325b565e9589b6e31631d911ab8678fa2f130377d850da29e6f934bea5d5329fe1c33baa779c27ad78bd9f979007888b131969ce0d52d9a0c1635b4dfdb12f2b62cf7736cf70ffff63226c8e300d163a02cf44f3fb6c8d7a9b87fdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00942d3f1f97d12ca642e60b32e55257b9f2ca905b11dd8880e159a34972f1f0000000000000000000000000000000000000000000000000000000000000000cae63e109f271654eb81bceae7b9c8b2d63ed3f7609cdfde56e8e3017b189bc9da4f7821cd5488e443f829e75a5cfd10ece6c0ce2e09c00b52f986184d74f654cd71816d36dd62349d50f8907985256f4897ada0dddf3bdee11f3eec82f046c407dc150fb3957dd1110f98674d4628e447aa99ad7d4ce5b77b9b61673db283890000000000000000000000000000000000000000000000000000000000000000843217d87b626094c87746ae63facc04ba6cfb18df41de050cf290ba923cdec30000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa785034f31ca41d97e22d96c048424c6c5f47e4e02f5d319c1ad79a8af057c7be9b2fd26b09f5289641de9fabec1b4afce90be6c87ec4dc958481741d42bf3e03b70fbe2ba7043aa8a3d576a354996ee39e30f7a6e45c8de59569288659f0ccfb6af35be1196b8a78de45053eaf8ad9e4cefa14533a0d55d44ed7a16c49f566ef8e2c17cbaf3cba96e205eb120df0ee008d601f642b32ca775c1dd1034841c28d30bd54dfc020d0973914dd4fc03525aa38a12a2d2478b1b3983187c8220bf00ddacf0537de087eeb84179c2b7b129ce1a17257549013160dbe484c9ec243157dfb321c8e5f99aff6743898e964b6e962fbf472b1fc11465e82ba58922e00a9baecda451bd0bda31d6b56f8fb35e04c5efce2e164e269979fd5f8a3ad19422c2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3e8271eedb99588d76c587d61cbc001753212af09a33c76077832afb7ec7bb7800000000000000000000000000000000000000000000000000000000000000001965ca26b454da66c7e1feafa45468a24da27a44b4ae760f1487992bb3d3cd644a2fd07ca94ab1b3a5a610f04909fb93b5e4668f5de49294c8adddf0cbd18190000000000000000000000000000000000000000000000000000000000000000049ad7827f314ff46d53b82cc7b55d79a144869b9f71ac2e54d0ecaeceaa07d534b179a52a405bd5263a6c4989b3eac46a4221618c2a8afac08bdcb125670726f85c03d117a587ce130803bd78a9f636fdb5f10257619ed4e1ba7e11f2770a5744c543e977a48984739ac6e93a3a77a563d0632e65c7fd46e476b1ca70c3455a1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff493c612fe574bbd2488fd60abd7173e07a3b5207bdc9a3c7b940f48fd042861804f9e00d834e8b81fd807b280556335504af2c326a6c0e740d4bc81d2173666b93e432f92290af3de5dd855f57f66bb08ade71ec6097f204b9c28939e778521fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090d2ab16acc7b36ee013fc3d24b20bacd45bc1a519175f55d9cd2041873dfb9436b83cf76a5cc3721fc6c2d562e03cd5c0e89e2f006e7cade685aea921af0acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f80f82119a89b03095a1361de8e05dba6c36b4feeef2920b2576bb7d91e412a3ece1b56c2492e002fbed1b98bd3f808f43332a4ac6a99701b26d87c5be54b5e69f13c97c97062f0dea2872e87b2e6a72577166c4791392b24a7b80bf93af85bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff71a3e93deef542a49e152b87d81a3ac84a3285e7f3cef7cf8f0fa806dfc906d27c7e8b4fbc67c25a2aac37ad899bb8bc865118d3df8e99a5c4276ca115d9675eff73e6d0f505395120fd02a6c0c6f272d1520d6d6e450a0a7f318343b310169effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff21cc4ae43b31ce85b6f99113615b55ee5087c7922dbdfd82aa065b9253626f004ecedefdd1d3aeaead8dd5c8e44ac769bfc0b626b2525630621cf72375c5352de4a30c7888dd8802e0e2b34d96ecc3d606aa2d93f371bdd05a3fd13f4a5261fbd831a23f77facf5f60aa07ef7caf3f0c954193a726de6e70e2b7052f5517e"]}, "failure": {"scriptSig": "", "witness": ["935646b576b0b11572ecb7d763b3752d1b3e3071d68da7989bc27b0a11e41c2484ea9660583a3ab9eb0f36df160c9695f81df5ac47b4a66b087ead00f53a488b", "8d67dfcb201b43654275cabd911f2be40f34ace56402838c7eddaa8d720270aef7dfa4e61d708504558d34ee23a6c7d645ea7dcad3763f6fc7c5043b367c652f6073ac302b950dbcae919a77e65d6fb4669b3dc231380ea84487f0a74d2cfb0677ba1f143c6aff0447c042a4207865d89129f64fa254f2c1debdfcb5919841bcdd159822f28f6163203105049211c22a2ac5997e3619aa79be3b8ddd24", "7529dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32505163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936209fcbf868c6a92e3c0922601247e008b3969bf10bdcd8ca5fa998dc09f06a802f0687d3d34dc8b489cf59c8c228dbf015289fca3e4efd1722cfb109cc2081b7ca6089e21816ee6fd9a868544bf105dae013cb095fc7c6576ac374e7e8f3f8a7602d400119a30f02884c803070bed436c54f0c764acba1003e7b049809258f4f014d23742a8b0635629b71bdc4b60db6613049ead7caa2d9b094988249ecdbb9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1943d105a940d03e9376e8b3e63e48c7f2ff317953610e0508c36b01b926f3cbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe393e179a7c211225fedfe245fd3ff3e5b3b1c166e4ec0cb700ba82adf7aeaf5ad30f1d4b86ba70fd5952ff2c48b877f705fa7be27f33e4586133d7e5e03ab43e1599d86a25d8f86a682e21d7f29ade2766977671fd4b7506d0d0b5207b0389f00000000000000000000000000000000000000000000000000000000000000007306296b50d506f086f706301f20f725476797ace7d41d8e468e65190ed21eaa414484a1e0e20d9687323f6fce972a7a1fd6e153a4ef49341e3410a13e0063c2a182bfd0ee25f13c6ae38b4288d9a81f069ad6c09f922b6ddbfe4a3348425f453eb697bc1fdc52047a055b28f979b09368d0da8f46da673012037611c64f24321754d5499f8d4371da62fc4af30a52025d38436a936952f1b22a2f152627c609d22eb9d1dc260d11d3d0ab60b5b2aa1111fe23dcaa8498d486e83fabbf555ffaae55a871098d440d13c08dc61184cecc9fca543fd2d38fbc3f0a8209d0e327ad3e1ea5d1d342e58f9725d4f24f287d7f695e6f7367c0b147c406839b6f030da936a9d2298abcbefa3909a813ea3e209227741a2f982d73f026fa7995b10b7941ca1c65131d3215c8773fd39e328aa908c34c88767ae8beb7c98bca985e9e69025922cafb18a8e3286b8333f1c32af113971af648debda5f7a678f807a69a704ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5066f4b09a82745bdbff3fa2cfb73c1e652e1607b0bff475648df74fd8cf08f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000013af8904e1b79af564ab7f5afff68a2e3a7266ad5fa82631bbd9a95c5349fe52241c28ae717ce886306e999440b0dbce9372afc7b8cd81e3950bceef0e6d5145923205cc3475b468205b508844fff1cba286c6c4e2ff27b038252313498562a8f0ea45e8cb1d1c5851995e10985ecb619a06de0a240887d1a160813387d846a42410ae81325b565e9589b6e31631d911ab8678fa2f130377d850da29e6f934bea5d5329fe1c33baa779c27ad78bd9f979007888b131969ce0d52d9a0c1635b4dfdb12f2b62cf7736cf70ffff63226c8e300d163a02cf44f3fb6c8d7a9b87fdbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00942d3f1f97d12ca642e60b32e55257b9f2ca905b11dd8880e159a34972f1f0000000000000000000000000000000000000000000000000000000000000000cae63e109f271654eb81bceae7b9c8b2d63ed3f7609cdfde56e8e3017b189bc9da4f7821cd5488e443f829e75a5cfd10ece6c0ce2e09c00b52f986184d74f654cd71816d36dd62349d50f8907985256f4897ada0dddf3bdee11f3eec82f046c407dc150fb3957dd1110f98674d4628e447aa99ad7d4ce5b77b9b61673db283890000000000000000000000000000000000000000000000000000000000000000843217d87b626094c87746ae63facc04ba6cfb18df41de050cf290ba923cdec30000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa785034f31ca41d97e22d96c048424c6c5f47e4e02f5d319c1ad79a8af057c7be9b2fd26b09f5289641de9fabec1b4afce90be6c87ec4dc958481741d42bf3e03b70fbe2ba7043aa8a3d576a354996ee39e30f7a6e45c8de59569288659f0ccfb6af35be1196b8a78de45053eaf8ad9e4cefa14533a0d55d44ed7a16c49f566ef8e2c17cbaf3cba96e205eb120df0ee008d601f642b32ca775c1dd1034841c28d30bd54dfc020d0973914dd4fc03525aa38a12a2d2478b1b3983187c8220bf00ddacf0537de087eeb84179c2b7b129ce1a17257549013160dbe484c9ec243157dfb321c8e5f99aff6743898e964b6e962fbf472b1fc11465e82ba58922e00a9baecda451bd0bda31d6b56f8fb35e04c5efce2e164e269979fd5f8a3ad19422c2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3e8271eedb99588d76c587d61cbc001753212af09a33c76077832afb7ec7bb7800000000000000000000000000000000000000000000000000000000000000001965ca26b454da66c7e1feafa45468a24da27a44b4ae760f1487992bb3d3cd644a2fd07ca94ab1b3a5a610f04909fb93b5e4668f5de49294c8adddf0cbd18190000000000000000000000000000000000000000000000000000000000000000049ad7827f314ff46d53b82cc7b55d79a144869b9f71ac2e54d0ecaeceaa07d534b179a52a405bd5263a6c4989b3eac46a4221618c2a8afac08bdcb125670726f85c03d117a587ce130803bd78a9f636fdb5f10257619ed4e1ba7e11f2770a5744c543e977a48984739ac6e93a3a77a563d0632e65c7fd46e476b1ca70c3455a1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff493c612fe574bbd2488fd60abd7173e07a3b5207bdc9a3c7b940f48fd042861804f9e00d834e8b81fd807b280556335504af2c326a6c0e740d4bc81d2173666b93e432f92290af3de5dd855f57f66bb08ade71ec6097f204b9c28939e778521fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff090d2ab16acc7b36ee013fc3d24b20bacd45bc1a519175f55d9cd2041873dfb9436b83cf76a5cc3721fc6c2d562e03cd5c0e89e2f006e7cade685aea921af0acffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9f80f82119a89b03095a1361de8e05dba6c36b4feeef2920b2576bb7d91e412a3ece1b56c2492e002fbed1b98bd3f808f43332a4ac6a99701b26d87c5be54b5e69f13c97c97062f0dea2872e87b2e6a72577166c4791392b24a7b80bf93af85bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff71a3e93deef542a49e152b87d81a3ac84a3285e7f3cef7cf8f0fa806dfc906d27c7e8b4fbc67c25a2aac37ad899bb8bc865118d3df8e99a5c4276ca115d9675eff73e6d0f505395120fd02a6c0c6f272d1520d6d6e450a0a7f318343b310169effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcff21cc4ae43b31ce85b6f99113615b55ee5087c7922dbdfd82aa065b9253626f004ecedefdd1d3aeaead8dd5c8e44ac769bfc0b626b2525630621cf72375c5352de4a30c7888dd8802e0e2b34d96ecc3d606aa2d93f371bdd05a3fd13f4a5261fbd831a23f77facf5f60aa07ef7caf3f0c954193a726de6e70e2b7052f5517e"]}}, diff --git a/txscript/data/taproot-ref/ccb6fc2bd7df140d0acaa9fa4f6c64be65339a60 b/txscript/data/taproot-ref/ccb6fc2bd7df140d0acaa9fa4f6c64be65339a60 new file mode 100644 index 0000000000..c51cccf1e9 --- /dev/null +++ b/txscript/data/taproot-ref/ccb6fc2bd7df140d0acaa9fa4f6c64be65339a60 @@ -0,0 +1 @@ +{"tx": "f33c648a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1801000000efe045ba8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a4000000002db817c60273f54f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aca3000000", "prevouts": ["3d7d1e000000000021511f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "c54b3300000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["d274921aecbeb3031c4325f0ef8a23adff0ed7989377ee835ac54787b8fdc4f2e7295329ab844153de271583114b354e1e43309c3042e16794fa1975c037eba8"]}}, diff --git a/txscript/data/taproot-ref/cd083f5472e5c5b1f0a2910e5400ed9fb0e38379 b/txscript/data/taproot-ref/cd083f5472e5c5b1f0a2910e5400ed9fb0e38379 new file mode 100644 index 0000000000..d6254a96d2 --- /dev/null +++ b/txscript/data/taproot-ref/cd083f5472e5c5b1f0a2910e5400ed9fb0e38379 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c78000000003e1cfcb0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c87000000004eb3e1eebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf930000000022a849d80147e877000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487a8000000", "prevouts": ["f2d35400000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "17484f00000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4", "72f17a0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902826b92e489c52391673ca744d83e228293191492e2d901db7a033a79c8bea7107eace03029c7129e39f3a909dc8ffe6b90754373717e66246ccedc9e052ed3d6f550060f0ee501c40ff79c029c26083e18a30c721fccad49fc127d0138c5608d790468a1f908be0dd9443c422cb7f689609ea85e72e839d44be27b8840f24073ba9ba9e2676ae2b15b97df7d96fa3f62f8117c08ecaa7dec882326e49141d72434ae0223efbfa2637f4daea625871c0b4fc084e3fa81cfdeb510df6319b840af59ca47ba6219e980848081fb5184c9fbad150419b97722cacd33a99d36d4c1082663b7ed0f0b0935c3620ffe25d962bb6ba30ab655e89c143c3eaf32cbc12d940cd3caea23f564eee36468a2f5d4ba8653cb5837d435980439856a40575f7fcb49e0b745a20c7b75465eab42551750dca0fdd0d6dc23bb7b14c971146ef323cdc8dbe963984b5687dc0dfe86f1e19c038372d6f6955d208d2d5ed69e66894e5cb0b4593e39484c4982d496c02b4da70965dc5ecbde230f631bc9238e1dd5a414c0438ea322fd21242a0cc1844a81169e1061b230b9291e6419e8232cab07a18c20e18931d64438d901d160d81a90bf853931aa46937a04413d857398704891418b9ebdd27a70ae989ef2ce174463d50452a9d311211ef46f0853d1a6ed9aea7eb65aa728a6cf4a3252ddc6d2e30533a54d91b9c4b1fc47e2ad977447a265c728bb7c106ebb7d428d9775", "ed7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ef2f17803e9b9097b7e9c6a3fa063cf57bf5437f6dd783e7782f9707a99cea5998d6970ca8674a6d6a6636f00d706375e44157ef6300dc02db98f8ce0d082c1d19f2c0f6744ba7ac1f5ff1e4bbd0a31d1cdb1f5d58d1dbc476492d0098121b5"]}, "failure": {"scriptSig": "", "witness": ["4d0902e89b80a27a3a8ceaca1bae7baa51dfdebfb01f7c38d20dd1d9c160e369f4ae61b4bc8a91a7eb6e23a129c512fd7435b24c4132c28155c8d81633abd69c37370f8a69096e8ad562190f3f442bcdbf603048257efbda11522a32e379b47315641be17f1884b7e3a19200d178c73d44812b811024532c2902141a9e77e0bf7b5c649be427c95ec4c948df084512fe80054afc1bde0e8410dbfbff1fd1ecf4dd870345a54df2024ec5608edaf6c0679b7f69b8280d4f870db70f10863172d6fe146f8afd03df1cceba90aeed3cd934e55b4f4d2fc15a1b38a51730211d2b639dbf7039c4f3ad638d222108c6c32742c0f67ad0ba919ffa320d6f85b954789b1cf996ce496e79e8955840811779e79814d0a52bc5872ad1e8856cbf85264848cb5c2146666d7d38916aa352b9ed144eccd298336b2280ee36fb055f60fe92c8f69a644332af45e96da46ed3760824b147d403e6e5c62b511fd7d59191d907efa45e45eb9996af32f75153dbc2199effc69d53b80833c7f2c639acd216db21142101ae4073dbfa30a32a93c68a57d27ab6fc5acf77447bf9b735610ab3a975b87dcc58909e00fe8ff9493d45937b14bfa39deb7262845cf63b8711b20f452c9e03a355bd4dceb5a573592d20063886337281d1231e5e8479b16b3e822f63e79a72ffbde97cf7aab8f01ef3d784d4855d54dd5968ce6aba3b18dcc1426011abfc5851e13172a7cf5ce9fd3b2675", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670a4bc76aed2418d25137dfbb0a799899196711239bc580b794f0105b1596aa027d2631c3cab5fe643277004a2e6838e79a7dd6765c91a13be066042b33c17d3b131de5807af4725e3fdc8c81388bc895736ddb6e799e7163e8586c833ffc627"]}}, diff --git a/txscript/data/taproot-ref/cd2bb450b14d6d4aeb2383f17d0b52532a6d60bc b/txscript/data/taproot-ref/cd2bb450b14d6d4aeb2383f17d0b52532a6d60bc new file mode 100644 index 0000000000..bb2dd36d62 --- /dev/null +++ b/txscript/data/taproot-ref/cd2bb450b14d6d4aeb2383f17d0b52532a6d60bc @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703700000000456bf00a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e101000000c6f1b10a040edf4700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcba4b604d", "prevouts": ["e40e0f000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "5b843b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082dc2f05b59194cbdf87848463e1c2c1324ea07adf35e05c7c9d5f4b3dae1cf3a20eb43d08761fb76661299d0344fd2d8bfc7de5e7c6dc622156e95971f4b8396db5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ba371f3d414732c1c9e15a0164c634559da48866c534aa79174298bfda3b2aedc2f05b59194cbdf87848463e1c2c1324ea07adf35e05c7c9d5f4b3dae1cf3a20eb43d08761fb76661299d0344fd2d8bfc7de5e7c6dc622156e95971f4b8396db5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}}, diff --git a/txscript/data/taproot-ref/cd2f80cd83fdc9c096ed0c6e1e02112a0e62dd16 b/txscript/data/taproot-ref/cd2f80cd83fdc9c096ed0c6e1e02112a0e62dd16 new file mode 100644 index 0000000000..cdcbf0827f --- /dev/null +++ b/txscript/data/taproot-ref/cd2f80cd83fdc9c096ed0c6e1e02112a0e62dd16 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe30100000030bf24908bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b901000000527fb1ee02a3f9a600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac15e93a5d", "prevouts": ["33896b0000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588", "92d63d00000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "da7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936043c0126a9ff46f80efec90b265339725ec2187e176bf61e9c8112d2ff543febee00e627ce877dc7a3321ebc519bf09c5aac598ee9e81cf6d3228685de2d2a5f9a29f5cb7818ea23e4b491695dace811707e8772e99626d3237c076ba9a076d6566ba3404d3656bfd0df4a55f82c254cdba579fd51be164a5cd21fa2faf92a44"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e9267ca3ecfb5dde8490070ee5c8f144d07948eba84ecbc5d8caabe33435ae9c3fb4f37cceedf64e5ab756f8bcf3191fe56bd549db8641e271ceb60581364e38eb0481d56926b359fa3e2e34471adba51fafc61fa70dea7541795bc082db9408"]}}, diff --git a/txscript/data/taproot-ref/cd4a620abc44efff9ec16d12232d21d35383be02 b/txscript/data/taproot-ref/cd4a620abc44efff9ec16d12232d21d35383be02 new file mode 100644 index 0000000000..7302c4c4fe --- /dev/null +++ b/txscript/data/taproot-ref/cd4a620abc44efff9ec16d12232d21d35383be02 @@ -0,0 +1 @@ +{"tx": "b9d6ebbf02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce801000000681a4abc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c401010000007e28d0e301fb412000000000001600149d38710eb90e420b159c7a9263994c88e6810bc77e020000", "prevouts": ["f476560000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "cb49320000000000225120860c89f9477f4b6d0745b3db3a3158e326aac77c9b39db987890c5dea40689bf"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dba6d090ce6eeca8f19bee4c4b18bd87e742c613226dbb66d44b3d8c22cd4f417d143406647e47f2aa45aee5a8d37fbb079fe3a633dc3f79123da3b3ed47a821a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93645b70697259a6092735a83fd9185b271706fbd91da528cf82e26060ba02f7d12c3950c17255228812280bec2d0cca04b586565374a97ee6c913745c9c1a159600ce9ba0618adb3ee44483a22999a54a4e1710b9846377d8164aaa29371d79f22a2fa119ef3ac370f8290f87fe8954e212d8c61d3545cf9da1d8aa62b42f72813"]}}, diff --git a/txscript/data/taproot-ref/cd536df731fdebe8bbafa86ebef1f6c819648a78 b/txscript/data/taproot-ref/cd536df731fdebe8bbafa86ebef1f6c819648a78 new file mode 100644 index 0000000000..19c138d9f6 --- /dev/null +++ b/txscript/data/taproot-ref/cd536df731fdebe8bbafa86ebef1f6c819648a78 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b00010000006626179d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4dd000000002f9f28d801c65c470000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e70cd67b4d", "prevouts": ["308e200000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "e53e310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_cf", "final": true, "success": {"scriptSig": "", "witness": ["bae9395b8894fcb53fcb94909630e0fa8a7b6639cc70b42d414bdc065976bb6134718999d87a92fa944fb8e715b732bbe403f303c5d78afd294a31419a2b92cf02"]}, "failure": {"scriptSig": "", "witness": ["bffb08b72fb67852c00a7affdfd1ac38d86230e434c3ffec1a01f8f80ece2c15cc413867f11f0d51dbfb27c50080cb9c4799be48f62416760d85c944157b1d58ce"]}}, diff --git a/txscript/data/taproot-ref/cd553bbac6c8bd33ad432ca2077facbf41604f68 b/txscript/data/taproot-ref/cd553bbac6c8bd33ad432ca2077facbf41604f68 new file mode 100644 index 0000000000..29039d5384 --- /dev/null +++ b/txscript/data/taproot-ref/cd553bbac6c8bd33ad432ca2077facbf41604f68 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1502000000692e59dbdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdf00000000d423c2f302fde5ca0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac6ee00e50", "prevouts": ["0990850000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "90e7470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ab", "final": true, "success": {"scriptSig": "", "witness": ["1b145c19a6eef262e669c0544ef41c63da8b0cea3e09dde2c5df4af0522431b770886ba4158cedabdfcc1094cdaef9c2bcb69961d579197838229249f074750981", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c94b05e615cb27ed909e1a6839bd774f1b7acba2a2bc54c44c4e7085075fd210d5b29939d12fc91b80c458b89bae1acfe521d0d4ba0720b867ec0686181907ccab", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cd8b40b4ffe13dc923550924d4133d5ac918ecc4 b/txscript/data/taproot-ref/cd8b40b4ffe13dc923550924d4133d5ac918ecc4 new file mode 100644 index 0000000000..f695b99fb8 --- /dev/null +++ b/txscript/data/taproot-ref/cd8b40b4ffe13dc923550924d4133d5ac918ecc4 @@ -0,0 +1 @@ +{"tx": "02000000031980a99ad1eac101c8fe3dd9b7c19f4e81dda5a690601a9eedc2ce713d9132e5000000000007acc88a492909e056fa5c0ef2af542be68aba07da39583e95b43e24484150891b1d532301000000001ad6d4dc1980a99ad1eac101c8fe3dd9b7c19f4e81dda5a690601a9eedc2ce713d9132e5010000000079e1bbdd02ac0b058b320000001600146d764276c66fec1127e5074db5bff3aa6c52553358020000000000001976a9147d8c30278dcbf5bd88310a3c91abbeb33651906c88acd137773e", "prevouts": ["7371c1150f000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "b7e4d4f711000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "6689717d11000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_invalid_unkleaf", "success": {"scriptSig": "", "witness": ["25428a9bd8f0b5b74290865c0e042df7df41ee41a4cdff2193fafef490ff48290a0f40eeb563d2c0b6520066936103d46ace942c00a77679690a7ffcc3a6cf25", "20159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717ac", "c2159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717c320986550a60a376b2d6a26894b932a0140931c95b78be03572545c726a283e7902b78fc59ae74800241e9b7a2e0578a35ace37791478c3e04a51e81e708c61"]}}, diff --git a/txscript/data/taproot-ref/cd8ca448ef6a3c3fa7536eee563579389b399c7f b/txscript/data/taproot-ref/cd8ca448ef6a3c3fa7536eee563579389b399c7f new file mode 100644 index 0000000000..a1008f8dd1 --- /dev/null +++ b/txscript/data/taproot-ref/cd8ca448ef6a3c3fa7536eee563579389b399c7f @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270190000000065a894b4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bed00000000c5e85eed04a6fd3100000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787cd030000", "prevouts": ["661a0f0000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6", "f080250000000000225120ed31d524ef6bc5b71a68a40bfd6359c52f177bae49683ad83ab62d1806c34929"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c32bcf051f24a436904823a4e93e2341ae2a2e44bd383fcc6ea0da3aaabadc12"]}, "failure": {"scriptSig": "", "witness": ["6a40616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/cd935e81f7b958dc94cbb682f2c926e1e63fc213 b/txscript/data/taproot-ref/cd935e81f7b958dc94cbb682f2c926e1e63fc213 new file mode 100644 index 0000000000..1eafe41714 --- /dev/null +++ b/txscript/data/taproot-ref/cd935e81f7b958dc94cbb682f2c926e1e63fc213 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2b0100000003d33c9abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffd0100000038eb109e031793e40000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc01802d38", "prevouts": ["08d775000000000017a914613e66961ccf40c7c83ed07cc80b2528cfe51edb87", "e447710000000000225120e477b1c5b341d71bb24c39a2320bc0d86da52fdae37edac491a92c571a2df14a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2258202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["8b4006d050d277b69795e6a2f473003c12721ea302bec3c0af5c31aab3915060d527563039784230876f668b0bd717c49fac01cc4482315f6f4e7e1e5f541695", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/cd9562d304291faf33b2752268819af3d9fdd593 b/txscript/data/taproot-ref/cd9562d304291faf33b2752268819af3d9fdd593 new file mode 100644 index 0000000000..db615af2df --- /dev/null +++ b/txscript/data/taproot-ref/cd9562d304291faf33b2752268819af3d9fdd593 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf05010000006c94ab778bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40c01000000a9aa24900176de0a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a603010000", "prevouts": ["46617a00000000002257202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "f7ef3b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_65", "final": true, "success": {"scriptSig": "", "witness": ["c88fca301f28870dc7b00e87169aa933f0b517d595bf2219880d036e9341cf0010e0fb47bc33890f3a50d8282602a012d4e6fec3f63f7257a0f344d2b250abf302"]}, "failure": {"scriptSig": "", "witness": ["028efc73b374903084f5d5764340bf31627fc1e2ed3048299aa3f9e1fd4d9db5e39abcfde42bdab263c2a91e2392a9cec5ad262251b54cb84be4a2f871200e8865"]}}, diff --git a/txscript/data/taproot-ref/cda64a68115a3ca8971a2747b360b387fbe1d1ec b/txscript/data/taproot-ref/cda64a68115a3ca8971a2747b360b387fbe1d1ec new file mode 100644 index 0000000000..c5fb940871 --- /dev/null +++ b/txscript/data/taproot-ref/cda64a68115a3ca8971a2747b360b387fbe1d1ec @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c487000000004bc7f4e2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb6010000002fc980f20145803400000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac1c40ee26", "prevouts": ["9dc3410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "deb0220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_fd", "final": true, "success": {"scriptSig": "", "witness": ["d85f74a2016b0d3a0d15194034043af044f7ba411d3d1714454db830b63e729f4cce3f5cea3832d1fbafe2e5b2f817c5f5a64c5e07e2e0efcc0f7706e743bbb481", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["82807f54bec9c57334a769c386b52f3f9b91a4db2800ec02ef38736720221a9af43cc45a23857d9d570a1d184dd02399a11b1d31ebb4f0887084fab7c33b4a92fd", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cdaa800ed715e873d65a75ff494c085689777769 b/txscript/data/taproot-ref/cdaa800ed715e873d65a75ff494c085689777769 new file mode 100644 index 0000000000..4b471be592 --- /dev/null +++ b/txscript/data/taproot-ref/cdaa800ed715e873d65a75ff494c085689777769 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf06020000005a8d6e1adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4600000000fc86371d025cac980000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787141e232c", "prevouts": ["22827a000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912", "7aab20000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "5c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936900f19854bc90d6c79e0184be6bef7ba18c323656bf267ebd46e4fd22ae910800ebd37c9b7767cfa75ada9a6605680756deb542ec34cf1dc29d9c7b172412f3174e87bfb4d3d415907d7a3196832fc57be4f6d746253c89a46e8e4c968740366e8f45a3ac55dff4b7d62b0bc42204f13e92c55212ff162d480a58edc7717abc8"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936369642414e3e6cba27e1a8d43018b0c6e901f2bd9875554ba9baf88aafe131fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e24e037abdf69c22f44b0c591ad93651f749184eaa819a8a63a5d4092bdddfb78f243c72f4e074898aab8058b3c73fee97ec3b9723e213834a8398e97170c1356"]}}, diff --git a/txscript/data/taproot-ref/cdae175fecf9783890ad4364fcdb7e9a26312c86 b/txscript/data/taproot-ref/cdae175fecf9783890ad4364fcdb7e9a26312c86 new file mode 100644 index 0000000000..72d049b286 --- /dev/null +++ b/txscript/data/taproot-ref/cdae175fecf9783890ad4364fcdb7e9a26312c86 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42d01000000bdb630c88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cd000000003ebb08c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f400000000c26dee9901a9b60e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374879a000000", "prevouts": ["804a37000000000021561f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "47ba3c0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "dfe4400000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "1f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b8d3859c02806498ed0a6443c7e281ed1c8160789600c9782f40e9c097f1ee0446c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facfc86bca0a8859889d9efd3fba9c68487fa49a78b15c293938d32f430a3e576ab3e02c0e1665e1d6a4b6ef98a6ef3a3632c98688db315e4c8eb8907479035d72"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936606f5652115a36f7672906b3ba9acfb073c3f40076f433b0f89c9999ba02a3338a47d733f2ac96a3990499de942ef9a5afce6e4fdb28ae911c182ccc4b722ed2ed661e9ebd30f651fa020177c2a1e4ce51b505c9194e43d6074b392863f250ba"]}}, diff --git a/txscript/data/taproot-ref/cdbb9c9c88d727637e88c5e5f34b796e03a77c9a b/txscript/data/taproot-ref/cdbb9c9c88d727637e88c5e5f34b796e03a77c9a new file mode 100644 index 0000000000..ec08472ea2 --- /dev/null +++ b/txscript/data/taproot-ref/cdbb9c9c88d727637e88c5e5f34b796e03a77c9a @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0201000000a5902247dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b260000000016a000b7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0100000000de383c3702a0e7a50000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4879304df5c", "prevouts": ["f2295f0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544", "0b62230000000000235f212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "bbe224000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/cleanstack", "final": true, "success": {"scriptSig": "", "witness": ["01", "", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f38ec708f0cf53f3b369b3194db6b979fe0cb271fdaad68f02f83e00e6bab6c4f8b9b2591be70a62ed3962c9e65bdf4177c7447c68cebff2d50efdff4267028038515792f22723cd4f021229082349c4f04e1c54e852907992b3d89f9f323988af933dd569ab8ef4734d9ed0029c610ce683439beaa7b2b92d7d5f3785f11f206e293a68e74ead54fc4cd1f2ee252d1412756669ccb87bd0be0195a2fd9047454977d199608b74a0583630fc942382dea1a9b64fce701a02c5c9f815a8d6f7f6fff61305d3bcffd98981c35a7377ac16ebecf9e810a20df0b649c6b66617c71e24bf028b3b4bc9e1d250c72ce187c3ed97dd11379f788342a725ef5254e8152c925be1fdb6690c4e55e22d4093392cf82d7f0a3f5de5ae9c0ca33a9077da1d6d424b46db02ff988fc19cf23a4951173feb3eeb5cf27c148448535e997b51bd7bbd49cc1c9d1c5543faf51f246263bc293a1ec3b05628bc84cfd7f4dfccc3e91545ebbb7a20d90802d61cb761b7ed3a9d8977f7a5521df44543d663068a2348a7c7f6542a544c030cbfdd70964c7e81d665feb2adbff25ad3ab75b67ecf3712c09a0b10fc29ed9ec9ba811a78159d56d191855f20d80384a7f598d54defaeda75074e07476023602dfde1c8d0d124f96edbab4af8198f97e6bceba6cad7de517a8f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["01", "01", "", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f38ec708f0cf53f3b369b3194db6b979fe0cb271fdaad68f02f83e00e6bab6c4f8b9b2591be70a62ed3962c9e65bdf4177c7447c68cebff2d50efdff4267028038515792f22723cd4f021229082349c4f04e1c54e852907992b3d89f9f323988af933dd569ab8ef4734d9ed0029c610ce683439beaa7b2b92d7d5f3785f11f206e293a68e74ead54fc4cd1f2ee252d1412756669ccb87bd0be0195a2fd9047454977d199608b74a0583630fc942382dea1a9b64fce701a02c5c9f815a8d6f7f6fff61305d3bcffd98981c35a7377ac16ebecf9e810a20df0b649c6b66617c71e24bf028b3b4bc9e1d250c72ce187c3ed97dd11379f788342a725ef5254e8152c925be1fdb6690c4e55e22d4093392cf82d7f0a3f5de5ae9c0ca33a9077da1d6d424b46db02ff988fc19cf23a4951173feb3eeb5cf27c148448535e997b51bd7bbd49cc1c9d1c5543faf51f246263bc293a1ec3b05628bc84cfd7f4dfccc3e91545ebbb7a20d90802d61cb761b7ed3a9d8977f7a5521df44543d663068a2348a7c7f6542a544c030cbfdd70964c7e81d665feb2adbff25ad3ab75b67ecf3712c09a0b10fc29ed9ec9ba811a78159d56d191855f20d80384a7f598d54defaeda75074e07476023602dfde1c8d0d124f96edbab4af8198f97e6bceba6cad7de517a8f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/cdd70dfc5c39ec02e5e48d747003dccc345d9c35 b/txscript/data/taproot-ref/cdd70dfc5c39ec02e5e48d747003dccc345d9c35 new file mode 100644 index 0000000000..f12623e5c2 --- /dev/null +++ b/txscript/data/taproot-ref/cdd70dfc5c39ec02e5e48d747003dccc345d9c35 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706f01000000230ae7af60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d600000000224fd88202d97b1f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a626000000", "prevouts": ["621d120000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "78ea0f000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004599aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb406f18ba19de64c771db55f5af06ee3412ffaea1fa921290752d742eff6a1e67f7007ac6d9f1365651a4d55e6df0dcb109d268cc6c386b355a4997173bc95c886"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e197185a6c30608fff89dfccb39a96a02e4addd353a2af1bc7b33caa3a3ac07fec6e41ed285c226ab336f92f35d989a379104ed593ec3ff802714cc8e85daf0b3be26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}}, diff --git a/txscript/data/taproot-ref/ce08102de2f440a689645ebc57829a604424b751 b/txscript/data/taproot-ref/ce08102de2f440a689645ebc57829a604424b751 new file mode 100644 index 0000000000..0e6a07c724 --- /dev/null +++ b/txscript/data/taproot-ref/ce08102de2f440a689645ebc57829a604424b751 @@ -0,0 +1 @@ +{"tx": "63a8de0b0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270400000000003003e95dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6000000000987504ec042540390000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478761b26b4c", "prevouts": ["d92113000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "f77028000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "fd", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9d8f10db74f979c41891759fc87cc010c6171f34a4dc4fa278f7920467dc96cd9f77cfc3030f4fa2d9551f14353e565e33cb9a72a19e79fd0e4930553ab0cc3a3aa70c847d82166fa4c32b27cb78dba1a5c77b2d4b8269442df723c9129fb762c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936427f03015f7a96869233965cfd3869b27cd157bfb8ae4cf2df456ac491585181380f015d033fe7faead4766c682a770029d5c79030785f2d26c440da4ef071fea3aa70c847d82166fa4c32b27cb78dba1a5c77b2d4b8269442df723c9129fb762c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}}, diff --git a/txscript/data/taproot-ref/ce29a0262edb0e4c4a3905e19cb08c9a4e8318ba b/txscript/data/taproot-ref/ce29a0262edb0e4c4a3905e19cb08c9a4e8318ba new file mode 100644 index 0000000000..cd812bd879 --- /dev/null +++ b/txscript/data/taproot-ref/ce29a0262edb0e4c4a3905e19cb08c9a4e8318ba @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c13000000007dd53f9260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b5010000000b3d637101b5bf3d000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d1010000", "prevouts": ["ba5b49000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "a090120000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/minimalnotif", "final": true, "success": {"scriptSig": "", "witness": ["8cadfaf51f6d962fcdde8eb5af4e11e99fe61a0ee123419858ccc8e5d240b848ef2e5b00a9e10a337b8e276a7f106d051f269bc6b641ab1b0f84c42b182cb6d2", "01", "646a6720871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5e13cad19c924f09e742cf01d7e012810213f06b075da864011776c4e0e33ce5afd4f5a80fdb0e775e9347ffe0d8d06d20821e8392839b829c29e03cf24dd39e09e6d21873535d25ffee6834466c284ff42ef82d8fa2fdd706d38dd213905035c198717912f4b406e8d3b313d97c1127d1135c371a850790824e04061625b9d13fad9f6d66cfea14ccee2f27c94687462e60c93097e3ddae516a269438c7ee5497178e22127db6c7f8f175fff2d2055fc4c08a025732ff7ea1096ec159efbddc6f248e0af5869f80622f637a3edafb79d72487846d4b0589ad8df1e49d86b58ae982564b911df2d2fca61beb75f1ecc1a3526592822acf1cb81afd4e2a93f13b7dbd0c12ffd99a2b3242b359ecbd2060409f001c89f4f8371cd210f37fc35c4b1df78360227d44f218f9c188c83f404e81070c2440736b5601340b7fe06d3b1bec47189a7be4ffc0056c3ee876b2f14785a511ffb40f655d5a8b5fa356d4081558c155b0d7e8c00e6282b2c83a0b7370731ce99ff8996d6837e990d84e1874f60a177a028d5b32d1137467ad00d3419299404906e230dd6a3cb22ab6dff4f06738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["8cadfaf51f6d962fcdde8eb5af4e11e99fe61a0ee123419858ccc8e5d240b848ef2e5b00a9e10a337b8e276a7f106d051f269bc6b641ab1b0f84c42b182cb6d2", "013030", "646a6720871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5e13cad19c924f09e742cf01d7e012810213f06b075da864011776c4e0e33ce5afd4f5a80fdb0e775e9347ffe0d8d06d20821e8392839b829c29e03cf24dd39e09e6d21873535d25ffee6834466c284ff42ef82d8fa2fdd706d38dd213905035c198717912f4b406e8d3b313d97c1127d1135c371a850790824e04061625b9d13fad9f6d66cfea14ccee2f27c94687462e60c93097e3ddae516a269438c7ee5497178e22127db6c7f8f175fff2d2055fc4c08a025732ff7ea1096ec159efbddc6f248e0af5869f80622f637a3edafb79d72487846d4b0589ad8df1e49d86b58ae982564b911df2d2fca61beb75f1ecc1a3526592822acf1cb81afd4e2a93f13b7dbd0c12ffd99a2b3242b359ecbd2060409f001c89f4f8371cd210f37fc35c4b1df78360227d44f218f9c188c83f404e81070c2440736b5601340b7fe06d3b1bec47189a7be4ffc0056c3ee876b2f14785a511ffb40f655d5a8b5fa356d4081558c155b0d7e8c00e6282b2c83a0b7370731ce99ff8996d6837e990d84e1874f60a177a028d5b32d1137467ad00d3419299404906e230dd6a3cb22ab6dff4f06738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/ce4f3f6725a58e41e3545de8f93475f0f9402a52 b/txscript/data/taproot-ref/ce4f3f6725a58e41e3545de8f93475f0f9402a52 new file mode 100644 index 0000000000..69f265607f --- /dev/null +++ b/txscript/data/taproot-ref/ce4f3f6725a58e41e3545de8f93475f0f9402a52 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1f01000000f063541e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bf010000003a54a79804b961930000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7969a010000", "prevouts": ["f0058500000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "6a541100000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_keypath", "final": true, "success": {"scriptSig": "", "witness": ["e4edee017e3a08e1f91b7c97a26d29155c6281d50438dcc8a29476fe9a68b99b38b60acc6eef69f102de8cbdfc6d6676e477dcdd31618e0e5de4955021147f94"]}, "failure": {"scriptSig": "", "witness": [""]}}, diff --git a/txscript/data/taproot-ref/ce5a6e30faecc2d2f249b1bb1b0a21cbffc46674 b/txscript/data/taproot-ref/ce5a6e30faecc2d2f249b1bb1b0a21cbffc46674 new file mode 100644 index 0000000000..d8a6795cd4 --- /dev/null +++ b/txscript/data/taproot-ref/ce5a6e30faecc2d2f249b1bb1b0a21cbffc46674 @@ -0,0 +1 @@ +{"tx": "08aca4d7028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48701000000c4c226e3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5801000000dcb7abfb040634aa00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87b5000000", "prevouts": ["5b9a3500000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81", "7dc8760000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "747d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c1c1cec2ec4a702b027c32afe8f050a7abd6c53cc1a056033971ea23441aa0d3133f027656d2d9f64ade865091a06c0b2adab14558eca27c91472397a1e3806e077aea6ccf316b47e40a0e3636c5ad4f7738b9bfce630d4a478a0dbfcb51ed93"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e86e257627f53ae21a01782ee3e7d4da03b01bc19a25fdaba4c8a32b8ecf0a2d91bf4492fa00dc56072e72009d776219274bea6eb51adb458249eab71940c27cb4bfbb1ef2412aee06f4b75b9e20a72d4d9707545a4ae77abc538f76b00105406a"]}}, diff --git a/txscript/data/taproot-ref/ce5c007dab411a6a225c1b09181578eaf6edf364 b/txscript/data/taproot-ref/ce5c007dab411a6a225c1b09181578eaf6edf364 new file mode 100644 index 0000000000..79d6f7df82 --- /dev/null +++ b/txscript/data/taproot-ref/ce5c007dab411a6a225c1b09181578eaf6edf364 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b400100000067e43aff60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701901000000e9710afe02937a2d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4879c000000", "prevouts": ["19c62000000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "b6700e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ec", "final": true, "success": {"scriptSig": "", "witness": ["54d11a88f6ce79d225f0cdafeed5c39d788e16259d61c5275b50e80b3bfb5cfc0f07c172834590e622d40318935009275316a465729aa9a75fadd25c8412620903", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c62d4b9d44dbed0370531ed32f21bf252d426199ac66e81b743502f6d76b552a0decef315f1bf33a9d57e67d162139ca6c11ce525a33c23aa5c502e86c6132a3ec", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cea069b190b73ea7c41e48275d6d0841d7fdd8f3 b/txscript/data/taproot-ref/cea069b190b73ea7c41e48275d6d0841d7fdd8f3 new file mode 100644 index 0000000000..6e951eaad9 --- /dev/null +++ b/txscript/data/taproot-ref/cea069b190b73ea7c41e48275d6d0841d7fdd8f3 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708401000000a79891d28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46901000000540de0f504bd1452000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ace8010000", "prevouts": ["1a9a120000000000225120fc75765be35c7498e91185d3d44c5b81ace48e1fb56783e170e4fddd4a850715", "8ec7410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a8d43fd877bb06b6facd7893ec8875434e1fd6bce1c56381938fe22b4b8acec"]}, "failure": {"scriptSig": "", "witness": ["6a78616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/cec62d6028ecb0885e4adbb89b0c33222ed71d55 b/txscript/data/taproot-ref/cec62d6028ecb0885e4adbb89b0c33222ed71d55 new file mode 100644 index 0000000000..bee3b718e8 --- /dev/null +++ b/txscript/data/taproot-ref/cec62d6028ecb0885e4adbb89b0c33222ed71d55 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf03000000004470afcedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5e0100000089cf15fa0167036c000000000017a914719f78084af863e000acd618ba76df9797223689875024b63a", "prevouts": ["d3667100000000002251201dfb228dec79c6e234b1139c58dcf8de3e24a7459acbe9e029f267c6e1783b9a", "6789570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_2f", "final": true, "success": {"scriptSig": "", "witness": ["fbe428a73441a68af60203a55a4796d04d6f7b3d951051d223215aa7524135416a59285e20ba65f22407661e4b0e817881fa778153f27a9463868edf179b7ea002", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["dce78f8d62b7353eac36cc02e196f1e0fdbef7f47d6d25af99c7cd75252046cb8d358f809e8cebf26c5b550b8dd10259fe535a4d6492a829d3f2511a94400d6e2e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cedf97481d67a8a89199abfe8c15570cd253967d b/txscript/data/taproot-ref/cedf97481d67a8a89199abfe8c15570cd253967d new file mode 100644 index 0000000000..899aa2890b --- /dev/null +++ b/txscript/data/taproot-ref/cedf97481d67a8a89199abfe8c15570cd253967d @@ -0,0 +1 @@ +{"tx": "c500bd8803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6b010000005ed744c48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49501000000484908fc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43b01000000f2652ed601e58f2a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7f5010000", "prevouts": ["d29a240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d2823f0000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "17283b0000000000225120f103da370e61120ffbfed9be73547691440e55c4664603c27eb9ef615a7ccbdc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_cb", "final": true, "success": {"scriptSig": "", "witness": ["5e0ce5e8cd876b82df1fee58302adc4a3cce5803b7d0457172dec7e3f92827dc4e86ce27f3caf22b2e99c5bdfa1613a471da67739d4ea61c0554672aee7c256a03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["dd0861ee7b028ba56c85794d6d6df9ca3da7ead869c9b2f2e0dd7c7bc422489e54f0f5153e25ef95a8174efd803a357bf707f2f3d5c1257294e2ecbf98f6537ecb", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cef118940d5799540be8721e2453120639fbe14e b/txscript/data/taproot-ref/cef118940d5799540be8721e2453120639fbe14e new file mode 100644 index 0000000000..33722a7f2f --- /dev/null +++ b/txscript/data/taproot-ref/cef118940d5799540be8721e2453120639fbe14e @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706a010000003d8886bbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf770000000088db63dd03e1877e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478742010000", "prevouts": ["ee0f13000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "54426d000000000017a914f5a65ca4534ef3ca5833434c0dd44a3e128f499587"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "797d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936744fd1b2faf1c01ba2c17357d1ace23791aa902c4bf843c70bade4192b70605de711fb6ebac21c15598dc6feca0613664d86278cc532834585097123290bb3d45be39dc57762be2d9b1a04aa5b570805d23104bfe4fa54c392bda5d51f7f4540"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820b1051acd7c1b2d32995b3df0c6921af5f8ed3327e7e16cb8a5e0bd007230af127aec9530f4cf05d3554e63105b96634da39f3c52c35c251ce860693e97320b3"]}}, diff --git a/txscript/data/taproot-ref/cef395bb5063aba1aeaafde86a8bfd4c3ae80b8f b/txscript/data/taproot-ref/cef395bb5063aba1aeaafde86a8bfd4c3ae80b8f new file mode 100644 index 0000000000..101a562f63 --- /dev/null +++ b/txscript/data/taproot-ref/cef395bb5063aba1aeaafde86a8bfd4c3ae80b8f @@ -0,0 +1 @@ +{"tx": "c6803302028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48001000000509492ecdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba7000000001c4789db03c46952000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6caebe045", "prevouts": ["280f360000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65", "6f4c1f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ff", "final": true, "success": {"scriptSig": "", "witness": ["80cd77aa3a5a4d1be123e789c5879de71495ae44e99f4f3081f634dd016da10a6ad9d4183d48e68fdc1329648a49d9d16a3721394702132246e3268da339dcfa01"]}, "failure": {"scriptSig": "", "witness": ["a8a47a4d127e94dfa116aa6f85a91249b93c2c90aa812d931b967b2d478b78d99b047e56da681d5a4efb92aa309c553397823d9d8fee1f0fdfb32e16fb0caac0ff"]}}, diff --git a/txscript/data/taproot-ref/cf1726d92ba0a57e5cb508f7f38cf8c30c31572a b/txscript/data/taproot-ref/cf1726d92ba0a57e5cb508f7f38cf8c30c31572a new file mode 100644 index 0000000000..1434e6c6a4 --- /dev/null +++ b/txscript/data/taproot-ref/cf1726d92ba0a57e5cb508f7f38cf8c30c31572a @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b800000000041ad790c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42f01000000ab6dc361024f625900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac25af454e", "prevouts": ["dbfb260000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17", "a8f73300000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "7c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac26c11d7825777e0f2ddf610788c970bf175cde25cef7de4e72e41494d53bd31202adea3ba63b8efb220ed0b92cf765f01931ebb31f4963f663d14c15b1e6099a711983bc616996e2ac47b27808b31a9b7e87f7ce1f3571999dd3a2a57f1080"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d5fbcf61a2a7c737f60b9029794ca77d60e8dfd9dae9f2322432c03bed71ef108eae3f5bf5f4c26def68bde658fd1412dc2dfb494d39d6b1bd4ba6a274f177d9a711983bc616996e2ac47b27808b31a9b7e87f7ce1f3571999dd3a2a57f1080"]}}, diff --git a/txscript/data/taproot-ref/cf19361572439227ba12b4d90a84b45c9c77a6dd b/txscript/data/taproot-ref/cf19361572439227ba12b4d90a84b45c9c77a6dd new file mode 100644 index 0000000000..7fe05d20fe --- /dev/null +++ b/txscript/data/taproot-ref/cf19361572439227ba12b4d90a84b45c9c77a6dd @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3b0000000048f62767dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3600000000af19cd280474a0a200000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df9797223689873baeb45f", "prevouts": ["0bec7b000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "0f91280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b0", "final": true, "success": {"scriptSig": "", "witness": ["c7e23a2efb0698e1e188a96e58fa23ab5f3de24d0b4c52659dd65caee28d205b8a745781bb8e9aa4e1ad4c31660cd509c53aebdae36b6dea247baceb00afef7d01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["07f48bf2b7d960f2c678093938bc0f4159a8d0c214c961d4370b73333410e9771ad486d70ed4e2692b7af347a8934fa8b6733a90fdf5ffce20193ed60e7d5a25b0", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cf1b9fbc48a705e782d90e0caefa83731663957e b/txscript/data/taproot-ref/cf1b9fbc48a705e782d90e0caefa83731663957e new file mode 100644 index 0000000000..b12feb9261 --- /dev/null +++ b/txscript/data/taproot-ref/cf1b9fbc48a705e782d90e0caefa83731663957e @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709d00000000dd342c8a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127014000000002d192c0760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d00100000015c28620013a9a03000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a600000000", "prevouts": ["6c730f0000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83", "a76f0e0000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76", "ef970e0000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "e97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93661b2d540c156192df9dd49945f9f5192f7dda818524a6c961824475c653b1c861a6bebb6dd497db999161621b23fc9287dcbaa466f13da5d035327b94edd053dbd7d7e2e0b29bfb283546875adbaa200efb560b624d50a8165ce6ae8ed501592"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93603d885e7f20d9b45c46863644d45c7ae3e217370ab6fbcc5b4c9a947f89430a48b8d8a8d8c003fabb93595bfceed403f9a1266ee95e7fa8447cccdf398ce498db8321554bafe286e6661652cf416d3db0b455024b23404eea069d656c79e4f25"]}}, diff --git a/txscript/data/taproot-ref/cf3ddc0d11192bb67b1d1a9c46dba9cb99e1ab37 b/txscript/data/taproot-ref/cf3ddc0d11192bb67b1d1a9c46dba9cb99e1ab37 new file mode 100644 index 0000000000..dff67c8a70 --- /dev/null +++ b/txscript/data/taproot-ref/cf3ddc0d11192bb67b1d1a9c46dba9cb99e1ab37 @@ -0,0 +1 @@ +{"tx": "4817304a02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8b0100000004f694a9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7b01000000216ddf84044aeae6000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6fe1c4f2f", "prevouts": ["c95b7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d8d96e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_dd", "final": true, "success": {"scriptSig": "", "witness": ["1693a98377fa50d7dbb818dadf1792b7c1ad3a9cb0abe14df45247b12cfd987bd2f475502d3514ff2031b0fe233422feadf71d7adb6d6f4e6d99684e5a36ee7e02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["bd4d02fbdc6d4cca7c7ab7a18a93dc76587b1effe83bf61f523e109534dd4e18c4ed61fac327eab914a154a2c68d5dc3b1561b45057df520bc7e7a5398554b3fdd", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/cf87f1c7fe8d84db93cab39e5ec4fc004b0daf45 b/txscript/data/taproot-ref/cf87f1c7fe8d84db93cab39e5ec4fc004b0daf45 new file mode 100644 index 0000000000..ba44f20c43 --- /dev/null +++ b/txscript/data/taproot-ref/cf87f1c7fe8d84db93cab39e5ec4fc004b0daf45 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c68010000003c978ae7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6e01000000196033aa023d2f98000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac56020000", "prevouts": ["530253000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "25e24700000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "eb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936548e02ba2703ccddc552600e93f0a288f5116c529acb2e0434ef3486de3078ba3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821e09e6d24dde1e7a9afb38743b4c2dd55dbb58a3a1803a82bc7b3a42584fec8fa9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b965c838716597843dddd943276d0695a7197e96f70841ed980463eb99376fe31e09e6d24dde1e7a9afb38743b4c2dd55dbb58a3a1803a82bc7b3a42584fec8fa9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}}, diff --git a/txscript/data/taproot-ref/cf99a5aabda5c420d162ea57e1d44c83b4a5f444 b/txscript/data/taproot-ref/cf99a5aabda5c420d162ea57e1d44c83b4a5f444 new file mode 100644 index 0000000000..3756373750 --- /dev/null +++ b/txscript/data/taproot-ref/cf99a5aabda5c420d162ea57e1d44c83b4a5f444 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c64000000003cf989cedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8d01000000056889d804c0d86800000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac35030000", "prevouts": ["ec1e4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a78e1f000000000022512088381247371028bcbdc4971a16b3f7d8df868484be1d753506f5bf6782ea1e55"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_2b", "final": true, "success": {"scriptSig": "", "witness": ["63722b021a08548fa744e1c0a27362a8610e7dd1c30906c69a3b2816265784581a676077685bd665aec715a8abf2751334393bad43e0e4e9ddd3607487551c2a81"]}, "failure": {"scriptSig": "", "witness": ["7bb9e09f4b1e0d730c22de6690becf1e6d3a1f100064d17fad55857421d91f42962148b4c56127aacfa0c7f4df742e899e7fa7e1909e235c3f4a1b34e70273f52b"]}}, diff --git a/txscript/data/taproot-ref/d01804b3f650a230ba4caf6f35710074094ef4bc b/txscript/data/taproot-ref/d01804b3f650a230ba4caf6f35710074094ef4bc new file mode 100644 index 0000000000..da8df8b48b --- /dev/null +++ b/txscript/data/taproot-ref/d01804b3f650a230ba4caf6f35710074094ef4bc @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2800000000ffe4807d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705201000000dbb069df02474e31000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7bdf76d22", "prevouts": ["1acc2000000000002351212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "f970120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["42ee508d18775b48c94fd207b2626ef394875aa76ea60442ce21a9f0a0fd97bfd705eaf6f95c9eaa6ac9bd6caaf5b9dd6f001d593c2e73b9c5a614dddd582546"]}}, diff --git a/txscript/data/taproot-ref/d018c44a4a260f0faa1c368b22e6fd2da47b4279 b/txscript/data/taproot-ref/d018c44a4a260f0faa1c368b22e6fd2da47b4279 new file mode 100644 index 0000000000..40d03c4e21 --- /dev/null +++ b/txscript/data/taproot-ref/d018c44a4a260f0faa1c368b22e6fd2da47b4279 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3f01000000b8a74f8a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44f00000000e90788d160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702a01000000ca5a428f0116f30700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ace4010000", "prevouts": ["45214700000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "d6963e0000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5", "aee20e0000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09025f772e1437a5b0cc96ef0a34bd193568a916eb560a1c5dddef20463194398d4a14d16e0938cd4678c75f1bd5c1bf871936da2b6748c97bf7fc1fbff8fcdfab084ca628a9dff35f7224f3de1f7ba44a6a23daaaf545a4e77775718db7c6a82b29b43709b6a0b61403e815015f55384b9788cc634138766626c4ce0bce5dbe3da90c8417165766291c5877f3f1bf1fc9592b336e6e417c329942273fc005d0a2f83bda9a03b86966c91ba21108d1761a66a58734da36ac7e4d608a3bec7d3fc8bc1621814203c7cd0c95c9bf4e721d568e2e542e5b43e3825c03b564129bf270d9ed1cd8fc5f46a2e64edbbd92016de955383e9f1819476ce03e8141b08549536afdfecc08023f1d20a96fba281fa7c5bc1f31c161f5351a47e2db41e94e21cd0613b1bf91aaf8fefe2a16b73fc24dbe8080d3af20233a0adcebdc9497d02c5904e358694815d1d3524aa4e4452f3d13fd0f355d8ebc39374249ee7694fed0dbaef31ac6d73517586a4a28f68f8b206998d5137b22e8524e843c1108b6af1ec8af93b37ceebc645c7e671fe1476405d469151316c26dc1bf30f3b391f13c299e078ab260bf9c73c4d12e7884451119b44116164167438eaa4ac7562dccd9ac92ded2ebc0b85f069c3e5598e19e02713f05d7548c510209d9e4344fd110ae0660e299ecbb7d27ac950ace1af6aaad167514a6a6cc0a7fe3212b18746ec8e2c2c615cdd0c07515bccc42d475", "067d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e87f2e70a8b9232395faf03242e8d41e7097acd4f110215ae4f1c21e826dd60490c48ffafb7a4cf249a6909d8fbff6ddfd3f500331ce755bc2f73b79afc0800987"]}, "failure": {"scriptSig": "", "witness": ["4d09027708c97aa828833b11b783b5491081b1284c4f33ce5be3a35a4dc94744136fa2cd391e56c9a439e360a518c65cae46495d4574f86817dcd16bc3a3213f4c7d88e0ba8857d3b152f2b2e48fcccdada96afca309af0e78c23dec043b6f39f2b3f333f9f4675f15fa1f241e6a08975968b985b18415ddd5b73a092567ffb72cae99e975a8d0eb1d9ab9ec238cd331baaa2230f211e1ff898256b50e67890468947aaf693273b833c736f724fc73ad991bed14f06ab346440d6dcd960c5ca6949d874cf8a40b269479171fd4b7444400a48e10c420de484ffe9ca2739c7c2cbab0029885b837668531acc7ec9dbbdd28ae206dbd599e55c11e952c593b055a65c55ae9088f94248659c26265b8f68c00004b4d5cde70c38966d13e9cde87648d19a89df27909672c047ab5fdd42e482dd0315161fe54d7c0a8e7d330e7e17a69fecb4a1bba8df1ea1e4296c00c6099f8d8640357924af89a805814fd36512e59ce52d10350e67b62398dd708ae41f0e70ebcdb2c81dc72b69e5c5bc394709fbebc9c1b5fa58ddc3959c3ecde73e0ba690a2c6afc5aab47cd0c2138f8d1c4cd049bd2a239f3918265b30a6126920f8b142d3cc96a368b86e1782fc2d1f501837d2a16d0abf1e31ea47e605c5e6d4725a34bfe2b6d1420a10ca38bf362b3c3ecd34d40d5222a270842221d424682d0b6ea7c4b347543ccb2e0d383d32a9d6326bb81e0401e6ff36a84e16d2e75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936432946cb8c3cdde7216acad2d64eb2e5d48360b34b21542ce9dd46c17c6dddcb6ed3422fe95872366e2174646ef4116c9fafb56aaaad9ae25dbd472ec9cd0fc1c48ffafb7a4cf249a6909d8fbff6ddfd3f500331ce755bc2f73b79afc0800987"]}}, diff --git a/txscript/data/taproot-ref/d023d686290f14c19a40f74a18a2c183ac38c02f b/txscript/data/taproot-ref/d023d686290f14c19a40f74a18a2c183ac38c02f new file mode 100644 index 0000000000..4286736acf --- /dev/null +++ b/txscript/data/taproot-ref/d023d686290f14c19a40f74a18a2c183ac38c02f @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a4010000007ffa04c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b250100000082473360dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0b00000000b573fe37040fb04f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e790c8515b", "prevouts": ["d2ef120000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278", "8cf01f00000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "df861e0000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["da", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93647616881cc706df192d68bdb7ce4fefac112c6e83b2fc7e7a0b73ea4516ce84599aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb41dc38fa67d6e370c9f405c2af01822f370dc317d6e78d2f71aa14f0ce4de56d6ee4d75780d36bffae9b56136e6d27c02b8d233efdc800bb260bfbba6a6f94b87"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e116c8ab92abfbe4bc2686b5b42764123e12e1b7fae7b64d8b1bf7005c7df7fa0a3ad7647dae649c97c815eebecc244cfd5d14ac6da92e0e18049c71625e2af9496ad20bb4e3465af36c086d3f45ee510bb6828f8cbf764ea9958c57f38670043d"]}}, diff --git a/txscript/data/taproot-ref/d07029fee875ecd9778957b1eb1b6ed3ba90c94a b/txscript/data/taproot-ref/d07029fee875ecd9778957b1eb1b6ed3ba90c94a new file mode 100644 index 0000000000..6a78adcda9 --- /dev/null +++ b/txscript/data/taproot-ref/d07029fee875ecd9778957b1eb1b6ed3ba90c94a @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd401000000a64a7c9bdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2f00000000f9b73b8e0300959b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a695000000", "prevouts": ["8f217a00000000002251204bd530dd92500289ca536d9e0216beec7b39c81554ac6dd1e9e4cc3828e76161", "ed1f240000000000225120e9a13f65c3f3d085beb38984e1c9fb296d2b0d4cc9211abac3477617752bcef6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "fa7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93692144fa78a37f9d4158f2341b3f64ea9d93b698f8b61fb7d7e21bdfd4d5c0b363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ef1076b289256cd19daa60d704e81db3a39e457bb71d9d0e29c4cb2075820e5e1"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c5b5d638e62e1ee83083719c01950228b7d23e6528a32df7f751a90376aaaf3e9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ef1076b289256cd19daa60d704e81db3a39e457bb71d9d0e29c4cb2075820e5e1"]}}, diff --git a/txscript/data/taproot-ref/d076c78276e47d5f2551df88390966202a644ad4 b/txscript/data/taproot-ref/d076c78276e47d5f2551df88390966202a644ad4 new file mode 100644 index 0000000000..41b87948f0 --- /dev/null +++ b/txscript/data/taproot-ref/d076c78276e47d5f2551df88390966202a644ad4 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8300000000f7f2e8ffdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c620100000059b834bf029896b0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb18bbe4d", "prevouts": ["86e863000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696", "36094f00000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902452dd112dffa504dee00bb871d5fb4f4cdc70bb11249957e0e42b70388c4a35d888c1540f746007436556326f9f553b5e8fc84ccfeaae44d745d9111f51e6ca22c76388fe40c280094e2d50b8eb25b3d5d3f8a901851dddb1357ee99fbd5de701bffb10f097a8ea1e51916519b83ee492a5cb6dff803d7ea9f8817de5981ce0a6784288b95334560faab08243f18cfd85ae93f45ae21b664c7c3ef2107879ffe657f4ae9a4191b0ae3389d693b03b82b13b6fb2eade79e6fdc8b0620f27893d87606f39c26c0076f2e1ad5212e6b08f11e5dd5b7e14a135f93d0a3941ac2bf08b272c73146298e3cf6200bf885886acad5056a355aaf6a0fe27d668948112b32abf3dc83ea45b434aa9e66871668d0fbfdb641cccf5f34df7652fe634d33b674fa0a247d7637c467853e91cd41150a08ecc9aa8aac03cd223b4c9cc85c24b8fff7b7f77069a5ea7dc3450efd896b6cbfb3cd07764170fc30472b14126c987fa8b5fc53fa4bc5fb46cdb8cf7e32982bfb09c2c04ea3924799fcac32e5363b3fbf0eb85b291b1dcf2b0c7b31121af0b8f61ec158cbb5822dd1cd01195cd89ad9ab03ad276c165c0766f5a90241ec0e0cc152803a23389d7af769d970cb37cec53471d5ba61638c456d3eaa0f5b5454ce50e0b5af0c243810611e07968722358e65d5a0658d9609214e6d90bacb2e35981e52a2b1743fcaab7e7b276d85ceca8df6c40ce9b8508f882b8675", "ba7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936912fef94e10f79ce4c6c6612f6fe3346bd2414e9192a19778305ffcd15009acf20c3a872da93914874859cef7e5edec23fb149ebdaab98333cd5c691dfba4028fed5a24f2185242e3d6c1310740c566533f3942992fafe5f5be2785933680ed6"]}, "failure": {"scriptSig": "", "witness": ["4d0902d2208c9246ee7bc47f92cc9c50637293d565e48a057c7abf75635165c186271e4ea5aa83572f20d79ee4ae1669fff288bb7d2ecae5f7bce411fa9906cf9ab36ef8492e397cb36baca77b073614a90111b5b4fcb30bae5be7b0c165d1caa26fca436f608e507ee81e8dd4c003a5eefb33cd057f0ed28457e6de9e36699586b005e80c2712a8081ed204774657de77b11e2ba60b1d9c9b67a72b051088ec912507161f26b3ec7ecfe19cf4898eedc1cb356851099eb587874b83b6dbe44cc06c4004f1b27753d9e336e9f02535dd635f5e618663f2d8938af2ad8a564fe16ae9daea0b2521267c3f3da68e0759eadcd8bed2758f0905b6d41800fb3c2b3bf3d95b6219a9271804a8cfa1cbf23bdc5aabd4ff73c4b36d313162c832b72aa4ab30dd1eedc1811b7f9528b3698a42629c6ce46b57479090146564d6359f006b31bb11e0ca7c499c7366a4f0a872f283b3b5b95d9d05e3e2e8ed33dbce69d978a5f30e004e7452907fa67bcf0e3227569aa2a3f69378e147ae2419a3902be080524190239fbca5a6a5d4817fde99caa5671340db54fc90acac1a9eb412b48f83e53d7d521a24dd811767905674692294862f85517ea0c29e16b3e11ca44aac46380601d72fd45209082934ccce8a36f4b57a138ce36ba0d19807b9040ba897b8e3ea6604eba3abad5b4cc280b6c6f0452955ae9e9af5c8ad88e8dd0ca5b0f0e7caf9ecf51a5b9699fb66cc6175", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93691e172e3ff7e60f8bcc64ca363376b5038c5dffab23b3a4652792c10b41fac7b20c3a872da93914874859cef7e5edec23fb149ebdaab98333cd5c691dfba4028fed5a24f2185242e3d6c1310740c566533f3942992fafe5f5be2785933680ed6"]}}, diff --git a/txscript/data/taproot-ref/d0a5a7631c5914f69f44abe8d926e7ec265b3853 b/txscript/data/taproot-ref/d0a5a7631c5914f69f44abe8d926e7ec265b3853 new file mode 100644 index 0000000000..1aa2031843 --- /dev/null +++ b/txscript/data/taproot-ref/d0a5a7631c5914f69f44abe8d926e7ec265b3853 @@ -0,0 +1 @@ +{"tx": "4c754ce802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9700000000926720a3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c80010000001f7d298004572a9800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87b7128437", "prevouts": ["effc4c0000000000225120e181fd7d5a5189f175c5e112edc7401a8c528393c340dac4325961e6f48db1a9", "631e4d0000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "success": {"scriptSig": "", "witness": ["026ec354772fa246b3f0394a9e69110fd2c48311f27d0c83cf8b19d69fd72b9f68464473cc633b4bbcc97889ed4f974651cf2c418b211c75953a72324b8c9c3e01", "f344c8e4486ebdcd988b2c662b6fc4536264f7c1fcaa7f", "7523fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da5163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000bb98778e8b0119682a9e95c76c4762be2b7b0bf0af1ca73bc0d6917921d524ed593db1d8acb3dfc8a5301acf8994f458dd9d809af960217efae134cab2d25a5f3c460051f84ecccb8f94d91e8f35ff993881479ef3c2169078ea27fc1efd1879a83cc0faef5622f00b8684cf9aab916e899c621cfc98f9f8c2408069ee7742b8df1aaa521baa55c818edd5f58122a9dabab919dee88588727f15fe990b660ae80000000000000000000000000000000000000000000000000000000000000000938d5ff6e156e40e5c4bf0dde7f997191f0241386be244bc16425fbe8cdc6f0ef602ef92689002c6bf91fb285c22f83902557ab54b48323f842af71c4a5aca8bd17144d302f4672930a59a8fd6f3285880cd0ed72ae5907c677bb5bb848794afdcb2d5a71197cec237324ce49a219fb4b348d43177ffdd620782ec813b0b718dbb422a33ecb9c5fc1baa551d82e3cc524ac42ee5adff9057861b868ffe286ca8e287bceebc9035fdd129c920261484dadf8c85121151a621722a1712b23dff52ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc38abd44f49c2804a30c3ec31e3b0967d877e32532956cef050547e598b7b6c70000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4b198453811f4c7a4bdd024a8af2c1627be36162779620096c812afd232c90833dce75b24e5e6d274d07e66a9a7da01e56ac0c23936774565897466c1386d3e602343ba7b60b2d0bfe9adf8187eee7f66fe6e07b90e1dd329b8842c2dd191ab003c4ad09d6bc9e246e261f33ceff387720f0fdecbc8059efd62d26726f9474efe1ad2a1021334296cbdfddc898cf292a71591ef70ae96753f9a2981208137b980042b88f0b1d9b2df68a486c1f31d1954350c1ad6dbc6aac04fee62bf9af05992176c77eb7f499dc36668a407834cfd7ac683b66ee2f492c30b665576b40cd3c7e7dc5f13bbc29aa99b7843fedde809b37a57e3f67fe64be4f701efe2c48a46eb4b083ef651d082e8e1a71eb72b6551e6fcdc8402db81e47be0db1fd619d7437d921c5102703ee65f7f0c9c8f3d8bc7e85120bbb075fddf0174c4891020cde023d9672046e2971470903d516190724adb48d739135139e61752564471a4998b5505afd0b845ccfeb86985325af1e27752d0b7eca51204bf535d2ef9d1a46a3d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff173ac20ed5a5381f618aeb45a84c2d2f87ed17c8468292a432dcfc6f552e8da6ec0ea6b531c8335f869772adaacd80c5eb252f3d9b814dcaad502c1f975db75afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01feb7a289dea91399595dcedc43b350f0a98563ce843d6e8ba7cc624f22d7033c74c6fb62ef5d452fe8a5df2de783272e8355b57f1d01ee014414364d40d97", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["026ec354772fa246b3f0394a9e69110fd2c48311f27d0c83cf8b19d69fd72b9f68464473cc633b4bbcc97889ed4f974651cf2c418b211c75953a72324b8c9c3e01", "8d395c7053ebafc530ee7f3432c52796fe7bffb2c857", "7523fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da5163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000bb98778e8b0119682a9e95c76c4762be2b7b0bf0af1ca73bc0d6917921d524ed593db1d8acb3dfc8a5301acf8994f458dd9d809af960217efae134cab2d25a5f3c460051f84ecccb8f94d91e8f35ff993881479ef3c2169078ea27fc1efd1879a83cc0faef5622f00b8684cf9aab916e899c621cfc98f9f8c2408069ee7742b8df1aaa521baa55c818edd5f58122a9dabab919dee88588727f15fe990b660ae80000000000000000000000000000000000000000000000000000000000000000938d5ff6e156e40e5c4bf0dde7f997191f0241386be244bc16425fbe8cdc6f0ef602ef92689002c6bf91fb285c22f83902557ab54b48323f842af71c4a5aca8bd17144d302f4672930a59a8fd6f3285880cd0ed72ae5907c677bb5bb848794afdcb2d5a71197cec237324ce49a219fb4b348d43177ffdd620782ec813b0b718dbb422a33ecb9c5fc1baa551d82e3cc524ac42ee5adff9057861b868ffe286ca8e287bceebc9035fdd129c920261484dadf8c85121151a621722a1712b23dff52ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc38abd44f49c2804a30c3ec31e3b0967d877e32532956cef050547e598b7b6c70000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4b198453811f4c7a4bdd024a8af2c1627be36162779620096c812afd232c90833dce75b24e5e6d274d07e66a9a7da01e56ac0c23936774565897466c1386d3e602343ba7b60b2d0bfe9adf8187eee7f66fe6e07b90e1dd329b8842c2dd191ab003c4ad09d6bc9e246e261f33ceff387720f0fdecbc8059efd62d26726f9474efe1ad2a1021334296cbdfddc898cf292a71591ef70ae96753f9a2981208137b980042b88f0b1d9b2df68a486c1f31d1954350c1ad6dbc6aac04fee62bf9af05992176c77eb7f499dc36668a407834cfd7ac683b66ee2f492c30b665576b40cd3c7e7dc5f13bbc29aa99b7843fedde809b37a57e3f67fe64be4f701efe2c48a46eb4b083ef651d082e8e1a71eb72b6551e6fcdc8402db81e47be0db1fd619d7437d921c5102703ee65f7f0c9c8f3d8bc7e85120bbb075fddf0174c4891020cde023d9672046e2971470903d516190724adb48d739135139e61752564471a4998b5505afd0b845ccfeb86985325af1e27752d0b7eca51204bf535d2ef9d1a46a3d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff173ac20ed5a5381f618aeb45a84c2d2f87ed17c8468292a432dcfc6f552e8da6ec0ea6b531c8335f869772adaacd80c5eb252f3d9b814dcaad502c1f975db75afffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff01feb7a289dea91399595dcedc43b350f0a98563ce843d6e8ba7cc624f22d7033c74c6fb62ef5d452fe8a5df2de783272e8355b57f1d01ee014414364d40d97", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/d0b362a6e10e2e3ca3df573c3918408d11230109 b/txscript/data/taproot-ref/d0b362a6e10e2e3ca3df573c3918408d11230109 new file mode 100644 index 0000000000..d269574ca6 --- /dev/null +++ b/txscript/data/taproot-ref/d0b362a6e10e2e3ca3df573c3918408d11230109 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1901000000f2b706a8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb701000000d5414634042e88c0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c6010000", "prevouts": ["2f50740000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f", "994d4e000000000017a914a68ade9e67dbb5e8acf044461cfd5bd8dcf592c387"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8672094c3f08b9327f7ee48bb8899708766c48e78ef53e5ef370aaf6f5fa99ca1ce42d201fd753cc19d7433434234602e4af838ce265353441a761579b9ecb89c78d53ca9a9f93e78db88a883cc9c42dbf55ad09041fa37b21a93adcd191d7180"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facaceb5ed46230d7b49b5ab2b34a8a36729addbd68724e584e32fb6f2cc866bc08d213d90ee48874bbf2b18160b4fefa78452fd9fac91ad5f640de90a3ceda28c"]}}, diff --git a/txscript/data/taproot-ref/d0c14f7b59f5b7c5e2348a842c4f17589992edef b/txscript/data/taproot-ref/d0c14f7b59f5b7c5e2348a842c4f17589992edef new file mode 100644 index 0000000000..4884f83cc9 --- /dev/null +++ b/txscript/data/taproot-ref/d0c14f7b59f5b7c5e2348a842c4f17589992edef @@ -0,0 +1 @@ +{"tx": "bf72937702dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c91010000006ea375f4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd700000000a67e3fba04f02f8000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7afb7485f", "prevouts": ["158b5f000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "80a3220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51e96c6534a767436613e49f724d4ec24036cb4bdca8403821be2a67ec4c00c0e3731d32c4c28957ee8de75561afe63689e2428997edbca796d37c8feacf80dd0b4e0df2464f99a35d5bc9fbf69ae3045675e957332f77327dfd622124d00cb4df"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93663b062b9ef0e1745417b82292d0a45beaaab5fddfb801e218eae4d41ef530e1af41497843ee5deed9b1c1ba808c351924818107785eb2ec7667e528f438b571239c06a64e39d88ea3d05132fdd32c8e90a6b90ff74e726fde2d8f99de3a7b89959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}}, diff --git a/txscript/data/taproot-ref/d0d80b81785e11a47eb4778cde0392ceee57d442 b/txscript/data/taproot-ref/d0d80b81785e11a47eb4778cde0392ceee57d442 new file mode 100644 index 0000000000..cd07207af7 --- /dev/null +++ b/txscript/data/taproot-ref/d0d80b81785e11a47eb4778cde0392ceee57d442 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf101000000673c277b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4370100000035cb6dc58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45d0000000023dea660014dee30000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47879c010000", "prevouts": ["f5ff280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0bce3600000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "67f0410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_e7", "final": true, "success": {"scriptSig": "", "witness": ["b44a270191ddbba370b2df3c8772c2f3e42831dd5be0b90a5cbeb0cf8ce1a66083d7842fa44ab943f434d94ad5c1b0f653a1760d98d66dff6ac2956033d0c9aa01"]}, "failure": {"scriptSig": "", "witness": ["2b78efb142fce672572cd76fcc69165e2efc16527d8cf902c0c97f8ab89297d438729b24433e96bb183b5385ca9c72379393b5f55557b3a967fab001440e115de6"]}}, diff --git a/txscript/data/taproot-ref/d10cc817535fbf7ed3ccccfffd59542e31fd811c b/txscript/data/taproot-ref/d10cc817535fbf7ed3ccccfffd59542e31fd811c new file mode 100644 index 0000000000..315adbd66b --- /dev/null +++ b/txscript/data/taproot-ref/d10cc817535fbf7ed3ccccfffd59542e31fd811c @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4300000000d2837e2e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c484010000003ef0486f03696259000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8761727c27", "prevouts": ["e16b230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "43df37000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c0", "final": true, "success": {"scriptSig": "", "witness": ["41ee4a5bfdeedd772913161e78302877dfbc4cc9dbdc3a8afef12267a74efac53d11e4410662363c2716887073db7e0c39233f6d6585799112bec5039123de5082"]}, "failure": {"scriptSig": "", "witness": ["2bf82e8403f67bf0e2f3c6fdfa23374316b64b6262919ad503c27710c989f7f42365bb6371bea7157eaa8e62a7db79881a31a820cf97a3fc19f8b2377efe27a3c0"]}}, diff --git a/txscript/data/taproot-ref/d120192543d7524d72dbae6640c1fd01b655ba8b b/txscript/data/taproot-ref/d120192543d7524d72dbae6640c1fd01b655ba8b new file mode 100644 index 0000000000..3bab54a9da --- /dev/null +++ b/txscript/data/taproot-ref/d120192543d7524d72dbae6640c1fd01b655ba8b @@ -0,0 +1 @@ +{"tx": "02000000017cacf58c1885ec7a53b7658a58e4f1dee7e8d7a954fb736b3a502279c0be18ef0000000000823ec9e901aef6adca0d000000160014bf1a19526352877c6b170dd8786dc91b1610ae1cfadcf14c", "prevouts": ["87dd816c1100000022512034153a16ef8458ec2412ba42dd5be0fabd8b4c2f532d179dc958fc1fca3cae43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid_opsuccess", "success": {"scriptSig": "", "witness": ["8c62f256a1571e9f48b1901c6193c928ad34746ea514f6d6b11a2ef54c82ad150e244978614c20e9aa60a3270dd7fbdb230e6b28fe98190090fa42ca691bacf2", "20cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f3ac00635068", "c0cb0ba18c127bd01c824f94fd2578ac4109c167b40bd92fd4f8ede9600f7f41f370d37925ebbaa58968ca2d1c370a50dc7325130308285a7d9868d3ad5a34267b01c94ae67cd857f8f23543b618b38154b6c0432568bb8cf7638fb55d4cc0a24e"]}}, diff --git a/txscript/data/taproot-ref/d13e9dcbf612e2b605c913bf461a40c14c78981c b/txscript/data/taproot-ref/d13e9dcbf612e2b605c913bf461a40c14c78981c new file mode 100644 index 0000000000..933e2d3a97 --- /dev/null +++ b/txscript/data/taproot-ref/d13e9dcbf612e2b605c913bf461a40c14c78981c @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c26010000008481b789dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6a000000000539fbbf038fa4a4000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487c283824c", "prevouts": ["38d65900000000002251201902cefa81d0b0fe2050344a0485b195b36f31ece5900d0426a9de0fd01dcd1a", "f9154d00000000001600141cc39a492a6f67587324888ae674f2f534a7639e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100c97fc9e3a7076e04418abfac48194f9096d7796e2ef4e86c039e00e620c8d595022061eff5f893d2f720219fb5da7830f9c65710419d91339eb976a9a5e6e151226101", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "", "witness": ["3045022100d8e2f7a50c8e633ef64221d1574079a291550e12b0a1d7f8fa744c052d220b5d02207e6bc0a05d68076b1953f2f72c1302c329fb32f1d3c0e598475d77701758237201", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/d145e690ead8e8b91dcf655a058473fba40e05c4 b/txscript/data/taproot-ref/d145e690ead8e8b91dcf655a058473fba40e05c4 new file mode 100644 index 0000000000..31bb8d7968 --- /dev/null +++ b/txscript/data/taproot-ref/d145e690ead8e8b91dcf655a058473fba40e05c4 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc4010000002b6191afdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21020000009884a17cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1c000000007c4b09c60226af4401000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd3000000", "prevouts": ["c299750000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "05cc5a000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "080976000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6adb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936264742859895a6868f8bab4d4afceacc8909a577d10be3fb51e14ab1077baea299aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4ba0f4accdd80d494e1b95824e4feb55c95caee559d90e25fbf6396e2b6be61303dda2dfca806ccc9c3ad62846e64b9ac16121de5d926db5bebf2e82f8dec8d2a"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b7f6b7f6faf43deefc8dfb90058dbe61b727862c364ff314077bff4a6c878d2754e6d4b188f4ba3829c97f16419e7d7896d7c05fe6215d1417ce194d9971cb9e3dda2dfca806ccc9c3ad62846e64b9ac16121de5d926db5bebf2e82f8dec8d2a"]}}, diff --git a/txscript/data/taproot-ref/d1624ab2e4dceb28dc1e7d8f042d85271b474f44 b/txscript/data/taproot-ref/d1624ab2e4dceb28dc1e7d8f042d85271b474f44 new file mode 100644 index 0000000000..3668ba0fbc --- /dev/null +++ b/txscript/data/taproot-ref/d1624ab2e4dceb28dc1e7d8f042d85271b474f44 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc000000000567fd09760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e3000000006cc4beb260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703901000000fda958d3043a449000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf24a3044", "prevouts": ["c9366c00000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "2745130000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "d0db120000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063ee68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c5d177712b0cd548c59bcfc2592962097a3e59d4c97937b4438e3f3d5730f1a20f3b0db014ceaa26ae02ffb8f31853eb721e6357de034fb71f3898341a9ea5240028cdc19f89baf6c362287c7c7841c4536091540a9bd978c440258b5fe7844c439ca2b6d52d4fa79aee6ecbc14a8999a29f1c28c4c5c5b9dd610517c3b748ae"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93684766e391fce98464b6a114031f5ccc7f792c1ff341430b2176744987b7570923225856dd898bc2835af0cd8c351393955c132e627f28271e91b4e6043d8131340899fd8696dac9e3afc960f0a100b615a3c324ed3a125e98af98336f748ba56"]}}, diff --git a/txscript/data/taproot-ref/d17443611cb2c74ecfda516700477ecdd4ccd1e8 b/txscript/data/taproot-ref/d17443611cb2c74ecfda516700477ecdd4ccd1e8 new file mode 100644 index 0000000000..0d014720f7 --- /dev/null +++ b/txscript/data/taproot-ref/d17443611cb2c74ecfda516700477ecdd4ccd1e8 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8401000000120a51ffbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf340000000013508af90254e3d2000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4872f19bb23", "prevouts": ["9bc45e0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "17e67500000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09023b9d47925be78b5d388b6d784408664a9a561a65b01fc4f675086acda230728ee4e1beedf6dbec0fe40287000a79bd3e91d72c72517edae08d5af32f9b823f6ccfdc682a7dfed51d7034240e91b3530c12c97b3c8598e165cd1d27006b19a24d23e96b32bca1e69bcad2e94ce6e36eac7e974015b8cbe3686d3c4b926b006c4f084648aa3b9f38ac2eec4dec49fd0a995f79b9b7d184bcf74a10cd932c376997479c8a53fe82a486b91f8e022491cfb892ced4b0d33103d161c61c000223f557739496486d0c8a4b4b1f9b9a4131bc23fd23ab6225c1d1b565c01f6b9f8e9e93273ab21a28f6d1b3561d38660ad60091dcbd2ec29ceed09d536132110c788dae73eb76406b7ed0c247f209e123a9d77a6bbc2b578a88f7a8acd4050d97fe1e52d8af325742dda5f5ce67cb31c6df8fcdb84befac948909e22de9f1b6513398d297083da4e6ed503438f5cb8eb2a264d04677fc74dc747a5a746151575a4cba425995a16e2a66035900c69425242818f282de3abc501ac314672dc53aec77a8600de8be9a253a24cf48364f9a4b69e3eedd88693bf7a75ccba08b4d106e480937296916c499ce84ff0e7185de1f02e8647a280117b6033cb840ea024c40a3d4c72d45929af73c8dfc8fe7d8fbefbbdfbe69a7b2943a61009c81e5faac43cbd53a7e2b693ac260c61f9fd9498b01fbc467394969c26c8ffa54dc0d889c79332eefc2f32be05e172a458875", "327d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366fc0e1156245507405f9d89b0f31139d8ec5e61fa01242e57235d244728830438ce3cfcf38b656b5bd992972d83f897c8aa5da1de7c0e12ea4c0aa09cdb3dc1d2e4cd18b5d1ec472eec5a95c6c9d67ba3848eb933b0b41a8c6d3176a27b07997"]}, "failure": {"scriptSig": "", "witness": ["4d09026343d381cb50353a61f09f2a021fa74437ecd6d461707b3a97fd4ff005456a0c3e6b3e75642463046c65dbe4bd98623a64c1940da4b93b5d7732abee3259c9cf71425da9f43988c27f144a56d2a8a85c33f0d5dd07ffa309b6683517ee28ffd8facc3338a129d67272c3ea4c07710495d127a7862b304a3ff9e1f177d244d4ea409196268a67b07993a679bed84781f6f792219dd6bbdd7736f05a6b4934edcbd24877b1afc2fb112ca30bf9d1bb159dd48d4476b12e603b76be95bcebb17482faa65f35a4788fec267ca709bd3c517acaf88f1fadef18faad566c4f603d3e468620ab3f393b4356c79436b4dc0dbef92edc8d3991b99924d44c7339fa511dde3a3d94d036760fb533de78860bb33ff3dfa464f28eba733fb672ebf3be46a299a39b309803e48e721018587f8ba8121b6d38b2f1f5ebc749947c164e0e63bc32f8846c7591b6bdc6aa245a503f2cd0bb8578f158696d5a57aa785b7ba3c9c79565b8793b7a34d276742c88f2c2bb982889ac54bcb5648419001e4d7e38e1aa379ce88e59d8b6dd1ae05ebbdb0457f2fb0cc7d7125e766ceb8c407b004d4802f21ab6313f731906702b00a81c8ce40c41e7f8d418e9593cd6b8b8ff7f26ec66eb5716b4f452ea66c4582c4793eaf18b8f887ccce715143eedc4cd402ca9d3f3681d8203e648ea1784219ae9fd62db3d80a298ba5a7b91ee6f5a473d6781916463574f47a8ba9450ab0475", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e08902a07d3a610262cf0bf6826274beb2bca0848f03750f1d66d9fdb1ecc982925d31a4d328a06fbd663a9de03f4f743ae6731d946a7b64875ecbfa9fe5ecb492e4cd18b5d1ec472eec5a95c6c9d67ba3848eb933b0b41a8c6d3176a27b07997"]}}, diff --git a/txscript/data/taproot-ref/d17802655b5504bb0405ee7934ae6e14c9c2f6af b/txscript/data/taproot-ref/d17802655b5504bb0405ee7934ae6e14c9c2f6af new file mode 100644 index 0000000000..3711f62a91 --- /dev/null +++ b/txscript/data/taproot-ref/d17802655b5504bb0405ee7934ae6e14c9c2f6af @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7000000000a124ab458bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4260100000088e9d0d702bff683000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874b010000", "prevouts": ["493c4e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d06538000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_bb", "final": true, "success": {"scriptSig": "", "witness": ["2c1f8a6b8a3e1e65db41fb16c34dde8abbf9a07dcf9d1d2598d82f9a4b109d6c3026cf4de56c2c3c2fecc82acd80738cdb3d4277950cb6b5a53937f10f4a808281", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5dd4e6192911482efae6143db50952abbce491617e685dfb17f5fc8c5eb0a2dbe1f71c0cb031479f1b3e701db46fbffff3befba0b0ea9c0a5297333a1f778f98bb", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d17b2da02d1d622d7b71dade71d9adc392999c5b b/txscript/data/taproot-ref/d17b2da02d1d622d7b71dade71d9adc392999c5b new file mode 100644 index 0000000000..170ca7041f --- /dev/null +++ b/txscript/data/taproot-ref/d17b2da02d1d622d7b71dade71d9adc392999c5b @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46101000000b6d1aeac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707b000000000a17a0dc015a9020000000000017a914719f78084af863e000acd618ba76df9797223689878f020000", "prevouts": ["2a803200000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "dc95120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936428394a21751eb365095acdba6a51fe3b8c76f6f3fbac7b096ac1d441a9276a33f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bb0de8cab6875867027c85350e6845db37b89c1faa2a12b075d8db116249f7bd2367bb7d11bbe7d9666c447942212a409021a53e3151df7f84d090727acdc4c9"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a022e8e4f1240b3c3d4bb5c70f2b4ea702b5d8a670f036755e200b5950ffec075bb8659128f7d307893f477315172a6feef29cf3fc1fd27176c3d23e09b029752367bb7d11bbe7d9666c447942212a409021a53e3151df7f84d090727acdc4c9"]}}, diff --git a/txscript/data/taproot-ref/d17e92c55da82ddc95d75ddd15779fff2868ff46 b/txscript/data/taproot-ref/d17e92c55da82ddc95d75ddd15779fff2868ff46 new file mode 100644 index 0000000000..6bbfef6ce3 --- /dev/null +++ b/txscript/data/taproot-ref/d17e92c55da82ddc95d75ddd15779fff2868ff46 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e3010000008ec9c53704b6083a0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc49f1ff30", "prevouts": ["7cbd3b000000000022512000397e1d57464f1b51d5b2f938080db6c4e519ee29109bc6f6c1d6348cd27c4a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["5213d545740b1eee420152efd776896cbc83c605e7beca755e6ac4956f5c0e56da1967fd70074547a77d44379ae0cce2f3513f89456347155dfc985d416a50a301", "a2623e62430210b79dfd89e9ecde828b1022c4a38f949a279f089b5dc757123af75661db2ad675fdf7ec98dd8b8a91ff17849a0ce00d81cec63b9b69407330ad5bea44ac0c67b0573f3a36a4ccc4310678c420e3002fbf3767ce59020f35b136fc966ecaf6e5bfbd680595b7ce557e8fbbb66afaad440316415c9f040d0e09beddb0162209f6ccda6702a45cb9f84615695d23149759520f434a3a5b58bd7382", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936633863466ba87c1899c11f16db5b5be0b750ddadbb4e4dbf6166f79835a38c4430f887e27b668da7b3424a30decccb6d55871a4e29eee8a603d0c8f2f4fe43ed80bd6026482109028f84842e41827e2a19fb594fbebb92d759210479d260a45dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd76256e657933b8bb0a3ec931de5f3d544c0494761c33fc05af675339868669dee2fe44c250a9724efe4ef76ee53bd67b02e08dbd5226c6902177c0148ae73cfa900e42222759350e9b4c2dda999abc00ff6c2dea9524b5f9c6b9dbb7e67af10321050f369f8f4d86f2a13beef36eab6fb9986fa6476de7f6521b2f2571887ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160f9c68214e30f2520000c0ef6d7596e0ce0d821c8b93328e13c5bba3fae013a57cb6f757a543ac0f10b44ab06156a457a3793e3736d517badbe684390a3930464395a806820194d875d016530f881a948b5b63d5aaa812ca6e6850da17e6510000000000000000000000000000000000000000000000000000000000000000d8c5a17c42d6966898a04caa8deabddc88d00d45a1e69c3fff5d96ab709f9fd63e4924cff277f09d336755660334144b1f08333d1bbff0b53bf0650f86ad4624db4987771bc4e0593314162db6515b1a797790cb487b94090c2574bb44a7bd4dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}, "failure": {"scriptSig": "", "witness": ["5213d545740b1eee420152efd776896cbc83c605e7beca755e6ac4956f5c0e56da1967fd70074547a77d44379ae0cce2f3513f89456347155dfc985d416a50a301", "418e0e04c63da5594a93360f940424baa87943afe2b6ac7da03514b687d0de15ddbc8867c4be25f77029eca788b1d7a203898a129f9ed4dcca1ca2abcadf8d3ac5968aa84f17357deecc1eacf872c13f8e69bc5d941cb60a3cd008c685c2968c3d19c6a85df215b7a02232e5c5d114c885238996d35033878b2b7b44e7139ad7982dd28f89ff4e516e66f6ad133f236d7ee84f06c410a7b5dffdfa387284b5", "75005a20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5a8820871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936633863466ba87c1899c11f16db5b5be0b750ddadbb4e4dbf6166f79835a38c4430f887e27b668da7b3424a30decccb6d55871a4e29eee8a603d0c8f2f4fe43ed80bd6026482109028f84842e41827e2a19fb594fbebb92d759210479d260a45dfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbd76256e657933b8bb0a3ec931de5f3d544c0494761c33fc05af675339868669dee2fe44c250a9724efe4ef76ee53bd67b02e08dbd5226c6902177c0148ae73cfa900e42222759350e9b4c2dda999abc00ff6c2dea9524b5f9c6b9dbb7e67af10321050f369f8f4d86f2a13beef36eab6fb9986fa6476de7f6521b2f2571887ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff160f9c68214e30f2520000c0ef6d7596e0ce0d821c8b93328e13c5bba3fae013a57cb6f757a543ac0f10b44ab06156a457a3793e3736d517badbe684390a3930464395a806820194d875d016530f881a948b5b63d5aaa812ca6e6850da17e6510000000000000000000000000000000000000000000000000000000000000000d8c5a17c42d6966898a04caa8deabddc88d00d45a1e69c3fff5d96ab709f9fd63e4924cff277f09d336755660334144b1f08333d1bbff0b53bf0650f86ad4624db4987771bc4e0593314162db6515b1a797790cb487b94090c2574bb44a7bd4dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}}, diff --git a/txscript/data/taproot-ref/d209841a9bb6b9ed3a4954465f454a0d304ef888 b/txscript/data/taproot-ref/d209841a9bb6b9ed3a4954465f454a0d304ef888 new file mode 100644 index 0000000000..a7cfef78da --- /dev/null +++ b/txscript/data/taproot-ref/d209841a9bb6b9ed3a4954465f454a0d304ef888 @@ -0,0 +1 @@ +{"tx": "08a01054018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ba0100000063b897c10365303500000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac2f010000", "prevouts": ["6afa360000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_ee", "final": true, "success": {"scriptSig": "", "witness": ["b9954da706c9e42b2a7899115a48000cce3cbff5e669fcae880e0e4b6fd2e90bbfa8d904376cf7275e35885247b8df3aa48d5b57ae307d1de4b97ed53de879b303", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["9cc79cf95e40dc85c56510090eb746bffe18417404c5389872f466671721f53b43918c0b407b15c789c2190ce650362040bc4386019549c32a58a4e9246b3436ee", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d263cabcd95f3dae465820283cf9b428e89c02f6 b/txscript/data/taproot-ref/d263cabcd95f3dae465820283cf9b428e89c02f6 new file mode 100644 index 0000000000..e32a9d0c3b --- /dev/null +++ b/txscript/data/taproot-ref/d263cabcd95f3dae465820283cf9b428e89c02f6 @@ -0,0 +1 @@ +{"tx": "bc407aaf03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6600000000004780dadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9500000000b762a584bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfec00000000c46558bd01b5e525000000000017a914719f78084af863e000acd618ba76df97972236898718b7f726", "prevouts": ["d3706e00000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738", "a20f210000000000225120a30b9ec0293a7d9469ba59688876e580c43929cab6dae613a98b7270f0f04b32", "60e3700000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6acd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363699f0be280803bd87ec3489190568883decb4ffe607bdc225a59725135347c6fe052270a8089f5fc5ef9a63e8f4df43751c17d276a547e2cd275b71d0b6242a8fd238d2decf6f7142c55252dfef824eea080278838d8f4f1f0f617cfe47b5d91029910a453e765cd82c29c3b576a90579a453f3a941b6b6175fa922e9a13196"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367a22d20941183d012c749b02b1f998abfcaf580dc1273b137a622627b312eac248aa6a6dbcb4c7060082480e3e536b464146150e8b2e96d2b5eabf2aaf1fe24e9f4d7ab890a2001a7be6cb25cf630fcd24657943ff80a7c5a11988ecbf9e80e4620a19fd562e5ef578d66d29c84f34a4223ab3b995d34ad300c7b5f252d5e140"]}}, diff --git a/txscript/data/taproot-ref/d27d3711e16baa8c89ff9c90b6ed0622ca86ff8e b/txscript/data/taproot-ref/d27d3711e16baa8c89ff9c90b6ed0622ca86ff8e new file mode 100644 index 0000000000..e9b3f4e6f5 --- /dev/null +++ b/txscript/data/taproot-ref/d27d3711e16baa8c89ff9c90b6ed0622ca86ff8e @@ -0,0 +1 @@ +{"tx": "4b61cf630260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270550000000048887186bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1902000000afa4fda102cbb3790000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8728747447", "prevouts": ["5c850e000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838", "74946d0000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "c77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93684f69dbeafcf17cb0c1d0b541de5da243f0fb8e40c7c35b0ae2476c51c78eca8bb71aa1af8b43c653f5bd4a49a6dd2a2c220faf9f7ee0d38ca763740363240a33f5a7735bc8e0f27305ca0f6b127eb0c71998afa21cfa1408dfc03edc17ac2e42ff4035580f6aad3e4d48161cfa55cd77c0146622bf63e71def681bc3cbf8a6f"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93685fb25bfb3e9aa8dc2d3ba5503ee0e44a578ca0e52ee091cacf7c1e498936ff2100dfdf5c7f83af5d4cdded17045999c289d0f075ba6add5c0ed7b0f5c1761ac2ff4035580f6aad3e4d48161cfa55cd77c0146622bf63e71def681bc3cbf8a6f"]}}, diff --git a/txscript/data/taproot-ref/d2957d9af2c85119d0e66bf643c7eb85bda86170 b/txscript/data/taproot-ref/d2957d9af2c85119d0e66bf643c7eb85bda86170 new file mode 100644 index 0000000000..ce4b20d932 --- /dev/null +++ b/txscript/data/taproot-ref/d2957d9af2c85119d0e66bf643c7eb85bda86170 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b05020000000688d329dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8400000000b676ae7f03dd933f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688accc010000", "prevouts": ["1e2c230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7edc1e000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3045022100b9c272fca46b4e4417948f9f19e148d97fbf4ece274bcbff643234569df5b9be02200f7f72f031c6899a6c004a2a49d00349521df6b8263ae8621167c081249e524882", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["3044022026a718eaeab5c1c8b610484db1b3cb9e2269f6a29e620537b6b9f926e56ede9c0220419bce0d78f032a025bd26b4a5edd1c3edf560e114416c3891423296b6f4966382", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/d2c7c0da2861f14114f11766107a7b8aa6efd73b b/txscript/data/taproot-ref/d2c7c0da2861f14114f11766107a7b8aa6efd73b new file mode 100644 index 0000000000..7536410af2 --- /dev/null +++ b/txscript/data/taproot-ref/d2c7c0da2861f14114f11766107a7b8aa6efd73b @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4000000000968b3edf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270df000000007d2befdf02b2673400000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac65020000", "prevouts": ["6a47240000000000225120363e143e65a8c3ceb9072edb61818663e66ab42c4302b81f45dac8c3551b5de2", "27c911000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/checksigadd3args", "final": true, "success": {"scriptSig": "", "witness": ["34d7b6834c098f4c242e042d63d01ab0de2affe9b53a453a926bc43cc83955893c3fdff5a67a92f7b66c5c637277bc502b0c7005f40e28ce0a33af11b1ad2d39", "5420871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a034685013eb12d0936a5af43ae0e5638d7148ca8da311dd51cf2e290b05ed820ba5102bbf7fbeec60e292aba2a12d06acbee3d1ff3068be768a5f8ab1c15c8b5f95428243b01e6b613d868e39a3cd6f8053f3b8a58a5b42db19ed132d0fdc37ab205f68d8ec55f68ec14e7908e46173699cdebd091fbaa00eafb7815b9069cba262853dbe467a837dbe26fc7f3ad7cd7a62e462e47b7e1bb60054913e91ba6c655d89a1acb7a851de7428c381ead1ba6d1d417e8b953e51f7c670e3863576c3b88611529e8d8ac178c50676d0c91193955b6fb062740847f08c84da5efc29fd5abdcdd61aefa92e26b138e07522d025d19d1fad7762f9c1f70685829a115613fda528b23fc9436db397402f0e7a3d49cf7a01c31cfb831fc26b2262ab8efbabef6fb95525f08c0ad7b451d163f6e35eb4e415957ac629ef0511fe91c7e5e389d906758caa877012f69cc4f32b8c78b5f62c54ebb03c94d75afc9f0e4835f9336f422423aeb19ed8c37b62b0dd1dc6be563591d9481677ce9900692950fc288a25dd19e02d4685ba017b89767b5c8376f6b66370e3202d9e807c9c5b06b99c098acfa6a9da80a755a207eb5a3ad02b1a2cff248af93ddec122a727b43b9e8dbb8b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["0075b04346e84b6bd32caf3b67b01a56918618682945ab139fe7a9442af0edca2e09652e3e4bca2a4ea235496f3e09ee13e0b38f67da65c7db6074fe5af923d0", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936116f7ad79cd980a022e493d4988dcb1c1b19360c243df8a6c0950ab23ab0c7b69a452cd9073b5f6ffa9e0ccac843a0ce980eb49f1486d2b77bb32b8a94ab6aac66d00f82bb5f2502b956f0c84a51f0e2d02681cc066da536434475c27d851b6d641b0074fcb2e108dc7caa0b55e06c8df3afe81a3ff46ed53f36d13d5f23b7704b55a70bf5793074dc8fcb95a01ffd76c6a7cb3d0a8a0bc039bbffc30b1ced991ce4b1fed6b43d58d9dac2cb7509c7d861499d5ac1d29ab5263dacec4e0c0a847572e6d828a5c45198364cb694bf803dc07555e2d22b7e9f02e8aa8fbca1012f863039c28015c411e675d5dda0e14b5c56378d6deb77e15828d0e89e693b67172ac39977b8d69cebf8dbbf0b021643d19f979fbcf2541dbe46954e2cee6fd107d88c1a48e272320e36e966c5f51d20981d7c2f219d616fffd90e68676bcf4376036134e534d46faa7f08f82a13af8ce2b56a651461eadb4a959e6ccc1a170149ce30f8ef3cfdfb2c400e7b66e7423c5c736cf055f99edd585361b210bdce8bf4614881305c12cbcb98ccd23333e30795e428d971b7425c40394bfc0ee466f4cb7363486d1e033637af9f6d28292a4f4527a2090bfcb5efca2ed9c0d63c01e16c98b35f150399876b232678a58bf83578dbb2c055ad176d56177c4ac303846e798f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/d2d896106278d4a3d97f13f67d9366baca387121 b/txscript/data/taproot-ref/d2d896106278d4a3d97f13f67d9366baca387121 new file mode 100644 index 0000000000..5d5c1bbeb3 --- /dev/null +++ b/txscript/data/taproot-ref/d2d896106278d4a3d97f13f67d9366baca387121 @@ -0,0 +1 @@ +{"tx": "e9ce9d250160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bb00000000783c3be90224b51000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478741963b5a", "prevouts": ["100a130000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09025fd87d13604b549f5c5d9101e72f91f565f9a4b09089125f17363e8d39781061a1116a7fa26a5e15153b1b04ec5c325ef1144c798d89deb6ac7146600bc8b3a85474b15a8ba9cd7bcc3a3b0f2a5b6baae3db82f029ec24b529b591db166e3a6ddacd36d3a9bfccc8cf7a7ec0013435c3be190971d30b9ef4dbbe4b78abe79e199eecbd8c64649806d99b6c767eb5302d37713de0fbd93dda07026bcd56247146764b3614dd6e04eb5dbf3f6285186046e2d7e5a86a6c94411e67f4da968d5509ce548a8cb7469271a6423add5d835ee96f11a716aca74568a0e78e6997c438df1f646128e37b76cb4e02c3ee32c6850fbec1229a0fa54ccd282d2308ed54f76b44a3c6796d137dd7cdc318f409d2b83ae0ab2b239629f84856878b201b635b3ec49b01b8fa5c3fc41da299665d628ec7e2cc9b6ae0f568f231f74bd21bd043567cee9cf15ca2a1cd2f1539ac690afbeda819e56a8b751d793a5bc3a9bebe4ede4f35e642b7ed3cf4bc4eb420e9647b3ba84280a06f00dc9e508933d5198a64ac5a0ebf1b86dbe640757e126da7db9544b2b80995daee939d796167e737aace5841e8df4b35b2c8408bf167e59b3b0a49f7ff9be3ccac313436821296cf9572d44d6c87c954fb27c311f58ba75675bdda4e75b45bc11cca69215d0e267868cfce674deeb027a58dc129a57f641db3261c65c3f4cdb948dff72eb2aaeeb0413841d86e0f50dbbca8f53d75", "be7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936076f7a3cf0e2f36f4ca53be6e04d67b19856e69fdea7bebc7bb759d42c5b4076ba72dfb389a6a0bb3f8b3aa7842bba2225719f72a11deb6eb959f4e6afb1e08b911ebac8c921821ba74d98d656401ec4b56b2bfe8f672693a939227457b8b1a2"]}, "failure": {"scriptSig": "", "witness": ["4d0902d82542d2bb36816386406662a46b8b4d97949063bc4ceacd26c34c5b8b1837fee1742f54c38246db4103a3e69c48fbd67a097c91e71cf214c8a958f785a2edb60f26760bd059ff28aacd16bd665011c6ffeee89cf4ccb7bfc8417be7af78c45d77c27d953091cbdd2d9a4c74474cb9979253d8f6aeb6be4f557c74192e43ec4c2e2e10f04edbe9932cfad63a92402f70acc37a066b14e74cf3c3c909c2ecac416eaa938ab350de7f863cda2153efbd95a02a558d771bba9bc7af5ab28144648f2691a5cbbe5b2c9d2a7d43059c7f2ad6e3b75eb88598c3aa1fe32471205bd2aae7046c9336c88ee3c2cbb8eeeed9f445ba27de310466b552515afa0bb7f60eea5d75a671effe37f936052ca2730046b743f5fc00e06b38595545abab6f3cc13fd20a35b8a1276e81ec872ad459840f4a036c661650add69184e4b41dd0b5d2323d43beffe9a6f2d98d38c038c32ae46e39bd52d37113c175eb6e6cff8e7d4316338e9075f0793898cda3b190f21c2a930dae6e1d5263f1139334c1560d3c28c6c1220a311e848fe1a1a9a30b587294ca044e9c31ff190a077700c0242a468894206cc3dedf52f4af1bce4a1b99ab06e849e83e33744693e039038b3c0fae8f17f83516bcd5251f68ac124fec1c98ed5f2b5b7105f03c37bd00b97ffb210897f14b0fd4c1b6cbbd115b23a3a899803fc693864a0bdc91bf2e61d1f73ba0c3e3523498d722039635fc6375", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08271092566d000aee18de877d7d37a6499dcaa40717b87fb42c4af8a156e9c8751ba72dfb389a6a0bb3f8b3aa7842bba2225719f72a11deb6eb959f4e6afb1e08b911ebac8c921821ba74d98d656401ec4b56b2bfe8f672693a939227457b8b1a2"]}}, diff --git a/txscript/data/taproot-ref/d2e69860ee1527c081669b81f428a0dee46fe218 b/txscript/data/taproot-ref/d2e69860ee1527c081669b81f428a0dee46fe218 new file mode 100644 index 0000000000..f7e76f97a5 --- /dev/null +++ b/txscript/data/taproot-ref/d2e69860ee1527c081669b81f428a0dee46fe218 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49801000000f2d4614a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270130200000074abd946dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9f0000000045a6249304c5089b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acf499373c", "prevouts": ["31f4380000000000225120d7db2432b77440d39106fdcd5c35c463320f36611b8bc46e3633cb3a8d85086a", "83da110000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4", "30d0520000000000225120c3b9d8e50d42de1212377aa9427da72fe17222669efe5204fac1f05c34f6e65b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["c9814340c116ee7a7f1ec50a6e887138bece1466a8f41b531064e8332a1b7eb83262695b117324e414bff4b434764265606301afacf357ede632c3d610b42b85", "89d7bfc245dfa9a9e22885e14845f5c61e01147e5d2217537dd9fe2b405f17cc5585c6d1f45769381467a48d16b1a2bc8be8fc6e5ce47929367641c50b4c226556d9d79c6f5079c66f6456c7df6315388a740190b0c8537b49d746385ca4", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff298fa6498c8be80449c6afc36a9cc6fbe03f2bf753868bcdfd83742d3f15e0c78d10ea3c6f32d3a6f5838ab7302c54d32f4d174b42eebba04b42b036c92456890527c3afa4f32981023115cf41b6bd705d39dfaa189bb389c418f62feb842b8cc812709ee7ec7ce0efa87592725391608778851ec3ba1962d921196d266f2de200000000000000000000000000000000000000000000000000000000000000000f157c370629feb737ef2d30ba1dd35638c064eeda02da7f75f5160bffe3a87885d19d121f62414db00d181c72f2eb14c4eecfe1d60a440773723e87999b842bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9cf93515a02f9b2b7efe37b1d95837e2a6ef926c49d6f6da29afa7c6cb7232e1bdf3c701a78946e2954b0acb3565b29caef7efc21248964af19ce1c4d361ec00000000000000000000000000000000000000000000000000000000000000000403628f9a3214ba76f7ef16cb06c5730ba697c8b0b763e179bc63ef34bb00050000000000000000000000000000000000000000000000000000000000000000a98a3e02ec5c0c5634b41ee3c3e12c23b713de0f661fcd232dee20dc213f1c3c0000000000000000000000000000000000000000000000000000000000000000d22369a4a09867a7725a7fb28324a06e1d01e65d400a8c67157a6db05b604a00301aa6f569e79a305215df3d29e3dcd907743777a19b753d73122be5d2387b72ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e0c7f641133840dae1ac14bd0005337334ddea87f27f48a1a73f30b4a190b43a16435e8a68a20ecf9f776cdf03f22d8b245bf1e045ed1b153062efecb4166676c916655d6688c405368c97e413d12ca8f4c621d110670e0cba4c1c017a52f035f513c5c5890afc6f149bbe95ca4db7f498ef1918b89c0abdf5f33481de97d453400db9d0d8645730bd82fc2b50d2881aaf279d99f7de05deb676cddff1820a2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc346c320acc0e0a3397584a01f82e2d8b27ca017e661ab69cc6792ed7b0328adf883c62321a29743b652800c3d6c6791d82cdc9b8810e1a18e9f1f1042d2877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16b7dc80f5921406159df5defe0d72ecc44b773d77e09cb2859d2f9cb9701a6c68103fb0c769caf135c1041cf452b40eeaed935c292b8642849d51680a3d5da2b151231b57f161fbcdded96bb19227c9a168c951c9d8ff89771d09647a09dad8b8f34d578ec5b4dab6a07ebe896e9c00f79aab289798ba5cf949bc26586bc7cecdb7cda6956865a5539e65b8f6c2ff2854ec44fe30cd77bd6b500b49188f30d50adbd6b8bb983d8484e9adec7bd3490fe0a83e625dd274a43a5effcfd26785d077644848458d41c9088e67e5eda0391198151639dc2bb89033e5d7375ea32a12fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbaba57575c43d523ff1138ef79198743692cf46496fe391288dd5ee75b8bbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff564437900748348ebb33b2141c46774d364f2642eeea45a22e17a69ab1c35b7285d326bf8ddc71daab5f6bcdff7bc3207438351c0c4ea6d72e9f6a92732eaee57f2be15320d7dc462a9c195ca432ba61c23fda813b43253af753706f7d7f421668321843ef4d117a70e2f6f9c82cbecd61e3b09ce71b8f9c91c1c65e04dae9c0000000000000000000000000000000000000000000000000000000000000000031f33a3ba38a75fb98685b2bab94900d57c5ba843ed48c6510c3557b457c895e5fe8437ecdc202a00d480305acc32f32ea33bbb45d5cec5a20a722af35c6383b68c1188cb53955707ad5c2cbd687adb516430d30104722f2fa7ee1e58eba23a1132ac42795db81764eb54e0ba89db26c4f7dc85995964eb7d34cd624d98fa28855575ff006a8ac1b79c8925c19b0d920095744a2ed424deb3d3c84fe40774df4d2e14d7ddbe521c9411b37ba2f7438e22e5bce675d39fe94adfaa822b288528702d551bf1cdedddf37a8f88589810f91287f46eaf71d3155ea2fa4bea56dd23e3e1ec526d9e362c63c8511aa14b0b80814241468949de13c84e3dc031850ddcfe79eb89b1b8dfcebbf0e95ec19c70303c24dbd25b29f40deb9c1466fa1d968310000000000000000000000000000000000000000000000000000000000000000f06c45097ffb9b0f0ac114866ead353710f365a1c34e4bbf5c5a49d92577842ba753662187493b9caaabaaf7ca62d9165ac99ed503ffdd4b2d1f61a32b62ea00000000000000000000000000000000000000000000000000000000000000000034ec41e24a59341f115c1f82e4318ba25c658659a0f2258877842e0a77c02b99f5e6ab50d1e18c76a468d91f9cbbda8b24aec6cfb92c8943cd92dd1fc26692bf0000000000000000000000000000000000000000000000000000000000000000b1c68d20df5780a4929d0629c473803180840620aea50c6f5a6032c090836f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41840fff3ff3e0967cc8bc2e015d06a2e5f56c8c7f9a1673dd2be5613606a19471e771d09add9e25b9b1616175eb39b4098ff55d4b86b8627e49830c45d95e5c8319eae0b2c67007be01e106fd73d306846630337f044c2408e3050c634053d0f482c95044859735b3c75ac45e635c9b06c902d57c84acc435d84f14038029246dfc1add60c42d3b0e497eecfac072a2fbfb8626315529579c09ffd4ef0fe0e35bc43f562d1208350a37d67c85b982feeae7ec97ccc93519a76088580f77aa7ae0548edd7cfa287127c98df94033cbe1d5c7f63a6f18b29f9c19861f22e9a4e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ea178be4be471ae4a0787f12a8483ed9a06b70778628ac1fba28501b3ab4caa2fb77a22b17ec8547bc2d4fa20e20467a237f9782b1659c485323a2b6f9856de1c63f3235be4f3278746d4c077615e52c67ba876f90f9b46e2f2a5bbb3d0fea4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0f520de29503220f2e1803e858c15d5d9aaee9e77bd7328cbe7dd63298d1627d1e6db73c583bdcc0c7f328ba6497a4c1647a9a117d0b43ddb5ce4308807f2d6408c736a5b6db6df33e3de82b73a78a57ba411a18ae82aa5799316810d3273aa40570e58785eea61730be1d591c5e8ceee63ef656242aca204f4ef9bb699b3937d18bdccb58ddf0e508d619d9c6ce2fc94b5827eed2621412bf4eefa8b1f26cb2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022185ec5c7891d09ca9999d2e0fc762a3e71d5c64dfa7c30c1e54a255bf45c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cbd47697217c8c1b98010dfa381a791d456fe8790fdc0e177cb1b4fbdfb7387cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000768e0f41cbd8a853b4805769796a87f4c4faeda97513f0caaba6c549728f6484ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000119bd68aaeb576bce488adaa8410e2ae59180392711ba2ac13139d45505251cc38b76fbdfbd6748dfa5c00a880b28217e36f27d6ccc778b5cb43c2c7317b175648edb43e5fb127e41d19b073776e31125b383bd3daddc1d2af79753972ef68ee0a1f9abee5076aa5c4724795dfe5a75f2d0a3eaf86c8f1616326beb4cca4f08d21ca90171326f786f261094c4f7910cc728820bf54221d88314d847d978e23f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3439629d821490a79bccb222959a1a577fa4547fa3ed3860a35e55c08efae940ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0576521287f781dd7f45553f66fd3db3438fe16683af2a074d1b5b2e232c8c17aba1a17cc646e289a38552e4c38deea7f06fde9605879717a168fbd1750ecf9d99c6ae61b8126fcbd58d936074304c316229f0bccb99e2d00f20c86d238956f1b5d7f83fa79e0e67f9d2246f0742f8d617f9a01c5ab434e253e6f5d706046709"]}, "failure": {"scriptSig": "", "witness": ["c9814340c116ee7a7f1ec50a6e887138bece1466a8f41b531064e8332a1b7eb83262695b117324e414bff4b434764265606301afacf357ede632c3d610b42b85", "f40a1e242cce6925d9bbc80e8048354d578177047d6fab4e1fa146cf3ce53fb1968ecbaf9b24b1e6b4c243ba14ddf000be368c2f8500658934796293a26a0d6bd1b6d7df8214e14187d82644e5e05f10f1873f13a8516b97b99435bbe1", "750020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac916920871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e206eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff298fa6498c8be80449c6afc36a9cc6fbe03f2bf753868bcdfd83742d3f15e0c78d10ea3c6f32d3a6f5838ab7302c54d32f4d174b42eebba04b42b036c92456890527c3afa4f32981023115cf41b6bd705d39dfaa189bb389c418f62feb842b8cc812709ee7ec7ce0efa87592725391608778851ec3ba1962d921196d266f2de200000000000000000000000000000000000000000000000000000000000000000f157c370629feb737ef2d30ba1dd35638c064eeda02da7f75f5160bffe3a87885d19d121f62414db00d181c72f2eb14c4eecfe1d60a440773723e87999b842bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffec9cf93515a02f9b2b7efe37b1d95837e2a6ef926c49d6f6da29afa7c6cb7232e1bdf3c701a78946e2954b0acb3565b29caef7efc21248964af19ce1c4d361ec00000000000000000000000000000000000000000000000000000000000000000403628f9a3214ba76f7ef16cb06c5730ba697c8b0b763e179bc63ef34bb00050000000000000000000000000000000000000000000000000000000000000000a98a3e02ec5c0c5634b41ee3c3e12c23b713de0f661fcd232dee20dc213f1c3c0000000000000000000000000000000000000000000000000000000000000000d22369a4a09867a7725a7fb28324a06e1d01e65d400a8c67157a6db05b604a00301aa6f569e79a305215df3d29e3dcd907743777a19b753d73122be5d2387b72ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e0c7f641133840dae1ac14bd0005337334ddea87f27f48a1a73f30b4a190b43a16435e8a68a20ecf9f776cdf03f22d8b245bf1e045ed1b153062efecb4166676c916655d6688c405368c97e413d12ca8f4c621d110670e0cba4c1c017a52f035f513c5c5890afc6f149bbe95ca4db7f498ef1918b89c0abdf5f33481de97d453400db9d0d8645730bd82fc2b50d2881aaf279d99f7de05deb676cddff1820a2fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc346c320acc0e0a3397584a01f82e2d8b27ca017e661ab69cc6792ed7b0328adf883c62321a29743b652800c3d6c6791d82cdc9b8810e1a18e9f1f1042d2877ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff16b7dc80f5921406159df5defe0d72ecc44b773d77e09cb2859d2f9cb9701a6c68103fb0c769caf135c1041cf452b40eeaed935c292b8642849d51680a3d5da2b151231b57f161fbcdded96bb19227c9a168c951c9d8ff89771d09647a09dad8b8f34d578ec5b4dab6a07ebe896e9c00f79aab289798ba5cf949bc26586bc7cecdb7cda6956865a5539e65b8f6c2ff2854ec44fe30cd77bd6b500b49188f30d50adbd6b8bb983d8484e9adec7bd3490fe0a83e625dd274a43a5effcfd26785d077644848458d41c9088e67e5eda0391198151639dc2bb89033e5d7375ea32a12fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffdbaba57575c43d523ff1138ef79198743692cf46496fe391288dd5ee75b8bbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff564437900748348ebb33b2141c46774d364f2642eeea45a22e17a69ab1c35b7285d326bf8ddc71daab5f6bcdff7bc3207438351c0c4ea6d72e9f6a92732eaee57f2be15320d7dc462a9c195ca432ba61c23fda813b43253af753706f7d7f421668321843ef4d117a70e2f6f9c82cbecd61e3b09ce71b8f9c91c1c65e04dae9c0000000000000000000000000000000000000000000000000000000000000000031f33a3ba38a75fb98685b2bab94900d57c5ba843ed48c6510c3557b457c895e5fe8437ecdc202a00d480305acc32f32ea33bbb45d5cec5a20a722af35c6383b68c1188cb53955707ad5c2cbd687adb516430d30104722f2fa7ee1e58eba23a1132ac42795db81764eb54e0ba89db26c4f7dc85995964eb7d34cd624d98fa28855575ff006a8ac1b79c8925c19b0d920095744a2ed424deb3d3c84fe40774df4d2e14d7ddbe521c9411b37ba2f7438e22e5bce675d39fe94adfaa822b288528702d551bf1cdedddf37a8f88589810f91287f46eaf71d3155ea2fa4bea56dd23e3e1ec526d9e362c63c8511aa14b0b80814241468949de13c84e3dc031850ddcfe79eb89b1b8dfcebbf0e95ec19c70303c24dbd25b29f40deb9c1466fa1d968310000000000000000000000000000000000000000000000000000000000000000f06c45097ffb9b0f0ac114866ead353710f365a1c34e4bbf5c5a49d92577842ba753662187493b9caaabaaf7ca62d9165ac99ed503ffdd4b2d1f61a32b62ea00000000000000000000000000000000000000000000000000000000000000000034ec41e24a59341f115c1f82e4318ba25c658659a0f2258877842e0a77c02b99f5e6ab50d1e18c76a468d91f9cbbda8b24aec6cfb92c8943cd92dd1fc26692bf0000000000000000000000000000000000000000000000000000000000000000b1c68d20df5780a4929d0629c473803180840620aea50c6f5a6032c090836f0a00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff41840fff3ff3e0967cc8bc2e015d06a2e5f56c8c7f9a1673dd2be5613606a19471e771d09add9e25b9b1616175eb39b4098ff55d4b86b8627e49830c45d95e5c8319eae0b2c67007be01e106fd73d306846630337f044c2408e3050c634053d0f482c95044859735b3c75ac45e635c9b06c902d57c84acc435d84f14038029246dfc1add60c42d3b0e497eecfac072a2fbfb8626315529579c09ffd4ef0fe0e35bc43f562d1208350a37d67c85b982feeae7ec97ccc93519a76088580f77aa7ae0548edd7cfa287127c98df94033cbe1d5c7f63a6f18b29f9c19861f22e9a4e1ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7ea178be4be471ae4a0787f12a8483ed9a06b70778628ac1fba28501b3ab4caa2fb77a22b17ec8547bc2d4fa20e20467a237f9782b1659c485323a2b6f9856de1c63f3235be4f3278746d4c077615e52c67ba876f90f9b46e2f2a5bbb3d0fea4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0f520de29503220f2e1803e858c15d5d9aaee9e77bd7328cbe7dd63298d1627d1e6db73c583bdcc0c7f328ba6497a4c1647a9a117d0b43ddb5ce4308807f2d6408c736a5b6db6df33e3de82b73a78a57ba411a18ae82aa5799316810d3273aa40570e58785eea61730be1d591c5e8ceee63ef656242aca204f4ef9bb699b3937d18bdccb58ddf0e508d619d9c6ce2fc94b5827eed2621412bf4eefa8b1f26cb2ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff022185ec5c7891d09ca9999d2e0fc762a3e71d5c64dfa7c30c1e54a255bf45c200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000cbd47697217c8c1b98010dfa381a791d456fe8790fdc0e177cb1b4fbdfb7387cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000768e0f41cbd8a853b4805769796a87f4c4faeda97513f0caaba6c549728f6484ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000119bd68aaeb576bce488adaa8410e2ae59180392711ba2ac13139d45505251cc38b76fbdfbd6748dfa5c00a880b28217e36f27d6ccc778b5cb43c2c7317b175648edb43e5fb127e41d19b073776e31125b383bd3daddc1d2af79753972ef68ee0a1f9abee5076aa5c4724795dfe5a75f2d0a3eaf86c8f1616326beb4cca4f08d21ca90171326f786f261094c4f7910cc728820bf54221d88314d847d978e23f0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff3439629d821490a79bccb222959a1a577fa4547fa3ed3860a35e55c08efae940ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0576521287f781dd7f45553f66fd3db3438fe16683af2a074d1b5b2e232c8c17aba1a17cc646e289a38552e4c38deea7f06fde9605879717a168fbd1750ecf9d99c6ae61b8126fcbd58d936074304c316229f0bccb99e2d00f20c86d238956f1b5d7f83fa79e0e67f9d2246f0742f8d617f9a01c5ab434e253e6f5d706046709"]}}, diff --git a/txscript/data/taproot-ref/d2f56cc722b3fc0ac3792e7c09a53592a22039af b/txscript/data/taproot-ref/d2f56cc722b3fc0ac3792e7c09a53592a22039af new file mode 100644 index 0000000000..135ebe6f85 --- /dev/null +++ b/txscript/data/taproot-ref/d2f56cc722b3fc0ac3792e7c09a53592a22039af @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1601000000ce4364e8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe400000000a9dbb2eb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46000000000b49550d804b90201010000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc60416b55", "prevouts": ["b6636600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "becd650000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029", "4eaa370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "287d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93676df232e5f5dbd05da99b40a2d8bb3049d7c61774161e08ff9e9412064d827f55b4ae3ee914d52223472aa57f653ca8073aef0e7910b2553778e1ae03228475361bc10490c3b13d9c4f63caefcea4aba06d3a92ca8668ebd56c703a638058ee7"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936487012bffc3542e5de07889edd53e2df3ecd4fff064617ebba77d1f64b07458d780a528759e22c32b672b3582ec3b98210a6d7cdb045b8c2f36dc39043db702a61bc10490c3b13d9c4f63caefcea4aba06d3a92ca8668ebd56c703a638058ee7"]}}, diff --git a/txscript/data/taproot-ref/d2f8f204891c46f5ba28af13b77da60a054ed30f b/txscript/data/taproot-ref/d2f8f204891c46f5ba28af13b77da60a054ed30f new file mode 100644 index 0000000000..5111921a66 --- /dev/null +++ b/txscript/data/taproot-ref/d2f8f204891c46f5ba28af13b77da60a054ed30f @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700501000000f60e8805bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe501000000e6fd15b5017fe3180000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc6f000000", "prevouts": ["0eef110000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "673f660000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "367d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682baaeffa6f4cca00281777f85149243151f0b330252f89793101ed1e71b4558293ebb87675db407435945ccb2e2a6a79ad6cc0b8e2f03768d51396c4a1768b6d4d2cf0b4a04f3dfea651ef6d0b2c4d5fffa0a14be5e227661027bf8174dd263cddd84017ed719a58f336e1892f80afe07727626533c4c78318e44c39862ffd3"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93678acd166f5af146663a37ec796b256aac405c63a52b6185b9a05d94fb3f895c89a25034f4670dba2bfd8b532fe5e2c4399b1757245b955e89574c41111a3f13a78448a7537869648343bbbdc00eb4ac0785a5f2aec0111e81b0d25ebde82a92a"]}}, diff --git a/txscript/data/taproot-ref/d33cb0c2e7c01d420f375159f3d266e71d9c3bcf b/txscript/data/taproot-ref/d33cb0c2e7c01d420f375159f3d266e71d9c3bcf new file mode 100644 index 0000000000..cc98e0c477 --- /dev/null +++ b/txscript/data/taproot-ref/d33cb0c2e7c01d420f375159f3d266e71d9c3bcf @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be200000000ee786e5160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bd000000003fc93dccbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5c00000000b8e3e08703aa61a2000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a678fb6231", "prevouts": ["1b322300000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "217511000000000017a9141a56e0fb41afaf4b9e6feff1797087c69015162687", "f93a700000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "225e202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["755a1b2196fc9c98ce064f8d5237f4299cf20054ab4b74433647e559cd0c73c7b05c9f639d371958d478df28de23c020a099ec8c9bd52e67e377df64c336a43c"]}}, diff --git a/txscript/data/taproot-ref/d34c8b66d9e51e1f51b9432c19d0d95ce51aa297 b/txscript/data/taproot-ref/d34c8b66d9e51e1f51b9432c19d0d95ce51aa297 new file mode 100644 index 0000000000..29d8b0bb07 --- /dev/null +++ b/txscript/data/taproot-ref/d34c8b66d9e51e1f51b9432c19d0d95ce51aa297 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3b000000009f43309c02d7c155000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acce000000", "prevouts": ["cecc5700000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "b47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367e7b268f617d00298f513ed9d959e4853656836f4da5bc24b22bcfc49034b4c690a6d927376acace3683bbc4ff9f5d15a4c9ee2ad4271a1fb38c29668c3ce61898ae4fb28ba039f9030001532aa52d54afebb8b1d186c7283d6707334cdf0cf3"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8f8e322f728f7f2bda8f14cbbb71f9286e41438f49abc55856c1a694b654384417e736a60655dc533a38837433a3a305c9a2d5b0314030c91796018120c3e9a44"]}}, diff --git a/txscript/data/taproot-ref/d35d96943b798f0362dee33b1c9dd9f5ce520bf7 b/txscript/data/taproot-ref/d35d96943b798f0362dee33b1c9dd9f5ce520bf7 new file mode 100644 index 0000000000..012b9b5c25 --- /dev/null +++ b/txscript/data/taproot-ref/d35d96943b798f0362dee33b1c9dd9f5ce520bf7 @@ -0,0 +1 @@ +{"tx": "2cc56a15038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49a00000000ec9501e6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7b0000000043261ee960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e100000000823f43cc013ca96b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487b5010000", "prevouts": ["c1243f0000000000225120036cd49b0a5a8928de04f8e04bd3da02711fbb4d9053aeba12a20cf11cba05b5", "bb6f4700000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "cd9e10000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["bb4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936023cf8e98f7450905a417c9ac38276f00b59951e06c79e90063ed7e2000f468fba5ae8cba4ed1cb91f8a2ddbe7d0c8637ea6f49c0896515a628c3bea1aa465996ff84cb0de1f41d907799f0bb3a3d4c37b57eea0ba754203aaf5b7b2671fe888a4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}, "failure": {"scriptSig": "", "witness": ["4c52bb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d513f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d0e13bd92b8f417e9a9e83db8f63381783cc5b261abc3d56b5d515d800102f0ba4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}}, diff --git a/txscript/data/taproot-ref/d386337a1d0705a7cc519dc2e044e51c1831c3f8 b/txscript/data/taproot-ref/d386337a1d0705a7cc519dc2e044e51c1831c3f8 new file mode 100644 index 0000000000..22524d07e7 --- /dev/null +++ b/txscript/data/taproot-ref/d386337a1d0705a7cc519dc2e044e51c1831c3f8 @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40402000000237d988701de051b0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e760030000", "prevouts": ["fa9142000000000022512077ac2a27a93614a377debb8ffed5c2ae54185f2c1c8dd8a23e6a2ab719a18bb4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f14c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360c9deb8d7324d76c36ab4f0759c9a5c2cbf4147d65f4b6b168ab1ae532394b7618ea1dd842879684de6ce36adf7429742f60d84d7359dfb2eae76d7b546c72259feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dddc2da628ad214b987c122c871fd025273e900a2be892363e6938be42c4976bbb0b9e3baaec320f7de46eda77f4fdd2cda08039a1867e75a703bfdee0f4ff6d1cafc3da456d473afb79353f7068dc1822b24dbf9d7eaef6a0c8c9b611b05e979feb3ebfb72e1f3a9e601929fc7eea4d0eaba4c5291f01c808279d3454a78ee1"]}}, diff --git a/txscript/data/taproot-ref/d3918bf85a56fd7561082f401a5ebd4a0d642f87 b/txscript/data/taproot-ref/d3918bf85a56fd7561082f401a5ebd4a0d642f87 new file mode 100644 index 0000000000..8060e1c864 --- /dev/null +++ b/txscript/data/taproot-ref/d3918bf85a56fd7561082f401a5ebd4a0d642f87 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3e01000000cfab0487bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6c000000006aa54fd6047c69d500000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc797000000", "prevouts": ["a7a25a0000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "970b7d00000000002251203792436bc7394fc8cacb2bd2cdac9c86871063933d86113811cf92ac8fb26226"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "", "witness": ["3045022100874bdd6a54f7eecc10b3f521b6b54e8e8134fbfcd1cb0244af35dcd6f1cf732002207142edf17de35f94e887a1b036a1e51fb330ca7c615c9a631cdd757c5983df4331", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["30440220445d2691f1bfa7e9b0a01ee23c2ca35cd3ac20a513713f2c3a51d8302b156d550220276e86b3b5305e923b840e592f750473aea52a88dafc8bbbedbb0177beb60f7f31", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/d3abb997507d97ede96a2ca419dd8554e22db558 b/txscript/data/taproot-ref/d3abb997507d97ede96a2ca419dd8554e22db558 new file mode 100644 index 0000000000..2c39bcf012 --- /dev/null +++ b/txscript/data/taproot-ref/d3abb997507d97ede96a2ca419dd8554e22db558 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b930100000044a29d078bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40600000000ce8be267bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffd000000004601938b033b82dc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33000000", "prevouts": ["0ba127000000000017a914e014b0ed75ce4306970c9f63e88b08a5a7bb4d0f87", "44813e0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "691a790000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_7a", "final": true, "success": {"scriptSig": "", "witness": ["86dbadf3e40b21343798c676aef44eebedf45a74500ea8d1fcbfeb9286d15b65b93e769bf19d3a5f0fcd437299d33ca1965375f35daacee8ffc72dec3a354a4e03"]}, "failure": {"scriptSig": "", "witness": ["59029869f5fdd96afc76b79c39335738d11ac3ad9b10962d9914c5114cb5a70272a9c248e2027abc2223d7f9f60fb80e2db357ccc02d410a4da700d05db083a57a"]}}, diff --git a/txscript/data/taproot-ref/d3ad578f5f3076aa52c4e35e8a0002582433fef9 b/txscript/data/taproot-ref/d3ad578f5f3076aa52c4e35e8a0002582433fef9 new file mode 100644 index 0000000000..7a0a186e3a --- /dev/null +++ b/txscript/data/taproot-ref/d3ad578f5f3076aa52c4e35e8a0002582433fef9 @@ -0,0 +1 @@ +{"tx": "8346c76302bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfec0100000049bf40cebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd201000000179187ab04897dd9000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7961d3c802a", "prevouts": ["952770000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "18786b0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ce", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5125e7936dacf44c2cc5542287b329619dfaa06ef235a847d66c9c2df863225da6d11737bfd86c40bc108767f37b7ad1553e96cd0852cc5d3aae7d4d5919ea2951"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c5794b22775b9246017f02a30576904e360f7f30d7ba69e42da1f949da49f647a6a38b8d39a057b5d03cc3fb1c5a8fc6fbbf2afa69d215fd7d0ba06cabd825c0959bd9b34bb85690c892593228383c48f2c7a3855b4947a3dd1708d13c567655d4436d921361743dde8d98d3cfa724f09037452104a82644e108bdf9bf6fbb39"]}}, diff --git a/txscript/data/taproot-ref/d3ae88e79c1801c2da2ca48244ec5455bb3abe76 b/txscript/data/taproot-ref/d3ae88e79c1801c2da2ca48244ec5455bb3abe76 new file mode 100644 index 0000000000..394e303e6d --- /dev/null +++ b/txscript/data/taproot-ref/d3ae88e79c1801c2da2ca48244ec5455bb3abe76 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127047000000008b866bc6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c94010000009b039ae9048b395c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8740000000", "prevouts": ["aed50f00000000002251204f95e2d0ca6e5ead217b338fd8f5ed161ed18d9deb82c1fc7cc39fccfd04e4d9", "414e4f000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000eb", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1135140675f37d3c6ffc244808cf22673ce324d5ba1e34c99f7d0972c5ac012a46873018117c319506164013bcdec2d285df0b840d64f5a35ebdb06eb3e2afdaba9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936863bd85e5c9e012d214e27cb7267ffbbead239b623635de7a566ce4333f17723135140675f37d3c6ffc244808cf22673ce324d5ba1e34c99f7d0972c5ac012a46873018117c319506164013bcdec2d285df0b840d64f5a35ebdb06eb3e2afdaba9431f387a803f7df77af21560d586d92c96180a56916d6b7efaaea6f10ba4ca"]}}, diff --git a/txscript/data/taproot-ref/d3d3e2a151a062b9f319dd5ba2d382d38c8c95d4 b/txscript/data/taproot-ref/d3d3e2a151a062b9f319dd5ba2d382d38c8c95d4 new file mode 100644 index 0000000000..28a638d469 --- /dev/null +++ b/txscript/data/taproot-ref/d3d3e2a151a062b9f319dd5ba2d382d38c8c95d4 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706600000000263fbb6adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1a00000000cebe71a7030bb62e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d5afd460", "prevouts": ["9659110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bd0c1f00000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_3d", "final": true, "success": {"scriptSig": "", "witness": ["691ab130c457e109ed5ac51ed10f812a9def72df45dd4cddaa769e1b77962f1eb6482c848efb32b473a27a3cdbe10b12291f65448ad793146652d83c464ebb3b83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["060bf7550f4b508dd272f5b422b20197e949ad8ba93243e176c2e2fc1280a5482479d97a4a1a7205321c25e75dfceacda3881ad016cfe75edb6218ea8c3fad043d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d3e5ffbc18b1ff4b1db6426ef3962f8c9cf5cdf0 b/txscript/data/taproot-ref/d3e5ffbc18b1ff4b1db6426ef3962f8c9cf5cdf0 new file mode 100644 index 0000000000..830d8adb70 --- /dev/null +++ b/txscript/data/taproot-ref/d3e5ffbc18b1ff4b1db6426ef3962f8c9cf5cdf0 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8700000000f0211ceebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5d000000001eb9ae8703257e82000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac66000000", "prevouts": ["c04021000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "9df262000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090210639343de065849c855ae8c35c35d79666934225ad4176929280fd7d98de7d372da64f016d53ac645ec6eb2bb75041ab3ec31c104cc4d99203ffdf062685ed6047cd592a11d2e622fafdc2dd6a77c0d1d4f4849cd64f7cd456c33496b0ed86274bc23fffc29d5bc5eb3bb4d491cce1b737152dfc7d88ba95efed373bcd5325e7288266e179365ccc3ad401afb7089ab0d2f9ec4f562a45a5a308bb7f2ce3288f12d1408a727e16a6a0629768b45aea534dcc09fc52a4b3a9e0bb25a0291c71f1968e5b539192d61e09fd93d40bb37144fd393a25e12538bf836a8a8d79f36d5e4b273368aff7a486ec0543fd1ddc52884ed8d3441606a690fe1ce7ccbba7604ce66294c27250667d04077a534ffe15e47ddae3d32dfc45a9f7ba1a75ec88e1cb45ebc8738fe4049e47642fd85194ee3aa6a713c090fea5a54fb883bdf5b87b13474066eda7cf7cdf4fdd5199c2bced7cb779014b30a523729d5c0e9d8343527454e865fd0ac63c8f364c80a4e34eedf8084cd345faa202fe3dfa706987e561fa8df2e85f8198897e55afe5d24edd4f6361b0bfa88b0fc7fe65006f39007d5b0d4cf0c13c736a9aef097e2f052bb26b4b760539274e8787ad5d50b7e16d76e700aeb721c72b0801e40cb8d77a2c41404351be65c9b3a32d39faa18ab39633ddac0f28a12ea956276a91c87b87df1f8182f8835d355a9c7984d327b17cd603dc9edb98b9aa13cacc7bd75f0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2f0292c5c10d160f8e0745cc9e7b1222beed517475d04a852f0f3c02abb361f19b5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}, "failure": {"scriptSig": "", "witness": ["4d0902cc289225ce3c228894dbc80760454c1aeb27ad26e34631ef9e5f5006fe1e9fea33a4b4e5814879a1a0a060b229b12b1b9688b5c2c3744a22c22cadbeeb24ca29aa1670e923050051c67fbd806989a2a0b7dc39906531482a883ee4f58b606ea15194ad3d6b9d716a0f9b17c2cd54d8af1ffc51838f5c8b0145ffd143cd960b52152d0601eeea04418de957e6a3c1b2590b0584393a603abea7311af32bb9bf624fc452c2bb45dd66c507642dbc2362fb9b3f621bb724818ad55725f8b05b775f44cb93520607a349d1fdc5f83325346b253c636c8e1f1efb76d3dd395c2f37811729de74581eac32afb07e8addd6c73738582ac425b011e1bde8526d3b354a6aaf81a428fd9f1e67dd5136f77a766f86aebd11ad1b56dcc6991a2a22ac08fd225eccd44e58feff6f1a6bb536558784130054fb6ab8f8a4e49bde6fd30ebff43c103c6a2b16cc9c375f212fbfcf87cf5dcc9558236290610ce5f8f1722c3696c00c5069ea9e970f8c10fe4562a7ca3f63e2e78870ae04e27af40b0675c9eceb4b663b24e46678f6c269838a0847d58a1cdf102166f91519f04b378d09373302cfab575e5aced5f0b0b121edd74d5867d603abb1d81ed95cbcd31c19928711b394e4eae0208d75108a37f6604fef20f3f258d6f3ec0997ac7ffc6a64125fb8a9ba290ff89d34996c78dfa5bd93a1af4e00f01362ffd90eaf1a7c28d31784811282bc710e4e059497ac297561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93683df6dc1d6178033e3954d6b2c194a6e795ec7ec27bf3469af38305b38a5a5488e2168769c1e98187b117731eccdce651c542044ebcbbccf53ba5dcae5773e361c2a3c32f2d98482ccc0ae7bd6919d8eb72134d3589ab943a0402c8a931ea420419704ddfd13dc63b1b4156372563d65f148a89e112fdd9cbf47f8afee5da0a9"]}}, diff --git a/txscript/data/taproot-ref/d411fdd25ef73e64648572aee57803f358cf4bb2 b/txscript/data/taproot-ref/d411fdd25ef73e64648572aee57803f358cf4bb2 new file mode 100644 index 0000000000..7d206ea865 --- /dev/null +++ b/txscript/data/taproot-ref/d411fdd25ef73e64648572aee57803f358cf4bb2 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be0000000005fe3e49860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702500000000186ba9b004a336300000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7962a2a795b", "prevouts": ["614222000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87", "3766100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_46", "final": true, "success": {"scriptSig": "", "witness": ["6fc0b4ac26fa3c0981daf6fa30ebba83cf50713a53d9dbcd77ce663c555eebef82090c1b56db0ff1eb33c794c88ed3f4260ef4fd53cbab5d1f2da3206a3de3bb01"]}, "failure": {"scriptSig": "", "witness": ["ff3ab9773206ffebd944eb847f3c56694d96b1a40b4c2a57349a3619cd1b7aae3e274c6bee07372a37f39750bc5112fae080a6a7edf4ec4407374a6b83d214ad46"]}}, diff --git a/txscript/data/taproot-ref/d4208a5824d1318820b3784412f424db595f35ae b/txscript/data/taproot-ref/d4208a5824d1318820b3784412f424db595f35ae new file mode 100644 index 0000000000..f0f73f2b72 --- /dev/null +++ b/txscript/data/taproot-ref/d4208a5824d1318820b3784412f424db595f35ae @@ -0,0 +1 @@ +{"tx": "ea9513f50360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e500000000325a22e960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127099010000008f727e8160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b0010000007ad921c20200f131000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e789000000", "prevouts": ["e680120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "519e10000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "67ba1000000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "807d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffc1f73e1ef7cb741aed576361a28c4d25cbb42ec9d623905630c989b808b3539bb3dc44e72947935649b33aa2d807ea07560e0c2333a7ee2c40c2820b24a64a090cbfbdc5dfcad7ff4463f3cf2898b3c754f5d70a369d7bdece79053e0da647"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0826d3ed6bb397f900bca42f5c55206e9e9a5556fe68666fe0d64ebb28af9dc03c732beddb8df376ed0f15f8ca557ca4fa4dab9ea34398a6bb2b3d4cd5dda00bcea090cbfbdc5dfcad7ff4463f3cf2898b3c754f5d70a369d7bdece79053e0da647"]}}, diff --git a/txscript/data/taproot-ref/d42eec126dd7b1e4c2c574ddba68f4d0228c3d09 b/txscript/data/taproot-ref/d42eec126dd7b1e4c2c574ddba68f4d0228c3d09 new file mode 100644 index 0000000000..9713048806 --- /dev/null +++ b/txscript/data/taproot-ref/d42eec126dd7b1e4c2c574ddba68f4d0228c3d09 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bec00000000078c47fcbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd5010000001a65b428042cf0a00000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478710020000", "prevouts": ["f72520000000000022512084127e09a3e5abb8e6ea0ba3ce4737d1c2349f1be422ff5ce1609ab9b3fbb01d", "497283000000000017a914269f407e1403e9e55237bbaed7146c0fbc0fe6c987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "225a202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["0d7022bf110305446ee518fb05f21aa2c432c46510d8a42becdc0afd12f93f2cfb5f82bfd89a4fe0b1ef89cc4b055d78fb203e3916e76b238691a99fa328e0c3", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/d48d445fdf8825eb982e112320fe51da22271d30 b/txscript/data/taproot-ref/d48d445fdf8825eb982e112320fe51da22271d30 new file mode 100644 index 0000000000..350cfed3cf --- /dev/null +++ b/txscript/data/taproot-ref/d48d445fdf8825eb982e112320fe51da22271d30 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700d020000005955ac21bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1301000000b41584b4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b35000000009f42a30602486899000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c5b9435a", "prevouts": ["ac30110000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "f49e6700000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "7202230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "4c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef724f53fccbc5998418268712ec4a55c070b8ba5ae4e04e2685482dbecadeb1c847bb38ebdfc0ac99f7b57f94cb3711bd799e3f024c53d691ca5d12dd06ff53bd30287fa60720c35e6546eaa391bbb3975ba5e1722a6124c426d678e7f784bd9"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936870a6298af9b4a910f0552eb873b8943700e6bf1d8a778048c3563dd43b31778e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e891faf9d665bb151ea32d070ad80c7b31483dfb68e75e940e326e177970210d6f819d45740b1e9d6e416a8a4978331345395bf058ef0b936b66c7755017d83c65"]}}, diff --git a/txscript/data/taproot-ref/d49f2424f7e47981e92cdca8a120fad3b5b46351 b/txscript/data/taproot-ref/d49f2424f7e47981e92cdca8a120fad3b5b46351 new file mode 100644 index 0000000000..2cc9c5441d --- /dev/null +++ b/txscript/data/taproot-ref/d49f2424f7e47981e92cdca8a120fad3b5b46351 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6d00000000774e8a9b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b1010000006be7d4170139141c000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8744020000", "prevouts": ["c81348000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "e5dd3700000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e6", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e11f8d24c2756f16b9efc524121d49339a04fd56a536f956352850ed4d5018a4abf7205f064a536655663faab66bf2e716758d251376e4a55710082b6d7272244791bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f70487ae4384611f908618191b61bece567637059dee67ecc200d57fcc06025825f2fc2293577bab1371dd996050d2a4e8a01eb34ee2db6c09974277461b3e6691bbc3b31bcff977684854464ae3dc2a24522286fe393648b51abc79cc246ff8"]}}, diff --git a/txscript/data/taproot-ref/d4a61c1883d529642358ce1ad476eae28f347140 b/txscript/data/taproot-ref/d4a61c1883d529642358ce1ad476eae28f347140 new file mode 100644 index 0000000000..914ce10aeb --- /dev/null +++ b/txscript/data/taproot-ref/d4a61c1883d529642358ce1ad476eae28f347140 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbe0000000064ec2af8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce201000000970d9888023a6b9c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874e000000", "prevouts": ["24ae4d0000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2", "a8e9500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_62", "final": true, "success": {"scriptSig": "", "witness": ["9cc731e5a9cf904d607e62059bd6a4db7527a21a15bfe90786abc0161cd84599b93326922432c10ed41c9764636d932a9a71ec02d3d2071c7fbab46d4bfac0c503"]}, "failure": {"scriptSig": "", "witness": ["2093a8dfd613b52c54e91ec6c58232b496c823ceb1598cf5a44404d6abaaca163568efc88cd1ade61ca458bfc780954c410d9955431d285d88f2b3d34ad7baf062"]}}, diff --git a/txscript/data/taproot-ref/d4b2d30318741bf9642c79ca255322762ff5a669 b/txscript/data/taproot-ref/d4b2d30318741bf9642c79ca255322762ff5a669 new file mode 100644 index 0000000000..719070a46f --- /dev/null +++ b/txscript/data/taproot-ref/d4b2d30318741bf9642c79ca255322762ff5a669 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6f01000000928f47ca60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c1010000000276321b048f28600000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc1683433c", "prevouts": ["d36254000000000022512055d32a9b44ee6fb3a2a0e7e2d6444c6afa4ce43aaa0c5357064383c70ed0d31b", "3f930e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936257a75f8119edf70e3bd862f4b5d9d4a02f47e43cb7a52febdf672916561824f"]}, "failure": {"scriptSig": "", "witness": ["6a76616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/d4bdc84c656fc906c865b5369626edd1bc0d575d b/txscript/data/taproot-ref/d4bdc84c656fc906c865b5369626edd1bc0d575d new file mode 100644 index 0000000000..bb5ffdac13 --- /dev/null +++ b/txscript/data/taproot-ref/d4bdc84c656fc906c865b5369626edd1bc0d575d @@ -0,0 +1 @@ +{"tx": "f558c58603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b980000000056c18ef4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2401000000aee696e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42a01000000869aac980117bc3d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdb518220", "prevouts": ["e140210000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "49c88100000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "8e2839000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/invalid_cs_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}, "failure": {"scriptSig": "", "witness": ["d79a506e698c3db808d28f100485c98af4a3b06242b45dda2258d5655cfebb6700ca51d9e4cd4938233267c1edf81ec1568cbd923f0071d6ce79a27fb98b93ce", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac91", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313dbdf1030dff2ec7c5788ba50ec11394c7b78eb3f2b816626023d6daa3a2572114c8faadd8f5d0204cf52c57e4d5fdb2eaa5d356938be1ba736d0df22531309921"]}}, diff --git a/txscript/data/taproot-ref/d4bfa057df6de164cf5907d1054f7b8f37dc55ca b/txscript/data/taproot-ref/d4bfa057df6de164cf5907d1054f7b8f37dc55ca new file mode 100644 index 0000000000..38177e002e --- /dev/null +++ b/txscript/data/taproot-ref/d4bfa057df6de164cf5907d1054f7b8f37dc55ca @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7d00000000bdb388de8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42302000000684f888f0147fd2300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5ac08453", "prevouts": ["109027000000000017a91468f63610c45a6790781558e4d5ce83e16e8f3f3b87", "d6aa3a000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_mis_83", "final": true, "success": {"scriptSig": "", "witness": ["1dfc303e1378c5b9638d5df1ab09ea73422f921a0aed50d9e94c1a02e70d05165f0cb1a872baabd755d0358941dcc25e9c7a0ff6012c7d1b795707462c88507902", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["d30e78f6ab0993b1b0fefa7dec7acc92beefaeed95046194370a16d669347ae5370213671c42b238db5e28413f8683324567f89469f214ed143499de21d0529783", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/d4d9f5cbd1cf9b75c9821d5d4746491e46efecb0 b/txscript/data/taproot-ref/d4d9f5cbd1cf9b75c9821d5d4746491e46efecb0 new file mode 100644 index 0000000000..7d834ad9df --- /dev/null +++ b/txscript/data/taproot-ref/d4d9f5cbd1cf9b75c9821d5d4746491e46efecb0 @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd3000000002c5cd68504874a25000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487f1b85c37", "prevouts": ["5160270000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["f34c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364b47e9b9572a2fdbea0003eeba5c6c5df8476b78e561177a43bb360ce14ca93ec9fc6c767d5aa72b6a61d813f4dedd67fc97d91e71acf86e276ab6f41d1da0fa8c03caa221836b2e776996c8fa4c69c403af6889ee9c99c5c1fa82cf4b3a1b61"]}, "failure": {"scriptSig": "", "witness": ["4c52f3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e199aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4e05de1aec4dcfd94364dc697d2506f2d3dcb95f0b1cd2734b3ed6d289f30b19a3cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}}, diff --git a/txscript/data/taproot-ref/d4eb08a9f93ac1b16665f4266fcd570b760e0b41 b/txscript/data/taproot-ref/d4eb08a9f93ac1b16665f4266fcd570b760e0b41 new file mode 100644 index 0000000000..3ccaeca9c1 --- /dev/null +++ b/txscript/data/taproot-ref/d4eb08a9f93ac1b16665f4266fcd570b760e0b41 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbf000000007c50ca91bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf94000000002da740f8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0101000000229667af01daee3f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963a040000", "prevouts": ["27a64c000000000017a9146db815d9819f256ca5d1e70b15558a98689cc52e87", "24147c000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "aff2740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082dc2f05b59194cbdf87848463e1c2c1324ea07adf35e05c7c9d5f4b3dae1cf3a20eb43d08761fb76661299d0344fd2d8bfc7de5e7c6dc622156e95971f4b8396db5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ba371f3d414732c1c9e15a0164c634559da48866c534aa79174298bfda3b2aedc2f05b59194cbdf87848463e1c2c1324ea07adf35e05c7c9d5f4b3dae1cf3a20eb43d08761fb76661299d0344fd2d8bfc7de5e7c6dc622156e95971f4b8396db5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}}, diff --git a/txscript/data/taproot-ref/d4f11edc0601915ee85baffdd4721b1d1b3b60d0 b/txscript/data/taproot-ref/d4f11edc0601915ee85baffdd4721b1d1b3b60d0 new file mode 100644 index 0000000000..c0336f4cba --- /dev/null +++ b/txscript/data/taproot-ref/d4f11edc0601915ee85baffdd4721b1d1b3b60d0 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e10000000064472c8d0459df38000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4872a000000", "prevouts": ["67e63b000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "657d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364a310fc6f479979a5eb932d4070c1430d885228cf96926ff0d6233d323e177b97a9921914746f344d752c7034b32810721c9853c38c376ca018a4c3c5bab65757fdb01d6ca2155f5be7a678ca6a1e1d0c436995e81f878ed9c74997cf4fccddd302781454c6297f6b8a579760f4d591c0acf84ff9d038b064bbab8a5d53835db"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936991fbe960c4d007c38cd214187495a17c7b10e613ea03451dbfa2e0ceb38b03138fd10ac28b4a0ae18793cce60e7e7ebbedf1e3488ce0551c956bc9cf517ba032bc2c7d802e8c870cc0fefcfae9d23d316cca1682651be3bf62b663d5ddaa443"]}}, diff --git a/txscript/data/taproot-ref/d4f65e281be1feebd4750e113b05138a9c44f486 b/txscript/data/taproot-ref/d4f65e281be1feebd4750e113b05138a9c44f486 new file mode 100644 index 0000000000..6b9e44cfb8 --- /dev/null +++ b/txscript/data/taproot-ref/d4f65e281be1feebd4750e113b05138a9c44f486 @@ -0,0 +1 @@ +{"tx": "dc9f3d8802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf46010000009ae647c88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44901000000ed7e76b5043306b500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8725000000", "prevouts": ["89a97b000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "5f003b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "47304402206af2a4432a634af2be9cf92ef05597f05a5d0c402c81b5dfba0ffddd0ce68a4602205008d3965ee05d5e162deed3002a5eda9c09718ca5a1f34c0ca8e684cf6c6d282f434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "47304402205ccf0e4f051da6faff455f471d7cb21d060a81bd9a4406cc2cb3ff894fa9068f022059adec1278f732b0be7311e822dc67933a5a5350167c8d2758886b96422e08c52f434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/d5048f880c8259302815a101c17c687a6ddbb1d7 b/txscript/data/taproot-ref/d5048f880c8259302815a101c17c687a6ddbb1d7 new file mode 100644 index 0000000000..a6fe25965b --- /dev/null +++ b/txscript/data/taproot-ref/d5048f880c8259302815a101c17c687a6ddbb1d7 @@ -0,0 +1 @@ +{"tx": "359812e802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7201000000f61b3eff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47f00000000acc258aa01c7a31a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88accb010000", "prevouts": ["d21d2400000000002251204aa7ef3c48fcabcb6102b9295fbd3d8d5e51a18011383dd7b1650a23dcb19459", "fe98330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "success": {"scriptSig": "", "witness": ["32c7f223ac8967cba1691441ddd5b520404e6bd0586c612deabf23d031d91a443085d6cce769ac9734b9b8ba4128f6a337aed4173615dbc876bf4a4f948d7dda", "b7f6d3cb3c4aa862ef0f0af5a93791c84b9a4f79d873c58aa1f1b9a6fa74644b2137b1affe0fa2bec0e58e50e8e427ff90a092721f35d350b955c467a028b3fd94233ee19770485f1a219d09698a976352e3d4e59d9f7739131d03b71909a098d709482d9201058335a4c65496a9cb45811afebc0e074f5330fc7cf19b719a74c3f3", "4cdc9f84ed1706b60db6f8353f94ee36918be19e7397219203e68b81eeee7727728614d8be75a911849e2d27cfd2444c8bd030a51fddd8ba2817bab96ff90891530b70e677806ab2fc53710551e6818c80e4d1c7e3f964bb94112a4ffc7fb8cba5cf5186358ba4561f6b9530426ba8bf9d2edf6f6d5c8aa9480138f624d76d0794a97fc5c98ee71d9ed4372184b95bb954a76c0e60e519c35fb52f66aae5f32ae797ed91ab8cf26978dc5f05136945bfcec85d0f05013c62d122f4ed5ec87498a05acf741efafecf643b2f56879f8be6fa13cc42087889815b078a6081de6d29dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b325051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a888b001aa38ca4f81f28c348a28e97928d44bd2c2abf7fc923a6982caca431730e2fae8262ecb686a2c0d0b0d7956dde278299606acbcf55eb63db970af7c026559bbe2fbb3ee1b794a568864bae20cc54681e521994968a26f53c0b9047b1df7c5842cca2c5b35e4f143ef350328511c82fdc94d887b021b126a7f63f6eba1219890701613affcb7f92686256a960a6e542bad4487e0f11507ff102da8494efba0e17d9549ec2a5df5da3da78510b4a393c87d28646fd879356f5c36a863575a62101539f29fa2237caf606916095c2facae2e89a1f9a90aa10e855b6dd2e843dd5152050bde1b0e57aaae0d2e237805329ac7ac8a97ce21055a714b651db1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b51b359a9dac5d197ab79419c16a4ab0bd46b8b627fb9c6a515c02b9ea364bea061db9590375c6fa034185521fa93c3738906f28c37ae3b14a830f37a77332c2294f905f6f7fc94a2257e6e30b8e9521a4b96bce7cc6d2e71ba2935d7385e6e0bba479f1cbf6e111aa8e290b91c6252136611d1c70947ee0df00a6830d16d5e29f45db4e1660090530903145de1823c587b88fc33ddbd58861f782171956a3c4a9752b34d80250f27c4f5300249446d1d296c12a0deb46986727cf4f8a4b8f30000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebc4dc6bf140432997c194cdd67857c8587a7e76ed4bd63e8babbb53fbbba0ec53c42f9004e9b0cb5ff998c6279de68d16a8683d19f391af0a230431b39e907869112349cb6c79929ea35acc94f2efae6ccf162076d698f158369121387744ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f46cc218f0a250008da1f30776fea2b77f14055783fffefdb1ff34e74a73f675c8cda47bf66ce13290e0f054d23a1b57fea18685da4f43cca95c40b98b98c941f088b7f15b556fe17bd3de64e86eaf19aa9f40e6f1613d0f3f72e0bc519a650356c9ffc9cd375ffc62dabd5f28de7c7e401c5af46327ca92921753dca3a175a61871bd24dedb950762a2b74aa1ef62aadcf270bc64ba18ec6479a50f7273b1038fb81667be79a2d0044bc6b38ed1df424e3d08f00986eaedf8db9a0cb413bbd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135e9a6ceada7813b3002f4f251c5724687e3edb62caab37ad7794a7b2e317922dc678efff966a67e49699749288c22d68c9683c8fd7929d265b9474902cd79dc5f4aa8f9ac2d9b99ce2009d49cad0c4a2f89298b4df2303437444ee49c645850000000000000000000000000000000000000000000000000000000000000000ab3dc1b4cc112a7e80c80274c91d249d1e9bffd2252e25112522a6372a3bd6b01839137a43de2932be810f3e03c1a128c369bc85b7c9df253c31446ca2c1ef3040a25a00a887a56ae01f798570b8dece82dffef1eed19bbe49fb48d4c42286112e068ab65c13eda692e3fb2096a0e880ad71c6174edd855fd39ceab37bf8e8efb2fb7f90b786ec9996e01ac6656567cc82d2ca0b9bb04c2f60d4ebfa4c7ca1c454849be350fc11e221571b7983906fc1b212ce398fa81e1aead15cc4fa5a2757bbdccd1d8ce9190883ce9da885acbf3f5722562bb4e524d492798055c63521c20000000000000000000000000000000000000000000000000000000000000000603a9c46007d94ed32805f706394426ae8697d8deb5803a09ff0e82a8f3e7a210000000000000000000000000000000000000000000000000000000000000000aaa2c5c52ccae92631a5af34aa3c38ae0b25f991e86a99572d36a6ddcf2415acf780d638505eb8ad331ef26db2712a0232aeb4f211016fe4b629ae9aa9de04180d867bce0bf602461f7d40b314c8d0d63a4fe769f8b92fc1f5445ae1ee6b94b56ff1b7e7d94538031710c3401ebdd2a1a3ec976382579482b7e9f403c1af1dbdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff74248f05ecb92be6b918266dd25e9542bdac05bed733e3b5dfd0150921ddcbc6636a335b68c02027991377ea8b23b1c00b1068b14d50a461bd4737c3b6f5fc663496d6915942c9826b255926030095b4b4a2f9ed5c2460e8c007ee4b311ae4e1d9984f176f32915b66363a142811b933bc191a02409497ccca80fc13dbc750bfbfab6232e52109e8513c1f2f26eed770f84beb853e9d20caa032c59180a76f06fd83b812b978864749e6c8ea721ef7f44a188035ab3943b43f5b2784459e28e10000000000000000000000000000000000000000000000000000000000000000e4577a5de16b3fa88f0bf818340f27f202e8c88260a11fc2ad76bb76f17ddf34ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ee5aaa5a4ca5f929aff24c7ea434335a3f8f103b02bbb5bffbc49c01076c08da75c3c36fe1beefba884e996a7abd95993cced2e5cfe401a3e00bcd8ef577650a37766312c8614df2ada6c45e2d320b8d7a45e25084f162faad41984ec81ed03a5db47d122ab4312c4e56410f2a242a770fe834e4c519b500344a9e01c30dc74661e9dc30ba59e103040919946cf31cae17353ec21d89138e527bf669dfb000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6012aacabaf14046dad28434109856202eaa8534e380e796a479b37473870f07a74cd2f13aec3346b552f07009dce101d630c6026ebab6901bde58db017b2321f8890fa3315cb1a251c51fee105129d2cee6f1c65e5f86164c752899776e48395b981e0fb6d795b741aede21d193b9242074932b4d9fdd28e8a1731b67658e215954a4dae80e4cb2b1476bb2b862457c49070f367c8f481ba90ab6d08f8f1bfdce993630eacf3addb6686d885184bac046c555702f40ef207faebd154c03523d1b9d67349b47e8f0adf808cd6a116759226ef2767e8115b8bed5794a15e4dae84ef977bc823dfcb17095c38010c14ed1230a1e355d9c8ee4cbdfbb49db252e6c7529d8dae43548a0fed6e93730af5756b7a53d1138c48735a53341dd5b954da394e879341a6e6a4f8b05d184e238340649c481955527911d5bae9d4c11f499fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b56ecf6f51fa16adb2a6a6753909944dc19eaabe9174db67570dfb07cef263d85de64cc08c3efee4fe5f48c3fb88bbce7f5158ac7729240e2abad48ade8157c7b7863a4ceb1e8a7f9619724f03742d8632e3e563943004cd8ca7b6cfcdae593317f52a56961a13d1d425f12a7fd246347b01a744fc526a3bb8f71ff27667d32e0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000e7655e3fb09734ff7e305818f2ff67018017317c6b43f6df3b46b13ae189abfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb95aa3a37cff9fafa2eff8edeb9afeef1abd6423388e4132b8b4330200412724c2c59374e4ce8664e9c6380fcd7ffe1ab595bc06f0dd83302c1b30e2263225d50000000000000000000000000000000000000000000000000000000000000000c8b94f83818a376911b8f2a136cea4f86f7139f994375170d20b97ed1c853f66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4670b9b748b210a86cc2f2b1444680692b3bf4a3acf0d4fa958989e1ca1d34eec267afd1bb5f98c113bfb1b3a162fd54e413f7ab2dbb52d18428ba704a11c4bc83abb92039ddae21bbeeb271ca6c9de459f8996c433ecf34220619c3923ab53a0000000000000000000000000000000000000000000000000000000000000000cf6f0bf7ea92ec1083bf86998d9810c7ca9e221ed7fac97055379c9ac9a45ad7ea385f129019a1d8c0238a75abe0ec20820b7c3e10c3a672b2b964ebdde8b7e50000000000000000000000000000000000000000000000000000000000000000db03c8da878ee56228e0f2c23e7503073e63e33b82902ce15014d673079e0a1c00000000000000000000000000000000000000000000000000000000000000007bb5edb3223212d4c5b74bc419f4af7e65eb6b19c8935896fcbe82b1afb5dc9dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7163e7d847d570da354f75e2c4fe5a2b8f6949b3968698af9532b7d642789054a53b1e86b07369fef041cf59e9ed38e257bd80fc10a32f8bcc35e000e63845509487c7ec7791be4181c662529bd3fcd9477db17059fde5f7f867aa46b69540c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6b99882291313ebd54f327c6fd86607d5f66d51011e570ef7b5a7edc18ade0f36470b73d195d01c88cc1dbc98a19badd4ce4802653f5495c5c8c79c87e0cb601d6c05f501075ead8dc1610cbdb77edd5fafc1197d7141e57ad239a5aa3dd34c70734efc5367420aac2d4358ef038fbe53fa6ffdf3456ba8dc2c94fc44f9d73f0000000000000000000000000000000000000000000000000000000000000000d7424680efb589544e95d57f84e5b9f08394b6b1d0679da58e8e58c596770a3bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}, "failure": {"scriptSig": "", "witness": ["32c7f223ac8967cba1691441ddd5b520404e6bd0586c612deabf23d031d91a443085d6cce769ac9734b9b8ba4128f6a337aed4173615dbc876bf4a4f948d7dda", "e6f4758c5558d3f74d88a980acac6aa59fa4a039bd6154aad55ad34fd1aa23d3681e188df17a1ed625615ef86075db0063f237dee5a87a9d704acffce449d7d10d06f5ce816b85c5223f9c03154f66bc26b7de2f19cb301c263ed58a002bafbce8fdf489175b65c8c0238fbe32a872120fa3f17b0bd9ea86f346f928d51f1a9d26", "4cdc9f84ed1706b60db6f8353f94ee36918be19e7397219203e68b81eeee7727728614d8be75a911849e2d27cfd2444c8bd030a51fddd8ba2817bab96ff90891530b70e677806ab2fc53710551e6818c80e4d1c7e3f964bb94112a4ffc7fb8cba5cf5186358ba4561f6b9530426ba8bf9d2edf6f6d5c8aa9480138f624d76d0794a97fc5c98ee71d9ed4372184b95bb954a76c0e60e519c35fb52f66aae5f32ae797ed91ab8cf26978dc5f05136945bfcec85d0f05013c62d122f4ed5ec87498a05acf741efafecf643b2f56879f8be6fa13cc42087889815b078a6081de6d29dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b325051646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a888b001aa38ca4f81f28c348a28e97928d44bd2c2abf7fc923a6982caca431730e2fae8262ecb686a2c0d0b0d7956dde278299606acbcf55eb63db970af7c026559bbe2fbb3ee1b794a568864bae20cc54681e521994968a26f53c0b9047b1df7c5842cca2c5b35e4f143ef350328511c82fdc94d887b021b126a7f63f6eba1219890701613affcb7f92686256a960a6e542bad4487e0f11507ff102da8494efba0e17d9549ec2a5df5da3da78510b4a393c87d28646fd879356f5c36a863575a62101539f29fa2237caf606916095c2facae2e89a1f9a90aa10e855b6dd2e843dd5152050bde1b0e57aaae0d2e237805329ac7ac8a97ce21055a714b651db1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b51b359a9dac5d197ab79419c16a4ab0bd46b8b627fb9c6a515c02b9ea364bea061db9590375c6fa034185521fa93c3738906f28c37ae3b14a830f37a77332c2294f905f6f7fc94a2257e6e30b8e9521a4b96bce7cc6d2e71ba2935d7385e6e0bba479f1cbf6e111aa8e290b91c6252136611d1c70947ee0df00a6830d16d5e29f45db4e1660090530903145de1823c587b88fc33ddbd58861f782171956a3c4a9752b34d80250f27c4f5300249446d1d296c12a0deb46986727cf4f8a4b8f30000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffebc4dc6bf140432997c194cdd67857c8587a7e76ed4bd63e8babbb53fbbba0ec53c42f9004e9b0cb5ff998c6279de68d16a8683d19f391af0a230431b39e907869112349cb6c79929ea35acc94f2efae6ccf162076d698f158369121387744ccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5f46cc218f0a250008da1f30776fea2b77f14055783fffefdb1ff34e74a73f675c8cda47bf66ce13290e0f054d23a1b57fea18685da4f43cca95c40b98b98c941f088b7f15b556fe17bd3de64e86eaf19aa9f40e6f1613d0f3f72e0bc519a650356c9ffc9cd375ffc62dabd5f28de7c7e401c5af46327ca92921753dca3a175a61871bd24dedb950762a2b74aa1ef62aadcf270bc64ba18ec6479a50f7273b1038fb81667be79a2d0044bc6b38ed1df424e3d08f00986eaedf8db9a0cb413bbd000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000135e9a6ceada7813b3002f4f251c5724687e3edb62caab37ad7794a7b2e317922dc678efff966a67e49699749288c22d68c9683c8fd7929d265b9474902cd79dc5f4aa8f9ac2d9b99ce2009d49cad0c4a2f89298b4df2303437444ee49c645850000000000000000000000000000000000000000000000000000000000000000ab3dc1b4cc112a7e80c80274c91d249d1e9bffd2252e25112522a6372a3bd6b01839137a43de2932be810f3e03c1a128c369bc85b7c9df253c31446ca2c1ef3040a25a00a887a56ae01f798570b8dece82dffef1eed19bbe49fb48d4c42286112e068ab65c13eda692e3fb2096a0e880ad71c6174edd855fd39ceab37bf8e8efb2fb7f90b786ec9996e01ac6656567cc82d2ca0b9bb04c2f60d4ebfa4c7ca1c454849be350fc11e221571b7983906fc1b212ce398fa81e1aead15cc4fa5a2757bbdccd1d8ce9190883ce9da885acbf3f5722562bb4e524d492798055c63521c20000000000000000000000000000000000000000000000000000000000000000603a9c46007d94ed32805f706394426ae8697d8deb5803a09ff0e82a8f3e7a210000000000000000000000000000000000000000000000000000000000000000aaa2c5c52ccae92631a5af34aa3c38ae0b25f991e86a99572d36a6ddcf2415acf780d638505eb8ad331ef26db2712a0232aeb4f211016fe4b629ae9aa9de04180d867bce0bf602461f7d40b314c8d0d63a4fe769f8b92fc1f5445ae1ee6b94b56ff1b7e7d94538031710c3401ebdd2a1a3ec976382579482b7e9f403c1af1dbdffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff74248f05ecb92be6b918266dd25e9542bdac05bed733e3b5dfd0150921ddcbc6636a335b68c02027991377ea8b23b1c00b1068b14d50a461bd4737c3b6f5fc663496d6915942c9826b255926030095b4b4a2f9ed5c2460e8c007ee4b311ae4e1d9984f176f32915b66363a142811b933bc191a02409497ccca80fc13dbc750bfbfab6232e52109e8513c1f2f26eed770f84beb853e9d20caa032c59180a76f06fd83b812b978864749e6c8ea721ef7f44a188035ab3943b43f5b2784459e28e10000000000000000000000000000000000000000000000000000000000000000e4577a5de16b3fa88f0bf818340f27f202e8c88260a11fc2ad76bb76f17ddf34ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff81ee5aaa5a4ca5f929aff24c7ea434335a3f8f103b02bbb5bffbc49c01076c08da75c3c36fe1beefba884e996a7abd95993cced2e5cfe401a3e00bcd8ef577650a37766312c8614df2ada6c45e2d320b8d7a45e25084f162faad41984ec81ed03a5db47d122ab4312c4e56410f2a242a770fe834e4c519b500344a9e01c30dc74661e9dc30ba59e103040919946cf31cae17353ec21d89138e527bf669dfb000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa6012aacabaf14046dad28434109856202eaa8534e380e796a479b37473870f07a74cd2f13aec3346b552f07009dce101d630c6026ebab6901bde58db017b2321f8890fa3315cb1a251c51fee105129d2cee6f1c65e5f86164c752899776e48395b981e0fb6d795b741aede21d193b9242074932b4d9fdd28e8a1731b67658e215954a4dae80e4cb2b1476bb2b862457c49070f367c8f481ba90ab6d08f8f1bfdce993630eacf3addb6686d885184bac046c555702f40ef207faebd154c03523d1b9d67349b47e8f0adf808cd6a116759226ef2767e8115b8bed5794a15e4dae84ef977bc823dfcb17095c38010c14ed1230a1e355d9c8ee4cbdfbb49db252e6c7529d8dae43548a0fed6e93730af5756b7a53d1138c48735a53341dd5b954da394e879341a6e6a4f8b05d184e238340649c481955527911d5bae9d4c11f499fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b56ecf6f51fa16adb2a6a6753909944dc19eaabe9174db67570dfb07cef263d85de64cc08c3efee4fe5f48c3fb88bbce7f5158ac7729240e2abad48ade8157c7b7863a4ceb1e8a7f9619724f03742d8632e3e563943004cd8ca7b6cfcdae593317f52a56961a13d1d425f12a7fd246347b01a744fc526a3bb8f71ff27667d32e0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000e7655e3fb09734ff7e305818f2ff67018017317c6b43f6df3b46b13ae189abfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb95aa3a37cff9fafa2eff8edeb9afeef1abd6423388e4132b8b4330200412724c2c59374e4ce8664e9c6380fcd7ffe1ab595bc06f0dd83302c1b30e2263225d50000000000000000000000000000000000000000000000000000000000000000c8b94f83818a376911b8f2a136cea4f86f7139f994375170d20b97ed1c853f66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4670b9b748b210a86cc2f2b1444680692b3bf4a3acf0d4fa958989e1ca1d34eec267afd1bb5f98c113bfb1b3a162fd54e413f7ab2dbb52d18428ba704a11c4bc83abb92039ddae21bbeeb271ca6c9de459f8996c433ecf34220619c3923ab53a0000000000000000000000000000000000000000000000000000000000000000cf6f0bf7ea92ec1083bf86998d9810c7ca9e221ed7fac97055379c9ac9a45ad7ea385f129019a1d8c0238a75abe0ec20820b7c3e10c3a672b2b964ebdde8b7e50000000000000000000000000000000000000000000000000000000000000000db03c8da878ee56228e0f2c23e7503073e63e33b82902ce15014d673079e0a1c00000000000000000000000000000000000000000000000000000000000000007bb5edb3223212d4c5b74bc419f4af7e65eb6b19c8935896fcbe82b1afb5dc9dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd7163e7d847d570da354f75e2c4fe5a2b8f6949b3968698af9532b7d642789054a53b1e86b07369fef041cf59e9ed38e257bd80fc10a32f8bcc35e000e63845509487c7ec7791be4181c662529bd3fcd9477db17059fde5f7f867aa46b69540c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e6b99882291313ebd54f327c6fd86607d5f66d51011e570ef7b5a7edc18ade0f36470b73d195d01c88cc1dbc98a19badd4ce4802653f5495c5c8c79c87e0cb601d6c05f501075ead8dc1610cbdb77edd5fafc1197d7141e57ad239a5aa3dd34c70734efc5367420aac2d4358ef038fbe53fa6ffdf3456ba8dc2c94fc44f9d73f0000000000000000000000000000000000000000000000000000000000000000d7424680efb589544e95d57f84e5b9f08394b6b1d0679da58e8e58c596770a3bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff"]}}, diff --git a/txscript/data/taproot-ref/d52e561715cddf6ccf811873e1d9570a5b25b677 b/txscript/data/taproot-ref/d52e561715cddf6ccf811873e1d9570a5b25b677 new file mode 100644 index 0000000000..ec1bd47753 --- /dev/null +++ b/txscript/data/taproot-ref/d52e561715cddf6ccf811873e1d9570a5b25b677 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40e00000000fb7b46b8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb201000000c6e24f480102291f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1932c947", "prevouts": ["d42f3f000000000017a914a2a8d85df2f20a0aaff7224012fc4cee13e29cb987", "219e2000000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "215f1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["bc4b90593b05b9ff449ee11caef0798fd71c32a36f41a3420bae79279e38d3afe6d7923e8cbd990636b3822461c6070222735fccc1a811b2a51da486ff0995a8", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/d5466e451d61467e6bd45f66d7608457be8a656f b/txscript/data/taproot-ref/d5466e451d61467e6bd45f66d7608457be8a656f new file mode 100644 index 0000000000..12fa0527cd --- /dev/null +++ b/txscript/data/taproot-ref/d5466e451d61467e6bd45f66d7608457be8a656f @@ -0,0 +1 @@ +{"tx": "f4b07dcb0160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704601000000e99584ee02b3830f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d9000000", "prevouts": ["d773110000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090284f49978384c0b3541a853e003fb71b78619282c1d6eff5ef6c525c5380db9adbb77c600a840e08da90cf963bd3eccf4cd71788e11abb8e72ff5eb20e5e2b7ad4d81be200e5f909d2668b06941be5bf4af139aea8e31f371cea837ef2a13b9e207bccbc3a500195cda61e82681b1aff50f9a9316782024d1961c67ef137759fda284117cc43477f213f1850b114cc8f1cabe8cb618a024ddb1425a250f2127b27e4fc0df67994e36260c59f5aebd9cb9881fd03e1bf6ab86f3b9b5f6cbc80d70439aac8ab95fbf6ffd7ee910079a20a88d170b7082f03aaadbc2bd43e34e6541a760f1e76a2c3dcdba2ddbb09f24be651c78e2ccdef22bb12147b52ea8a21fa4349ad806187d1c5b2b372a232d6b1e7dc671ba1fefb06dacc47a961c39c5b3691de0d291a4c17f9968bf2de5485f559dfc563a7879914c195fd0de37410471c2d5be4ce5505badb18993e84c14a4f8d73e917535224747dd9f3803c298b84f79e5f9b0e7f64c3c1e86ffea8fbfbde25ed1ec8a4e19336e7dd389454c681a378b01b854d039605e7f63ecfbd3b639fcbb612d7ca5444bd968b9e6009522d42bea240d1069e1976d0ac035a8c0a5f45799fcef2339e8ab73ac569601fb4bf47ef25c8d0a9f77051a9de52facab241c2d878aa14e2615285268f514e4a6c713bb60befa3a32f73c1f6c0e8322860ae221e33ad4271ebc7a61c70dcfff8b47c74e1127c8d5636e9708713f75", "f07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367f19d13d85523b75ce99e37b4eb76b07a29c0c5af0a35faf8d29e39dbe1f5f9646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fadf7eb609cf6b5925737ad21e523a1c8cc87f95ebe19353e64c9623e085aa5557f88c7bee1bb9c109f1c6365501285b6447b8ae029d34f47d1dd1efc50e8947b4"]}, "failure": {"scriptSig": "", "witness": ["4d09022d172730b6b54f775690086a5f8940eab41849bf10cdc8b09b523a205515cb8f5c373c27f89f293b7d7ee790ab0b974c69c331aad40832b0b5104aea50a70bbe7de3a844c6aa52384febb0e293ea7991a9f7e170fdc81c01eec25e1342f18753370a42f4f025d781297df195da3b790d57d2492a8b7d3dadbd94d734dd054a35b095a68a028b3e9f46aa6e173dfa771e4dff1ef780d48eeea15f07d6ec11d8661ac90a682e295e793983c0471b3a293e76a6031464edea06a0f5a85f94a53c576dc1a7344bc2a6c2c1d59625195e5cb0e84db47944164fd65e579ec1836868e7f143f19638cecd3bcec05194c5071448153d34c74225b9feb0bbdccf8376ca0b3a8daf0a2f52082d5044e8fafadbd1516225d6497ea78f7ddb0eb7d29cd7eb090f9ef7ef8c7cd479806dba02bb28d0ce6e5b660dea77dfbea4650c7501f6d3f55cb16339118b9ea7b8ecfc1cc26f73c1ada541debe7ce764c1e735fe4fb9f3b49591e55e73a606df3c0e043b5edc10afb0ef51467d88061fb1a9ae1097f438c8f2007d5a40467a80430ba299224ade766b05b4f39d763be2c2df1105f1c98da5d3cca51b44aed31aabde4d470ed63345101d43302710478236906e9faa255fc5adc14760ac0fa64a26bb07434d70669ac66c9832d65bce8cd31e332c5340b9c0434e70ad12de2b149cfa6d8ba712325fa8eec50a0deaced60e575e77bc9e7f909a2b448b29220175f475", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef410cc536787f5b60ec7eff151035c62e0db5c59dc9e94e3d527a7bd7513d4346c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fadf7eb609cf6b5925737ad21e523a1c8cc87f95ebe19353e64c9623e085aa5557f88c7bee1bb9c109f1c6365501285b6447b8ae029d34f47d1dd1efc50e8947b4"]}}, diff --git a/txscript/data/taproot-ref/d54c6961bb95000149d7cffd738f1f34eaf1d825 b/txscript/data/taproot-ref/d54c6961bb95000149d7cffd738f1f34eaf1d825 new file mode 100644 index 0000000000..94ab975741 --- /dev/null +++ b/txscript/data/taproot-ref/d54c6961bb95000149d7cffd738f1f34eaf1d825 @@ -0,0 +1 @@ +{"tx": "fea3974303bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaf00000000f2daa1b1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7200000000c374aebcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb2000000006b51dbf6012250b200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac38d83e24", "prevouts": ["447672000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "be8e1f0000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "cbfa2300000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "7e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365b6bfb69b7e814fcb4dcebe676c838c8fffdff04b3ac333f34250baee888dfa2fbc41b165d26ac180ad5b5d4c7fd11b6e5ed18084ae5d6505f3de45d58844c1cfa5d068ae686a8bb1ac9947127542ac866077ad522de57cab26ce701d52bc951"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a63a87ae51c747f55e6919561fc04ebff87ed8246314dc037503ca155d679649d3fb5b8f7b3afa290146b30788656a8f4c2497a65b1555cd50f1d702ddc8a1f8f2e4a14a40b0acbe20218e44481fe6660f01d2e0cf04e3bc8d4452bacd1080d1"]}}, diff --git a/txscript/data/taproot-ref/d54fe454199d96dd8e1ab2d0069417d2b9be7cf7 b/txscript/data/taproot-ref/d54fe454199d96dd8e1ab2d0069417d2b9be7cf7 new file mode 100644 index 0000000000..385a864ebd --- /dev/null +++ b/txscript/data/taproot-ref/d54fe454199d96dd8e1ab2d0069417d2b9be7cf7 @@ -0,0 +1 @@ +{"tx": "cc88653202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf07020000004b0446fa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ce0100000099320c9c03335573000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898713000000", "prevouts": ["3517640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "07b7110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b9", "final": true, "success": {"scriptSig": "", "witness": ["15d07b0cc069d30a8ec13eb5c3c23f4c5fa614b462e80e9480e9551ed27212168ea433cd0db8ffa10084f62cdb4e67b4d3c21720c72835959de1e43326e6999f81"]}, "failure": {"scriptSig": "", "witness": ["880ddc33cdc662b931bf97f18c063e2f8df2da245148308449957d439fb044f1c2c701efe5d3276d655f0e8aa551d5d3d70f0d2626268afaafbcab0008d594feb9"]}}, diff --git a/txscript/data/taproot-ref/d573fa9122441a358ecf4c86ea6af4d26e08d93a b/txscript/data/taproot-ref/d573fa9122441a358ecf4c86ea6af4d26e08d93a new file mode 100644 index 0000000000..521e7c2bbe --- /dev/null +++ b/txscript/data/taproot-ref/d573fa9122441a358ecf4c86ea6af4d26e08d93a @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd50000000053f403cadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8c0000000080e6db55bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0b010000007bfc680003fe5216010000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc79aa1c358", "prevouts": ["f266720000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "bdf22300000000002251203d5ffb7cd06f5c84b56ec9f73ff7cc3a22b38565d229330748f260d30800c008", "acc68100000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "6b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364ef05760570d2f55d281475192af611d2decac15c2ab8d6f0b8da16f9770487605976fe26432a41f3547171b2b9abb696d7de0172bd15211267873326056804912e839b87dc613c826a9c62085431a96f79b8782d4b0fe31dfc75aede09e250a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e85c9148ab8fb2f0e3b60c30486bc2998c5a9fcff153a4260746061263c245b36a70886d9e3726a9aa8a2b94454683b5181a970edd894e0d0cd75aad09f75436b2"]}}, diff --git a/txscript/data/taproot-ref/d5892cc02088b2b7e11febc39b2d7cd9ed96fec6 b/txscript/data/taproot-ref/d5892cc02088b2b7e11febc39b2d7cd9ed96fec6 new file mode 100644 index 0000000000..9d46276026 --- /dev/null +++ b/txscript/data/taproot-ref/d5892cc02088b2b7e11febc39b2d7cd9ed96fec6 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5400000000ddaec8968bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d5010000003ef568afdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4900000000daee1d6e0386b1db0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac56000000", "prevouts": ["92bf790000000000235b212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "309640000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66", "c96623000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100fd9c26e725eb72c96d343a30ab0919a8743718b5e3ad9a96ae960c31b7fe7e77022017e309e156ba3fcaa65d37f96b761bee39809bf4c421eabdf0700e9ede7db76603232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "47304402207af5bda9ff36368566c85a1f78801dd8928199f1f991d03264ca8ec4b0bc8fde02204842a3ef83ddb802ad5759a6030c209ed1dc46e39747dd7eb8bd72e2299c2d6903232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/d58b0cd6e4cd0f7d08d8c5cd8f64fb89bc6c77b3 b/txscript/data/taproot-ref/d58b0cd6e4cd0f7d08d8c5cd8f64fb89bc6c77b3 new file mode 100644 index 0000000000..01f27c00d3 --- /dev/null +++ b/txscript/data/taproot-ref/d58b0cd6e4cd0f7d08d8c5cd8f64fb89bc6c77b3 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf81010000007d91abc060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700400000000377d028060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270550100000075c420dc03d8f996000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876c030000", "prevouts": ["daf6740000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "cd0112000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47", "923912000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_82", "final": true, "success": {"scriptSig": "", "witness": ["03e0d56738bd29832c858290db3feb3b1326ac63c3da9b37b60a4cb140dda9706426e80fceef3247cc89534ff2e81ee92c37bf0ba70b09f0358dd3766536aa9482", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["fb98395126ae6c08fa5a8441642dd48a958a78e183cd269e3d717016044bf62c13b399cd45a8b42e2087bab912a0c9782346b1111688101a4867635d2b593cf582", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/d5ad81a47205ca9893336dfcc66e370ee84776ce b/txscript/data/taproot-ref/d5ad81a47205ca9893336dfcc66e370ee84776ce new file mode 100644 index 0000000000..c6975ba828 --- /dev/null +++ b/txscript/data/taproot-ref/d5ad81a47205ca9893336dfcc66e370ee84776ce @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e400000000e43d3005dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdb01000000dc21dcf7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1000000000413109ca01c445280000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca4000000", "prevouts": ["00ca0e000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "3c28250000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "bb275b00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["8d4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368b6d963912b4b21c343ab35d829758acd38b20aa323c58d3577851a32d8d38189886f85ebb300297009aa959255e1f8e976b091c7e06b33477ed400c40a83b4c185c953dbf0a33402e724bbb72e47d874a897a0941d53d9706dc82e2e14efc19f43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}, "failure": {"scriptSig": "", "witness": ["4c528d", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936945f49fdec6cb7878f2e144d67bd9f1df9c3c82417cbc22aa6b753f3ef0a3b346a7569334f57ff848fadca8fed75a3aad007c69b24557dd271b830b96d574d63f2f7628d981d9c0428415dafbd1cc169dd3ce50060f3002d6f03fa895459568af43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}}, diff --git a/txscript/data/taproot-ref/d5f073d2ccb1d4bc1f4bb2d64971cda535f3abc4 b/txscript/data/taproot-ref/d5f073d2ccb1d4bc1f4bb2d64971cda535f3abc4 new file mode 100644 index 0000000000..8cddb3ba44 --- /dev/null +++ b/txscript/data/taproot-ref/d5f073d2ccb1d4bc1f4bb2d64971cda535f3abc4 @@ -0,0 +1 @@ +{"tx": "956ac78c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd3010000000bede5d6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbd01000000dd0c1e9303c6f18f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79631010000", "prevouts": ["3db3220000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8", "db25700000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090220181b368ae9d7b686eee6a548d44d6bdcc9fe30a6de125b97673e7d821100af65ecf3a24e1cbf57b13b489afbd03c380b95b725d75afc24ef9216a1d3152497fd62f20f2199f0b6cef32c93b993f120feb97cbde5df1640daaa84adccf4c1f8be4fb14ff684684d5b94cd21a968c49fa17358bd3f59fed0ac33240b0380e3d65efaaf40dc851fa06a6807dbf7acb44fe9417f5ef5b46a81299ecfcb87a81d79a36581cfa6617c1fc9e11fab50263e241e065dd60501497f31a03ebf94b3d7c57025ea7858101bcca00b9e0c8885c29e42f9b4773d424a61023af6ac20e7a312042cc9d2b6d72102f1c0b8358320b58f3e8c75910ef5a30b1aebe3752a89a8d2613d7ba29ce2dfca380aa57e25576a9e3de5e4c608fc58340287460bb14dca4caa953b7fa0b4783b270665975bb33bb4afea36e1509fb2c5c4bc870b344aafa5f36bfdf768f68679ed2aea606febe613e055a7357f4f0f3fefc740b676439b75ed699596f3a183339d2e44cd21339b6002e71407188d72f56a3273f524eb50a8044b6f08c567124def6bd60e40102cb2aca69d1082e654dd39b1ac31b69ffb5e10005ef25be97fc5f5de9a5974a9c3bb52255e6117e6d68bb92c97179367e86bbbf3875c7c0826f8e74ccbbfab3f0c834ef8e3c86538083fe16b28c3f44c23223d710b7a771722b80610b8d17fd9db89819e8f3740fc3f6e8bf323358f3f3ff12210d4c6a18a40dbcb75", "2c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93651437a197bbb5be4a199519bf1e4665ed1db87a2684648cfccecc1d7537eb154da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef5981cd58c469d4842aa56f101a76a4447dba55ab7a128197943d7701f95f2823b7ec1fb3aca1c665feb629f75b86bc6796ed5eb830658d68574ea157b89fde9"]}, "failure": {"scriptSig": "", "witness": ["4d0902aade6f58f8b7d35ae1fda73390c7bc5965e4ebc9672f1e606845ee10806f002d94a96e12df5082f218e7baf227819dfcec4d27037e3c3392e82161e13aa9ba496538c773f503a94d7708b61ebe0f38000fb23a2220fc199a6b6b56ae8999dad05fb0eacaf4c3141da64bf2be7ffa24ed4986a26c1c8de433e5125cca967112adb967f3a1b9f3c4b1017683599fd0d9c94def03d9c12873437defb7db0c60db96686794d88ad96572d05fcf57255dea02e071319a3666efb14632a8fb2329a2e7fe20fe1c8ee77ec2298dc5e573d5fdac59cd8a26ac05b987c47ec8f57364cd3208b7efd35f8ea7746819fc0b164ec561d410b5e12d34102f38b067664b2af3efcbc25013e35aa61c7ac4443eb6680af87d844fa91736070045b5435279651002c0e829528383fef6a57a1dde5423eb94e1b41bb07d2065c9ec411f0bd1eddea2184e9b886e4e39c696da976834e2a98ee84e0f57252d58ec28d28b46dcdf4d5dda3ad185e6fc19af7758435fd3d5107a46ab726811d8babef37e3968243480fad3fe9524aaa61ae983e2a0e73061900731d534630644a62abbae72a64044d3d55659b6995dbb07681afeab530cf18d30617a9d1418ef86a91984388e9707ca3626416cc5b6d1afda0045f684e1d9a0e4eb11feb73d52c37d1902c34141b2944be315375ae2d705f2e7eb183be3fa3f8bb12d9ed2ea546f64315b961d9b855f31b922d4d74ed5f4b9aa75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082872b08559f184ac3ac9956d54e492d7f98285a254bf010e00b63b6bbe75054353b7ec1fb3aca1c665feb629f75b86bc6796ed5eb830658d68574ea157b89fde9"]}}, diff --git a/txscript/data/taproot-ref/d60ddd04ef59ce7655ce0640bb9f05a050c50572 b/txscript/data/taproot-ref/d60ddd04ef59ce7655ce0640bb9f05a050c50572 new file mode 100644 index 0000000000..97d6920125 --- /dev/null +++ b/txscript/data/taproot-ref/d60ddd04ef59ce7655ce0640bb9f05a050c50572 @@ -0,0 +1 @@ +{"tx": "1d7233850360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708c010000004c7f1e8bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf76000000001971cdc460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706001000000c78a86e4027ef68b0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f877bbf5d2b", "prevouts": ["4e1e0e0000000000225120c45578f833be1999146583d65d32aef269809cb1ed8bbdb950ed204b8b0de0ff", "19636d0000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "a6081300000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a6865d40cf942811304c2da2a26fa22b20d7be7d75ad42e96fecbb30c380f98d0d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3f2a2968b4ea0558d79f1ec3cd2b8a530982c6b5ad0be17180e93d11bc09903133cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045a6e9c603f7f99515daebfc2839154302ca67407333b540c062b355b85f19a07ff2a2968b4ea0558d79f1ec3cd2b8a530982c6b5ad0be17180e93d11bc09903133cace0aa47e1a0afcba116b3dffe01d164ab3e15a9a2b15599aaabc05c638667"]}}, diff --git a/txscript/data/taproot-ref/d6114c41966cf276af2ac91a43b0dcfdde3ff6ec b/txscript/data/taproot-ref/d6114c41966cf276af2ac91a43b0dcfdde3ff6ec new file mode 100644 index 0000000000..82d45ccf9b --- /dev/null +++ b/txscript/data/taproot-ref/d6114c41966cf276af2ac91a43b0dcfdde3ff6ec @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4001000000f6f17dea60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701902000000d12b24b1025b3564000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787911ee449", "prevouts": ["6b4456000000000017a914269f407e1403e9e55237bbaed7146c0fbc0fe6c987", "b6a71000000000002251201649567eb00a0fbdde29b894a99c9dfb586a4dcbbedf9e66ed23f8b13544bc3c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "225a202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["996a028585cad8e678304597bd54ce9798c74f6462b9feefb83c1e89c082f298852c39340930c5dcc9f33fbc63ae68f778283660b365deb431d667da2f8da5c5"]}}, diff --git a/txscript/data/taproot-ref/d64045b67fe7d9bbac6b1955c9709dc8f62c2574 b/txscript/data/taproot-ref/d64045b67fe7d9bbac6b1955c9709dc8f62c2574 new file mode 100644 index 0000000000..3b92677df7 --- /dev/null +++ b/txscript/data/taproot-ref/d64045b67fe7d9bbac6b1955c9709dc8f62c2574 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca8000000009decf0f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127016000000008d9b95b7029da96d00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac87195644", "prevouts": ["6d105e000000000017a914ca8d66b8079fd8386ff3ae1d10b869f5605e693b87", "404511000000000022512011543fb5006d5ad7e809c5c2abb17f794bc49d4d5bd86d23c4ceb0e33576d3ec"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "1651142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["951bebd424233f0904c77bd753db297cb4475b0567ee71cf6bedaca2ce86b58e9fdd40fc2a73908e92929fcddc80d5e9cd4516b87b9ba6e66634baf24db55102", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/d65a0ff7ac01950da5c822d87cd1f1b94663c71f b/txscript/data/taproot-ref/d65a0ff7ac01950da5c822d87cd1f1b94663c71f new file mode 100644 index 0000000000..27a1683f5f --- /dev/null +++ b/txscript/data/taproot-ref/d65a0ff7ac01950da5c822d87cd1f1b94663c71f @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2a0000000037452ca28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ca000000003ed3dc9a0168c22d0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fca639323d", "prevouts": ["1e6c240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "06ca36000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_57", "final": true, "success": {"scriptSig": "", "witness": ["17c01d2ff743f9966af357e3451f00a8fa83cdb2de6f1ee41ab22e4d1b86e5eb00833d2ab3b114006fa03e1caf9671f267949345f4209e3b993a05690397994482", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["d6fa3e12cc67ee12b147999b55629328538f6b6653a824d66ac3ddcf288321aacf8841c9d76cc92fe19dec3633cfb0f829195429852d9357c80482474b1e8b7f57", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d66bdc15b3bc47537708b688679685d7823933ec b/txscript/data/taproot-ref/d66bdc15b3bc47537708b688679685d7823933ec new file mode 100644 index 0000000000..aefaf04d40 --- /dev/null +++ b/txscript/data/taproot-ref/d66bdc15b3bc47537708b688679685d7823933ec @@ -0,0 +1 @@ +{"tx": "c3d0c9e202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf390000000058e04188bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfba00000000df72ae8d014799bf00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf6020000", "prevouts": ["18f26900000000002251200f726ea607d510d2ad25fd6aa0b3aa5046595182e7375298ea583ba69075a433", "51817b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_28", "final": true, "success": {"scriptSig": "", "witness": ["1a78064d35d88fb109a98f8de6282d7909a6656b6f6df24d2e8dfd5f00ad80db8503d49cdf084b5d6bb23f1b0d7fdff85b9d09bc1603cc797f66c9d03e02a0ef82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5d1ac27c784be09b0899437baf038c3371b483a8b88ca09d7edc6413f1db830b82c16690ef04e1c208c7ba0ac6cdf86725c9ec6fa639aada8eeb572e7ab8d4fb28", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d6a9e0d913d7e024afc093007237124f4a34364c b/txscript/data/taproot-ref/d6a9e0d913d7e024afc093007237124f4a34364c new file mode 100644 index 0000000000..36cfd1850c --- /dev/null +++ b/txscript/data/taproot-ref/d6a9e0d913d7e024afc093007237124f4a34364c @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a700000000d7649d888bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41b020000005bb521d202828c7d0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787ef020000", "prevouts": ["68bc400000000000225120fd6d9780dc4cf57c79720b9d63f8d64d8d63d8ff447ddced8591f521343270ca", "10fa3e0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638368", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a7f496087fdd0464c266da8b16ca4acd01559ec68405b54c53e2b4568db5223db0bdfd7fd43775a37ae3e20c8f8514aca25517db969733cf8d9f690f9b6d8ea23f980255362d30444bd4a09dfd60422f4fe5b70b7cde78729ca8cd52cb50aace"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93650ad14178052915368d31081c43d3a6fa89eb4eda43da202390c5f626134fc598e881bd6493e98dc576a1c76b7dda488b188d283086ec2219562e3f5b97e3fb63f980255362d30444bd4a09dfd60422f4fe5b70b7cde78729ca8cd52cb50aace"]}}, diff --git a/txscript/data/taproot-ref/d6bb41e59dad21fc3ff2d5bb0c784b27307ee4d3 b/txscript/data/taproot-ref/d6bb41e59dad21fc3ff2d5bb0c784b27307ee4d3 new file mode 100644 index 0000000000..d0591cfa2e --- /dev/null +++ b/txscript/data/taproot-ref/d6bb41e59dad21fc3ff2d5bb0c784b27307ee4d3 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6d00000000c3f473d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf60000000080c431b7017add220000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796f31d0d46", "prevouts": ["61587600000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "76ed4f0000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e148eb929e36bf5d0ae927afe6ca96e40c19e477115e42779571d6d91d45ed5d842c4c20f1fedac94edf4ee37dcf580edabb0aa4839378386ec3447d53f529f2ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936724f9d0df23615753016e7eb8d62571c0b8a17dd151f7df09f79bc44b2e134251de3578bd50e4aef3f42172206e28aaa53f32c3941b8b4ddcf806814652917426187254dcadbfeb5c8509faa2902470872e97e8359524e33e4df3f76314d708e"]}}, diff --git a/txscript/data/taproot-ref/d6e668abcd05531d83ec0bdff606bec2368882a8 b/txscript/data/taproot-ref/d6e668abcd05531d83ec0bdff606bec2368882a8 new file mode 100644 index 0000000000..ecfa4e888b --- /dev/null +++ b/txscript/data/taproot-ref/d6e668abcd05531d83ec0bdff606bec2368882a8 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127085000000006a1e55d2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd30100000063e1818f049b9e8f00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478706bd7426", "prevouts": ["4a4a0e0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8", "868a830000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["ef4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fbdd38c28c61f1b7a6e8ceb22fbafcfb9b20df7a8d7411fb9f5b9067992d68d9921261d9825d6464319e11fb6c7a9f7c01f613629293fb1fa80574c155a587736c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821645f371c8079005f8f776d501e78f2a21020e20da39870ba1dbf85c4a15b7eacc28207c7af5a37f80d9c7bda068b6f89abe5b5cf72eaf80ed3e31c2f1c9dfaa6c6fa26e4842a5ec51b34186b71f91671a7cf578e5677dc1f65db5fd4f943bbd"]}}, diff --git a/txscript/data/taproot-ref/d6e9b28f9645fdf80b2547f4a875bc298680a83f b/txscript/data/taproot-ref/d6e9b28f9645fdf80b2547f4a875bc298680a83f new file mode 100644 index 0000000000..f5665bf0db --- /dev/null +++ b/txscript/data/taproot-ref/d6e9b28f9645fdf80b2547f4a875bc298680a83f @@ -0,0 +1 @@ +{"tx": "971ef45d02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0e01000000bea1139a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127071010000003f3d64ce026c8d91000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac6b0faa40", "prevouts": ["a3c78400000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "88c10e0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/empty_csv", "final": true, "success": {"scriptSig": "", "witness": ["73936867cbc752d6d5e918c808ef94d2b30a081fc0afbac71aeaede820c61f1f11edc6ac869e18b547305f11ddc0cbaf702ade19a9fabd35a044b883ddf20f23", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313ddd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bd74920921194c3fc66d38202825db8e721d0743d3d0e753f82fd9a2f6e54313ddd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/d70c950a9b6157fdddbd8eb01fed07f12638844f b/txscript/data/taproot-ref/d70c950a9b6157fdddbd8eb01fed07f12638844f new file mode 100644 index 0000000000..ddb2d85b7b --- /dev/null +++ b/txscript/data/taproot-ref/d70c950a9b6157fdddbd8eb01fed07f12638844f @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fb010000009399fa4e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c300000000bad4681203ed4f4b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3cb80434", "prevouts": ["c70b100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "38fe3d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_19", "final": true, "success": {"scriptSig": "", "witness": ["c3f4e2739cfee480f6ce6755af8338ea541ce1cd0f6ac85f766a96f7c3bb5754771260a7145a087bff6e91d1e8f665c3c9c5dd3586375643896565f93b09be2d03"]}, "failure": {"scriptSig": "", "witness": ["d34fb7972d268a6402aa623cd67a508390eca4d74388630af9a0ea472db609338a03ce2e47cea6044ebd34ecb4ec2a8c5b2215a5c0000bc9ee43f062b36e627019"]}}, diff --git a/txscript/data/taproot-ref/d71a3d01673ec097d7272cd0fcf4fc12f19a90e8 b/txscript/data/taproot-ref/d71a3d01673ec097d7272cd0fcf4fc12f19a90e8 new file mode 100644 index 0000000000..8400678164 --- /dev/null +++ b/txscript/data/taproot-ref/d71a3d01673ec097d7272cd0fcf4fc12f19a90e8 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cee00000000168bbd8bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5e010000006458ed8f0459b6b50000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a607030000", "prevouts": ["7ea84f00000000001658142540f27e90740933c99d4f17ab2dfc6c82951cfb", "3dc468000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402202fe46beaee17fb95603445977dc6d53128815ceba0f497af5fe350f08100b10b0220258c6c4336316098609c532976678a9be7902bfdd66f3de0f486b163ae25f0c6b4", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["3045022100b5d13b2d25ebb0103c87080c4d506c47742f160549632a71ce11621c880d174902205d1d676eedda2b53d88c32d26353b79db0ce9f65e853b368d4def62572c227bfb4", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/d72363609fde245d8d04d59c1d9e2386e97f61ec b/txscript/data/taproot-ref/d72363609fde245d8d04d59c1d9e2386e97f61ec new file mode 100644 index 0000000000..1fc4a7deac --- /dev/null +++ b/txscript/data/taproot-ref/d72363609fde245d8d04d59c1d9e2386e97f61ec @@ -0,0 +1 @@ +{"tx": "b8a0e6aa02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7401000000992304cfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b58010000007f10f6d10409577100000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7abce484b", "prevouts": ["81ea510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74d5210000000000215b1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_7e", "final": true, "success": {"scriptSig": "", "witness": ["72e42b800386932a5c1253e07f7d7b49da9ac834ad3a47c835ffa87c2508691f7bf7a5cd0cd5626c428c2c57e2b676ba33ec961cd3282f6e600750a5df670cea83"]}, "failure": {"scriptSig": "", "witness": ["01c0bfbc0cb79388da00eeb21138d5db21dcaef99fe5dd2af7f9b3d063f3770e016fcc32cbc341cff4c9d3d6aeea9c2da9491d0405ceaf83815e0361bc0b51347e"]}}, diff --git a/txscript/data/taproot-ref/d73e808e6fe07bbd4cac3998bbd227cb333f3860 b/txscript/data/taproot-ref/d73e808e6fe07bbd4cac3998bbd227cb333f3860 new file mode 100644 index 0000000000..8c398c9caf --- /dev/null +++ b/txscript/data/taproot-ref/d73e808e6fe07bbd4cac3998bbd227cb333f3860 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb600000000b0eabc15bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe500000000b52cf8660410c1a200000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47874be99750", "prevouts": ["4bbb220000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "61aa810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ee", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e11ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900453225856dd898bc2835af0cd8c351393955c132e627f28271e91b4e6043d8131340899fd8696dac9e3afc960f0a100b615a3c324ed3a125e98af98336f748ba56"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f8c1bb9e22d4bd0c89749bc52dae3cca8ec48a5f1e8dfdaa19896840c71bd601ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900453225856dd898bc2835af0cd8c351393955c132e627f28271e91b4e6043d8131340899fd8696dac9e3afc960f0a100b615a3c324ed3a125e98af98336f748ba56"]}}, diff --git a/txscript/data/taproot-ref/d7435dd29bb609d8a757deda3c46bae9522fafb0 b/txscript/data/taproot-ref/d7435dd29bb609d8a757deda3c46bae9522fafb0 new file mode 100644 index 0000000000..cfdf6eab09 --- /dev/null +++ b/txscript/data/taproot-ref/d7435dd29bb609d8a757deda3c46bae9522fafb0 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8d01000000117807cebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0d01000000ea8fb1ec02e7b0ce0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898749102860", "prevouts": ["7bdc65000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "e5246b00000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "48304502210092a855718f24f2886aa3d91e0f75399fbe051333c27010ad6e4507836b56535502204b63cba97b2b03a57551a44a74d9f5134282cf638e44735be1b5edce8149d1ee02232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "4730440220262f9e4d589ead27052d908d18769296c446c083c082f3f763e12ff25fb9d75602206e2eb3c67773345306ae4ed2a1d42774a40e2dabc2c2acf0a1ae01226dca153c02232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/d747c65611d3195e76faeea3dbaca70f0255d690 b/txscript/data/taproot-ref/d747c65611d3195e76faeea3dbaca70f0255d690 new file mode 100644 index 0000000000..07de01f12f --- /dev/null +++ b/txscript/data/taproot-ref/d747c65611d3195e76faeea3dbaca70f0255d690 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfac0000000017ce8cabdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5f01000000fb96d0ee013f6e34000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787bcab301f", "prevouts": ["18dd840000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4a3e5a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_17", "final": true, "success": {"scriptSig": "", "witness": ["526f44df0ce6e752ac2884b0626b8e7a7f0084f7c024c112c8e0ca4c80cee249cea4426a37dc15a8b4ed5e7cf6440df0ab0e76c58b0f9b7a32135cde3fef077f82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["bf4aa0341f2ca2f234bbe493e34014b9b9b485dad45bb34748e352c6afbfc2ac14b16023b240bc1702e8f37fc40ad3ae0de9b01e4bbebee967fd48f87c0dcba317", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d7482427db68b72ab957e74167dbc8c28842b070 b/txscript/data/taproot-ref/d7482427db68b72ab957e74167dbc8c28842b070 new file mode 100644 index 0000000000..fb07f9fb66 --- /dev/null +++ b/txscript/data/taproot-ref/d7482427db68b72ab957e74167dbc8c28842b070 @@ -0,0 +1 @@ +{"tx": "ea6657fb02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7c000000006ca5e1b2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c82010000009c4ddacd0182ae3b000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487178c3054", "prevouts": ["08b54b000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "d0105400000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6abb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b3e5a0f5e9e7b51fd9351e97ab2875ce03ea25b7f50ee6c9dfbf583fc643f52ba5ae8cba4ed1cb91f8a2ddbe7d0c8637ea6f49c0896515a628c3bea1aa465996ff84cb0de1f41d907799f0bb3a3d4c37b57eea0ba754203aaf5b7b2671fe888a4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361e30f0a1ba0bac296285a8eeb76649cc75d9671ad0bf9d85d254b2b980baede83f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d0e13bd92b8f417e9a9e83db8f63381783cc5b261abc3d56b5d515d800102f0ba4b6f827e9c7b2c56d61f57ac31f0aa4c5b637b7f763b3a1a4d37c3a7fd6ec38"]}}, diff --git a/txscript/data/taproot-ref/d7491a450345ac8fd8bd2da583d6974224917a83 b/txscript/data/taproot-ref/d7491a450345ac8fd8bd2da583d6974224917a83 new file mode 100644 index 0000000000..4773adf767 --- /dev/null +++ b/txscript/data/taproot-ref/d7491a450345ac8fd8bd2da583d6974224917a83 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c21000000006dfe2883dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc201000000b98404e201166f0a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a627f75b52", "prevouts": ["6cbb5b0000000000225120d767e62fcc8e1bdc4b74e073e2be32f51425a180d82e9ffb428311c4083f028f", "dcc01e000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d5777eda6ae5c204d690125e9653b41f5769ac9c6851370f10250a6b2ccac04ea2e4b018ae467cd9e863b5163b939197444cc55447de8b2a8f3873419df9a4569ba9145594a303a5de701ee272913bbdbdf833a16e266529740eba3398a826c4475381071377a904a3ab61e5bcdb977b8678744db0e4e43e9c798254dd628b4760105c23156fd1782b11888d55d8ceaba6e0ad858e98aa76f2b99916ad1542e3abc774ef2c9ae78b994dfdfe5cf95aeab76f0ffae9fba9c9141d0cb6726431a9c49c274462ebd1ad944b974966f14004f3285dfe51a242b73def7cece22c6a6642ed45196c98e53e403e074c47e5818f196cbb925d73ef54372edd2a34cafb8930d878eeb01e0cf9afe66cf2b67c0c5996d8692b7dcb6735aeacbad052570f29707cbc3051a8942b75a7bc478116fc67d99645aa5d96b210d6388f1eed11b8a512a559d326fe6e47e33f732eb68374a09d7ee85afa7f75eed7b5317da716d76979cbe3eb93b96366603b0d4b0acfad56a1662731cfa070d400b3f775ea595bf4d21f8e66ec48de8ea1a86b42b78d5d87e838d7b86ef4fb830f3edfc2506cb9ab4d466fae8e8da46716ca15d34afede50f374b22d59793f67ad361721a34f382ecb3024fc10c0d8c404509025aa759b34fa5950337f5571be7b59cb570b2a8f0f18b61864f42c4e91c546ed4ed23827cc32ee879820bea642d9c295d68c0ec8342e94da1d5cab92bbeb758e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93696c72109085338a697f752fc7c68dd136f18d7357ab421c630a98b1ec147d871b7a2231cf916c441aa882850e5209a465c1bf953237149df21eb7dcd7136fa198d550033184c6424688af85d43f5bf525b7f6d8111e731f6e2359cae2801b117ed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}, "failure": {"scriptSig": "", "witness": ["4d090296865444c72a6d3120f5231f82ef03374c3d40310f2bd583b251ba8b90a2594086cfa677d21b49a5f37209dff62a16f1ec505260d9c77e6285877315b6a49908a7e97feaaaeee4268a1f0a7209e1dfe6d76154dc287215c40b05357d3d370048dca2114bf69b69661cbd0e15cd662221679d6f513dcf4e27cf6e81f6a4be1a146e0ecf7faf2c73e0464b9769b122a81450a8ff7bf928454a2d9af812711387ced726142455b36b6ecf69c44ad108e716f767c50012930359f8e78440b3fbd7f1f35f70d1120b440649358a9f512eb8ee80adc0a97818e8153db4dbac2d38ee803fa7a47f36be979039484bfe98b550d7111cb7a8a6c4d4c3559f3c8e6707bbfd96c1ed4011e7ce14fd29b42202f1ce9696867318cbe460538c246af18a23ec56427fb9e44a0686db068cc7c086d3bfbde2983e594beffa36af4b1a1c3e84f250a488f75e7b71b61a3ba5c66a3fbaccaf2ed96680efa1add34daa7cb53b6180e93565d3ebdd08ed4fe6886a6206540f87e2abdad1248cd61e3536ac24aed9dc7238c530b0094fa0d4b793557e0035cbfdbb59b5daf1cd19bef17d05c9b943d555222ce4c899ceac0ad7662e0670dd909606615ffdfe811e2e54236522ae1c9e631fa8179330482ed448d67cb7c94f16fe24031d835ce7dfdd35b5ed75e24ee6ad87dab103daaccb1ae515e0e9b5704ad035e5140f71ce78875274df9a609ff5aeba5cd40faadcbf757f7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368956bfaa7088a8d3f86f6b7188e51d428c43bfe63f671887027ad947d21b21d5dbab9fd6af1020d04f0143fc46ba56c091000bcdda14289cb5d3981fd1d5b5a654f33cd0b31c9bc4dfcaccd89caa263c020d1b70f58e7e0e884ce19a773d6b5f30b2981ae69232c3f6c5ff759e9ad4102f31f3fc5e7a3a4ffd34dce2e2e06026"]}}, diff --git a/txscript/data/taproot-ref/d750ca1379d7933d2b0750e621fad549663516ca b/txscript/data/taproot-ref/d750ca1379d7933d2b0750e621fad549663516ca new file mode 100644 index 0000000000..7d9c383e1e --- /dev/null +++ b/txscript/data/taproot-ref/d750ca1379d7933d2b0750e621fad549663516ca @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6e000000008740a6c30102fd1e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcec030000", "prevouts": ["bc6524000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "47304402205cf4684ac9f00685c2dd185c79138189aece15e2bb9b0453df083311130e940e022068495053305437fd97c5460375b32b7116dc177cb4b61e261382d3646c36cc2582434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}, "failure": {"scriptSig": "483045022100def79fa8580f7bd10e0714593f232c9a681e9fed41a16e50eba6419d96dd75d1022048ffc8eed8b18c2d5360cf808a969c4b485569d73778e6b5b8b728ded2843ce182434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/d762cef9eb8735ca5282dea549336970c32f0470 b/txscript/data/taproot-ref/d762cef9eb8735ca5282dea549336970c32f0470 new file mode 100644 index 0000000000..a2bdb6ca81 --- /dev/null +++ b/txscript/data/taproot-ref/d762cef9eb8735ca5282dea549336970c32f0470 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3100000000c6e677ca0122dc2300000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac33000000", "prevouts": ["22285300000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d4a3aa954d99a0808b2bf4a34eaad4b274a9f5644d16bf38e374bdd4b78dc43f514fdf9f9996eac64dea8e2d2f21992353683b4356a5ad33c6e291ec1ad35138e6f79db5018c5008c2793fb1616ea93309d5c027be1e59893d6060c71a6102191c898158b7fcfb160f80fd5a667319a26ed738f03d0fec7f5e21dedc8e58f7f5a44725dbb915d52a1ade336e1339991650ef5fa3bb4246712940565ed8e61548010f17bef50d4917018cedc3dddfedf9a36d70eb639f570f56bc062398b5fad3f0ea524f69fa6a81ae3f19560f4a4cefe79970059ff1d1da3061d66c8ca69cef782c7a5b81b37151588088925ebc1fae398b78f0bcf12dfd8320cd0929f09993bedc48f67609f5c1489d149817bacb77a5e8609ad9e118e9e6ea76300cc4dcfbc299ccefbd49fb04b6be370a8b523d8576b68939c6177a0807392a47a77b61201fe8471251870aee32be6e7c613d4d558c65dd12cdb1ae3615b0314d74f7c2dbe1a78f0751eb7110f9674191ab1f6ec20f5be9a9390c1f878138681a15e2576aa4e49151ef0d4b3396b24636a4ce1b4820072529ceae8f9c653c1dacdefae7473153ab32cc22cdab23dc5eca23330795cc80f0aee7a25f6d319d6a7270e2164f9dbcf6886681b5984782976d20f6289144e2ac179aab6939179c3d26f1349fee33f84d3a82abf2f18b57c552b1396a7f529a0cbb15d4806b89f2d24a12ded8a20fd5af6371584849bd75", "f47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082bf93feda87a2a10f8ccaf134f5ef6c2a0b95d03f8827da72e1e875b6e78a8a5e876f4540117e7e2fda63f7a015ec774d613b8932caa4388fa9ce7145d42cc7f6"]}, "failure": {"scriptSig": "", "witness": ["4d09021557521404173230fbd3573c8c228fd0b9da648409807110bf2c67922313c66ec8fb89ff95aac79a3ff89edbd68e27331d93267c3f3719ae65ba121a05e632cfeb78511a65fb00c6fa7cc7204ffa2deb020576ac4293ebde75cc7b5c29196e8fbcb63a4d2193a32119a43a957eeca7400be342f72895a80fcfd70cd9a8756722a4e057d5bae6c3bb9f9a72b7f7a5ce0e338589d630f06e17c253936a2dc9aa9e0b3a44fa6751f52dd57f6ed02d4cd3e50c9d54d172bf193ef665686f04a97d54761c945de1101bb37a44b978675835a1b875a226d5865c4d07abf04a5c3c9ad5bb54cc751c520f96e9ec51b31220ceb32d8ec7a9d690945f14319e017042eb34ed69b4f6de74f20c44ec7e165d7350ff78b0af3fc2e09efab06d14e3bd1b81d9753a284d712cd7ed72171254780579af3da233fef20f9c5d4d691db1f208550fd69158536a08ca9844e0746b0c49c31da77004aa3b1469e41ffe2b6caa7f056872b42227f8f17a59b5738a9c257a832f32e726997bb7326040df2522b245338d4b81a4e2d0d4d705e220063f1b0946b27731a3596d8aec95ab8a8d2df9ff6f21565506a180974a3485301cd1d41bb54efd8766614c8f14bc116f6e02f558577fc1743a3b7cb7282bc6eba0eb4ffe198cf5e1242f06bae5260975c84d73f67d5bda21772649faabb4b03f24c1ef26af2930d1817218ea73607b2645e29f4589f786372b4123e9a6a5f275", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd6cb83260dd517d361871e17e0728affb238ee2bec7c6aec1cb32ffd91f6217defbee90a18838bf61213a4f1f5f31a75e180b842cfb60d5f81d26cbd38f8652876f4540117e7e2fda63f7a015ec774d613b8932caa4388fa9ce7145d42cc7f6"]}}, diff --git a/txscript/data/taproot-ref/d784977d5fa21c31f0f510f5a1e2d50f7815c63e b/txscript/data/taproot-ref/d784977d5fa21c31f0f510f5a1e2d50f7815c63e new file mode 100644 index 0000000000..365dc1e5e3 --- /dev/null +++ b/txscript/data/taproot-ref/d784977d5fa21c31f0f510f5a1e2d50f7815c63e @@ -0,0 +1 @@ +{"tx": "d2300b08028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40302000000f7c3138fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4401000000dfa691ce01a7032d00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac6b020000", "prevouts": ["21ae390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "358e5700000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000fa", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51c26d78b90df0408cccf5a173a397f35b7225b23776926a85911da6ca9e3721966081f43f8c34257025162ccf1daca48ae61c99356c3eb24d5601d3c52dd9de2a6f5053dc49cb92d20c30fe5ab09c589302aa9886b9c794d18405aff33121a169"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93645ced882a1c46bd68a59c6fcc58699bfeb6e11a3b6e75b6ce8d2c57343bebb685d4b392b2e4c368022144328e009ed21ebc6df76a38c37cd5c7ada1ffb4033c71a4e7a29e9a68a1d6e5ccf500c3bde1b862f2704e441e939992f2bf5a528056a3bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}}, diff --git a/txscript/data/taproot-ref/d78a59aa9fae45d7cbfb5d42a6d57744818f4f3c b/txscript/data/taproot-ref/d78a59aa9fae45d7cbfb5d42a6d57744818f4f3c new file mode 100644 index 0000000000..0abe869050 --- /dev/null +++ b/txscript/data/taproot-ref/d78a59aa9fae45d7cbfb5d42a6d57744818f4f3c @@ -0,0 +1 @@ +{"tx": "48e98f73028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d8000000003dc93bfadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba4000000008f1f5de404739f53000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87e995ba23", "prevouts": ["5d97310000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "9d9e2400000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "483045022100d30fb719d1875c3c46a98de77aa793514cb4e060b327e008fbf9a49a1fb4dfbd02200dd642d886252d60c35be8083cc2c2ef6f299c6b8e97aca1a620ab49de5f700f01", "witness": []}, "failure": {"scriptSig": "4830450221009426393fad42dc8e3a25b09f48fd67527c6c34835b9bfdf3efa36ee170f652d00220217d0f35f8827a01b873d11ce17f14715db62d7b9b383a10e0bd6b0347f8fb2601", "witness": []}}, diff --git a/txscript/data/taproot-ref/d78b2cc4912fce258a371b34976f623504f00bf5 b/txscript/data/taproot-ref/d78b2cc4912fce258a371b34976f623504f00bf5 new file mode 100644 index 0000000000..023dc1f7fb --- /dev/null +++ b/txscript/data/taproot-ref/d78b2cc4912fce258a371b34976f623504f00bf5 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c425000000001d54d0dc0137222b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709c2562e", "prevouts": ["ec0b320000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f24c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b5c223b2b99456872194ca1969830bfef335ab1526807af314f38e6ee168621b20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1c56c8a32008d6f6a63b4b8ddfaeeeddf640e9afea8e86008d2331d68e9435ec7ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb3b0196023257ba22828ffd68cac8334c8e9a2a606c57d60a81549d8eadaf9727e2cee51cdefa725eb1f8255cf98d00ca42f29f054478581d82ff254acc1f11842c4c20f1fedac94edf4ee37dcf580edabb0aa4839378386ec3447d53f529f2ea2726256ae6b84713fc66a1300a8292dc92aa88ab82f645f24355049764a6c4"]}}, diff --git a/txscript/data/taproot-ref/d796184dcd2791587af889f67ff0bd146da22bf6 b/txscript/data/taproot-ref/d796184dcd2791587af889f67ff0bd146da22bf6 new file mode 100644 index 0000000000..b5429f05b4 --- /dev/null +++ b/txscript/data/taproot-ref/d796184dcd2791587af889f67ff0bd146da22bf6 @@ -0,0 +1 @@ +{"tx": "70ffc10b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b230200000009cc2dafdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3901000000dc9f8bc8023bb179000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787fe43162a", "prevouts": ["1d03210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "85905a0000000000225120d10cdcba7157d8df26718afda7706aaaa427ac1b5d7e5fac924a4c3a7b738d66"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367515070ee7198470edadce4815bf305ab61e24283d7b82873b83e6e193884685"]}, "failure": {"scriptSig": "", "witness": ["6a8c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/d7a0524afa7b58f919577fc272101adacde12154 b/txscript/data/taproot-ref/d7a0524afa7b58f919577fc272101adacde12154 new file mode 100644 index 0000000000..82f5b9a1ee --- /dev/null +++ b/txscript/data/taproot-ref/d7a0524afa7b58f919577fc272101adacde12154 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4cc00000000b8f83b5e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b000000000ea20edd1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7b010000009599d10e01c5f72d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac71030000", "prevouts": ["f6d641000000000017a9141757f4686f091b43a46fa47e92d07c87fc7a205e87", "5b42100000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71", "0c43250000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "165f142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["aad4d413d20b93ea249d3e5b97cd97a840de55d834d32fd568d08b78a552527f58a0f6b25ef52bbbd9d5b6a44f3865cf7ecfa8a812f1dfd3dfad4d158881d217", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/d7ae7546c73cd724ed329a7e111b1874f3fad3a3 b/txscript/data/taproot-ref/d7ae7546c73cd724ed329a7e111b1874f3fad3a3 new file mode 100644 index 0000000000..5bfec08c3e --- /dev/null +++ b/txscript/data/taproot-ref/d7ae7546c73cd724ed329a7e111b1874f3fad3a3 @@ -0,0 +1 @@ +{"tx": "64f4e4390360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707701000000fb3218d8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ced0100000081e9f5b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcc010000006137ffcd047b7d89000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6034d4655", "prevouts": ["3d9412000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "be405700000000002251208ab07249a1fdfb04b130308cc651220c9430f0ee7d7b49fe0191e15183fe6b9a", "277321000000000021571f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["8f0324b98e4a688bc8e9b083c101ac36cf765277408c730c20d51e09aa664a607b2ce3280a394734af3b1693e8387e167c6fae4d56b86da1cfd2e115cd7aaa2d", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/d7c12a570bce792607b3d5f23fc34ef6392109de b/txscript/data/taproot-ref/d7c12a570bce792607b3d5f23fc34ef6392109de new file mode 100644 index 0000000000..c0b3579efe --- /dev/null +++ b/txscript/data/taproot-ref/d7c12a570bce792607b3d5f23fc34ef6392109de @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cce00000000e19e8a348bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ef0100000011e89353dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0c02000000b3dc5d44043c69d900000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac92010000", "prevouts": ["d9e6520000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8f6b320000000000225120d70bb5030b4517d64d2a3c38713515b320a06334d0ff9db76c903984d8e384a2", "bcc555000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c5", "final": true, "success": {"scriptSig": "", "witness": ["6c51571d1e64c9599f61f1ea0bce152c3d229e809091a22321e757af056d247e577257d9d9cda5806cf10e78a471e4a104b369a91e3eaea1a4c6dba8b69bdbc701", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3bd704f7d6f451f1604ae63a01b60d188ea3642f7abb2a6cb93f488a329c74452395e75ee8ab1dc41bce85be9e945120119418ec10d6e58258d9d90fb9c7d451c5", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d7d1782dc0b7c5e12cccab548a33619bf58a1db8 b/txscript/data/taproot-ref/d7d1782dc0b7c5e12cccab548a33619bf58a1db8 new file mode 100644 index 0000000000..94ae53cab2 --- /dev/null +++ b/txscript/data/taproot-ref/d7d1782dc0b7c5e12cccab548a33619bf58a1db8 @@ -0,0 +1 @@ +{"tx": "f8e59ec202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b020200000080e71b9e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d01000000ff9dfcfa024f03350000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787b5000000", "prevouts": ["2b8d260000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "b21a100000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936626685b331694d0de841e58d95d1842d28c3900fed13098d035c30bbed037f96e5aa467dfe2257bccb94fb5bf6723e840de90a3890266560a9e3d72c84089f55cf37d2bf9ac9d65f4f9542d60f6497573c04b4d7313f44a5c611386102890a1c"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045716f66701312fe6b613a3a288c903128f650d73beac5c480044fdeaa8466574a9dac82751ef42f4155e8d0286eb609cd4bc8c8b3be93c107754fe282612bb362f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}}, diff --git a/txscript/data/taproot-ref/d7ed3928aecf2d3acbca2fb8d2ee7775f7f52ccf b/txscript/data/taproot-ref/d7ed3928aecf2d3acbca2fb8d2ee7775f7f52ccf new file mode 100644 index 0000000000..9588a724d7 --- /dev/null +++ b/txscript/data/taproot-ref/d7ed3928aecf2d3acbca2fb8d2ee7775f7f52ccf @@ -0,0 +1 @@ +{"tx": "1dd1ae6902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce500000000026e16df8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4100000000051563e9502ec56810000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc2caab52b", "prevouts": ["e99947000000000017a914de933560a9a700a6d4f856bfa5cf61713cb34ea687", "3f4a3c00000000002352212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "235e212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["b1b7dd95dbbc4cee32ba2d986ab178ae22de42cf1b059d3f8356fb5e12a6e7588b901314fc23e0525185d577ffd9102b11373a3a6ac4c901d530c8474f23495d", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/d7f54f75c60667b7fd883f34d666d917d0b88809 b/txscript/data/taproot-ref/d7f54f75c60667b7fd883f34d666d917d0b88809 new file mode 100644 index 0000000000..e14fb1a3a1 --- /dev/null +++ b/txscript/data/taproot-ref/d7f54f75c60667b7fd883f34d666d917d0b88809 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4f00000000096ba8c2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7400000000156c38e103eb5d8b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac71040000", "prevouts": ["1e47260000000000225120bf924c4d20f2c9cd0e276b93ccb8cc76d8c2c0447a0551ca648744a57795d235", "27a266000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "success": {"scriptSig": "", "witness": ["65914ed79dc6a229c28e0dc26cdeee837174dbe2710aa6a80d4782e83fe77faca7f46bc228a85982527e7d0748a105c3ef5728c5c2bb620cce3eb8944daf3af801", "aa7f0b81f4cb1cd2336ffad5dab8926b34399f1c11012c3a1e54275224f18b74e41c641cf9c789e0eb82f2b2ead830842fb1984609db3e4513d5004dcb38662936c6381aee07a8eb74934799299728e6ee118844e0ded5b15717e7d24d25ccebd8368e6d4fd71981f679d698a6b3ec1c4a124c1a68a9a2260a7b5265d26225dff4ea0b7d76ce8c4a92d656bdef5e5e6b775f5329dca0372a69f3c2357574762f5aa3424dbb2a632b81ed6e2c2095521864f9e86255a7efd8fcce33e56f784e7b04ab198dfd", "4cdc4916429dd43b46f96dbe1b92564950ea25319f017c28a3d59fc97674260912d96b90f24f18c0b44c5c74ff9dd38153bb932495b13acdc6c1f0b9304d843f165c0af0abb830fd641bcdfba64300ccdcb77a6e8e0faeae54ca0250603da7b06d7ebb64cfb0e5b5cca94c0b67fc26786c24e73cba1bd4da99114567a0b548a78f03fe08c62ce444163b256e8900a7401fef6af425f482ca2e86c695e1c17184f6f75bb21288a275b0df284f4fd47ec71ea061163991d67f9945b2217ddfae42ed4a3861523dc90f088a2d082eeeeb03da0202a78dca428c18740b7b658d6d3535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a251646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367fb5552ee6381cdc963f2111a6f573fcfbed929a5b7c4ed5b3a36f5e0db7ec66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98b3c9ce3df34033bc3dd90a77b2b0db97c9c89981b5cf75c5aa87c293dde5a21e1620c18b37992f243287ac1416cf3325e32c6396edb12577e7662588de4da7928e438ad9fbe70f4d0badc06c7ee4c83ca813fca202605ce9f9b474875b982e0d55f0109232bc00dcf6dc13410e1b395cdf86e7f0f25d39d47923d809812313dd2594d6ac6f637d534b85c20b93114807839d2feb8bdd37a4ed3b0575f0b6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa32866219c62026f7943059472a02015d9196422dc18cf32ccdfb1bc543c558bb77001a65742f0ec68ef04f1d1de20e1df0c901f62fdf302b0bc2e7cce56c3b25365115c24f001a1f7f6a466f6429ac5452b824ea332bc55da340486be9211e3c1557cbbec067595eb9403e301c9e5b7ac8d7a6875267436812a9f0e99cbea472635a14868093c7960743b4a3454dd3e5ff5639a2725f2433e65396d247e4d210449f63fdec596e5519c6eed966e2f0980b7a713615db5c14d0d64781166ded471a3b6219a83e6c68a031243b897edd79429041868667756862c9d1b38194a57f3d6fa22beb60e2897e24fcb4fe6f183151874d2e032bb70dce4e519d9632c234421d7622a200065f0ec2d551108c54d6bf63cfb84e70b5f86d0861e641f01f31a7f197a76b16e6c33df21de22f6872242719b47812d22907a96f1611514039a4aa8563b19c1d1d11250331c8705531967758c6a3336e611888684dcbb61c27b"]}, "failure": {"scriptSig": "", "witness": ["65914ed79dc6a229c28e0dc26cdeee837174dbe2710aa6a80d4782e83fe77faca7f46bc228a85982527e7d0748a105c3ef5728c5c2bb620cce3eb8944daf3af801", "9fedc5161501185b324cb50c457a91a7ba7c6e227cba17aa0392ab48f2fd03680d1d500e13fa9af4ed2cd6cc7add756725e40c8e6d4d3ed6126e66f09b00f84b13ca28d8d3bf472d6657d4cbc095463ea2e63abe54a309a8ea6b76c66926677a273a4b323f3e4aeb7ba746851a22abbaccd64fecdc7f1584883607a23deb3ac630a431276beb47b05f5f7375ad04c8a48591d0e7513d0a18936bcb9322e6e895eceb98185fd96373b6d4615290bfba32d462265411c42034c517c94f0ac20b609cc801c8", "4cdc4916429dd43b46f96dbe1b92564950ea25319f017c28a3d59fc97674260912d96b90f24f18c0b44c5c74ff9dd38153bb932495b13acdc6c1f0b9304d843f165c0af0abb830fd641bcdfba64300ccdcb77a6e8e0faeae54ca0250603da7b06d7ebb64cfb0e5b5cca94c0b67fc26786c24e73cba1bd4da99114567a0b548a78f03fe08c62ce444163b256e8900a7401fef6af425f482ca2e86c695e1c17184f6f75bb21288a275b0df284f4fd47ec71ea061163991d67f9945b2217ddfae42ed4a3861523dc90f088a2d082eeeeb03da0202a78dca428c18740b7b658d6d3535c89aa41017e2e19c399f1f47af6c33f3263783acb32e3a29832fe4577130a39c7146c51f0cbb1aa7598f0b61eccd6e728b5970a251646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367fb5552ee6381cdc963f2111a6f573fcfbed929a5b7c4ed5b3a36f5e0db7ec66ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc98b3c9ce3df34033bc3dd90a77b2b0db97c9c89981b5cf75c5aa87c293dde5a21e1620c18b37992f243287ac1416cf3325e32c6396edb12577e7662588de4da7928e438ad9fbe70f4d0badc06c7ee4c83ca813fca202605ce9f9b474875b982e0d55f0109232bc00dcf6dc13410e1b395cdf86e7f0f25d39d47923d809812313dd2594d6ac6f637d534b85c20b93114807839d2feb8bdd37a4ed3b0575f0b6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffa32866219c62026f7943059472a02015d9196422dc18cf32ccdfb1bc543c558bb77001a65742f0ec68ef04f1d1de20e1df0c901f62fdf302b0bc2e7cce56c3b25365115c24f001a1f7f6a466f6429ac5452b824ea332bc55da340486be9211e3c1557cbbec067595eb9403e301c9e5b7ac8d7a6875267436812a9f0e99cbea472635a14868093c7960743b4a3454dd3e5ff5639a2725f2433e65396d247e4d210449f63fdec596e5519c6eed966e2f0980b7a713615db5c14d0d64781166ded471a3b6219a83e6c68a031243b897edd79429041868667756862c9d1b38194a57f3d6fa22beb60e2897e24fcb4fe6f183151874d2e032bb70dce4e519d9632c234421d7622a200065f0ec2d551108c54d6bf63cfb84e70b5f86d0861e641f01f31a7f197a76b16e6c33df21de22f6872242719b47812d22907a96f1611514039a4aa8563b19c1d1d11250331c8705531967758c6a3336e611888684dcbb61c27b"]}}, diff --git a/txscript/data/taproot-ref/d80fa30ad1a0824f0da7b212e606ac5496c0715c b/txscript/data/taproot-ref/d80fa30ad1a0824f0da7b212e606ac5496c0715c new file mode 100644 index 0000000000..c443190e65 --- /dev/null +++ b/txscript/data/taproot-ref/d80fa30ad1a0824f0da7b212e606ac5496c0715c @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40001000000879be48fbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9600000000f30fa8d6019bf8a2000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e62e0b28", "prevouts": ["7d1a3c0000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "7f417a00000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "f87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b76277e7ebb6a6beae3662bd89a171afd4e408216155b40c014c7594821f932cc194f5b64ca7905ecbca48e3f65ecb2f68dc17df34a907a9e0813d7f728c588e9e87f1230a4dffa49f76a6d91b3ffe7dc371ffdd064326b56030bc36a92eabd9a0f16f4cfe8b052d74bbe565102becb5d9831a57baf41b6ebc95ac4a46ff7ed8"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f353434ff448b07af6ab9f2d6b7abed88cb8a262b2c34c793eec61b98efadc45d94fcac167164a1e762fdc7573aeb7aa116b8ba9fcc5f9bd36bcc426cdd2c869a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e5422b6de6500db2bf907e4c5314ebb405475f57406f25afe5ac62a92a9e6c58b"]}}, diff --git a/txscript/data/taproot-ref/d86ea65d288be1fd03e9e19e503b17612c637374 b/txscript/data/taproot-ref/d86ea65d288be1fd03e9e19e503b17612c637374 new file mode 100644 index 0000000000..797df5eed7 --- /dev/null +++ b/txscript/data/taproot-ref/d86ea65d288be1fd03e9e19e503b17612c637374 @@ -0,0 +1 @@ +{"tx": "a8b2c1d602dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5f00000000a06df2f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42701000000a95303a40343c087000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7967f000000", "prevouts": ["517148000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "1fc6410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "2b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93618bdd98e4dd01571cb4788615e57aa4d3492f4068752bbf05bf3e40f7708bf38fb898061b9e990a9b5449c5e7217db506cdc93f8f373bfce07d03a77edf1b275195038de5261112827291f7af9c58b034003ed818b7e5ec0d4ccdf81f6c2ea4d"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa44f1db148647e579a127c5c190f6913605985e391579ddf83e446378ee4bc7a1d75fc84f2af88925f7ad475b3203cbf9256a43a0cda52d14a3416be93a7fb1c4d74d03d2cf0ae79996d1bf896237ca201e78f1b4c5ece550af4c0e01e9fa9886"]}}, diff --git a/txscript/data/taproot-ref/d8ac2a246d17295baa73602fa55f5ef1d6edd095 b/txscript/data/taproot-ref/d8ac2a246d17295baa73602fa55f5ef1d6edd095 new file mode 100644 index 0000000000..31b6f15c9f --- /dev/null +++ b/txscript/data/taproot-ref/d8ac2a246d17295baa73602fa55f5ef1d6edd095 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700700000000cf91ab8ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1e010000002e60e4f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43f0000000034add3ce038151bc00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79695b58e1e", "prevouts": ["055d0e00000000002251203236882dfaab6a61030776953d98ee1af902cb36dd280fe66ad8ee191278ec27", "e3536f00000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "e1fd400000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "387d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d03a0e2dd976c032df5ba11c8ac0ec783bfd7377fb7304a38f58a019219dc2e3f7118923d14a9704f5c6065ead9bf1df659362e443facca38f7fc54a29b18e2b8fa601fcc68a78472d280e0a6f10ace0c22dad9ad93c154f995d1132d7b2f793"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8f5321bd3c280560a6e93f009006b65547a58d72ede42c89f2f760c3bf47a1d1aa12168afdb4ef286e7748ddb08cf408d85b089f504486378d2bfb535c0d2875b"]}}, diff --git a/txscript/data/taproot-ref/d8d54db51b8f8299982f8136c6058c9e8063811b b/txscript/data/taproot-ref/d8d54db51b8f8299982f8136c6058c9e8063811b new file mode 100644 index 0000000000..74423f0123 --- /dev/null +++ b/txscript/data/taproot-ref/d8d54db51b8f8299982f8136c6058c9e8063811b @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b600000000e9c7f4e6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcc00000000ae03d8a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b63000000004e7e6ee9020bc17c00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acc8010000", "prevouts": ["529f330000000000225120973a94e36a4a923b8d161b8fe153210f91b56b5e4fa7540d30da78859ffb8897", "1b20280000000000225120035d0d8894332b18eeb5087880b9b7fe7a878dc0e9a501d9b85908b60f4f194b", "d2c2230000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a8814e3956d08f0194fae5aa4da4023be389b084c13928eefd595af05138750d"]}, "failure": {"scriptSig": "", "witness": ["6a33616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/d8def6ae46c2ae1d19b457603e2015ddad467ad3 b/txscript/data/taproot-ref/d8def6ae46c2ae1d19b457603e2015ddad467ad3 new file mode 100644 index 0000000000..2781bb2777 --- /dev/null +++ b/txscript/data/taproot-ref/d8def6ae46c2ae1d19b457603e2015ddad467ad3 @@ -0,0 +1 @@ +{"tx": "7d81ada40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ab00000000a5db64b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf970000000016aebcde0482f29200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79663000000", "prevouts": ["bef7110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bca582000000000021521f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f6", "final": true, "success": {"scriptSig": "", "witness": ["f9fc9e4d9ac519dbdce2fb2127d2c12d0355253ff8909de84f5bf5b9e6469f8e2faa5bcbd974a71190e7a1cfc4470fb755181d83987c36a4003d93f96c532e9d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5263da901d565efd7d04f0f476aecec6f0bd20a16d03f37ea48b578ea23197bb7520611bb100569dcf1b7902b5c2b7bc23f139f28705cf6ba3072112ada68a03f6", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d8df811ed2f11c79fe945f4943ea3299a251ecb0 b/txscript/data/taproot-ref/d8df811ed2f11c79fe945f4943ea3299a251ecb0 new file mode 100644 index 0000000000..c429421dde --- /dev/null +++ b/txscript/data/taproot-ref/d8df811ed2f11c79fe945f4943ea3299a251ecb0 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3d01000000da98460ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8401000000f6fde8a203bc4d9400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c147d44c", "prevouts": ["fc6370000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "5ab02500000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c04c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688fc8f615032475bb12c71b7eb73effb9d0886ca0e0e26ca1dee2899bd81981c1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004500c8753d4e6010499b58065b36892efcd9281a64e85ebf7c5dcb8f6f4baee16c3de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}, "failure": {"scriptSig": "", "witness": ["4c52c0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5120e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e192555fb599a2fbb7b206b08358b85e40a527ad21aa064f750df81600ff72cf4ef17ad4bbf375bb62f626ec8048d4347cc1eef977780228a6d2fc47294088d561"]}}, diff --git a/txscript/data/taproot-ref/d8e4caa314d508c3062410f0d680eb589488140f b/txscript/data/taproot-ref/d8e4caa314d508c3062410f0d680eb589488140f new file mode 100644 index 0000000000..f0ffa4921e --- /dev/null +++ b/txscript/data/taproot-ref/d8e4caa314d508c3062410f0d680eb589488140f @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1000000000e348ed568bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44e01000000d194e30f035234630000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709ed1724", "prevouts": ["119624000000000022512048dae93b9a8752a11e2bf9d811f71f83e914d496dade834e573813f3fedfdad6", "607441000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d95196c0d5dca92f2d33c0ebad1483bfd9a8aee93ace9d0b7d3c96541db4e2fc"]}, "failure": {"scriptSig": "", "witness": ["6a35616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/d8f77e44fa8aab802aa9131ae9f319611a054835 b/txscript/data/taproot-ref/d8f77e44fa8aab802aa9131ae9f319611a054835 new file mode 100644 index 0000000000..90e8cbba11 --- /dev/null +++ b/txscript/data/taproot-ref/d8f77e44fa8aab802aa9131ae9f319611a054835 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c61010000001257accddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c650000000012c97ec6018f237b000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374870b5af43b", "prevouts": ["bc124f0000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "a21c580000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["fe", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368d877db375ed8535ba033f90d60f6b296e0f2bd1d7897409f54097620de448bdd800fc56907ebb8e18291aa6f74a5d7a46b4d60066ab44c243b43072452172e3365bb68c3eae5e6cd9b20289e581f52d4e8c0cb4ba58bcd8be9e67bc80fb920a1e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f273e05517e7d7c4ebae818f78ffc6ae6bbd8b4691985bf60fb53bef1b79009a0d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3b44d8b0f62b2d27de7be259100200d6da1e5303b29f3eaa1b6a4eeb0c96a42f364ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}}, diff --git a/txscript/data/taproot-ref/d915944728f949574638f5527cabdee757340ecc b/txscript/data/taproot-ref/d915944728f949574638f5527cabdee757340ecc new file mode 100644 index 0000000000..68ae813b62 --- /dev/null +++ b/txscript/data/taproot-ref/d915944728f949574638f5527cabdee757340ecc @@ -0,0 +1 @@ +{"tx": "d14930c602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbb000000002238ed8360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703d010000005e661cef048a862e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca4ce8961", "prevouts": ["33ee20000000000022512023bf095063e7bb97384fbec96f4f01ad8898e1e0efd80c3cfbd3ae44a7eaec2c", "cfd60f0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "a17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365782dad4624e1436d6ea54bb6ab260d102b127668043cbd100ab813dee80a28c33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae668dba12609f1dce2a1e29faaa62ff248d54f408b31ef31944f67a579d4fbb4"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e56012e14d1393796178822b876e37f88bfb8786abf6d56f290a567bb98032f4de668dba12609f1dce2a1e29faaa62ff248d54f408b31ef31944f67a579d4fbb4"]}}, diff --git a/txscript/data/taproot-ref/d92c58e19437f5a57d606edb988ebe5449b4db1d b/txscript/data/taproot-ref/d92c58e19437f5a57d606edb988ebe5449b4db1d new file mode 100644 index 0000000000..3bacffa1ba --- /dev/null +++ b/txscript/data/taproot-ref/d92c58e19437f5a57d606edb988ebe5449b4db1d @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5d0100000065384aca034e9a750000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748722cca356", "prevouts": ["bea4780000000000225120ee3305d066df7da0d9359f951912ab6e6d37e7b862aba6249b3f95860f1fdc83"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "597d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936312c79d7240b9e23cdcc387c1150aad8c47f5ef9191447124def4f04045de1e0613bea5824cd1812f2095288c03f032c5bbbfbbcd6a739f4744a40299340ab834be962498b383c32e8a84fa570ade752f3a2216469b10dbfd65078bd8e1b5998"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93606d200554e8b3644c14695358e08280b763a8aec693ef25cad933bf038da2c47e343ebd89880aabef0f18c5bef462b16920a32508939784a2317d7ebda32c7f1d0160c53d01d80ab4be204ae4e021ad6f56ad3990ac4b37baa4678d530d3ba4ecd61c62feef9509bc7b3762bc81079411fa6867ea4986820580c60fa1e8298e9"]}}, diff --git a/txscript/data/taproot-ref/d93387aa595f09f4e40642c715176275012422f9 b/txscript/data/taproot-ref/d93387aa595f09f4e40642c715176275012422f9 new file mode 100644 index 0000000000..815d93fc66 --- /dev/null +++ b/txscript/data/taproot-ref/d93387aa595f09f4e40642c715176275012422f9 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3400000000f74ebda1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd6010000003ae740d901134630000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48757010000", "prevouts": ["a750530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "71fb250000000000225120199333ae2814ece819e66b6eda683343e1bb1d0c50810e300807466af2e93101"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_74", "final": true, "success": {"scriptSig": "", "witness": ["aab015fdea84fe0e91b8322a7ea01a7840986b3432f88733206552a5c62be599f7e0b49e00292635f4c69b5af6c9e5bbb31350bcae561d509ad2e819d0d044a103", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["a1ef0ed3f13b7f1fc33423c1212ec936086c8dbc09a62853ae1373058575354d28ec806bceabf20ce2771f5ef4b21441aea0cc247743eb9a15ea3208635ebe1574", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/d93dd1d6d2d9b39d77cd72571effaec51dad73cf b/txscript/data/taproot-ref/d93dd1d6d2d9b39d77cd72571effaec51dad73cf new file mode 100644 index 0000000000..2fb099eb52 --- /dev/null +++ b/txscript/data/taproot-ref/d93dd1d6d2d9b39d77cd72571effaec51dad73cf @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1b0100000056ef84c6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1500000000048e2596dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e000000009ecaa1df0136422d000000000017a914719f78084af863e000acd618ba76df9797223689875e000000", "prevouts": ["f4dc280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee4f4f0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd", "53ad4d000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ba", "final": true, "success": {"scriptSig": "", "witness": ["a9a5b68f1d86fd8af024c4f75d1a38f2d10e7637c64a54a2894f0cbedd1e1af59d12b32f020938759a67837bc3fef012ce7d045cb2bb06c6242d1c290206a37082"]}, "failure": {"scriptSig": "", "witness": ["a664329d30e124e738e84ce40146800c1ed5357bbda9e916be43639b3b641673b9c5b2282f208af0925bff854acec14556591069033fae97600e5395e3790f45ba"]}}, diff --git a/txscript/data/taproot-ref/d9462d451520aea896848f14167cad63f8eb631b b/txscript/data/taproot-ref/d9462d451520aea896848f14167cad63f8eb631b new file mode 100644 index 0000000000..c06d3cae70 --- /dev/null +++ b/txscript/data/taproot-ref/d9462d451520aea896848f14167cad63f8eb631b @@ -0,0 +1 @@ +{"tx": "b354418b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2b01000000785719ab60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d801000000a030ebbf032d37300000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac35050000", "prevouts": ["1c06210000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9", "72e9100000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008d", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936529ac28ba9126d334d2bfe78381a644e93a06c9df65fba8ceb6ff6d71211d607f2f7628d981d9c0428415dafbd1cc169dd3ce50060f3002d6f03fa895459568af43de7556260bd81909ce9fa765818ab5d5ff32210a0a876b048ce5ffdf4a21f"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936550f803589323383905fb3624331699e0907c54c55ae82563b3c36b855e46ff6b25240bc46c035392207c1076e816011b96fc57f286e81391f52d072a1ebea8b62cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}}, diff --git a/txscript/data/taproot-ref/d9632d4e4f8d7cc9db523291bb7442332d7c588c b/txscript/data/taproot-ref/d9632d4e4f8d7cc9db523291bb7442332d7c588c new file mode 100644 index 0000000000..8cd0e32729 --- /dev/null +++ b/txscript/data/taproot-ref/d9632d4e4f8d7cc9db523291bb7442332d7c588c @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701c0000000093e5369f60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270700100000013a28ec804895c2000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787270abf5f", "prevouts": ["4552100000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "3d1c1200000000002251203e1b6fae524f56ebd8e25d4d2010b2e478325da2c77049f1de4edb81deddfc75"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["8136e60b5a749db7055c098de5c767d09d597e5fb58a7abd1b3b1c5562a2a0de9063b9b4e2d193a68ab4a790844cdad53eb6ffd787a41ddc3e084b1eeaacd8d701", "6f729d8258fa1d21cf5e2a685a69f7", "75005a23fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774daba5a8823fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da6e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b28fc3474578691d9e244d7b16b501b38340815892291711d256157ad1ee8dad0de486812e546ee343fc80b33a28f311d3769c55b9f9af57521b8222f62c50b838823e011c3227b6379bd1fafb84ee100b553f66bf120084f89826320ec9a568298dde6fd35a7daedf6e8b43006adf2c3120c6e52ace67cfaa97cf3292ad0adf762774921380a419cd0244be2cf22fc9482b6be6695cebb3f4a25992592b5ff00000000000000000000000000000000000000000000000000000000000000006e692c29a2af08d0c07bd51a20c6f04115844f224a8f2483500101b22c98b78749d66a1bb126827bab6e123cad1c62c1d2c4c3b11621ab38aab2dbd2fadfbb92b4bc223aff5abf00ae2194eba7e7507c4679c544ee0f8fdcc942cb71079cf6590405d7b50775128ddd691afc216d299aa73690516e177ce40e767b014d7234afd3c813fa1c1e96078ceb5d0c20ee865c609d00bd2764aba33dab8299d82201f8f37302572b4032cf89a221f094ee0f776acb1948e2971cc52c7548b0766ce4f700000000000000000000000000000000000000000000000000000000000000001d089b5ad5245ccb86bfa71e3b9f1dc4b881f35f18527b8a712ac27fa4d0077a9be4fbbe05d6b742e19a169393f8399ac49b6a3f8fe25e357fbd21be65c5e480febd64ea7daaac5bc7a1202bcb709ed9698e442c24e3acda87b93669ee8f6e9a8121ebe960744f9749796aafb4b96fb0d838ff9a74d0510dc4ff39bb1a9f4c551c4d8539fa98efdc030f11f2d49ed06f459005af216c5950be29f9248ff8a98647cb83b84db5f0a77171f66bfa83a44fa126bcc7c362c5dc48462fdc3d10a0bbd33772a9ef6caa14e124af9b8cacefeee271d9ca6261be901d26b266105e4b84de10dd7de7d0a271d5dd2e892b957c0aeac76223b0c8a9ae5d28f17f1522d0cef29dac0ecf80bfa2bf2419821d2fcc148757f849b7ee26f8409d618121a637b57b79f04b8200de1b3f169bd662d9ab3977ddda4d399e406b026ce1fb8338f8f33db4eb1ee22921e9b7482cd813335e7a5fe207feb124a119889288f698f4ae2852a529075dfd03b6616b347751547bd79643623e5ac1e391aaf7dfa5a4cb7acc5d4d122a8d3c9493bd10bf5f9fc690163ad98c83fe2fe82629f68c75b9a4ad7f65dfac95d2b6a9580adfe1eb93c34c5b3d07ba658c17807015fed9d87202ca3f7162dded8d8809d366758b5968df33bbb14065deabdd83cb2467e8249ea2a808a89e0e6c85afc06f9ae1b4713e1880b1090ac5e3f7ec32968aac2a003f61127064473c9fd3a2c3dac4f849aba576e319cd9b9b4508583384e8741401427ab18623ad10afad3383b0b306a03bd495ff84a8665b410373f619b18b144ab75d81bd0000000000000000000000000000000000000000000000000000000000000000d73ec15d7f56b5a16b80e54d411bb4a9d67d1c66f078f825ff042fb865b9ea2df92a551b325735c4674c323f8ed8a3c63f4fc3f8c623173ec6985991b8b6f0e0f957ccaddda9182dc82949e6dbf6a1bfa91f4127cbd3124861088c1fd3176f4703eb8b1395916cc80ba6648ba7b0a1a11844e81635c58a50f5c88d0ce3ec1c82b68c4089be2fbb5f7736a3a221d94c0c12d4d0a003e754324c3d7174e4406ddcbbb561cebe9800256ba4504c3fc950a79fd8c2c6c30625d45e3094ef221f9951a436147f0eefdfd78dbfd2735ee3da7c2899f0ee4e18a2344b5d0e1638192defacc59095c8c3cd683f765618a427009da6fd4b5c09e5d0be10694d96688c37c20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029a6ad1d9b822582ae9fa8dbd97c350030f17da5c15189bac30a6a7e7f21dc18ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000001ddaad8a5eb165c8d8255498038debcfa140e20dec6301387f98b99b6063338211ae48db51a42a878e484aa563b47d2da3956c5922dca14f6b9db6c24f7bf27988e0fa67203cb2467ecbe60e720fa758aacc2eeae0404c729234a6fddd4c9abfa912d4c87fd2730c0ee798a40f30844018ccfb663649e211a633638ba8bc7556169e4b43106fb02cbec7f91545ad7e8b8205b2d8dd9667739e82fc60d41fa5a55370e872a375fbd5b7ea6681dcd7562c0c0d7824b4703a4610006ef27d28ce53791a32b5344e3a8723bfefd2c361cfc9e6e5e8afb4156ec33bff105db026cbdf", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["8136e60b5a749db7055c098de5c767d09d597e5fb58a7abd1b3b1c5562a2a0de9063b9b4e2d193a68ab4a790844cdad53eb6ffd787a41ddc3e084b1eeaacd8d701", "18c1e902812f9b4a82d1035803bf", "75005a23fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774daba5a8823fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da6e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b28fc3474578691d9e244d7b16b501b38340815892291711d256157ad1ee8dad0de486812e546ee343fc80b33a28f311d3769c55b9f9af57521b8222f62c50b838823e011c3227b6379bd1fafb84ee100b553f66bf120084f89826320ec9a568298dde6fd35a7daedf6e8b43006adf2c3120c6e52ace67cfaa97cf3292ad0adf762774921380a419cd0244be2cf22fc9482b6be6695cebb3f4a25992592b5ff00000000000000000000000000000000000000000000000000000000000000006e692c29a2af08d0c07bd51a20c6f04115844f224a8f2483500101b22c98b78749d66a1bb126827bab6e123cad1c62c1d2c4c3b11621ab38aab2dbd2fadfbb92b4bc223aff5abf00ae2194eba7e7507c4679c544ee0f8fdcc942cb71079cf6590405d7b50775128ddd691afc216d299aa73690516e177ce40e767b014d7234afd3c813fa1c1e96078ceb5d0c20ee865c609d00bd2764aba33dab8299d82201f8f37302572b4032cf89a221f094ee0f776acb1948e2971cc52c7548b0766ce4f700000000000000000000000000000000000000000000000000000000000000001d089b5ad5245ccb86bfa71e3b9f1dc4b881f35f18527b8a712ac27fa4d0077a9be4fbbe05d6b742e19a169393f8399ac49b6a3f8fe25e357fbd21be65c5e480febd64ea7daaac5bc7a1202bcb709ed9698e442c24e3acda87b93669ee8f6e9a8121ebe960744f9749796aafb4b96fb0d838ff9a74d0510dc4ff39bb1a9f4c551c4d8539fa98efdc030f11f2d49ed06f459005af216c5950be29f9248ff8a98647cb83b84db5f0a77171f66bfa83a44fa126bcc7c362c5dc48462fdc3d10a0bbd33772a9ef6caa14e124af9b8cacefeee271d9ca6261be901d26b266105e4b84de10dd7de7d0a271d5dd2e892b957c0aeac76223b0c8a9ae5d28f17f1522d0cef29dac0ecf80bfa2bf2419821d2fcc148757f849b7ee26f8409d618121a637b57b79f04b8200de1b3f169bd662d9ab3977ddda4d399e406b026ce1fb8338f8f33db4eb1ee22921e9b7482cd813335e7a5fe207feb124a119889288f698f4ae2852a529075dfd03b6616b347751547bd79643623e5ac1e391aaf7dfa5a4cb7acc5d4d122a8d3c9493bd10bf5f9fc690163ad98c83fe2fe82629f68c75b9a4ad7f65dfac95d2b6a9580adfe1eb93c34c5b3d07ba658c17807015fed9d87202ca3f7162dded8d8809d366758b5968df33bbb14065deabdd83cb2467e8249ea2a808a89e0e6c85afc06f9ae1b4713e1880b1090ac5e3f7ec32968aac2a003f61127064473c9fd3a2c3dac4f849aba576e319cd9b9b4508583384e8741401427ab18623ad10afad3383b0b306a03bd495ff84a8665b410373f619b18b144ab75d81bd0000000000000000000000000000000000000000000000000000000000000000d73ec15d7f56b5a16b80e54d411bb4a9d67d1c66f078f825ff042fb865b9ea2df92a551b325735c4674c323f8ed8a3c63f4fc3f8c623173ec6985991b8b6f0e0f957ccaddda9182dc82949e6dbf6a1bfa91f4127cbd3124861088c1fd3176f4703eb8b1395916cc80ba6648ba7b0a1a11844e81635c58a50f5c88d0ce3ec1c82b68c4089be2fbb5f7736a3a221d94c0c12d4d0a003e754324c3d7174e4406ddcbbb561cebe9800256ba4504c3fc950a79fd8c2c6c30625d45e3094ef221f9951a436147f0eefdfd78dbfd2735ee3da7c2899f0ee4e18a2344b5d0e1638192defacc59095c8c3cd683f765618a427009da6fd4b5c09e5d0be10694d96688c37c20000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000029a6ad1d9b822582ae9fa8dbd97c350030f17da5c15189bac30a6a7e7f21dc18ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000001ddaad8a5eb165c8d8255498038debcfa140e20dec6301387f98b99b6063338211ae48db51a42a878e484aa563b47d2da3956c5922dca14f6b9db6c24f7bf27988e0fa67203cb2467ecbe60e720fa758aacc2eeae0404c729234a6fddd4c9abfa912d4c87fd2730c0ee798a40f30844018ccfb663649e211a633638ba8bc7556169e4b43106fb02cbec7f91545ad7e8b8205b2d8dd9667739e82fc60d41fa5a55370e872a375fbd5b7ea6681dcd7562c0c0d7824b4703a4610006ef27d28ce53791a32b5344e3a8723bfefd2c361cfc9e6e5e8afb4156ec33bff105db026cbdf", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/d96eb1935933e5d8a16bab96d06d05f8b1ab6619 b/txscript/data/taproot-ref/d96eb1935933e5d8a16bab96d06d05f8b1ab6619 new file mode 100644 index 0000000000..aaca7a6e23 --- /dev/null +++ b/txscript/data/taproot-ref/d96eb1935933e5d8a16bab96d06d05f8b1ab6619 @@ -0,0 +1 @@ +{"tx": "4296b05c0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d701000000192c02da60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703800000000b70f74e6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c010200000054072fbe0445ff6e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e4cb024e", "prevouts": ["0526100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "099f120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "39c14e0000000000225120bbde5ba4efe7e1dea8424d44f6a18f36c486dd20519c71d54e639e6583aa7bfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_c7", "final": true, "success": {"scriptSig": "", "witness": ["c1a85d8b3eb980f76eabd5741f07251635cff2f196a301480812513bb5d63da81eec3fd4d352263e70d2ca1df90242916fb1df6dd125a9f1faeddc52c804b6e7"]}, "failure": {"scriptSig": "", "witness": ["561bd7846262baae81f6792ab6d77c043e5928476d727ec47177cd0f017253062b020befafbd057076f69c3e16900a483820fb4aa0691426335697c2cb2f68cfc7"]}}, diff --git a/txscript/data/taproot-ref/d9721f612be2c4596ef2507879885c69a5e6e58d b/txscript/data/taproot-ref/d9721f612be2c4596ef2507879885c69a5e6e58d new file mode 100644 index 0000000000..4d42231cb1 --- /dev/null +++ b/txscript/data/taproot-ref/d9721f612be2c4596ef2507879885c69a5e6e58d @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4470100000039193aba8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a3000000008ece121902c3e279000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787819fc62d", "prevouts": ["8ad53b0000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "73f74000000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "327d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b0246b7a5461d23b2ebf642f7df88e05c9d62107f66abf7b5f94d7753ce57b53620e954adb3b90d8c3597d54022d70f5af7b761a66be618c54dd56feea2be872"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367bb4cde3e3cc203faebf1c98a38c23c69871d6882171bec860ddcb5f2eddf6363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b0246b7a5461d23b2ebf642f7df88e05c9d62107f66abf7b5f94d7753ce57b53620e954adb3b90d8c3597d54022d70f5af7b761a66be618c54dd56feea2be872"]}}, diff --git a/txscript/data/taproot-ref/d975fa857300c644b1b8b86b9e5579116325e3b6 b/txscript/data/taproot-ref/d975fa857300c644b1b8b86b9e5579116325e3b6 new file mode 100644 index 0000000000..eefbec47f5 --- /dev/null +++ b/txscript/data/taproot-ref/d975fa857300c644b1b8b86b9e5579116325e3b6 @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4db01000000aa09a19cdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0f0100000069f2c7ce60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270920100000099f9349f028e428a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487596bf447", "prevouts": ["72db310000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "266e490000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "02ff10000000000017a9146704ae21c886c9ded757e2b67d582abfc91902d487"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063c468", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367be4a8bb12b73021ccb63a6bc4fd84e79b116d92f00fdc636ff8584a9737600fca92fb159a7f16850def0f13a878cd04653ddced5aa57281dcbf7f9041e8663ebbd17872a9d61e54e96dfef681da77b5399be78aec05b527019b8e812e967c33a95f177959a3d24a94a797d1e607e5550897d4e95d12a52323e6e8eeeab3383c"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699870a105b0e885032e1422b6e64265097934c5360dbbe05b4622b568c1cc270161570c3f10a90b75a16babedba4ef90c71a7e82b9436df981e4930578e77912a95f177959a3d24a94a797d1e607e5550897d4e95d12a52323e6e8eeeab3383c"]}}, diff --git a/txscript/data/taproot-ref/d97fad7ecab4d8f234efc71d9e0019d3cd6866be b/txscript/data/taproot-ref/d97fad7ecab4d8f234efc71d9e0019d3cd6866be new file mode 100644 index 0000000000..b42ceabfdd --- /dev/null +++ b/txscript/data/taproot-ref/d97fad7ecab4d8f234efc71d9e0019d3cd6866be @@ -0,0 +1 @@ +{"tx": "70ffc10b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b230200000009cc2dafdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3901000000dc9f8bc8023bb179000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787fe43162a", "prevouts": ["1d03210000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "85905a0000000000225120d10cdcba7157d8df26718afda7706aaaa427ac1b5d7e5fac924a4c3a7b738d66"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_57", "final": true, "success": {"scriptSig": "", "witness": ["a063ce31fba109939234fc01f06aaf1ab642b56141e01b0c1ea84cf22e940aff2fda3c46aea52c8af7433dfaa9f0268a09381bed9deb4cdf35951912ee7fa6a703"]}, "failure": {"scriptSig": "", "witness": ["aa796f3cfdb2b54fef664c0efc3b65c55eeb55a838824f29aeb5f23162930b42f4602b8e974d7da283a76a3231a1657fbdc37d0c49a0d5efc890dfcde9887e2657"]}}, diff --git a/txscript/data/taproot-ref/d9d8525ff675d165e7bd245edb10bef8ffbabf37 b/txscript/data/taproot-ref/d9d8525ff675d165e7bd245edb10bef8ffbabf37 new file mode 100644 index 0000000000..3effcdeb85 --- /dev/null +++ b/txscript/data/taproot-ref/d9d8525ff675d165e7bd245edb10bef8ffbabf37 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45301000000f58a3dee8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44100000000b63cad77dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bef0100000079a1743d0344399800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df979722368987ea000000", "prevouts": ["8b783e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "624c37000000000022512099a26739d97cb47a5f7edeeb47465139706da2fc4352eb812a3e381cc2e19a92", "3919240000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "897d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e825e476051edc329ceb3a02f4bde28569ef4d6846a9140276d24ddc98c1f436ac1726cb8b9ef30538f8a1a93f31e75c47dd280be49ef0cf0ee8d9ed88fe0918226c56da6b4a79dd49e001229b88fb5122d120ac43d63d1be0cdb38b208b21132e"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e74521192f9881d050e9eb7f2031b3bef3eee8197447af4f964ecbb21ec264c058e965213f8dbdd3ccbab86b6d585f0f8e78abed831015bbc989f3cab476ce59ac632f1e88e109b3d5485dae08acb0148fc939094c3a94300b3efbd66c89bc20"]}}, diff --git a/txscript/data/taproot-ref/da15d30445dcabf73491b38ff9b7fd6ebf09fabb b/txscript/data/taproot-ref/da15d30445dcabf73491b38ff9b7fd6ebf09fabb new file mode 100644 index 0000000000..7567bc1cab --- /dev/null +++ b/txscript/data/taproot-ref/da15d30445dcabf73491b38ff9b7fd6ebf09fabb @@ -0,0 +1 @@ +{"tx": "6fe1dd5a02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c070000000006cfdada8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48600000000e8441bcf03113b90000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487cf000000", "prevouts": ["bdc05b000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "6a7436000000000017a91486e5fab3386e07350db4c59e442dbaac96c1816287"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["fc4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900458771b6e792b25070418091d57f3336a76b43209d1f0f67eabea9d94d6d252d60aceb16be1ebf4fc69deaf064fc7bf5d7ff2149818b5ba4c28c799d30ad567cc959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}, "failure": {"scriptSig": "", "witness": ["4c52fc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365599acbe1f244de2cb64ba6851492e50472c162a45b9ea3e19f7ca89ee01985a731d32c4c28957ee8de75561afe63689e2428997edbca796d37c8feacf80dd0b4e0df2464f99a35d5bc9fbf69ae3045675e957332f77327dfd622124d00cb4df"]}}, diff --git a/txscript/data/taproot-ref/da20174fe1299204fdf8cca351a424cf681308a2 b/txscript/data/taproot-ref/da20174fe1299204fdf8cca351a424cf681308a2 new file mode 100644 index 0000000000..e18f5445ad --- /dev/null +++ b/txscript/data/taproot-ref/da20174fe1299204fdf8cca351a424cf681308a2 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127041010000001720b19702a1341000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acac33b72b", "prevouts": ["32c9110000000000165f142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["e397277edb9892f8bacbdcb6543289fb0df076055a91ea7e74f59d361d35c07b375a39ee6d07249e82169004b19323f96057fdeaa6b91474614cc9ea8b65e71a", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/da3eafaf969feb19889dd744b3407db1aa866e06 b/txscript/data/taproot-ref/da3eafaf969feb19889dd744b3407db1aa866e06 new file mode 100644 index 0000000000..baddc2299c --- /dev/null +++ b/txscript/data/taproot-ref/da3eafaf969feb19889dd744b3407db1aa866e06 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1402000000ff7187b9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8600000000e2bd2fabdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b54000000005614c499012d9a5900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388aca876a75f", "prevouts": ["cc547700000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "b4db27000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "aafc28000000000022512008ff927e8178e20f38298d934a97845982dc7c5901b7d815cf7926413ad6b4c2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "657d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d46ed5c88be999b027defe78826bdf9f79fd708eb8b2e1895cb28c5d0d8f8cf07a9921914746f344d752c7034b32810721c9853c38c376ca018a4c3c5bab65757fdb01d6ca2155f5be7a678ca6a1e1d0c436995e81f878ed9c74997cf4fccddd302781454c6297f6b8a579760f4d591c0acf84ff9d038b064bbab8a5d53835db"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c56699834a23a35d7a8a8e446f06483c0f6f4014465e54b19938cdc9d35914e3da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e38fd10ac28b4a0ae18793cce60e7e7ebbedf1e3488ce0551c956bc9cf517ba032bc2c7d802e8c870cc0fefcfae9d23d316cca1682651be3bf62b663d5ddaa443"]}}, diff --git a/txscript/data/taproot-ref/da802c4897e37a5e51f367edd23444c11faa33aa b/txscript/data/taproot-ref/da802c4897e37a5e51f367edd23444c11faa33aa new file mode 100644 index 0000000000..b799cd97bc --- /dev/null +++ b/txscript/data/taproot-ref/da802c4897e37a5e51f367edd23444c11faa33aa @@ -0,0 +1 @@ +{"tx": "d3c407fd02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf59000000008d3110a5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce7010000001d03cbb703ec85ba00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc53000000", "prevouts": ["c7df65000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "38585600000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ed7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa229db830b5291510bfd4e55fc2f3a45cfb4105ece0af57cbfe0942d597b32d0c27d2631c3cab5fe643277004a2e6838e79a7dd6765c91a13be066042b33c17d3b131de5807af4725e3fdc8c81388bc895736ddb6e799e7163e8586c833ffc627"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4a97da4cacb7d2ba59131ae423230c4733e99b93a89fd0934cd3e0ba8b31d50a45769ff8e70e4bb7b91d42acbbb62837b0e871ab760bcabf7dfb792b2e999f3b131de5807af4725e3fdc8c81388bc895736ddb6e799e7163e8586c833ffc627"]}}, diff --git a/txscript/data/taproot-ref/da8a14b376513348d7ee34b10ff6883f15cc6fd5 b/txscript/data/taproot-ref/da8a14b376513348d7ee34b10ff6883f15cc6fd5 new file mode 100644 index 0000000000..d13ce6578c --- /dev/null +++ b/txscript/data/taproot-ref/da8a14b376513348d7ee34b10ff6883f15cc6fd5 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf280000000029e4a59edceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd60000000005371cd401525245000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48722d99d32", "prevouts": ["4f2071000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407", "990126000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f7e6fecf7b275192c192a6fcd4b891efb7eaa132d8f10fb9190d0a2baa8d1698e004caa59c1baee03f2237f93c7a785aa484b5867d64be51a3270ee620a8e47365db42922f11ed75220edc6c675ddb7d1048605814ef88b38ccc0746b4208adf1b33c78d0723c2efa37f4f3536e545b2e8b2611b89e2ddafb64647effdd93bfc49c8718c058091c10073ac0cd025d6499d83f9ae0269b4d108e8c33cd7cfe9d27858ef80e971b2149ef8e8c576e5ed3461f20d8c2fb97c44720c1c482a436fc48625d5942d4a34ba8e3e26f8fd6589d0569e0041d3960b3cd7c5a08083107befc5e998ca21829da0c5229d4586245f5e3dabbf24fdc911215b9ccf407e62ad75e7b7149e77cc3993b985c49f8376b351cef110f46679bccf8edf7bf773647022ad9f4cc29ed3db956ed2f80af7588dc351e984e2d0a02e22f4293b73fd7d70a72a94ab7463884dfd80003ee289b3a255c9e27fae49a88e2e46f680a1b0778406f0fd29166bf0cbbbc2c3755a93127d6b3872101c04322c88e7d432f45a2f408bb705b72d280fae5fce9ebe9fe4ba070cf5ff6e85f4d85939dd7f993cbeeaee01a730e76a471127b4d2bbde21a68a06f778c6f4e0a3e65f0bf055617e3ef36efa2a6c99413b4ef664db4bb2365e81a5311819bbd431a1790458565ccabcbd30dd260bae0a2a0d3f4011b6b09a1c27da2f35ea9f8f441167e4eb7ee7ce3893fd6166fcc718902d9a348475f4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045a416fde06d6dd90590ccaed91ef0bd8538f486647382cbeeca5e39ce4df66da0ee1e8f33acc088355c2f0e93e4abfc8ab0ff1ea986a1dad4f5112c46f486a1d1a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}, "failure": {"scriptSig": "", "witness": ["4d0902b50eb576fa724141013151db3fe66801fb01f150be3c196047a70e1fc835bd115ff9187b10725dd8393d80463cdddafa5543e4cedcd5864913b75b2febf91db85a19a38b78684cc9cadf4b3a0d088db6597dd003722bb9d825a9082064e51bc3eeaf18a188b89a5de4615b5f0220c954ad46a18a31b82adc288d3b5a7d377a78b885599c4c35d3df694452d47b59657598e437784dd82c7dfce8e03b65a0c3c2a530d33cdb8fe6aeaf8fdb4dde11ea982ac9dedc5a700941c2f661a36cd0f5deebfe8c4b648f88badf4ac3c19c6ca74cf2a24ce56506450d43632d3ec05daf5a9bcac770f957742173eb63b7fb6712bb9ceacc22bb776ab956bc9782368fd4d2b6fa1ad9f01768cb58bead89b323917c6f665475e0222df300700348f005fbe8ab8a89a47a59143590b9cc5dbead51085644c1aaf6fc7c9c5f37b31527e36f77a1eb547315b20445e6b993e28c4e9de6341cc018b4592cd16433c4136f657b992badb3d8aa47436462044799e321298885980913e3e261c5856eef7de1e62c19901b03f0f8cf45a0db1fcccb30e22801ab42f3a382078593e7fec6356f23d23dd74c001419da5ed4d7b36d3912fc77f0cbe7b89fede5147c85a4954b39ef5a7fd9a7d480b01dac3000147fdd817cab3089813d1f55954b3c5bd08df5e5a83bbcb00290d8e895b6f20aab917ef22fb0534fa1938c2e756dec1171cf5aeb23c6f582e5f5584d942afa887561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93614c1f8c55bcbb87ce1813a4e8a3f18dc4a3611102a5652e00c734483b892a61dee1e8f33acc088355c2f0e93e4abfc8ab0ff1ea986a1dad4f5112c46f486a1d1a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}}, diff --git a/txscript/data/taproot-ref/da91d607fd954405726ab36fa5677e8163634ff7 b/txscript/data/taproot-ref/da91d607fd954405726ab36fa5677e8163634ff7 new file mode 100644 index 0000000000..cde0a53bbf --- /dev/null +++ b/txscript/data/taproot-ref/da91d607fd954405726ab36fa5677e8163634ff7 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e800000000a2a1cdefdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf5010000003ccba3d9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5100000000276aa1a901227028000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787240e3c58", "prevouts": ["3b470f0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "fb0b200000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "0b2527000000000022512067225551b50f550878fba08cb06856b99d76e57e98d7477f94810d7b1bff9dd2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93642d44eab8720c399910a71555eabe43edd1236492240e69469f7f7192498f0541ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045161570c3f10a90b75a16babedba4ef90c71a7e82b9436df981e4930578e77912a95f177959a3d24a94a797d1e607e5550897d4e95d12a52323e6e8eeeab3383c"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369282728574e1b1dad705c3c0a0adb2b81d4b75ec5106c57c346257d4ae7d3e8d74048a48c6eb42f280da39a6557d46ee4318cb4e3319043ed115bdbceba7fd7e7407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}}, diff --git a/txscript/data/taproot-ref/daad29bf36401da76f1b83f5cd1cc0335bf5c14f b/txscript/data/taproot-ref/daad29bf36401da76f1b83f5cd1cc0335bf5c14f new file mode 100644 index 0000000000..9f88916a2a --- /dev/null +++ b/txscript/data/taproot-ref/daad29bf36401da76f1b83f5cd1cc0335bf5c14f @@ -0,0 +1 @@ +{"tx": "dd2936eb028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49e01000000af2fb8efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1100000000d31f29b504d62552000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc89ec6633", "prevouts": ["327935000000000022512008f3b8bffed108016f8bc06cf0d4d62b3035ac315959ae84338bee34a4bab63c", "dbac1e00000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "success": {"scriptSig": "", "witness": ["c29b73f6d4115d0c8e2738347376b55bb645c9cb6ad33c9281c831847882821d5ee65f251bab3a02529ecabd935895e97fca13d6ab67c7ace8d72acb94da7407", "8d1f1a906bbf8348bae9366c058a6fe47fb27ecda3cd3ad8206b30589f0ae75ba36001b98055c70fff349d7445ded05eefa8b81089d97a610452d99b649ea382a9b321ecafd3355c4a3b6ec2e09daf4862278225be16fa57e54aafbb27bf9ec7fcc41f105ae70897f50b78", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362cabe4bd1dfe44f9c25caba22ae59e3ed616e0689bb4f0b439d419432e0754930573dffbef728e5f99ec750705b6ff33b4fd9a55f096fd6a737f31f5d0ba7958c431bd7cfd178bfa5c503ab9bb30155f754b7440556fac234eb58007b393c1e6fb24b505461cd1c68932171e021cb72f7a33ff9ec4bbd11f5402ae84f80317ba487c0a4cf32355cf011375687701fe8418d2adf8e5e1545d0028a7dc3585337fb0262e7c9e1c1e177bdbe7391a3265195b8f245141d8d3aeab23f3e1ee9342a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b759fe35edaa668e572ec3fb2f74edfb27e216052824354fde5b11e7019f9536ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbebe4e320083eed53d867fa6110ab26e788c0e09fcf0f69fb246d02c4951d2380000000000000000000000000000000000000000000000000000000000000000f5fc0c70852c992a99f1b853f11b1f96c9466e2970bea59100d9a925e04cb9381d0e45ebc6eee1203f3e4253ca802a70216924f9d3fcc0d846c53379a751124c1abebf6972bd8dec0eeabb3a7dd423ffd6db53672f9738a6bbd309f39c87e62304cbe06ce13b167c7a29b168646a1f7f6ec8dc95602f01774adf4afc0ab664e1fc4481b20a20cd342cdefd58f3c5dc6bda01d9ef41efc4186145fab7a365b0c9fea2644e2a0afca15d5493009ffdecfe82c74eae4ff314a3775974b43ee68ec570df5e89a63f903565324bf1f73a402ffbd2be955eb9f77a4318e04c24b50e72b0399b5690ad077e97d0040a1f1ef80c25d5c96b430c8bb258a29caf359533551815af5ff8e2965c0426b2a8c66b645d36029d22f44854c58c12d55bb504336e6129379b8aa42604e007e9a69a05796276b2f2dfc1cfcc060d7f2334346d5c3b0000000000000000000000000000000000000000000000000000000000000000dad077641e06245e5d79e8b0d2e1e78402698e2a12caaad79bf0ca77b31ac85300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff25f0d05f1adfb4b6f7f137e15a3076d9204c33d3e041f6861d4540fbe5e18fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7afaa2c6e77b77a4ac661fd898d095eb31421ce9aed365ce8ad2a5796c62b7db7008ae5a86aa245a539305d892736c91fb54d58ba14bfbe8837e70a216c99e74e4e6a4d06cc22e40e3936850bf89196337a582df24d67457843f8ab67dab6d612ed6a19c7672eba3d7a9faee0b1b951a9089e36fc3d813f06c3f5dd6e9d714f8ceb944f2650401eeb23655094c17b6846b621d3fbd7b91a2b644a465b30bb7096017aff21939d6b5e36f9553ee0ee8eae5c6623103eff2e661ae2d49dca2c8005280b25f708d9649a491b2dd6d44143e8f8a4ad8a0ae333499c4edf1460c8878ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8635274c8151c84cfebf83774462c86c2e9cd3a8ff8e932b85a20a8c08e2aa7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1dc562f92ad18037323a661225ea648c987112688c7b8c0231c592e537a44b0e72a8e3ca2db1d46d6631766499597ec88e1169f9620f8218c50a7bacd82915cb5e702081e69eb24fb5b6c7eaf0d40632e9bdb81aa751ddc997607c0671580b6e6c3ed50118115aef62170fa6f14088bdbeef1052e4b53e713d94fc86ff1bc78f7d651b379d743c0e595c742fad553b59485aa1e2fbaf3a1f0c57907feeb76271f72d3536fde6f9cd33b1ab6c921c4b1aa3a4e60db08844023c94b1937b23cf80000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8612c57cd5a990efa9a2a75e9911de9b6a1af594dafa60d9a1fe869c19e71859257a08356782643d9c248791ac934329ae033be1df8847df5bfee34a71e7e64f8876017d09c57d15c33df46c96f26e695d3f39cb930371b405b76dc2e7fbbc94a8b267308c5aca5f3049ff66e72dd6b6c4962ce24a29a3f82cfec426d56a0450601dc3143c29c1131e7d95b1354474edcf393b1320713b90ec3cdb87780191ab951ab137be8814c1c5231ca70ffd4e0ba965ae8496ddb9ac413f4a546ec21282876918e8f99b358acead2ce01d3b9cdf4db89382dd8c655076c07c1896f4d57740612050b5e470d4afb0891b1f99eca2aa1a0c78d1533778ba97e8a798abd9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff023971c3ac138e1865daad101fe68a8df408be7d78d2dc1de272885db76a7850fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ca8e0c0c7af18b1157148e0b76c618e63f4ec3de179fdc0bfa22867fad7ea9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c8f2e1a2938a99fea74dfcefd7a5befd0b433e71dc553f6b528e8127c11ecbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000004f5c3932dc531ceaba055d56f02e0277a9034a4aaefe973587dc8e326aacb06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b76cb9cf95dd12747dc8373c8126d81269d98ef9d0b9dd83dfa1f8af7961f1703a1982c44e7d17f44633b5674371174a16b3f4ab4f8f2bb4a79547934314eeb700000000000000000000000000000000000000000000000000000000000000002171a77a6b9a3527ee52dfb1288ed18012b2659d0011d94a481c4c64bb9d82b257a77991677ba0f5067ccdf21a7fc6079dbf81fcf9ce0b02f5d5194afc87fa0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e3c5475f7f3b57a26c1d90a1c543267589e5a9630a57673d1d9a14ef717c09095ff813e02cd4e577b6043f9cf6007ac072abd76b1ef65d5fdfc38548895a657394258661e521e0f6bf9447382c9be6ca6b06aaeaa2f1517f7e0029dccd39818", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["c29b73f6d4115d0c8e2738347376b55bb645c9cb6ad33c9281c831847882821d5ee65f251bab3a02529ecabd935895e97fca13d6ab67c7ace8d72acb94da7407", "10449375497a886b134261e8fee56d57df90fd5228f9aa236fbede6e1af6ea60f16a12e2fd2b9ae82c6ca11d9f472a19192405da1cfd509bfabdc31e7a080fa828151fef2b74f9d9b0d63bc5b44e45230960bffdbe6c4637831735b2c89206d51770f65059c401cf6c97", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362cabe4bd1dfe44f9c25caba22ae59e3ed616e0689bb4f0b439d419432e0754930573dffbef728e5f99ec750705b6ff33b4fd9a55f096fd6a737f31f5d0ba7958c431bd7cfd178bfa5c503ab9bb30155f754b7440556fac234eb58007b393c1e6fb24b505461cd1c68932171e021cb72f7a33ff9ec4bbd11f5402ae84f80317ba487c0a4cf32355cf011375687701fe8418d2adf8e5e1545d0028a7dc3585337fb0262e7c9e1c1e177bdbe7391a3265195b8f245141d8d3aeab23f3e1ee9342a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000b759fe35edaa668e572ec3fb2f74edfb27e216052824354fde5b11e7019f9536ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffbebe4e320083eed53d867fa6110ab26e788c0e09fcf0f69fb246d02c4951d2380000000000000000000000000000000000000000000000000000000000000000f5fc0c70852c992a99f1b853f11b1f96c9466e2970bea59100d9a925e04cb9381d0e45ebc6eee1203f3e4253ca802a70216924f9d3fcc0d846c53379a751124c1abebf6972bd8dec0eeabb3a7dd423ffd6db53672f9738a6bbd309f39c87e62304cbe06ce13b167c7a29b168646a1f7f6ec8dc95602f01774adf4afc0ab664e1fc4481b20a20cd342cdefd58f3c5dc6bda01d9ef41efc4186145fab7a365b0c9fea2644e2a0afca15d5493009ffdecfe82c74eae4ff314a3775974b43ee68ec570df5e89a63f903565324bf1f73a402ffbd2be955eb9f77a4318e04c24b50e72b0399b5690ad077e97d0040a1f1ef80c25d5c96b430c8bb258a29caf359533551815af5ff8e2965c0426b2a8c66b645d36029d22f44854c58c12d55bb504336e6129379b8aa42604e007e9a69a05796276b2f2dfc1cfcc060d7f2334346d5c3b0000000000000000000000000000000000000000000000000000000000000000dad077641e06245e5d79e8b0d2e1e78402698e2a12caaad79bf0ca77b31ac85300000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff25f0d05f1adfb4b6f7f137e15a3076d9204c33d3e041f6861d4540fbe5e18fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7afaa2c6e77b77a4ac661fd898d095eb31421ce9aed365ce8ad2a5796c62b7db7008ae5a86aa245a539305d892736c91fb54d58ba14bfbe8837e70a216c99e74e4e6a4d06cc22e40e3936850bf89196337a582df24d67457843f8ab67dab6d612ed6a19c7672eba3d7a9faee0b1b951a9089e36fc3d813f06c3f5dd6e9d714f8ceb944f2650401eeb23655094c17b6846b621d3fbd7b91a2b644a465b30bb7096017aff21939d6b5e36f9553ee0ee8eae5c6623103eff2e661ae2d49dca2c8005280b25f708d9649a491b2dd6d44143e8f8a4ad8a0ae333499c4edf1460c8878ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8635274c8151c84cfebf83774462c86c2e9cd3a8ff8e932b85a20a8c08e2aa7effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc1dc562f92ad18037323a661225ea648c987112688c7b8c0231c592e537a44b0e72a8e3ca2db1d46d6631766499597ec88e1169f9620f8218c50a7bacd82915cb5e702081e69eb24fb5b6c7eaf0d40632e9bdb81aa751ddc997607c0671580b6e6c3ed50118115aef62170fa6f14088bdbeef1052e4b53e713d94fc86ff1bc78f7d651b379d743c0e595c742fad553b59485aa1e2fbaf3a1f0c57907feeb76271f72d3536fde6f9cd33b1ab6c921c4b1aa3a4e60db08844023c94b1937b23cf80000000000000000000000000000000000000000000000000000000000000000fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffd8612c57cd5a990efa9a2a75e9911de9b6a1af594dafa60d9a1fe869c19e71859257a08356782643d9c248791ac934329ae033be1df8847df5bfee34a71e7e64f8876017d09c57d15c33df46c96f26e695d3f39cb930371b405b76dc2e7fbbc94a8b267308c5aca5f3049ff66e72dd6b6c4962ce24a29a3f82cfec426d56a0450601dc3143c29c1131e7d95b1354474edcf393b1320713b90ec3cdb87780191ab951ab137be8814c1c5231ca70ffd4e0ba965ae8496ddb9ac413f4a546ec21282876918e8f99b358acead2ce01d3b9cdf4db89382dd8c655076c07c1896f4d57740612050b5e470d4afb0891b1f99eca2aa1a0c78d1533778ba97e8a798abd9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff023971c3ac138e1865daad101fe68a8df408be7d78d2dc1de272885db76a7850fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8ca8e0c0c7af18b1157148e0b76c618e63f4ec3de179fdc0bfa22867fad7ea9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1c8f2e1a2938a99fea74dfcefd7a5befd0b433e71dc553f6b528e8127c11ecbeffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000004f5c3932dc531ceaba055d56f02e0277a9034a4aaefe973587dc8e326aacb06000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b76cb9cf95dd12747dc8373c8126d81269d98ef9d0b9dd83dfa1f8af7961f1703a1982c44e7d17f44633b5674371174a16b3f4ab4f8f2bb4a79547934314eeb700000000000000000000000000000000000000000000000000000000000000002171a77a6b9a3527ee52dfb1288ed18012b2659d0011d94a481c4c64bb9d82b257a77991677ba0f5067ccdf21a7fc6079dbf81fcf9ce0b02f5d5194afc87fa0c000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000008e3c5475f7f3b57a26c1d90a1c543267589e5a9630a57673d1d9a14ef717c09095ff813e02cd4e577b6043f9cf6007ac072abd76b1ef65d5fdfc38548895a657394258661e521e0f6bf9447382c9be6ca6b06aaeaa2f1517f7e0029dccd39818", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/dacc869b2d12c823c9a4bb00e5edcd51d35c5978 b/txscript/data/taproot-ref/dacc869b2d12c823c9a4bb00e5edcd51d35c5978 new file mode 100644 index 0000000000..7d40505818 --- /dev/null +++ b/txscript/data/taproot-ref/dacc869b2d12c823c9a4bb00e5edcd51d35c5978 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fd010000003193dfcfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b54010000005b35cfa901599734000000000017a914719f78084af863e000acd618ba76df979722368987f8010000", "prevouts": ["5c99400000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bf2620000000000017a9147e06846ce22cd5e23f7e03391c0538498e0e18ed87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "215c1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["81460df501ef435ba685c790d0e36c12bc849c884a1d74cbd9cb660662cde4ab52904a5773b01fb806c06221f2a2cff19cc19c63dd306fb6ad8a66565e62d4b8"]}}, diff --git a/txscript/data/taproot-ref/dacf3352a5bdd39737fb53affdf284ce61f4e97e b/txscript/data/taproot-ref/dacf3352a5bdd39737fb53affdf284ce61f4e97e new file mode 100644 index 0000000000..231bc034b6 --- /dev/null +++ b/txscript/data/taproot-ref/dacf3352a5bdd39737fb53affdf284ce61f4e97e @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c40100000047cb6918dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5c01000000fd2ae32903ce9890000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6dd902a4f", "prevouts": ["8d4638000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "ebef590000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1a6ec201a93e79c82aebcb32c5742cba4049490cef67cba707365d2e1379631f73bd198ccbfa9c702c0592bb8c84a948c36ef9eddfd1aec8278a333dab45811656e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366f96bfa32a795a0be15451bd7a8acafde79cf5d8ce79cbaf82150de20d1f80e0d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d513070c0d29d47e9fe7be7df27becdaf45cc7da31561e827162b16aa01fe84c4a24f44ecb3bab6b962a7ffa14a2ce082ec551943f33ce508b63a8ee30ee5e49264"]}}, diff --git a/txscript/data/taproot-ref/dadf4bbba1d78a438712afd4e84df10275987f0a b/txscript/data/taproot-ref/dadf4bbba1d78a438712afd4e84df10275987f0a new file mode 100644 index 0000000000..f551539b97 --- /dev/null +++ b/txscript/data/taproot-ref/dadf4bbba1d78a438712afd4e84df10275987f0a @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bf000000003562bfc98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45b000000002c898a1201ae153c00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3607604e", "prevouts": ["fcdc1200000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67", "58eb3500000000001656142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063cf68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365dbc42be0fb4d05018f85e57934c949bd98e16e34360285c47c1ce52c024f3275f88ccdecf77b0d26ba8d6f3209049de9d03155be73752c3625590c2269e1c4cf4a62e14d7fc4acbfb0196ec29a60565ac2b3043dda4cedec8cb1ff291b90d41"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b243421d00bd68ca1d9baa1bebc840cebaefc3d7d0b6247bd057554b13606328cf32df52f44331c723f7b513b476c9aa41e2dab3be9ace9864b6dc0f919492d46a7a52674f359a7dbed67a49e09732132053a9cde77eaa564fdce3cafe7738b9f4a62e14d7fc4acbfb0196ec29a60565ac2b3043dda4cedec8cb1ff291b90d41"]}}, diff --git a/txscript/data/taproot-ref/daf266d227dfb92686b3d8cb80cb4d2c4e849468 b/txscript/data/taproot-ref/daf266d227dfb92686b3d8cb80cb4d2c4e849468 new file mode 100644 index 0000000000..4d61d75288 --- /dev/null +++ b/txscript/data/taproot-ref/daf266d227dfb92686b3d8cb80cb4d2c4e849468 @@ -0,0 +1 @@ +{"tx": "a4fc63a00160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fb000000004f310ed9015b8f0900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1b62b249", "prevouts": ["40f10e0000000000225120be45abe027d497ea26107f03649e0802eba12fae4acacbea0c6ebae5b321218b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "success": {"scriptSig": "", "witness": ["55f9180acac0838f7aa1a21e01a619dc1cd4977eab715ce88d17747ba537a0054aba6af37c6c42bac656973cf2e4f13e5a4f9d7ef27228ba1b261d9e1af6353b01", "5ae231f7b92b6e7ff4b1c248b4e5a75888890d44106d168b427d7340e184ec2857ab8aeef4b5f093a66c7b13a6b984b308c98643e08d388b48a22f7a1db8addd359c3375115f7590a20d16d76db0f81a2d49f912f1728d9298db8ed980b5c421f8d16bccd67770c1a26dc4d6d4e3e1cee739cc04710e519a6b8c728579a1c760652fc14fb76f417847bcd07a9a97255266d9866337d73163eaf8d97c7a9bd8f3b4d49753562543334533417f50d42cc99b7e7d6bc82ce1f67ffc81f8252a06cdbb0efda92e288def8069ac56b08a3c8833913627ab03", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20085d1431608a13d9e6d01431e93410d0dfdde60be047e951ef24da4d3d563a1a2bc7c2cd41751e202a72526c257759aa8dc4c33bcbb906937916d53546f277fcfae54ec38d67691557f02c9486972b1f0a8d62d8c1693381df763e8d970fab0cd3dda486f5bdc474013b8bad18ae6d722a5ba69383a7cd585fda02504065248af15a3c286c6cf88b781d8aa9b25674bbcb31583b2191a103a1fee039520cd1bf1183188141ead37fc87cddc1d3f30d9695c97fd00d747e65bd4a7d849628ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fa185b00cbde494d34ce557c66053774e3d64cd4d41c82296238541df37f7375773b0d19b541d18f41b1e60e49d95bce01c4415a68e11a481d7e4b48568fbfb92e08e3b46d0c7aa5705d957d4c2071652c9a3dc9f0413f64febec95a1bc1f4707aca466883e6bca921172a478d5dd8bd84cd0572fd601163f8ff45fb21683feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45e0bedf46992462b895ab90f2e44b74d757f7074ccfb73a9d58ee8190489b361eb319a8e4eddca72a02c9ca104b7d00b05ee954cbf2a4ad2ef087218577a2caffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c59dd14a0c109e7683d0b33e5fcbab56ed7fbedc496a2bc37ad2f5fc291f000120456d60ca44db9fb0edf4768044a03e43bd461df4e0d8a7548c718395a74874e4a7f5241dd03ab792a0432554b8a1f5e037e2d586c68921c697c4349a6f57e9bc885c0e8504bd97aa7f1ab8f2e0eeb6b4ca00f7c0007b57e43e27cbd04448558f093548ee2d82731794a40acac6a0162c04fd2b804ec3ab016561b892644939372985ac19d8e73e58fdddfa22f02ae9f3bc3aefe5465645783f4455d6a8e9f000000000000000000000000000000000000000000000000000000000000000020f3ac5b09c24ec47d0a3b7e87fa10cce6dbd8aee340ba8fa9afdf245aa1a200045619bfc6fe4dcd4271da4d2c924f6704c4b81b569527fcbc3aec026c62af5b0000000000000000000000000000000000000000000000000000000000000000196619618544aab26162c4e763b10109da5d92f3b3ecf8a34177dd558f03328dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff397ca559b6ca786194ee70a65ba9c0a55d343344e10b0b11641d21831b294646227c1ecc8d4cf9ecd3cac1c41a56a4c6947d991a122c8f38d348838ba28b21cc8e555ea33dc50534f2d740b3c56792b0b46c9eb674670cfedd74452dffaebff200d095f262b9641d0a63a251be87f585954997437a8745480952fe38adc03aacc57b988d100f65b42312c817241ef64c42f92a647294c92bdf5a912d6215d5110000000000000000000000000000000000000000000000000000000000000000319cf3332908783f8b393a9db63f2c45c8fcf3b58d2024a5b36d4994fa7776d30000000000000000000000000000000000000000000000000000000000000000a11c07e8d5fd88cbba499ac53cc3d4b519e58ff55de45d057a4115e6a3db64244104796de59dfe1631bd82618a3aef5ac88c98bd75d409c76da60cf7e91aa075d12a8fc7a0c7f61476451703d7ff28a8acc17f4368cc21f8e39e1172c2cf7d5222c61a939659ab875f6bc0c71aa211f012c80ffaa9729f49f3b9b788461e540c6c586ad4c36419fc3846fd82ee6bd89a0d635bcab8e990bda7fab24a5d8dc59f23c62fee033a6e645355b86714f40b234af64e3eddf523afafdaf593c4bee739ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0367da238d38b742e29327af08cec9f71a0c3c93503d32b5cd6035a5ba684c90a0ad0e0ab7b5f831dd3d72ce93181a4a2fab4fa10e90e7946680f539150184e07d2e5848296567199ab87909f6259b45f23b3869464b261fb877d4b3614548a891081ddf6520b5b25b6d0d23e1f11b58c82b00f6f4e6f1dfeacb1a81f92f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851b1a5d164febcd92802d7ba14420652e1fa5cecf9156304d795e86187c1cf92a190b1be1376cf48670e93db187ba7db279cc5bb3d6c30f3130db18d95a231dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff223525b9fe0911b292333d948c81212710156b273d62bbac979aac51264348e17a8622602a1b8519eeb0161b133a290bf32ce3a05a8748f8feba8948f7a2ae1f92ce16ccd074bd21a434ad36c9d8c72c0edf199d10efed77b6f6b305b59b76f6000000000000000000000000000000000000000000000000000000000000000009f230367ae24a8b0fc0b06755bb62c237af82c0537658377aeaa1ba7bb6e6287d274ef14f5f1065a883387bf1a735f355f13334b58762ee02a93a7d91c07c240000000000000000000000000000000000000000000000000000000000000000ce45a8fe9167d4c375805fe5220d93bdd00b8b4ac0385de28f71d631f4d8f059c5e00448b8071c055d284584e4b4b3ff9d8b2d2a46609b375d022eb610e9898dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5e42b4ae9e59beb0239d89bac0e19c34b00b7ed5fa73c66f9665d312cffe7774020372772a41e566516a9f5449f7ad8a25e4e18ff0eaf65e2e8ab5d3ae98f6970000000000000000000000000000000000000000000000000000000000000000ebf2b30bccbb7e5b9714aa95118ef7d1b5dcabbe2efd5c99169bce1882b83b29e9e3fd717a5ed6035c512e8af8ee657b562ad4f6b77a41986e21d177f14c5c239c2e07f4e6ea8697d6f93536e742d756477f3593f36d8c0e737b7260fdb9110c2bb589b0f67c48f52dfa873a05140356c5508bf7b18d8bee1637cfa83207d3004a724018af9ef92756ac5328e1ffc45f8f6618bbd789c7519d7bda73a734d5981c56cbe92f6bab7ef7eef4145d83a37c4f95d3c92daa5a208de8d71620a6e5f072e8d485958a4c1a5862dcfba015d183f1ec4c318b7d278424ba13a6ea8b4cbf24440bd604239bd3ee7909c434904cb49bcbfe9c79ebfbbcb0a49b72a96e7b112f9535975a729f795b119588924b03760c7ca2ae4d2d582b4d761ad50d7c48e840f4dc21a989d180e6e32bde9da1497e9a2af7e6fdb1440eaf2a9bdabbeb8cd9a9a8aa55dc54fdc9d390552d62fe23a61c4ec784cc7829d58b9c41671c0385ee35285ad73cf9a7e31973f81533253e0d65bb924115cc62fcb1f56b50cc3d6345fee4735c9dbf00427ab5a4672ad64b77441c3ca7f8b12e307b99090fe85088bb58c51bb634febc23c5e582e01231835e3b9de55f35884dbaf3b49d634cbde8bf4f35f10548014bd4feaa862f44ccb01eacb5e9f43d74c83c190f9157db8db9d8bb255184981f1f50d9b4ab62596c825feabad713f7e5e3671db6fda47cfe0613ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaf3d61e00f7ea105d52de95e2214c64540ec59e6ba70b03ad9644d06275d4a7badc5438c360a1ed0e06f28ce791788a5a1dcd4a38da21c8d537050cbc6e4a353fec2be47ababfa3b968ad98a81c1db525f475fbbe875b5ffbc13c51a27cf8c92509c4a544d5537008c5f39dc9841d45bb1e1db3267ed0283bed4e2a656fd20c8b47ced7c0dcc324c5bfc2aa2392c0079b9fd4a2dbf0784fe1e0500e06367283b295e4f90d8f029176be25607d86d3844058fd54a661f2bd33946b8d320ce7704dd3a0e1733623317bd58fdf32bc93dd192e9a3f97709b6c367728c46947e5b1b75f37336f7363e3df3ad6234d97c87432a2e3ba575e9c096920b313a872d6e502b54f1dff5482e96e72b1ac8720015f4933afc264800e7b085fc465d02d4b0db000000000000000000000000000000000000000000000000000000000000000000f626a941aef43ffd04452b229df6da8fe26af44cb7d4a59362c927484b0df5e3cd73f750dfa56359be3367fb818e655479e50aa8b5a1969de43dda5281d3d57282014796fedb899df18abece1b8f86d456bfa53afdc3767e6ec834d4d260b23cff5fbac9a71946d3669ed6248547591a4c7ed56a3265b689c374a88076450494c684e895b2af6fc6f872e9bc9d180e1dad0974e282e8258f0b875a82c9a90807900b51a7b7d32a871e28b54c96624d0f6d828d0c4dff20b003d5fb016c08fbb3759d99d156356462a80c393e8dfeb7ca0643461411c52d11b4704d144f477f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a1c50c054395de600f0ca8f4471527e0bd9ca4dcb45a0ba7e863df1ee95c01182162b865a9b136e3042b2ddbe1b0d83033ec2ad60b528846bd18b280d87f43c82e9b32503cafe113b34ab89fd58dfc6e275b4cf912c8678b769fdf4bc4ec98b61e53887b33854f07be5b1a726fa667adfc2cc865e8aa0954eb79e4fd050a96d3c6af388797a01c67e5c682b84b253f9ba48654bacecc6fae35c8d430ce63f7109d1170337b5668c35bb66648600cb1b343cb9064c820ae30abe3b4655941c4cd7ae8ca34736d559ed5b0a98f9c4a03942412b5813236eb73d543aa1750b0f307"]}, "failure": {"scriptSig": "", "witness": ["55f9180acac0838f7aa1a21e01a619dc1cd4977eab715ce88d17747ba537a0054aba6af37c6c42bac656973cf2e4f13e5a4f9d7ef27228ba1b261d9e1af6353b01", "304b9b4d1c3487ebc87037fb80fece772541220d1699afc7248dae1a61c8e57210f71ba881724bef0411ac2def288653c7d0546cb8c43cf26695b401442a9f3c1f2346933da58531df56216282b22b086a975d0f3ca59720d473a946cd9c130f5c9d3d45584c1deef5ea58a6836b78dd9d1b8169aa5f54dda1b937092a6a3e88e13e3f1fb4872f3aaaf30f83c473fd53bb02014cc68c9ef4fbdae260792ac57abab3cbecc6f04230046425c1166639f84a39907fbe324c219b77143d998eec88be206e7ea68313c90d4c29a1855a776178ba00dc1d", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000b20085d1431608a13d9e6d01431e93410d0dfdde60be047e951ef24da4d3d563a1a2bc7c2cd41751e202a72526c257759aa8dc4c33bcbb906937916d53546f277fcfae54ec38d67691557f02c9486972b1f0a8d62d8c1693381df763e8d970fab0cd3dda486f5bdc474013b8bad18ae6d722a5ba69383a7cd585fda02504065248af15a3c286c6cf88b781d8aa9b25674bbcb31583b2191a103a1fee039520cd1bf1183188141ead37fc87cddc1d3f30d9695c97fd00d747e65bd4a7d849628ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9fa185b00cbde494d34ce557c66053774e3d64cd4d41c82296238541df37f7375773b0d19b541d18f41b1e60e49d95bce01c4415a68e11a481d7e4b48568fbfb92e08e3b46d0c7aa5705d957d4c2071652c9a3dc9f0413f64febec95a1bc1f4707aca466883e6bca921172a478d5dd8bd84cd0572fd601163f8ff45fb21683feffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff45e0bedf46992462b895ab90f2e44b74d757f7074ccfb73a9d58ee8190489b361eb319a8e4eddca72a02c9ca104b7d00b05ee954cbf2a4ad2ef087218577a2caffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8c59dd14a0c109e7683d0b33e5fcbab56ed7fbedc496a2bc37ad2f5fc291f000120456d60ca44db9fb0edf4768044a03e43bd461df4e0d8a7548c718395a74874e4a7f5241dd03ab792a0432554b8a1f5e037e2d586c68921c697c4349a6f57e9bc885c0e8504bd97aa7f1ab8f2e0eeb6b4ca00f7c0007b57e43e27cbd04448558f093548ee2d82731794a40acac6a0162c04fd2b804ec3ab016561b892644939372985ac19d8e73e58fdddfa22f02ae9f3bc3aefe5465645783f4455d6a8e9f000000000000000000000000000000000000000000000000000000000000000020f3ac5b09c24ec47d0a3b7e87fa10cce6dbd8aee340ba8fa9afdf245aa1a200045619bfc6fe4dcd4271da4d2c924f6704c4b81b569527fcbc3aec026c62af5b0000000000000000000000000000000000000000000000000000000000000000196619618544aab26162c4e763b10109da5d92f3b3ecf8a34177dd558f03328dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff397ca559b6ca786194ee70a65ba9c0a55d343344e10b0b11641d21831b294646227c1ecc8d4cf9ecd3cac1c41a56a4c6947d991a122c8f38d348838ba28b21cc8e555ea33dc50534f2d740b3c56792b0b46c9eb674670cfedd74452dffaebff200d095f262b9641d0a63a251be87f585954997437a8745480952fe38adc03aacc57b988d100f65b42312c817241ef64c42f92a647294c92bdf5a912d6215d5110000000000000000000000000000000000000000000000000000000000000000319cf3332908783f8b393a9db63f2c45c8fcf3b58d2024a5b36d4994fa7776d30000000000000000000000000000000000000000000000000000000000000000a11c07e8d5fd88cbba499ac53cc3d4b519e58ff55de45d057a4115e6a3db64244104796de59dfe1631bd82618a3aef5ac88c98bd75d409c76da60cf7e91aa075d12a8fc7a0c7f61476451703d7ff28a8acc17f4368cc21f8e39e1172c2cf7d5222c61a939659ab875f6bc0c71aa211f012c80ffaa9729f49f3b9b788461e540c6c586ad4c36419fc3846fd82ee6bd89a0d635bcab8e990bda7fab24a5d8dc59f23c62fee033a6e645355b86714f40b234af64e3eddf523afafdaf593c4bee739ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0367da238d38b742e29327af08cec9f71a0c3c93503d32b5cd6035a5ba684c90a0ad0e0ab7b5f831dd3d72ce93181a4a2fab4fa10e90e7946680f539150184e07d2e5848296567199ab87909f6259b45f23b3869464b261fb877d4b3614548a891081ddf6520b5b25b6d0d23e1f11b58c82b00f6f4e6f1dfeacb1a81f92f8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff851b1a5d164febcd92802d7ba14420652e1fa5cecf9156304d795e86187c1cf92a190b1be1376cf48670e93db187ba7db279cc5bb3d6c30f3130db18d95a231dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff223525b9fe0911b292333d948c81212710156b273d62bbac979aac51264348e17a8622602a1b8519eeb0161b133a290bf32ce3a05a8748f8feba8948f7a2ae1f92ce16ccd074bd21a434ad36c9d8c72c0edf199d10efed77b6f6b305b59b76f6000000000000000000000000000000000000000000000000000000000000000009f230367ae24a8b0fc0b06755bb62c237af82c0537658377aeaa1ba7bb6e6287d274ef14f5f1065a883387bf1a735f355f13334b58762ee02a93a7d91c07c240000000000000000000000000000000000000000000000000000000000000000ce45a8fe9167d4c375805fe5220d93bdd00b8b4ac0385de28f71d631f4d8f059c5e00448b8071c055d284584e4b4b3ff9d8b2d2a46609b375d022eb610e9898dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5e42b4ae9e59beb0239d89bac0e19c34b00b7ed5fa73c66f9665d312cffe7774020372772a41e566516a9f5449f7ad8a25e4e18ff0eaf65e2e8ab5d3ae98f6970000000000000000000000000000000000000000000000000000000000000000ebf2b30bccbb7e5b9714aa95118ef7d1b5dcabbe2efd5c99169bce1882b83b29e9e3fd717a5ed6035c512e8af8ee657b562ad4f6b77a41986e21d177f14c5c239c2e07f4e6ea8697d6f93536e742d756477f3593f36d8c0e737b7260fdb9110c2bb589b0f67c48f52dfa873a05140356c5508bf7b18d8bee1637cfa83207d3004a724018af9ef92756ac5328e1ffc45f8f6618bbd789c7519d7bda73a734d5981c56cbe92f6bab7ef7eef4145d83a37c4f95d3c92daa5a208de8d71620a6e5f072e8d485958a4c1a5862dcfba015d183f1ec4c318b7d278424ba13a6ea8b4cbf24440bd604239bd3ee7909c434904cb49bcbfe9c79ebfbbcb0a49b72a96e7b112f9535975a729f795b119588924b03760c7ca2ae4d2d582b4d761ad50d7c48e840f4dc21a989d180e6e32bde9da1497e9a2af7e6fdb1440eaf2a9bdabbeb8cd9a9a8aa55dc54fdc9d390552d62fe23a61c4ec784cc7829d58b9c41671c0385ee35285ad73cf9a7e31973f81533253e0d65bb924115cc62fcb1f56b50cc3d6345fee4735c9dbf00427ab5a4672ad64b77441c3ca7f8b12e307b99090fe85088bb58c51bb634febc23c5e582e01231835e3b9de55f35884dbaf3b49d634cbde8bf4f35f10548014bd4feaa862f44ccb01eacb5e9f43d74c83c190f9157db8db9d8bb255184981f1f50d9b4ab62596c825feabad713f7e5e3671db6fda47cfe0613ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffaf3d61e00f7ea105d52de95e2214c64540ec59e6ba70b03ad9644d06275d4a7badc5438c360a1ed0e06f28ce791788a5a1dcd4a38da21c8d537050cbc6e4a353fec2be47ababfa3b968ad98a81c1db525f475fbbe875b5ffbc13c51a27cf8c92509c4a544d5537008c5f39dc9841d45bb1e1db3267ed0283bed4e2a656fd20c8b47ced7c0dcc324c5bfc2aa2392c0079b9fd4a2dbf0784fe1e0500e06367283b295e4f90d8f029176be25607d86d3844058fd54a661f2bd33946b8d320ce7704dd3a0e1733623317bd58fdf32bc93dd192e9a3f97709b6c367728c46947e5b1b75f37336f7363e3df3ad6234d97c87432a2e3ba575e9c096920b313a872d6e502b54f1dff5482e96e72b1ac8720015f4933afc264800e7b085fc465d02d4b0db000000000000000000000000000000000000000000000000000000000000000000f626a941aef43ffd04452b229df6da8fe26af44cb7d4a59362c927484b0df5e3cd73f750dfa56359be3367fb818e655479e50aa8b5a1969de43dda5281d3d57282014796fedb899df18abece1b8f86d456bfa53afdc3767e6ec834d4d260b23cff5fbac9a71946d3669ed6248547591a4c7ed56a3265b689c374a88076450494c684e895b2af6fc6f872e9bc9d180e1dad0974e282e8258f0b875a82c9a90807900b51a7b7d32a871e28b54c96624d0f6d828d0c4dff20b003d5fb016c08fbb3759d99d156356462a80c393e8dfeb7ca0643461411c52d11b4704d144f477f0000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a1c50c054395de600f0ca8f4471527e0bd9ca4dcb45a0ba7e863df1ee95c01182162b865a9b136e3042b2ddbe1b0d83033ec2ad60b528846bd18b280d87f43c82e9b32503cafe113b34ab89fd58dfc6e275b4cf912c8678b769fdf4bc4ec98b61e53887b33854f07be5b1a726fa667adfc2cc865e8aa0954eb79e4fd050a96d3c6af388797a01c67e5c682b84b253f9ba48654bacecc6fae35c8d430ce63f7109d1170337b5668c35bb66648600cb1b343cb9064c820ae30abe3b4655941c4cd7ae8ca34736d559ed5b0a98f9c4a03942412b5813236eb73d543aa1750b0f307"]}}, diff --git a/txscript/data/taproot-ref/dafea52d56a314eff0b38df4ddd35be40d4f6d24 b/txscript/data/taproot-ref/dafea52d56a314eff0b38df4ddd35be40d4f6d24 new file mode 100644 index 0000000000..55edb91cb8 --- /dev/null +++ b/txscript/data/taproot-ref/dafea52d56a314eff0b38df4ddd35be40d4f6d24 @@ -0,0 +1 @@ +{"tx": "7c7bc09502dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4a010000005814a0c1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf72010000002a1554c90484e08300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7fc000000", "prevouts": ["d98421000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87", "3e4f650000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063ef68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900453d5fd5ac800672ea3242021b662a824007132163c3d52e3d81e7af2ac2d1c56b1aac465e0caf83cc75bfd3b0ee046dffa2f2de04035b6590b107e2b54cd5d5d2cd241e6bbc5ebedd8f50ae206f1f82a1e41ff5c139455a0ddb0d368f52a47602"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93613ba376e93f66744fa625cc79ecff51fb47f28c65369299fa6e04614a4c71f0c3d5fd5ac800672ea3242021b662a824007132163c3d52e3d81e7af2ac2d1c56b1aac465e0caf83cc75bfd3b0ee046dffa2f2de04035b6590b107e2b54cd5d5d2cd241e6bbc5ebedd8f50ae206f1f82a1e41ff5c139455a0ddb0d368f52a47602"]}}, diff --git a/txscript/data/taproot-ref/db01c81c34e5e86ae44bef70289a143173916fb4 b/txscript/data/taproot-ref/db01c81c34e5e86ae44bef70289a143173916fb4 new file mode 100644 index 0000000000..b80c1783bb --- /dev/null +++ b/txscript/data/taproot-ref/db01c81c34e5e86ae44bef70289a143173916fb4 @@ -0,0 +1 @@ +{"tx": "24ca7fe402dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6b01000000e24a61968bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44500000000ca3ae0ff013c003800000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88accf07ac48", "prevouts": ["577755000000000022512054c099d7cf7db0853ef8782c8a4f2f22d5ed4b1e2f91866bde088ab8cd4c1400", "60373900000000002251203a052535d72bc3628b339fbda1fb177653fe86e5d6ac7ee3c6549de6bfc2fe81"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670d6a4c90a07321387fde84458427ca433b667233a08bf96ea1eb88ad41e0526"]}, "failure": {"scriptSig": "", "witness": ["6a92616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/db06c61fa468b40855c83db915cf67df55dddeb9 b/txscript/data/taproot-ref/db06c61fa468b40855c83db915cf67df55dddeb9 new file mode 100644 index 0000000000..7241357f75 --- /dev/null +++ b/txscript/data/taproot-ref/db06c61fa468b40855c83db915cf67df55dddeb9 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1500000000e2737d19dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b03000000005a250c9e0284fb83000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71e000000", "prevouts": ["2d5f6600000000002352212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "6b0a200000000000225120a4d11f9ab8dc6b61afd987f8e15499b9970edef61488d41b5de77b1846913dba"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["3090bbd9de73322484fe270a1a5006987b8a5c5a65561f363b9082a8a4d72247aa6e1a20569ca99586eb0faf55052c786c3f42a9a0c66427f716bc6a713525b3", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/db191d70ebee38a520718fe3a295896a1840f111 b/txscript/data/taproot-ref/db191d70ebee38a520718fe3a295896a1840f111 new file mode 100644 index 0000000000..cfaf3152f9 --- /dev/null +++ b/txscript/data/taproot-ref/db191d70ebee38a520718fe3a295896a1840f111 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc000000000567fd09760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e3000000006cc4beb260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703901000000fda958d3043a449000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf24a3044", "prevouts": ["c9366c00000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "2745130000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "d0db120000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "6c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a238d55badf8acf8a76486c1c58a90ba61d2c17882158465b124e563f4a2674d94fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e872a8a6de95a80dc4a6e95ba0e12854eab511c8acfff04c6cfab0ff55ad6b178"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab66e6e50f0e23344b2fb4fbd1c94b97eff6a18e7892810f712f9b1a97473dfd5b22591e944b414d99fe534a482351afe29b8e90b07993fb7f3f85b72380ca5294fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e872a8a6de95a80dc4a6e95ba0e12854eab511c8acfff04c6cfab0ff55ad6b178"]}}, diff --git a/txscript/data/taproot-ref/db2f754795e1478498a59b3071a7852a32a70b8e b/txscript/data/taproot-ref/db2f754795e1478498a59b3071a7852a32a70b8e new file mode 100644 index 0000000000..78d857afaf --- /dev/null +++ b/txscript/data/taproot-ref/db2f754795e1478498a59b3071a7852a32a70b8e @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46d00000000e4e24797bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd0010000006cf86596dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbe0000000039bf39d9014d7b6700000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5e010000", "prevouts": ["b9ba3900000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b", "cd767b00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "7a8f2100000000002357212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["eaa4642f4330fa159cd36e1f76f94f0db6b32781d14b9657ec806a3f15c9a354be453a1673ceeb5e892325b8164dd70df71151f21c618e823cfa0efb4e5c2667"]}}, diff --git a/txscript/data/taproot-ref/db41febcaac001cb453d4a2ca2a285784d5a9cd8 b/txscript/data/taproot-ref/db41febcaac001cb453d4a2ca2a285784d5a9cd8 new file mode 100644 index 0000000000..627c6932e1 --- /dev/null +++ b/txscript/data/taproot-ref/db41febcaac001cb453d4a2ca2a285784d5a9cd8 @@ -0,0 +1 @@ +{"tx": "90a986b40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127057010000006a8f8b938bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e400000000e9d5c1d403674e480000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7e6010000", "prevouts": ["90c70e000000000017a914aa4a4e70b11f4eec4760f77206dc93b02350fcff87", "88c33b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_8c", "final": true, "success": {"scriptSig": "", "witness": ["9d2afeab3339f6c041d62d67173e41fa2c415ff2b6bcc94668a38ef02334ba32496d5fe93ea2ebbe87e55dd1d8da5746a7a4fe7411c3a735b4cf211f01cc286a"]}, "failure": {"scriptSig": "", "witness": ["aae11303411b6934e548effefbf23cbab32a12136172bfd514f6e59db1fea5a8863bbb56364030d301cbe5e076f75dd9fab38029efa2eb81a5fab4aa741623508c"]}}, diff --git a/txscript/data/taproot-ref/db5b9f12551bfc0e07e9c89d6d5971df6e4eea17 b/txscript/data/taproot-ref/db5b9f12551bfc0e07e9c89d6d5971df6e4eea17 new file mode 100644 index 0000000000..3e9b6f5a17 --- /dev/null +++ b/txscript/data/taproot-ref/db5b9f12551bfc0e07e9c89d6d5971df6e4eea17 @@ -0,0 +1 @@ +{"tx": "e790d7e20260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700600000000a8b6c4cfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c020000000097a222af02a72e6200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987f3a42b2c", "prevouts": ["f69a100000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30", "dce2530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_78", "final": true, "success": {"scriptSig": "", "witness": ["2788d8a89c370d99883e88f683d3c5384c214aa6ab2719b7550df346a013c182b5a071050fa3800882e97e857395bfd448bc47982cdfe0ed5e6e63a2d42d5b0881"]}, "failure": {"scriptSig": "", "witness": ["36bf1292f13abd6381161984681530183cb2bc712718ea61abc593a7c3252979ad679f6307aaa79d0ce3e2247df304e4413228c0197d06e2614f0a3ed5245d1078"]}}, diff --git a/txscript/data/taproot-ref/db715816bbafa4a288124a98d0cb4df6a364cb3e b/txscript/data/taproot-ref/db715816bbafa4a288124a98d0cb4df6a364cb3e new file mode 100644 index 0000000000..3acbdb62c5 --- /dev/null +++ b/txscript/data/taproot-ref/db715816bbafa4a288124a98d0cb4df6a364cb3e @@ -0,0 +1 @@ +{"tx": "3229dd7102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfca00000000dbcb3ddb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704b01000000c5a717a901a974190000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963a010000", "prevouts": ["a632640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ed0d13000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_84", "final": true, "success": {"scriptSig": "", "witness": ["746fe437dd51c6f5dc427aa5fde5d23e51a912ed8e1881ea7e1c79127ee0618eea3264fb81b4b8ad1048f8515f5750e4ea6593e68ee068bee03748a83e23c05e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["8cdb8a151c3976ba31f9f2d90682f43e18a1a73006976fabe14d189f4aad042319b5a9e4a7fe5ce626b300e06ca341187c9e91ae689700217e86bb09570f9e0b84", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/db81d6ad0913097959d953bb6c2e7d576f846a11 b/txscript/data/taproot-ref/db81d6ad0913097959d953bb6c2e7d576f846a11 new file mode 100644 index 0000000000..0b6761831d --- /dev/null +++ b/txscript/data/taproot-ref/db81d6ad0913097959d953bb6c2e7d576f846a11 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b790100000051704d828bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ab010000002cc3b20304c1485f00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc47cb040", "prevouts": ["74b026000000000017a9144582b7676ffb8c3a2735b8e71e172a272e3e33c087", "3db63a000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "215a1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["459f4ecbb0a3a82d0080a8f3151984c9ade2caf1cd3d49ae1dd72ebf8acde1e29413500358c6cb02169f4883257b111c19e68129849ed47cf2f036258c963cd5", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/db9eba0b2b563ba067b7fd8e8ee5ddad9b770dce b/txscript/data/taproot-ref/db9eba0b2b563ba067b7fd8e8ee5ddad9b770dce new file mode 100644 index 0000000000..48f10ef140 --- /dev/null +++ b/txscript/data/taproot-ref/db9eba0b2b563ba067b7fd8e8ee5ddad9b770dce @@ -0,0 +1 @@ +{"tx": "56793ff30160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706400000000bff850ab031d17110000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac92030000", "prevouts": ["3f2113000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e15f20acab37c5a5cb044828a71c51f411f3799e0c9201344692cb6121a679af6a96525fdd0eb5f3c5c39bf5b04d78b37703e3d3b538b36e17fa0ddbdeb236a5daa4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa108807fd1da60fca18a375aa3fa2202a3eae5e0bf99a9374f58816bea445c879688f26c44e4c38ecd8996ded351dfac291f6a9fe2ce500158a378a1caa9ee2234a5a049dfcee5b69ebdb7c70e6242c675d1abc9cd58c84d7f9a8e8e1277a43a4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}}, diff --git a/txscript/data/taproot-ref/dba31a12d1adba28878c2a0b52b782a5c72d9972 b/txscript/data/taproot-ref/dba31a12d1adba28878c2a0b52b782a5c72d9972 new file mode 100644 index 0000000000..af2e2fb757 --- /dev/null +++ b/txscript/data/taproot-ref/dba31a12d1adba28878c2a0b52b782a5c72d9972 @@ -0,0 +1 @@ +{"tx": "c20c2afe018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44700000000364b2a8502b5253900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487b1e3e120", "prevouts": ["23af3a000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e11a0564ffbae55e310260a86fb5d8e023b18d3b1f7fccd674c43ebd3bc7ee476ad1aa2e9998afd312977ef35369de24510af161418b16660639891f4f8529ff8cfae4f24e00136258a4229df9ce1533cc743f70cc4e5c0214ad74c09f63cc0b9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93631892e886f9eab59552021ac67ec1685d33f952811cf826cd2d9160e628fa5a644d0ff37a890039c0ba21f76704f7cfad8b9e86a035546ebb7c5a6ad2c2135a28cfae4f24e00136258a4229df9ce1533cc743f70cc4e5c0214ad74c09f63cc0b9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}}, diff --git a/txscript/data/taproot-ref/dbef858a545baf2d110f1d0e917e4ad258acf993 b/txscript/data/taproot-ref/dbef858a545baf2d110f1d0e917e4ad258acf993 new file mode 100644 index 0000000000..4df4ddfd1b --- /dev/null +++ b/txscript/data/taproot-ref/dbef858a545baf2d110f1d0e917e4ad258acf993 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4470100000039193aba8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a3000000008ece121902c3e279000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787819fc62d", "prevouts": ["8ad53b0000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4", "73f74000000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "1f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362175f5032bb3b53c0a968ee3a2c82bc18dba93c9ba8710418637c72c2d6d5ab6ec0d930d2ad3e784600f5ffd1efb1e58c37063febb6da2a9c1576d111e3c4564ed661e9ebd30f651fa020177c2a1e4ce51b505c9194e43d6074b392863f250ba"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93675adb4fc0189a1382c89853bdffb590e4ee25bdb1025c4992edc4ac6fabdde4de576fdfccd5cb93347e3ba64a7809a8c9fb7be90a7e18659d0b981582f285e98b3e02c0e1665e1d6a4b6ef98a6ef3a3632c98688db315e4c8eb8907479035d72"]}}, diff --git a/txscript/data/taproot-ref/dc01bbbcdac6b5bb939e4be9ca56e5b8c3d165af b/txscript/data/taproot-ref/dc01bbbcdac6b5bb939e4be9ca56e5b8c3d165af new file mode 100644 index 0000000000..94002a32dd --- /dev/null +++ b/txscript/data/taproot-ref/dc01bbbcdac6b5bb939e4be9ca56e5b8c3d165af @@ -0,0 +1 @@ +{"tx": "78fb85ab02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7e01000000c5e6ddac60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708e0100000019cdf7a804af2e3400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acb51aa824", "prevouts": ["0c31250000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f", "2b311100000000002259202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["a85efc3365bad0b94f18bee63a98e02288e29fc22eb62c5f052f41b29f60279c153a5df2b7f313b969c88a1208137dcbfb528cd2393ad2a1364a332debbfcc43", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/dc0806f74a893b88a54642a35cd820535fde3ed1 b/txscript/data/taproot-ref/dc0806f74a893b88a54642a35cd820535fde3ed1 new file mode 100644 index 0000000000..80876f5cbf --- /dev/null +++ b/txscript/data/taproot-ref/dc0806f74a893b88a54642a35cd820535fde3ed1 @@ -0,0 +1 @@ +{"tx": "6feaa06102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf13000000008c1dfd8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709b010000005302e8d802def79200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6bbd63d48", "prevouts": ["853382000000000017a914a8c07d8aa161ec0fed82ac1dc93d81dd0a92012687", "53ae120000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "217d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffaaa48811ce5d96ea10d6e15d7cfc53aa0391399ecd77424ef22989b7ffa3a21a54b706cb1ffe8cdd8302265f43043d8c7f0cfca18957505a6e0d7d2690f95c84bdfafc9427bbc75e549436fc0749ee4f6acf063a9661c81b3024fc653ae79a"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369c5c44f52676cf7b33376b75ee003282f22d070fd845339939cf148bbb71db7cdc39cab162b5ecfeb387365be0497ecf3ceb69817352d9280526c0f75de7c14184bdfafc9427bbc75e549436fc0749ee4f6acf063a9661c81b3024fc653ae79a"]}}, diff --git a/txscript/data/taproot-ref/dc161355dcd6047181d0cf4e25b6a5525f6fe50e b/txscript/data/taproot-ref/dc161355dcd6047181d0cf4e25b6a5525f6fe50e new file mode 100644 index 0000000000..d5e313c187 --- /dev/null +++ b/txscript/data/taproot-ref/dc161355dcd6047181d0cf4e25b6a5525f6fe50e @@ -0,0 +1 @@ +{"tx": "81800ee502dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bad010000009e677df3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3d010000005da75ce303080a4500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e785000000", "prevouts": ["6a952400000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "9b09230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_9e", "final": true, "success": {"scriptSig": "", "witness": ["7c9bb0acb751426c5cc6ea32a3f5c9347a563ef2988d59352005d1c36cc6f0bfa59c4e63837ea561e1d1e26a84e6276861a1d9624cd749494f17757e17e26c2b01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["32f21156cdbb9ded6aa9fe145d74d41b68d28db695f49c8fab7b369fc021e05fb27ff582fcb87c198c65366d897997a3fa66fa6047fc1093912012c7fdbe8b999e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/dc3539d6d3a6a1eaf48ce5185a088eb43b9e383e b/txscript/data/taproot-ref/dc3539d6d3a6a1eaf48ce5185a088eb43b9e383e new file mode 100644 index 0000000000..c0c20e86ca --- /dev/null +++ b/txscript/data/taproot-ref/dc3539d6d3a6a1eaf48ce5185a088eb43b9e383e @@ -0,0 +1 @@ +{"tx": "50f7ec8e0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706701000000a45b1eefbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb501000000d4e342ea0211518b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7bfe0a757", "prevouts": ["10c212000000000022512019a5b11800237af5c16615500994d92c1a7914053179f3c566b1561c365a8348", "41977b0000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902b151d05f5c544acd5f2fff279a3779ee8e89af81e18d97889353464eaadb130e8d3413ba6e577baf4d8733c0b095f735ff202c72d9575d28728312b33c499e7f4e44d8f0ed55b71ff8a33ebea3e1652fa9859defde465709be500aa03793b3b9b07561ec0126bc3e82d419006d041a670775dfadbe4e9e78025cb2b6d140da291a4441a0adef86c62c7dea5c5b1ed132608d00865780bc2f3cf6bb58714f97eb297a5b4055ca996975749aa2a69f2792f39fc0e3c0340f33d60bb232311b33a8fcf95e330a8e5bf4352b0d3c29874702cad5c5ee93e40307a0697dcd8c03de4cb9ccba6a679ff08b660e5b847ab96d1304484327d32d1c7531db3ff32728a2fb7c72a763081dcb518d811584513db3cf2be291186e6282921ad0ba3e9de4a7eae013147022dc494ea27fd2df005abddf10a820f9b7b4a9bae2ce7d0315656fe1e3099059fa0a07c69f923cbe9c5c50e86a431922f4fdba4537c5df9444d653e5580a6e3cbbb7335192c1760380b652f028af1727be33147807b01c0665ea90b617ee004dc59c606e981ef4ade9b226b2598c3041f45d07091b87c42d55767dfc4dd835c6ce1ed27645b8339df3b93270646adc22e396685605f5a50929fa6f3f40c0e35f651d8fe82ed4c6a97932bab711eed801a2d8686f447248d5632782048991fe2584f2a532df7f58ca64ca6c64c45aac8a5ab26dfc1a5cebd0a3c66606bc3bdf1d1f8312c54275c2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936df70b12ca9ad71e3708c972229d1f7eefd79706f0a4ef65e90c6b3ef25905faef0288dcf8f2e1e03125ab45cd0efca3a23715e7661e5c17627e98d50057f87374b5cd80fb8cd7c947a98554a389db356265b198fc72df311d010d98c3d6e3928"]}, "failure": {"scriptSig": "", "witness": ["4d0902618d6b37504d0441f180e56a75d19e5e3302c2dc67943293ca97dccf79de9c8757aa9259f2d7806dc2b6c389fe32a3755e0b3012fcd2a6eb9ee38a1c5e1ce2691cd369e5c50b7f74d07600fbd9d1f3a1e178f5fe032dcdcc0a2928faebb3ac395bdc946d625cbbbc03e3613df56d48022e72c362e06b078f82e765cd80078dc15df41d9a8f77e9483b19a595ab1462f53d42c828a5f7600ec63d67466ea1d91df6bbd1696569d02707c7512a654c7398734bbc132037c8528700a44cd86417a5ead73157f285a5164a3a5ff9d17419c6cbc20c8a32651197418e4edb7b8a4e38db201e8e97aa0e04edcf0c5d3b9388f191faf37aa3153be0fc9d4cbd505bd91d47c8c530c37391015ec0047816b4aae30d91a0796a6b9377e32b9a69c5b75aad97eb141a3cd2d0d0a766aaa050ba03403171fd31895bb63ddc5a35d440b856cf994fa1dd9834099dcde68eb90c988741bc87d4a062b6147829b5b44b6e873fa553e8d5ce15257a4b2fecb4e4d130f614618342b541b848b2e7db72cc0d90a7a835b8d04825de3cd7fd3b8aee2d42784aec89a48cca971e681e0d87b5f43726426d23498cc28f7eb13ca9b395c1e345b2fb2cc16ace2ad4dd025aa492ac7c20505d2752b936b5da44acfa0efb85b48099a08d12a082167ab3e2cc9ce36a09a5aacf12fe920f43ee3144d4a5e2ff88750f688c1055e8c7ac4190cba8691d0438f210dc6a4b51226e9a037561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bc1c7496d6757072a067a779454a816e2c160e7eee0de44d001da2d4f54ec2983f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08208660b63218e506e6f6271f897377780851eb071546e65f7287d9a4083d90048d0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}}, diff --git a/txscript/data/taproot-ref/dc480267e0ef9ce538b42b77872f2b3532c35322 b/txscript/data/taproot-ref/dc480267e0ef9ce538b42b77872f2b3532c35322 new file mode 100644 index 0000000000..adc9d61c64 --- /dev/null +++ b/txscript/data/taproot-ref/dc480267e0ef9ce538b42b77872f2b3532c35322 @@ -0,0 +1 @@ +{"tx": "c5f01f0f028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d50000000053b9fe8c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ea00000000961af2b201963241000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a653040000", "prevouts": ["1b69330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5a393e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_2f", "final": true, "success": {"scriptSig": "", "witness": ["01e67d9236e680014b0a43138816d86775c08e96eb5097d6286cc11f1af3584e0f3d9e485fbe7ad42e6b51da2f6358de56b8892fe01be323da3409b86a82be2182"]}, "failure": {"scriptSig": "", "witness": ["7ac7473fc85b9c2eb526adddeb3d8ffe2caf07dbddcc9c7abef2e572eee73d23fbf64d26d34185b466652df784329359d5b19b6d4b077315b879cdd95657b6342e"]}}, diff --git a/txscript/data/taproot-ref/dc57d8ffab2a6632708a04cb288629b09aa5c82e b/txscript/data/taproot-ref/dc57d8ffab2a6632708a04cb288629b09aa5c82e new file mode 100644 index 0000000000..cbf5878db3 --- /dev/null +++ b/txscript/data/taproot-ref/dc57d8ffab2a6632708a04cb288629b09aa5c82e @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3800000000d4d32d95dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb4010000008376eebf04e5a4bd000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac14000000", "prevouts": ["7e08700000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "c0bc4f0000000000165d142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "f37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936111cdf76836f174788069938d43a1f118e1d6048d7db416209f274b647d1178e3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cfa000ce8b9790c39a5d5a4e1f475bb1ef714fb8e08d79945cb39f042227236d80eaa4a5149b34d26f0437dfc3cc15f8b829f232fb4e000d97f0d76bcdb6c884"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368ad006099a5afd91da2bb050912b31486a1a5f178aed6fde7a35ffc349c590e4cfa000ce8b9790c39a5d5a4e1f475bb1ef714fb8e08d79945cb39f042227236d80eaa4a5149b34d26f0437dfc3cc15f8b829f232fb4e000d97f0d76bcdb6c884"]}}, diff --git a/txscript/data/taproot-ref/dc593bc1e5ac44230400eae2d39c99148ad34e4b b/txscript/data/taproot-ref/dc593bc1e5ac44230400eae2d39c99148ad34e4b new file mode 100644 index 0000000000..cadf31d6b5 --- /dev/null +++ b/txscript/data/taproot-ref/dc593bc1e5ac44230400eae2d39c99148ad34e4b @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fb010000003f2b16d5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb10100000040c4b8b401a85c0700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac817e0b21", "prevouts": ["29c23b0000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588", "3cf4590000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "da7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823fb4f37cceedf64e5ab756f8bcf3191fe56bd549db8641e271ceb60581364e38eb0481d56926b359fa3e2e34471adba51fafc61fa70dea7541795bc082db9408"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93640073767799ee8ff1c3237f84bb48a6083252a313c1fa00b27a2ee1d2ebb2429bb1bf216bf716c84a1c7f4bdf291db4b4c93f804d437ac6faff07f214860f972566ba3404d3656bfd0df4a55f82c254cdba579fd51be164a5cd21fa2faf92a44"]}}, diff --git a/txscript/data/taproot-ref/dc6dcb26e66c42982855aa1a52a31fd33b250e19 b/txscript/data/taproot-ref/dc6dcb26e66c42982855aa1a52a31fd33b250e19 new file mode 100644 index 0000000000..854556bf4e --- /dev/null +++ b/txscript/data/taproot-ref/dc6dcb26e66c42982855aa1a52a31fd33b250e19 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8d000000009628e1ab8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f10100000041654ba460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c200000000352cd7d102283e7a00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7eca46228", "prevouts": ["be4828000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "99de42000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "344811000000000017a914d574841bde7bf0817694c799002118e85acf040e87"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "235d212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["69e6bc89953f2b0b0c076080e1b1bf82e003d213bc47f2decb4bfb7dd00185074d1f0b339d45eabd92e63f1bdfc039a5ce924f42bea5e81dcee29d9e9d181099", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/dc9395f17d85f800578e0d6e8bf89ad9746befb7 b/txscript/data/taproot-ref/dc9395f17d85f800578e0d6e8bf89ad9746befb7 new file mode 100644 index 0000000000..946142125e --- /dev/null +++ b/txscript/data/taproot-ref/dc9395f17d85f800578e0d6e8bf89ad9746befb7 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a0010000004e3bc7cc03dc0f100000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487eaddd940", "prevouts": ["37d6120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_59", "final": true, "success": {"scriptSig": "", "witness": ["b6d3a366aff24b46704df81362b580979561a3b16a1c4d76434e953d807fdfe29a4c23a73ba23e64c4bc5aa9d740b938e86ac7950e36377352031ac309fa882083"]}, "failure": {"scriptSig": "", "witness": ["9bfc637a2a6385d9b8593f113685a19173e12cab9b1fefa49cde86302930010671a0dadf6e5138f2167e15616224a826a1b38722abcee3820132ee2950d781e159"]}}, diff --git a/txscript/data/taproot-ref/dc9899ac6fe73116d5e9f16eb5d414386eaf20b6 b/txscript/data/taproot-ref/dc9899ac6fe73116d5e9f16eb5d414386eaf20b6 new file mode 100644 index 0000000000..1000afb983 --- /dev/null +++ b/txscript/data/taproot-ref/dc9899ac6fe73116d5e9f16eb5d414386eaf20b6 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a4010000007ffa04c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b250100000082473360dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0b00000000b573fe37040fb04f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e790c8515b", "prevouts": ["d2ef120000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278", "8cf01f00000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "df861e0000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "7c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac26c11d7825777e0f2ddf610788c970bf175cde25cef7de4e72e41494d53bd31202adea3ba63b8efb220ed0b92cf765f01931ebb31f4963f663d14c15b1e6099a711983bc616996e2ac47b27808b31a9b7e87f7ce1f3571999dd3a2a57f1080"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d5fbcf61a2a7c737f60b9029794ca77d60e8dfd9dae9f2322432c03bed71ef108eae3f5bf5f4c26def68bde658fd1412dc2dfb494d39d6b1bd4ba6a274f177d9a711983bc616996e2ac47b27808b31a9b7e87f7ce1f3571999dd3a2a57f1080"]}}, diff --git a/txscript/data/taproot-ref/dc99d264d246e0de31744757d56e34f81e69221e b/txscript/data/taproot-ref/dc99d264d246e0de31744757d56e34f81e69221e new file mode 100644 index 0000000000..0e1d0c88bc --- /dev/null +++ b/txscript/data/taproot-ref/dc99d264d246e0de31744757d56e34f81e69221e @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270780100000092a442168bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40500000000ac1f958adceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2b000000009c4898ea02e6d16d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875a481120", "prevouts": ["2b3f120000000000225120c10f9a5287d6d37684b1ac107332d66417d952fdf60fb9cd3e9fa5de48c339b4", "fcef35000000000022512070bce5a25570b494d89a85af7ba09d895150a56587b7f7acec0c02ca42514b39", "91f927000000000017a91452f6f26c4daf61bee17f895b7ca2f2ddc941756987"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100f42f6c018177cb6f7105c075f99d29a4c97a752dd0c249abbf778e3c64da803702207c67f762f80a9017759a0a8937f633674b978e631e3fe50f0560dcbd1fdebf47824104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}, "failure": {"scriptSig": "47304402204603179e9745c6afe10773d58da9ccbab4370b6e6797d3c23e24133311c6ad8502201b8b93b2a5ccdb37f9100d56efc80eef597145e1887b75b74281ecd793cb61a0824104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd218931976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/dca299a0e651d9aa555003ff4a5031f3fccf9743 b/txscript/data/taproot-ref/dca299a0e651d9aa555003ff4a5031f3fccf9743 new file mode 100644 index 0000000000..3f88d32140 --- /dev/null +++ b/txscript/data/taproot-ref/dca299a0e651d9aa555003ff4a5031f3fccf9743 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa201000000a54e1d1abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff600000000058fe3ae01afaa8e000000000017a914719f78084af863e000acd618ba76df979722368987b0010000", "prevouts": ["b38b84000000000022512005ff23ad1561e684c08dc4654c3a622730f716f9dbc5d4d5a4cd20d536b8ae37", "e07864000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361759826991d2ee0a231520f5bcab8f69f31b666272ed9a6e30669b1001adc5384cd3bb01e072d01d43d3082324ff6e625f5d569cbe89802b785fdd288bfd31c9a3f8f9fe88f0f431b5ffad473abfcf1c4b340e1c7daa1232bf4c86f035b8cc51"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8ee33f25a3bc4431a4899fa373225b82f91b265358d1b8c12eb75241dfe6f4bf6dc39ce81a6fea632ecf565fa45d7a7ca50aa2e3b548038c9066d72b539243596a6ef766bda57b4717926485a86d332fc460fd2733e6a54825f17015621dd4290"]}}, diff --git a/txscript/data/taproot-ref/dcaa02212efb1b1d7b35ccd1cd382be6b3e66e71 b/txscript/data/taproot-ref/dcaa02212efb1b1d7b35ccd1cd382be6b3e66e71 new file mode 100644 index 0000000000..e19dd80f08 --- /dev/null +++ b/txscript/data/taproot-ref/dcaa02212efb1b1d7b35ccd1cd382be6b3e66e71 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfae00000000c465f18adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8c000000000e1ef5a50158f18b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6221bfc54", "prevouts": ["cd3b7a00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da", "c6be550000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "807d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a0a4157aaff13ca2809f2717d1454e35c7fe22b58bbf3d38eb14bb2d8f6dda2c9bb3dc44e72947935649b33aa2d807ea07560e0c2333a7ee2c40c2820b24a64a090cbfbdc5dfcad7ff4463f3cf2898b3c754f5d70a369d7bdece79053e0da647"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e6d3ed6bb397f900bca42f5c55206e9e9a5556fe68666fe0d64ebb28af9dc03c732beddb8df376ed0f15f8ca557ca4fa4dab9ea34398a6bb2b3d4cd5dda00bcea090cbfbdc5dfcad7ff4463f3cf2898b3c754f5d70a369d7bdece79053e0da647"]}}, diff --git a/txscript/data/taproot-ref/dcbd31842dac9e7cdaf7ca65e510582bfd1d1a9b b/txscript/data/taproot-ref/dcbd31842dac9e7cdaf7ca65e510582bfd1d1a9b new file mode 100644 index 0000000000..87553ac9ef --- /dev/null +++ b/txscript/data/taproot-ref/dcbd31842dac9e7cdaf7ca65e510582bfd1d1a9b @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6f010000000801f9338bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44e00000000cafb6acc04e6afa2000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac06010000", "prevouts": ["8cea640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "606d400000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d6", "final": true, "success": {"scriptSig": "", "witness": ["99797b3bef2647f0fc3e108287a672fe2690ad2f27eeb822b6af994efcd1d7fd99e746521c2b5d4c5950cd4de1dae34a8e5f901e1d03bc340b0e61d8d8d1180e81"]}, "failure": {"scriptSig": "", "witness": ["42bf19149e0537555a9aedfec5cf298a03d6d1cf9cbee9c02633db46777e2f7d68be071519d2e6225543a85093bebde0c65a44201d746ee5e1de054c727f36a5d6"]}}, diff --git a/txscript/data/taproot-ref/dccaf2fc47adc1a3b05f03d5fac2a95f989db10c b/txscript/data/taproot-ref/dccaf2fc47adc1a3b05f03d5fac2a95f989db10c new file mode 100644 index 0000000000..4da3d28993 --- /dev/null +++ b/txscript/data/taproot-ref/dccaf2fc47adc1a3b05f03d5fac2a95f989db10c @@ -0,0 +1 @@ +{"tx": "5c4be34a02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe001000000849623b560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127009010000005cf056c8010da88300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acf148915d", "prevouts": ["3a4e83000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "87df120000000000225120656f89671a8f47d6bf2e8e427ddcf5c0f85be8fade6cfb3bd1e5b2fd091df805"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367113f827a4d4aa8309fbec7694384e6d0aea4a4c939b956fb497455d6a3b7402"]}, "failure": {"scriptSig": "", "witness": ["6a7d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/dccd7c4272928f022003ea9c7aaa12dcc004a54c b/txscript/data/taproot-ref/dccd7c4272928f022003ea9c7aaa12dcc004a54c new file mode 100644 index 0000000000..b2e437034c --- /dev/null +++ b/txscript/data/taproot-ref/dccd7c4272928f022003ea9c7aaa12dcc004a54c @@ -0,0 +1 @@ +{"tx": "bc10ab850360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e20100000056ca8ef0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd500000000f9c6cbc3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfc0000000042284be90453929600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e73aa04c47", "prevouts": ["1d5b110000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "dc1d28000000000022512026e2288702160262aebf9b5500cc105d511ee57f41882217b8afa588f3f75fde", "74b25e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c35cd12e8df2fb297eac9d1d135ad50ebd5c464169db6cd9048b151cc7b74cff30080bfe0d76f5066f10c66f5d5c3ff5fe5758eecd3e6b9073fc254bed53c0ae7a5a7f6c287e55c2508813e4a2d248a2412565afbb00cc59f351354b41e897d691cffbca125e9cc38dadd2bd6a98fbb0a43ebb9c62fa8983d26463a9832d19fb411274d4c7f5d6e4b9a56ada23903fa750e271ba59746401cd0606e400be1948c91bf922835d303611e8d7d6f74a6f21af328a37ac045f1895912150ca9181da44410b8fbfe45ce02fa88dc842f161a8c058ea95504a177df9b83d21fb749bfc74c3873c7cd0ea4e084ffb352a1b6b7d97217a6b468aa140a782328890859efab80349b7e9d689a6e588b87397903a7c54fc8b79b82f985f56d3bba6ca35c940fcfafcc8fbd7d1aa771b6aa91e6478222b3a6839b7a5a174d8eba8057fceb5b4516e8a5fedd334b26c57fffc8f4c4dd2311212e87e176ed0bca301c5892bbbdc608766c77c1c8ae9fd65ca3fb91952bfffec93d0beb79cd1d50842d02d74129e28924de0de4ea1be5d02e808d7f87ea2e4db9a635abad9f010e7547e6034b1f68d900268a7aac3aaeadb2d0f75b9017756b8e7bb847053ba194f6bedc7b48662db89a5943ef93d2c921fdf32d517081d7cf6c12d3638aaf5395805d5657e6d1be568a1036aeb9b78a4025cefe05dc5ead041670a24224000cdff2ba4148d1107d832450fd66c7b3a1775f7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368e053cb9a5d09bfe690ea9eedb365d345eaa3c8a3a4d080ab62035ed4ab4aed83e2d335f383706a312226510c4ca5ed297e59b2981bccad977d4984b4ab81a7bbe0beccf8b53a38f7a20d51eb008bdc60f78fac094fdd23935202ece673d8622376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}, "failure": {"scriptSig": "", "witness": ["4d0902adbacb7afddf1a2658f2562dd9d05cef4dca2c5b5a80cdf085afbd75b0fa25fe94e951d0bd501d86d1a523db7db3e039f84aa26d1c3891d01fee2a5b52645b26a9bc08b60629c89eabbaccbb714419f52fe39ac746b8e6518c5f4782e74988c70f0fe5ec57cfb9713595c9219dbd29e9afece13d20eae6855e297f2893ab244ec7948f513e22243fdca3961205f2ecacddbfab385edfd5cef8404288a95b099faa6388602ddeefd5b97d1ddd4047cd504f418e770251b58f7b4e0f38f3fddbbd39f51f97ae2904fdb80276fc00da90e8cedc82d201f4f6e6fe89e72168f826cfbc4ab45eea1b564629e01706c5e6659f2768bdfad1b65af704b4559df38f19cd1c10a888a3f1bdcfd643d231d316835f2c78ca297b6acc7886a727b386ba9c2a79ce978e40edde47bffd7c10adf01479b4c9298f789b348586971038b4b8f87d481a1876614929b14270edeab577b0986b222919d1a6e05d339a7b4e9fe49487eaaee65571644aae9eddee531d1cc22553abca3044de2f33893ebea6e4f54747052ddfc1379c73b40d19c6c665c12e43cd5c4b410914c88b406b86f3e00b80973581d9bb45a143b02ff8f4ef8f13d1863b5deb68eb4003bcfd0b352c59c3bcf8234d41cecf2e380360009b3f0ed6b59f4ba6a835b882a1b2b80b0fff3ee410d1d8c41f0eaa2d3b70340e46c711d7bfb4409a54f9a9ce88feadfb1f42b73495ca830ad862bb77ffd4f87561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082c18d13f23505bf80401329c8d1a0bac5ffbe219ba0d96925c38e985a7086f175ac8db205c7d3bb0390b2e22910f5d1cbad00807eee3325f4c4e7f4412ed3064a1c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}}, diff --git a/txscript/data/taproot-ref/dcd041ba07357566b4ee1ed3cbca6574c6154f10 b/txscript/data/taproot-ref/dcd041ba07357566b4ee1ed3cbca6574c6154f10 new file mode 100644 index 0000000000..6eed590c9d --- /dev/null +++ b/txscript/data/taproot-ref/dcd041ba07357566b4ee1ed3cbca6574c6154f10 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf56000000009d725befbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa600000000046d18dc04521cf200000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acbc0a924b", "prevouts": ["e40573000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "c8ad800000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "", "witness": ["30450221009b401ebef219005e3a57b6d2be0cedf1a32ad249bbea0bcaf018dd0d78d25cfd02205722f3db1fbe3135c63e7458cc0026e0c2d5ea86cc0faa7867315a0bd906f91d82", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["304402207c56c6f56386fec171bd13e5727eefd8a6873247188b2160d6491f7e26a3689702206b0578c1093d9edeaae3eac932bae1ba5a729c4926ac878176c8f671139a8ce282", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/dcf7577a80ecef6f3ca732dc2e3adaa48e682fdb b/txscript/data/taproot-ref/dcf7577a80ecef6f3ca732dc2e3adaa48e682fdb new file mode 100644 index 0000000000..64ad8ad0ea --- /dev/null +++ b/txscript/data/taproot-ref/dcf7577a80ecef6f3ca732dc2e3adaa48e682fdb @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700700000000cf91ab8ebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1e010000002e60e4f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43f0000000034add3ce038151bc00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79695b58e1e", "prevouts": ["055d0e00000000002251203236882dfaab6a61030776953d98ee1af902cb36dd280fe66ad8ee191278ec27", "e3536f00000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "e1fd400000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b3dde2cf2529f9d05b2e5492588ecb6418b108a4e637793f6ec2e549504b90ce"]}, "failure": {"scriptSig": "", "witness": ["6a59616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/dd000d20a2f313c18520373a1f18e05ed9a150e2 b/txscript/data/taproot-ref/dd000d20a2f313c18520373a1f18e05ed9a150e2 new file mode 100644 index 0000000000..ef661bb9fe --- /dev/null +++ b/txscript/data/taproot-ref/dd000d20a2f313c18520373a1f18e05ed9a150e2 @@ -0,0 +1 @@ +{"tx": "b1bb4f9803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2400000000817a20b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127002000000008e1dc3c4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2e01000000783f4ee701e06a59000000000017a914719f78084af863e000acd618ba76df9797223689870f010000", "prevouts": ["90cc23000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "7ab50f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "546d5600000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["bc4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08220e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e14a8563068286881d42b1c4901d93a483973910fd5653bf7ebbf040741f7cd837150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}, "failure": {"scriptSig": "", "witness": ["4c52bc", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a882b0c6bc267a79bb740ac1a2362d94d3f68ec4048cb2b97f57abfb863c1e846628fbf290b9055f1812e9325160cdda478fd06188bac581533b5ab5319162eb04966f092bf1e4b4348fca11e7254311373308f7fc15e3d44d6a2afffa343c9657ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}}, diff --git a/txscript/data/taproot-ref/dd0b6ef4b264cf0858480a3460b856a1c8f6dc1d b/txscript/data/taproot-ref/dd0b6ef4b264cf0858480a3460b856a1c8f6dc1d new file mode 100644 index 0000000000..8317233251 --- /dev/null +++ b/txscript/data/taproot-ref/dd0b6ef4b264cf0858480a3460b856a1c8f6dc1d @@ -0,0 +1 @@ +{"tx": "8bbbb434028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f7010000001a4f028560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a5010000007c0d8cd903a9a243000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc79e010000", "prevouts": ["bcb73500000000002251201aac33169e9e7c3154d6a008d33b220a63d8a9ebf4646c8ee915f75ae7529b5f", "7f111000000000002254202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["0b29c03cd81df73a2b574156c0daea3474ec5851a59a011a7d667c3a3646addc88edb1946575a4f48e3b2c20e66d9cdda77515ec287f3b5e972d0c7858810a34", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/dd51571565035f293d86c40ad779317f87aedf8a b/txscript/data/taproot-ref/dd51571565035f293d86c40ad779317f87aedf8a new file mode 100644 index 0000000000..09442da743 --- /dev/null +++ b/txscript/data/taproot-ref/dd51571565035f293d86c40ad779317f87aedf8a @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701e00000000c57d4392bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4d0000000052ad4c7c030fba7b000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8b92b750", "prevouts": ["9f611200000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5", "65ea6b00000000002251208b7fe9d4f09d2d8e7a4070c707b9c580ba6935dccb7bf02b3c8420577f22e1d4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93684086780442dbcf859ffd73a59f855a4b5c3e4d7f57dc79247a591757b7f2310"]}, "failure": {"scriptSig": "", "witness": ["6a04616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/dd6e129061e453f9a72be030e9baeee3e56fcf0f b/txscript/data/taproot-ref/dd6e129061e453f9a72be030e9baeee3e56fcf0f new file mode 100644 index 0000000000..11712ff558 --- /dev/null +++ b/txscript/data/taproot-ref/dd6e129061e453f9a72be030e9baeee3e56fcf0f @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4280000000012c312408bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44b00000000ca4d1b9204be1e7100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc70b020000", "prevouts": ["7eca39000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1", "85e938000000000021551f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["7ee4a8652a801c81f21832a7f20b2aeeac576839e9f39d404e47e760404363a752189c2e02859c0b294e9c8d33bc582084722dcf67aefbe0d7c9864b0815deaf", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/dd8c174c7b3d3ef26b6db13442b39a50c7f55222 b/txscript/data/taproot-ref/dd8c174c7b3d3ef26b6db13442b39a50c7f55222 new file mode 100644 index 0000000000..5cc48ab3c7 --- /dev/null +++ b/txscript/data/taproot-ref/dd8c174c7b3d3ef26b6db13442b39a50c7f55222 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be001000000a799f40abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4f010000001e21c462bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9a0000000077dd0fb3022989fd0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a611000000", "prevouts": ["025a1f00000000002251203d94c30f7ef8b0d9d4c7a773497c0af2bbd0a232f6e89c19e65bba66d7e2056b", "c0e969000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "f4dd760000000000225120ff67dbe5f480d52a3db68ddc8756a5701c353a5e478c53504b3368e48f095423"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "2b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ed75fc84f2af88925f7ad475b3203cbf9256a43a0cda52d14a3416be93a7fb1c4d74d03d2cf0ae79996d1bf896237ca201e78f1b4c5ece550af4c0e01e9fa9886"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eb23e8c041b6f4d0a05567219b1a5ab7cf1a58d3c1a796ae684015a86918ec863f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082885bea8937005622f3eb8b2c440108feebbdb5f3ff09e0402c722754cbcd9b2d195038de5261112827291f7af9c58b034003ed818b7e5ec0d4ccdf81f6c2ea4d"]}}, diff --git a/txscript/data/taproot-ref/dda325195c906944f23de872fa78b2af88631c09 b/txscript/data/taproot-ref/dda325195c906944f23de872fa78b2af88631c09 new file mode 100644 index 0000000000..46f0eeadce --- /dev/null +++ b/txscript/data/taproot-ref/dda325195c906944f23de872fa78b2af88631c09 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1c02000000d71284f38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a6000000003d5157d4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8501000000f9d154d30318e4eb000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33000000", "prevouts": ["bfc05d00000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428", "4d2b37000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "cbce580000000000225120aa00b33df18083b0bc269fd07ade71d6a19be5cfe3bbc4e226f77b4058e47cd7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a6bb84e606fb4bb9387730170fbca9e5289d9440f7292b1ebb809b518ef1c84fdc80ae76bb602ab42c46ee853876ca8af61f2b21e003be040fdb009bd17dbb4f808384abb6b187f3a97f85a063898a14354bfb17bdb5626bb6d4aa801087006088c291dc1aa090e3b655056beb5ce7365d5ebffee3580e955fbded69dfd9656f305ac12737920f128f98e38724db72105d47ccf6840d2d22c6868ec556696fcbc081736c6479355882158f8726ea12bbf670d0eac31becf906b74921eea7a9b485468c42290d70e72261e0116bfb043597a3afe9f7779165e7d71f7cec739431151e0782a674060d44293b0b30b0e0d493e6fa018ff3060b0ba0c13acc5c5d9f8cef8ecfcd7f3ce64c4ce9155b12d09f350591a77e1bc9621af17727c816cbf27d5d69b57bef31e5cfa79c3d9e13787c9d339d245c82eca9e912a0a8b367cb289dd644b4437e5102db1ea0cde98f315bab58e280843fcf83d43273a407759260d8923d41234c55e9b71d39bbde607457b1b3b3200b8003b7611559ee92765aa262750cd1d92f91292b98bbd0da028e4cd990d8b4d5e308d6e244d229941183f85edef40a13349eb4c5c53df23ab5a6db33699126fefac34a2c7bc06dc536eda3ff1e3d70568bba7896e628358410ecfcbbaa858685a949833f02a8426c1b65a68021097bdda07d856151940ab1e401679bfa34cf7f12c294f7d9888afb651ec01ce26bb3e3f800737475", "577d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bab7869953280f6d3f7a7bc51b385a6914d08ccd41c6d33c824b12a8cb000a8b3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828cd69c149de1c0fd775c23d200817106db3811e77c5a94d49bd03e58d7bcfa223a8385792857b3824bc259fd95f469eb32c57805e5f383de6590f06749d208e6"]}, "failure": {"scriptSig": "", "witness": ["4d0902abf2f600a9304c04bcce9bcac11aa4bf71b23d1edc75714bff9d6d16c8b4c5f5f764a7fd68bffaf5daa76d8e6d2178c799216e396add1c552420f5f03b5f17cc42999a48a67c6253858a591c679189f0512fc421cf88286940215c9da0c89bf99fc0eeaa098a302b407fe5262103b0c1c039ed5486baa49ef6c661a987421a1fccc490adcf1c3b9355bfadf7f64d98b9b5ebe547630205f30ad78b502369ea7ad94967397b938f2f8dee79fe42d0142588028f3120f3119a8749aa662a48d6d4a1682565e368c69497c961f651f541d5ec37db7e1eb5d0943dcf7d18814ca548270db782a374b5fe181e3aa4d71316491cdcf059eb3aa8360bb2249982e57a1ead8a1a033f063f64dac81aac257489a8b482531e8659415f9211e572f2a9adf107e4678e472f40dc676c071e71633d1e750fcfa9e567a932d6dff1d259b3a949c07c2e07af45a964fbbf0cd03fd064c49db660e1cea47993dace6959ccfd8f9ab18e9dd74363aa9126ad872f0213643488a74cbd376177e8f73d724bbbadb6c192d640108cff927e3ad05ff85d732895e2d96f9ce0d68e6e2c77b897a9c8c13145825c695d820da1b299c2c768559067c093bfa465721231be70ec67b8cf3b1ee78b887a5145ca97d1248d0d462c4c0510756fb6ad7028fbef3691262d862ea39ec0ea007d322cdb02ecd216f02b7ebee9e29d21a810e98ffc0302ee094db2525df955699153203ac975", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef4a7dcfb64e618b34998ea64659fe772d1fd358b29e003b2257b85d2ca618476a66706abdbe591f97764059d8785051c12d40b9c9543fb83334d204ae23d8b59"]}}, diff --git a/txscript/data/taproot-ref/ddaf37dc11a8574b722f076f36e746bc7c60e215 b/txscript/data/taproot-ref/ddaf37dc11a8574b722f076f36e746bc7c60e215 new file mode 100644 index 0000000000..58944f5a5e --- /dev/null +++ b/txscript/data/taproot-ref/ddaf37dc11a8574b722f076f36e746bc7c60e215 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd60000000099b168e7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb2000000007a2554fd01db7f7600000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac30020000", "prevouts": ["05864a0000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "291c560000000000225120327f04e65f02f8e03ce78ab2157c33b783b64287146459b669c40017b50fedbf"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c4981c98d09047ee82e029176f402026e6ee9597298967debab1e2419faf3d4a"]}, "failure": {"scriptSig": "", "witness": ["6a36616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/ddd4994f43b538ffca8eb9b28ca5fb499238d0b9 b/txscript/data/taproot-ref/ddd4994f43b538ffca8eb9b28ca5fb499238d0b9 new file mode 100644 index 0000000000..3b3076b605 --- /dev/null +++ b/txscript/data/taproot-ref/ddd4994f43b538ffca8eb9b28ca5fb499238d0b9 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ae0000000047920cabdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5301000000a1ccabe104ac0f5b0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9e8d6f25", "prevouts": ["14790f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "910b4e00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_csa_neg", "final": true, "success": {"scriptSig": "", "witness": ["", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["ba6d96573030157ef56c9d58a9f6e2a8f1a2029ef3ca0c7e3c6029ad8ca7c939d505002e346ef8c252c3a611a23a5cc65a692ac2493fca52ddbeccf55d7032", "5220aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5287", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439beb67122ddc1617dce4a8b1a7532423bf4057eaff692b9473bcfe092baf144466dd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a3754b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/dde699e331a7df59bcdada620624b5ba61dc5dd0 b/txscript/data/taproot-ref/dde699e331a7df59bcdada620624b5ba61dc5dd0 new file mode 100644 index 0000000000..9715e72660 --- /dev/null +++ b/txscript/data/taproot-ref/dde699e331a7df59bcdada620624b5ba61dc5dd0 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1602000000242acf68dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be400000000ae8b607802db5a4a00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac46000000", "prevouts": ["b1e125000000000021591f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "55a626000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "final": true, "success": {"scriptSig": "", "witness": ["04b024de73e0ac65162974d16ecbcb5344408a1f2303658c477ad436b50d7a0d170f01f16ebd920f4b9c192d817db5a2d631b2a8cb30509bf210822d5121a55d81"]}, "failure": {"scriptSig": "", "witness": ["e14cb87c7c2b7106c97582ec52117c0baf173593f092a800e8514885f11c92c2621b4c1a97c87cc56315d3e22eb73936548eb923070084e09f9e4de56a58b73b81"]}}, diff --git a/txscript/data/taproot-ref/ddebb704471c13ddfaf31413aae6c013515a3717 b/txscript/data/taproot-ref/ddebb704471c13ddfaf31413aae6c013515a3717 new file mode 100644 index 0000000000..79cb9ea6bb --- /dev/null +++ b/txscript/data/taproot-ref/ddebb704471c13ddfaf31413aae6c013515a3717 @@ -0,0 +1 @@ +{"tx": "778899b603dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c95000000007c54b39660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fa00000000b5fe039b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a8010000002867b9b101c0ee1900000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2bb98647", "prevouts": ["325f4c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1bc120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "09e33d000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d0", "final": true, "success": {"scriptSig": "", "witness": ["ba093c0e952d439e8dd83a7a9ff81ab4bfec29c44d47b1ddbdbcb3d47423869423f0cc753b8d3fa277b7a7f7d96ce6bdb715c773bdad20f48b369eda0ce5434c01"]}, "failure": {"scriptSig": "", "witness": ["150bc1c19fb98d8104ecf60c020b122cf117a8f86e2063c6e0fecf4ef426756940946e2efb395bb2a303c875115f02fe495d8cae2834c762a12c956342e745ced0"]}}, diff --git a/txscript/data/taproot-ref/ddedd372fed9df45da4d1a59cf4f5cb35009e49f b/txscript/data/taproot-ref/ddedd372fed9df45da4d1a59cf4f5cb35009e49f new file mode 100644 index 0000000000..99a5ead75a --- /dev/null +++ b/txscript/data/taproot-ref/ddedd372fed9df45da4d1a59cf4f5cb35009e49f @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc1000000001e5a14ae045e7a76000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fccc9dde3b", "prevouts": ["0c70790000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_b2", "final": true, "success": {"scriptSig": "", "witness": ["4b537f91a28e8f5a72ea79222386b8312f93a7865ee41bb74d3490551dcef8dd453a0260dcfd4ad1e2dd8071a47f73135dcf9de9b7e05d926824c7f959165c1102"]}, "failure": {"scriptSig": "", "witness": ["ac637c79140b15f841cd2405eee050dfb85c39a3344157a57cecaf53405c53cda0877aab0f13f2199d6d13a40f1400396ad15a9f2e3713083fe842f2cce141aab2"]}}, diff --git a/txscript/data/taproot-ref/ddf80ae28fa37fbe9cd6a838ae2c428932ef3961 b/txscript/data/taproot-ref/ddf80ae28fa37fbe9cd6a838ae2c428932ef3961 new file mode 100644 index 0000000000..b9ac3285b4 --- /dev/null +++ b/txscript/data/taproot-ref/ddf80ae28fa37fbe9cd6a838ae2c428932ef3961 @@ -0,0 +1 @@ +{"tx": "05439dcf03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce400000000e23122ffbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2801000000445b0faddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5e00000000b41645be01b3ac85000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487d2010000", "prevouts": ["5f875f000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "f27f6200000000001651142540f27e90740933c99d4f17ab2dfc6c82951cfb", "90775b000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "db", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936158dbdd04fc8b1597704d885de388d9e8396e20d8d1d942e0680de9f689953519f09ad02cb012ed2091760f4e9ad26775ad10447e2b9e598a8be746abc4727fb4e3966518140ddfb4b2a9d93e012e33d80f6a3bf7f24f1b44efe84ec3ac236f0e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93674592b4fb9d11d06e04aedf373a859381c5b821797864f536763c5371283881ca04823906532712c3d4cb334ae6c7c41a1294a824a25b5277d43f47953a1da33e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}}, diff --git a/txscript/data/taproot-ref/de08cbb895403680951a2ebc90561ac53b1a1f4e b/txscript/data/taproot-ref/de08cbb895403680951a2ebc90561ac53b1a1f4e new file mode 100644 index 0000000000..b971dcaf5a --- /dev/null +++ b/txscript/data/taproot-ref/de08cbb895403680951a2ebc90561ac53b1a1f4e @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8101000000d15525dcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cac01000000f2c7c6da0498846a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acbf000000", "prevouts": ["b8cd240000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "6979470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a925fb010e9dac59891c803b6a81d462f65c56c77cfff52e46d3d042538a83699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb44c2f2200f850d6a1609ea6f282082fe51ae8a55145cebb4c521120909a7edcb74b0fe5a2ac2c1f7a0cb2705bdbeb7bce3dd33edb4ddacee2f772f92b01147433"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5116dab5147ee209d2bb54465ac69ced1cd5e726256fc4bc53cec72e983b39694d8586fdecbef25bbe615615e0698f2a9b21ec544d3ff645908914cd0f4da91c05854b8121e0ae10d162a4774d9a1b75cd5b5f6f9e51813910e8b7b5db2ca997d7"]}}, diff --git a/txscript/data/taproot-ref/de2a5caabe3e3b0b1b01533e95ed8f482c6ba0fc b/txscript/data/taproot-ref/de2a5caabe3e3b0b1b01533e95ed8f482c6ba0fc new file mode 100644 index 0000000000..1263e31164 --- /dev/null +++ b/txscript/data/taproot-ref/de2a5caabe3e3b0b1b01533e95ed8f482c6ba0fc @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b05020000000688d329dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8400000000b676ae7f03dd933f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688accc010000", "prevouts": ["1e2c230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7edc1e000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_34", "final": true, "success": {"scriptSig": "", "witness": ["6451d3179e62dca0cc40b81a493aa72f1a9c7ed28955784fa11e9acb9a663176f67fe8d9f8e88f5aca7a340d2dd56318b5306b6b8507f4aac26ab64103c9bb04", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["b34ffc91ae7554fb840d132cf67c074147c9171cf5d309cb403196ddc51ead9c0ac0831a2e63767b53c37f985a9ec82b3da0cc3199d0efe13405f5a077c2918334", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/de4f89a55a6d907d16952ca4e4166a5979c39c8b b/txscript/data/taproot-ref/de4f89a55a6d907d16952ca4e4166a5979c39c8b new file mode 100644 index 0000000000..ef9ec66a89 --- /dev/null +++ b/txscript/data/taproot-ref/de4f89a55a6d907d16952ca4e4166a5979c39c8b @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf201000000ce5eda9bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2f010000005618a396bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0701000000427c408b01084841000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487d4145d56", "prevouts": ["24fb4c0000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "4f8a7600000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "3763820000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "cf7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936748d121e1e21609f79570eaf4a0c66e6f2ca68747216dead3ef769b37e72a366da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed2b7053bd8f6b5ad2f12d7ae765b8b6e1c341259e3dfbe95167fdee949bfcc9ffe03d403be23d34fe95cd8ea927043998b4b921fc49b039e78905cbd289b8eab"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0822a853d9097b45eb0aab266931969d1621607f85e2073f603093b953a54be8539d6c4167c25132c432c9175336dcf34ec1853eafcfbd891c58e0cd045b8bc4542"]}}, diff --git a/txscript/data/taproot-ref/de5a7c1447572e08c6b28e753fe662ac083fd6d1 b/txscript/data/taproot-ref/de5a7c1447572e08c6b28e753fe662ac083fd6d1 new file mode 100644 index 0000000000..d2d6e2bd6c --- /dev/null +++ b/txscript/data/taproot-ref/de5a7c1447572e08c6b28e753fe662ac083fd6d1 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd700000000fbd7ecb1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0f010000001dc16bf4039bbc640000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca8010000", "prevouts": ["f84c4800000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "ac261f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "fa", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bbf1d1d3d3f3a5ef5765b8348d5c92141ed2621e0ac73cf7baa1850fff99acc06081f43f8c34257025162ccf1daca48ae61c99356c3eb24d5601d3c52dd9de2a6f5053dc49cb92d20c30fe5ab09c589302aa9886b9c794d18405aff33121a169"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a1d35e36d71f4211ee8dcb476ced8f16f1af9e215de664588adfe8e8df5b115526ad4257a22b62302a767a5b8896008d1af7055b6fcc30f1a04cbcad06de5cf2f8b8afd7beb88d43ca6c6d2d58dc9425172bd95ccf582b2eeeba83616a9d27d33bc3f3b627616b9f836af78c18ce00964f5f9dce3e851898685189c72823645e"]}}, diff --git a/txscript/data/taproot-ref/de5adc575b18b1c34a68e95cecf166f402e523ff b/txscript/data/taproot-ref/de5adc575b18b1c34a68e95cecf166f402e523ff new file mode 100644 index 0000000000..16ed3ac84a --- /dev/null +++ b/txscript/data/taproot-ref/de5adc575b18b1c34a68e95cecf166f402e523ff @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9e010000004e8d62c98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48e00000000c08d65870131f23500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac01adfd1e", "prevouts": ["0c3422000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e", "6c6838000000000022512014ab2ce168ab85feead37e4eac5416d9445f157495b1751829a16d631c43d5c4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "347d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93600b38fa5d865fdb23dee295cf5e738ef43355f5bacd695a02d663a7b470d4077ca882fe3c585d1ac8aa5218112791e3065e91b4e1e0362790dbd367cd44cec36e97124583e57aeab90707503ff0d8dae530166a9193c4517699e1743b45d7c12"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936671dace471e6820f5f8191987c15715f38317ddaf0403bd182cd1a89365688b3a00efe7e15c1e643e9e1cfaff50670e7cac10128754f4af7dc416953d80cca2b070c3fd2cc03cfe72ec91581f9e22200fa4c4f6deb8dafcd335310e90efb11e5"]}}, diff --git a/txscript/data/taproot-ref/de5af33427175b7548895fa5441e430afe11d1d5 b/txscript/data/taproot-ref/de5af33427175b7548895fa5441e430afe11d1d5 new file mode 100644 index 0000000000..45a48a6be8 --- /dev/null +++ b/txscript/data/taproot-ref/de5af33427175b7548895fa5441e430afe11d1d5 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b68000000006d4aa6088bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44101000000ac7b6e38014a4656000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f870b000000", "prevouts": ["297523000000000017a914a1b035f555fd87548264c3580a1f62a42acf027e87", "8479410000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "215d1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["248c4ecbff0376e38497f2505ebe59d4d0b15bd0e611d1b4b35a48707bbcf0dc895d691e1f190450c250940b11242caf62e507bd623fffa83199602a467b0e80", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/de6875a737b7c8020f44b1c99b70c4853e661ecf b/txscript/data/taproot-ref/de6875a737b7c8020f44b1c99b70c4853e661ecf new file mode 100644 index 0000000000..2490e7ed64 --- /dev/null +++ b/txscript/data/taproot-ref/de6875a737b7c8020f44b1c99b70c4853e661ecf @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc000000000567fd09760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e3000000006cc4beb260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703901000000fda958d3043a449000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf24a3044", "prevouts": ["c9366c00000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "2745130000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "d0db120000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936910f902344d2bcc0b5c96564c3b5a3672469d9f6056abedd80e999d51f34e041aad829192d8416594973be53751c2dc095bf33e54427303a5b8b45ebdea5dafd99ead232f95c20736c4ca28d40406922684ff7a84c70e432a4f6a4d4d1893c4694e361b142bccbbefeea6ac26126d4f4fbb610699e3a27d96f99d1b67de22f2f"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004599aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb44041dd00c04bb207a9f54805a750c9f5dad18a896c6f9e3a7e4fce73f8863b3a94e361b142bccbbefeea6ac26126d4f4fbb610699e3a27d96f99d1b67de22f2f"]}}, diff --git a/txscript/data/taproot-ref/de6cf2f6180404aa31b1db7d09cf2baddd601d44 b/txscript/data/taproot-ref/de6cf2f6180404aa31b1db7d09cf2baddd601d44 new file mode 100644 index 0000000000..f340451914 --- /dev/null +++ b/txscript/data/taproot-ref/de6cf2f6180404aa31b1db7d09cf2baddd601d44 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3e000000004eecdbfd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40400000000dc744fac8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48801000000149ea6b603d7969a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88aca8a50227", "prevouts": ["6f9121000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "11d139000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "5094410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_3e", "final": true, "success": {"scriptSig": "", "witness": ["3dc6991c17f520cd55b16b150ed1995c6a1226a91f67b1a6d5ba6a7269700a92dcc657abf599861635e5fc0d66434ae4ccc199d53c6b841a85aaf940c3fec2d681"]}, "failure": {"scriptSig": "", "witness": ["f45ff07ce00a4d91199bc40e46be5804cf896608d1c81a4172f7085e51bcd009d2cb520821c0ecd6b92afb1723f9f01443a014d80e837dbbca1de1485d1915fd3e"]}}, diff --git a/txscript/data/taproot-ref/de8a035daf19e89e29ba0bbdd71dffd1f9cadc5c b/txscript/data/taproot-ref/de8a035daf19e89e29ba0bbdd71dffd1f9cadc5c new file mode 100644 index 0000000000..86fb49cac4 --- /dev/null +++ b/txscript/data/taproot-ref/de8a035daf19e89e29ba0bbdd71dffd1f9cadc5c @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf250000000093e955ff04cfff7e000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796cfee2c54", "prevouts": ["40b581000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_1", "success": {"scriptSig": "", "witness": ["0409560971b69583c42103f76826e83d36226f497642c1c6e056bf875cfd5b928b25c6a218e0437035cf85fab6453439b8ec6d4386666317f829eaaceaf7b05f01", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50c891a70b8bb0132d0f693184daa3329f78466fc9e87f04faf00ccc234f11cbc269582b1834d781248799d0c926cf244530da7f9165cf2fc991d2fec2f44ccdef5d8d15caf631eb020f1deed6dec3c08fafb000f7595206524acb72bd61db3340a2a9f8aee6234d7ec65930079413cbe93f6f7c3cd9c34ec4470bd910e815cab46747863ffed685af4ab3e31b82858c7a773131cbd1c90c619709da593c321725b70c7da46e5fa46e8f9cc56e7f2459eee9af5db86137006f87300e47bb2b354dd64d234346e8e9fe2eed2d229414d66bf97b2ec9aaff75223b5a66136b86775e5350ad9486368b"]}, "failure": {"scriptSig": "", "witness": ["fc32ccb82868ac36ba7911908fcd8dc5ddbb53c91b6ef0f1621d39422e976761c760683f1103fa9b79781c40bf4bad2a993187c6e71136792896bfff62bc6daa01", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "5030bf7e5ec30f854e35517036d813901349f2d6244832b3bc5486468741d351e82c8af6d288bf060cd34a3f99272b1903fa4ff56d6ba0c7253860516424f52c5c53348aee89d1600124636622cd34a7582b"]}}, diff --git a/txscript/data/taproot-ref/dea753eea55e305608844a4f00655549302ce7dd b/txscript/data/taproot-ref/dea753eea55e305608844a4f00655549302ce7dd new file mode 100644 index 0000000000..a841273cf8 --- /dev/null +++ b/txscript/data/taproot-ref/dea753eea55e305608844a4f00655549302ce7dd @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf301000000f07fa784bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa100000000b808a1ce027a278e0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca0020000", "prevouts": ["830c27000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "027e690000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902bf02ff641e31f09c4d35f5f406a11ff59fc515d404a4a638b15c3f346fa771c567a27c0265f0cc211826b11b668419c055a77cc263e5986478f40e36657717f6b3a494dccdbf7cfdfc113bf627df190fb2360826940e8850acef35bca523acec0beafad403c60450194456d4770deb9054ba19193734f2b8ff2f2b4798b0518f188e4058e7715edcec862947ad50fb19cb614d10f704bbbd2bc43e6f29a172284486f05f1b01139e01521a7bc268c3300c519adba03b3f6dbad13db6bb1050419efda175fc1eeb3f4ce71917d919d529af76136b443c86acaee438f9bde767581c2d65117ff9f027cd9305ce42ae74106f593b094ac591d4c01b9924c2bc9f9313ad6b4ea0c567c91d5b3dc9b84ffb5c10afcdc6b7ff988dc09496bc5c6bd335a13a011dc4f18c48c721535707bc1aa7051e42d21b3885895ed4860cd871b68951a0fd86f67af4bb2d42e8edf5960caf8b1187c0e84208355a375e879cc90d38f188fed3188001390acdc2702176daaa94b594ba4c56540f582ebbe168d48cda00494821897826f62a13c9f4910a10e5a39565412e8f3273d6caaf8cfa6a3d56517f3418e5584ce7e54978d358ee9e83d188d475acb6d12643fb8c91b3e7b014be143cd618987d9f8b40ce66eb3eb70c025ff4021184a96dcf7bd27a26899c53cf64b5bd1b90d76704c0583e81e9131e16634f95e3b9c6f00e77a85678eba25e0da1b75d2a718353ab75", "dc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936093a5eeea5c169e2fbc7166a6430bf79557f7d46655a225e460f903debcec3108d49cd47170ad660e437289f08833289e3b90e14293c0ba427f1ef2b5a93f8559a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e3bfe8b0458382ba4f4ce4b13b8b707c198a710172b0004e49e202e4d70abaa7b"]}, "failure": {"scriptSig": "", "witness": ["4d09025b96938ed9b3e4fac18d3da6b49763a5d1c34f785686c491abcdda7f392637aaaefa9909e13d4efdfe5f14a4418fe2d8e8e0b8ab3c13e853972594541dcacbe2d8bba2c38f5646253b655ce00ff5dbf5db7e6644750d34b04d44dd606792170ad91e6adc2c170ad52dd3fe3488c2638393ed39ef5c81f377ee0bf464625ca87831006409548f75c7297842b5727f1394476709a3b33c213242be9f34de430fb90cd841597d692675a6ecb5d00be96655331d6e18595c82a563fc1ceef4d248f9d2fe2207855fba5d31247eb0edc92df45cce99077376d7620498d1151fe2e173e54aab7a7809d0e378eb276f5c998bf2ff463f6151b93474b013c4faa80c237ed5d9b38e70d8df604f8956948e1c88a1689a39f02e66a398cd4ca7fdcf81d6dfe98c878e287334378fb96e629f020866f9a77151f4351519ee88c560dd0843092ae5e1ed6ed3c5d8ab3beca1c227cd3be60f92ffe1237fe2ca3b1bf9e7445a9fa46f40f45fc77cc8bfc0388f74d81782efca16a0241c65b39ac9525a840784ccd99b95fc4d4124757de96272ccd15c27f01cda7ea2360b999be49e7c3afd21959fb7f2a1b7f70fa882d330f8fca48cf70041a1d4b3c6f1e3f5216804e3aa76b355a895bf7507a14e6e45543e76421fd39d3cc02dbef65531679b93357b3cde0852e62f1f2c66f8740f8294db350a0d85b0cfce382a8011875cb3a0711d71283ed3cba54bbcff15442875", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b824c9a54cd29e76b81e5147f3a84f06642da94bb2b4205613c863597e0bce9e9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100e3bfe8b0458382ba4f4ce4b13b8b707c198a710172b0004e49e202e4d70abaa7b"]}}, diff --git a/txscript/data/taproot-ref/decd88daf9600a38bc143777492f37dad4565eaf b/txscript/data/taproot-ref/decd88daf9600a38bc143777492f37dad4565eaf new file mode 100644 index 0000000000..e11f3c545f --- /dev/null +++ b/txscript/data/taproot-ref/decd88daf9600a38bc143777492f37dad4565eaf @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4b0000000063774ab860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d500000000cc67262401117116000000000017a914719f78084af863e000acd618ba76df97972236898756010000", "prevouts": ["628d500000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2452120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ad", "final": true, "success": {"scriptSig": "", "witness": ["008e817620cffc0c3a58d346ec64b478e48797b6850c6886decdddfc8d5a669ec3888c25c02b6c8deb655209278156b58913cc6e1d1609d6ed4882a25df93eea03"]}, "failure": {"scriptSig": "", "witness": ["de9a8f689e63f3d7c0df31662b3b8c773b214aa835cf868832f5dd09fcf95b578e02fe4de5c383172e84694b9f8567de9b84f790e5eb689351290152957f8693ad"]}}, diff --git a/txscript/data/taproot-ref/ded66ffb0cbf19f233f516bd3c63fe712650ef33 b/txscript/data/taproot-ref/ded66ffb0cbf19f233f516bd3c63fe712650ef33 new file mode 100644 index 0000000000..7fb357970b --- /dev/null +++ b/txscript/data/taproot-ref/ded66ffb0cbf19f233f516bd3c63fe712650ef33 @@ -0,0 +1 @@ +{"tx": "0b6fe83703bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffe000000007cacfbdb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c468000000009c09df848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f700000000774f468401c92a7500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acbd79e031", "prevouts": ["dcc37900000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "129d37000000000017a91439ec132e1466f40f0086baa7ac253013e83c7dc387", "bc53380000000000225120f3eef30b2db388e6b8a313ffb142e2e6ffc970ce6b6a81ae6dc1d81725c678ea"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "7e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e19aed6a34821d65edf69e9d12354a87f406d02be059705f92363392a057792142e401215e29d5d13de3b6ed62165bc3378402ce71158bd1208562fc299f33fc22fc39b3065f81e3c179a5faa7416c7afc60db6bda904d6a600fd6a7a1aeafb2cb"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a0d0ac5788f723aceb0a237bb228183ae381a676877b38e9861fc4f2162de386b9b4175db22b4058fbb32c1c98b401bd6f80a734567664ffaf4b869d5cecb8c8be9bce0da1a8e0eb2f55600b1edecb05394963f1d059e6505f0ccee9d28b62f6faffec7faeeadfdc2f9d17b998c1a9153f333fbb08a178932d29a7211446b62a"]}}, diff --git a/txscript/data/taproot-ref/ded72412b30434c168fa06e48b7e054269d006c0 b/txscript/data/taproot-ref/ded72412b30434c168fa06e48b7e054269d006c0 new file mode 100644 index 0000000000..4089a026a4 --- /dev/null +++ b/txscript/data/taproot-ref/ded72412b30434c168fa06e48b7e054269d006c0 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfea01000000f5e5319edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7f01000000447e5a1e03ef0fcc00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4874bd55a28", "prevouts": ["f0347a000000000022512017e91ee0326ee2050a26c2cf73ffa8316bb13627b7c7250ab1d4d36a20fb6045", "5da4530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_80", "final": true, "success": {"scriptSig": "", "witness": ["345e2569f6bc0378e11a381d7bfedb50dd311079ab6fba0c139fd4c352ee4a013d70cd2a332bd949e5b31b78cb892ac21831c9926563830e7fa72a3cace113b601"]}, "failure": {"scriptSig": "", "witness": ["679889311f25bbe6df48ba73daa150525f92b1bc85b626691a1e912f172adaba0f64af3ac315e6be452128c690c103935a87893244d08b695e476f53427131af80"]}}, diff --git a/txscript/data/taproot-ref/dedc75c0c2ee756e9070605ce546167cacfbcaca b/txscript/data/taproot-ref/dedc75c0c2ee756e9070605ce546167cacfbcaca new file mode 100644 index 0000000000..a2b67c89c4 --- /dev/null +++ b/txscript/data/taproot-ref/dedc75c0c2ee756e9070605ce546167cacfbcaca @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1300000000eb0c7ff9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9f01000000c78597bfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0a020000000af4cdaf04a802d1000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e76dfb7e54", "prevouts": ["501121000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "7beb5e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bbba52000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902675f54c964084363882394ad998da229764604e92985c5054486ac5d718d80f7061a038266cecc59eba9f612781c12845a659d75b65c37dfba7fa65cd6287d9d3bbb14fdad236378803b242648eb36bd7d85be915c6f706c8cb45101fa0af7e8d4c9d61932cfaee823776ddca35413dbf8f9dfbe7f091df3bbb341ef625925e347a00b960fe77bdae5e40e7c3fe4152f39aa5ce7922c5cbef4e9af35320ef7d6cf1260eed59167599bc1d88847bd7027f489351a5bf3cebd7be6e39c09553a4a61f79128569257af65e6b704eefdc93a586843e609c5d689c5ebc0160d4add0e5656194eca0d9e4fb668fab50b7b70333da27c820899454973aff50e92f99bd002f41661432b0dbe1909db9ef5ed10f30d0e3fae24a8fa9e1d01bc348ebc427ab8a8815ace325fbd4835c9a6c80adc5c47d2df50ba768fdb536f21257a29c2719978dcc3ea8240072bd2143e7a999e70eed11751c0ee817b8ace48a3a6faa4dcbdb1fd57441d1d5e696179eb7e05ae4e9fa20b5d0e9b0b4902a8ec1060ce4c6476ba85b6386f855ef3f0edc1f266605d0c1eac9e65329ad9f4b34a9d65ad717f9236f0906a18ac9d956854db9fcbea7700545f7de87d28db70ad14b6c229684c5fd109c6217ad0ee2a2d020de6829968b151591e58f1656e8e81c04dd9f77c3283504e14d452fc69b7f16b91bae882748fbeeec3731b6e5bec203e273e0f97f428c5341b85567750177597", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936adcfeb9b29c6ed44c20ba80ac794e3b3be7a6204c6ce082a2474d233e7fa669cff42e4d873fbb915aa5b42e254ee79c6fd372778836ebbd6336959492b60478df213b900f5cb66b025bdcf0538d69427e8f93cfc9741b2125e61cf9215fad53f373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}, "failure": {"scriptSig": "", "witness": ["4d0902c34d9b5ef32efa4b78f99a029fc6956dfe364fc0c000ad51b638365278a19a703b498f4e601855ef0f0bfe54de14b7a9b5683c8687790a838c9cac2d86284bd554593f9993309e96b3db5c5cd5f007f6964e77788283b128f688a72ac331c8ae8a23a8b631d0b797cc3c0e804353951c5fa876ecd79570ef6d349b1de34410ddf9953617e94e9248882ac09c2834197bbfc6a1e00a353933a6576321541fca3b21bbca281e6fd79c7bbbe0ce0fc058880455faa49a90ee12130d8bf20d7ad9e1e1a3813b10e39fae954e7aa72ad1ccb5d7c9353f24102c0ead2294cd0df0845c3f6cd438601822420563e463e88a37fe06bdd32dd847d534786df94d1c5b2cd09b08b9aff272ce947f85ab0f67f4df058ecde27d058036848bab5dd7c75d1bfa24caf08bfa6ca004ad475cb0b68d6e7029082556ba911f0d5f814986a486cbdb8189998825612817936c1ed1ec967275feec6d446caab86ff88fd880c0461b8d7c31ac3028521722e46a20edf02c551f2f5b9568a9b4d327af1c739a4cef202b97742b56bad83d03678baf57b22e33861ebe8d97ecf423db50053fc3fc651092851070cc8f4074a46a35bf04036f6b1f23070bed2713df5b3c26448dec1790312e26c8e07453672572bcf56d73606a9dc09bb98c42000a217c3fdd2f442e864b372c78ceabbd6fb9d43e11ab367fd1ed574045c3ec42d41a1db84da2e61fd717d05f6424355325b73c7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d9004505f4756eb22a3c38e0612932b2e111811a644330efb7a4d77fa512235b8ceac2f213b900f5cb66b025bdcf0538d69427e8f93cfc9741b2125e61cf9215fad53f373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}}, diff --git a/txscript/data/taproot-ref/dee101172e339916048ad363fb6995306d7dd142 b/txscript/data/taproot-ref/dee101172e339916048ad363fb6995306d7dd142 new file mode 100644 index 0000000000..3e8a9e8a23 --- /dev/null +++ b/txscript/data/taproot-ref/dee101172e339916048ad363fb6995306d7dd142 @@ -0,0 +1 @@ +{"tx": "e2951d0503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2900000000faacbcb9dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1601000000b69418878bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4eb000000002de75a95023fb57d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689870b6d6e3c", "prevouts": ["4a82260000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258", "6f1924000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "0ab0340000000000225b202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["c14c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5182d044aa67ca69515bddcd39ff85ae31d999a9a5b32af0a0137c9fa4b226ee88d3f52a2844c5f7874c7d430ecd2ddfcfe713e30c56da5784f950db6acb8f092a"]}, "failure": {"scriptSig": "", "witness": ["4c52c1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f59112a8c06ad701f9edfa42ec0be4849dcf79d254814ed43ac6a9ae6ade45014a663af4c315d4c0e419951403071b67d2106b9ce8bb6d7e6c872100135a32b791a13a85e5c2e660174c9a1e69b8f96263917ef129d2001c822ceb7fc389f44"]}}, diff --git a/txscript/data/taproot-ref/def37ff0a6957f0a571488b66a768f20f7079048 b/txscript/data/taproot-ref/def37ff0a6957f0a571488b66a768f20f7079048 new file mode 100644 index 0000000000..e27808a85e --- /dev/null +++ b/txscript/data/taproot-ref/def37ff0a6957f0a571488b66a768f20f7079048 @@ -0,0 +1 @@ +{"tx": "fc52232702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff701000000ec1eb2dbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b00000000007f7b48d60234038c00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac9d000000", "prevouts": ["15e1680000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "86ae2500000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d512c6725dd4617fe2c0113ef50b93a252f15ac43c20ed2eeb851ef9070637abf4dac8db205c7d3bb0390b2e22910f5d1cbad00807eee3325f4c4e7f4412ed3064a1c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa3b35d8b29d4381edf568701a69a1e2b58fb6f81852737bbb7ef3118982f806dec24bcd5a84e558ba1632e81361cbfb2715ab9fa3d579aef34157cfe08620975813d9fe920e311eca68d9da8ac683d4c5ffd57c03f9174ce1b6c58fb2e14cca376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}}, diff --git a/txscript/data/taproot-ref/def74495863bbdf9d1af666161152708f2ba582d b/txscript/data/taproot-ref/def74495863bbdf9d1af666161152708f2ba582d new file mode 100644 index 0000000000..164f0003df --- /dev/null +++ b/txscript/data/taproot-ref/def74495863bbdf9d1af666161152708f2ba582d @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdd000000008a9c37cebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0f02000000eae7a34c03b3f48f000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7c198d544", "prevouts": ["5d6e23000000000017a914c7049bed1fc82cf46b0539507abaa88864b6346987", "e07a6f000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "5c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2e0fed7abdf786fbd6951af9acc54241aed127c5f19f62d09ba4f0526eb81a5df243c72f4e074898aab8058b3c73fee97ec3b9723e213834a8398e97170c1356"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f95811175664830046faed455096fec372413cf10fdfd9c9c39f3ab5db40cc592e0fed7abdf786fbd6951af9acc54241aed127c5f19f62d09ba4f0526eb81a5df243c72f4e074898aab8058b3c73fee97ec3b9723e213834a8398e97170c1356"]}}, diff --git a/txscript/data/taproot-ref/df029e9ebb9e83aace8f0071d2840c27c3ceda07 b/txscript/data/taproot-ref/df029e9ebb9e83aace8f0071d2840c27c3ceda07 new file mode 100644 index 0000000000..4a37cd07c6 --- /dev/null +++ b/txscript/data/taproot-ref/df029e9ebb9e83aace8f0071d2840c27c3ceda07 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcc0000000071630ddfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5d0100000077f260fc03d5faa90000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df97972236898796000000", "prevouts": ["5be962000000000022512064408326fad1f8311f590f6e6ba281aab75c91070d1d43ff117e995859b8513a", "a8d4490000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "617d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93680e322cbeba9447e623c355f3a00500243eb51ea80336533073705560965e3918a99f3582d6399c0406dfe65dca998a5ce57b7e950df5f64352e1bbf6c7fd210dd304186c0a2faa80f59261766b0cb9b0760b78eb1f31f166a6f091ab62e6898"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e0063b43826002dc6eba62f224851f0eabb14759fb10c707a6afd7fdb59e93aad3ab6b2d4691bf881316931c587f0a213fdb9026021e80f212e72f88982a6bfdc"]}}, diff --git a/txscript/data/taproot-ref/df085e9114f63f74c86f24312e70f7b5318ad9fc b/txscript/data/taproot-ref/df085e9114f63f74c86f24312e70f7b5318ad9fc new file mode 100644 index 0000000000..2d9af9b9a6 --- /dev/null +++ b/txscript/data/taproot-ref/df085e9114f63f74c86f24312e70f7b5318ad9fc @@ -0,0 +1 @@ +{"tx": "36449a2c02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0f0100000000b960bcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3700000000576d43be01f4b34c00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac83000000", "prevouts": ["5386840000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8", "e6232600000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "017d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363a70d9b275504125857cbaafe4a923049b33c80b4c83ac6cdbd36bca05abf17733479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae05873438be84f92d1402d5d55e9fb409fe52800aaeb5db180b239b834bc1ca2"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361819509e9671e02e7a4d8cb2e99fbc3fdcbb7d0847ecf4f66821ff751ef18b028874369940c44314cd428c72b977b6d1fa375b1e54ddd71363c505e3530065c38810a2a55ef559e3dd2f859359930339f67e2de31eeac841179b888fd41fd8a3"]}}, diff --git a/txscript/data/taproot-ref/df12a4966bab2fafa4ffe3a2ffbbbe8d697046c2 b/txscript/data/taproot-ref/df12a4966bab2fafa4ffe3a2ffbbbe8d697046c2 new file mode 100644 index 0000000000..b9d932425e --- /dev/null +++ b/txscript/data/taproot-ref/df12a4966bab2fafa4ffe3a2ffbbbe8d697046c2 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b56010000001507ac2fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c880100000047f521e4028cc57200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df9797223689874a000000", "prevouts": ["8ab320000000000022512049309db7adc24e71859de9f715c32a97834a8db8d4836c0bee01675ed84352f5", "3c7654000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063bc68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362bdbcaaa23cdff8083cd34ab41f9ef3fcc9019d9deb6ba18cee7c393fa19240cd300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d516a0ed0b6cdb130b03f26b8a245e72d5247ee3941518d7e9956496f6ce27b97d7150e68e664a4d5c991e5183d0e7966d99b6c66da3079bb04bea44808922b61bc"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a75a59cefab6a6e43e7cd7f010e1e9163ce51aff720166368ac5c7faa51270509312a224ee6564b861c658371f7a6f0026ad2c58d86ce869dc9b432e830a527104966f092bf1e4b4348fca11e7254311373308f7fc15e3d44d6a2afffa343c9657ff193055e5853205a1117b7666344cdb66562f15b4d40280f3656784bf5cd3"]}}, diff --git a/txscript/data/taproot-ref/df16a0297efbbe308fa83a0f3e6ad417689b028b b/txscript/data/taproot-ref/df16a0297efbbe308fa83a0f3e6ad417689b028b new file mode 100644 index 0000000000..d3a9d47da9 --- /dev/null +++ b/txscript/data/taproot-ref/df16a0297efbbe308fa83a0f3e6ad417689b028b @@ -0,0 +1 @@ +{"tx": "53b6091d018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40c000000008e6ea7d901a6021a0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc80000000", "prevouts": ["b0743e0000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902996d356a528fcab7ee830ee5aaf2f5d101b1d192eb1378e4caf2bc8f7a426db18ecde281277f52b180790f35b399c99253d7468b53c1615afa504b916c407b5adbcd4bcba48185971e9b4ad829ae532801a5858524d7c201dd0a33636f9c39c4f79ffdb2c535a7cb79d18f495f7c58b1767548ed28de79220d0ada361e0f6ca7f102c05ae817e2970b9411aa3474c781c6b7ce83752fdd1eee3524603770e083092ba4cb6666d682211c0274b02799958b5badeed0e064fa6980b55f83d88e5e84efb6f8fa598fcdbbd912c6f6ea85585dd9d50cc6a32ad71046375904c41da5af9ca7ad95c9a84bfc36e75f7e642a3fd5c8d0321c49e73c2c2ed3397fe5cbff5847c65bf28c370b3098852eb99b7187e799452dbada4949e52efbad4bb8f690fce7ee4e2908a7c823209fa861f0f2d12c8f3270af8f14b003371f3696337142a6c6ba3dc380b9977576a9f14281d8c7c2c77d153ede428de528575fbc5bc04b70d600c52a8820be15d9c57f838509718a741ce7de0488e6ca6f484bf081bb8901647ee93e722cbd4872274838b00e133f1946d53b0e15da55b41d208b4a47db4448d1c2496ab32757e5f94e7f31e6ada4f3ed6e8c369b29f4d2772ff1067231895809abbc87ee75a83d8f327194de90dab8dfa5cd3dc101b9c43f9c2dbb0978eeb496b04e61984ff85ee95fd0160542b2a43c4fc7cde5daec3b457afe38e7e21157212fd466b38dc875", "cf7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936143c349571a367481e690b7209c29b5ce19961bf557985bd6c7d96f3e64328220309cb272f305cf5bf6862d0b37519cb4aa2491edaf37578d4af3081a91facd0fe03d403be23d34fe95cd8ea927043998b4b921fc49b039e78905cbd289b8eab"]}, "failure": {"scriptSig": "", "witness": ["4d09022f26e02f0df918a0d0e06ac416b58e90305ac32689786eda24ff8c32e7b56991e9743a412fffe4c37604a8b64afdac3d04385544f890c8e5247dd42b08b2393323d86a0417517d9fd631db7eb530dfe6aa8e77ebc55e3987391d0001a2ef665ee3793bdda91214f0e2b77908a5565c5be5dae994d6a702f5d568421fffcf614c987dd9e12f09077c467a631121e4e49018b4b900ce0022fe0dc56b201f79d5a3fb64b474a8c9eaf6889d01f464b1aef04381d4277a0a440cb3e3c9a74bb05d988a8d37655dad5d846f6188ed93755e86d36d9b43027dda6429ebc92d04b13102e683357b92d6378f149206deaf0cd2920c65781a5eddfbe4d3eae96293cf0c633f230919dd41f17c0519e5c76f75104661446904939eba161191c8a39bca19345817ca250176e355ff21fe8cd91746225bea5b74adddf15f129189681bdf1d10fadc688fa387a156ee113df5812a2dcecb0b89a5dda4008e77dde9de93f187f8606f5fc69bb0717275338ce3b39e18827425dfaed39197253174a810a0c323fa40c60ef5c9a3d67f5fc5df7194565e5b6dd9bdc396ba7a4f60b2293801eba075d6322824fd978aa0c19ff88286a7a2079d48f9799dbffd44fb4dea28bc9c61e9d5faba8f9ef2c485c707a8c93e3c29dffceb49fdddc69e24a62dac03329c67f6cbd0f60f71e57a9d256c5491c70813fa7ca5a1dae54825276e390a1c730e8780932a3ae66381f8ff6b75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367713179303850cc700febfc1488c688622fdc6710045748da9f51ba3077a9d29da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ed2b7053bd8f6b5ad2f12d7ae765b8b6e1c341259e3dfbe95167fdee949bfcc9ffe03d403be23d34fe95cd8ea927043998b4b921fc49b039e78905cbd289b8eab"]}}, diff --git a/txscript/data/taproot-ref/df865486869273fb5f7adede25fcadcb18ce2221 b/txscript/data/taproot-ref/df865486869273fb5f7adede25fcadcb18ce2221 new file mode 100644 index 0000000000..1ab24e894c --- /dev/null +++ b/txscript/data/taproot-ref/df865486869273fb5f7adede25fcadcb18ce2221 @@ -0,0 +1 @@ +{"tx": "b824250602dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7a01000000fd949edddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1401000000948f09de04c9c07800000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487fc000000", "prevouts": ["ef115600000000002251209f6df9bf0ba86119ec56bc774d8ddd924452496c0c827ee2df6dd8b5f3d2e1ef", "e303250000000000225120a0c53dc99d5bda6251c68fa12a805cfcccc74115072cce855438d885fbd38ca2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "487d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ebe5e2af3a3c1a6754948d639a5542927d59c509fd5287d02d091c2a39a812b527da89940c9c2be3d3cb1ea9fc374137a74dc3bafe909c68993f298761996d666"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936379a98b85b817e20bc3376f43a8b74803a7c6b50cc59446ffb1c9510b7649235edf94ae33f5606292dd7c11b30be28c4e66005bd3313ca427ad5ed734d53452840210bd7db211b82a407c19f9567cde5a01f8f2a3c3dc032c7ac21169de78447"]}}, diff --git a/txscript/data/taproot-ref/df8de808e45c8839831abd0deb0cabf9143753a4 b/txscript/data/taproot-ref/df8de808e45c8839831abd0deb0cabf9143753a4 new file mode 100644 index 0000000000..6f789bd684 --- /dev/null +++ b/txscript/data/taproot-ref/df8de808e45c8839831abd0deb0cabf9143753a4 @@ -0,0 +1 @@ +{"tx": "71b5e2d803dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba401000000be38a9c2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9b010000003949d5b6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba2010000007c0e80f601ed1c22000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787e6a4735d", "prevouts": ["4a3f2100000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb", "f873240000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "4005270000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09023f9c84743c3be04ebacc743a2b6aa04750418f91bd1282a1cb40d916fb911d671a40db603a9aa900a6c8bb50f3419112460cce22921155a835fb336813220d71659a1eba21ccfbdab649f30721bdf6c430146a1c95e0ccce4ed5226e6217eb4022ee019f8038b75a9874fb1a5b110f10a1dc7f655e2ad0c1114ef5d93047389bdf7b8b96f73ba1b2774d9c0626965c34f401c611ecf3f0e070377768025e35140b2278ba78b03ba17272647acd1234b5b6dc75ca9874ff04e870ad0fc6dbf5257ea3c07f6e33eb28bacd0002482b8f20e39da68dc9c239b31f6db812a812f5ad84ade7f28c1c0cf8786c974e07b0a62a10a549a8bcf9f009f12b1e2ce3e1807795a2ece75ebd7234f3fa529c73c9e59409e4d28f3420c85f35af6b8386c13f00517bf689833e3ce60ff2508c7467a9e533c1be1f70c69df354dadfbb80fdab00b60167134fb19748b56b30e3260bd16092ac2113d3cc059e00ca433f5fa866c338c290d9e652ea0e893f97cf55540c8dbd0a74fb6ce2b446ab524deee537f6f1a79723834a9b5137bb86557683e14652dc5886bb13c89ed1a0cc9e5216012855c6cf1389599c2bd375cd011bd12c7c14bf51dce3cfb6e1074675852b92d4a2842a37057690a087b76475e97c91484afa2ba44006fb2d727b8ae7b6e978b526b3499ccc6177bb3e1d4d105b6d26598a6ffad84f5c5b2b68ee666f13dba48dc267c2cc4bda576082bea07580", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4e222414f291e7c8e231e07541c9ce63e3a938f40bc45d6936d3328c3939c0fbc26dfe099323fd489e28deb26e949bd9371fd3334eb17fb18f59b980c6dd72afd91585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}, "failure": {"scriptSig": "", "witness": ["4d09022a58ed26e6d19916da5455f120b9bd3f2627182e441e3e44087278382c827e1406aabe52b2e3be20a766bfa8daa37c81be9d1e017c44380f169df0d387627c920637b06649191ae08d7614cd6de635a83a5b6d35951b1f23da988fc0e96df01bd8392ffd08fea2839948d1ef45d7b228557a1ffd1f4207aa6227343e2c4b261213f3b0571bcb967001b380b88c55efa3e1d78025ee77003c585f311bc08eb46c30141ac11cdbd754c48b0e1eaf61927101dc14a87c52905031eeca89f754b89a8b7200cf3de2a837159a2152ff59ecf16d13eadcc2dc29b37762a303f712b65310a969ecb44515db112190059301b60c558a27845d6c4b1ec832340e6d5f8796c6c1ce46e9645180b7ec72c10fc1f798f3c08cb0c13bcb85b32c1b03be328c2fdc4f4001407a99d0b5810ee6ba73f721f7a9c8cb3b523ab6122c49fb81c3b97bf53b0c42118c0eb24c4c1219adb65bd9bdfd4c5efe789dcb33a5eee8147edd27dcacdc05978e9619e6e824d4508966e73c1e069212e3aa5c14c19025974b35e7115b0c0b9e42dbb4d8715a7a24b7ce32196103a23feede16fa66ebe811aedaf62ea6ecbfeccfc5a5c45c434b02201f043459ba0fe9bdae08fc5bf5d79a9f65ddebcf80473d78607dbe6808ba7d03be03ea057cb66b2ca7ab3b16a06f3666bcda75ba19a9b2120ed3f421af3aa7177b52104fe713100fae661b633b5f9568f8fd06ebd8ad1fbe3109837561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364386f400f3ec9e99e4a117ad3157ad40372b43bbbdd0f0bff3bd4d11670e39fb26dfe099323fd489e28deb26e949bd9371fd3334eb17fb18f59b980c6dd72afd91585e32e966e39b6b25c1732dbccde0ae2700833a1164b08d78002e58493a9c"]}}, diff --git a/txscript/data/taproot-ref/df8e03791d82b6610c2c15664032e32589ea35a8 b/txscript/data/taproot-ref/df8e03791d82b6610c2c15664032e32589ea35a8 new file mode 100644 index 0000000000..53e3440b5c --- /dev/null +++ b/txscript/data/taproot-ref/df8e03791d82b6610c2c15664032e32589ea35a8 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703300000000690e42c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42102000000816bc2b260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f701000000b4d361eb03c83c6000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcad010000", "prevouts": ["3f56100000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "e9274300000000002251201d9d7b8068d804e3524a88462f1a480f3f4200cc7b90f0ee3c3216cc2f53f488", "35100f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368982585ef19be154a5d0887475e9222bb71fccbba422f418bf7ba462437a3b52233ca416c78a4619c687785de007f14a4879f9c7a0556256e1b46b2a7e5a39b3c2782374d67da9500785d400f7ef10ae84f146bbb568355094c68456b68f7a283b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0e6ddebd74405781922a3c06ec9e019fa66c9803c79b531f33e986452ce61d5d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51ab4aa5d5e3dbd00e7a6b81724e903c1ca482dc7bc8339f552afc52b4f38fc6a5b77966166a359aa5541e77c34a58fd9dcb7d88ef6e7e0cd0e140e1adf959d28b"]}}, diff --git a/txscript/data/taproot-ref/dfa3c5fef1b463d98f523033ec70daf8d4bf8803 b/txscript/data/taproot-ref/dfa3c5fef1b463d98f523033ec70daf8d4bf8803 new file mode 100644 index 0000000000..6f77a1617d --- /dev/null +++ b/txscript/data/taproot-ref/dfa3c5fef1b463d98f523033ec70daf8d4bf8803 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8300000000f7f2e8ffdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c620100000059b834bf029896b0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb18bbe4d", "prevouts": ["86e863000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696", "36094f00000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "0f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa6f8d113c18817a044fae8525416b35b4656d6d7185568187de608cafb5211e2f68491001e36edf91058819766439c3f31bd198abbe3d2204f458ac7743e1d61ccf16a5e3db9e2b81c974405e52c4661efcc91a529144e47e78be5814d4a09901"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c7116f5c3e80617093632a2db9fc234f36b396a24b73f6adf68743edb71604c5d8798a2c57206b85b6eca830bd166e5350a1cd63f89078c321fceabfae97dd5c29bd03bbcbebf503f24139d653052e63a9a9f3faf73bed4a74eee576514948d11491142a38ebb10a24e36aadbe0cf227dedfd0966bcf56b2aea8b33dc3fd67f"]}}, diff --git a/txscript/data/taproot-ref/dfb36ff8904f4e8107d8ba666de3e5f94f741bfe b/txscript/data/taproot-ref/dfb36ff8904f4e8107d8ba666de3e5f94f741bfe new file mode 100644 index 0000000000..f8dd052903 --- /dev/null +++ b/txscript/data/taproot-ref/dfb36ff8904f4e8107d8ba666de3e5f94f741bfe @@ -0,0 +1 @@ +{"tx": "66c9d80602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bff00000000e4b956c2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b000200000011b1a9fd045972450000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876c7bd32e", "prevouts": ["8ef71f000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "f8d7270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_3f", "final": true, "success": {"scriptSig": "", "witness": ["11a821d804282ed3f8e49777158fa60fbe76e19e1873d2b28bbe5fa3125262909cdebd9455e37fd062bb1fb94bb22d7d4c2b8ac112dec4121b4012271f6c3de282", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["168a4a2774d61b7aff005ce782158729fd2cd6e14544b385725fba1617b32f9538600f79a3bd53f864e50f423f15e9bd90bb3f8c8569c803dbf82c31a3ed70e03f", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/dfca4159ab78bba17ae0d77f088b5aaeb3144266 b/txscript/data/taproot-ref/dfca4159ab78bba17ae0d77f088b5aaeb3144266 new file mode 100644 index 0000000000..36583ab97c --- /dev/null +++ b/txscript/data/taproot-ref/dfca4159ab78bba17ae0d77f088b5aaeb3144266 @@ -0,0 +1 @@ +{"tx": "f608de5102dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1c01000000234b88da8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e200000000afc6ffcb04a1565700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7bcb4062d", "prevouts": ["be01210000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f", "4c44380000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_da", "final": true, "success": {"scriptSig": "", "witness": ["60c79cf8a600096f8a85a9ef515c8744cd0d0a5c56941db9adc89a5e1bb8650788eec46fb60722058a82881355c0151ecba184eec81b3e65fcc49856e6bff75281"]}, "failure": {"scriptSig": "", "witness": ["be63d79f66a757cc5525c3eb51df4e41a12accd97657f116f5ef6b6d92f81e6e9ccd110de22c04592dc48a197929ef7130d8af195193716c1e3a9ce10923978eda"]}}, diff --git a/txscript/data/taproot-ref/dfe3a4307a38993f68b0c2518ea2e3e590b0c9d1 b/txscript/data/taproot-ref/dfe3a4307a38993f68b0c2518ea2e3e590b0c9d1 new file mode 100644 index 0000000000..285bef3a8d --- /dev/null +++ b/txscript/data/taproot-ref/dfe3a4307a38993f68b0c2518ea2e3e590b0c9d1 @@ -0,0 +1 @@ +{"tx": "421bd7b302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c140100000064fee5d560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270da0100000002f966fe026fee650000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac3dd3f227", "prevouts": ["28285a0000000000225120ac0f4213e8783833c45f3d5eb7ad9dd617b78266b96dfb5473a425c0f67cf18a", "d69a0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "a37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368269b16152528d89fc36f021923e691aa0c01b4f1f2096ea68808bf45cf529e55a5b11a87f009b0ff9f397e99e72fe38b81dbea82be72f6430c36b07738f500beebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7accae923b25d556389dd5dd645f6d7ddd89a07a74a73dddd3d85d7b65ae33798aa"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93638efb5b103e2deb74012998154e31323d0912cade4af687f6058be382e79ebb3842663f27fdccb53374929a05698df7a3618af6b1227ea033500411481dec31ed2054b94cb6efba565738f5dbf6ee5a67458962b65d77e1cf5e0d2c1c00b2210"]}}, diff --git a/txscript/data/taproot-ref/e0128963856adfa8520b26e571a93610b5355887 b/txscript/data/taproot-ref/e0128963856adfa8520b26e571a93610b5355887 new file mode 100644 index 0000000000..88925e11c2 --- /dev/null +++ b/txscript/data/taproot-ref/e0128963856adfa8520b26e571a93610b5355887 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3f01000000b8a74f8a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44f00000000e90788d160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702a01000000ca5a428f0116f30700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ace4010000", "prevouts": ["45214700000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "d6963e0000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5", "aee20e0000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09021f71643238160aad99ba4e027345691308f1a5ce1cf20b87d58d7ea3aef4fcdb6a2c2aa2c33e7e356f0f8e6210c18f5a49f6198cfb4856caf0aa59d925240a399418058dd0fc3c0470836560c06f2e37985ec97545e6eac2d298d96da35344bcf5033169fd58ca8cf08f41de9d11fba54420c36a3f5cb2b7d4ac0832b96be595041b139d57af1e2b42cc68404691c598f16fa4614f19b3658b6c991419fe337685b444d747e001490e7ee2d293cca6ea81b80ca4cd24ba1616eaed11e1a26086f7f42284b88fd1ed32d5641cdf2965f4ceffe7823a52bfe2cc2e6db6e93a93e243c8a1cc2eafc853804648716654f42a5bd5d17da0e52a08bf3d10d7a85e89a73e162f29f0d394ca9673a0ce8bb0cd0522bd55131ba1b013eb95c9a403930cb92924d2908b57a0735e47d32fc537733ff9702137044743ec4358a977219f7d49a377186b0e2bf0920804088d78478b5c88e5806f3865b2a68bb0f431386e7c1c37405c989c183cada54a0ab1d002e271c524fe4e1acc9112e64c2057563ee94f38b720ebae7452c6245526d8bd975373dd68c2af912d52f00f7ddaf62a3314e525c1404541ae0ef217c499252779d8cd687abe56bea342f034a28a122b90c520ad6530cb7a94b30cccb606580a42a787bbb0f589b8dbbc8553ea0e262ba56e7ee0f46b778e6669d541e7a7b5b298851016882c21b5880e2548d9b79ab6f38683870bd85f9d979e456a75", "0f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e84be90cc292444734c987c78e965b1739d018b44a402c956c06fcfea30a9c442ccf16a5e3db9e2b81c974405e52c4661efcc91a529144e47e78be5814d4a09901"]}, "failure": {"scriptSig": "", "witness": ["4d09026921d9bce9d183e1fff6c943711a9afaea661b56ee03416b7a046706e051b8d43fdbb8c01506d5ba97e16d05e1e287c632bb0e7a58ecc3733f05c47163c2a8ef12bba1d5a5385a040797170a04bfe23df641aaca9ac639cac5807d0bfb5db2bef492559149cb6cb5aa7b9f3fceeb26a281f074aa1b8e7bb7e7a3f7b06f0dd315bc9e466f4065769a4885f3c88ebeb9819c854f090ab9b06bf5301e628801e557defd0f64d7b4cc6fd9a23a9b7d394a35be478e027effb8d0512d431d844ca025b7f270ce1a0e9211e050c1b2d1747475d62e1f760b420d4db0808f36a8f5cb3953e5c09c03f4da723e0d5f5bd61af4bdb428fe95699b7026c81233fc54182034d270ef3ba7115e59155f4d8089155aa951234360131490b61d11c7760d8f8f806f49761a5e89bf2ffbdf5f1bd5957424df7eff9c666c6d4a5ccd73ec87aff5c61fdfb60a568beff0ba051fcc1f5fe7ffec77ff2a82fece0daf6ae3498091e1b6bfb8f6e2740339fdbf757a11727b9c61f5812a20cba28bda15c41093eb19246485cbcebaa8c0e9d00bd6b185ee4d899b4b018f22d8ba2c5c2045656d831c82ea24cc493f30cfcaea40c6165b7c3c3174ab2e3c29ca62495c996ab409eda86d5ca04c4eb547f8ee39b44a99cd4c35302de5d0270ca88f177a63797b661ad46f15af47e2f75dc19076339e85d3253645f4d39ed906a8801b62eb97facfd0fbb9fe77bd75ac916456de0475", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0825d8798a2c57206b85b6eca830bd166e5350a1cd63f89078c321fceabfae97dd5c29bd03bbcbebf503f24139d653052e63a9a9f3faf73bed4a74eee576514948d11491142a38ebb10a24e36aadbe0cf227dedfd0966bcf56b2aea8b33dc3fd67f"]}}, diff --git a/txscript/data/taproot-ref/e03443f852b194c164bc4732fb9c5cc86effe4f6 b/txscript/data/taproot-ref/e03443f852b194c164bc4732fb9c5cc86effe4f6 new file mode 100644 index 0000000000..f747a9e6d2 --- /dev/null +++ b/txscript/data/taproot-ref/e03443f852b194c164bc4732fb9c5cc86effe4f6 @@ -0,0 +1 @@ +{"tx": "0edf5c600360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ef01000000195c71c7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2a01000000128387c360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706301000000d6a1ca9b01111250000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478780000000", "prevouts": ["77320e0000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "f6ba6f00000000002251208082b91639ce415d44b93ebacde06f605687bdd15466bf93e6aed91c1a4a19e7", "1f6e0e0000000000225120ca2f7736d38d84f93b62b86d7eca19a35f2cfb6705849a1c6400bed56ad761ae"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b210e7034c35130f37a4c8504b3b1ce362cd53a6c695edf7c15e8918a2b984bc"]}, "failure": {"scriptSig": "", "witness": ["6a14616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e0588caa737bfbd960ff3fd219ca062193aa6bf0 b/txscript/data/taproot-ref/e0588caa737bfbd960ff3fd219ca062193aa6bf0 new file mode 100644 index 0000000000..a4128d3133 --- /dev/null +++ b/txscript/data/taproot-ref/e0588caa737bfbd960ff3fd219ca062193aa6bf0 @@ -0,0 +1 @@ +{"tx": "67281e5e02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfea000000004aacbe908bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42200000000a23368a302d754a3000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898740461b2f", "prevouts": ["a9f1670000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e", "032d3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6abd", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45bc79ec207f4553f17b4d8afbf0e47b02e8cf3ab2b0172732171fcb0f92ff87125432b67bf7a212872373c5ea5ac6512ad650fe3d5c26e1d584bcbdba0083b9a9e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936effe4d48aab6fcce879b221d7012ab600ee1e9c541d61044892151855353df93631743d48971d1733c6ca7857843602fffe2e4122fe98dc3fa85acbd6da797d181cd61fd18311004a5536d1440b72b537197adb3a0d17581cb4a1679e89097edb5843f54915b2c97abdf26ed2d562b36c2375ce95d63af6aa508e6368a687449"]}}, diff --git a/txscript/data/taproot-ref/e0aaba61fbc722b30669314cc389d44b8f989110 b/txscript/data/taproot-ref/e0aaba61fbc722b30669314cc389d44b8f989110 new file mode 100644 index 0000000000..6aaaefea87 --- /dev/null +++ b/txscript/data/taproot-ref/e0aaba61fbc722b30669314cc389d44b8f989110 @@ -0,0 +1 @@ +{"tx": "a045fd37028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c414010000002c805d92bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5f01000000eb722fc402346c99000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689873ec82e5d", "prevouts": ["2b8b380000000000225120d8440763d2116f9dee5377791731b3635bb44d7a42fb2b8a8507b8fff76ccab7", "dddb620000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646dbc3aa3b80e9e2d0a0162b269fe7cc9ff8c1b234cee9fd626b14f4beea4ba0"]}, "failure": {"scriptSig": "", "witness": ["6a7c616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e0bbbcbab18f481daf5b315491e268254f4983fb b/txscript/data/taproot-ref/e0bbbcbab18f481daf5b315491e268254f4983fb new file mode 100644 index 0000000000..eecb76762f --- /dev/null +++ b/txscript/data/taproot-ref/e0bbbcbab18f481daf5b315491e268254f4983fb @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8c01000000dffcc7d7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfce0000000016cac3e60495eabf000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8729020000", "prevouts": ["937b5c00000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "5f7e650000000000225120e1a0c74a8d16f26f13c9c4b6f4a1ceec6071856e9cbd0cceab614068d31377db"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a29675a8a9f92469804a42001d31f755afd3155cf1499e996268a614f1896320"]}, "failure": {"scriptSig": "", "witness": ["6a1f616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e0da4e0fe645f0a953ac5735fde4706cca9e1197 b/txscript/data/taproot-ref/e0da4e0fe645f0a953ac5735fde4706cca9e1197 new file mode 100644 index 0000000000..2a2365fe07 --- /dev/null +++ b/txscript/data/taproot-ref/e0da4e0fe645f0a953ac5735fde4706cca9e1197 @@ -0,0 +1 @@ +{"tx": "32d633d502dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4a01000000a75705a460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704e01000000a92a96b3047a596a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac49000000", "prevouts": ["76e25a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7e79120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_5a", "final": true, "success": {"scriptSig": "", "witness": ["00a5b92cf209ea7a03233faaab06f3473c81218f097ae47a29d670f4125c454524d7fae66ef0c37054e12cda1f510131fa2add7087e9c39d0e4e3d21cc16fda2"]}, "failure": {"scriptSig": "", "witness": ["32dacef7b8b950c592a6a4bc06665dc63b08f0e930d52f08014ac6a5a2ca79928d028a7825d769b60bc56402f865828a4689f495269a5fe8e4c5c8cdbc205fb65a"]}}, diff --git a/txscript/data/taproot-ref/e0ebae4900e11a9672f2ae78e61178aa6247650c b/txscript/data/taproot-ref/e0ebae4900e11a9672f2ae78e61178aa6247650c new file mode 100644 index 0000000000..ea2d4fbd64 --- /dev/null +++ b/txscript/data/taproot-ref/e0ebae4900e11a9672f2ae78e61178aa6247650c @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c200200000056d3cc57dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf501000000a74f649460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270020200000040bd4f300326debf000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac82010000", "prevouts": ["1dfc5f000000000017a91480e36171416c0f598c1c20ba17ab3a3cf10a438e87", "34075000000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "95c61200000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "2359212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["106a7e3049dc2c6347306abcffd6f8c8b3f26d4b7ee65ebb24d0fa41c8692b957b5654e881ef324dce199491145286cfa20a23ee05d277712bf9841942e08319"]}}, diff --git a/txscript/data/taproot-ref/e1087672834b43c44e37cba854b5b9c9f7179a84 b/txscript/data/taproot-ref/e1087672834b43c44e37cba854b5b9c9f7179a84 new file mode 100644 index 0000000000..3255e85af9 --- /dev/null +++ b/txscript/data/taproot-ref/e1087672834b43c44e37cba854b5b9c9f7179a84 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e5010000000f6b49bbbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf66010000005e3d45c0020d06a1000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acc2a8f43a", "prevouts": ["777a3800000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc", "e9266a00000000001652142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "317d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa37da87d72e5c2c3f2bf3679d8ff958ed33e42af1e2394a1323a8da273322fa97a4517c545b323e839a783e2c84e61e1f1046ec65ac2c085bba4fcd3b8ecf0c89"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368c9b7003f83096f4e27f57dbc2b99136041ca132bb1f5d87466faccd9e3f4bc737da87d72e5c2c3f2bf3679d8ff958ed33e42af1e2394a1323a8da273322fa97a4517c545b323e839a783e2c84e61e1f1046ec65ac2c085bba4fcd3b8ecf0c89"]}}, diff --git a/txscript/data/taproot-ref/e10bddf4873386e1fe3f6dc0f2b20f5c151c89e1 b/txscript/data/taproot-ref/e10bddf4873386e1fe3f6dc0f2b20f5c151c89e1 new file mode 100644 index 0000000000..7e74ecc84e --- /dev/null +++ b/txscript/data/taproot-ref/e10bddf4873386e1fe3f6dc0f2b20f5c151c89e1 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcf00000000b38236dfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8a010000005a24c55301f9287000000000001600149d38710eb90e420b159c7a9263994c88e6810bc78fb4e75d", "prevouts": ["e7bd7500000000002251208ae894af2a9600386c37dee4cfaf898fd39bd624f9812efea0f89b144f5e3b3c", "1d6a230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93664b32368c4af7eef3a1be2a374bfa1d9f7dd677f641009402fe4ef93ef570ac8"]}, "failure": {"scriptSig": "", "witness": ["6aae616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e11d98e0003ce918a6fad19f550ea0702a879911 b/txscript/data/taproot-ref/e11d98e0003ce918a6fad19f550ea0702a879911 new file mode 100644 index 0000000000..f8d35330db --- /dev/null +++ b/txscript/data/taproot-ref/e11d98e0003ce918a6fad19f550ea0702a879911 @@ -0,0 +1 @@ +{"tx": "9b03967e038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40201000000116593bcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c30000000008140a59460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bc010000003f8a038f03ce439b00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a61f020000", "prevouts": ["fa123a000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787", "d8a45300000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "95390f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "47304402202cb966c001ff37b464f6a3883ff23bc4b0b57f1077577beaa81a695db7c60587022034da4a6ed8c3808c3465ad5b31113581e7d04baacf44b96f4faa3d621508d30586004c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}, "failure": {"scriptSig": "47304402207212228898a16d87e7b89181af917c2db17d7f012b69287cd1b63d85cb6ab5f602204cd659fedcc04ca4c50ccd2e793458c59db2e733899c3073b5421e5747fd58a28601014c4c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "witness": []}}, diff --git a/txscript/data/taproot-ref/e1326c178bf8e7b80cda8ea9f9dd86938329c849 b/txscript/data/taproot-ref/e1326c178bf8e7b80cda8ea9f9dd86938329c849 new file mode 100644 index 0000000000..d77737053d --- /dev/null +++ b/txscript/data/taproot-ref/e1326c178bf8e7b80cda8ea9f9dd86938329c849 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc900000000ad2a3dffdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5001000000014b29e90202c4900000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6db010000", "prevouts": ["7b506f00000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "9412230000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09025d20600f8db0995e20ae953328fc2d250dfa7161b98e0947b7c54aa754e13053679b8323bffa9b132414ffee703819e68939792426d5672ac9fdf37c787361c23cc28abd6958e28d511ce9d3e5f6bd2b57c07ec0fe7e6b784bf2d226bc5617f13eec00e5b6c4640b69b2c499284bc14a001c9c4d2fb51320c4906d93754c59457d24413dd583ff2483526a7cbf762d06dfc9a0b589bfc5ed4cbd52e6e5a6349c8823ff6fa496531c863460edc2a4c7abfffe1b6c003f31b0ef6a051310077b0dff1dafeeeac4403e906d1383666202fb0cb2237b786b81212e27f236c224842c62a078b61a662104d68ed88246df5f678b326097586e66fe3badee56299f3bb85f74062e90838ee76f3381731e8a47cf3cd1837de25e0d0056e963b7e3068825e803560d29eec26c0527d6e2aca1efe08e5f39f059bd4dd36ac29e4067587a43b80904d2dfb06ce9b2941bdda3b18e6c5fa29ef67add45b3a7c19d625142348120d711d622185dd394ebdab51dd1e9e2c5dd995d0c440124d4f178e6548aca7a757ec048cdfdcd5b0d725f0e2d16933f03b4f63e0cb5cfb686a8db2c8c9c5b6bfb0cbc3e5df68919b813f4d48617cfc0349580aaf16495ce2a3995ea8545e427f0fbb31b219d730067f0e2a2865ccc63018e9d525e640d2a58e569109c9db29d9adef28f50580df9f3e2cdf59234a4a2840cdd3c96803d561c39e772524ee0a4f2709cb5e67c06f34975", "d97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e8cfdf3dc4b41074e6d5bb67bf9f12a242211e880ee715069382ad177c5f1aa2ff72d95b601af8434dcd53e2a5d08dfad1c07e45b1031877afc5b1801af7debef3d33b10ff9eee8ff434f7c79f826d5967b94922da2ad2ccade1cbab3a3658011"]}, "failure": {"scriptSig": "", "witness": ["4d090288ebbaed409d5dec4a49a41d1e5245e0611e0f139929d3186910562dd04cbc8171eb9eff0f7ad61c53e411b73b00c6b6d1e4dc21fd29c953cf32189b3cec13613bd6e7ae258d7780ef237ad8c3bc4b29db43dd21b541d63d3691cc6ab72e906d0e31835741465137ab2e32ffe9c3c813d63ed743045fdfdb8f7c3338803117f6e87963a229ddfeca20488ea69309f5bffa9de3718db6af8553ef417af2b359c0db4b7e5dd711d7f024ecce8d458c4be30a1bf7b48f452b2dc5d354a51feee0db64f532866910bd11e279f72923196350d15350f6f6cf8e5afcc3aa3dfd1287689b0db3274888d0acce3740fdf581c514ab918b173f101a83b02663bcb5356f614ca17aff8cb6479081d3751cb822b371c67df7c6e9b965fa00da2934ef18924387878254d29e3e6a0f4cde3d7abd9c1d4bd6ee8caa429862a654341f60e6d8aa9b61d15271b944ca3c0aeefaa44585dbe3a1cbbe689d4ebba739298f62ddb5fac93cc553029d155c2a476b57a118e6e9aad0e9d7800ec13e1b81243e2d7fe3c62303c7ce9f91cab21212953f05cc02f230a219255c78308e9b941f219079234b3b2694230f51c01b71f74b8df5375422c78d775800576e52452b55845d9b4f1e6e3879786fceb1da5e3d654fa5c88d99d70c7880425e5ca562b870366baea4380b6266e9267dcda6a67354e574f0dacd6ee9a711a10b18c05bcf415ab6f95133b731b759ed1226287475", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93629500195d2baebed23c7ef8c6d51f922864fd4e8b73fd6bc85a789a27ba769e79208680e05d04c3942bb784f68e647b385a50066aeeb87d1b11822ef550a3a38682a6e83df749f265180f93fd54e474915a8abfc6fef0a760c06d61a0bf42967"]}}, diff --git a/txscript/data/taproot-ref/e147111796d5b53a6bf6dc9458c50027b4d09f87 b/txscript/data/taproot-ref/e147111796d5b53a6bf6dc9458c50027b4d09f87 new file mode 100644 index 0000000000..e250ffe405 --- /dev/null +++ b/txscript/data/taproot-ref/e147111796d5b53a6bf6dc9458c50027b4d09f87 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4da01000000f19794d98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49201000000e17d8ac402e45f79000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65afb4455", "prevouts": ["b8394000000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259", "18193b00000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "317d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936baa8b3b4b8a0b13d474f8e303d1fb88b1f31b08e2de6caa1fb01bb3d4c0176023f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08228c5b97b98364e562d83f29d0f7226f72eeb298058e828607471d679ccabea05a4517c545b323e839a783e2c84e61e1f1046ec65ac2c085bba4fcd3b8ecf0c89"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936848a98c8453c3accedd5d6c98b5c0c5ec67507e057504b5eef02067a388f801228c5b97b98364e562d83f29d0f7226f72eeb298058e828607471d679ccabea05a4517c545b323e839a783e2c84e61e1f1046ec65ac2c085bba4fcd3b8ecf0c89"]}}, diff --git a/txscript/data/taproot-ref/e14960a185290ebe95ae6279b9e869e837251710 b/txscript/data/taproot-ref/e14960a185290ebe95ae6279b9e869e837251710 new file mode 100644 index 0000000000..1a200ab7bd --- /dev/null +++ b/txscript/data/taproot-ref/e14960a185290ebe95ae6279b9e869e837251710 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca401000000a89fb6d18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d9010000001d4379cf0321668a00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689870d020000", "prevouts": ["d6ca500000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "40f93b0000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "spendpath/trunclongcontrol", "final": true, "success": {"scriptSig": "", "witness": ["c9198bc74e031c9f9e1006abf908758af04e32f0efad12b4c539b1ad2f1627a4b18cb5326fb182d40da5651a09ed969a7b567354f769e97ba429222fd687a6bf", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b78be31b16966ae882c7ab2969dfe11d69b83e8cde47f805ca2a48764752b9cbbf718e574c4e60a583d038972ff24d56360066622b8e32dea6b1f072fad3e0b0e380268a7da44256761590e2195a1dff8c2ca3465130317c0b1ce6724329355e20e712a8eff36d68da3a9b55d8bbb5a56a7c2dffdcf5fda45eb6b04c97de1b90a9e89bcdd7fc6427334431f09d8e083275d692f7a4ea32eb53fdbdfeec8936fdebd95377ebbb40a5c3979ca7a09e65ec6c5748b544907952af1da6c4191f216d633f9d096a188370cc7644b4de45f8a3fbb7f05176fe1bfc064b167b3764b5cb27ad2fcabac681aa39bfac7410cf932536ccdfbd274af833d6abcfedcd9d4c1498e9d4b7b30f3d9fa0392c06867240a1ba1a87750d1e987b2d58da218ecb361b00000000000000000000000000000000000000000000000000000000000000009bdad734e6e3fe025a23777ea959457c1a4763e34fcab485472093e82ba34b6229d0943d0dd65679f059096147c046ad897f468fbc7f0a5601dbec82a0f68715000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a22495b1a4a1891c2253e36490ec96b1607292246135e2ed22c7edd6214f6c4ccdea0dcdbbb8847f77c0f70ac956ee6bba8c40a0b009ffad84cd54ab946361a6ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff18f399bdab8e1515fa960b1287180525634f46ea99e1abbe989bb40b526952a90000000000000000000000000000000000000000000000000000000000000000628a6886de34834298757e072e274ee77a4d415a9bc3d63ed1662b32da0ae780ae848ce8fab73b9d81a11f76fe66b44da73b126a34408d3c66751c72220890517cf20095ddaa0e39b232b31746ec7d72310bf019f8e327de3674ae303353457c15de3dba4653cc4dcf1aef7ad34da9a6e4dce0835909a4c56bc51365dd121e694e4b2521dee2aea7f1e363ab964e95ddea9a07d1bce3b8a3aac42fdb8c579806000000000000000000000000000000000000000000000000000000000000000011a021c551a25e01f25d0d9dac6016d3d162351a82137bb91b22bfae9f045767ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff94b85d84adb74dc8849bf68f7e7469b98f295bd36fb195c45201c22f7f51d7fe0ed5f704019db5dd1539bbdec3d10e4d036cd037a9d70bb63362f21155e83d2b884c27c034bececdabc8344c8ceefaa5fed486be97d0159d9e6135d56395c958458e55b61aa7341b09ae049d0672ff67c18b036dfcc7c5a2c445b20c65da2e3f0090e86822a05d1d3ab2755a0710df642a4830645df3cedbb48385055b4367c357c5b074248d5062281dd686e2e28c0db8cf03f5ff95cb38d07a5642aeab2532913ebcf29d0660bcf17c396b8002d858a3ef5e68c21ab69a91658cea1f72293446ead3dd0f3a755ddc947c71a48392aa4e3eb7c08ddf4714f57b848c510532630000000000000000000000000000000000000000000000000000000000000000fca92079c632d81adf4a3b258d4338af2b60dab20ebe6975f46e68810bb132c4ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffb2b202fb3661f0c5604a0c3eeda6978898cb37ff9278e5815d4e5196d466e9dfffa689ab64e3f127861709db1a50a711dc149ccb8834e53273c631f65bb0e52b0000000000000000000000000000000000000000000000000000000000000000145c7a14c04fd30ad7b80bec265d4604563dba8052d658057020ef2cd3fbe02e0000000000000000000000000000000000000000000000000000000000000000db2e0632f9699acbcb6e37f50cb31c205968760c274f796186d2315ae7d0601d198bba16ea8c7c243529aac098a927346981499c1f3d3e915d1fc6006fbee8f3fa36a1bb0792f95109f467202971580cd63a07736022b617fb7faa45b21b687181dde60e4136be7b6472aa99ad0f684bbc7824749be06f19ada3f5689cad234a381d877d08be120085ef8fc78e37e3373af7f7308a09b4da9997f73f1c0e944a4d0e363294d7bc67031d3de2ffe261a4e5b184e40e0adfe553898f8150324ea67e8e64f950f72ed0fb74ac43c4fd37923915c3c77c6e2157db1d340d3f3ac001000000000000000000000000000000000000000000000000000000000000000076877632c0c065446105116b544cd4d4f2fba46cfd0165780841f0e1ded6f203fb11634d6d4bbb66e02c391d2888d1425ed03f8b7c3b266486734e343c8b3065baa96329af5c8916564fdd90306c7f310d0014586839c251c233b0dcd30f1719d76b6c3eea9ec2caf5040160071fd94cb00de6ed94875876911f904c6c82dc02ee05c87b3cc4a312252048a5200d75bf90bf4f177eb21e3a0d0e765df413f586cba37d953ba406a8cacb905df75c6f6aa4acdfb84a186ae48853356010f38a1cffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff97172ee737f1fa9fb929d8292bb2805ff2268c1b0c4fff5ad29c3652d417025053beb6b633975ad3f0b7a983b4e91e3634c812e7e0d65b0fc1270e5bd5a5bd9700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000758aebc787b8916e0a88054bd7cce2d63159bf3d0a5daa0256c439c0b2be1afb140c2f70c319de7013bfe2ce2f011bd84d0cd5c4e4eb06d8af9632b603050c8acf273cbc06d80241339df46b65983438c9445c72e2d6b679fd5cf6e645f31694c87a152e5f16de4bf4fe061d11bf67c3c55720cfb37afcd9a0b54996a99c25eee3f320714fd12ce7654c4b83ca0e8afd2b5b4653eda4c797f044939d0d37b62a02be4bfd0192151653144c57650b8401437a01e70ffb9708d9c8751aefb6327e2ab6c48476921b919ace450440c9dd3e97ff786356293b0f5e01fdbeefdabdc80000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000f564116ca2c9937e596fbd82c1183c5915ef10da4f2f72a35334d9c31585ebb89583133c4a14cff9bfc896e5498359f9d87aac7448ef0fdf7199d92511ca7cadb02c9d98725bdd0ad7f7a987a22a8f616f1889aa556e391c1342c2104f633d2b441775e029add390c31e46a9317bc638b6bb5a51b3f2642be45b92748a1672e8c5ccddf10a6a1a44a06133152de9863e0698c1071e33600e07f738f34710de276af9fdacc866f0e01802fd5b5a9ed9a86994f959abfdcd54ad7670e3c498a2d0ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000a36ca445cf1a781a8bb9dafea3d20c8891f4667789ed11a288a320247bb68adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcdf9887df53b35dd5a0aa6a4448bd6b792254dbc3c59493986f05f41661c74fe1fc9192c3b74775c5d594c3a7d05ddf95c6dcbae7f30b9beba7d66f64b9e04af446e4e747db79ea28e3dde4e13f284ade9ad3056115c4184e22133e89b49c8e1e007fe29858f36d52f89a88e25a29916a611a81e2ff0100c6a149676ffe2ebe709cd018dfc65f933b96aa86ad2c25f70a3fe9fec3043261be9bbab80f5042ad0000000000000000000000000000000000000000000000000000000000000000ef468c5fe9b6a8b732686a20e7f7c65543bc50da4f1262ec1eafd44fec2462ddffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82a159a179389e402345f5153d944866f5da1b1520c2b1281d64d5c9a01929d3e0a818a6eb2febbf43e99c4ca262fc3121359042b561868763ac470241567826f08106b87cc2b22e8eab99b95d827ef386a9ca8422e9fee9141b482d14d70496f6d075ed3065418248c64e82bd7bab5ebfbb93a89fc1fd132e8ea5cad1c0cd3aefbd47181b4e937b7a44e95701dbd40f2ce2d0fe197917a109df7f60fd18d04e0000000000000000000000000000000000000000000000000000000000000000ea7ca48b4d6661dc0e1e70085dee3fccefca29073f686dd0f619444664c3fbc20c62bd38f5a5e193879e1bec2f6a4738c90e10a17dff7a9e399e8aa9bd4988d6459f5cb859e4c808c90f6ed0019fbd2673a9fb29843a766a017f7e160eb6143b355d89624b619efd0c816daf144921029e0517958795158b584de9f6852208dd1df3f8bc459112072b86adbd8c1163d34f720f54185f97b46b3354765de3ea1d23eb0e99276b7387cc9ecaf0ed692624b99e838e49f0d5eedcd56e377cc79791efc6b1f2266d6a4b08d5859a07c31e1404a018b03669aeb715ffc019d94d751246df2cc47965811c390361848484f692ba14c2e62e6f44b542bd52879bcc034937dbbcfcfc3e873a19b446a92392f35f1c4faa401d84fb12cda38f2dac70e2b14374d6fa475421d762df54df4a569b148b7f3ac1914d1624fcc62841501ac36dffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8e8f1a68daedd98588f5fcbea31a8a940a4d32d65684223664bc5f399ef64fd8e229aeedf2df90ca58fec8be2b5af84a9783b08a067145517081f6715e380e74c3a4428ecab42b0023a47dba881b935634d9f2aa7aec5222e99f2ceb1be8101500000000000000000000000000000000000000000000000000000000000000009bc483b6d6ba9fc1f1c4a62e522dfffc09f678788b69c0cb263b5999e11bc3923abc7a392e8271d6b4b8a78124a036c473893a94fe314717d95bed941efc79afa37447111a784689db7d3094206768abfd29b8f3255c8ab5531531e94576579b82ccad9763146d19045ac42f2a46b4286b4b51af7fd6fe115a15fc962c1fb984eea1571bc255d199ef16b2e71ab062469f335574bb9b2adc00e9c166c27d6e1f000000000000000000000000000000000000000000000000000000000000000089eb19b8880af1bc072e67e7e1440929ba857958738cae978ba7ce95231066aa0000000000000000000000000000000000000000000000000000000000000000b0dedac4e789728a5f5680de06b8c7a14a8a057c82868ff58b767e51ba45a3a695d7853ec13823fe853b357744f1d93fc74db6a2a647594f3d40e6b2c819eceb00934c1614f0446884767042ada569edbedb35763667f0a9ba256d88f8b98a3f1a6fe93ae751c55106a2651e129aae2e49d93d782b623fcfac8063d61fabed3f878def2616efa4a4a7fcabc756acfb04b8aef3f8c2852f4b6a095a79df89adcb"]}, "failure": {"scriptSig": "", "witness": ["c9198bc74e031c9f9e1006abf908758af04e32f0efad12b4c539b1ad2f1627a4b18cb5326fb182d40da5651a09ed969a7b567354f769e97ba429222fd687a6bf", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "b78b"]}}, diff --git a/txscript/data/taproot-ref/e170c4afc7cf3aa9e0e5c2670686778994fa4f11 b/txscript/data/taproot-ref/e170c4afc7cf3aa9e0e5c2670686778994fa4f11 new file mode 100644 index 0000000000..b76c7f3bc8 --- /dev/null +++ b/txscript/data/taproot-ref/e170c4afc7cf3aa9e0e5c2670686778994fa4f11 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708f010000007d6193fc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f6010000004a71e3b960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705c01000000093cd1cd02363e64000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87f047c423", "prevouts": ["df2c110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4a5e4300000000002251207ecf5669449c43a088571b8452d22be90b9f1c03aea1b9900f46f7b654cd7ae5", "818712000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d0", "final": true, "success": {"scriptSig": "", "witness": ["fa4f73410381304292d94eaf5d8be3f7f2709a235b0fd37bb8bfb41ed3d02f7f60a3462e85dc669c0a16166a16762a451637002a03f74f88a1992fad6eaee8a3", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["849bfcd3084d95a95d93738298a994f11f9b7ed192d1e5b96bedad04c2e4a53519bc220cdd391b9087031e62781b4aebc096bb7823bdd92ee8e17099f9c5999bd0", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/e184bc711398d7c0c1fa6934192fda6c555a1cb3 b/txscript/data/taproot-ref/e184bc711398d7c0c1fa6934192fda6c555a1cb3 new file mode 100644 index 0000000000..b0f3669544 --- /dev/null +++ b/txscript/data/taproot-ref/e184bc711398d7c0c1fa6934192fda6c555a1cb3 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5500000000e17386c6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbf01000000655e64b60215bcbb000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48731792f38", "prevouts": ["e16e49000000000017a914e18c03fb168c1c1b3408ffb477de8ff77b0fbd9587", "c198740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_93", "final": true, "success": {"scriptSig": "", "witness": ["73d4d8990c22287ea75a72b4076651141cd6db6f3529c3865a66cf8fc4e3d5ce9fc88adcc46e4a93ab1320539cd37986901375f02dd10c9581c899c41cf953cc02"]}, "failure": {"scriptSig": "", "witness": ["bedda449369dfa9d19f670f7ef2005015a16df8e7d720d532ededc00843dc2616c36d7936248781ce86cccd0c60245d8eafd71596ada74735b311887035e8e9693"]}}, diff --git a/txscript/data/taproot-ref/e1b11848fd01dfa0ba32bf126463d9d364ab4313 b/txscript/data/taproot-ref/e1b11848fd01dfa0ba32bf126463d9d364ab4313 new file mode 100644 index 0000000000..9b41c3223c --- /dev/null +++ b/txscript/data/taproot-ref/e1b11848fd01dfa0ba32bf126463d9d364ab4313 @@ -0,0 +1 @@ +{"tx": "9cd4c5f8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40d0100000043103d8c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127060000000005b59fac60132e71700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac67000000", "prevouts": ["9f583d00000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "5860110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "047d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb6863138d45c5b9211ebf4039595f6572b1b39ac7fa7faf75aa7045d3f3541879de556ac6994112f2dbe51e2f18419f84f5e3afde46d5119f13558b672a3f6371a343680beaae3fbea53ecc49afe7cbe880992a117d636f336d7d159be7b446d"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b3e41ed570d7da98aeefbdf157119883206a3ec62c5ee7bcc27bd56cc9670384030e911897c6e4798122efc4265e48d96402783f565c89ff2a62155c020859d8460181b685601280cbfaae0e90478ea5ae6fea73a2d03f5a79a14a3e0c6d503"]}}, diff --git a/txscript/data/taproot-ref/e1ba585df080f7b1a7f8f2c7db5dd610f19174de b/txscript/data/taproot-ref/e1ba585df080f7b1a7f8f2c7db5dd610f19174de new file mode 100644 index 0000000000..eae9f1edda --- /dev/null +++ b/txscript/data/taproot-ref/e1ba585df080f7b1a7f8f2c7db5dd610f19174de @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709a01000000adafb548bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8201000000cf248c1a03e0558a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac05010000", "prevouts": ["bd9b110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4ea27b000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "027d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936420b598f8858794c178995f11a8e34655a29ef30c99d23407a26d0a64bc31f191a39935f0afddba064f6b0bc8589127966a984604296ac06f9873b8ee7d7aea369828280661f54bb25ef200c9d39138c753346ae1cc558703fbc48b26980763768cf2d3d0be95621d7446294d89d9a2894510d2dfb4e1a33e7316a17e39cfc99"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936228879bafec8e1069b4e024c9320127e455344299f19b4d97495a4e33db3a44844c267ebca37631eb8e8b6e08a101702978fd7f172e21a8d6d6b527626f4402168cf2d3d0be95621d7446294d89d9a2894510d2dfb4e1a33e7316a17e39cfc99"]}}, diff --git a/txscript/data/taproot-ref/e1d952db862331ca79b0a9c72c162374fb1857d7 b/txscript/data/taproot-ref/e1d952db862331ca79b0a9c72c162374fb1857d7 new file mode 100644 index 0000000000..0229fcc7a7 --- /dev/null +++ b/txscript/data/taproot-ref/e1d952db862331ca79b0a9c72c162374fb1857d7 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fc01000000fc7cc7ccbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfed0000000086d73080029a989400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748768010000", "prevouts": ["e92f130000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "09138300000000002251207b42365751b5fdb0753f79b4cadb5a33cc8ff9fcbce7e5edcb6c5338d7e5f81e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "f37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93678222c567c1a65829550fd3c2183189ca7aadcb6cabdbec6c6257af0e513de4394fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6ed93ab99c02c1580916967b23bff6c51eda165404bd9578af086db7302f1c7275"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e87bedb3584a87481f218db37ff1fd20e008c2f171ef887df99e3acc75d9f4a6f1d93ab99c02c1580916967b23bff6c51eda165404bd9578af086db7302f1c7275"]}}, diff --git a/txscript/data/taproot-ref/e1e49dcfb28496b89f4ea5ce3dc0d76d880076e4 b/txscript/data/taproot-ref/e1e49dcfb28496b89f4ea5ce3dc0d76d880076e4 new file mode 100644 index 0000000000..183ebfb38f --- /dev/null +++ b/txscript/data/taproot-ref/e1e49dcfb28496b89f4ea5ce3dc0d76d880076e4 @@ -0,0 +1 @@ +{"tx": "0fe2948902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be6010000006a51eadd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c4000000007dccafb10437fd2d000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7964bd1f750", "prevouts": ["e56f1e000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529", "981f110000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902cb38dfd361afd702c974a25d6865c03a173543537bb6578cdbf2994118157fa521ccdb3f8045d4d5f0b904cbeabc676c128b409ed28168c6044cfe3b374420726862d0d97426f6d11bf9912c253c2638aa41ed0a752203e7cb7cd60868268865031356d1c91af74f1188ded93326d2c57325f143090da96ffcbebd1cee73d74ae7f70e850a37a9ecde11e5a233fa5d4d0edd4905cc4bd8f4a77e2b9fd98d210e355fb7b7b658cf41f01c7b2443e8fda819ccb94cfd2aa6a52be675282748f651167987994112e78dfd7946d9e3843351b817919ac4796e190f09447392834baa612ce71b2fe18ef1c78ee194204c6680f17b0e812c2f3566c1823ed1cb25385aaad6f752dbde1a700d4870ccb70dab75a104c76b8bfd64dc9ac4a165c6c5258a85ce9cba41d6f6a6753cc42b280fb8eeab3e16eb22113fcf2bc80a9033c054cfa3cec68d0afe1184fa970e59b0b5ef2ba28b02cd3e27b6834c431ab8da4f26e2bbc5ea27e77d614616949f2536788421cd80a05ec7125e6db60ba00f96b9e7ef306bb24bdd1554c8a2a62d1443a55e7e3b5735c81a05a63c5db4704d36f7b92ba54f982ab742b17468dd3732e764abaeceb27839e2da9bd94d67218143774b38b3d7e484e46d0322370c445b8e38c10e206b289c5991bfa7502436102bc9ad223ef391d1d482aa3df54a4dcbabc9faaa1c989e5dcbe40b2ca69236959bc0c192f315c054ca8e2fe6fd75d3", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4272895df1c355058834787a12b20ffb756990efd77bd7ff75ef6e99c81f77af73e02ad6eabd24d4d247e98c297de2a9d81d67e55d72d4ddf06c8e9a23565ad8a003e045cb689fe4fc6de332c618eb0cdce02c2dd8aae7c6dd6f70bdbaede2814"]}, "failure": {"scriptSig": "", "witness": ["4d090210557bf04b49bb164a20cb96dba3802883f479e809c623a52d15f1acd522b8191d415389ac455766a36d682969ba18e280eec2c8a3dba4a9079ed35f9f384e7d77c2f2a51588a00408410066542a509b255d0eb2b042061776e7fcfffc47d39f01b0050e585894905ad848179dddd272b0a0ebb225eec06159370f554d603336af639b6d546acbf4e39279539b7b002694cf148e4099f6d279090a7beccc29549da9c8d25bf11125b4eda377cfee0cbaa319314f438d9a12131e6eb48a2cbcd92c1de6920d64dba658daf5b96b01e35dcdeb20009fcfec02b70130d86776087793a62d5d75d7a03ba1d16be28d90f30e7f86048d06326aae5e9560099cfbca949ed312d31cc0ef94c7fa3dff82a0a9e883fab8f5c68b4f348bf51890b27fd3f54b585902e7842d92358b8b32c67fac4b6d89ca90d81452d17603de4895ff5c4b712d447e48043caa33841cfc5f46d9c77a7bec3e7471b93b4fe261a687df340e3900bd7ddac564e3ddac29a4dc87f90db96fd4376ed1159ae71827fd438549d92b126296b2a6627dffe99ee4e1193293d8c2d3e57bfee318091294e7bc3db042e9538d51dc42eb1a4b002563c1148b41d8d9be23ee37acc019dc3adaa9cd5f94ee72037372ab2b2e6af5f1726369ce62318618f42bec75c5b5480da57b1f39f98c39fc9b9752b1b8b8acdeacea5384bde5d0a86fa105c7e6ef7a558ff96da77be1fb32344fcc3b09cd7561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93660bbd289a3574b95652603eba9bb146799ea91d5db46701829a42358fd9ad106234a5a049dfcee5b69ebdb7c70e6242c675d1abc9cd58c84d7f9a8e8e1277a43a4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}}, diff --git a/txscript/data/taproot-ref/e1f0807d7b3a4bba613963e80beb7c74850d5c28 b/txscript/data/taproot-ref/e1f0807d7b3a4bba613963e80beb7c74850d5c28 new file mode 100644 index 0000000000..5b77ca7456 --- /dev/null +++ b/txscript/data/taproot-ref/e1f0807d7b3a4bba613963e80beb7c74850d5c28 @@ -0,0 +1 @@ +{"tx": "02934972018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43000000000ee48958c0115ba1c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7d1000000", "prevouts": ["26aa3b00000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/popbyte_csa", "final": true, "success": {"scriptSig": "", "witness": ["cecd5264025adf4013b9549d7df8d8922594246fa1594dd3b27d6f08cb3cc80694f97376a401e6372f386b2b9dd34f1a6474928660619a394f14cadb3d20692d", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef32555276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}, "failure": {"scriptSig": "", "witness": ["cecd5264025adf4013b9549d7df8d8922594246fa1594dd3b27d6f08cb3cc80694f97376a401e6372f386b2b9dd34f1a6474928660619a394f14cadb3d2069", "0020aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ba5187", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b4156e42857b376da8d6c773cfda98a48ea1c932813c83e4082e9a92127ef32555276eb689076808afe36911989d4823aa7576798f07a1060fc609cd8f041d5c3"]}}, diff --git a/txscript/data/taproot-ref/e22480aebb82f3343403252198ba68a247b6d046 b/txscript/data/taproot-ref/e22480aebb82f3343403252198ba68a247b6d046 new file mode 100644 index 0000000000..b93a842091 --- /dev/null +++ b/txscript/data/taproot-ref/e22480aebb82f3343403252198ba68a247b6d046 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8f00000000ed8cc89e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45a0000000057eac8a603966c5f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac496bcc1f", "prevouts": ["7fdf280000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a", "752e380000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_3", "success": {"scriptSig": "", "witness": ["4a40e5df678a84a92a1b8acf5811cbe61f2ddd41409d091d66f4b0975d350abb88e347986859019450db73f9e8a9fbdb143578940b833f98c7a9772c7218864303", "5083deecf4721c9cdb4119d484f0caeaf438104133a0c467de03fedcdf2a6bcd686be9e73c"]}, "failure": {"scriptSig": "", "witness": ["f096abd28f18cbdc97736ca689aee4cc1da800e447ab15087c032854ecea78e38dd869ecbcf665fd8055fc1fed8d7996f64895a0d406057ee149bd85209ac13703", "5018d17b90f0439b917a7d21e57f85801093"]}}, diff --git a/txscript/data/taproot-ref/e24851678d123d31e1507cb51348f5b1dc101d4c b/txscript/data/taproot-ref/e24851678d123d31e1507cb51348f5b1dc101d4c new file mode 100644 index 0000000000..c2ea7a9553 --- /dev/null +++ b/txscript/data/taproot-ref/e24851678d123d31e1507cb51348f5b1dc101d4c @@ -0,0 +1 @@ +{"tx": "66c9d80602dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bff00000000e4b956c2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b000200000011b1a9fd045972450000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876c7bd32e", "prevouts": ["8ef71f000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "f8d7270000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "5a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb4949da8d2968254411aebae49708200d0b19b59a844616925b107b397a8b89bee9c212f1ab0dfa1a42522b9ca3467b009d36f3b841f39cdc4da4a0520ce4fa4"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363156d98d4892d7410c1d56e89a5dac6879f3c721d967b53738c8218a78e8dbaa16aecc6ca17fc53cd4672680bbeaf62b9cce164f53144e8804363c70dd634bddc531ca70e78518003474f611c07657b0808402a053b744a80e6cf25146bdf24b"]}}, diff --git a/txscript/data/taproot-ref/e2496a88dd988d4f3ef82308c3cca33a874d45aa b/txscript/data/taproot-ref/e2496a88dd988d4f3ef82308c3cca33a874d45aa new file mode 100644 index 0000000000..ad4c0f973e --- /dev/null +++ b/txscript/data/taproot-ref/e2496a88dd988d4f3ef82308c3cca33a874d45aa @@ -0,0 +1 @@ +{"tx": "9323717b02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9f01000000a919a7ebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b380000000000b460fd01079d2e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6da000000", "prevouts": ["4a23220000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "54912800000000002251205e14f4853651bdc12bc00c912e88f09aa7f67557a17e07f4e10b78cd4d829738"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f9", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d79df6a78da0f5e7e8abe67a937df0199bc2719081f435200b4d9406e022e7e11ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045a58cdb730d5140e8751cef937639de4f5fbc77d98986906c68a7616d2fa212f87d6928db58d705af4b513465b8e8f739d066723840f3c873585fab69756481ab"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365fb6cdab2e5dc224d99eb40cef967cec823dec47795ecc7beb7ac0a6ad6c13edbb0de8cab6875867027c85350e6845db37b89c1faa2a12b075d8db116249f7bd2367bb7d11bbe7d9666c447942212a409021a53e3151df7f84d090727acdc4c9"]}}, diff --git a/txscript/data/taproot-ref/e255d1877a2010d7fcfc04ed18a7a010df14a2c0 b/txscript/data/taproot-ref/e255d1877a2010d7fcfc04ed18a7a010df14a2c0 new file mode 100644 index 0000000000..34ce67f94c --- /dev/null +++ b/txscript/data/taproot-ref/e255d1877a2010d7fcfc04ed18a7a010df14a2c0 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b4010000009fa83274dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7e00000000eee18aed04b9ab5c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acec010000", "prevouts": ["5a6440000000000017a91495eb8fe3d959e08a2cc279c1b4ede1921d14a93b87", "fdbb1e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_49", "final": true, "success": {"scriptSig": "", "witness": ["f893eeac963b1118173a285f4a8546ce8791939bb90759eda807c640c7750059bf7c9b8e63f1fba83a6fb70a5520b46d24c643ed5f198311ae039bfcaa82504982", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ede171272bd7f49dd7b6c99912e3d475f14d5b710683506840ab3ca043c5142eb876a08a8feca7a0fdff718bc790551fa8e864b5702fbb483fd91e5e775e9b3949", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/e25fb2f6402ada66247ba900b01f074eb85ba330 b/txscript/data/taproot-ref/e25fb2f6402ada66247ba900b01f074eb85ba330 new file mode 100644 index 0000000000..a7cf72d12f --- /dev/null +++ b/txscript/data/taproot-ref/e25fb2f6402ada66247ba900b01f074eb85ba330 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703e00000000c3348ab560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707c000000000d6403d70465f522000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a67f64dc44", "prevouts": ["2d431200000000002251204e94ede8d65c6640c4e6b607af4038eeb61cf5c03f43315636aeaf4bbf4b4fcd", "482b130000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2172fc08f39dec38a16acdaea6f2fb40d915f4bcb39aadc0ac96def6ea8d2de907407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6d5e8883e00432528415be42327fc5a4a6375200eeb9467b263c8c2a6402f75ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2172fc08f39dec38a16acdaea6f2fb40d915f4bcb39aadc0ac96def6ea8d2de907407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}}, diff --git a/txscript/data/taproot-ref/e279990fd5d183e1d8b4f404ff9bb849d49c365a b/txscript/data/taproot-ref/e279990fd5d183e1d8b4f404ff9bb849d49c365a new file mode 100644 index 0000000000..ab62fe30e4 --- /dev/null +++ b/txscript/data/taproot-ref/e279990fd5d183e1d8b4f404ff9bb849d49c365a @@ -0,0 +1 @@ +{"tx": "6feaa06102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf13000000008c1dfd8060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709b010000005302e8d802def79200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6bbd63d48", "prevouts": ["853382000000000017a914a8c07d8aa161ec0fed82ac1dc93d81dd0a92012687", "53ae120000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "235b212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["a89bf0e7e51d916bacac8530956b4a105bb87b458404335cff97cebc187bc4d2ff6ede95852665dbba540f70fcca1837a4dad11db9c39d91dbccce39527bef7e"]}}, diff --git a/txscript/data/taproot-ref/e2d5ca40d2c53fc997406f6b09aab24c3df0d72c b/txscript/data/taproot-ref/e2d5ca40d2c53fc997406f6b09aab24c3df0d72c new file mode 100644 index 0000000000..0957d8c81a --- /dev/null +++ b/txscript/data/taproot-ref/e2d5ca40d2c53fc997406f6b09aab24c3df0d72c @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270250100000036c4ee558bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4510100000070e54af860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ac000000007953921f012baf0200000000001600149d38710eb90e420b159c7a9263994c88e6810bc727afb653", "prevouts": ["de1d1200000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "bbba3e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "781d120000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_csv", "final": true, "success": {"scriptSig": "", "witness": ["2daba7d27b40e2d99db733e13347a769a2b8ce0ef8210b2fab4a605fa1e1ead27aee99160be27976455f20c218134cb9104f7212bb065b9828a4ea0d4be7daa5", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bdd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a37f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}, "failure": {"scriptSig": "", "witness": ["2daba7d27b40e2d99db733e13347a769a2b8ce0ef8210b2fab4a605fa1e1ead27aee99160be27976455f20c218134cb9104f7212bb065b9828a4ea0d4be7daa500", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad51", "c16caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bdd10f3c8728958fb0bcc53cdfc759a82731936f05c1a0078c53069409a334a37f37969b6a2e7d48dc77eb5766055d03d7a66c5c1ccb6908b74db43ceb06b6b0d"]}}, diff --git a/txscript/data/taproot-ref/e2eeef8ece1fd34ca3dc565f6c64e1e27ffe4394 b/txscript/data/taproot-ref/e2eeef8ece1fd34ca3dc565f6c64e1e27ffe4394 new file mode 100644 index 0000000000..333370fbe4 --- /dev/null +++ b/txscript/data/taproot-ref/e2eeef8ece1fd34ca3dc565f6c64e1e27ffe4394 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c55010000006d0e8729bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1200000000fec08d1f036360c3000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdbfe094d", "prevouts": ["a0155100000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "95f273000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sig/sighash", "final": true, "success": {"scriptSig": "", "witness": ["520193ebe9230453608bc1f99ebf3d2e834490f0d69577d94d919e3c7820d57f33e138d2fc2445113ceb9a1e2f5cacb7abb5d79a2a4bac18c85b9ceaf0c7ac9d"]}, "failure": {"scriptSig": "", "witness": ["2024f6aaf5a84cd78ddc8ba0de2c6373fdcaeebbd152bf13f0463fb733264b8b24dafd196e73e940962f9d46bc6f1ce175526454d67411550428869530397429"]}}, diff --git a/txscript/data/taproot-ref/e3196566970071a5ddde94e45545b255dbb827b6 b/txscript/data/taproot-ref/e3196566970071a5ddde94e45545b255dbb827b6 new file mode 100644 index 0000000000..b4bf4bb2a8 --- /dev/null +++ b/txscript/data/taproot-ref/e3196566970071a5ddde94e45545b255dbb827b6 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705b0000000087b009d7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfff000000004b4bd0850218eb8600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ace6000000", "prevouts": ["aa620e0000000000225120787bdd18c6671a560ba1e95ace53716ad824e1d735ffe5db246005d995daa6d5", "d04d7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_2", "success": {"scriptSig": "", "witness": ["230d1df19eff895e2599855a9bcb46b5f5e1b3b373521c264d1aed4067621e005e146c4ef4b898a3967c08d4ffceb8880330bec7acfd85f0a072d5a377c2572c01", "d5874c9986c6a813b67dfd48c9d32dccf21d139797772b545a585f8cbd64d51d007c244e10a60e13fa5097d4c8e01f0a2b325c854b5dfc824e6507780da91bd51a5cecf14d4477b219c25e6bf3dd571ee5aa236f4dabb5a653463676c0a9420bc7c7093f91bad0783b41e8df1bdfe570a39a0ec152ef4479e556a576d62392b2f831a91c45d25bb417bb5f84555aa645b725020d72ef88d06713a751c049272bfd19d8eef16d9a8fde3e5a54118cf117dd598c874113766b643874e89b9d0acabf612a5aaedb0b2ef0cebcdbbb02e0547b897f86f3c0e2d91451036381617f56563e44940284b020885863", "4cdc105ac9b3989c262000fd41f356e1594f27e622977e8ca48ce72891a0916defa02fd5dfec33efdb8b6bf698a2c508f78cd5f6dc6351b9e710753eac332b4b0314ec5f88ea0913156067223bc47bfa60317363c5378343de0a7f973d25b1c088495ba67482f004d018f86cb4d4445669cfa5442ee7e6aab33f1880a9417576df47838c5baa51dd59f18c1da304b81ca290660158c3ae8f4f2d4914b1083cb263a334dc4111a32d8631080a1a75b07131f08d763dfc4f6df987ea9ce43051e0560426535c7089468111a6ec584443daf182f395ad482e834b882f93c0df6d23fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da51646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936673ee8f995d5f053411291b7c711500e5bf5c2b8a04e2c08b17c1d99d191b288df2608c583a153244c14bce98b397ce61bb40bd7c92bdaaee99635b9843e0309f946230ab5c0bb8920790afb616352841690f577ce41be5cea97f5ed9d976756ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff094eb8ad8baddfbbaf914601b8cd3207cfce58ecbfc9a1770bf5199b01284a18ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4e36585f56a8cfa0ab578b87774720cb80d38fb01b1a38a68e031956b2913c38680106056ff0214383bda029a0df88b9ac095b1cf501a23193ed6c4499c2ce968b682063ff9a9990d791188847d9b771876ecaebfecec19c1b640ee7c9d3c4280000000000000000000000000000000000000000000000000000000000000000f42272f3861859d50669482280bcc7f9cbc8131d23d9d947d5221a85d9facfdf4fbb31b6cbe0ccdb6beb614ca7ea11bd2950d588063675e87fd759f3d3f7c4745173f5b65d4791e21af11d27f540d12b5457ac4938f2f8cc2555897fdb2f64dad5641e5cfc7011274a4dfcd053fd282c053954196a97b1f30396010b458e473affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff731ad8edd2ebf9cdfba95d48249bf196956cab254a6bd0145d9acdbe8567f9c4731bb19b42ddf13fa14055564fc231eaf1f8a88cd899fc0d480926d41e88b558ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00fd67e8d13139bc8ed0ac9ce1ee2a3e339eb470fe60d69025a5e99fd57d9f4814d5b8f9dfbb84bc2f49c0ac30da01884a7605ae3a48121e6eefa7eb9769bb57433d58ea9bd94db6658ee31d16330cdb3b3e4c2f8154f78e8e8a424710055555b675d1c6dfa7df33aef4350e36be45204dcc6066f35fa406039d9ca66f00123a31fa7659d6dfb7a506ddcd43fa2434d22830282f76613ee35c36122a2cfcfd6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff644ae27fb2131bbe69749878ca427c23f0619613aa90e17c2b22e2a76fc397966ed39df72b1b8dd446ac582ac132955f3deecfd8176c8d4f279162992b8ff954c03eb5a5e79f7003e9743036de3e4794dae5236a16bb8515ef8e25dddb0cc96600000000000000000000000000000000000000000000000000000000000000000e6dff3e4c52c8c7736c645348e898fd4f4ddbc7ff00bb73d488a1c030d37d54000000000000000000000000000000000000000000000000000000000000000084b14accb769af52b16713af4ec9846635a9c611446103d32ac9b3c6ab16c3adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61a02d51c32c7f9d4fe7f399ec07cd0f3ba353479c3c15c0a87097ff48c4caf00000000000000000000000000000000000000000000000000000000000000000ad32c00abd55cf610b89dfbfcd4f29dc4bfebcd6d66065d13b22b92f3ad0527379768a3d820e347636f13e321b2ad2c9ad5599e83e03583b2fa761f782de4404751d656e1cc9cf447660c0cb44ac96c4e63cfe9f0ee87756335259cdc4c034df321007715711022e43f721812cd9efa1d07c9b3512248a9f944cf27d024542b0000000000000000000000000000000000000000000000000000000000000000071f9b5aca7b9043b9a7a87c56c7374088a1a5ae564ab0ae71df1152621bb00f2573e89a7fc58b722b567ceba9cbdf4568d01f20059b5f0d67ce2f02a5c26d2f6f32d341ee92e5ddc5efe0ba8b7aa3dc71aef00afe9787130cd0221fd19c8b7ee2a5762b49563e18585c6edc15ab23e8a72508b05dee38b5f51d6c972631186d58395cb0e36c38f2285f1e6c301c32b78bbf79b1f4a8f3d92a6a11ffd15be7ffecc86cece7401ad4ed0bf21ab49b443d1e16320b275500e520ba1dccc99771a56048d46b8b7365efdfe5cf88d9c0ffc3fea4797d122aea191bdfce588c8554fdccef95f09527f0681a9d581e220e0bfbfcc9ccd6ecb8e28e08a1575f3dbe0731700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0b14817ff235fe92c1a6562a7b2290e5ed6d95310a63277990576053be34f1d8da9bb2465ff85d048d65d212d740ad94c8db8b0670b3c282fcca8a1637381b8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff36804768f0736ff1a653ceccc7fdafa2244398fb3528fbaf22acf3b699cc49e359d02ebf3d32d8b15334b9dbfe5523163c5b5ebb1cc7eb05bc6dbf88b98fa101ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff47dca9acdb92211f9e7dc4b057b9dce286a552926821c4f5b0fbe794a80bd20ba990edd6a246b95d2411447466b2e2ccc1589c8e153fce8f160db98ef9b2e105c360afae5455111e55f3716f0a6afb5af6605025be25d40a7048db97134ff9e545bf7d344599742b95a76595bf0a647cbfd58e3cc32b7e7ed09e55f82d7b9ccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63407cbe1bee091ee8256cb65a3009db4a9a7b0f6712b8071cd5f05bfef9d60236f916c2ebbbc5ad701920af5c7f3ec01a1176574a2b39938ef1f295b91758d015aefde4a6e712e45ce4dda43fd681c7e831aba25743f9c9fafbd98364fdb7c6b89eed55165851ca85176e686c4d82f029dd4fc961daf96804887b653ee23e34638ac68efbff837bdbb9b534401511b9069e69b7a2a12cf78d1f52a26e098cbc6c8d3a4b41955c65bb497c551e6cc1b8a57f839221d25bcf5e7acb0f997ad99ede3099588d6f1a2bd3476a897297c8bd479166d11e15b1fea505fe8427bb8fbc3a94eb37abe20387b3e0fb8637712d3bd65b08e562916a74eff73a16871fe3bc54a8010e3afc091f48296c48c7abb69ee8236f7d2bb6e655c9dba605afb329c6b32176f5e7041c438b2b05d4596d53a42c830fee890fbfbdaa66edeabc98ecb8600706dbcd1b497cdc739d3c7bf16f0b1aa967cbb59504da18175a9854139217140a43e4428e9659648f0fff6f037f9b5dbfd2da8f615910499ded9a2c50179b", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["230d1df19eff895e2599855a9bcb46b5f5e1b3b373521c264d1aed4067621e005e146c4ef4b898a3967c08d4ffceb8880330bec7acfd85f0a072d5a377c2572c01", "96e20fe4bac2808aa502ec996ff850f405e3344620235124f0902a1acfde934716ea99c8394a6555af8e80f0b496acf9c9caa8e984ac44ddca7e8bf4bab51dbf33bbae041d5b9d242d8543742c2f36053671956ef8426680654cfb81ec6d8c97eab00fccb33b5c2ffb0b39b3cdc41cdae4608616d67a0277013ea3a407a59898dd284f33fd554e83994c67ab0f9767757c0615c73a4d2e0d7115a8d27219e4f42affa2820a2f02e0055004b2dffa17feb3fd9bf3965fe2a3af275042f8095d50530a99a29eb3f45c23d14bbcb1341357918fbc612a04b661c9a923bcf77bbb95761ba5ad9f38d276b9d2", "4cdc105ac9b3989c262000fd41f356e1594f27e622977e8ca48ce72891a0916defa02fd5dfec33efdb8b6bf698a2c508f78cd5f6dc6351b9e710753eac332b4b0314ec5f88ea0913156067223bc47bfa60317363c5378343de0a7f973d25b1c088495ba67482f004d018f86cb4d4445669cfa5442ee7e6aab33f1880a9417576df47838c5baa51dd59f18c1da304b81ca290660158c3ae8f4f2d4914b1083cb263a334dc4111a32d8631080a1a75b07131f08d763dfc4f6df987ea9ce43051e0560426535c7089468111a6ec584443daf182f395ad482e834b882f93c0df6d23fd04c789370a4769e07702aaabf2e481e97af0e9353c38f4af320a201c86fed16774da51646eac69686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead547cba5587", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936673ee8f995d5f053411291b7c711500e5bf5c2b8a04e2c08b17c1d99d191b288df2608c583a153244c14bce98b397ce61bb40bd7c92bdaaee99635b9843e0309f946230ab5c0bb8920790afb616352841690f577ce41be5cea97f5ed9d976756ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff094eb8ad8baddfbbaf914601b8cd3207cfce58ecbfc9a1770bf5199b01284a18ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff4e36585f56a8cfa0ab578b87774720cb80d38fb01b1a38a68e031956b2913c38680106056ff0214383bda029a0df88b9ac095b1cf501a23193ed6c4499c2ce968b682063ff9a9990d791188847d9b771876ecaebfecec19c1b640ee7c9d3c4280000000000000000000000000000000000000000000000000000000000000000f42272f3861859d50669482280bcc7f9cbc8131d23d9d947d5221a85d9facfdf4fbb31b6cbe0ccdb6beb614ca7ea11bd2950d588063675e87fd759f3d3f7c4745173f5b65d4791e21af11d27f540d12b5457ac4938f2f8cc2555897fdb2f64dad5641e5cfc7011274a4dfcd053fd282c053954196a97b1f30396010b458e473affffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff731ad8edd2ebf9cdfba95d48249bf196956cab254a6bd0145d9acdbe8567f9c4731bb19b42ddf13fa14055564fc231eaf1f8a88cd899fc0d480926d41e88b558ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00fd67e8d13139bc8ed0ac9ce1ee2a3e339eb470fe60d69025a5e99fd57d9f4814d5b8f9dfbb84bc2f49c0ac30da01884a7605ae3a48121e6eefa7eb9769bb57433d58ea9bd94db6658ee31d16330cdb3b3e4c2f8154f78e8e8a424710055555b675d1c6dfa7df33aef4350e36be45204dcc6066f35fa406039d9ca66f00123a31fa7659d6dfb7a506ddcd43fa2434d22830282f76613ee35c36122a2cfcfd6bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff644ae27fb2131bbe69749878ca427c23f0619613aa90e17c2b22e2a76fc397966ed39df72b1b8dd446ac582ac132955f3deecfd8176c8d4f279162992b8ff954c03eb5a5e79f7003e9743036de3e4794dae5236a16bb8515ef8e25dddb0cc96600000000000000000000000000000000000000000000000000000000000000000e6dff3e4c52c8c7736c645348e898fd4f4ddbc7ff00bb73d488a1c030d37d54000000000000000000000000000000000000000000000000000000000000000084b14accb769af52b16713af4ec9846635a9c611446103d32ac9b3c6ab16c3adffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff61a02d51c32c7f9d4fe7f399ec07cd0f3ba353479c3c15c0a87097ff48c4caf00000000000000000000000000000000000000000000000000000000000000000ad32c00abd55cf610b89dfbfcd4f29dc4bfebcd6d66065d13b22b92f3ad0527379768a3d820e347636f13e321b2ad2c9ad5599e83e03583b2fa761f782de4404751d656e1cc9cf447660c0cb44ac96c4e63cfe9f0ee87756335259cdc4c034df321007715711022e43f721812cd9efa1d07c9b3512248a9f944cf27d024542b0000000000000000000000000000000000000000000000000000000000000000071f9b5aca7b9043b9a7a87c56c7374088a1a5ae564ab0ae71df1152621bb00f2573e89a7fc58b722b567ceba9cbdf4568d01f20059b5f0d67ce2f02a5c26d2f6f32d341ee92e5ddc5efe0ba8b7aa3dc71aef00afe9787130cd0221fd19c8b7ee2a5762b49563e18585c6edc15ab23e8a72508b05dee38b5f51d6c972631186d58395cb0e36c38f2285f1e6c301c32b78bbf79b1f4a8f3d92a6a11ffd15be7ffecc86cece7401ad4ed0bf21ab49b443d1e16320b275500e520ba1dccc99771a56048d46b8b7365efdfe5cf88d9c0ffc3fea4797d122aea191bdfce588c8554fdccef95f09527f0681a9d581e220e0bfbfcc9ccd6ecb8e28e08a1575f3dbe0731700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000f0b14817ff235fe92c1a6562a7b2290e5ed6d95310a63277990576053be34f1d8da9bb2465ff85d048d65d212d740ad94c8db8b0670b3c282fcca8a1637381b8ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff36804768f0736ff1a653ceccc7fdafa2244398fb3528fbaf22acf3b699cc49e359d02ebf3d32d8b15334b9dbfe5523163c5b5ebb1cc7eb05bc6dbf88b98fa101ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff47dca9acdb92211f9e7dc4b057b9dce286a552926821c4f5b0fbe794a80bd20ba990edd6a246b95d2411447466b2e2ccc1589c8e153fce8f160db98ef9b2e105c360afae5455111e55f3716f0a6afb5af6605025be25d40a7048db97134ff9e545bf7d344599742b95a76595bf0a647cbfd58e3cc32b7e7ed09e55f82d7b9ccfffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff63407cbe1bee091ee8256cb65a3009db4a9a7b0f6712b8071cd5f05bfef9d60236f916c2ebbbc5ad701920af5c7f3ec01a1176574a2b39938ef1f295b91758d015aefde4a6e712e45ce4dda43fd681c7e831aba25743f9c9fafbd98364fdb7c6b89eed55165851ca85176e686c4d82f029dd4fc961daf96804887b653ee23e34638ac68efbff837bdbb9b534401511b9069e69b7a2a12cf78d1f52a26e098cbc6c8d3a4b41955c65bb497c551e6cc1b8a57f839221d25bcf5e7acb0f997ad99ede3099588d6f1a2bd3476a897297c8bd479166d11e15b1fea505fe8427bb8fbc3a94eb37abe20387b3e0fb8637712d3bd65b08e562916a74eff73a16871fe3bc54a8010e3afc091f48296c48c7abb69ee8236f7d2bb6e655c9dba605afb329c6b32176f5e7041c438b2b05d4596d53a42c830fee890fbfbdaa66edeabc98ecb8600706dbcd1b497cdc739d3c7bf16f0b1aa967cbb59504da18175a9854139217140a43e4428e9659648f0fff6f037f9b5dbfd2da8f615910499ded9a2c50179b", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/e31f0de61f44c1cdc4d261d497cf718662ce97d4 b/txscript/data/taproot-ref/e31f0de61f44c1cdc4d261d497cf718662ce97d4 new file mode 100644 index 0000000000..a00418cdbe --- /dev/null +++ b/txscript/data/taproot-ref/e31f0de61f44c1cdc4d261d497cf718662ce97d4 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb8000000002b0429fb020c692500000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758f03a40", "prevouts": ["610d2700000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "b67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3bc00f369fc994f47536ced64d5e4f722a68c2ed1128957c24de4b5158af0ec621d9a3f11774810afeba87c9188100d693899e640a37210c96e3be6a00ac01d4"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e848df663f65f0e27b2d1567423d7462b229bee90dcacba8c1bf1c1a66aca7f6821d9a3f11774810afeba87c9188100d693899e640a37210c96e3be6a00ac01d4"]}}, diff --git a/txscript/data/taproot-ref/e3201e6cef5abb4e32884e254d83db6c48c0c98e b/txscript/data/taproot-ref/e3201e6cef5abb4e32884e254d83db6c48c0c98e new file mode 100644 index 0000000000..529582764b --- /dev/null +++ b/txscript/data/taproot-ref/e3201e6cef5abb4e32884e254d83db6c48c0c98e @@ -0,0 +1 @@ +{"tx": "ad9cd02d0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270920000000053c5d9ebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b30000000008440aebf0409af2f00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487cb000000", "prevouts": ["15f4120000000000225120571bc713e1a1d58bc4a7da330f9b17653bffa646093e5f5e3088fb48bff87491", "d2071f0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ca7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93602a88ba31ed3d41248d257786b5634ab0e5c1afbee5cd3bd44dcce92371e3b6ce4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8bfe61acb5630f372e1ed5eec342882068788aa3656bac92c2951e857c300141b065bfcb7199ff8296c5f7d41f3b2c6067d88c0a33f2878328c609d56cc191f12"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab5bafd7c1f93de46b79074fd81f9b2e5cf089f85eea866c1ed233ec2c502c77e3449c69d4dd26d8f08d0fe98a8e8c1c38138c07c2a650710c465fa6c38a97e3ce21dc20c2e8df5336572f81421322a354c6d32fb525b1159d1e49b1e9404bf5"]}}, diff --git a/txscript/data/taproot-ref/e3588db1c621c20dd15839f0a47a91d2b3a7c779 b/txscript/data/taproot-ref/e3588db1c621c20dd15839f0a47a91d2b3a7c779 new file mode 100644 index 0000000000..172bcfaca2 --- /dev/null +++ b/txscript/data/taproot-ref/e3588db1c621c20dd15839f0a47a91d2b3a7c779 @@ -0,0 +1 @@ +{"tx": "abcdc84802dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2300000000aef782f1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7f000000006a9856a70490143e0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914719f78084af863e000acd618ba76df97972236898704010000", "prevouts": ["dd33220000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "a0951e000000000022512051ad98b74eb9bb69aea595719e60a4b6c63bb1a22877115ad0df464229651088"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902fedd680285214298911720ea086f10cc79f987583addf2911375bd8024287541a1448e26a144f03af5db908309e4f116a413d39ee3dd1a900a336252fe40e2e9bc24811782ce338d9c98743a2cbccfc6c5a393dfe2140c007934a639f8ede25f164238fc43d62ccb9e2992cc8e5c5a5af01008bf2453cfbbc130db1970d6a1fb0bebbe8ae45eb100ea03981e5ee5d74d045d5e3bdcabf510442864f9de07134a74efbf408b0066c39a5fad284c2057c425ca415e15629aae9002b637a934f07668799d861f841e531c791e155f5ccd3f1258e025ad973cb5df69655c9594bef86ef29d0712609f98430c2fdae9fab3bd2d649ebc79a82ab5bb5ecc3ebcf4274ed600653ca8c41332e092844ec86b755ba6e6334aab62a5250982558c6390a64ab7aca27258b3eced2086c37bb26d4e7df0246adaef9c0323885e6fb51003ebb78d29c2f59e735e2dcd1e94a34fb6843af3cb7ed12dde16b5563e37e4132eb42522ef331a308a1025861060387966efe19efefb4da3db2cd671ddcd6f32a23cd1578b332ee8ad9b97c56a6f678badfea004399978d23da3c0fe7a137d798a7ab6bd70e20be62e6f59bc5caf1b0092264a9a24d6c0c258d7848b002c276280bc50faa2b322b95ede4a236b2d4c4e6b5954a4381559faddde157ec14303c175646791ffbb32a6899588f288704a9cd05c89a9bc833681f46b5385ceb62e18cacd8aab1cb335102540fd7775d8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b842f99ea244c665df26628cb4bbdbb47487c1eabb2046fab742bacaeedea65833cf35ac099042702f37424b07b91f05c9425e6e1d18ffa37c0a546b69cafd337007ac6d9f1365651a4d55e6df0dcb109d268cc6c386b355a4997173bc95c886"]}, "failure": {"scriptSig": "", "witness": ["4d0902173173196458f600957f1ad598578320c270d324d15ed40c256015face8b7476ff26442cbf133db0f2a3f83b369b6d68178ee9e21d95d246050dddd1019f4ec3f8cb32192ad0054bf2b3877db0479f80702afb6b562a744ac2828f0f044c3de5abc5001359b2b1b5c62e7fa13d375e33a649a8818bd4873ce23071dac29484c0fdef2475e033f7afd5b0c87e98694c9380172836aa95eb2a65b9d54d3f814d4c4691eacb4bf2b7fcc8b36f20f449940de5e882b0b8d2614a209de7fa223fd94fe5b5c562468c076563cbe25429935cd01a032345b52506a2ee2144bb9ac3c4c90511e1329fae67d842cd218cec63b175ce578ec2d8782cf71048c593c4678dfa9e66d45451d8cb74c99c94d7790b74c56417c62b651da353e15636fa48fb5b4a3e974ae1ad02a771a7f5907569988e56f483326b3a0eb8fd362a74b6c3882ce617db635ff39394dd77f1838b51fb65f6710f0a5301c9d68ebe6ca6aa6d21632de5a6e20319af1edc5bae1d290de271949eed71bfdeb089eabdebb7e778fa2863fdf0ca7c02efbdb14651f6f4bf8e1e5b566bc0e21ede4ed513ada769ce7d49b7caab3769a6752db202ba14aac07d817cfc9a67cd7a881891801e39bc59aff5d759453300f1a618e843d38db301a6dc4ac4ddf4c9a7477328dc2242f62d9e0e78694bb95e96fa5c472f4d419c967db3c466be72f2aab141a7c64dfcfe9ea56c70a154edc41a805c76607561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bfe9fe1aabc74f583e9b16d04818af537700e25fe268cab74fc74f0ecdec5c0c908709641cf32dc4788f906f7e3621a0528df09509ddf1e9982e4479aa4b5d9a6e41ed285c226ab336f92f35d989a379104ed593ec3ff802714cc8e85daf0b3be26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}}, diff --git a/txscript/data/taproot-ref/e35adac42c2fa3fac81b5b56415001d9ef213aa9 b/txscript/data/taproot-ref/e35adac42c2fa3fac81b5b56415001d9ef213aa9 new file mode 100644 index 0000000000..2f26f91837 --- /dev/null +++ b/txscript/data/taproot-ref/e35adac42c2fa3fac81b5b56415001d9ef213aa9 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706101000000587c2fe78bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c428010000007d05a6b102dfca430000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac31718742", "prevouts": ["d4c011000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "f5ed340000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "", "witness": ["3044022001d242d79af56e82790a35cabb034cb4620012c4c2b71802b81ce194276bdbc6022034a598a1f6a01f6e21201ae38684321c3f4d721d8ad9132ef00b81937ece3d0902", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "", "witness": ["30440220594c794d944be222fa18971f80be7d6f317a6a8d098db0a8588bba4de170d60f02203142f36632a7057f912086eaf61f7e22470311cf09cdc466e68125e8c7c81cb602", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/e36c31c772e822a277d29a41f45a505e97121618 b/txscript/data/taproot-ref/e36c31c772e822a277d29a41f45a505e97121618 new file mode 100644 index 0000000000..c67e0f4e25 --- /dev/null +++ b/txscript/data/taproot-ref/e36c31c772e822a277d29a41f45a505e97121618 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0102000000461e5b9c8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a5000000003a7310c4024533a8000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487eabc5253", "prevouts": ["a46675000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "4386340000000000225120997d8f010f68a117b9644ba05425738241c47f04463545c88006dd06ca2c16fc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/pk_codesep", "final": true, "success": {"scriptSig": "", "witness": ["c208d8f6cfebd1d11aa78e93527acaa8fc1cb4839be6ea139939100422019850954bd45d21b8eee6fcee480987eb2d737f581c7a5fe0040436175d0fb3528eb602", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20acab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ec9922274474f414215b9a6cbe20bd673e018c9fd10f6b8f0738c7388433633"]}, "failure": {"scriptSig": "", "witness": ["2a2d911382801beba1b7f099b56b63e3553173074cbf37af82ac6d6aa5607708ebce7224de1113b8c841aced42773c0da5d9f9ace310006f47ef08aeff9f2dfa81", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20acab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ec9922274474f414215b9a6cbe20bd673e018c9fd10f6b8f0738c7388433633"]}}, diff --git a/txscript/data/taproot-ref/e37bd80d8483f80595f8de680651a88967e6b765 b/txscript/data/taproot-ref/e37bd80d8483f80595f8de680651a88967e6b765 new file mode 100644 index 0000000000..22cba05303 --- /dev/null +++ b/txscript/data/taproot-ref/e37bd80d8483f80595f8de680651a88967e6b765 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b550000000085442cebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8301000000993071c6049f014a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c8000000", "prevouts": ["9ec324000000000017a914f5a65ca4534ef3ca5833434c0dd44a3e128f499587", "f67527000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "final": true, "success": {"scriptSig": "", "witness": ["ce4de256d45582b670a4c1239812adc50b8390a19555a28771c44c39ddbc9e48d8c51b601472ea40be046eee3e3d60fbfdb8443327969b51457f5013bb126d3701"]}, "failure": {"scriptSig": "", "witness": ["3500b4be1bee9f95f9a302c177ec0d9aacdb67032ac0b8f0a6e776e6f0f07277da13f209756779cf5c8a2faadd8d57e4d1a08889aaae5e620bb9146da2cf444e01"]}}, diff --git a/txscript/data/taproot-ref/e385046269e21e18e9615b10675db2b779814ea6 b/txscript/data/taproot-ref/e385046269e21e18e9615b10675db2b779814ea6 new file mode 100644 index 0000000000..92f30f9b23 --- /dev/null +++ b/txscript/data/taproot-ref/e385046269e21e18e9615b10675db2b779814ea6 @@ -0,0 +1 @@ +{"tx": "feb46ba5038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45901000000d71bd59f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4be010000004e14988560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a7010000008348decf04584a79000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df979722368987a5c20248", "prevouts": ["41353600000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac", "744c360000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "28650e00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "b47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936258544fd2f36a8de2d2245a51d08c72c32ca668da38c73d56f207266764d588feb712e9c877d580eafa00acbc739496391db115356dec5d41c0ac008be904b5898ae4fb28ba039f9030001532aa52d54afebb8b1d186c7283d6707334cdf0cf3"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082f8e322f728f7f2bda8f14cbbb71f9286e41438f49abc55856c1a694b654384417e736a60655dc533a38837433a3a305c9a2d5b0314030c91796018120c3e9a44"]}}, diff --git a/txscript/data/taproot-ref/e3cb84cf87cf0a5a0e394a62331f15e54cde54f5 b/txscript/data/taproot-ref/e3cb84cf87cf0a5a0e394a62331f15e54cde54f5 new file mode 100644 index 0000000000..9f7fc42812 --- /dev/null +++ b/txscript/data/taproot-ref/e3cb84cf87cf0a5a0e394a62331f15e54cde54f5 @@ -0,0 +1 @@ +{"tx": "2bba28450160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f3010000004fa5d0840202ee0c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac49000000", "prevouts": ["25880f0000000000215d1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["8b73e459b89a1d7a6b88e5dcd2cb404d25a635453075b8226871cb5f22c54414eb1214c006685a6b83d7048a59fb5a2969fedfe791fc3d4331e98c48e2a3fc3f"]}}, diff --git a/txscript/data/taproot-ref/e3e431ac9b495d6b12f584909dd0891e732ef378 b/txscript/data/taproot-ref/e3e431ac9b495d6b12f584909dd0891e732ef378 new file mode 100644 index 0000000000..c4e3471e0c --- /dev/null +++ b/txscript/data/taproot-ref/e3e431ac9b495d6b12f584909dd0891e732ef378 @@ -0,0 +1 @@ +{"tx": "e8d0e7300260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127071000000007a5fcead60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705801000000c2c69bd103096b2000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487b8556127", "prevouts": ["487a12000000000022512001f97817fc806a0f47072a55dae4866d18cdd8ca9234fe6851c34258ebf487c5", "e3b0100000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c9c968f9ba5683eb348a293824f936ba4aeab271178d077d8ae451d14797c79222d5ed5700e388fb215a3094328c95f7fb8c0abd1c53ca3ddf4f6d104c5d7ca1d6d3ab3f84dcdbc85d8f5796c1007b8de7ebec0ac109a6c154a12806951c54ff53fd942639f8cfddfa6b5c7d3e587f19a72de0735c456d43455d9227be6160d7d51cf84dec7373b20d8dff64470f8825bcf7a34b731edcfcaab5cd3527926e19048eff542861d21764d3a7d60b7055cb763b9e71d8a9b15a5f7816be2c84fa6d7957487878e06ce9b558a90e7ba780e3c6b77f6c5cca4984377806306df92586eb63ef5a88dcb01c0577640ceeda630459a2e96d36108e9a5631b935af8244919e7ebc5e420f037e17cc9851b95c9aa23cc94855e5257466ccc2e3898ecc7f59ce29ca9fc25d7826cf6af6046a773cd48f41c5ce6a759ecd21e203f4ad8087f456ef3dd527f31f92cd689a30a1bd4d577ef202e5eb071d633e809b19c6d79e76613882ab7fd9c4aade2c7af7ac0f9912b8e04241827ffb0d3d28d9a1fb964a108cc0c3cd93c2bb66ec1c3672b8866ffd3942ea203761b76b7ef45fefb49d0d1e0e0b0cc7abba5ec4f6dc96eb0ca68a09348c9aec4234c7b428a1cfb9cdc45cbe479b8c418aea752f7c7d0f59210b329e7521454940693c821ffc617b7a5373fe53042ac45c569c272c3ab27261c71876396358482a9908e08ff06912fcfce2f30a0129cd58655981a175", "837d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b2b6f8ce03da5bdf49a66edb45495bfdc91333d4a04a6613bbe19192007d3d876294a5d2648496e5016f850eddfdf01467fe69221e8567db6ec356a8117d8a748163db171dbfcbf374971659a5a65d0378eae0ee15db360ca8cf80a8c2e13046"]}, "failure": {"scriptSig": "", "witness": ["4d09022d1561713753fea5caeb9249549182ca03c636e9461d9b0323932c15ccfeee04988a3ce896f53eedfec4b9fcbd3576f92f688c7cded1d5b1c30dda1df445daac9d3fc376e6ce5b2353313d56025c9202544107727d0e30bbf04085d5582f344bd8c8dd145611dd50d0ef23dc0c0de4dcc8d11e302364f31301605471a3efd8ee421d884ae01d30aee5eb87c42356941b111fd28fa08cfd0689aa6260cf539626ed8134e3844d07c75ee0f6055b0c878595064c23ae2362343ff6c702963a2039302ec2aadb1e8d979710224c17a7129c49ba68c485b6ce7e5132be3110fb2d88fc7c3aa6b4c8f9895c6be2847c75656885e1ff6b697a4b16fb612927ccae55c3148d621fd9a029fcfa2220d0b422f23a488393d0c1be154890d3958088d2a4d8d51832488046954044b3436d950683bb980b7a9b5bafb2ef19f3441c9a342ef2522109af52e6fc59377d0a931d479adbb836283b1f615c76b645c5aac05dc73a49fae0680eee3c9c45ce5afb0d40e52395564b525c751b4eadd986720f7bcdabbc6c75a5922f00b27186554838a76a01140a4ff0831cd6f55d97989ad81cb398265042cd92f132f7b1e3a122ec0992212ea276eeaca7f43a26207fdac60c452a6583d7006821ba3edba5cd3b8d2cc568b4296fc307b7a7f24777499b25d56750be6781a18b9885087b86f560395a2bc59687a0c8a4ec41e283946738a288ce230cb956bbd51be1187575", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08209d3f278379d69ec93b9031f683f10c8ab57e2d08c050c4811cb81bd332eb9e3ff15e37d03bf407745d47da370f693bba1bd1439d95d9059575aa23ebc3ce6e3"]}}, diff --git a/txscript/data/taproot-ref/e3e86951be6edc4911741f8779b8b81f8e19669e b/txscript/data/taproot-ref/e3e86951be6edc4911741f8779b8b81f8e19669e new file mode 100644 index 0000000000..3e8d4ce2c6 --- /dev/null +++ b/txscript/data/taproot-ref/e3e86951be6edc4911741f8779b8b81f8e19669e @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc200000000f7b7a2a260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700e00000000e4710aa80255ee7400000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca0000000", "prevouts": ["07906300000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428", "db0f130000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_68", "final": true, "success": {"scriptSig": "", "witness": ["317a4a103b58c27d45baf7c2345a56d485f935e67341ff7860080d48fc6c612ab3e7403e0969f416469c26e125fe7f84f10ada2b55715b4ef00569d0aeda4dc501"]}, "failure": {"scriptSig": "", "witness": ["e9e95c398878e7c153910b7372b1eeed9e33a6a35139d9c23ab6ce95bc61c3935e0b522c7c1ebd7f1f56082fcde31fd7bb0960496b7e3b76777b4ebd1a9de57c68"]}}, diff --git a/txscript/data/taproot-ref/e3ee89b296eda3cdf6b73af88989c9879d826a5c b/txscript/data/taproot-ref/e3ee89b296eda3cdf6b73af88989c9879d826a5c new file mode 100644 index 0000000000..072fc1714a --- /dev/null +++ b/txscript/data/taproot-ref/e3ee89b296eda3cdf6b73af88989c9879d826a5c @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40502000000389ef4cfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cee01000000e0711392020eb285000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796e55e102f", "prevouts": ["67343e0000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2", "df294a00000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "compat/nocsa", "success": {"scriptSig": "", "witness": ["304502210092edd3ee6aa58f60c85c28ab19899569f84427455e953a6067d0c7be58c03a9b022024e4be6cb369ffe36d3e1a170f088e65ce99764c3d18d9676ac8be7956f78789b4", "", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}, "failure": {"scriptSig": "", "witness": ["30440220391263d7f642df701bbcdeb9507c7984c17558e293cdde994791b453888a7d910220678b14a06f1aa80274dbb0bc4ba4782adbeb0d27647d0f470d2c2ed989f52ea7b4", "01", "635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68"]}}, diff --git a/txscript/data/taproot-ref/e43e0f4dd6d04ff5cb7feb566ac7effde65eabaf b/txscript/data/taproot-ref/e43e0f4dd6d04ff5cb7feb566ac7effde65eabaf new file mode 100644 index 0000000000..108ce2c4a4 --- /dev/null +++ b/txscript/data/taproot-ref/e43e0f4dd6d04ff5cb7feb566ac7effde65eabaf @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f20100000037a88ef660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701a02000000b0c706bd0158741900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac4f8a5b2c", "prevouts": ["00a53b0000000000225120cc81d141bd4bdeba62b4e9a08040837dfb25b01ce96f0a5c25fe4ac81b625b74", "ac790e0000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c5215006313e029bf4eb62de3a0d4c6426daac8c531925f7b139c5f1723992229e67b015cd7b874bc075cd8f51008581fc4dcb4842056c029414218bc5a2feea4e1a1df3005c486d02b3b61ec29a3ead78a560e6676b99d8231bc4c29d368d9dca55106a340450f53ec45ed7b5d4071e79002f361b58580dc2466fe9efe2cba7b0bcb5b129bb00b4193c52d316e696f5ab59e4483b71c971a53f07dcdc22de9facbc3f066badcd574f0881f135a18144d897a16541570b87091f3d47cf5926be2ece685dc95e9e271f98062588b23ba81a90f823bbdbf466a963b10e9497e247904cb1cc4b54a4f8e68049e986f75d87dee8bcb611665e159271f6a697112d67275f8876920fd14d255b900753bbd34b8f2a6902ef047de948fc0884487818dbfbc4b88070c7efba56867ca33e52e8a29a2b999d37560bc034a3777da508f05cf56d69f9969990db70f9842f789c55c1324a8723cdbdca5414db759c77f160a345a6e272ab11ca860aab60327b83a22f27365645dde14434d19fa3f3addb88de5cf5defc398a1ee50f8926088b018723eee2ddd5cf5225cab49f6824c923b02829a5b163add1d099d6676a11624693b453045079aef57d1ad91f45ab9a8ced1d4cd6d759a49fd0fbdbee5378a96c8f80d5511fbe9c909c2daa187e8ccaba2231f06c88aedd700e92af11d81847a9190a579bb636255414e15fc2357a08a28d038a2d18a25e396138bf75", "f37d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a2e17bb353b396a85b82cbbb125d8a12b9798e1795cafa1972a041833c1bc52e4c9f6a777e87112c04511ef8a291d390ec48b54e57ed7e78d9086ead135876e880eaa4a5149b34d26f0437dfc3cc15f8b829f232fb4e000d97f0d76bcdb6c884"]}, "failure": {"scriptSig": "", "witness": ["4d0902e3fe184f2a584656cfe013e8b8d9bab901a7882e6c01e4909c59da879f52259175469cd16c2ae4cdbf13f2128b40b98307aacad74d63ee814384acf19f90c3889d2b3f09221a91db4510360db5e17103575797f76fd6314372944a728f5ab3c810963aaa4a98fbda7314777e340d0e0de988c76fae34af0b3e8091dc749110206fe334be37a1170de5dae87800eadc17d27d08164aae335a6c40fb101017ee2b8b3e0c0ea07e252b8c4f621814aa8d9d1a7fec447e8b2c9c4d469ab80b6d8022e2ff6495e926fa72521572643ecb402c43e5cf6e5012cc14f621bc3843d0f9568b635b8dea92cddbc30e54ca332010674402743c50d9c9b8cfa8971b00337701bdee793d48e1d32da8425aad74e23580700dbc1eaf20553468f294dfd47085c667d2cf184767e487163114c9a8959eb3d7edcc536ff000692ec48989012c6c770e5aee575ed68fe3838163abea4fc898e8c233c32003ad218b205313be65e4b0802ce610f45eb9864331d42b9db88b26e9479f911e8c13d8473514c711590b876a2efdfc3a658a6baf6bd6b7a50c95a88c70a93a9495c7fbc6aa7030ff8371ac24ec1f2da075d0bc04cca17e30b20b640962744eabbe565e03d4698e9d5af66cc2f2d7cd79ae87f03c3a42151c803ee0cd74f675935282e8982ee0a1d47163fef3157ce9bffdc6f89699563365092c7d95aa1e87242e43243f2f5e1fb1f4dc19f77cfa33bed98054b875", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364de51b04e37785a51f8e3fff41f769838c27cc7008169d15b9197fc58a3b6e093f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cfa000ce8b9790c39a5d5a4e1f475bb1ef714fb8e08d79945cb39f042227236d80eaa4a5149b34d26f0437dfc3cc15f8b829f232fb4e000d97f0d76bcdb6c884"]}}, diff --git a/txscript/data/taproot-ref/e4400ed471cfae79f01e699c1535a927cd7db111 b/txscript/data/taproot-ref/e4400ed471cfae79f01e699c1535a927cd7db111 new file mode 100644 index 0000000000..4d64df14fd --- /dev/null +++ b/txscript/data/taproot-ref/e4400ed471cfae79f01e699c1535a927cd7db111 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf9010000001645c582dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1802000000937c02e50338aea400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a62e010000", "prevouts": ["a5fd570000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5", "f4774e00000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "067d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367d67d1e8ddacf64724cc3740d78bc4f84845b0b5bea6009d6e539481d3db422385587f46271ff71c1a8d3d9e62b351dc1e7761b3de349b9de66c491fc83cbc116ed3422fe95872366e2174646ef4116c9fafb56aaaad9ae25dbd472ec9cd0fc1c48ffafb7a4cf249a6909d8fbff6ddfd3f500331ce755bc2f73b79afc0800987"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8f8ecbd50a1c4de67b0557ddaa829ed57a787bea0d02f899effe5611de93fd37f2e70a8b9232395faf03242e8d41e7097acd4f110215ae4f1c21e826dd60490c48ffafb7a4cf249a6909d8fbff6ddfd3f500331ce755bc2f73b79afc0800987"]}}, diff --git a/txscript/data/taproot-ref/e4403314230ec5266c263c14b3167d0495467abb b/txscript/data/taproot-ref/e4403314230ec5266c263c14b3167d0495467abb new file mode 100644 index 0000000000..fabb598110 --- /dev/null +++ b/txscript/data/taproot-ref/e4403314230ec5266c263c14b3167d0495467abb @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6d00000000774e8a9b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b1010000006be7d4170139141c000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8744020000", "prevouts": ["c81348000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "e5dd3700000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["f04c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045ad7df43f1383df9f0df0a1e0ce133acd14e2258cbe9a702da78bb61f4d1a9bc80eb43d08761fb76661299d0344fd2d8bfc7de5e7c6dc622156e95971f4b8396db5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1baf3800ace8e6c95c7e7a9d035d879049832cd6be429795a36cd3109eecab56cf0292c5c10d160f8e0745cc9e7b1222beed517475d04a852f0f3c02abb361f19b5b66a7e788d7f4d892aefa7b705b94e6e3402f32316550d3b683ba5e55fe37e"]}}, diff --git a/txscript/data/taproot-ref/e4476c9611f68d7aed1329b54ac787a7dc19d3c1 b/txscript/data/taproot-ref/e4476c9611f68d7aed1329b54ac787a7dc19d3c1 new file mode 100644 index 0000000000..38b613b57d --- /dev/null +++ b/txscript/data/taproot-ref/e4476c9611f68d7aed1329b54ac787a7dc19d3c1 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf9000000001cfa84b301032e4300000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac7d9fda3f", "prevouts": ["e64c4d0000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "8b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93694fd982e1b11b93dc03e5fdd59b6f9045cac66289faf2302448a1260c5bfab6e4d7dc2c55a7521ecc297ff7217b922438f95dd9c29c118a2bf5c9e2c8f8c84f32a50ac17afa49989b8cd5fe09550e31f987b9afab4d6ff7fb0ac42074cc4b38f"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cde8e58194ee2d9158b02514bf803786a3307a33652aec833c6f0052c5cf85f6d8095c4fc48dd4a937a2ab720b4c7b803df056a6d61c0b781e24263fdb2663252a50ac17afa49989b8cd5fe09550e31f987b9afab4d6ff7fb0ac42074cc4b38f"]}}, diff --git a/txscript/data/taproot-ref/e4549906b6821c9cfd2bdad13fcedc9f2ce44c8f b/txscript/data/taproot-ref/e4549906b6821c9cfd2bdad13fcedc9f2ce44c8f new file mode 100644 index 0000000000..b978cb6f03 --- /dev/null +++ b/txscript/data/taproot-ref/e4549906b6821c9cfd2bdad13fcedc9f2ce44c8f @@ -0,0 +1 @@ +{"tx": "01000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46e01000000aca912a00381e13900000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac82010000", "prevouts": ["a8e93b000000000017a91437a5c76a04bb604ad99785877003310ab74c7e2b87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "165c142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["80b334005ae104106759e292d674d3c28f902644005e258094b870c5c188475a4d383eebf6d0674734689ed679337c48c7e9e5b3670c4a14848905637136d946", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/e46150bc653c31e407e6428aa1a6ebf50bf84aea b/txscript/data/taproot-ref/e46150bc653c31e407e6428aa1a6ebf50bf84aea new file mode 100644 index 0000000000..e9050e74a6 --- /dev/null +++ b/txscript/data/taproot-ref/e46150bc653c31e407e6428aa1a6ebf50bf84aea @@ -0,0 +1 @@ +{"tx": "f66b5ce4038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c465000000005be9d6eedceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc300000000394663ffdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c08020000000e1b4af6047d16af000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a62067231f", "prevouts": ["3e80410000000000225120783dfb3310d474c767ef9239befe26bff1665135289516e5417abb1737338f98", "172323000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "8d5d4c000000000017a9141757f4686f091b43a46fa47e92d07c87fc7a205e87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_3", "success": {"scriptSig": "", "witness": ["837a68045efd193f0eb98ca50d563125d43cff74e3c8c6993f43e21667b07e47cc0c5f992a02db219e1e3c03868efd69627b67b71a0f123ce6455bc5a05df79d01", "456e0e62f9289faf12d8e11aee380df2533753c3927854b1e1321c9ff057df6551384b8ae66513bc066eb9275264d9cf0a4d2d1b1575b79ef2cb29159b7b8a0491af222b67bffda905921df2f95a3c286ee992a87d57b4d447f8ee8a7e67969ad490d8f4847c62e3ae5e0e10b6131bec9dcbaf49427c4defa69f0e12795793e55f0ae087d32680c944c36b3a1a7833d518f5e70149b9c9527a0d", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05c76cefb21a62104116911d8e8b2e45a18b2b96bc39350390a3dc53de4d7433000000000000000000000000000000000000000000000000000000000000000063d1162584884dbb484b96d1ed4ce4a0512e9716da39c30918608fb6f95bb2c400000000000000000000000000000000000000000000000000000000000000007272812a8889423cb2003a913d32f365c6d35c633594956d5a9cc90b17ca754ac922743679a5a6af278245238d6037175a7256ad00ffbf996a910ea41a7610511fd163d9c8018e5282f21786763a4c52ced4820abfeb403b0b1d7fa7bde30aa139f8ac87943424ef90f5364034d8a7a26fc904027381798e6672c9d1936f41d70000000000000000000000000000000000000000000000000000000000000000105d0ae378ff1b6f0fa719acd7567a35003274abc0d03dfa689f7e95b6df185cabef40480030bfa6b896c61fc6ab80d156e2156d028bac1f1f329a98ee46486d723ba82ec9188bab38613f5640a54fe3d3e7ed44ecc46fb288a21d330e6567a9f8b0768f17293d87e4ae3a232d31846bee1650f75b19c2a43b567cde0e7cfedbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015fc8b4e5af59d5edc2e4cf6be0818a13031d25cb9314ed8998d05c9cf9daf778327c59652234f3b0f296f92c0ebab6d2ef46ce54921b25a9f796c10c849f301ea03ca4f88fb6350e9feab730d33f323a2394c1f5dfc7b9e461a2eaa76eeb264ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed71b9a2736a87d63a4ca2ffa70dec04b8d71a924a48cafbc763ba6e1b0451a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93816283a2c90c6d10a38061255b862e01577a0aa3eedaa665d8d20a43f1f74f828ac67de897d9bd1366af382045d9cb5797e4e6bc32c8b9ec3c9f5409dfb3fc20060d514f2b33562929bff48ddb4def570ab6a586533f3c1e41e334d3bd092c2ee6a87b947424e4cae845652366f0676c63850638a8d7ca63c4488ff4877408e608068cbc48255ea77105456f8969fb5dd36568aa4bc87035ee2cae1d30427acf63a0460e3135d3368beb2008f7310ad4143e8e5f370736a23446973f3f334c3ca209e6ec3c56f25e2dabfbf555248f02682ab46318b9bbf2da715a12a2b2bf9999705e46af7c358b8ba60d80b4508a8c9729639522f6f63c83c2a34606c8b094d807c24f0d2b08c9b8232bda7b6e3087fd0203bf7f39947db5d25a3f8e6f75246f0d608eaad49446ff6b5b1b9926953d3d883734e979f05038afe526de750ba72fc5d944722c8e9426ab6d57685ee28c2fe526dca1ecba98eea3cbd008295bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000052e3496d6cbc35d102a166e3843d452442a07a0a4683064f6ae0bc1615cd43da11ddab6ebb387dfd7492ec96dbed8283eba9ad068a1aea18c111af22641b5067cf80a56e18218d8ac219d18a141ee4d9fc814d478139d60a5c964e9d08a884073eb6a973dc07fe6fa35dc99d39bacabfd586f0b9398b3c1fd154587b5c3b48f60000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6930f03d4ec7b261c172e4c2de02c038f1f230c95d821038c10fae578ee20b27814b8f6e76637ecaa9724e004e9b7ecff1ccb2a630f559c053260a9b7f06768d20aabc63cfba2703eefc30c4b61979f6687ac7e66014a751fd7ac847906810b54ab005d2ab3d381b1bde5ff1c4d0503824cce1d347ab7ba95e12c9812c2c7bd771eb468ebe3c1ff4b22f9ae8563970f7c9208d2a57c3bd5fd8fe188feb76ef7b483b54318337e0bbe16b685dc49cf5d4dba35cd4fa202c7740447b41dd988cece00bb2acebcf172fa7e5c0535296e8daa79167a7f2aae6bd54c3f86b0caf53785baa30d0f3a9b6354c0e96a550a4a59b52b66ac51c6518574b6a2d37aaf5fa77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00749959ccb6776715d0a7f8e958f9ad8de11205e38827aae38a8700cbd6ffd9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d1f0778be7e7bf68fbc278adc13515356a7886375ae569c6d601af68aa4f07608d91ded0e41e98d5b81f401676e1ef23541a78ef2e9f460861d5716b482f8f00000000000000000000000000000000000000000000000000000000000000003c3e3a26d225dc69e41910d4af8ca5636f765bdbf9ab00c5be8e82099baa8caa206f85846ef59ecaf3883eff6a46b3dcd02ac966bfb5bc3deec6e032efa01933ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000005e9fc283d0edbbda40a787148720e8c002fd283713cac16a390569aedd312910f6b4d7afde0ef1ad599e16d159c21c3a5749d510b625adf48d88503247e62ea9", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["837a68045efd193f0eb98ca50d563125d43cff74e3c8c6993f43e21667b07e47cc0c5f992a02db219e1e3c03868efd69627b67b71a0f123ce6455bc5a05df79d01", "de9d790e2b77dfd852c61699aec17f9c4f439cfaaeb4b321b377976ef72f80b123427abe65e164a8c136982d21905c11034db1f08f74707ded1d5c3e4e3d78e5b18ac37c0aeccf67f600e669909fe39ea8e197f99f9d177e0acd3a0e50311f9c0eba4c6ec701c39ef6ba2f9b2389512b150a7df1d08acbaf360a344c89ebda9fa611d18b9a0776e902271bff0f7010b6e9cf80c422a6a0641e", "7520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e205163676e567cba5788686ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead6ead587cba5987", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff05c76cefb21a62104116911d8e8b2e45a18b2b96bc39350390a3dc53de4d7433000000000000000000000000000000000000000000000000000000000000000063d1162584884dbb484b96d1ed4ce4a0512e9716da39c30918608fb6f95bb2c400000000000000000000000000000000000000000000000000000000000000007272812a8889423cb2003a913d32f365c6d35c633594956d5a9cc90b17ca754ac922743679a5a6af278245238d6037175a7256ad00ffbf996a910ea41a7610511fd163d9c8018e5282f21786763a4c52ced4820abfeb403b0b1d7fa7bde30aa139f8ac87943424ef90f5364034d8a7a26fc904027381798e6672c9d1936f41d70000000000000000000000000000000000000000000000000000000000000000105d0ae378ff1b6f0fa719acd7567a35003274abc0d03dfa689f7e95b6df185cabef40480030bfa6b896c61fc6ab80d156e2156d028bac1f1f329a98ee46486d723ba82ec9188bab38613f5640a54fe3d3e7ed44ecc46fb288a21d330e6567a9f8b0768f17293d87e4ae3a232d31846bee1650f75b19c2a43b567cde0e7cfedbffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000015fc8b4e5af59d5edc2e4cf6be0818a13031d25cb9314ed8998d05c9cf9daf778327c59652234f3b0f296f92c0ebab6d2ef46ce54921b25a9f796c10c849f301ea03ca4f88fb6350e9feab730d33f323a2394c1f5dfc7b9e461a2eaa76eeb264ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffed71b9a2736a87d63a4ca2ffa70dec04b8d71a924a48cafbc763ba6e1b0451a5ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff93816283a2c90c6d10a38061255b862e01577a0aa3eedaa665d8d20a43f1f74f828ac67de897d9bd1366af382045d9cb5797e4e6bc32c8b9ec3c9f5409dfb3fc20060d514f2b33562929bff48ddb4def570ab6a586533f3c1e41e334d3bd092c2ee6a87b947424e4cae845652366f0676c63850638a8d7ca63c4488ff4877408e608068cbc48255ea77105456f8969fb5dd36568aa4bc87035ee2cae1d30427acf63a0460e3135d3368beb2008f7310ad4143e8e5f370736a23446973f3f334c3ca209e6ec3c56f25e2dabfbf555248f02682ab46318b9bbf2da715a12a2b2bf9999705e46af7c358b8ba60d80b4508a8c9729639522f6f63c83c2a34606c8b094d807c24f0d2b08c9b8232bda7b6e3087fd0203bf7f39947db5d25a3f8e6f75246f0d608eaad49446ff6b5b1b9926953d3d883734e979f05038afe526de750ba72fc5d944722c8e9426ab6d57685ee28c2fe526dca1ecba98eea3cbd008295bffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff000000000000000000000000000000000000000000000000000000000000000052e3496d6cbc35d102a166e3843d452442a07a0a4683064f6ae0bc1615cd43da11ddab6ebb387dfd7492ec96dbed8283eba9ad068a1aea18c111af22641b5067cf80a56e18218d8ac219d18a141ee4d9fc814d478139d60a5c964e9d08a884073eb6a973dc07fe6fa35dc99d39bacabfd586f0b9398b3c1fd154587b5c3b48f60000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff6930f03d4ec7b261c172e4c2de02c038f1f230c95d821038c10fae578ee20b27814b8f6e76637ecaa9724e004e9b7ecff1ccb2a630f559c053260a9b7f06768d20aabc63cfba2703eefc30c4b61979f6687ac7e66014a751fd7ac847906810b54ab005d2ab3d381b1bde5ff1c4d0503824cce1d347ab7ba95e12c9812c2c7bd771eb468ebe3c1ff4b22f9ae8563970f7c9208d2a57c3bd5fd8fe188feb76ef7b483b54318337e0bbe16b685dc49cf5d4dba35cd4fa202c7740447b41dd988cece00bb2acebcf172fa7e5c0535296e8daa79167a7f2aae6bd54c3f86b0caf53785baa30d0f3a9b6354c0e96a550a4a59b52b66ac51c6518574b6a2d37aaf5fa77ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00749959ccb6776715d0a7f8e958f9ad8de11205e38827aae38a8700cbd6ffd9ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e4d1f0778be7e7bf68fbc278adc13515356a7886375ae569c6d601af68aa4f07608d91ded0e41e98d5b81f401676e1ef23541a78ef2e9f460861d5716b482f8f00000000000000000000000000000000000000000000000000000000000000003c3e3a26d225dc69e41910d4af8ca5636f765bdbf9ab00c5be8e82099baa8caa206f85846ef59ecaf3883eff6a46b3dcd02ac966bfb5bc3deec6e032efa01933ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff00000000000000000000000000000000000000000000000000000000000000005e9fc283d0edbbda40a787148720e8c002fd283713cac16a390569aedd312910f6b4d7afde0ef1ad599e16d159c21c3a5749d510b625adf48d88503247e62ea9", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/e4a1dbfb8711c43befec064b8fd396058b0c54af b/txscript/data/taproot-ref/e4a1dbfb8711c43befec064b8fd396058b0c54af new file mode 100644 index 0000000000..5c1cbd7396 --- /dev/null +++ b/txscript/data/taproot-ref/e4a1dbfb8711c43befec064b8fd396058b0c54af @@ -0,0 +1 @@ +{"tx": "17f2605402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc60100000098f115be60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270230100000050702df8027ffe3200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48752b40928", "prevouts": ["5c6025000000000022512040649a1fb199947d796ba41a749770af0c9b8b8f2ffad14d369b18f56746cbd7", "9a19100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082c63b209b29a3611ab6267155884a7f894b498570c9db6a86ba3046458c9f77af637f7085334bd6ace67733ad5f759fad65febfe656f63b2b30abaed1d2ea29dc9de97a2505c9a0de734aa1a6c773f3979bd21cdf34ebf80e6ce3c625c087f57a"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936832e78f2a5d9b0c4680fc7dba3a6d5673c26e47a2a412d10c5fe178db4951a94073db8fdd32dfd70cc3c0b801d057b12e5f9f3471dc2e8803f572b477b94c5e2cd8777bf679e716871b092f46e3a69645e6fd098b2f58cf3078cdf1926d6f261"]}}, diff --git a/txscript/data/taproot-ref/e4ac1ef7380b8d2111b6763169a1743b27f8990e b/txscript/data/taproot-ref/e4ac1ef7380b8d2111b6763169a1743b27f8990e new file mode 100644 index 0000000000..ab2fd7eb9e --- /dev/null +++ b/txscript/data/taproot-ref/e4ac1ef7380b8d2111b6763169a1743b27f8990e @@ -0,0 +1 @@ +{"tx": "ce0f492d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be2010000003249bdd560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c501000000dac634860214d03200000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88aca6414d55", "prevouts": ["f6a9240000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78", "23d00f00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "217d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e4f67f6e69cf51b25bdfcad90ab02b519823ccb2f4612df68d1a9a4df99984c88f488f9b2dd04714e2920653c1afab7d010d81355bbe53edbfcaebea15ff1da48"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe391bfd09479964276dd59b1d58dc35d2e52175d5fee5e0ea28559bd14655b056da9396880b08a11a17662bac4a7b382e749572eea29fa5ac5793c70e2d18ea5bb5ed745f7425de3873ba37c460c85acd2f4f50490d9d3680fc958bb85bfda6f488f9b2dd04714e2920653c1afab7d010d81355bbe53edbfcaebea15ff1da48"]}}, diff --git a/txscript/data/taproot-ref/e4be0b4404267bdc3cff4674612fa0aafae17da8 b/txscript/data/taproot-ref/e4be0b4404267bdc3cff4674612fa0aafae17da8 new file mode 100644 index 0000000000..204997173c --- /dev/null +++ b/txscript/data/taproot-ref/e4be0b4404267bdc3cff4674612fa0aafae17da8 @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf9000000005afac8d501efd4070000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963b2ee04f", "prevouts": ["82df230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_61", "final": true, "success": {"scriptSig": "", "witness": ["1da26216c5fa21de293a98697b7f3e6e24dd98e9b97695c15c1739edde291ec24824714e58e4e9f472cb3672c9bb1c6f83d4ae985e1a389fc55f599a575691bb02"]}, "failure": {"scriptSig": "", "witness": ["4b78771f6b75db27ee3b71eb66c82f7ce11a2f6207a3899336db332f998a208ee25739e1e5eacccdf2e17e07da72c1e52bd0af03b979f7a670f99099a53358f461"]}}, diff --git a/txscript/data/taproot-ref/e4ed5b23d5de1068cbbde995bd4acee64e91aa7e b/txscript/data/taproot-ref/e4ed5b23d5de1068cbbde995bd4acee64e91aa7e new file mode 100644 index 0000000000..b4e23d30d5 --- /dev/null +++ b/txscript/data/taproot-ref/e4ed5b23d5de1068cbbde995bd4acee64e91aa7e @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705100000000fbf40f81dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be10100000028107fd004ce692f000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688aceb524132", "prevouts": ["aafc0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "43d42100000000002255202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["bf12b3ce410208e8d45324bc449e14020662d67526263b8e81eb7a746fe6fcf0a151b2f58e36ed3b57ed3d1aee1ecdfd43cb0fce5e33bf3a750433f4d93c9dcb"]}}, diff --git a/txscript/data/taproot-ref/e4f857e19db4cfd96f2d5054dbf40b5a9e492dff b/txscript/data/taproot-ref/e4f857e19db4cfd96f2d5054dbf40b5a9e492dff new file mode 100644 index 0000000000..8d0636f2d9 --- /dev/null +++ b/txscript/data/taproot-ref/e4f857e19db4cfd96f2d5054dbf40b5a9e492dff @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf08010000004772068e03027a5f000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d2020000", "prevouts": ["3a8162000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f668", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361b9ac4799763e2e351da63ecca5a6348aa482c3eadd4509c967c8b6a34c76e4075ca33d7e1e5f2997f74dd285eec8a0e5cba5080c4482d5b595e9662ee4b93be0a1b6150087d660153f154c744da46b7319b80aea4f8e08f23015968f3b1d87a"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d512c1673aa1d348e5f2f8444d57c2e384a9e542f3652a57ab10bce8213eb35faa5e1f31af440bd9528b56a4b582a327979fd28cb44b9e62075e623987b4c0f8e3992fb5cf2427ede6d61c8a74b8487764d962b41d4db4b67b9e943a724e86dc0ff"]}}, diff --git a/txscript/data/taproot-ref/e4f9951077eb874d4585b5156eb27d51d2efbfd3 b/txscript/data/taproot-ref/e4f9951077eb874d4585b5156eb27d51d2efbfd3 new file mode 100644 index 0000000000..c09296d485 --- /dev/null +++ b/txscript/data/taproot-ref/e4f9951077eb874d4585b5156eb27d51d2efbfd3 @@ -0,0 +1 @@ +{"tx": "a045fd37028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c414010000002c805d92bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5f01000000eb722fc402346c99000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689873ec82e5d", "prevouts": ["2b8b380000000000225120d8440763d2116f9dee5377791731b3635bb44d7a42fb2b8a8507b8fff76ccab7", "dddb620000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "e4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f4fd06ba2b74fab4c367f8e8e0519d3d9be3851343b71a963fa32cdfd438e05528a09ca0f6d73d82e88e284042e116dab9fe2cbfafc110f6c0fbe5b2788367c646ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b24d4fab40ea135233ddc8c9f724889f007818f7ffad5749db3376d8fcf405e18faf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}}, diff --git a/txscript/data/taproot-ref/e50744f139df817035a18b49f300ba44cb0343d3 b/txscript/data/taproot-ref/e50744f139df817035a18b49f300ba44cb0343d3 new file mode 100644 index 0000000000..ef751cf6d9 --- /dev/null +++ b/txscript/data/taproot-ref/e50744f139df817035a18b49f300ba44cb0343d3 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b090200000035a3cbd1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7b00000000bba5cbc704e85a47000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796f3703632", "prevouts": ["490f2800000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "e0772100000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100a3a5a8f8f08e76ef265172a8b0ec8b18f87ebb9279f084af614732c0d539310e022049c0cee6779ea3a42951fdcc769c32767d87fcf292acdba013654415e7a41d16812102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "483045022100f34f93c9a62849fd11a5918c863019d5b8c04806102eeb1cb8cb2e6f0a57529602206b166fbf74e0fbdef8baffce8dfa2ba6efc8cfb5d9ee54622b28dc1ce98a7f5b812102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/e50e205a1d18fcdba7e8e5fcee9033cc4707f9c7 b/txscript/data/taproot-ref/e50e205a1d18fcdba7e8e5fcee9033cc4707f9c7 new file mode 100644 index 0000000000..a059c5f487 --- /dev/null +++ b/txscript/data/taproot-ref/e50e205a1d18fcdba7e8e5fcee9033cc4707f9c7 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9e010000004e8d62c98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48e00000000c08d65870131f23500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac01adfd1e", "prevouts": ["0c3422000000000022512054aab8bc8194c133af7274183a7f3060903412eb7cc1a08d3d6a62e380c86e5e", "6c6838000000000022512014ab2ce168ab85feead37e4eac5416d9445f157495b1751829a16d631c43d5c4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93602e89707d8973173175c84fc9b7dd7d6cd1c0e0172d2891381d5a5bf4c8c8577"]}, "failure": {"scriptSig": "", "witness": ["6aa6616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e52cfe3453de9b1d75444df456949cb75040b8b6 b/txscript/data/taproot-ref/e52cfe3453de9b1d75444df456949cb75040b8b6 new file mode 100644 index 0000000000..1743137d5a --- /dev/null +++ b/txscript/data/taproot-ref/e52cfe3453de9b1d75444df456949cb75040b8b6 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5c0100000075641680bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8a0000000017e471b5dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf300000000ac1340c303f3d21d01000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79694c84f5d", "prevouts": ["ad2d7f0000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b", "7d0e7e0000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6", "9da622000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "4a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936528a77605e4b8cd768848df1e60fd0b649927a7f2710fbb5502fd93c97ebecd446c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9faeebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac749e2a390543356cdb3691ba8d54627dfb45f7f1132e94c1a4e909f84f1614c2"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082696e0a39b8006d5c38246735bc900624bc412e796f8d634640137370e1472505749e2a390543356cdb3691ba8d54627dfb45f7f1132e94c1a4e909f84f1614c2"]}}, diff --git a/txscript/data/taproot-ref/e531badf585946f2d8e4ca711ad08bfab23b255d b/txscript/data/taproot-ref/e531badf585946f2d8e4ca711ad08bfab23b255d new file mode 100644 index 0000000000..c15c3d7302 --- /dev/null +++ b/txscript/data/taproot-ref/e531badf585946f2d8e4ca711ad08bfab23b255d @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5201000000c07a9ac860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703c01000000d90833cb03dc493500000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc90186125", "prevouts": ["5c76260000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "80e51000000000002200201c085867a8a36cc3b43fbed118fb6a6a2b3372fa424ec2d949bf17badd0269e3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_keypath", "final": true, "success": {"scriptSig": "", "witness": ["0e48a332b41c140e93e9e231b83c39b2237a87e263e3c1c5078ddfe3d6bff461d042642b49d4aacb0cc8a62eeeeda6c962df57b73f8e90a63ff031d35ea02abd"]}, "failure": {"scriptSig": "", "witness": ["0e48a332b41c140e93e9e231b83c39b2237a87e263e3c1c5078ddfe3d6bff461d042642b49d4aacb0cc8a62eeeeda6c962df57b73f8e90a63ff031d35ea02abd00"]}}, diff --git a/txscript/data/taproot-ref/e556fbc1cbc098965abc9f19de4e699a65701b97 b/txscript/data/taproot-ref/e556fbc1cbc098965abc9f19de4e699a65701b97 new file mode 100644 index 0000000000..e85b7098ee --- /dev/null +++ b/txscript/data/taproot-ref/e556fbc1cbc098965abc9f19de4e699a65701b97 @@ -0,0 +1 @@ +{"tx": "d505974903dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7d010000009a3a5dc3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b710000000071f6369760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f501000000c7d508ab0473fc5900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487b6000000", "prevouts": ["a02e250000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "b3ca250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d95a110000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_2d", "final": true, "success": {"scriptSig": "", "witness": ["4057160f8c6426979d7439e60ba99759a3935003a8db5b7aca3a5c86a40293a9e05787c2f446b47de87682322df79a42e7b2c8c24b4f265fef710f0f7a68931701", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["12ca3b46c2bc154a147b7ee71a8b5ea042b5deea224b0c72564a5d75a7b0ea6471512e0e7254671afda5d4a3f90e153eec8074d30706e1c8a6cdff43e353abd92d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/e5a06372794c8a0907ebcab73767cf918aac39aa b/txscript/data/taproot-ref/e5a06372794c8a0907ebcab73767cf918aac39aa new file mode 100644 index 0000000000..ed2643e923 --- /dev/null +++ b/txscript/data/taproot-ref/e5a06372794c8a0907ebcab73767cf918aac39aa @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708b000000003bc37beebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8401000000aa486e00015ea55a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1e098721", "prevouts": ["322111000000000017a91448274ba0d73ec00ce63e7922c9d87a48fd0c670f87", "d110710000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "be7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa48ad50d9ddf0b427aa1cd7e89a01799c6e7ad3b5475e2761c9fcf711fad5d46d911ebac8c921821ba74d98d656401ec4b56b2bfe8f672693a939227457b8b1a2"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d1deaf9b354b7bba504b77e6156643d72237d1ca0dc157d7f2482ea02765e9a648ad50d9ddf0b427aa1cd7e89a01799c6e7ad3b5475e2761c9fcf711fad5d46d911ebac8c921821ba74d98d656401ec4b56b2bfe8f672693a939227457b8b1a2"]}}, diff --git a/txscript/data/taproot-ref/e5c2adb3e9fbf1cd914078ec2a63b5eb9a6e3abe b/txscript/data/taproot-ref/e5c2adb3e9fbf1cd914078ec2a63b5eb9a6e3abe new file mode 100644 index 0000000000..df10ac65b5 --- /dev/null +++ b/txscript/data/taproot-ref/e5c2adb3e9fbf1cd914078ec2a63b5eb9a6e3abe @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c438000000001ea2ccb8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf180200000014118e3a013b6381000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748747a2fb1d", "prevouts": ["0dfa40000000000017a914f0ed99a28545ab2ceacee60b5537a9e5c34fcd5187", "67f27700000000002251202b6311c61a2a508a144ec510c52a71fff5d62c4fa86296d42faefa4fd619b162"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368a6d05bce1350142da4c8baa3641d62f98981f8d5be82f6cd048a62bad6f0283"]}, "failure": {"scriptSig": "", "witness": ["6a49616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e5d4d4aeaf98b811a93af7c9329c6daf9589e991 b/txscript/data/taproot-ref/e5d4d4aeaf98b811a93af7c9329c6daf9589e991 new file mode 100644 index 0000000000..7c0abaa311 --- /dev/null +++ b/txscript/data/taproot-ref/e5d4d4aeaf98b811a93af7c9329c6daf9589e991 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce00100000057728689dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb2010000003f48ebf8048c75b400000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac751fe021", "prevouts": ["016e5600000000002251201ca29abe36def88662b96aa36425514db4706e1e50a53467368d6fc22d19b945", "13e05f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "327d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363674d83ec545aed04205f6c8011bc6d879deeac8bfcd4272e2d7b511be5f791a25d31a4d328a06fbd663a9de03f4f743ae6731d946a7b64875ecbfa9fe5ecb492e4cd18b5d1ec472eec5a95c6c9d67ba3848eb933b0b41a8c6d3176a27b07997"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac0f29a0308f7dd1d25542f1a27a19e78219e8b2987efd922e316e5388ecd586b0246b7a5461d23b2ebf642f7df88e05c9d62107f66abf7b5f94d7753ce57b53620e954adb3b90d8c3597d54022d70f5af7b761a66be618c54dd56feea2be872"]}}, diff --git a/txscript/data/taproot-ref/e5d756b155e51281410e56562a664673b0c34fcd b/txscript/data/taproot-ref/e5d756b155e51281410e56562a664673b0c34fcd new file mode 100644 index 0000000000..4880599579 --- /dev/null +++ b/txscript/data/taproot-ref/e5d756b155e51281410e56562a664673b0c34fcd @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc301000000859e9063bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdc01000000d82019748bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c431000000003461614d047e0708010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e9103047", "prevouts": ["f007760000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "93d9610000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "f14b320000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "d27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0829947182c2cf442266d627de6569afbd254a849da3e2d989b935a76fec010797d33479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a9b801fc18e2353a9cd4de337bb33433fbe6225e21bb8b5572b0acaa50d11b7f3"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e800def9a487cc21401761fbf52dc8ab7b9916cdeb8a2e13a665b6447e5fe6b3009b801fc18e2353a9cd4de337bb33433fbe6225e21bb8b5572b0acaa50d11b7f3"]}}, diff --git a/txscript/data/taproot-ref/e60ac2a186190f5f41d0f98adb9107b436491c32 b/txscript/data/taproot-ref/e60ac2a186190f5f41d0f98adb9107b436491c32 new file mode 100644 index 0000000000..a1b8163959 --- /dev/null +++ b/txscript/data/taproot-ref/e60ac2a186190f5f41d0f98adb9107b436491c32 @@ -0,0 +1 @@ +{"tx": "91f42efc01dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c84000000001f7a65f003c7cb5a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914719f78084af863e000acd618ba76df97972236898726000000", "prevouts": ["c47a5c000000000017a914525ca05541c81a105639c2efb802eaf5596cfe0187"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "21521f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["69223f2e1a925dc7c5c485a09fd8f6062cc12da6766059d7d491ee86c66f018695f6f914479e07f220c6674e287fde9eabb44ee085615328446a1b09e8b1c1c2", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/e617e275740cca2c1002733c0b62505410149814 b/txscript/data/taproot-ref/e617e275740cca2c1002733c0b62505410149814 new file mode 100644 index 0000000000..0030e4c90c --- /dev/null +++ b/txscript/data/taproot-ref/e617e275740cca2c1002733c0b62505410149814 @@ -0,0 +1 @@ +{"tx": "ebb0671102dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b780000000086a4f4c3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfb01000000f9046ad00132320800000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac41935239", "prevouts": ["9e3b2000000000002251208ee514ac0f4f8afe6d51e826a65d73d8e6a6dbdc4949f433ee9013cc9ac16e8b", "fe3c270000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_83", "success": {"scriptSig": "", "witness": ["9adaa546032c13f5bd7fb396b9ed84af3a7459c050647a6330658e9fa44eb7cf97f1a3312d52caafa27d6a9e543d4aa3a3f183eb05d8fd4926126463f51458f482", "50e1b68863e2eeede36d96ad7ac37856d5df41c5724361e24ace24ce217b92c38dacfc12b9f6775dfe75b4a01ecbf3ca273e9b00a3a0091ca9e623337d4d69e596340911bc0df754c4c74472ddab49a8afac1c5c0d6f0e98320ec7baf2983a6d2ea246f654219f544de38eb16e4d4bdb05797a36d25c4147476b26578d7dffa6d6cc75232672843ac1f553401c29ca3967dfbb52ec4d2a4feea31c8af17b2a"]}, "failure": {"scriptSig": "", "witness": ["d09d0fe5ac5750cb15453c48244c0722aa5e012d919be95d80ee37b2ea9ce3523f23f78af73aa23bdba4a706cff89810c83b7a828936e1629b318ea544d682d282", "5017eed178b867748f37569b5f1d1079e76759c5d72c3505330886d9daf00a76e65ec760926e487dd2cbb63e11aacc8a49c816345da54d66ef3bdb4a5a27a939325a5ae593e6ccae"]}}, diff --git a/txscript/data/taproot-ref/e62e88a5e5a9d90dbb6072f7ccea09b105b0f310 b/txscript/data/taproot-ref/e62e88a5e5a9d90dbb6072f7ccea09b105b0f310 new file mode 100644 index 0000000000..66bcb9fbba --- /dev/null +++ b/txscript/data/taproot-ref/e62e88a5e5a9d90dbb6072f7ccea09b105b0f310 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d4010000004448e7b2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7e0100000089d641a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a0000000083a09fad0354caca000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acfa030000", "prevouts": ["5e70100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8e686e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d1414e00000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_86", "final": true, "success": {"scriptSig": "", "witness": ["5990cb2c8e00ea2a16a0f151d44f74ddc66438063a923331cfec5656dc2da5d14f77f8a988d29a40a97a327fb21ef0155a095c22a2d48f49d849b08bcf5622ae81"]}, "failure": {"scriptSig": "", "witness": ["bf447c48889e60b479e4f2c98a44a3bf4acbcf12d088f7a9af60a69414fa11d5e6b86a6d98bb1cfbe666a197f7ef485d3d6282e5ddee02f0427e63019bf51ac786"]}}, diff --git a/txscript/data/taproot-ref/e638e75f42344b0c3f6564246955fb5d040cf293 b/txscript/data/taproot-ref/e638e75f42344b0c3f6564246955fb5d040cf293 new file mode 100644 index 0000000000..ea92f61c14 --- /dev/null +++ b/txscript/data/taproot-ref/e638e75f42344b0c3f6564246955fb5d040cf293 @@ -0,0 +1 @@ +{"tx": "f912fae802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0902000000bd0732c4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5c01000000dba8b4d3014d37660000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966d030000", "prevouts": ["836c7c00000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5", "b5d1240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090206502592ab6fd45f774824457c83bfd05fd40c14b81295dd6d2197ae6f00b9a56d866a90a563d4594718017f360e7186af48c8b3ca16b8a002797b9080c8eaf0fab6ef8dfaf1a4259ff13023f68c3179e8bc6d43d0d48efdffce8a74b302304c2532e3ccaedae996197ee7f3693ec1fbd860de8b01c61fc469e8dd2bc640e9ffbcb326bff9d12debbd5d42aaf5a2f795512403658d1f5fbd07bd6a9269587e096a5c4977f8a3118da868fc99b729de21968d4a7d7840b549b8ff218931aa84ceee49867eb5c6e1f4ac83eb3dbc566549bbf103d6eac6cc1241e290c2a459181ad3874a4824146cb1f094111e6a892eb13cae6bdcb9e09c7818c97ad0075acf7638bd05cb925a4589f880847e2ce1bc517c2a6286b9a29241500205351295812941fd601d008c2cb57c9872109dc3053a024d57dd6faefce1eeaf0efb4416b0ec73430e00fc48a22902a5864c6267f79a6eac2352bb28b90581acd912cfacfc9e34112938a48fc12be480ae906bfe0a4c1583c53b29fd71b011f858e86522ab06d5dd207cedc2b4926c053fd8af96e7c27d1feb49121d4954dce1648baa3e6c7ae5202f7cdb0ee4290616ba0f470cd408a30d2d308f3ec99d6bbc0b58ea6daa796b5d18fbe4f00f4f9a5408870995913af92f29d840343b6490ed446d73321ceae02dfd51990c320423485dfe63ecf24725e058fc88a87240cf0e7b12a993d1b2f9fd57d09d6dbb1fca75ed", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ca8c0e626ecf2ef1fe50d0678891192825218ee00caccaeebba0271af988572e94cc415af9f84001a6feea45646803cad285186914838c4558edfc97d3166e78fd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}, "failure": {"scriptSig": "", "witness": ["4d0902ce681a3d9f79d82a9dabaeb3ef080757585c84d247986ecb06f13e02e67f974a7d91974ee5914d5328e7e9c903d86f0ecb68283249842c7788c9600a3a4ef7c54635d8e15dd32dc4223da1daeac48d03f8981349fb0d45034043faaba67107ea1be7d9b079f9b6001a54266eac89b0948bcbe1623851671e097ac8a6846d406d65612039be94223bd9b3c1e42e823218c5a109a7cb4f92bbbc5be64b96dc2d072e2edea859bced484922dc5c26471781e6ce9172b896a403102edad052ae0759a7d69e93fe9ab6dc294fbfd417cb916646a5ffb1a5510a2526dd103507682b338b65075ae94e4176232468381ba55c0651697284072ce527b3705cfc6719cd1bc74e2c4a16d687d8ef8b1eff9e0a672d14c55038f1aa3909e8d3a40ab602221f99b87fb7e2da8b044b42bd76b372877f00f64a95e0e8308a983f961df92446b7630de6f41a76746ce2a20c3cc61b539feedc9a2364ed5ce16fd213cf48c734efb79ca0899f04a759377be0f1d3b806b291c568040cc5e4d87827ced3c3acb773e1c017cb4db77633d39f219e524a43fddf8646450fce092297117c946f9e111a631d2a475ed5a2bb03be1f89c98418d91aa40d144e0c8f775b9a291e941061449852feb2ebea67aca3c9c8ec72afc67497a171a82d535db50df6a5698240df7047e7a753357b7ae29c00151979c67e1ddacc58d6e021a63be146aaa4cc29b9f1330ab7068b9fa473887561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb43866c9dc2005c39fbfa40f99a1086b922c913a672fc19646edbf7ab3e480e00f86475c33b310e45b92339559838140b9b3f3d62b1cf111e129ddf9f566de62eb71d4983925d18ba40c8655020b616e094614baaa1bc1b56f6416d7610eedc4a1"]}}, diff --git a/txscript/data/taproot-ref/e649d79b9010e5f76ed8c6e317e55e0e91802bac b/txscript/data/taproot-ref/e649d79b9010e5f76ed8c6e317e55e0e91802bac new file mode 100644 index 0000000000..4fad8780ed --- /dev/null +++ b/txscript/data/taproot-ref/e649d79b9010e5f76ed8c6e317e55e0e91802bac @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d01000000a146999d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40b00000000f9d200c960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706c00000000e4a24ae5038de26200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79693145c58", "prevouts": ["a3d2230000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30", "ba3a3200000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "f60b0f00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "417d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936571460ba76479f128232c1e7f3cb97430b20436d33add020c19a42e032587e00ebfb5abead622ee588f8a14df4b864e849bfb1ffa426a7f0fc441a7ea7f9f3e8819e00a9246c8c145cff8a91ff4546d478c6c8e3d7b4e3f7e61102a4388494af"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d0254c28ec270bdf41d4337856af66ad3dc8a43a5d3e633735369ec57cf2fec9da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e53f01d9cbc4ce44e53bf46e342c1ac713c14ac9ff1cc3e88a31c5570fba253bd819e00a9246c8c145cff8a91ff4546d478c6c8e3d7b4e3f7e61102a4388494af"]}}, diff --git a/txscript/data/taproot-ref/e660a993ca6c73039fade4ba3407920ada89923e b/txscript/data/taproot-ref/e660a993ca6c73039fade4ba3407920ada89923e new file mode 100644 index 0000000000..34a4eb1dfd --- /dev/null +++ b/txscript/data/taproot-ref/e660a993ca6c73039fade4ba3407920ada89923e @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf57000000008fef5e0960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a200000000630d7c750370197c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac27da9e2b", "prevouts": ["6d146f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "35ba0f0000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_8", "final": true, "success": {"scriptSig": "", "witness": ["565200a441bd8b33543b7d269c983d8205f3e3529da82e6dbe97079bebcd43624d9edd44919ada73cbbd16a552dc8f7abcc78f8d83fec5c5cafa9aaebb358a4183"]}, "failure": {"scriptSig": "", "witness": ["d5c7c919526b7c3c680b3761493b2bc4d2d01c6531647abee47966cf899369e4fdd074ffc209aa0742deb56a238fa0ee9e1c478bb1ce610149ac95a6a1583c5808"]}}, diff --git a/txscript/data/taproot-ref/e66bd9898efc98f464bdb5ece0b4f62d602dc737 b/txscript/data/taproot-ref/e66bd9898efc98f464bdb5ece0b4f62d602dc737 new file mode 100644 index 0000000000..333c18cd63 --- /dev/null +++ b/txscript/data/taproot-ref/e66bd9898efc98f464bdb5ece0b4f62d602dc737 @@ -0,0 +1 @@ +{"tx": "10ea334502bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8b00000000fb9e01a48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41402000000a58a699c023885b700000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487eb020000", "prevouts": ["761e7c000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "7e153d000000000017a914b202aa31930f9cb7b85a632f41f1539f30714abf87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "225d202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["f21859a748d58a120b039827bc9f62d58b657c5eba5d59c9910395a6444373d32e691c8d6c874e8a48c7c3accb5eb868c1dcb19634bd3bb0153d21d09d4693e1"]}}, diff --git a/txscript/data/taproot-ref/e677ad001a80f4218fcb1f38a8705f1d1caeb999 b/txscript/data/taproot-ref/e677ad001a80f4218fcb1f38a8705f1d1caeb999 new file mode 100644 index 0000000000..f868238522 --- /dev/null +++ b/txscript/data/taproot-ref/e677ad001a80f4218fcb1f38a8705f1d1caeb999 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c100000000e823d301dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc801000000d7978e97044cfd5d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac13000000", "prevouts": ["01ee380000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65", "2cfe260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6adf", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082345e83ad245d963f373c443dd6457dec3808a4f865920e34bbc543e7d04d4c3d1c315aec02adde316e700f87e7c47f474d1ec7cdd06b196ee567d81a15967a13360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f7f06e83b8f8d2d2dd50faf041bd8485749e4d90a35c5351976a06488b0663fe15b534b99635107bf366447ce9661d5eae557250694ef66e76c31b44d1abe134360497a554a17affee0221519da82623f7958d9c28014b232926f5323d6c78d1"]}}, diff --git a/txscript/data/taproot-ref/e68c741fb9f3bd4beb774a6295165f0719b15942 b/txscript/data/taproot-ref/e68c741fb9f3bd4beb774a6295165f0719b15942 new file mode 100644 index 0000000000..e39ac27422 --- /dev/null +++ b/txscript/data/taproot-ref/e68c741fb9f3bd4beb774a6295165f0719b15942 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8700000000f0211ceebcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5d000000001eb9ae8703257e82000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac66000000", "prevouts": ["c04021000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "9df262000000000022512027ab4b673389804c5c881c6b67bb0bc00b1e4ec28a98fe3352d53ecc50b40912"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "5c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ae78f6229172221ba8b4bfb3a8449e63620c22f298b6d0c8a103fdc8dcdae51974e87bfb4d3d415907d7a3196832fc57be4f6d746253c89a46e8e4c968740366e8f45a3ac55dff4b7d62b0bc42204f13e92c55212ff162d480a58edc7717abc8"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b3bb59441821a6815989813e9c3e139ed3a2bb96c5c0b1bed0297fe997254dd09e517178a4498250bd09ce9aecd8afa5f6f049a9750e0fcac48ec3d6edc1b53ae8f45a3ac55dff4b7d62b0bc42204f13e92c55212ff162d480a58edc7717abc8"]}}, diff --git a/txscript/data/taproot-ref/e69ec7f55ad3c08cfcb37946cda5c9e8bd2f23d4 b/txscript/data/taproot-ref/e69ec7f55ad3c08cfcb37946cda5c9e8bd2f23d4 new file mode 100644 index 0000000000..5edf2583a1 --- /dev/null +++ b/txscript/data/taproot-ref/e69ec7f55ad3c08cfcb37946cda5c9e8bd2f23d4 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9400000000c44b13eadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0401000000a6db52abdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c54010000002c43129203bb4104010000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6b86cdd5a", "prevouts": ["b93560000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0", "27ca5d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "17f34800000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "a77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e389e677eaf5eeea89a70f01c0aa3bc14cf3320f4b6dd8cc61f33138af3398b5b11a008161139ac7a92b00665158d25501a881aeebdfdbf881ee45b85e0726c11"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363e9eb096ec4c0e60b6c49349abcbb61376af9764a0a95f04ae72fcd7b6082681146d6305f54208d13896b102f4aea30badeaee99896cb007ba6ff00553e24c3b2915fd873a4966f8e9b4a3b328eef3933245a1c852c287990317c3760d8289da96773453f0744a158be0509abdec64f05b1db7ccf03251d8359952271b442a24"]}}, diff --git a/txscript/data/taproot-ref/e69f704fabb54c278ef86ba0a840cc8b462fd273 b/txscript/data/taproot-ref/e69f704fabb54c278ef86ba0a840cc8b462fd273 new file mode 100644 index 0000000000..563d76c926 --- /dev/null +++ b/txscript/data/taproot-ref/e69f704fabb54c278ef86ba0a840cc8b462fd273 @@ -0,0 +1 @@ +{"tx": "b3c1472202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf2000000000576e88bbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd70000000004c7aada0154af38000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374876209cf31", "prevouts": ["efcf20000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "a7286400000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000084", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e17bfbf8111851fd9ae24a1858afec5c4de6caf1cc26a2e2b06a933db436efe54e71f92e1336a687ea436697fbd19181210e765b944dc821397d885c783bf2f2425e521f6248097fdc64ff5a0a6cea9e07e7c649e93dab8ac6058acbfaf1ad70aa"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367e85fd122cb37c54650db3c457c4ccc1d826b9d67b5660e25842c64e9724a27a7bfbf8111851fd9ae24a1858afec5c4de6caf1cc26a2e2b06a933db436efe54e71f92e1336a687ea436697fbd19181210e765b944dc821397d885c783bf2f2425e521f6248097fdc64ff5a0a6cea9e07e7c649e93dab8ac6058acbfaf1ad70aa"]}}, diff --git a/txscript/data/taproot-ref/e6a0539a6bf9730e9f7197aac29cee83936137c2 b/txscript/data/taproot-ref/e6a0539a6bf9730e9f7197aac29cee83936137c2 new file mode 100644 index 0000000000..76a87f023a --- /dev/null +++ b/txscript/data/taproot-ref/e6a0539a6bf9730e9f7197aac29cee83936137c2 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c580000000089646dbadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc10000000056ed9eb1035d779e000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc30010000", "prevouts": ["bfdd4a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "a25e550000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["ea", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045538b2525e5ad3e6ab2346b1907a9f51d3650fdbb6911031be2b995911891caa483976a7e8bc20bfa4c53f64ff2df47d867849c8cbf6df51014735817968d498535c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0df322cf06423056ff4efb147ba4330d28398a4f05a11ad98b1121aa54f60b594336f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}}, diff --git a/txscript/data/taproot-ref/e6beac0076a3f98639e16833588cb1f7c3630b56 b/txscript/data/taproot-ref/e6beac0076a3f98639e16833588cb1f7c3630b56 new file mode 100644 index 0000000000..4e3e25e593 --- /dev/null +++ b/txscript/data/taproot-ref/e6beac0076a3f98639e16833588cb1f7c3630b56 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb001000000037ef9808bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48201000000c798b1410490418700000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd3010000", "prevouts": ["2c324c0000000000225120bf14cc6d2f64add112964063c7917cbfbca584b2015bb2b877e08d516634d692", "d1193d000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936df6796774709e20f3de4e580719925f05298bdadc26b77e803df81f5078f2094"]}, "failure": {"scriptSig": "", "witness": ["6aa7616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e6c4139fc79b0036b50c35d40646356790b47698 b/txscript/data/taproot-ref/e6c4139fc79b0036b50c35d40646356790b47698 new file mode 100644 index 0000000000..41c15f0f22 --- /dev/null +++ b/txscript/data/taproot-ref/e6c4139fc79b0036b50c35d40646356790b47698 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4201000000b563db75dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc301000000f098e3a68bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c467010000003d1d4d040391f7a8000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72db95c2a", "prevouts": ["4e8e4900000000001657142540f27e90740933c99d4f17ab2dfc6c82951cfb", "f6a2260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f1053b0000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_2e", "final": true, "success": {"scriptSig": "", "witness": ["7538d0a63a0ef5288628e67c8f42c8f3aed351a24b2ae3dde09043d648ebda2cafbef1a4e404938bf8deb99cf4db150a48fd3c3c7b50d250044bc263899916d2"]}, "failure": {"scriptSig": "", "witness": ["5e50c2f2c4e0e081fa7e758f6a7f4d4f01748c4a1282ea2100199c782ed2ce61ca2bddc98aea44730eb62977d87dcf02abe52760bd1d26507533ffb2e9d2675c2e"]}}, diff --git a/txscript/data/taproot-ref/e6d6a1ae86f60f1e63f309397a0008e6d4943d50 b/txscript/data/taproot-ref/e6d6a1ae86f60f1e63f309397a0008e6d4943d50 new file mode 100644 index 0000000000..d1e7b42215 --- /dev/null +++ b/txscript/data/taproot-ref/e6d6a1ae86f60f1e63f309397a0008e6d4943d50 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a000000000a3952b5460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fd010000003122469d0459d21c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374877bbe1c4b", "prevouts": ["18610f0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f", "4db40f0000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000ea", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936688d2e46a192ad60a20fdb5c472affa9c3d9be48c29791f78ee3d204a0eef9e805d194d5538f9d0578f97aaac3520494006fe8ed5ea4118540907b045326452835c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5170b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720f322cf06423056ff4efb147ba4330d28398a4f05a11ad98b1121aa54f60b594336f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}}, diff --git a/txscript/data/taproot-ref/e6f3612a73d29882780cefe3d036f68100cf0c7b b/txscript/data/taproot-ref/e6f3612a73d29882780cefe3d036f68100cf0c7b new file mode 100644 index 0000000000..9eb06cd818 --- /dev/null +++ b/txscript/data/taproot-ref/e6f3612a73d29882780cefe3d036f68100cf0c7b @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4100000000055c6482dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfa00000000f46499b502d29a9d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8767d58622", "prevouts": ["f8df48000000000017a9144370350f30aa8f875e3d2a13be81f25f19bf1a6387", "14b556000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "165b142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["d116ed280c0713e398d54bc4383551f2cd0480ed987ce39caccad5a683a97d66049edee4bff1ee72c96dd4951968ef034acb58d2bd50aefa3edd27f16bfd0e2e", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/e721205c821d1cfd009e603052b5cee6c677c52a b/txscript/data/taproot-ref/e721205c821d1cfd009e603052b5cee6c677c52a new file mode 100644 index 0000000000..7077166792 --- /dev/null +++ b/txscript/data/taproot-ref/e721205c821d1cfd009e603052b5cee6c677c52a @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709b000000007f3424108bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4af010000004517a8d7048319420000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875f000000", "prevouts": ["e4820e0000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "3867350000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d84c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93602817a41c51ca033292e6ad0865adf1b315ae27488bc31b0f8fb3dd6e91881b7d7b73fe79aa50781a03db77b9e22252058e372f5a0275feae864cfaf4c2a217ec513aca5799d408eee0c275015e54cf6f255f9c56741048ad8672ad33d4825d8e26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}, "failure": {"scriptSig": "", "witness": ["4c52d8", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f7f0d1fb1b0bb9d70ab8433d07e43e66e6dea85179fd9a6b3a0e9d7d243e07dec513aca5799d408eee0c275015e54cf6f255f9c56741048ad8672ad33d4825d8e26db4ec4cf8c6a12d3bfb33a6f8c1ee971c26c5be04413f1d9dccd7296a9839"]}}, diff --git a/txscript/data/taproot-ref/e72d5da834d577e08d8919888da3491b1cfc2395 b/txscript/data/taproot-ref/e72d5da834d577e08d8919888da3491b1cfc2395 new file mode 100644 index 0000000000..ffdf00058d --- /dev/null +++ b/txscript/data/taproot-ref/e72d5da834d577e08d8919888da3491b1cfc2395 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dd00000000e98bdfcfbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8a010000001e3b31c4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf10000000006ffb29ef043b09130100000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd0000000", "prevouts": ["f1ac0e000000000017a914ff6a0b1cf86e786bc6de2387f1927f71fd08cd0c87", "cda7830000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c", "20568200000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "165d142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["1d11ff9e6594593cbb3db3d706e5329836b53d7b1047452a5869d53e1e3c549c28e59d7a782b615eb017decb90ffe64a5567a5514f624bc899c426cfa3c229c3"]}}, diff --git a/txscript/data/taproot-ref/e73715f248773b481cfeb2552aceaf18e4b03797 b/txscript/data/taproot-ref/e73715f248773b481cfeb2552aceaf18e4b03797 new file mode 100644 index 0000000000..613544fc23 --- /dev/null +++ b/txscript/data/taproot-ref/e73715f248773b481cfeb2552aceaf18e4b03797 @@ -0,0 +1 @@ +{"tx": "3c688b8f028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c501000000794a30f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c30100000090cacde503a0306f00000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a61e4ba658", "prevouts": ["83f8390000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8c143700000000002357212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c1", "final": true, "success": {"scriptSig": "", "witness": ["817c1b70322061ce0acc5c14edc6eca45ef09e96a86c84bfe84de4e15e71c3a112e6dec6bd65f6f58cf770798e63aa14936fbd2a1854a777163081c081d972e502", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["d97bad7ba6d489e059b694aaf49587c68e53e5c0c5dfab57043ed92cdbd8f4daec5ed88fa517a3a2384d1bd7d7394a15d8d3b7847a9ff1af17b25304f16525a9c1", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/e7865be06886b6e888fd9d883d55c5faee586ef4 b/txscript/data/taproot-ref/e7865be06886b6e888fd9d883d55c5faee586ef4 new file mode 100644 index 0000000000..881d0394e6 --- /dev/null +++ b/txscript/data/taproot-ref/e7865be06886b6e888fd9d883d55c5faee586ef4 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1901000000f2b706a8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb701000000d5414634042e88c0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c6010000", "prevouts": ["2f50740000000000225120554d9dd7197117aaa4d7426c37fed7dc5f4b29ff7dce4879497bcc4232903b0f", "994d4e000000000017a914a68ade9e67dbb5e8acf044461cfd5bd8dcf592c387"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1652142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["77f72fcb63f4b3ee909677bb7ca7023720d1d4ed165ce3976dd8898c9b2dc24d781d3439d220f0403fa0dabc6eed1007f1e2332502d61e6af736e38ef9587c08"]}}, diff --git a/txscript/data/taproot-ref/e7a375809c225d5450a212abb59a2046d1b5e007 b/txscript/data/taproot-ref/e7a375809c225d5450a212abb59a2046d1b5e007 new file mode 100644 index 0000000000..901ae0b293 --- /dev/null +++ b/txscript/data/taproot-ref/e7a375809c225d5450a212abb59a2046d1b5e007 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfeb0100000087f4e5fe8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41101000000bf8e4fc9046e05b1000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47878e020000", "prevouts": ["9ae07700000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "0c683b000000000021581f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["8429a4229b24b38dc77d9f95f72ca2d0ed52126309f69eefee92d5f8f8a8a1b7a6f8cc54c9b2918e742352ad35d793ef376e6c30766c9de854f951d1cd88406e"]}}, diff --git a/txscript/data/taproot-ref/e7c4905ac16a9774e7e810abf68b112d641b2d9e b/txscript/data/taproot-ref/e7c4905ac16a9774e7e810abf68b112d641b2d9e new file mode 100644 index 0000000000..7824d04dc1 --- /dev/null +++ b/txscript/data/taproot-ref/e7c4905ac16a9774e7e810abf68b112d641b2d9e @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7a0000000049367eecdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb401000000a94652fe02ebd56900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3c355049", "prevouts": ["00244800000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "b705240000000000215b1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["f85913f1b9c9175497e63ff3fe4937cd61dbdc806165848d02e5a64f871aedd45b5d1212cfb7047204ada9057a4be48c2c6f5ce87a05578bda43662f72114f97", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/e7c5c79c85fb153f7749dd5dcfa97ac1401ef95c b/txscript/data/taproot-ref/e7c5c79c85fb153f7749dd5dcfa97ac1401ef95c new file mode 100644 index 0000000000..2ed71e9f24 --- /dev/null +++ b/txscript/data/taproot-ref/e7c5c79c85fb153f7749dd5dcfa97ac1401ef95c @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a4010000001d6355fcdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2a00000000547be58f03d0fb9600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac1baad02a", "prevouts": ["dd48400000000000225120cc4d42e69b853b2a0a5827098521167109822d5a10f2066982dd9b410753f660", "8391580000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "d67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eb1986d7e8e27273be987a3f59c249d736830c7b6f9b487df38f4ee68bd2c5d06630d95c26588949f1b3ae4e4e429080b434b995fa18047406852c727cd9e6feb"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93630ca117f3a3f5d0edabc733225eb4a624a098c8f44ec26e7a92d0c8239372396e4fd5de156dec52418d0df8cecdd3495838e4d1d1b80598a34f381ec5024e2c9bd0211bc754da142cb3564162304068e34e33074851a6380a45a2a3191e3f102"]}}, diff --git a/txscript/data/taproot-ref/e7ccede981bb4c65fa47e7fa310a9348a7109ba3 b/txscript/data/taproot-ref/e7ccede981bb4c65fa47e7fa310a9348a7109ba3 new file mode 100644 index 0000000000..adbe09588c --- /dev/null +++ b/txscript/data/taproot-ref/e7ccede981bb4c65fa47e7fa310a9348a7109ba3 @@ -0,0 +1 @@ +{"tx": "c3f06660028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47b010000007a1ec183dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6001000000e09642fe0241047a00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000", "prevouts": ["c7ac340000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "04b3470000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "cf7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b956c939d6163a1ef6c18d735cf5e1060a6cae99cf52377ddb1bcdce2fbed5e246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdd6c4167c25132c432c9175336dcf34ec1853eafcfbd891c58e0cd045b8bc4542"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93634aefa031e9db0c34453688b34a5619e3290706aa35ba0709fdb07560fb296d4d2b7053bd8f6b5ad2f12d7ae765b8b6e1c341259e3dfbe95167fdee949bfcc9ffe03d403be23d34fe95cd8ea927043998b4b921fc49b039e78905cbd289b8eab"]}}, diff --git a/txscript/data/taproot-ref/e7d9419f6cc1411629e9a09076e350aef3f0adbb b/txscript/data/taproot-ref/e7d9419f6cc1411629e9a09076e350aef3f0adbb new file mode 100644 index 0000000000..13de4acbb6 --- /dev/null +++ b/txscript/data/taproot-ref/e7d9419f6cc1411629e9a09076e350aef3f0adbb @@ -0,0 +1 @@ +{"tx": "7d81ada40260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ab00000000a5db64b8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf970000000016aebcde0482f29200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79663000000", "prevouts": ["bef7110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bca582000000000021521f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["e852cfaa079c741f4515ed79da14c225d7b03a58e519cbec8eed2b9f348fb7af8f04275ce86156ce1f7cf928a482c97ed207ab38aea691780a93b26f97168cf0", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/e7e9f1bdab686670c7fd4b590aaad6feacbbeb73 b/txscript/data/taproot-ref/e7e9f1bdab686670c7fd4b590aaad6feacbbeb73 new file mode 100644 index 0000000000..b9135ef0d2 --- /dev/null +++ b/txscript/data/taproot-ref/e7e9f1bdab686670c7fd4b590aaad6feacbbeb73 @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a20100000089eab0dd0233813f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acf0030000", "prevouts": ["dee3410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_60", "final": true, "success": {"scriptSig": "", "witness": ["cc8487fc4d8489c3dd52ad2f090001b7531935033f3d5e5702c8f840635cdcae03686ec27b39d28f069c6861935fa5bd2518d0e3df19d4105f6b77d4e494bdfe01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["71a2cf08522bdd941fe5e66a848714af5060294311b0d9c3bbc39dd03a5765ad1b79a43471ccb50dbb47d3ed01f0968cf742e61b3a11c9b2b83017f404fe961b60", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/e7fc7fe2e56e39aff52a6c1a3f3ddb20c48651d6 b/txscript/data/taproot-ref/e7fc7fe2e56e39aff52a6c1a3f3ddb20c48651d6 new file mode 100644 index 0000000000..99c421fc10 --- /dev/null +++ b/txscript/data/taproot-ref/e7fc7fe2e56e39aff52a6c1a3f3ddb20c48651d6 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1701000000c7fc959a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704c010000007eceaec901a7a40e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fce500232a", "prevouts": ["49ba1e00000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d", "f00011000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902d159c28a2f7b7ff761fcae8ee32cc830457aa38ec63388ab160de97533fb61586998360b9068725ea0665cd56dec1773293b984e638653e276ddb940a478231daf72f21632fd7e3ecd6fab2fc91e3817f81a6e65d8de141b20738b1168f2ecabf718fa6df5c065202725a56079ab76c2de31bfb539ad3e5006bdad61c04edae70e1c9715723adbb198c0b9b0528e68f6b2478092674b4f635a3a6b11b2b24f6762e0a22da1c1936c58ab72bdf067e8cc1bffdb55ab5a4160ccf39ca08ac52535cc8b7997a427f0f676a71268c4953a83a8d72f34eb10e3b6d2b8be8b5dbe409fa1dfa47c3e1d8ac614c2ce9397e33b844964671bbe69760709ac194afeaac4779b8c6d1e07121045a0cb6a829ae823a7b2756cd9384dfd0b898b6d9a01bcd9b3b9f022362e16b19858b6afc09abe929c7b5b674a8b13c8b8624ccb75d438a45a08551dff47086baf3a7dc8af4640cce2264d5a9c447f818ee7e36570e45447dd067c137eead04f8aba641a58402e8b18718a962700445f17b42639c70878131802797d440e4a396d57275ede06a4eb2245b269e9086d0b43613df07375ae7657dcc45db6dde0fbd8bc41aec2cf731b0ad4dce8187e46484006e574b6d34deeac077d46127626f5b09c056074bfe2a5e570ff58d12405fe1a5f694c47c466e5072758c6dff00857afdeac0c548c446c93c51b2b59bc49e5071ff577b70c7954028fba7e7943a8946f2d75e5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a9f8156eed7fd3bb2b4cab14b5333356fb81c736bb205a27ebd75cfc9ceba70098751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d53d2e072fd8e8376d3a54b2bea1bfbfff1298aece70c0bc2934c8eaacc3044fe58f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}, "failure": {"scriptSig": "", "witness": ["4d0902237352b9799019813fe8fc82812659e28cffa3b4df7cd8b99140004fec11d26c8e6e3833370bb3d9d63c081c137c716e45a436056e672483d0a8fa3acf300a2d520d38a64fc6a0839c79ad79bb1fe02acd8deef2047e5f41b3daf06c4d9daef4997ab4f23daee4a2244bf63c5ff7ad1cb54c95a6f0c6456b0ceed3760fe8564a72cb79ac32ffb51a15d338a703af6066eb0fe07fd15a2be1e5f18d1895741202eb959b350229aa3de61a60fa4a2e6461e355246bb7158b8b45b41dde12b31155447efbd8542350e99c06dab30b94cb6dae1bd5c4ef8b96ca8611ac964a664e9b5e094ec92a0862361cf119f6f217c3ce712a7fbc8d45fa5e59dd68728e5281e5d5bc3fde591ae5a01fd49af46a9fd6a1fcb3fd93d5f8012fa3aa28d423f76e258222be10a3ce87176d4572f09ecb44aef2f72a3967e5f13d22177691b935f62760a67f3b23746a5a5fb7eabdb926419bf3ab3762b5830c1059bd1507f46a884864a2b9976af3dc0d6e6815f626e882f6804f8f768465ffafa0c1611ba9b3cfc9c284012c958e417862c016a07d08ee4cdc544b4de37bcc6680eec107f2d392fe6fa35ab6a3053fc4f3e454206e63c98f0c0f26e62bea46a9fb5afe549c07abef16f4a67130ee2b6eeed9eff4f8a040f0ab60395ddef39da8b8d19681b23bb85c4d740b491eb3fbb4c42deee0e752c7932c40c49e3632872230df3e50d8a6d80f44c5273ff329aa34197561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bc95516ff73e0ba0ea1936e2d89c1346855b35984437390d0b37500c31b5ae455e7270ac6e52de2effa1ad4f1d7cc04618f1a83be30b0454843cf6016e9cc3658f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}}, diff --git a/txscript/data/taproot-ref/e81dc94c8743dc71b11667a65c76c5ef0e8eaef8 b/txscript/data/taproot-ref/e81dc94c8743dc71b11667a65c76c5ef0e8eaef8 new file mode 100644 index 0000000000..05927b2714 --- /dev/null +++ b/txscript/data/taproot-ref/e81dc94c8743dc71b11667a65c76c5ef0e8eaef8 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3e000000004eecdbfd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40400000000dc744fac8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48801000000149ea6b603d7969a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88aca8a50227", "prevouts": ["6f9121000000000022512080d15096ed03a913dd2615bb22b23502eb7f2ed72305dfdc851835561a0e6974", "11d139000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "5094410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/pushmaxlimit", "final": true, "success": {"scriptSig": "", "witness": ["ecbbe5a58e56fc80617b50f40e8af25c687c94d5a2f495fffe6052e8208eb884d77559ab0dcb0ff20e20604f09ba63bf7be3d6725ab88d81795bda5303d11684", "4d0802dd367a9ac4f69febe46eba96d8c2f0d894999cc95e11a3752f36b909723af9f18cf4da7602cad914034fc5a537f98ae658c499b0e1a228ffbf969c46c3176961d54d84a1e2bdac62384ad86b6b5fd22eb64007deeca4fac2a25f07d438b1d447af3f70ca476afa81b6177521a83ea0450893aadf4505236a5b604f34fe34d751eab3b606e442eb193fd3d88d123519908efb861979119251072e986c11be6899d2d17715c7aaedadc57d69207a4f43d2a934692540443561bb859596cdfc04e9784923c242e3233844eb48630dd5b0cfff6c9d821a3033f4660bd7b2a31f7ced1a4f0718ade4eafc82a54228ab0fb5b64e023b4f9fdb2e38f89cba2a9d8a4e89b5db6d51a1e0b90b643ae4120bd39145491ac7483b352e26b402af0e66fbd8532ef898890412938f3059ea3b3d00d32a6226790fd3b9a95c7cb09d8d2e535d8a42583ea3560691294e26ef26ba32b8396c624e883c1a9a2485617957f02545c097b3408ecac495c02cf770443c2c2280db60e9b9b953dc45368187e72f0b4cb67623dbff3a8b4025e1d92dc3ad63e85aadcde076c7cbfb49eb1c18effeb2434c02e32dac73e5a2ecb59ea357e16d6e74a361cfe5b8025687a73eb0afff120e1f25598d2d554a88b5b5b155b74148a54eb796b1226bd3c23ff46107d96ca2e57878eded8c8d7bdd002c8136b19738e91b283fea5873f25b609135b6c2bea838b726f4245374034f667520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936103cadbcaf2fa5df6e479334a11b958e5957fa2effaa354c06c9313f5686f6aa838550afd43b5c0ac0246c83f68665bd17c01b14cd3e86e9325c0425666bb85e05597bbc76f9d2c64c37772f9ff7280274d9ed9557cc805ea3025c75bcdf8ac78dc251797150d329b8e820d63bb5d58a12f58566ad0e9367e2ceaf5315e4d4628d4486556d0140df24dd8957661ed20e0acff298adf92d4035aba275ac667a2f77ab26e4de9e9f465a75df7696c385eaa6ecb043bc8f566ffbcb0e87dddc5e410142f60a8ebdb7285f9bdeaaac297e7aef914f175757f6209e65e1d504efa78f95e357bd5ce0e69f0bae0d0e5c78e813bcc733b431bf5c1d7f887580db0ed48d8b3e1a4fab038dc3bdab705ad8495d4c7432b8ceb30c4183e94a977ca62a62234e97d4fdf1ae4efe28e87c8298a66c795d715b7214edb50bff87ec712d9aa017bebc678b84a7871003d789a8d21944528b51ca78090c337c3c6ce4e3b71f5ce1dd261fad3bbe190c3c47864868b24b9d45ca4f9b7ef6df09ecc5e2c2e3251cfe2c030205566d26d99f7670359563d47c70c3c17ecce0772c32e7d70afd0c074a7f07ffa6395a21fd19628398e628d5ac5d3d7f77ef8bbf3ea7985fee799a2e0b5b2934214492b999e4970e4990c42fb0eac353aa09117e3e38145bdbc22646e577b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["16430af64cb8a3637928d82525db3199acc8c7d90ee5577d812b8431f994ef9f21a2450e4836b8202a044b3b452d9cdd2a07b064886eb5bfb0b84c29af3b5927", "4d090253d399d62628661e736b2df48f4a21782649e99e3929d4834566b927c48f821c06be3519f174f66b8f7b1ed0573c71d1ef55b750ddb00b6ff488c57c2e6a993f19f272125f0155ca8a6c7d9017b340a112b94c4a99e353ecfd7189a27175829025a66133bcca1ac7be915db7391a8300d7de1696a53eac4d825ed3df0f9c8ed892987299646d1f4c0bc8f3ef535d1606bd00ab33111927f918d4fc40e1bafe5431e782f66894f41cb83f7852536f01e91a040f9415f86ae5fe7a7ac42c9566ecf8dfbafae09aea4e8e5f60cc0eb0a07db2bca657ec8fb88a7f0125951051920e9420d02cc31bc1404610d1fba1effd8d2b614f69bd73d03ef57aed7a352acae3ac92de39ef4d6645e620afa87290786e1cff9857db6719b117b9744e0b9a8d975674694e82ba43931ef8c0c510884953f690f7d652d44569b9ae7b613a00e4e7ff2e22dcd75855f1d42297ec21c4a529054d8a09fc90359f6cf64e604f76cf4a238407e122fe82be719a8cf960a9b20339b86a2634ef79c1ca6831d4da925ada516a0445dd6d587f676f2829644d884f5d16e116839e8958b39e77040acbdfab78582b91ea9a785724b3cec68a8483cd7b0f56a6065defb5d40c0d109d8a0776397c37f38c2d04be28a66b3a320f07daec3f144e878c74e7702258683b5ae7630b4b66d037e8f0f9a26cb3a609bf865c958610d487ff4625b9678d3e89569c9783217b8dc58a6021407520871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe92399151827fdc18825d14251a865e31a5e1c49f80697ce6a3e65db1b6f47c9e2d76b439eb8b90f256c0b5d415475c63c19e74341f69b4cf4d655a142f136b31916e23bdbc1135794d0d6806dd39e768f0b3fefa547ce8553ebcc58a86bee262ed34707a6ec3057d6919ec05d5b94f67ae87cfa587eaef2b12b91ceccc6ef8a875d8879e2514959e0266d8bde9aa7bdbb78c9ef4e7ac7f5cf4ebab7eddebd4a06e111d3be560136713863636b8209103ca01a3cbb41d43efd48545207f107eb77133ba9a11333aec7eda378031b485f5b8e8eabf57bfffc8ba4619b40408b783eb29786b9c7e54d29bd57a82aecf88557e00d4e8aef97ade3b73179d439f2293912176cd8098a5570cf2ae8a62d493725eaf54ef9754ca785295569a25e301492e27c5aa3537568f6734824d9e13d17b040b5b13f58e286505de213f86581d977acef7f6b695f70556e0cf280f2f492800c5063304369626aa3de8e4870d2a17002da8b6956793790e2522cdbbbc51c3e76cc941c9170ee3ae91039a9479105f3564c54269032898a6cd874ff4d1fe0ed410013dc82714eb7a54d64226e3868b0e659112c9f7f4ef135ef7e3677927c686e2cfb83a5642dd1287d117c18623babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}}, diff --git a/txscript/data/taproot-ref/e81ee8a9a2165602a74cee1bdc447e2da39ab762 b/txscript/data/taproot-ref/e81ee8a9a2165602a74cee1bdc447e2da39ab762 new file mode 100644 index 0000000000..710c38e929 --- /dev/null +++ b/txscript/data/taproot-ref/e81ee8a9a2165602a74cee1bdc447e2da39ab762 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbc00000000f53d232fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5801000000a868a14b010a422000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ace1030000", "prevouts": ["f757210000000000225120d65a03f65f30f95ff11470521917ac5fe759126fe5e56fe4b3d214d8fd101829", "af9c4c0000000000225120f855ac1dd07b462ddddee29099c3eda9b5eca4e8470208f3b94e6aab9d37482c"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "f77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08275fbdc6cf2e777e050e79c533e418db275d42efba7f8dbffba71190cfdc033660f5943df1a7722c938328966c7e5ac747f85bf050d43cd9195f6df88860ae066"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ab23e209afea8ddaa27b117399cf1dfb5b8cbf4adc6eef68e1faf96f2bd7a900bef6e20d4c5455f6a7eb766c9d2ecc1d4fc5a0b2a6436d41d520177b8d84d9981b72a8cc1600d8047fe8b56626831fcb5b55f7ee61ebb9b8b91fcb4b55947dd0f5943df1a7722c938328966c7e5ac747f85bf050d43cd9195f6df88860ae066"]}}, diff --git a/txscript/data/taproot-ref/e84308cd3dc05d65738bf940c73e11c1342f53dd b/txscript/data/taproot-ref/e84308cd3dc05d65738bf940c73e11c1342f53dd new file mode 100644 index 0000000000..2ceb68782d --- /dev/null +++ b/txscript/data/taproot-ref/e84308cd3dc05d65738bf940c73e11c1342f53dd @@ -0,0 +1 @@ +{"tx": "0edf5c600360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ef01000000195c71c7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2a01000000128387c360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706301000000d6a1ca9b01111250000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478780000000", "prevouts": ["77320e0000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "f6ba6f00000000002251208082b91639ce415d44b93ebacde06f605687bdd15466bf93e6aed91c1a4a19e7", "1f6e0e0000000000225120ca2f7736d38d84f93b62b86d7eca19a35f2cfb6705849a1c6400bed56ad761ae"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dbc4082c88742c64e777227e559cc787fa79f9ad49b3844bdd2aa78bdd53ae153e2d335f383706a312226510c4ca5ed297e59b2981bccad977d4984b4ab81a7bbe0beccf8b53a38f7a20d51eb008bdc60f78fac094fdd23935202ece673d8622376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d95f1ea0a1fd23653d05da4ad0eda243001c7a04351d1c2a22e8a2afb82411fc18d13f23505bf80401329c8d1a0bac5ffbe219ba0d96925c38e985a7086f175ac8db205c7d3bb0390b2e22910f5d1cbad00807eee3325f4c4e7f4412ed3064a1c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}}, diff --git a/txscript/data/taproot-ref/e8597fda210c9006c4eb35f55099dd53f0804f47 b/txscript/data/taproot-ref/e8597fda210c9006c4eb35f55099dd53f0804f47 new file mode 100644 index 0000000000..6665834633 --- /dev/null +++ b/txscript/data/taproot-ref/e8597fda210c9006c4eb35f55099dd53f0804f47 @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5b0000000030b2815b03305c6c00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69846252a", "prevouts": ["2cdd6e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_6", "final": true, "success": {"scriptSig": "", "witness": ["48139ca85c5fb7a70b53c6639a15fd7d9d6dc1b19fa2b1f15fb8b272c65b0ca1372b1f62f390098744d5db2d5892cd455c73be7b67ed24c419bfc8121f770d2d02"]}, "failure": {"scriptSig": "", "witness": ["b3d155c35adf27f8d46a5f951b4aebe4e749148ab80c2d0a54832b9c82991fb700277d32ffe299eae938dcc67815a210ac71ba84e381bb96ccfb8e7d0ffbff9606"]}}, diff --git a/txscript/data/taproot-ref/e85ebbbabefe13b277bdb7bb290e81d48aaae843 b/txscript/data/taproot-ref/e85ebbbabefe13b277bdb7bb290e81d48aaae843 new file mode 100644 index 0000000000..c852537693 --- /dev/null +++ b/txscript/data/taproot-ref/e85ebbbabefe13b277bdb7bb290e81d48aaae843 @@ -0,0 +1 @@ +{"tx": "6b76e011028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47901000000f2a234b660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cf000000007d7052db024ba54300000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a3000000", "prevouts": ["2531340000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "dc6d1100000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "0c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c2538f548eb9d319d165a467796d1e60ec6673916444f0d66e1a9edbb7d8ec4eda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e5111e542fd849c49f4d44aada2d8e1aab946c793c1d334242f5a6d1a51a6de2d5b0de380cf0ebf0fa9d17e1d1edb87a374b64935c1c67f0c5024fcc072643681"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f347fc09b13f9ab949e4d0dd849e76d18bd9ee465aaa47c5e053192723bafcd48d88e70532c494439586c1157b8a644f11fc532506ec8f5af612c230a11997e628257bae22e6d8aedb31b43cfe467850e731fb88c1221782039a4c16ef44c35617d0d4fc7404dd8984f6a1705481d95654b515a34c586c99c11bfe20e9503459"]}}, diff --git a/txscript/data/taproot-ref/e87e2014a5a0695a3cdffdfe859201eb8beb9fb0 b/txscript/data/taproot-ref/e87e2014a5a0695a3cdffdfe859201eb8beb9fb0 new file mode 100644 index 0000000000..ce4c118a9d --- /dev/null +++ b/txscript/data/taproot-ref/e87e2014a5a0695a3cdffdfe859201eb8beb9fb0 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127095000000005c767951dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8e010000004a51eaed04d34b570000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc73b010000", "prevouts": ["4f500e00000000002251207642517ca6719fb19e4d50e91940e680bbab7ca2eac6cb77783eaa45a9fa38f3", "342c4b0000000000225120c09854f56274e1d35482cf8e2025d8ad7496c75563e822d6c9c7b32cf3be83f2"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "717d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a84e3bf2953ddc9cb8e31c297a3a65f2ea0223693047b485ee05dec8a9b2b04be4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8674d0c931fae68ff43996ef27e2c8ff69e275e322181f769b95dd7ebb695302b667dde4f09f14471eadd81946489c41cf4fd01382a4947d773f1f2d4d0db4c57"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b2bba68bdba5bb63faec40886b7424a0b364c5795c89d5df60ab242d96dbfca40b90ee144c073a081d1ef827361e7936248dbf88e4cb0dcdac45f51ff02f5de2667dde4f09f14471eadd81946489c41cf4fd01382a4947d773f1f2d4d0db4c57"]}}, diff --git a/txscript/data/taproot-ref/e8ac301abd5dee5dd4ef8cb0670844bca13f0323 b/txscript/data/taproot-ref/e8ac301abd5dee5dd4ef8cb0670844bca13f0323 new file mode 100644 index 0000000000..f7fb620ff3 --- /dev/null +++ b/txscript/data/taproot-ref/e8ac301abd5dee5dd4ef8cb0670844bca13f0323 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0a01000000b500cca2dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb0010000004057a30b02358044000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7da000000", "prevouts": ["8e402500000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "389821000000000022512046885de037d9f439e247c936086c9c89d6da1bca43dc543d3e57bccc8a96eb66"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93623ae85726644c2de015503b238f6d2ff3873dd043771b87773ddc298654b0280d81cfe71594e1389c7dbef12605d87c33af6e429193e755ec800f4a6d58e14260941252319b1d0989c3ca3905f2d65278f17fb3ebe6fd71301329f8e450b42a05a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b1651a3fc1c4e1b7c3cd67236d38206903995e4c6229f7d3322c375e330dd9b093e484a9e3a7c57c3845514d142b984218effb649d9e5eb3f309ab706810aa991d26af6ddceab3892536958f1ea20dd7b885ab499207106c7decaa6511a0e4c5a35b5683fdfa8774cce0e3f4376573bc9dcdb125f140a48d9cd3d58bda5cb68"]}}, diff --git a/txscript/data/taproot-ref/e8de8be751822aa2e8bcf086b89ae6ca68052255 b/txscript/data/taproot-ref/e8de8be751822aa2e8bcf086b89ae6ca68052255 new file mode 100644 index 0000000000..de9b3dd108 --- /dev/null +++ b/txscript/data/taproot-ref/e8de8be751822aa2e8bcf086b89ae6ca68052255 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704b000000000a65acfd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c465010000008cdf959c01c1fe0600000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5e000000", "prevouts": ["d88a0f0000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f", "d44c330000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_mis_3", "final": true, "success": {"scriptSig": "", "witness": ["a9ed556b27362671a397085cc5922c9405eca223ef8767b92c77d05d88825c366863b68cedf019302ff5992904ef35c251cf329ed6de69ab09180d8174374ba681"]}, "failure": {"scriptSig": "", "witness": ["3d5ff17f49108195b875a93aa5abac40e5935025485f0926dde5450549f11be4ecd6f9485486ad3c9da1504a287802e044ec30cfe7133e982f6feb4c1f4ffda403"]}}, diff --git a/txscript/data/taproot-ref/e91b8692e5e50d7452d085b3580b9cdd1676e122 b/txscript/data/taproot-ref/e91b8692e5e50d7452d085b3580b9cdd1676e122 new file mode 100644 index 0000000000..687d501eca --- /dev/null +++ b/txscript/data/taproot-ref/e91b8692e5e50d7452d085b3580b9cdd1676e122 @@ -0,0 +1 @@ +{"tx": "fea3974303bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaf00000000f2daa1b1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7200000000c374aebcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb2000000006b51dbf6012250b200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac38d83e24", "prevouts": ["447672000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "be8e1f0000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "cbfa2300000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090224bf439fe3680c2b2deb33938ad3d8f62744ebc2b558801d3176378115594d8a264e659939d2770dc5147f806da486661c4424f5e0dec5dbc07c2c2d236996e6dd6ccb90b03451784749cbe074d7202f9238e301b7f9d9be57b4e5453e108fd2e90c4980484b324ae4a426d9f130db03c003219fc0fe85e1e9f40cd8c23ac812b66388942d907a364795683cae213ee5b4774e4f6ab09b045af5618a666eaf92862bdef32be8b1028e908240a47fa1283028aa091a903b1e34b094a4f0ed755dbfa3fef595a09d6362e3629802adfe25e87dfbd32951d351000285c6a9b2c24f67ee5b131ab0c2790eb69f5cfd89e3720cf6ce4fc31c5dddefb71161f9d84536a894fede0008c82b8d0f46b99621e50764e84286f972813ddd6c79334284a2e6336da1b85e00e040e006fcbb0474c0ed3dfec05732ef40d4b1b778c64084ebddb06db78cd5db9d9287dc6e11a968849169805c0dcf33a642634beed9469dbd414c184e77ffc60fe95220e00f21e392b71ed8a30743611d7a3c8f19789e24284b874d0bf52facbc34449b0d3b1d46940e1f5b2a49ef635fa77f1c9e743866a0c38dff619cab74787b07ec81d3233c788cdc83fc33f16de981bcbfddb3efef0e4fb4648e9931db1e10fb490b0e26a3f547c7e1d686d2f5e76b8deac447ef7118c131b7c8302952cbb90a184c2ddb086bcdaf77f804c2ada2f49339565125ce337ed9910d5f3ed3f3724875", "187d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082b6019e279bd309d4b7ea698da82947cdf92f55834d49ec05c8520ba423c90b8e919a726f5226a1e5e752df6df7fd59ca609863b1a6d095747bbc103e423fb93280858ffdbef3a81ff8eaeb69bf692b0617d2bdcb9145576d5843e6d9e5e1cb0c"]}, "failure": {"scriptSig": "", "witness": ["4d09020231e986b8d2cc144826b67e819040597933571334414f20589a4272e02b0d2a5bb7e3997e196c6a9cbb0f25ee3a5dd8a3f07374c4826bf097ee885ee5887c8572c7912a5e3be8b0eef00ef609837066dc82d249a2b50a51361d6c86b109531702f2640c351bd8850c276c7dbb4ae0c99832475455544e80e0fba6d9df2839eb18684d63083b32da34d9e5b6bdccc7d316eb92fb2c5bb4b8920bc718148d1352edf5c89457aae80ae3019737a43f5e7b9f5ac29c209368987e043c0f2a2591bdd083e5d61c804e5d7556d03d22a1c4363bcef1a2274d2225da431d6fb250e2f6773c71c1877f97ba98d02c383e1d2297265460b8f50ba0a520b81c419a158932a4380e899cb8d034423d9b37d43c119d63451d4c6da1951ca75feeada9359c313fea859ad7a547648c40193374e3e0ec97c03fe9c409805689bfd59614bd82e9345c09fc64dd6303d5d0dd18a44cc784ff1d55901d900decd3666ef97e1ad9cbfd08e7bb7f77e3b13b6fdc5de36fb5b3b75e2b5fe757b69b669b16c8034bb0b6a77fe1783d35a000e5c115c64dfc4e54270fb523d5dc34007bcf59f6e7a078b321bbcbb826e3a6d666d5c6fbd63cd7acaa140e1021613f51f21d03b85f09df44bae5fd4d127d0c4b217146330caea7dc95dd88912cb5a8aaf5b952e999dd1e8c4910cbee46661ea0c3c029b7f6217c0bdeab00d38a2e98386919f0ebbf07ed7bf90e73be500d755f9a75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a2a72d9a87053684bb0dc48081cf5c5135ec23a32b564c6b97b91a1c581596c8802a37b3510d82dab4bdf4d6195b9af4c8a1df2dd8a601b49dccd2ea1725fb9deb0356d5dc7bb189d5700ce63be65cd47bafc75bda640418bb3b77b52e492b0f"]}}, diff --git a/txscript/data/taproot-ref/e93758815f2e92fcae33eeb424961ee124cec2c7 b/txscript/data/taproot-ref/e93758815f2e92fcae33eeb424961ee124cec2c7 new file mode 100644 index 0000000000..d2a30b4135 --- /dev/null +++ b/txscript/data/taproot-ref/e93758815f2e92fcae33eeb424961ee124cec2c7 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709a00000000122eac46bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdb01000000f84b9d610414df8a000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acc3010000", "prevouts": ["2fb60f00000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c", "e1c47c0000000000225120a607964ea93077ca088588fe8df58ca0f1df7737d7763c94d5c7768cbab371de"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364cbf97bca8f4e93312d4d79f006e70724fd22ee96fbea9c47aa9d0945795d6f1"]}, "failure": {"scriptSig": "", "witness": ["6a9e616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e9501001531cf5569b3b23daa63df0825b2e06f3 b/txscript/data/taproot-ref/e9501001531cf5569b3b23daa63df0825b2e06f3 new file mode 100644 index 0000000000..c6a3ef3c8c --- /dev/null +++ b/txscript/data/taproot-ref/e9501001531cf5569b3b23daa63df0825b2e06f3 @@ -0,0 +1 @@ +{"tx": "0200000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8800000000e5c675c7011a1f5a00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4cf09922", "prevouts": ["cc1875000000000022512020555e2c878e81dabdc8b4bbb4d8fbb562c672b13f4ba4a3f97a1487e7c521d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e8", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362cc5df8a4115da779f8a758b20ada553e9e091a2311498f2aa3552034f30084e276a8166e5256dc9010e53101dfdb6dbd4fafdb1e785ffcbffe7e4bfe923fbf99aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d3d1c8f95326a5f9176c86e1c30427cdf7afee7eae03ceb2fdd83531b682283cf61f73219d91856056394a010eb6c8ee7f13c9683181be224f0fcf47ad20d61b9aaad3e4ddcb787e09feaf57a938d0a46e7e94627a74ec9b410f8a5374ea1d35"]}}, diff --git a/txscript/data/taproot-ref/e98353914c5de48ee650dfff9741c1285bf29368 b/txscript/data/taproot-ref/e98353914c5de48ee650dfff9741c1285bf29368 new file mode 100644 index 0000000000..266cc868cd --- /dev/null +++ b/txscript/data/taproot-ref/e98353914c5de48ee650dfff9741c1285bf29368 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270bf000000003562bfc98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45b000000002c898a1201ae153c00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac3607604e", "prevouts": ["fcdc1200000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67", "58eb3500000000001656142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["1778e6788727fd076d7ad6b184d1c3b78ce26ec25463ec8a133f9d2380a680e0e6c65743b86b754004089f8e9f44fb643ea7ca18f4f397cf9a7576e515133e95", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/e9a85210b1a1018e7666d51f88430bb5d8bfdb3e b/txscript/data/taproot-ref/e9a85210b1a1018e7666d51f88430bb5d8bfdb3e new file mode 100644 index 0000000000..7be16770e5 --- /dev/null +++ b/txscript/data/taproot-ref/e9a85210b1a1018e7666d51f88430bb5d8bfdb3e @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c55010000006d0e8729bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1200000000fec08d1f036360c3000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdbfe094d", "prevouts": ["a0155100000000002251205327380047190b39068e361063e76c0639ec95616567f9015a7792cf50895358", "95f273000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "siglen/padzero_cs", "final": true, "success": {"scriptSig": "", "witness": ["ab8126d03f1f78d9217af03abbd9f6f462a5378ded568ec749eabf659f9b2c895f1922b5c5b86ed28fc30b8fcfd6d05689dec772f11b8d1155ede4ec23d93399", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b7922a9ef31868fd0bdd2720bc44a83a05911c979e226e14df12e43105fabe25154b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}, "failure": {"scriptSig": "", "witness": ["ab8126d03f1f78d9217af03abbd9f6f462a5378ded568ec749eabf659f9b2c895f1922b5c5b86ed28fc30b8fcfd6d05689dec772f11b8d1155ede4ec23d9339900", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ac", "c06caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439b7922a9ef31868fd0bdd2720bc44a83a05911c979e226e14df12e43105fabe25154b26074893c3ce6717cee85a9b2116337c9f3fc57ee6bb0ed20c59821243ce0"]}}, diff --git a/txscript/data/taproot-ref/e9b76d10a6eebe9f37aaf17e3c71921c02524b86 b/txscript/data/taproot-ref/e9b76d10a6eebe9f37aaf17e3c71921c02524b86 new file mode 100644 index 0000000000..6a5ce1013b --- /dev/null +++ b/txscript/data/taproot-ref/e9b76d10a6eebe9f37aaf17e3c71921c02524b86 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9c0100000086f844cdbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf57010000000f4c07bd014c2ab2000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48780020000", "prevouts": ["ab6b560000000000225120cf270920c53765cb04b9e9f4d4bb11730a43c2f8bc3507d6160e85b28c4cc6fc", "09216e0000000000225120460dfd59ffac97f33cb704e62d40a80655c52408ecad6b881ea54a9bb408923f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bf8f72dfad74eb16af74ee8217f4e342864fc9cf9d5e103f73a49ce67e9f6633"]}, "failure": {"scriptSig": "", "witness": ["6a66616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/e9bf6e5a4cbd00e35ecd77dc39c1f9264b9f4dc1 b/txscript/data/taproot-ref/e9bf6e5a4cbd00e35ecd77dc39c1f9264b9f4dc1 new file mode 100644 index 0000000000..bab1117b39 --- /dev/null +++ b/txscript/data/taproot-ref/e9bf6e5a4cbd00e35ecd77dc39c1f9264b9f4dc1 @@ -0,0 +1 @@ +{"tx": "766d60d703bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1201000000da307bb5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0000000000def8accadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba10000000099eb13d001d42a740000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72a040000", "prevouts": ["f9057b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6272570000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "b92221000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_b8", "final": true, "success": {"scriptSig": "", "witness": ["15b241a18d04a42771fec15b73c4db2772fb31e6482de615f9168512d7aed780824cc9984bc28d28cb74bff9e7699d1b2833154cf9cf0bc9c75efb8d59c233e083", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c5dfd59f67ded796f82d56457492083a1d78f992fc728e1e0c10af747e89ab40a5cea1b6a11416ee7d75fb22faf26f82301b42c5d06312223fac879c9c8f6ce9b8", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/e9c730fdf2c5807b82dd1e4d042e404651d4c118 b/txscript/data/taproot-ref/e9c730fdf2c5807b82dd1e4d042e404651d4c118 new file mode 100644 index 0000000000..0806a17dec --- /dev/null +++ b/txscript/data/taproot-ref/e9c730fdf2c5807b82dd1e4d042e404651d4c118 @@ -0,0 +1 @@ +{"tx": "6b2f1e3902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2700000000e8905cd3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4ba9010000008c35e8f9017e2c3400000000001600149d38710eb90e420b159c7a9263994c88e6810bc7445d4235", "prevouts": ["09254d000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "36be28000000000022512081b6fde8d6a32bf994f385f13e2db06adc6a69d3d570a785570e2b0fcec09f40"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["fc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082cb6beef37ee5dce9a0d87dd9110e965067099d7e22847272a5a9481e46004ae8aceb16be1ebf4fc69deaf064fc7bf5d7ff2149818b5ba4c28c799d30ad567cc959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8f9b91a8bd77dea62c47e49d062c2fcfe01875e2df978edbcee5db59c7daa26cb6beef37ee5dce9a0d87dd9110e965067099d7e22847272a5a9481e46004ae8aceb16be1ebf4fc69deaf064fc7bf5d7ff2149818b5ba4c28c799d30ad567cc959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}}, diff --git a/txscript/data/taproot-ref/e9d4196818fdc0fa92415cb4a2aff1b96c783b8b b/txscript/data/taproot-ref/e9d4196818fdc0fa92415cb4a2aff1b96c783b8b new file mode 100644 index 0000000000..8821f8fceb --- /dev/null +++ b/txscript/data/taproot-ref/e9d4196818fdc0fa92415cb4a2aff1b96c783b8b @@ -0,0 +1 @@ +{"tx": "1b7091bf0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705001000000fb6c19bdbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf80010000000a4e7ece028b5f8400000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7e7000000", "prevouts": ["8822100000000000235f212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "1dd2760000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_95", "final": true, "success": {"scriptSig": "", "witness": ["663e41f180a2d9bd4bf89a200f61d4c4041a58022bf544279e89646148da20d87664efef3680cdf50306c8f8892d70a4c1c09213091d01567e546578e1786d5683"]}, "failure": {"scriptSig": "", "witness": ["7b79b0f1b63f68b849e927aeeceea7afc37eadab1d23460c1b0b93955ba450b7648d791bf0f0895de4eed4029e3c95f406634fb10b0d7df8e8f6912437c497ae95"]}}, diff --git a/txscript/data/taproot-ref/e9dbacbd2e05c550b025911cfa3ca5803dae805e b/txscript/data/taproot-ref/e9dbacbd2e05c550b025911cfa3ca5803dae805e new file mode 100644 index 0000000000..c3e32a1d26 --- /dev/null +++ b/txscript/data/taproot-ref/e9dbacbd2e05c550b025911cfa3ca5803dae805e @@ -0,0 +1 @@ +{"tx": "0200000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8a0000000043c498c602dbdd2100000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48736416c47", "prevouts": ["c8ba240000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["3045022100f6e5f8178cd31de7928c8c779f2a0b31b162e144fedfc790a8d0d60cde704fa0022041023acd1f1cca412cd549457cb3c0456ad4a259c8cad4777619706cbb47525b01", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["3044022053ae4374102415afbf1c09363a4201290af1e87883545c7cdb5e7308718185fe022007e9b9d422a093a32c711f698350747391b89fb6f3fd50005bb92adf8880da6a01", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/e9ddf35ff01ae9bc71730f02a17a6079411fde98 b/txscript/data/taproot-ref/e9ddf35ff01ae9bc71730f02a17a6079411fde98 new file mode 100644 index 0000000000..ebb86432ce --- /dev/null +++ b/txscript/data/taproot-ref/e9ddf35ff01ae9bc71730f02a17a6079411fde98 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd100000000e6d2f9d0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1801000000ccd8cab80133f516000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487bf169b47", "prevouts": ["492721000000000022512083c0e539f639337ae8c0354a4e7a9605e4ad1b55261430431fd50e3d65b9e0b4", "7355690000000000225120da5b2ed68dc062d9fd59cecba48d2679c72738370140766f8e961cb8717de4a7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "2b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936135ad0cd7c9b6311df988de8317b2c783507c964445beca4d69314b6889edfdc527b3d6e358222ba6f0d0e44427df3c74648eb5abf60e34311dababed48c5c2bd74d03d2cf0ae79996d1bf896237ca201e78f1b4c5ece550af4c0e01e9fa9886"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a543900b336a3c008870ed4aa640473f983a69734480d339364ae43ad1d21b16885bea8937005622f3eb8b2c440108feebbdb5f3ff09e0402c722754cbcd9b2d195038de5261112827291f7af9c58b034003ed818b7e5ec0d4ccdf81f6c2ea4d"]}}, diff --git a/txscript/data/taproot-ref/ea1fa2cb1864ebe376683d33d94b64f0f54a43dd b/txscript/data/taproot-ref/ea1fa2cb1864ebe376683d33d94b64f0f54a43dd new file mode 100644 index 0000000000..b6c8626702 --- /dev/null +++ b/txscript/data/taproot-ref/ea1fa2cb1864ebe376683d33d94b64f0f54a43dd @@ -0,0 +1 @@ +{"tx": "92ddf3650260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708c0000000087e1aecfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdc0000000073684b970280a936000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acf0000000", "prevouts": ["8995100000000000225120264b35643a3a3a95953dacde7cb6bcfadafc46c4f235409840aae4392ea87839", "9d4d280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a7d0890151f60a75c7483286f2af96bab693a8b52a762410918ebecb67b1fcf5"]}, "failure": {"scriptSig": "", "witness": ["6a2d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/ea224ce2e986d690db2a198af3f98a8408cdb30e b/txscript/data/taproot-ref/ea224ce2e986d690db2a198af3f98a8408cdb30e new file mode 100644 index 0000000000..59f51b3045 --- /dev/null +++ b/txscript/data/taproot-ref/ea224ce2e986d690db2a198af3f98a8408cdb30e @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd6000000006b1f0cfb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fe000000009f41f51201fadd4e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac43020000", "prevouts": ["70e7780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "88ef0e0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d7", "final": true, "success": {"scriptSig": "", "witness": ["49c5480c4e801fb1f08ee5f62d4ad02c1042f28eeb851515c34bed1cf2474cf9ecbd21699af034e64b3498e72b9a37112fbf942188a4161b13cd39b92ad4166f82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0dad9ae1523e8756e95813fa243398e94eed2db1ac8ce3c18982dec25c131cb951bc6428be63ee6512885913cf3f677a20c872dd4dc1888f722a88e51a00a60dd7", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ea3247c42e38f93b6d8af0e43d7f34cc4bc25070 b/txscript/data/taproot-ref/ea3247c42e38f93b6d8af0e43d7f34cc4bc25070 new file mode 100644 index 0000000000..a6ea6e57c0 --- /dev/null +++ b/txscript/data/taproot-ref/ea3247c42e38f93b6d8af0e43d7f34cc4bc25070 @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127069000000000173f79f03215a0e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898736e85250", "prevouts": ["cd2c110000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e34c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f0d1bc393c3c3c2b57b8b86a9e8a64bd1d4b9e0fd1bc4525ebf92e13eb29f90821a06fc3128a9eadf7c181b12783fc0ac677434699a36c8776c14fb861b85f3ba54f7803bb2e93759f587214c70a485617458826e57c89c2ab5c5e7ce47181a1"]}, "failure": {"scriptSig": "", "witness": ["4c52e3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082c71af5165e16a75a4d38ea496516a466796a1cbb48ef44578cf258de537130fb0277e21fac1036469cce09bee47dd6f35fd38d265061a05632a5c9d8280907c6449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}}, diff --git a/txscript/data/taproot-ref/ea3a67eab454450f7603fe0cd98a27c731eb5d00 b/txscript/data/taproot-ref/ea3a67eab454450f7603fe0cd98a27c731eb5d00 new file mode 100644 index 0000000000..2e3e7f5869 --- /dev/null +++ b/txscript/data/taproot-ref/ea3a67eab454450f7603fe0cd98a27c731eb5d00 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3e01000000c939c0b1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3c000000003e7a40d504d3214600000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a603000000", "prevouts": ["72c32600000000002251209f730866f32bab360a89a22c38a65c192ad65d3314437626484a41919647b175", "70d6210000000000225120c08dce064ec071eea1f5304817c49a2bfdceb360f072491bf2d2a32ed65843b9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00638d68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365d51fb579a91f1e7017ad05018cdacf515cd9ac84a638e495c8fd6bd929425d520e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1b25240bc46c035392207c1076e816011b96fc57f286e81391f52d072a1ebea8b62cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08229493e63f0262db246dc905ef3bca459233a7269b5efdd4093c0b189ca3e559193f37adfd687dc0da405a76cf860eea33b50edba83aa9aefe64ccc08331b86a062cab3a6172a7c832406474b8da3677455d75595a690190458c84d19d8a3ecc3"]}}, diff --git a/txscript/data/taproot-ref/ea3f5822d3ff42dc536ca2f868583167e04fcb24 b/txscript/data/taproot-ref/ea3f5822d3ff42dc536ca2f868583167e04fcb24 new file mode 100644 index 0000000000..f0c9f6b888 --- /dev/null +++ b/txscript/data/taproot-ref/ea3f5822d3ff42dc536ca2f868583167e04fcb24 @@ -0,0 +1 @@ +{"tx": "c924110102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff1010000009d574b958bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46900000000c2a4e1b8022e86a90000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a621a7f84a", "prevouts": ["fc546d0000000000165d142540f27e90740933c99d4f17ab2dfc6c82951cfb", "a0373e000000000022512024241b8c28db08f46e2039187a480378b2a1ee734bde764c6e80647709b09b47"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_2", "success": {"scriptSig": "", "witness": ["7def27dab81d3bb1bbe6c4df097458960df6d03b8661956cb1c35d6c5b35cdd1c91ad0f80756ee7390afcc463d34a727db2ef08ff09b798c7f5634eba68ea6c302", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50570a00062fbe5f2ba43c1fb734d7908e3c1ee32333dda1dcec69957da1e118083d167d510ba2bc372333720694bad65a519ca6b72ae91834facc8467645219f5f9d7313ab87c8f2f7079842eddd426ba30b697b28a521993f2980bd50b915a9e61349791576d5c1eac87f44608922d8204938ae3b98dae4182c0dfd7bcb1df466f741f"]}, "failure": {"scriptSig": "", "witness": ["3003e9772507cb0c5e3dd49a5b105b156801e591908408a867c039718bc33807a67e0575fa64fb8b6a58e57e4bc21cbe74594ef8a31b343cf567b8e7c491217b02", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50b4b71b1612e36ab0bf6006d0430e9b1e14db5f9adcea079419cd36c7f5b4145eb349c69f981154e73f7c555dde6b62faba046ede1af79fad4330047697b0ceb6b07d53401b3e0539a2037854f36cab7c38e7"]}}, diff --git a/txscript/data/taproot-ref/ea9383c734b03a942fd3c33b4cd6172b0c606aeb b/txscript/data/taproot-ref/ea9383c734b03a942fd3c33b4cd6172b0c606aeb new file mode 100644 index 0000000000..199e998808 --- /dev/null +++ b/txscript/data/taproot-ref/ea9383c734b03a942fd3c33b4cd6172b0c606aeb @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfc000000001e5111c0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf720000000083aefab460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270490000000053752fdd0376fea8000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987cb000000", "prevouts": ["de10240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8c427700000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "5ba60f000000000017a914a2a8d85df2f20a0aaff7224012fc4cee13e29cb987"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "215f1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["e92b57286193ec8e221ee627b752db89b05173ea63f7bcb01b59aac63359c00bb799c86be0b19a2a62d88f80e8c71158d3d6e6de1692be63f452f9e42fcc640f"]}}, diff --git a/txscript/data/taproot-ref/eaa2ec29b35602bac1202162cc43997d10f21ed3 b/txscript/data/taproot-ref/eaa2ec29b35602bac1202162cc43997d10f21ed3 new file mode 100644 index 0000000000..3ae45e31e5 --- /dev/null +++ b/txscript/data/taproot-ref/eaa2ec29b35602bac1202162cc43997d10f21ed3 @@ -0,0 +1 @@ +{"tx": "5546a66c038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d400000000b5d77298dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b120100000066b879f3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfda010000004fcfbcc7041d3ac4000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf2010000", "prevouts": ["968f3a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ebe5240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d3e1660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_f", "final": true, "success": {"scriptSig": "", "witness": ["7ee81e7753d0ccb087504760ef812f50a1bd452ccd70f0bab9e56546ad5c0f79c9e7c007972f85ef7389f9cc36c701731efc28a2857c41631dfbf9855806d3a781"]}, "failure": {"scriptSig": "", "witness": ["bc9253c658f5096ee1292b9aa93a488d9253a6793ed6b516b66a0e0c4f2cf436c027a31a3a1c07718ed3a4e0e3c17441bdb086f2cc725fd71de5cde56672569b0f"]}}, diff --git a/txscript/data/taproot-ref/eaa7b118760debbe1d5a3d4a62d81d966ab89097 b/txscript/data/taproot-ref/eaa7b118760debbe1d5a3d4a62d81d966ab89097 new file mode 100644 index 0000000000..8d1e7c0ba4 --- /dev/null +++ b/txscript/data/taproot-ref/eaa7b118760debbe1d5a3d4a62d81d966ab89097 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0d02000000419a5faf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45e010000005e59f2d60130516600000000001600149d38710eb90e420b159c7a9263994c88e6810bc72b000000", "prevouts": ["73ad7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "046131000000000022512094bfa417ff7fec0e1f7b84edca83ca6ff73ff5ab901944aa69a26f9bdb9b300a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936175673ced4c1651dc112a32d9e4be1c148bacaad18c2392100569d5094651b3e"]}, "failure": {"scriptSig": "", "witness": ["6a64616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/eab77792be235dec9f3313676498d907e560b5cc b/txscript/data/taproot-ref/eab77792be235dec9f3313676498d907e560b5cc new file mode 100644 index 0000000000..eadb168914 --- /dev/null +++ b/txscript/data/taproot-ref/eab77792be235dec9f3313676498d907e560b5cc @@ -0,0 +1 @@ +{"tx": "02000000031980a99ad1eac101c8fe3dd9b7c19f4e81dda5a690601a9eedc2ce713d9132e5000000000007acc88a492909e056fa5c0ef2af542be68aba07da39583e95b43e24484150891b1d532301000000001ad6d4dc1980a99ad1eac101c8fe3dd9b7c19f4e81dda5a690601a9eedc2ce713d9132e5010000000079e1bbdd02ac0b058b320000001600146d764276c66fec1127e5074db5bff3aa6c52553358020000000000001976a9147d8c30278dcbf5bd88310a3c91abbeb33651906c88acd137773e", "prevouts": ["7371c1150f000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "b7e4d4f711000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "6689717d11000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/keypath_empty", "success": {"scriptSig": "", "witness": []}}, diff --git a/txscript/data/taproot-ref/eae489d9b326b6e764166ddf53140f5ddb3b425c b/txscript/data/taproot-ref/eae489d9b326b6e764166ddf53140f5ddb3b425c new file mode 100644 index 0000000000..8e81cc7693 --- /dev/null +++ b/txscript/data/taproot-ref/eae489d9b326b6e764166ddf53140f5ddb3b425c @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ac000000001d48c503dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5b00000000989542d002fcd25600000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748795010000", "prevouts": ["0bce3100000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "9010270000000000225120e3b65a069bc68a4d57751d6a27b5b12923d0926a31ec4185f6f10a22de1840d8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "2c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a969cf06ec193d0358c31c8afad5bbcd547aa0657673b5bb10a44e38c372c44cda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef5981cd58c469d4842aa56f101a76a4447dba55ab7a128197943d7701f95f2823b7ec1fb3aca1c665feb629f75b86bc6796ed5eb830658d68574ea157b89fde9"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667e3c1aa8bd39d6182a2299f940d076e52caf4ade4a085ff8961d11623e68188872b08559f184ac3ac9956d54e492d7f98285a254bf010e00b63b6bbe75054353b7ec1fb3aca1c665feb629f75b86bc6796ed5eb830658d68574ea157b89fde9"]}}, diff --git a/txscript/data/taproot-ref/eae7770e2a494f15bf0e76460740c8d2e1cbd22e b/txscript/data/taproot-ref/eae7770e2a494f15bf0e76460740c8d2e1cbd22e new file mode 100644 index 0000000000..0a8d71d1d2 --- /dev/null +++ b/txscript/data/taproot-ref/eae7770e2a494f15bf0e76460740c8d2e1cbd22e @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1d02000000a05c23cf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e70000000024c7cacb02189b38000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df979722368987a8344a32", "prevouts": ["0e0e270000000000225120d822e1bd1f5ea10d0aa44b8067d00045600d13617c1c35db91f3c0990a68d49e", "ae3f1300000000002251202ba931d41ccae6aa7348a9ccd120452bafbc02325d8b1badffbe10b3b20f3d8c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09021ad436a62d53c1e9319a4ce5c1f22396667078af1f47c4295f505e3f973743d30ee347cda830f26acda70755c08fe8fe809efd6bf4d50fb50bb6cab9862d692f901ae3b974b43b1a3509f3b5a6305047a85308f2241784bd16da924f98f87441592e7090afa233f3924b55d0ab8345968af770b69dfc48c8cab765a259fecb5a1c15b649498c70f518e51b9314474a30a13b53e9a1019ef417e2f59a4ec649043913cfed6dd77dc54554304778e1596bb7747a68f5ffb9a351652787224c93546bc081171e714bd6464ccf1ade083d261f187d437347b1070252599d748940d79bd76da40515e08b87ccfa60023fe737bee305572a2fc9e6c177d68afea91503bb63b7ec19570ea0f3c02fb839f9146b96a230bb94dd9a7c2b2ca6c6553f0b4c2af42e56face25fc9395285df0a794712bb7dff2d372032f836dca409b5471263a02ebc504f781424bd16510f596de58555c2439e1f0ed712522d71506c32e5d9c964756eaa8a2f091525b5f8cd129d00f7f89d68170159159f5159742c592c36ec96afdf51d788255af1c796d1b5e67dc4894fc1a70814d04190ea9b0c50a61d73182f02f23c7bc47a509cb0d7621b7af18d7c4bb71ceaa5096371bf205f5ed8a7960d2fdb05b026261196c580377d61c36c349b4af12b2b95c666c54b115a0796dae0418854d5d3bc10757cfed63ecdbcaeb7e338e987d85eb7ba658ff5f38426511321a9c90f7bc75fe", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b65fb99ebaee40b89c75f91c70dc33c0629af8f94b6b045d23ce00b5520b0d89fd22261ee209e04df9662f52c9dcffd1f6e65f5b546fd3c131bfb02c186b05f664ab0b66352e66b5bf600abf31d1005c5406f4575b339026213ecb21a668977f"]}, "failure": {"scriptSig": "", "witness": ["4d0902deed117a70cbd602036c28373d45eb7eacc1729850a732356b2cf078735f228bb5dc16f032ff691f9aaefaa3332955f92a97507674d0f7b9b85b3850d0c1470082093787ce4c067d246ca53514d9519126e256d2e7e98dcf57577435cffee9d7d84ff3fe0dab92d2e8def38e12721755d17b7399cc07be1a89caabaf12b35df57a10e5c92e34989f5a0be6224e9568ebc8d6878f71e96003633177fac5b6e9a83b340a92170370da5e5757b7711188aaa7e5b87b03603a7820181ec0d95de1bdb2253c2db801ee942edb80d410a718077d922bec63c5b18d1399b3a1a86c5c5636032b93caef8ef2f74d21808ebeae118b386709b5b5f3f794f72e6ecce401a2762b29b8c3c66df0bcfb9256bbadbe48dd9dff8fbab1418eb225189c557fc67a0aaa9baf5a1b08545cf1edaf2a5c433a495316c3a5ef7a41064a21c45cf1396b2c934c1b486b58122c278524ada0e13f3cfc3c97c7cc8d0623b5fcf85deb1a820405f63fb9dd3b9fa8200c6ea621a3fde93e2ec514574b7b6fa01b0d8bb1f17e13c8430f11abc978eb1dd0a7a31943c8530861fa00112781e792087e25a455074616fd56004ca29d8643aafcd6b61fe71685d76dbb96e0ce3b953cb66e1bd0380122a1aa2717079f03d68aa095134663ccb99df295bf8717d2a0deb05e38431e7af30d25b8eb0cb0ec87c49c4c4fc18355edc6a83b816e22f6b5af6621cb3e084ffec8bf5986e0abea7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4dcc932fa7eab9febb69f8eb1775db86ae183d64bb0b86855f9228e743b2ec6db917e8250b412828d56f092e1d9ceabdbedccb5671620a7e05a1f5a122fcf72f11e45c38e8a62a0e5058038ea76117f85fe5d704aefa5d806bc1a7cbe3a990946"]}}, diff --git a/txscript/data/taproot-ref/eaee09f4a0e178165105cf2ccf81513fc80541b9 b/txscript/data/taproot-ref/eaee09f4a0e178165105cf2ccf81513fc80541b9 new file mode 100644 index 0000000000..ea57cf382b --- /dev/null +++ b/txscript/data/taproot-ref/eaee09f4a0e178165105cf2ccf81513fc80541b9 @@ -0,0 +1 @@ +{"tx": "0ffdd2c802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa301000000e046c88abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3b01000000c75831b90470e1e0000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac68aa0452", "prevouts": ["a79e7f0000000000434104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac", "da1c640000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["ec4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd4d99442df2d897dc88267982d8eb20b7dde930eaaf897e66f6a5ce7f7a19008bc5bddb1ae8a97e111feaf10767a648ae88621f6e3dc27f3d4b61f2a6f156b2a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d686773729ee45a24450fddb7da6d0266ea60d425b2bcaf3694e59ee80e6a1a3dddfc46016955cd26bcdfd077adbba0d60eefd6e0317def1b858595de21efb103b719bf4b6df334f4ad3966afd516fb2a8d294cb4fface4e4609ab1c9f988c5a"]}}, diff --git a/txscript/data/taproot-ref/eaee80bfbe65037b08eeecc39e40e2b8276a958d b/txscript/data/taproot-ref/eaee80bfbe65037b08eeecc39e40e2b8276a958d new file mode 100644 index 0000000000..5283649e20 --- /dev/null +++ b/txscript/data/taproot-ref/eaee80bfbe65037b08eeecc39e40e2b8276a958d @@ -0,0 +1 @@ +{"tx": "32bd0f0b03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7301000000a2d6c9c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a100000000c06b56c760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127000020000006321a4850146cb4d000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48709ff9333", "prevouts": ["03b67e000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e", "f22b120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "802711000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sig/flip_r", "final": true, "success": {"scriptSig": "", "witness": ["834991d8360f77f5e8eacbfb2dd7d75f47d7e3c31e3c59d47f21d6a50f84c8d39faf86705135d7e0acd121dfa01f6e118c9d093b26d8e923c829c9961f595d9c"]}, "failure": {"scriptSig": "", "witness": ["834991d8360f77f5e8eacbfb2dd7d75f47d7e3c31e3c59d47f21d6a50f84c8d36177dd7e4cd5d9b381bd755ddc4cf098a8e29a5bd0f0f0e7bb744408adfc1e1b"]}}, diff --git a/txscript/data/taproot-ref/eb0e20fe944dc77d38b2fc2582d02c80d3d9628f b/txscript/data/taproot-ref/eb0e20fe944dc77d38b2fc2582d02c80d3d9628f new file mode 100644 index 0000000000..deee2387a1 --- /dev/null +++ b/txscript/data/taproot-ref/eb0e20fe944dc77d38b2fc2582d02c80d3d9628f @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2701000000e971dabd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e601000000fb959bc7028d473700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a660000000", "prevouts": ["241d270000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "0c0a1200000000002251205ac64cb5aeb40708d1f7499406291fd8487a0b8d6b028f8783495d150925a7bb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "e67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9b5783d82402a6ca1f9b43e9c3fcda656bc8f4fc44d071b6c51ae46a253cfc5e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e824d900ba5429999a9d5e0d5b2b257ef1523eacccb529e56e7cf347f802d02f5093d03784866e2fdd94d7d1b7c12b1f0da96746c05c19b8696f0ac6a701ba8135"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366a6713437001d677a136bbd3fc0158159f58de7b5c6a1fb5a4ed17480094b62285f665641dd2adac3083650f9d93a4e0ff6d52a887a3a3677c2728d09852a8a99d11a7792f25f0da70e8485da42647201d1062d1bd001b767f1b05dec6877400"]}}, diff --git a/txscript/data/taproot-ref/eb372b84ca640e23188861d0efa04be45ee5f243 b/txscript/data/taproot-ref/eb372b84ca640e23188861d0efa04be45ee5f243 new file mode 100644 index 0000000000..8603e79b81 --- /dev/null +++ b/txscript/data/taproot-ref/eb372b84ca640e23188861d0efa04be45ee5f243 @@ -0,0 +1 @@ +{"tx": "e7e3b9f90260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c80000000068e24fd8dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9200000000b1a782c802e7456700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33e6a42c", "prevouts": ["d19c12000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe", "fe5b560000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "937d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef65737139d8cb51b826e6105ecbce8352aa10f0d50686f2268ca6d7900ff7d4462d371a9b01f30ea116c30e8195d2d6eb7c97c8692c0c95de95a904f83b96ad4"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e88b73eb14a8afa044a1a6f0495df635bb2745ae30a5fce84d6222f661b17136fd6f60e166ab3c31d6fe53c0e4c47c333102fdf48f7428a1dab907384d3ec09a32"]}}, diff --git a/txscript/data/taproot-ref/eba9b48ee4b2ed1d213ff803ba46409241800f53 b/txscript/data/taproot-ref/eba9b48ee4b2ed1d213ff803ba46409241800f53 new file mode 100644 index 0000000000..06331a9d2d --- /dev/null +++ b/txscript/data/taproot-ref/eba9b48ee4b2ed1d213ff803ba46409241800f53 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4de0000000065ee38b08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42b01000000779fbafc031c5471000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987fc040000", "prevouts": ["a15c3f000000000017a9144582b7676ffb8c3a2735b8e71e172a272e3e33c087", "af4434000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "215a1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "witness": ["008cca768bb80d31843d8ca0979e53192231a3c965cd8573f4fb822896e85d7ad2957dca3b910c03486750e7923d63faaff2223f617f604bcef4d53f1f51186d"]}}, diff --git a/txscript/data/taproot-ref/ebaab3cbf799854c56be5ea1c8570b79e12530d3 b/txscript/data/taproot-ref/ebaab3cbf799854c56be5ea1c8570b79e12530d3 new file mode 100644 index 0000000000..8151a63e87 --- /dev/null +++ b/txscript/data/taproot-ref/ebaab3cbf799854c56be5ea1c8570b79e12530d3 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c452000000003b7dd6d08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41501000000cf2ca79e04c0e7650000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e702dfca59", "prevouts": ["4fb5330000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9b2335000000000017a914a7d99db8790799e567017bcc9951f7f968dba70f87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ca", "final": true, "success": {"scriptSig": "", "witness": ["a0f00d6cfeb7232a691f0b4cf5b04549ce7c7572d39c059f9d59628de33704911059a1f337e9f2b018e186081c7cf7e05102c78f3e49650f2bc272cb47f32e1b81"]}, "failure": {"scriptSig": "", "witness": ["0b5b72be3d24ae132681bfde8ec47d85c7baf8f1186e01a58f415295a2a0a89530aaf42be4ae1f4617033793b95600f531d4294b7b325eb3fcf896042307677eca"]}}, diff --git a/txscript/data/taproot-ref/ec0558d3bd9826dcf5a547231702b26bb029d5b3 b/txscript/data/taproot-ref/ec0558d3bd9826dcf5a547231702b26bb029d5b3 new file mode 100644 index 0000000000..dbf2582eb7 --- /dev/null +++ b/txscript/data/taproot-ref/ec0558d3bd9826dcf5a547231702b26bb029d5b3 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1b0000000022e6d7a8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc401000000b2de69fa047e0aa800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acb1040000", "prevouts": ["39ea810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2995280000000000225120fd40216dd29fb2eecdff7e4128bba3cfbee632fa2e745a84c0cfcf3475ca43df"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_5b", "final": true, "success": {"scriptSig": "", "witness": ["ba3b0ebe67469642f50db51902a0e1f5eec5fc64bd8288118523f2403de23e5bad9391ee55fc1da552c25e568d95398e0d709c78b78f2e04f8dc95a889d317c703"]}, "failure": {"scriptSig": "", "witness": ["1cebfa42f618d7ab09b669150af2d6b37e3f6f0dac9436c45197094568aa0183a3391348348341e268761460e4eeca8b264a2e5468e0a12c75db604f94630f685b"]}}, diff --git a/txscript/data/taproot-ref/ec11e48dae90b65ac226a309a6ab974cfc87474a b/txscript/data/taproot-ref/ec11e48dae90b65ac226a309a6ab974cfc87474a new file mode 100644 index 0000000000..b47341871c --- /dev/null +++ b/txscript/data/taproot-ref/ec11e48dae90b65ac226a309a6ab974cfc87474a @@ -0,0 +1 @@ +{"tx": "ae141b9f03dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bab000000003d92aca3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0d00000000851034978bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c445010000004f05579f031209c70000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e741700146", "prevouts": ["27c222000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e", "30c5690000000000225120216a7619bc8bfafa3d746edfaa5de0aae98c6d9b6031b40cdfc5f53f6bfe1b1b", "23df3c00000000002251209afd231cc3806be681d40ad69b07250c6c3c148fe648fcc127815dce6f5b16e8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "1d7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369cbf82e6b81de47b655febedbc15934cca8850242400ffe44c9c244a6aaae8fdc92cd4ecb05acffc69b3cce67f0fe15bd50aa9f87096dacf733b4583e5e3d147ea37f54c31b0dcd6e392a972a33f542af4c40de53091de86bbd5587895c52a53"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ea680f8e17236a8fbc1196317399c346aeca722ffefcaac5ef62e17ac4625d25b4bb2c7d85af23cd06361a8d9967d47c0827d7b479cd52e2216fb2d12a2ff38bc"]}}, diff --git a/txscript/data/taproot-ref/ec236a1ba693a15d7cd145cb072b03a9edafd25d b/txscript/data/taproot-ref/ec236a1ba693a15d7cd145cb072b03a9edafd25d new file mode 100644 index 0000000000..4f5726ff72 --- /dev/null +++ b/txscript/data/taproot-ref/ec236a1ba693a15d7cd145cb072b03a9edafd25d @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f100000000f59b89c58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49700000000fbb20ce604dacd49000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc88977143", "prevouts": ["5b30100000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "0b153c0000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364e1c80865788996a05c5a9f6b0900b0096f6056de983ef887886ef5950a10b0c0d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3ab0398bc4828dee75def1007ce877d708ab4ca86c9734bfab291d4bd05bae3eec1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4aede7f6feac32430a03a6fb4ca18c03b66145006034584e3a19904465ea1e66424cf807c4b041deab506320299ff116921971164ef72b2742896e58a89a98f91cdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}}, diff --git a/txscript/data/taproot-ref/ec2d9171350303a508d3a35306e1da95e2d45a8c b/txscript/data/taproot-ref/ec2d9171350303a508d3a35306e1da95e2d45a8c new file mode 100644 index 0000000000..2141241fbb --- /dev/null +++ b/txscript/data/taproot-ref/ec2d9171350303a508d3a35306e1da95e2d45a8c @@ -0,0 +1 @@ +{"tx": "7fe69d4d0360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706601000000d2634dff8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40401000000a84fafc5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0002000000b17c94b301c64a37000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48713020000", "prevouts": ["0a4311000000000022512023961a2514901a699ec375254af5daca285299be5db377524e8c4f227aa80aab", "feaf310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8d227a000000000022512010c0a77c04a6b5898371cb41f56ff3be56bbf4ef28e67a70faaf4ce5d87e562e"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["8e", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d512a2ca63ffb455d99d5e48d0ce26693d60c39456d7af39366f9ddaeb418e2954f33cd0b31c9bc4dfcaccd89caa263c020d1b70f58e7e0e884ce19a773d6b5f30b2981ae69232c3f6c5ff759e9ad4102f31f3fc5e7a3a4ffd34dce2e2e06026"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045df5339745586104756c1fc6d4b54e2b6a7d81daf8b03d1fc2a4a51881171d1a3099eb053c54d8f72c6d7331f9a1bb3bf1b628df692ad9b7eecd4e01f4a47bb5aed4b6001a8fdeaa28275cc8a939e32dd3c3fbbfbba5c677bbce429d0c1a1675d"]}}, diff --git a/txscript/data/taproot-ref/ec3dc1b7325240192c1e37e75c29831fa68e98d4 b/txscript/data/taproot-ref/ec3dc1b7325240192c1e37e75c29831fa68e98d4 new file mode 100644 index 0000000000..e09a66e44d --- /dev/null +++ b/txscript/data/taproot-ref/ec3dc1b7325240192c1e37e75c29831fa68e98d4 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270350000000098af0dd360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701f00000000ce699485013f66180000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e77b030000", "prevouts": ["54ae1000000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "fe110f00000000002253202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["ec706e6205a2d2f4858924a5688a6a1063f32ceab6133572aaa27d1da6be3d420df0d865f9aabc3f9efa2ca71feaf638b96c1c3a5c2e66d4474fbfe5471820d4", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/ec4c99541792d43b2c11d31a995e9d4e6494735e b/txscript/data/taproot-ref/ec4c99541792d43b2c11d31a995e9d4e6494735e new file mode 100644 index 0000000000..da5e5c3c27 --- /dev/null +++ b/txscript/data/taproot-ref/ec4c99541792d43b2c11d31a995e9d4e6494735e @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705800000000d62312c4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e01000000c89799be02be4f63000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca4226936", "prevouts": ["69e00e0000000000235d212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "ced55600000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "483045022100b7da1733a408d387bdfad13a62e1e4790313d9eaddea89f8b07588dbefea6c3d022055dbdbbdc8f09652590d5551affe85bf7b4ea441afe925b3585f63e008e40570824104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "47304402207ac9f2de3e9d9c53bfbc1e22ffeb93c2f14a38f3f022c1e3f3c0d8a63fd47fc10220286a8e54ad5b85f671dd214b551b08b973c5b4ddc9d3b04ce84c9a168f9fad40824104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/ec5f10d715ff4121c9af8001b65d91bde62f884b b/txscript/data/taproot-ref/ec5f10d715ff4121c9af8001b65d91bde62f884b new file mode 100644 index 0000000000..347634aee7 --- /dev/null +++ b/txscript/data/taproot-ref/ec5f10d715ff4121c9af8001b65d91bde62f884b @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfff0100000064056d8d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700201000000167321d8034e0186000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb31b4546", "prevouts": ["9f5278000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "368c0f00000000002251203dc2472455090bb3a6b10d2b5a6f86a9b76268c5f2a3511c1c846486e45d4259"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6a84", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0821ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900459910ef1376b2f57d6157bb9e8c31b4bd4b9d07432c4b683bf27102948dfaafec7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fd5c0d5bb068ac75772b5a2ef9617f963c08904a0623a1a21cf299a7cded424b120199479ee6d2d4c88363683365d3fc0e890ec8511afbf0335c75bda2c0295827135a2a7712dc4ffb0f490ef0a9e18994dae8053f69b06dfd6a349e2375b7df7644b3dbe2d9311c88339dffa1c0be80a46778a5837645266f0e84452a246701"]}}, diff --git a/txscript/data/taproot-ref/ec7ac5952f631f170c9cf5ab7afb10a2800e3be7 b/txscript/data/taproot-ref/ec7ac5952f631f170c9cf5ab7afb10a2800e3be7 new file mode 100644 index 0000000000..d52e402cad --- /dev/null +++ b/txscript/data/taproot-ref/ec7ac5952f631f170c9cf5ab7afb10a2800e3be7 @@ -0,0 +1 @@ +{"tx": "ce0f492d02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be2010000003249bdd560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c501000000dac634860214d03200000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88aca6414d55", "prevouts": ["f6a9240000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78", "23d00f00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["cc4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688e21e0ba4623d9f1238b4cab1fe6058b8adee7f586c209e41396c5ed78664fb1e80b1f8b709fd7e9f8915460d72d278aa0d12452680dedc295e1cc62d069d9c5f8b38696f7f521c781f821b55aa4ff86c04fbebd102ad129a9d47907becd36b4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe06075904b2d09b06d544283b5ed7948355e691785c7b3e1a952a1a705151fec890db8e530b3b97e91b56063afadbbd8e6ac326e3356562c0a5ff1591f041d611c8e78922f12cf5b391747592eaf9e84d545161f4f09ddc8c51091bc04ba49d4e19d3b2ec28c8925d54c04f383936b915813fb16b738060565344c47074fe42"]}}, diff --git a/txscript/data/taproot-ref/ecc052cec3d69b0b941945fcfee7fcca160fee0f b/txscript/data/taproot-ref/ecc052cec3d69b0b941945fcfee7fcca160fee0f new file mode 100644 index 0000000000..c56090d149 --- /dev/null +++ b/txscript/data/taproot-ref/ecc052cec3d69b0b941945fcfee7fcca160fee0f @@ -0,0 +1 @@ +{"tx": "77f1ef930260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d8000000007f6b15fadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7801000000785a0adb01d6d25800000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac0f040000", "prevouts": ["0be812000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "b5ed5d00000000002251202b9c9277757683e3a6231ec9844202804510fe71120186742480ec3d3f4624b8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "907d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ed16c11561cb4e52cbc61ad76d34e49a6feea77f682efcf50ee22f89bd1fa0f0da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71eccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457ba4f11ff80ca9181e3d85997fa959accb8f97af45a52bfd0df916797673441f5"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa51b810e60c043042e0bb2eafa8cecc8c22fa830d489bdf7de51e14fd273b03e0ba4f11ff80ca9181e3d85997fa959accb8f97af45a52bfd0df916797673441f5"]}}, diff --git a/txscript/data/taproot-ref/ed414b2d37754fddb26883baa6399318c130524f b/txscript/data/taproot-ref/ed414b2d37754fddb26883baa6399318c130524f new file mode 100644 index 0000000000..d34b2630f4 --- /dev/null +++ b/txscript/data/taproot-ref/ed414b2d37754fddb26883baa6399318c130524f @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ceb00000000ba7843f08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b5000000008141d6b70267698d000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966df5ad4e", "prevouts": ["fc6750000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838", "81bd3e00000000002251204f36246572598982690fae3c78190d13eaf0433be2e576bf73c1db563e0893ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "c77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936685ceb4100efa5e54cc068990ea9a5bf606617cab6629ff60e87e062a72f36c14639ba4332756735e08e9dd0c9395e600a8a67669bda3acb22644b013566df80a9fad2668c863ea9bd6dd9197c1c49c61c2b9d7888bac8bf6fef03fc3ace0a5a"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ef01d0d256ad0d229e53661481dce388404558ec2529e0bc1d85e0261a585159aa9fad2668c863ea9bd6dd9197c1c49c61c2b9d7888bac8bf6fef03fc3ace0a5a"]}}, diff --git a/txscript/data/taproot-ref/ed5648d424b5a21a684d02bc55bdcfab06ec276e b/txscript/data/taproot-ref/ed5648d424b5a21a684d02bc55bdcfab06ec276e new file mode 100644 index 0000000000..26154edec6 --- /dev/null +++ b/txscript/data/taproot-ref/ed5648d424b5a21a684d02bc55bdcfab06ec276e @@ -0,0 +1 @@ +{"tx": "7712fd3c03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc600000000fa2131a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3a000000004f6247e1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff3010000003fb10ede01318d5900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac50880832", "prevouts": ["21d5720000000000225120d8356a7a267600b4bf6c9db376097dc60a7f0eeddcdf6366770ff3523c8fa4d0", "a3c12000000000002251204e4a8cfe4f68f657f81d61368182a9dc3b463ed6fb97449e34c0870f4967da87", "1de070000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ff7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936422350ecfc721a5c21c0cf4040c9c5a64d0462da5ea720aefe426d2501e13eb1f27794099b656b9faa6b5043ba50cab982b2292ed8155b5f0f6568a958ea63ad187b9e30f7e626b28b6dbe2d7b101f74e326290698090dbb0a7eb7a50daae87a"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361c0123a470b1883e55ff9e366e23b08502d89d95970981457b7d383b3cec07169987eb7009ccae8c65258c62e5eac53ed5016922d24407b897adc5526f33b91916c082ffd0388de178727289f9edc245ed8244bc4e4186d1c7a66ea621fec0ad"]}}, diff --git a/txscript/data/taproot-ref/edb0a385324372442f7d831b7fa747c2a2ba5d40 b/txscript/data/taproot-ref/edb0a385324372442f7d831b7fa747c2a2ba5d40 new file mode 100644 index 0000000000..1364ef5f22 --- /dev/null +++ b/txscript/data/taproot-ref/edb0a385324372442f7d831b7fa747c2a2ba5d40 @@ -0,0 +1 @@ +{"tx": "c44943fd0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705e01000000f83269838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40f01000000d07eb1f80331d14800000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc15bca94a", "prevouts": ["76f80f0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "dad43a0000000000225120c5051fcb1fbe13589a66714c26f344d0ddde4ff1aaba22c9e96bf2d553f61a5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["c5", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5115f1aeabcd45f20884fa261b27121b1c083fa5a2716bfd01069fab98e18c3b0e4b23f991898c0f7e80b32f00b838c1f1514616fab2a47083539335b67c2689fcce4d7767c8a9637a0804b073b1eb172c67de67ce152ade33f2591a85dfee2e5a"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936811133f2935f27641e5de866d6b2526674271c11378ecea72e02f5c1283f85606c8f4b27179de8a3c9fbcc0ecf825a44b7564122e0508108d3381c6acb047da700a5530ec2a7d4ba868ec61eef99b13bb3328da6d520ee28822b8288bba3da4c"]}}, diff --git a/txscript/data/taproot-ref/ede245d24c4ccbe651f556667d1de8b18984e6bf b/txscript/data/taproot-ref/ede245d24c4ccbe651f556667d1de8b18984e6bf new file mode 100644 index 0000000000..86aad37fa3 --- /dev/null +++ b/txscript/data/taproot-ref/ede245d24c4ccbe651f556667d1de8b18984e6bf @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff201000000a1f5ede7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf510000000013f48da304ee0ee2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e727585449", "prevouts": ["1d666800000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "adb67b00000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "ae7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ee4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8b509ab67bbf3c81955fa9e200008a666546f84b8be37a00b57f87c80ceedbec790189ee9b6b94816743a58868693b6f0ba58cb07e4c6d5ed2ce590077e887d5b"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ba812021bec55125a4043e092087428314c694c64b021517d83eab825dad5a3d31f1765c4043c65869fc44409698468cef1d88a3aab3981df946f88d25a1c2d5c67b1d078674a4d97323398e107b13ccefe9299bb9116e21f935c64f37bba24f619c7e3fc3d0f43b284295c7c76b7ff66dfc7bbdbc495ce3e8e20608c97360e5"]}}, diff --git a/txscript/data/taproot-ref/edf48d71ea536f47f2ebae0ef4c1a54805cfd2bf b/txscript/data/taproot-ref/edf48d71ea536f47f2ebae0ef4c1a54805cfd2bf new file mode 100644 index 0000000000..20f839dfe7 --- /dev/null +++ b/txscript/data/taproot-ref/edf48d71ea536f47f2ebae0ef4c1a54805cfd2bf @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf9010000001645c582dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1802000000937c02e50338aea400000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a62e010000", "prevouts": ["a5fd570000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5", "f4774e00000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "b67d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936377fef4062e93837ddc7af9cb3191f24f01157283f139309bedbafa016e9f95119cfe9d552d59ccbadc4f3846c4b5c3686f3389826ed032a892d1ca338e6ba63ca37f8027c2c0b0d436eabba5be8b19fe8a47d5b17abeebfa31c0139f25f704791244d1d955381053a5c36db6928ef13bb9242569ee84b58d7018329936aac78"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fd848df663f65f0e27b2d1567423d7462b229bee90dcacba8c1bf1c1a66aca7f6821d9a3f11774810afeba87c9188100d693899e640a37210c96e3be6a00ac01d4"]}}, diff --git a/txscript/data/taproot-ref/ee216fd86ba1f2f2eecc6892dba069f1fa7e2566 b/txscript/data/taproot-ref/ee216fd86ba1f2f2eecc6892dba069f1fa7e2566 new file mode 100644 index 0000000000..c92bd64675 --- /dev/null +++ b/txscript/data/taproot-ref/ee216fd86ba1f2f2eecc6892dba069f1fa7e2566 @@ -0,0 +1 @@ +{"tx": "a812a8340260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127011000000001b84d5c560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b90100000047458cbf0119a31f00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acba000000", "prevouts": ["7909120000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "c8670f00000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["ed", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08220e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e179a506f75037c50a9ea9c509d8c41e46c95fdf651773b41e5feb3da8f515025ffd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364239bb564bb88fab9cc8a68fc985ce74d0a60efaac94a2193d617d4650dce2ca20e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e179a506f75037c50a9ea9c509d8c41e46c95fdf651773b41e5feb3da8f515025ffd4cde6e083ceefa41c970e7ff247f88d4db270a866c6958487024deeb358702"]}}, diff --git a/txscript/data/taproot-ref/ee227dd2c697b5ad500c732edea24bd9f2ec08a7 b/txscript/data/taproot-ref/ee227dd2c697b5ad500c732edea24bd9f2ec08a7 new file mode 100644 index 0000000000..f0478cfb27 --- /dev/null +++ b/txscript/data/taproot-ref/ee227dd2c697b5ad500c732edea24bd9f2ec08a7 @@ -0,0 +1 @@ +{"tx": "ac8ef70c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f500000000cd6aca99bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1002000000166066d902baef900000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf8000000", "prevouts": ["a32e1200000000002251205e6805afb6d033a5c8eef8d51c29124f559c62b172323155929ced7c3b8e8a62", "c53281000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "387d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fafbb5a1fe7b9516d3f9237414125c5ee80cc77ac3c2791cf19c93edd24acc7f158fa601fcc68a78472d280e0a6f10ace0c22dad9ad93c154f995d1132d7b2f793"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8f5321bd3c280560a6e93f009006b65547a58d72ede42c89f2f760c3bf47a1d1aa12168afdb4ef286e7748ddb08cf408d85b089f504486378d2bfb535c0d2875b"]}}, diff --git a/txscript/data/taproot-ref/ee39d37f93b56b4c318cb83ca60e411ee5c1abbb b/txscript/data/taproot-ref/ee39d37f93b56b4c318cb83ca60e411ee5c1abbb new file mode 100644 index 0000000000..f2240b1bdd --- /dev/null +++ b/txscript/data/taproot-ref/ee39d37f93b56b4c318cb83ca60e411ee5c1abbb @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127052000000000b665d8edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c200000000084914c6603c36969000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7a37d794a", "prevouts": ["2f9e0e00000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d", "ceb65d0000000000225120ef9f6a66884775055065a73b34ff9ec529e6bca309e0ee5458de4d1e99086d65"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["df4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936be89d319d8869e9bf9ae746cc5e400e37fd9a102b3c132ccd07930db67bce60a51d880cc047c10a424f65fe9dd9096492f3efd8e08517d04362957faed36c3f852ff338358c59a252efd0a17af70f1cdfe194eb24c5d50483b26343bf89011bf"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365bf630a53e970a0c3ed444d8048d7a9defb53d27fdc7ed055594eb691fbb1ea35385991a3000310359e2a9adae84589f286ca8f4d4476598a0e772bdb8ecbe6352ff338358c59a252efd0a17af70f1cdfe194eb24c5d50483b26343bf89011bf"]}}, diff --git a/txscript/data/taproot-ref/ee4391649d8b6cf1ed2a18eef419b54a19d2f481 b/txscript/data/taproot-ref/ee4391649d8b6cf1ed2a18eef419b54a19d2f481 new file mode 100644 index 0000000000..f9f283c7ac --- /dev/null +++ b/txscript/data/taproot-ref/ee4391649d8b6cf1ed2a18eef419b54a19d2f481 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ef000000008cdb3d2f8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4740100000070de6b5704c11e770000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7d5000000", "prevouts": ["21b33d00000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "6ab93b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "ae7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360ef4bc0489494d72e70e64b388972e514562ef0f037a1295f9b046f981a6c54ffc0ca702511f3076acdc40632b43a1d65714ee25a695072e4ff6818d06cb6b94619c7e3fc3d0f43b284295c7c76b7ff66dfc7bbdbc495ce3e8e20608c97360e5"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8acf455c5d2fad677c631ef590e33b043ac89ad327665e6cf9d96250341867de4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8b509ab67bbf3c81955fa9e200008a666546f84b8be37a00b57f87c80ceedbec790189ee9b6b94816743a58868693b6f0ba58cb07e4c6d5ed2ce590077e887d5b"]}}, diff --git a/txscript/data/taproot-ref/ee4b75d279f94af5208664797cc453ca45044806 b/txscript/data/taproot-ref/ee4b75d279f94af5208664797cc453ca45044806 new file mode 100644 index 0000000000..87e4b22329 --- /dev/null +++ b/txscript/data/taproot-ref/ee4b75d279f94af5208664797cc453ca45044806 @@ -0,0 +1 @@ +{"tx": "dc7f15740260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705f0000000035065d94bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfce01000000f213c3dd049fb7800000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796be95ab32", "prevouts": ["b8bb0e0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93", "cab3740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "747d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdbf4492fa00dc56072e72009d776219274bea6eb51adb458249eab71940c27cb4bfbb1ef2412aee06f4b75b9e20a72d4d9707545a4ae77abc538f76b00105406a"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936740c20c98eb602ae4e7ad05a38b8b2af7b596435455e1533be50f503dd72332ccff906089186a2156752da0c3c16267cbd92a27eecc3bf322cbdfb883eaa82d667ed562df09fa99b9816795ca593030d6e2a26df3d36427b327259a2f453cdc8077aea6ccf316b47e40a0e3636c5ad4f7738b9bfce630d4a478a0dbfcb51ed93"]}}, diff --git a/txscript/data/taproot-ref/ee537050d4b74465e99c77d79aec50879344edb4 b/txscript/data/taproot-ref/ee537050d4b74465e99c77d79aec50879344edb4 new file mode 100644 index 0000000000..f6c1b0bd5f --- /dev/null +++ b/txscript/data/taproot-ref/ee537050d4b74465e99c77d79aec50879344edb4 @@ -0,0 +1 @@ +{"tx": "ce36f33a02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce1010000007e650397dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfb00000000bd1a57b903916ea10000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374872b040000", "prevouts": ["e45c4e000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529", "90e355000000000022512009252952876a5c13cea12f753600009323d5e64530eb665ff4d131016b9c0911"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f8e3d1763d4a4427ec633b67322f57c129a5e80babf61dc89134b834a86f0eef"]}, "failure": {"scriptSig": "", "witness": ["6a0d616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/ee666d81fc0411dbdbf38406d49ba05685bee495 b/txscript/data/taproot-ref/ee666d81fc0411dbdbf38406d49ba05685bee495 new file mode 100644 index 0000000000..060c1c790d --- /dev/null +++ b/txscript/data/taproot-ref/ee666d81fc0411dbdbf38406d49ba05685bee495 @@ -0,0 +1 @@ +{"tx": "fea3974303bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfaf00000000f2daa1b1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7200000000c374aebcdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb2000000006b51dbf6012250b200000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac38d83e24", "prevouts": ["447672000000000022512049509520b0f91b1265a5e49cd83a9b0f9e0f493349f712cd14edd64d1d2ac018", "be8e1f0000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "cbfa2300000000002251203dc36bb5a2188e61583976906c69e4e1213b5b3aef7eaef25acff80132ded84f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "cf7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936684835b9029b5ef0cdd410a4153383e35a43fd71742849ee7102ccebce63bb580309cb272f305cf5bf6862d0b37519cb4aa2491edaf37578d4af3081a91facd0fe03d403be23d34fe95cd8ea927043998b4b921fc49b039e78905cbd289b8eab"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b898d7164c63521d871163a04709f05e318ec8f97be239ce787baf514c9e3f692e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdd6c4167c25132c432c9175336dcf34ec1853eafcfbd891c58e0cd045b8bc4542"]}}, diff --git a/txscript/data/taproot-ref/ee92d4d96303e7296f561d5b3efe262b3993bc85 b/txscript/data/taproot-ref/ee92d4d96303e7296f561d5b3efe262b3993bc85 new file mode 100644 index 0000000000..17a6d1d9b4 --- /dev/null +++ b/txscript/data/taproot-ref/ee92d4d96303e7296f561d5b3efe262b3993bc85 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4de0000000065ee38b08bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42b01000000779fbafc031c5471000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df979722368987fc040000", "prevouts": ["a15c3f000000000017a9144582b7676ffb8c3a2735b8e71e172a272e3e33c087", "af4434000000000017a91405311b2c9f444185bafbe03a9610c5d95324a8c587"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "47304402204f1d0d1e42bfdc4758d48e17bed4509f062d62120e3f8ab50c70ca8564f380e7022069597f4706ae7a4259dbcc96a399168e657bc7a42b34e21ab8b616c2e1b18d35162102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}, "failure": {"scriptSig": "483045022100e734e86cb7e802dcdb76f77171ae3b06125cb261ccdb83d0a602d21be45c5b1c02202a8dc1f656029e582f0765533af65eea98ec9525edb093cf7ac469f4637730e5162102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc294041976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/eeb6e1a4eebe04ce7814c38efaf8b5b7e910296f b/txscript/data/taproot-ref/eeb6e1a4eebe04ce7814c38efaf8b5b7e910296f new file mode 100644 index 0000000000..dd86ad10f0 --- /dev/null +++ b/txscript/data/taproot-ref/eeb6e1a4eebe04ce7814c38efaf8b5b7e910296f @@ -0,0 +1 @@ +{"tx": "05439dcf03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce400000000e23122ffbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2801000000445b0faddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5e00000000b41645be01b3ac85000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487d2010000", "prevouts": ["5f875f000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "f27f6200000000001651142540f27e90740933c99d4f17ab2dfc6c82951cfb", "90775b000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "3f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa76a51402fc917873b776340a7337d6d9d98f28c38cbc7d5e61e594cad9a2611aeebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7acea811edfde1d836b623c2094badb4ab8bc7795b2b49da5506600222f32ea3fbd"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b75c051ccf245b031e4900985c151ba997c96374fffdfa34044d40aec7c89fced874772a13c5a1227fda830887213a5c965a8abbda46e6162f44fffadfc4d1ce03985aa46dcbff8b0495de750bd1afe74a661312f7eddf1146199ee1ea8c08aa"]}}, diff --git a/txscript/data/taproot-ref/eef8d1a1e8c3a9566015b3ae089052a50d3c3ddb b/txscript/data/taproot-ref/eef8d1a1e8c3a9566015b3ae089052a50d3c3ddb new file mode 100644 index 0000000000..67f7d6ba42 --- /dev/null +++ b/txscript/data/taproot-ref/eef8d1a1e8c3a9566015b3ae089052a50d3c3ddb @@ -0,0 +1 @@ +{"tx": "d2c4031102bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe40100000010467ce9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9901000000770146d6038921dd000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac0b000000", "prevouts": ["11f6810000000000225120b52a77e37c1fa9b4a7b934796858277b8dc346396dc90993eb725a9563cf0842", "b9f75c00000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "e07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dc752bbc00728dc9fc97a524e5c00d8fa73d20f44eeac2a564eeea9db1553afc3bc00f369fc994f47536ced64d5e4f722a68c2ed1128957c24de4b5158af0ec63ccd0bea79832f66dcec0cbfd0592e3eb2d999b46ac697170d667eb8939a9687"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e73d9d375b530aa22fee240902ecc7793689bdebd58e9771ff3d6e92b1aa7f5c13ccd0bea79832f66dcec0cbfd0592e3eb2d999b46ac697170d667eb8939a9687"]}}, diff --git a/txscript/data/taproot-ref/ef1b9627be8307d947f73d84910a2d343187898a b/txscript/data/taproot-ref/ef1b9627be8307d947f73d84910a2d343187898a new file mode 100644 index 0000000000..43d34542c5 --- /dev/null +++ b/txscript/data/taproot-ref/ef1b9627be8307d947f73d84910a2d343187898a @@ -0,0 +1 @@ +{"tx": "0100000001bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc20100000010e708c30198f04c00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac7b000000", "prevouts": ["ea217f000000000017a91437a5c76a04bb604ad99785877003310ab74c7e2b87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "165c142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["32b47c5333ab0bdb401ef0771e332fae7cbe19fb0f1fd61b1ee0ba8d9e764104377679372d1753ab1662eeed7e7162abbe9daee6672e3f3b4096e69f23a3cb7a"]}}, diff --git a/txscript/data/taproot-ref/ef34d2a06ed043b1d7aa5c55d07e649a98e022d0 b/txscript/data/taproot-ref/ef34d2a06ed043b1d7aa5c55d07e649a98e022d0 new file mode 100644 index 0000000000..000c89e072 --- /dev/null +++ b/txscript/data/taproot-ref/ef34d2a06ed043b1d7aa5c55d07e649a98e022d0 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c040000000044ed024cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bef00000000056c24ad01f45650000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748779000000", "prevouts": ["6a234a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4a73280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_33", "final": true, "success": {"scriptSig": "", "witness": ["f69218b245e6d49856976d83ce63f78c38e160a2f6c7a89a3e51e36a4fde7c535e36278c50071bdd70dc96210e0e4fa632d3ff29046d29e73d51c340595aa9b582"]}, "failure": {"scriptSig": "", "witness": ["ae46da8fd6ee642b526973827715bf7b1704fc5b4f256c1f52b58e580e469290beadfc2b8cee52a7c88438c0cbe332a85479de6984f219a7551ca8c441ef460a33"]}}, diff --git a/txscript/data/taproot-ref/ef5018ccc4d868e150c22f85faea02a352f124d9 b/txscript/data/taproot-ref/ef5018ccc4d868e150c22f85faea02a352f124d9 new file mode 100644 index 0000000000..03f9d83bb8 --- /dev/null +++ b/txscript/data/taproot-ref/ef5018ccc4d868e150c22f85faea02a352f124d9 @@ -0,0 +1 @@ +{"tx": "1708ab0302dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1902000000fef83395dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb400000000292d34e70146f851000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87f4000000", "prevouts": ["dd835a0000000000225120cd05dc3ff800de37cb40ac9c54624c99f7c63a87a98064fe9a32a769a26ad4a4", "51594f00000000002251207c531fdbcbb17294861c2fe9842b59c23605dbbb4aeaae1baaa0907152d9a970"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "137d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cc2bf80b2db027afc6ff7c1eb2245c9e3cd90dfd08684ab7b931baf85a586a71155f23cd39ff67d8b5a6775be7b28a3d1b06bcb926a8f69937c20b78b14c2d485d0346f0de7f7080f7758bd86c81c482f81ad0c7703311f4b65ab9d7b77c9f00"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e048ad2721d56e7698732cbf102ae8e792035911a0ba8e4825f0ff9fa3590c070ac5ef61da5659d8214c667aee1dbe4febf87286965cb6fe696f5c1a17be3da5155f23cd39ff67d8b5a6775be7b28a3d1b06bcb926a8f69937c20b78b14c2d485d0346f0de7f7080f7758bd86c81c482f81ad0c7703311f4b65ab9d7b77c9f00"]}}, diff --git a/txscript/data/taproot-ref/ef588660a2f4df9f52c4f476036ae92b435dd8be b/txscript/data/taproot-ref/ef588660a2f4df9f52c4f476036ae92b435dd8be new file mode 100644 index 0000000000..feec4cdf53 --- /dev/null +++ b/txscript/data/taproot-ref/ef588660a2f4df9f52c4f476036ae92b435dd8be @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6a010000003b24bf8adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2201000000fb57589c0357a6d200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcca000000", "prevouts": ["abbb75000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4", "64ed5e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_74", "final": true, "success": {"scriptSig": "", "witness": ["fcf934919cdbe5f3ba3a8b3facc9cb916f783bf56cfde2e97ff99e236230f91e3814acf1db6ed634540a9480579bc6c2378e28e318629e11b33f7ee4e6361a1902"]}, "failure": {"scriptSig": "", "witness": ["74616d1f4d5320e99ecb85a5d31ea0e471d4b5a231eee74add5fd45fe458ddac28af1f35702ee9264b19842e4729538fa52d3a785134a19c2d754e6bbab8f37e74"]}}, diff --git a/txscript/data/taproot-ref/ef7b84160b7025ab4d29b8bb32de27500874c4e0 b/txscript/data/taproot-ref/ef7b84160b7025ab4d29b8bb32de27500874c4e0 new file mode 100644 index 0000000000..a6a4b09bb6 --- /dev/null +++ b/txscript/data/taproot-ref/ef7b84160b7025ab4d29b8bb32de27500874c4e0 @@ -0,0 +1 @@ +{"tx": "01000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46d010000007fc9e944dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd50100000032d28935bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9401000000353048d30172b24c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487ee4b014d", "prevouts": ["17883d0000000000225120639f61e583baa036c10ed0b3dae79674c76249899948b2504e8e1e0ca79edc96", "4e40240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c40a6f000000000022512026ecbdce513e5cfeb779eb6a118aa90fae67510c7ee9bff64af6ca27f9068c2e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_d9", "final": true, "success": {"scriptSig": "", "witness": ["a066227205a1bbd7f1256dbb9dd7b511aa14ad75eb539150e3a7935ff673829158ce809435082b747307a9e9a19b238e9ae4f6d692580dd13577c42c51fb183a02"]}, "failure": {"scriptSig": "", "witness": ["fec8a50f82c2536d588fb7f3e1e4ca4d55f1e482002678b2a62e6c69af97d2964840bc0ed4b26c6ee7f580c12bde8ca15382dc22b95bc3bb6da4c53c0d74a705d9"]}}, diff --git a/txscript/data/taproot-ref/efab9adce18cdbdd285db520ec08c755b0916a2f b/txscript/data/taproot-ref/efab9adce18cdbdd285db520ec08c755b0916a2f new file mode 100644 index 0000000000..fa65b35bf5 --- /dev/null +++ b/txscript/data/taproot-ref/efab9adce18cdbdd285db520ec08c755b0916a2f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc7000000009095a1b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb701000000a352ab8601a88993000000000017a914719f78084af863e000acd618ba76df97972236898739000000", "prevouts": ["dade750000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5", "ccbd280000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "067d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0823f226bc542f166b7ab1884d7601266c0b79ac59ceed404fe5ce2372ecd38c8cf9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ed1973e93f7ad3f562801731a237f358bfce42fb636b2a0dab3a823989e87b4ae"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93662b4c4e03f8bbc4e0fa6de616a7b17503976357af82c5e4ff1a693444fc6910b3f226bc542f166b7ab1884d7601266c0b79ac59ceed404fe5ce2372ecd38c8cf9a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100ed1973e93f7ad3f562801731a237f358bfce42fb636b2a0dab3a823989e87b4ae"]}}, diff --git a/txscript/data/taproot-ref/efb25951d890dbd071c4a3811042fdb8e0bc4326 b/txscript/data/taproot-ref/efb25951d890dbd071c4a3811042fdb8e0bc4326 new file mode 100644 index 0000000000..a7182ac811 --- /dev/null +++ b/txscript/data/taproot-ref/efb25951d890dbd071c4a3811042fdb8e0bc4326 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc80000000000ffb097046bf559000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac6ba81537", "prevouts": ["1bbe5b000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063f468", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828ef0ecf285bc5470eddb41e1019d9d697e32571bfa8271cd432e6dc81a28355aef31942b1858214ae33105eca3f0b2cf78e8df05a3972acf71e40f309e975162b655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a3aec579bf900f7619d434dfcb8a1ac75e7d4cc09e331d2b80b2acddd570caf1a416fde06d6dd90590ccaed91ef0bd8538f486647382cbeeca5e39ce4df66da0ee1e8f33acc088355c2f0e93e4abfc8ab0ff1ea986a1dad4f5112c46f486a1d1a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}}, diff --git a/txscript/data/taproot-ref/efb757b9644c060f72a7441ae9f0dbb05935ddee b/txscript/data/taproot-ref/efb757b9644c060f72a7441ae9f0dbb05935ddee new file mode 100644 index 0000000000..f62431e032 --- /dev/null +++ b/txscript/data/taproot-ref/efb757b9644c060f72a7441ae9f0dbb05935ddee @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfae00000000c465f18adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8c000000000e1ef5a50158f18b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6221bfc54", "prevouts": ["cd3b7a00000000002251209dabef6569bf97dfdfd6e4e18b35ff722d4022017cd06d2812750df0c019f7da", "c6be550000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "697d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facb7a7ab5fd71851d574a9c26887a3027e1173994a10fb9074a9680b95d402bf38dbbed29828226c3a1e74b431b518dca4e99f1ee054f76cd9b7bd5529b5cc8688de3449b5e2c621283b68ab187cecafc7aa77a8721601b5317d3484f84536019"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366514e2792df6cd73727562f46c93cd47aa533cf6032189900e3e0a43e73e7f3e7bbe6274b0dcd2777fc9b1075bd65318fdd52335751f1d5034a6ddc9c2a447578de3449b5e2c621283b68ab187cecafc7aa77a8721601b5317d3484f84536019"]}}, diff --git a/txscript/data/taproot-ref/efbdf30300adcc55d7c50d4ec76a75496d6d7b7d b/txscript/data/taproot-ref/efbdf30300adcc55d7c50d4ec76a75496d6d7b7d new file mode 100644 index 0000000000..4e5f2a44e7 --- /dev/null +++ b/txscript/data/taproot-ref/efbdf30300adcc55d7c50d4ec76a75496d6d7b7d @@ -0,0 +1 @@ +{"tx": "73092d65038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46c000000004658eea8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa401000000a7b39fe5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c450100000060837bf002397b12010000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a60fdfb23c", "prevouts": ["afe43a0000000000225120b5971b61c25a2798e5070f8744a1dfc2e930eb6eb2b95087e25b503f53923ed3", "7ec5840000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "ee20550000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_ce", "final": true, "success": {"scriptSig": "", "witness": ["a1ba71fb12e1b3fd60210c51e6470eeb527193c5f1446147d1dc9175529a5f6f6880a92cbbb5228be8b7b145657fdd7758e8165df245a2f34b2dceb9a654036282"]}, "failure": {"scriptSig": "", "witness": ["8ae788a5918aef5b26a2630292d83d6ee61bceeeb132e6cfd3705c729fbcfe6ed62ebae4a1e1b71047810ca1db32b62d792eb4b05aa22b63463944c10577f381ce"]}}, diff --git a/txscript/data/taproot-ref/efc4b323ebe3c0b9e2f2fd7168ab4437570a54e8 b/txscript/data/taproot-ref/efc4b323ebe3c0b9e2f2fd7168ab4437570a54e8 new file mode 100644 index 0000000000..f8c19f442e --- /dev/null +++ b/txscript/data/taproot-ref/efc4b323ebe3c0b9e2f2fd7168ab4437570a54e8 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0201000000a5902247dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b260000000016a000b7dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0100000000de383c3702a0e7a50000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4879304df5c", "prevouts": ["f2295f0000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544", "0b62230000000000235f212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "bbe224000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000083", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367388cda01113397d4cd00bcfbd08fd68c3cfe3a42cbfe3a7651c1d5e6dacf1ad1ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900458e881bd6493e98dc576a1c76b7dda488b188d283086ec2219562e3f5b97e3fb63f980255362d30444bd4a09dfd60422f4fe5b70b7cde78729ca8cd52cb50aace"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a08be2b61717d300e25a6886a484f941c3f7d4fe4b568cc8a81fab5ca3208b59a7f496087fdd0464c266da8b16ca4acd01559ec68405b54c53e2b4568db5223db0bdfd7fd43775a37ae3e20c8f8514aca25517db969733cf8d9f690f9b6d8ea23f980255362d30444bd4a09dfd60422f4fe5b70b7cde78729ca8cd52cb50aace"]}}, diff --git a/txscript/data/taproot-ref/efce2a5687afc47a9a7951b0d14a86559eccd8af b/txscript/data/taproot-ref/efce2a5687afc47a9a7951b0d14a86559eccd8af new file mode 100644 index 0000000000..b0dfa1ea4f --- /dev/null +++ b/txscript/data/taproot-ref/efce2a5687afc47a9a7951b0d14a86559eccd8af @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3500000000f75e818ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdf01000000a0889ad4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b87010000002757f8a404a146990000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875dfe903c", "prevouts": ["79b65900000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "221d220000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "80fb1e0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "47304402202087be73d02616120f30209b25a1a1206d400ae632fafb4dbc13e48a14d3ccd302200a83c42f237aa800be508ecc687767cfbe849b2d5e4bd28c219a4e5e1c3092b2822102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}, "failure": {"scriptSig": "47304402207f105f2f348b02fb97457b6804d3e6d5d718370627a1b742049ea3ba452a70d0022031b860255b16014816d31097bb6e600748aea9f72faecbbd4b447dba4aee30a3822102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404", "witness": []}}, diff --git a/txscript/data/taproot-ref/f00c95582e31d9827eabb236ee8b4b776907a667 b/txscript/data/taproot-ref/f00c95582e31d9827eabb236ee8b4b776907a667 new file mode 100644 index 0000000000..dec034a32a --- /dev/null +++ b/txscript/data/taproot-ref/f00c95582e31d9827eabb236ee8b4b776907a667 @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704501000000ee4d8a848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40b01000000f0d42d8a0429894a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8749000000", "prevouts": ["30ce120000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39", "725c3a00000000002251205179b7d628a57252570761200f058df77fbc655a348e256a168d7aadf31418e7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "f47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a7c1713bb6fd836f670621a98005beef08cd27b654a92512fc54053c11f318fc2b4a87a36ff2ed7228bcfc2438815b30cc1c98339504e1b834e10aaf4a034051"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c6e69b04332a66418bb8cdc9057e862669dacd1ba9189b79de8865de4a0cdf7ba7c1713bb6fd836f670621a98005beef08cd27b654a92512fc54053c11f318fc2b4a87a36ff2ed7228bcfc2438815b30cc1c98339504e1b834e10aaf4a034051"]}}, diff --git a/txscript/data/taproot-ref/f015ec4058e4e7ae0d1a64823882e2e3fe9f8bbd b/txscript/data/taproot-ref/f015ec4058e4e7ae0d1a64823882e2e3fe9f8bbd new file mode 100644 index 0000000000..56d6c98dbe --- /dev/null +++ b/txscript/data/taproot-ref/f015ec4058e4e7ae0d1a64823882e2e3fe9f8bbd @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbf000000007c50ca91bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf94000000002da740f8bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0101000000229667af01daee3f0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963a040000", "prevouts": ["27a64c000000000017a9146db815d9819f256ca5d1e70b15558a98689cc52e87", "24147c000000000022512080bd047c4cf14a11f5476d57183f1020b00443da67a37d5b059d1b67b35ba9d4", "aff2740000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath", "success": {"scriptSig": "", "witness": ["404bbae303d496b8d34d72ae8bb19ff543f55f831bddc06bb9d80c8307ac57c4248bec3118ca0c2fb4e391065b3d5184ac54f40936fc05ef538e4831912d556402", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50a60fd5ef47cd4b364ad3d01b6c2a28d95f0862b577c9022702aca2037544c47ee429b94f08615a4b713f3d08444c21512ef45c01bd4c6ef81df85bec43cae07a95944d2a18ba750cdc3477c5af2cee0c2a4e52e6611ad1b246861a6aad7c209ef9c1fe44a9dc1fb076d2c567d0540b9128a4f0127b96dead7fdffed92ac95d020f6bd2a6d0ac40c9ed264a699ceec8edf8a899fd2665ef0d03b5de632711297489d097619158d0f84b1c9e3851a988ededefe4aef78c22038cdb86bee7ea243adad253ec1126b6"]}, "failure": {"scriptSig": "", "witness": ["085eae44e6c21c241b9120b8501938a6cb0cb676215ffa7f942d8d1f8ba5e269a7d9ef8b426879452b62969e8de1538093e95da9ba988d3892e25e79cbd0b88701", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50bd36acf066b58343cb81d29d18141760ee03d0080e47456eebe11bade90c08121e2da99af1fa847e41fd280cb0480eea5712b039af28a1ee01f0c57f13d5fc128c0dc27c1d596a463bbac8aa0884583c80f4511688c4f8bbd15446982001a33d195c65ff1b12fe5212cd902263ee0da25179e20f338cd2b4f930fc28ffeac2633fcb93ece080337731834d9fe14a7de80401fe86a09b06a063673d4b14e042e25ce6c603481e63d6cb660bfe3cb5df6b309d6699e4a225e88cf3a7c9a763623c1f402b494b4356520d0eb9bdd2ac28e8748a5422917730fab78b32a639cf"]}}, diff --git a/txscript/data/taproot-ref/f04d521c21ed8372ae0bcf98ee15b6ca83c85bc2 b/txscript/data/taproot-ref/f04d521c21ed8372ae0bcf98ee15b6ca83c85bc2 new file mode 100644 index 0000000000..bf68de8929 --- /dev/null +++ b/txscript/data/taproot-ref/f04d521c21ed8372ae0bcf98ee15b6ca83c85bc2 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf86010000000341de5d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46b010000006e8ce12b02cd14ac0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac61030000", "prevouts": ["0f05780000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c", "26f63600000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "a87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936070bcce77ee9cef21e7dde7a48a2affc6a0869a65b8cdae59e8ff14f5e2ace20cd165f299bdaaa06ccf8947d9b12e815a5b39fc50068532880492a3446c423d89e26d26d9f798657ab1642d8194f1f5dc9158412142f65824f82701f20125ac7"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d260805e6129c938d2ebd337f78d5f9c6d20fd2f0df083243f56c0722c96d98b3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082337e31cedb20dd0ec36f43f7131008eded9387a241f89ca892d220549655a6e95def3d75afa0626f5ab572f3c9ae49b6567bf85ec43d0b3933062a3ad8b1e492"]}}, diff --git a/txscript/data/taproot-ref/f052250556f0a305782ffc367c106bf8213e5199 b/txscript/data/taproot-ref/f052250556f0a305782ffc367c106bf8213e5199 new file mode 100644 index 0000000000..3880ae0b9c --- /dev/null +++ b/txscript/data/taproot-ref/f052250556f0a305782ffc367c106bf8213e5199 @@ -0,0 +1 @@ +{"tx": "02a25573038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c44300000000a45df2cd8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4d7000000004530aec2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c62000000009004818202ae91bf0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478724ab1f33", "prevouts": ["520e3100000000002251209bd2c3b94d09d0c3ddee02b44daf89c5e94fb9f94cc74cd030eef977051f59e4", "942a410000000000225120327dc9effbe915b227349282cadfcd45dc438d4f1c3ec72713111ad7587a718c", "f2415000000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "e27d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fae4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8512c582a906b097cf6fdaec64d2651566eff10d9e5eded90f3aff95e690654e4212021a26ea5e00fb993aa3d0fc1bd1e431f365db69035b8e4625845fc9b697c"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c592cb302a9f446744f5bef15703ec53b083cd3f0692dbc327d4c802b2b75627512c582a906b097cf6fdaec64d2651566eff10d9e5eded90f3aff95e690654e4212021a26ea5e00fb993aa3d0fc1bd1e431f365db69035b8e4625845fc9b697c"]}}, diff --git a/txscript/data/taproot-ref/f0b8804a6b3fa0ab08fb2e07758480377e212f0b b/txscript/data/taproot-ref/f0b8804a6b3fa0ab08fb2e07758480377e212f0b new file mode 100644 index 0000000000..dfd0101232 --- /dev/null +++ b/txscript/data/taproot-ref/f0b8804a6b3fa0ab08fb2e07758480377e212f0b @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc6010000004f2f5a8ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf201000000518448d70270749900000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487c5000000", "prevouts": ["81447d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e7081f000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_3e", "final": true, "success": {"scriptSig": "", "witness": ["245911bfc88ff9c207d514cec10b72c5c39a26d05763aab0157f9ea04cb532a58cb01c8cd3e08f56c5d7e76b5cd6974846e641384059bceee278fcdaec64855781", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5f71a1f1237c4091aad404ce88fcd1410d026b15cbe885a3b0896293cc18c8373e6204787797901467daae09e3a127562a226992d5cebc446b4ad33a573d6a273e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f0f31b265d33a5adb67af2f1fec8248f8855469e b/txscript/data/taproot-ref/f0f31b265d33a5adb67af2f1fec8248f8855469e new file mode 100644 index 0000000000..26fd0c20e3 --- /dev/null +++ b/txscript/data/taproot-ref/f0f31b265d33a5adb67af2f1fec8248f8855469e @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4db00000000fb0b3489dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bff01000000ea7ff3a203f9225a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acc75f7548", "prevouts": ["524935000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "93f3260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/unkpk/checksig", "success": {"scriptSig": "", "witness": ["00c45e6a38db8e64490d7884167fa7f7d3a4edc4de8f0a033cc292eafcf0eac26ade41a618476098f14304005d715eab6dc86a15679512b886155d8238cc9771", "51ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d4e264197456bd4c1b90f4fc8939bbf0610dca38d2fe38774b0a18ec6f9b89fd6d5d57b1dcd138e0cc147645402e61e69606b9792a3b1099031a7a147753fb7ce94cad6d75d2cb0ef900454538e7fd1b3ce4a6d54232bfa291f410b69a126dde54db117b6c10c3b79a9544d066c7c855e7686ab420f6a95e4ddf7a60395767a4dd4f3ac0a3984f3bd2e15d4b9ca628aa2c1824adca4bc410c6babf89cc776a6d4058a827f45ae2febfd6a48e1caac11f989a6c525b4da131ce52fd12e7f252fb6bb3fbe66e03f1e3d5d03c151a1f49af6fe35648ce1fb8bd1df07a497ff65e67ddf671b321fa9f2f2888d22aac2e45fde49c08b0dabc58a3dab9abff3ef25bacc98981699735d9d2ad5870d568ad1367f9ff314388b4fbc7f8cdd9ba342a7b5179c9ccf72d9e1b4864c4c957611c569bc9c3d7747c5432696dcc4a6932a52f70fba63ed8c75c68ab96fce5e685474517ffb0ff82c60ff0dc4d12440e21f52ab15ef11190bc97bcc8d0e99d5656d0891e3984baf383c021195a3f4accb96a873fe0d5c32a15e7fe92b17b2b8c3b841359f1b14625d34ce4c46a1c898e5b74301d7a21d399a47140b6711788aa4ac5bd9e63ac239ed45da28e932ea3acd6bd9f7f5a3113bfeca67cfbd40f858b9150f2d1112d4e5e609341baa11cda5532a4a71babac9d6f1aaabd147ca57e59285d2955e18da8762c420c4b0596550f02e8a0d0eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["8c81522dc5faeea7ed36e2c5155605daadc9320e51ad319bfd30bbafd0e19caa2f680299749f3becd74b3c421000dad930bc0e9537816ac6add0cb991becb806", "00ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366b0431b55481a374c89f40eb98ef9d2a1ea4a15c1fa25842c8dd1b505d3f733008998f104a41d430584d29acc5d80983bfa4388185b9ecb4fb5f364585438a9bd260600b62c8ed4db4bf12723005c7f766cb302a575f8872965ad67f65636a6b0c8f171a0659181424fedfeb48947aa5b62ebec348497eb70a0e4b9dfaff17fe7851f2fbba69e8a986917b32b5f76ef63e06d7f778743be5452643f44f99ea505f10f2cde5a4729d525a487b41d56d434ed7dc5e0aa5e11e544eae0c7246ef2b3ea5155719b875991d083ecd32183be0f5ac452a5905295b6a0b91be04b40b76e4803cbe3d00c239899d4914097448c043dde77fd42773528487758c6d087e8cf83fa64278d817919e62c4d23adcbc207f804fcd146d72915d8e061e85a8f6a6e6cb9d4e0a9220b07d19fc28732eb4bb2345d54d956bd2d189c6a5f87f1c011bb65cbfaa9ed654ade91c00c9fe4f57391c241e95cfd60b1f44f495a05086ba006260268f3fa4d832afae96ff672bd19d7e928d42bc878143589bed193337fe656f28feb26558d4d064770c2eb738b0251c60e0a639239140ddba0ceb61ff7c3e738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/f111543d0f442f268353dbbbf00ebe24c21f930e b/txscript/data/taproot-ref/f111543d0f442f268353dbbbf00ebe24c21f930e new file mode 100644 index 0000000000..9df0e6612c --- /dev/null +++ b/txscript/data/taproot-ref/f111543d0f442f268353dbbbf00ebe24c21f930e @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfd00000000abc441cc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4220200000015f555c90339ce5500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870b030000", "prevouts": ["114527000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "9d7b310000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["974c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93626364c264ca1a1a3113427e98f88e51ff7da2e89277d01d72659b15bd38bb6d4bbdd0eb743f16fddaffdc87a703f35bd0417e0996b155e435c0add546ea723b55a7303e26d6b86d2a780c30dbeb7ba87c6a0494b901c3875fb9ca7f2f12bb2fd373be813dc08f80e09d78de4ac5358a3bdf22545a425b50fe87daa20f96c44d7"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51064e90022f018e8cc473163b262248813e3dc7e43f487ab53623d6c75190b10b282285524a15c732567d099967405d35f7136f74f48f011bc4ab279ad8d14f14"]}}, diff --git a/txscript/data/taproot-ref/f1439b2e5f242df93c3d5fd61e367f850098495b b/txscript/data/taproot-ref/f1439b2e5f242df93c3d5fd61e367f850098495b new file mode 100644 index 0000000000..4cee6ddcd2 --- /dev/null +++ b/txscript/data/taproot-ref/f1439b2e5f242df93c3d5fd61e367f850098495b @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1a02000000688f084d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c2010000009ef8d859045db7a1000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acc63ed24d", "prevouts": ["8f31660000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8f393d00000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902992411240ec2753d3808be0a0b86c3cb00d1f0d3e39acac5e325e3b929eb9613b1ab07143677cc1743467afa0ff3dfdd315171c3d78cd0b46054b0bea3a7b36a22bf660ec92ddf353565429140cd649edc18ee664a92b76e5425b7f53f6cace3fa845f2d6c52cc321790001486738311edd5082ddcd29019aa701fb06fc7fa00b767a214a93e963eb1b7d818f44676b0c21b9839bfc2be13a443c8fa71f15d6404832f7bd6f474d1572fc4180090d952dee36a56b64345b3ed2fb8f2d87f22bedd0a597a44a89596e5e79711478b8713b6f4663606f8939f8134631de7810131d064b084392f85e0039c0b8980610a4722a443e6931511630e111ff47ef362fb837bf121bd6a54a3c5d3a50c27ee8d8bfd650e62a8ec240b9a8e9e0775132c97d7c6269db36f93a3ab42ea9a45fb12c1bb0c342cee2d0974af242c0751c2923d10905eeb4df7ae2e4c6a8da1bd1ff6ff0a6fff1097f571c25f8aa8ee15554734f4f498cba7ed2398dbb375eed5d6447d046f2fd689ce77d0e874dbe026901152fee1635acfe5c17e53eff7965c0218d706c95dcfd9b5a1bd9321c9fc3633beaebe23fab1ef8ca0aa038e30f4be9c2ce8d6030b9927a1dacdc064778a9fa0c092505d4a5d3f4a29e6a9d6fb20f74f0001fb5ebbb5f4c1484438ceb99557214909ceb0425baa0a937d16573c3464125ae7cf9739e480a5abdff4ba41183821f9aba3cc2fc871b6c3c17e75", "0b7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8784d9e7ee919b8817f3904ff7d27b5c3a4ce3798ed5b994b75288b8e9341d9b42c78e40500fa05b550b7f6357dbf83024c41a574f6a1706762c104fa8aec3fcb"]}, "failure": {"scriptSig": "", "witness": ["4d0902c99ff4130304325e5b01178d4ffda3c0e21c3bd612287c5a5ce107349391e85331108f98dac92f0abc67f2baa39d3612e382eca0dd7d7e2cb3b35cfb851f859a12412296e38a3b261b86a388fabc2e2a1588ae30b7383d82bba8e6e0d5ed5a850f56dd664e659ee5e69dcfce9781a3d6ab95823a179cb34d6fa8d0ad25ee1bae3ee9e2a9db6140fd94327c1061214109ce7c0be7722b8ad3f91663cb1a5df727235f5b89f6be6b2f5ee4555210858cad0d9262db26db5a0f935db6062941204844c91def066ea44e8729ebfb69b47b4ff7988b20c424a451c44f9d67e7a06d0c67f1e065e5e4dd0ed0bd0bfc7aacdcc12e6c72c521bf788cdd97d72cd2dd440482854e9b2ca7fb0b5170bccf8447f57a3d7467b31a8c02a2d644a16ba6173b3bf857e4cd90539d917959f32ca87506b5cd95212be4564ed5810135092d4fca29ac9da2b880a0147afa239c2049438992e6abef6cc3044f08e98a77b7e4d705c807ff9df6b36aca283a3c3f8078fe9299388ba91f3b20ed16b60d601f459b898bc36e3cc5d29ee025c12765ed1ca745ea7970fe239f22a074abbbc384996c0e731e3680a1bfcd75bc26139a311a632ca1a452d88d5c53d5b08cebcd9953aca69fd7d4ea896c28908f1328154864cfb2dedd72a0154f6a69e79924e5757b91bef993aded77880f732ec6b867ab2857bf7b5486612bb2f3306ddbf4f17bbfe3eae048c02865753a20453275", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ea51646124a2b4386d840e205fec55c7cefbdbe9c75e9c45dd558741f313d2d0ee0d9bed60e53dfa6fe8b58229f37daf0597893c765c7b30814eb9e16fca89b86"]}}, diff --git a/txscript/data/taproot-ref/f150268fcc20d8c1e1607d773fe9c2af148e9e8e b/txscript/data/taproot-ref/f150268fcc20d8c1e1607d773fe9c2af148e9e8e new file mode 100644 index 0000000000..8717682577 --- /dev/null +++ b/txscript/data/taproot-ref/f150268fcc20d8c1e1607d773fe9c2af148e9e8e @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdb010000008dcc48a960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127083010000000035858903fdee6a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ace2000000", "prevouts": ["a4ea5a0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "05d9120000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063fb68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900454cdb1f00ad8e6f49049c3b8916156053acbc542960ad6e1236bde6d1970b6ee852b51aac478484d8a075e848b67a41ce9b347e1249fa49816f898b909a6d4bd5c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93613731d743a1998dabf7620d1d828b5b28163c734bff41737a94b9bb5e3110fd84cdb1f00ad8e6f49049c3b8916156053acbc542960ad6e1236bde6d1970b6ee852b51aac478484d8a075e848b67a41ce9b347e1249fa49816f898b909a6d4bd5c77e07a04f832bf80fe1e45fa6237ff98bc90e935546ee680c041b2556eaccab"]}}, diff --git a/txscript/data/taproot-ref/f1728d0e4771e35b1cb1998adc82e22eb67a65c9 b/txscript/data/taproot-ref/f1728d0e4771e35b1cb1998adc82e22eb67a65c9 new file mode 100644 index 0000000000..043f2b3668 --- /dev/null +++ b/txscript/data/taproot-ref/f1728d0e4771e35b1cb1998adc82e22eb67a65c9 @@ -0,0 +1 @@ +{"tx": "a54aff3a03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf37010000008bb7459d60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702700000000a6f955b3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b590000000057ec95af02d213ac00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df9797223689873f816d5e", "prevouts": ["87ab7b0000000000225120637e54d800000b9ba863fd409e40dd20b023cbab04d0b624963d159680b37b50", "d308130000000000225120efe1fa8c8643b06748235620ecfbc876727366244fc928e9c2000087b14324f1", "17ff1e00000000002251209e3a3263c4a4d4739bdb7a9cc15be1576bf24ce130b027eee13d8f139fadd4dc"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "227d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93682fb3b4087072a481d7212df69b60b618087c4d1c0d29d2f7ee92b373e21faeb8a2960a95becb1bbbe0636e0493c58f712af9b8da417013d797bf12c130ac560a4a9bce64ad1fc5af22ad5621933415c83e23766bbab20239912b691ace9dee2"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936be77e2234f57b9b74ee6a68dadc788f2da89960fcb7a13e163371ae2a2591881f76c402a4bd1fd97ec7cb0657ebc265c6b14283a23241722901633641a1252aadc4c18ce03381be5d83370dbaee0482c0440aa7aa94902a00244e0237bd29478fcb15428af69077ee4e47ddc8bd2adcf7d97a29fc56c75a24a213a103a1e3586"]}}, diff --git a/txscript/data/taproot-ref/f172e0269b4ce4678ade6f0ac95a9448d2453792 b/txscript/data/taproot-ref/f172e0269b4ce4678ade6f0ac95a9448d2453792 new file mode 100644 index 0000000000..4523519453 --- /dev/null +++ b/txscript/data/taproot-ref/f172e0269b4ce4678ade6f0ac95a9448d2453792 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff201000000a1f5ede7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf510000000013f48da304ee0ee2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e727585449", "prevouts": ["1d666800000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "adb67b00000000002251206c2fec4e8a1c469e06f21e10d3391a530153ef860e8b3f034f0bee0104770428"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "577d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d04bade1c924e92c8fcf5c96cd70dcc3bcf23e3c6838a356e208cff365f4000b35bf8914ec6f25b4d9fa0eb4d13d0c5199bab9da1f0dbae1e1446f691f7eb6d53a8385792857b3824bc259fd95f469eb32c57805e5f383de6590f06749d208e6"]}, "failure": {"scriptSig": "", "witness": ["4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360d77fbfdbb69849d4ff0a6fb331fb6eeb19c0afba192c9d1db1aa05948f5f4b1da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef4a7dcfb64e618b34998ea64659fe772d1fd358b29e003b2257b85d2ca618476a66706abdbe591f97764059d8785051c12d40b9c9543fb83334d204ae23d8b59"]}}, diff --git a/txscript/data/taproot-ref/f17ba688055f4e28c6c763a1a67b55ffd27ab22b b/txscript/data/taproot-ref/f17ba688055f4e28c6c763a1a67b55ffd27ab22b new file mode 100644 index 0000000000..16b29473ab --- /dev/null +++ b/txscript/data/taproot-ref/f17ba688055f4e28c6c763a1a67b55ffd27ab22b @@ -0,0 +1 @@ +{"tx": "05439dcf03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ce400000000e23122ffbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2801000000445b0faddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5e00000000b41645be01b3ac85000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487d2010000", "prevouts": ["5f875f000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "f27f6200000000001651142540f27e90740933c99d4f17ab2dfc6c82951cfb", "90775b000000000022512045a6403ae49be683b272d9a42ea0a940324a318f771f036a6a11d0e9905b97e4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["6af7ee47b9fea2ed853d010eb737fc8ad260ee45bdb324eb6b890516a33267f7949a5cc4d847c4791c38caa75bc9b539b6ca6c3bc1b944a31ded162618a89211"]}}, diff --git a/txscript/data/taproot-ref/f18786606f38657d15f1d007fa2934ea6034a605 b/txscript/data/taproot-ref/f18786606f38657d15f1d007fa2934ea6034a605 new file mode 100644 index 0000000000..55fabc6f65 --- /dev/null +++ b/txscript/data/taproot-ref/f18786606f38657d15f1d007fa2934ea6034a605 @@ -0,0 +1 @@ +{"tx": "4cb277ca02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbc01000000987c9ec48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48a00000000ab7f4a8301368b720000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7960c7c812e", "prevouts": ["9c487c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7b65400000000000215a1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/annex", "success": {"scriptSig": "", "witness": ["710e80e6f953d1db34b9a28085ac9dff3d7ed72b1023658673e372a4c899dc71160cb84f2a911cf50116289c86f1e946e55b74d2e3fc851e72445def91e1395f02", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50"]}, "failure": {"scriptSig": "", "witness": ["24ac7b354f286edbafd63ef9dbef70db30d69a37c00bee175ddde69abf2e274cb252c230e696626004e8fb8a4fa3cf94b51edfb25b84200b9d2d6003341daf3a82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50"]}}, diff --git a/txscript/data/taproot-ref/f1ab87a390b003a1f262909e41e5d3853c0dee70 b/txscript/data/taproot-ref/f1ab87a390b003a1f262909e41e5d3853c0dee70 new file mode 100644 index 0000000000..738ac0cced --- /dev/null +++ b/txscript/data/taproot-ref/f1ab87a390b003a1f262909e41e5d3853c0dee70 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbe00000000a95271d0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcd01000000c9707a1b01a42ac8000000000017a914719f78084af863e000acd618ba76df97972236898781bd9444", "prevouts": ["5b3179000000000022512043e98e0a8fa214574b4f7d43d988f280e5f4237220ef6fffc40af5b8eb3be152", "9c0875000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["fd", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f9d8f10db74f979c41891759fc87cc010c6171f34a4dc4fa278f7920467dc96cd9f77cfc3030f4fa2d9551f14353e565e33cb9a72a19e79fd0e4930553ab0cc3a3aa70c847d82166fa4c32b27cb78dba1a5c77b2d4b8269442df723c9129fb762c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936427f03015f7a96869233965cfd3869b27cd157bfb8ae4cf2df456ac491585181380f015d033fe7faead4766c682a770029d5c79030785f2d26c440da4ef071fea3aa70c847d82166fa4c32b27cb78dba1a5c77b2d4b8269442df723c9129fb762c347795cbfd24b3bfff0bc05cfe1b5e01afc0104c4d9fbef2a45c75fa918ca8"]}}, diff --git a/txscript/data/taproot-ref/f1ac308d98f3a982e3c86ebf022541b3c7a53857 b/txscript/data/taproot-ref/f1ac308d98f3a982e3c86ebf022541b3c7a53857 new file mode 100644 index 0000000000..c943b8027b --- /dev/null +++ b/txscript/data/taproot-ref/f1ac308d98f3a982e3c86ebf022541b3c7a53857 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be100000000ec6e0586dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf100000000fd59c1ae0257407d0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a666000000", "prevouts": ["82e01e000000000017a9141d8eff3030620b266a8bb5e50900ecd7b2ab72da87", "111260000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f5fc9523ef5d711d376a7546b8613c92c6453cf935a9e008f2e992a07522e9b738db03092f78269092a33e7c3338556a6e9ae9561fbcd456ff3caaeddba2a65696ed8ecd3b1f44ea46526d24d4bdb104b33370162d4d99cc9d7116708e1ceeaac08455640a3ac76aa5c6a831ea8a150475947d0f012a80420c5ef4b99d41b3b921e9845154ae02ecc5f3b85b5dcb612455b128b26c9fed38c1df7307d8ec1c0a68785aca3e09b74cdea9dfec3ed29654e0091d59c1204ce0f7c4ecd06d0dc22461c22332ec984262317239a55ba879e08d8903fb5ddf9bf4a1a342abe653da4b6fc4009691fcd73db80ad705292deb492c8704b2aaf002530712fa18ccf6f68122b53f0c3f88ed8a0e43891d759f5db41c3edc9c01d1748ea606fece0e6573c53ff944b42e2f6c08711e02a86b1598d049b3143f27b694f5206043ec7d5d8fb52a435c0b0acca2e9a62c97ff91e84aabb95454e714e084fec3e82bf45c9e73b20e80031edebf4e250fd6b03660a20255081580dca8c5bcc9cf6933b1d330d8ea78bd7e037ce53844f0ee04423685ae0a48f3eca9d02cb31100b96be1337d4f9dabc87b8e7e43a6241a6126d440f6e82a2fa3b8ec1b0037e68b3024cca196139cc2ffe46f40ace1cd5aab0edfd3ad42782c1b3f0ea41e397bba0cdd5c0614a5ad38ff07dccf9f840b5ba02718860a7c3fde6f8fc863ca61179d8807252d21389c36fb6836170b45074d75", "677d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa5ea7fd6123a97de30c69bfce8661bc08bde914a895a50530d51ffe984d9d20eafa195b9f6f39c732eb35859a6bf094cf148e251ed4d8a79570f47a225cba2c42"]}, "failure": {"scriptSig": "", "witness": ["4d0902b09c19c120598fa6c16873b605bbc903fbc233477afea8d060cfd083527784a21e1355b343e76d8347c8ec4fe11941903c25590143fce536fd8770a8868b901571063e052c01468e7be77a7f72dd1bd17bcf2e2130e17a863594b707d01b8ff5319c745beb38917f3916eeb2c6b767779e4a3fa4eefd15185a62c520e20addb8039acacdbbd33ecbce7a78cf05116430dfea335414f6252403261cb0f6e9be0ca0862333b99c6aa6b21257a1a3816b07b8f1a0c557ef566ffffc501d45c8529074a278c6ecb897292a8e15b899eff316118d555102de9eb45b3047d89c12c002fd914f94812a6f9b374886b0de496067999cffec4bec1cd4a1a262edfe01d86b31d28742be89827594eb23fa98303c4a70e1bccad0380ad1ac0947660194e8b097f1b71d12285b720f5651dc9a47244c432611d4a12e84e98d550ecde8ebb5c05b0fc8dcb5c62dc22703c5dc86d3bc13ab63510feabc203ab6357548aedfecc8457ed74d2452f5a85e65681b01cc81885b5d3112f593475bfd4a83fb7c2cc672c96d6cab7a943d9756ee14be43537854dd72b61975eb9b6e1ae33048e9b1426a8713495865be752b216f5e50e33a1b53938e6ca5383f053eee821dd99dc9f66517e97ce5b7f3deffb4b936b3e5edbbb9a975ba87b54186b6b2ba0334fc591d728db44c4fb554feb0235473fccf58a9ba74e2f1cae5a1b4e10cd94fd42e0b8f5698b014a0d71764779075", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367495a4f76ff6a015f29b6766f26d7385468d8511cf5f36a8072dab9eb3448108da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e577a14a6eded01e2af38af60eef18c742302cceec7e721187e3fa159b8f76816fa195b9f6f39c732eb35859a6bf094cf148e251ed4d8a79570f47a225cba2c42"]}}, diff --git a/txscript/data/taproot-ref/f1b42b68e02cd3503158c2cedbad9f43b4a782fc b/txscript/data/taproot-ref/f1b42b68e02cd3503158c2cedbad9f43b4a782fc new file mode 100644 index 0000000000..275bff81ac --- /dev/null +++ b/txscript/data/taproot-ref/f1b42b68e02cd3503158c2cedbad9f43b4a782fc @@ -0,0 +1 @@ +{"tx": "edcfcdd702d9befb1e9c529d7d9073823d42f590d5d83a9ae9e8205a58b2deac400aa179de0000000000aed2b9bbd9befb1e9c529d7d9073823d42f590d5d83a9ae9e8205a58b2deac400aa179de0100000000c9ef9ecf037bb08b0f2100000017a91417076ced824a76f7f00aa0b9ce412f8713d9a8a68758020000000000001976a914798a0f34de6d8f95c4b7ca7c79a0cd208c63fb0888ac580200000000000017a9146e2b0fcc2c4086d85becf46dae6d7af8c0bb07518738d6ea54", "prevouts": ["d453c1ad13000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "8032cc610d000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/keypath_invalidsig", "success": {"scriptSig": "", "witness": ["faaf5f50af119edd122012c71f8cfae4ac508d740074eb7b756a30677ff9a98956fe107f93c3ead41c0d3254684125c1d48ec3a75f9c689a5ca6108cc2c81248"]}}, diff --git a/txscript/data/taproot-ref/f1b9e75c583d069af4d354379ec7cbf02e95c41d b/txscript/data/taproot-ref/f1b9e75c583d069af4d354379ec7cbf02e95c41d new file mode 100644 index 0000000000..ad07cd57af --- /dev/null +++ b/txscript/data/taproot-ref/f1b9e75c583d069af4d354379ec7cbf02e95c41d @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb401000000f091c7dadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf100000000be70b49003eef1a400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6a491a81e", "prevouts": ["c76f8000000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190", "24862600000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000e5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c44eecd9b500a2ebbf47c734afa5de1aa2fa12782431ef0dab5671510d72378f98751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d53d2e072fd8e8376d3a54b2bea1bfbfff1298aece70c0bc2934c8eaacc3044fe58f009f53a1a3347386cf74e6ce512c14e8f46a54e4d2c64fe3ab77cfdd670d0b"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dff5ed59a308aa7ea3a47918565838a3baa1b60a9bafa1ab86863a2da11a4fa3d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b15c6036a676a492a4bf737064ce6a21b64de8ad159d3b2e60d879468caf8957d0cdffd10ffbed86c0e7536425f8f402fac685ef3be7cf3af5c775f2718b4072"]}}, diff --git a/txscript/data/taproot-ref/f1cfa6ecbcc68ba081804e6b531a970f6cc70cee b/txscript/data/taproot-ref/f1cfa6ecbcc68ba081804e6b531a970f6cc70cee new file mode 100644 index 0000000000..10cd21d336 --- /dev/null +++ b/txscript/data/taproot-ref/f1cfa6ecbcc68ba081804e6b531a970f6cc70cee @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdb010000008dcc48a960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127083010000000035858903fdee6a0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ace2000000", "prevouts": ["a4ea5a0000000000225120defe27edd45ad927249675e5a926c89be2f3fb0cb8fc1f86ac9fffcfc79b097b", "05d9120000000000225120192ca6362cd6392703ab2318f0102b3cf7536ede6d4ff88793ef5f7d5ef4db5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "837d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936544a2a42c76e0ee837b7a685e04a782eea16b775b2dde41c180c8b9d92cadb62fcc3b58fc7cb9ae8c07f6b17b965d49129a74935af1e9f3c9d7206d9e0977573ff15e37d03bf407745d47da370f693bba1bd1439d95d9059575aa23ebc3ce6e3"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360a4c4e25d839cf1716ff290d0725037bfab2e64d2c89faf706269300ac3ba5676193e4630789cbfbdcb7d6fc995ac4f032c6d5611c1f6b733abe8356e59ddce06294a5d2648496e5016f850eddfdf01467fe69221e8567db6ec356a8117d8a748163db171dbfcbf374971659a5a65d0378eae0ee15db360ca8cf80a8c2e13046"]}}, diff --git a/txscript/data/taproot-ref/f1d42d84bf3c0ea75c9ac6babfdb06afac572bfa b/txscript/data/taproot-ref/f1d42d84bf3c0ea75c9ac6babfdb06afac572bfa new file mode 100644 index 0000000000..a7446f472b --- /dev/null +++ b/txscript/data/taproot-ref/f1d42d84bf3c0ea75c9ac6babfdb06afac572bfa @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6601000000e283ae2e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46f0000000047eb5b7102ce5f95000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787a9020000", "prevouts": ["5f6c5f0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a", "3359380000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "5e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08259bd71c400ab2f54869740392a5675e37e70879689c9d1a6bcb33863a193d8cf0c8cbc16505271ed8ce1a03d67d2c4a35529bcf4a25ace24696315022c27c9cf"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93601f485ab8dab36fc4237cf32204629d23ab8b7a9b8c57b9fb58bb07cc298c65859bd71c400ab2f54869740392a5675e37e70879689c9d1a6bcb33863a193d8cf0c8cbc16505271ed8ce1a03d67d2c4a35529bcf4a25ace24696315022c27c9cf"]}}, diff --git a/txscript/data/taproot-ref/f1e479e1e2ba063168c4201bc568c60b601c98f8 b/txscript/data/taproot-ref/f1e479e1e2ba063168c4201bc568c60b601c98f8 new file mode 100644 index 0000000000..ea764344ae --- /dev/null +++ b/txscript/data/taproot-ref/f1e479e1e2ba063168c4201bc568c60b601c98f8 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb30000000093a746acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cec010000007ed5e8d5021f6fb300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acd239a551", "prevouts": ["0e86640000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "519f5000000000002251201eee2c640bfce5c51bb2c40da2e9766a04a76652bb29070203cf3219889f560d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_4e", "final": true, "success": {"scriptSig": "", "witness": ["ebf58d73905fd7c2486efdfe028c446f051d8c8344f53b98e47411fe4d8b323585e3fc4b1f1daa84623695fbe505683961d9f0859b62ede344294bf63b39c73501", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["505564d18087b19bb65ff6a3b77d92c091f8e4c7a6c391db38a1a7b980674a4c43d31271578d327f1ee780db8b1df1b68d14e3e0e883b5b36403a06d68cec68f4e", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f20f49c8c8a09c2b68a66d3640886588c1e95299 b/txscript/data/taproot-ref/f20f49c8c8a09c2b68a66d3640886588c1e95299 new file mode 100644 index 0000000000..27b5356c7e --- /dev/null +++ b/txscript/data/taproot-ref/f20f49c8c8a09c2b68a66d3640886588c1e95299 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4901000000213507c5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5300000000f92f4bb6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf150100000091782beb0145d3670000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc4eafb2e", "prevouts": ["6e315000000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "96f25c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "60086b0000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fced35b867b7996fb51563de4ed354837a83892ec30e3bf6ca580b2c02aa0f9ad300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5174048a48c6eb42f280da39a6557d46ee4318cb4e3319043ed115bdbceba7fd7e7407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb445a42fba29499bdd7f6ed301115275954ea9ec94acc2dc80e39b9e79b601e9aa172fc08f39dec38a16acdaea6f2fb40d915f4bcb39aadc0ac96def6ea8d2de907407b97958d18eaa787c1cc29670cd8872e7fe2ef4ae33551cfe5c61fc2827ee"]}}, diff --git a/txscript/data/taproot-ref/f281cfc9b564fceae1f18905886e1a2ea6a79f8f b/txscript/data/taproot-ref/f281cfc9b564fceae1f18905886e1a2ea6a79f8f new file mode 100644 index 0000000000..b395b7873a --- /dev/null +++ b/txscript/data/taproot-ref/f281cfc9b564fceae1f18905886e1a2ea6a79f8f @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc7000000009095a1b0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb701000000a352ab8601a88993000000000017a914719f78084af863e000acd618ba76df97972236898739000000", "prevouts": ["dade750000000000225120d7a74e7d66477e5ce18f223a8c348977bbded01f23ea87f4513721d36eca07d5", "ccbd280000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_mis_3", "success": {"scriptSig": "", "witness": ["f0e4b330642ae27577f78ac81fd5af3c439a3cd130a668505cbc284e002db55d4da4533c1ef02836b6accdf97a78c84bf65b784119ea6e705ebdea90575341c1", "50ba592f23777ae38b527d1e68f48fbbd0597a4bd3512c0706cff7137b704520a6799688434c19b8a47faaa5b17c6887b3157b870a3c23288c8a8cbd09633106ac0a4ae8a59b92dbe9d5adb32aa66a90d0824a54e23936f4e8bd046cfff1c8d9b63774d6b0dbb485da602a7c96289a9aa07eb2248cb17ca8ad8af3b55c8b090e3abfda0e50755f980c8633d6044045c642c48ac87067"]}, "failure": {"scriptSig": "", "witness": ["776496b4f911f0697c460a01114e787f95fa7995f3b25255b937eab94f94397af2331eedeafce921e85ecfbff874f661187be0e9047de2a7ff06a7cb5ccd858d03", "508faf687e692be87644ca550eea652b1cd464122e1abd934e57354f21c84900652a187b4e9c5101ac2b49fcc7165c6a850bab92ea2123c52f"]}}, diff --git a/txscript/data/taproot-ref/f29cde4e4d18f502a83e953d7e6aafc162b49fb0 b/txscript/data/taproot-ref/f29cde4e4d18f502a83e953d7e6aafc162b49fb0 new file mode 100644 index 0000000000..26d23d88b5 --- /dev/null +++ b/txscript/data/taproot-ref/f29cde4e4d18f502a83e953d7e6aafc162b49fb0 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf05010000006c94ab778bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40c01000000a9aa24900176de0a000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a603010000", "prevouts": ["46617a00000000002257202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "f7ef3b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["80a38889277e6769c53ac3422cd17a5b04684959263ae1d4267f5e5d3300267c24c4f79d99ced191a71b09d34b0c3e867be45d2aac0ab8bf37496c932ecd79a6"]}}, diff --git a/txscript/data/taproot-ref/f2a7b6785e4184b100bb118d537c3e1fe7deed13 b/txscript/data/taproot-ref/f2a7b6785e4184b100bb118d537c3e1fe7deed13 new file mode 100644 index 0000000000..fe6f03e213 --- /dev/null +++ b/txscript/data/taproot-ref/f2a7b6785e4184b100bb118d537c3e1fe7deed13 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3001000000a624d4cc60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700802000000f83632e9019e1b0000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac56000000", "prevouts": ["d9161f000000000017a914e18c03fb168c1c1b3408ffb477de8ff77b0fbd9587", "c0db110000000000225120d6bee23394c39d6e16307905ff4e75971d1217bbe5d499666628583fea75678b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "eb7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9facd47700b8e47119238508fabe2c12c2c2868bd36dd1a15df7cf7a783bdc7d4f633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4a9e937f21fcad1bfe108fe60be9a324a720a35d98355df5fe53ca48d5593a6c6b"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e87d8de85c21b0b3fb0a3c0b5a47bf8fb76656439613f0da43488fdbdb40ca82a29e937f21fcad1bfe108fe60be9a324a720a35d98355df5fe53ca48d5593a6c6b"]}}, diff --git a/txscript/data/taproot-ref/f2aed5fc63d1322cbfa59dc10fc63c5c13905bad b/txscript/data/taproot-ref/f2aed5fc63d1322cbfa59dc10fc63c5c13905bad new file mode 100644 index 0000000000..52136dc124 --- /dev/null +++ b/txscript/data/taproot-ref/f2aed5fc63d1322cbfa59dc10fc63c5c13905bad @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf57000000008fef5e0960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a200000000630d7c750370197c00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac27da9e2b", "prevouts": ["6d146f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "35ba0f0000000000225120d1600e1e076c2da8b455f76340d5258bf45fecd0d78155a447a8b04344f8ccd4"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "1f7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362175f5032bb3b53c0a968ee3a2c82bc18dba93c9ba8710418637c72c2d6d5ab6ec0d930d2ad3e784600f5ffd1efb1e58c37063febb6da2a9c1576d111e3c4564ed661e9ebd30f651fa020177c2a1e4ce51b505c9194e43d6074b392863f250ba"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93675adb4fc0189a1382c89853bdffb590e4ee25bdb1025c4992edc4ac6fabdde4de576fdfccd5cb93347e3ba64a7809a8c9fb7be90a7e18659d0b981582f285e98b3e02c0e1665e1d6a4b6ef98a6ef3a3632c98688db315e4c8eb8907479035d72"]}}, diff --git a/txscript/data/taproot-ref/f2b01b12b747c63ff84c1d178f5cd881a09d61d3 b/txscript/data/taproot-ref/f2b01b12b747c63ff84c1d178f5cd881a09d61d3 new file mode 100644 index 0000000000..637d2dc654 --- /dev/null +++ b/txscript/data/taproot-ref/f2b01b12b747c63ff84c1d178f5cd881a09d61d3 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c440010000008819fbb38bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49f0000000080656b9904c66868000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787c7030000", "prevouts": ["455135000000000022512089bb171a5e185cc37daf7aa0871afa228227b6abbb83e8d3d329212a244ac814", "ebad34000000000017a914694a086836eef6461dc1e0510e2b2815c3da1cfc87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3044022076992d247ec2845d6864017ba617cc710fc6679143851d0990e851e5664b4b2e02206891148f8525123ea53574236cee83e0217b36ab019de5e769bf5762bfa3750d59", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "2200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "witness": ["3044022011c58ae31ff86478b242a709804f9c191da3cbfea8bdb58ce304a7d1fa32e15a02204220241dfe89c77fc08276827c3058791d477a294052753eca89c85dd52315b959", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/f2cf8fc04a84276827038c4814930bd1166dcb83 b/txscript/data/taproot-ref/f2cf8fc04a84276827038c4814930bd1166dcb83 new file mode 100644 index 0000000000..f0f5aeea7c --- /dev/null +++ b/txscript/data/taproot-ref/f2cf8fc04a84276827038c4814930bd1166dcb83 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b990000000015e6e6d3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b3c010000008991028ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6901000000414a92e6031b996c00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acd3000000", "prevouts": ["7bf1270000000000225f202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "1007280000000000225120e98e4d1ca072b074e8ce62a41eedb6ab06e3f93fe902ed968335e3f5f426ca3f", "867e1e0000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c3b743ad825b1ae728c2f1c4137682b4ff02b835bd4b7bdf42f6a798d36a71e5e07722f249c0241e62b789dc176f0288271b45f4ccd4acdaa89657f699a53419bb2c6df938780c1f04978657653ddf137825e301d5ad50b36cb6f0a81405322e76416e01666bc6a1cb261cc0f123e7cf1652eed5d0f4713fc4210a5fc106d9df48d1aa407ee6564ea9d7edd28cb03ea10a89783e3972a7a703c5db2d515a94a2c57e7a755ef6c5ee042c62c2ee9d3f95cfe637bc3bbd29cde92d9958e55e52eff742e84cd9569e3d058675330401d7e03f9a30beb48f7d18589efb1267ae02423a14bbc0859df1c4eb4214bf21f29fce6f28947f87ff5869fecb53761b28a0d9fc395e67c3f8a865060e8df463663f85313761b966e552649a58b67650680fd26d18521162978ca6a42352fc4c60be370cba6f839b9559a1f54749486dfe8cf879826e7e940ac8d38f1c03a7a51b367cfd5a30c19cc70bb14d708cbb61657315cb05f1761d152f0da2c8d28fff5a0d5542984b435732a0cd871130fe7b7037fbbd85e0251713ba6d64abe1a42172029d1099286934a1c8b2328f8c36661cca3b3675678cbaa07b7e0c6ab62e44b5a2d7d41234a7b48922d1ae08aa70af4724990ef11b8863c789a93405a13eff7d71edc6e7433414b334bd6f429140ec874fd3388662c7c600ee132004d4a4b8bbe3b575621ca1685dd5120bcd57cb82c268fb53cd69baeca84858b375e4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c351b40ac58314f065731b2e6ee4d3aaca3c0737d7eed49c686f1ff66e68fcdfd81cc5051f53cb756176679d36bd97691fe000700c9f2a0965e3d67cfda5d0f8a81c44a09079faa406e9dfe20ff322801dbd7fb1c55ee11d2e1c43aeb4d3cbdeaf2eb908b8657464a6ead7ee639edc82f346aa77dfb25920bb6227c2c4c35ffd"]}, "failure": {"scriptSig": "", "witness": ["4d0902bbc440d2c38048705b4157974c62c15679a2d924264f492f46fa562482574a88cd00fdb624964f032c7b891e760c6d561f4fb5115d63cf68d5cc64834e6e95649d90261a49ca9e34c9f9fc5b4d94e0761e2aae1ca65a116d00fc6202409f7b8e50a1ac3b7bb5a9b561b67d2cb37ca8371742007fb35074f136f18ef7fb3184831a254e3559b30df279d05c62b10a8e305210ec8bb8450f7cd9e9934f073e292470c91489d092c498adaadcca91ac797a0949065a4b491850122a56f254e741eda4c5e100f9573b7faae4da8826fbca2ad48120b0b8ddae58d4073790bc531675f6c5a1789407fac5677713747497835d4a523d66f930c1935046181fd99888952a2d07578ef8966661c941e2a415a6a3802ed20d791cb1e11b826641f2df11ec8d1457727a53377917f776f8fae2cc0fbddd2e2de9b29f13ac9d3cdfd2c24aaf160c6c3896d53af08c635499112d34b885e20d514190369f7716d063a8f4d2a2907c359cd9ba109b290329cf5694fb516d5a8ed08d477bd92047e270a84a8ff082a1538347cf09597de5cc3fc2ce73f33600c144254dc9787b14c650bae33b42b4c10a6d341bcb030ed24206a202867f9c38454e5514652b7c98eb9b3d5d6eb897dd0c522f3c52f11ae4e3c30a435de093f55390906d6be5fbcb7bf82898fb96ff4e03a14cf02f3ef4d514efe35f3394539f400d8a34e072457948a5fb98a70fa63d288c0987e8b2f37561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d007d93a2f34e060d7cc5cd39744499027b300a1a6c5700c758a8bb24cd5be060d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3e0b789927f620aeddbf74aea18c74264c468c5fe823a741d176e0a42636f367e46ec42a0fc3b2b57c90387175ef14e4ddb9fbb252ed168d3260bd00914c11302"]}}, diff --git a/txscript/data/taproot-ref/f306f010650c1ce3662a988f2d5c8848a114b742 b/txscript/data/taproot-ref/f306f010650c1ce3662a988f2d5c8848a114b742 new file mode 100644 index 0000000000..4987268a83 --- /dev/null +++ b/txscript/data/taproot-ref/f306f010650c1ce3662a988f2d5c8848a114b742 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4210000000088e395bbdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9e00000000065185d6011fae600000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc33040000", "prevouts": ["64d14100000000002251200aab5f0acbd570bedd550e6582d56f36bedceed0a29e5b4b9333b469d2c71737", "cfe726000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93680a36c50f8ef6c287427466622598093ce8ce9053bc22d3973767b96e5c582b7"]}, "failure": {"scriptSig": "", "witness": ["6aad616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f311f3194f27d91bd26c7ac20214d331ade7f1c9 b/txscript/data/taproot-ref/f311f3194f27d91bd26c7ac20214d331ade7f1c9 new file mode 100644 index 0000000000..592bd25a8a --- /dev/null +++ b/txscript/data/taproot-ref/f311f3194f27d91bd26c7ac20214d331ade7f1c9 @@ -0,0 +1 @@ +{"tx": "1b2bfb8902dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b780100000008eb22ab8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42600000000c4deaba3015955540000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc74506636", "prevouts": ["1b791f00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "c7163f0000000000225120de1091fc927c36de35363d478bd0613872bc5b94677334ee7c316f685fdd8d93"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "de7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936337de194323cc2d0e259e7f698dbd99f7b4adcc7bc7010d92bfb10064ddb4e563f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08267bf5ee6e785c98394c7354db9cd2cb879e9766d4c80c1499d7b3e856282bd13a05e4a06b32de803bd9a925f4d86502b21cf2d106a73f15ada31e997750cbc80"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93639134f96039a0fa33d353d3657d4f6c27571ed27c9ba3a414c0fc3979439528967bf5ee6e785c98394c7354db9cd2cb879e9766d4c80c1499d7b3e856282bd13a05e4a06b32de803bd9a925f4d86502b21cf2d106a73f15ada31e997750cbc80"]}}, diff --git a/txscript/data/taproot-ref/f32541dee791305368453ac147924b5c2d9dfff7 b/txscript/data/taproot-ref/f32541dee791305368453ac147924b5c2d9dfff7 new file mode 100644 index 0000000000..3cdd99ad4f --- /dev/null +++ b/txscript/data/taproot-ref/f32541dee791305368453ac147924b5c2d9dfff7 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8900000000e8a3feaa60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707c01000000afd25c9604adb63500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc65ed682f", "prevouts": ["d10f290000000000225120d1b58e92ff256598ad684e4e35c535f024a8511a42153841768436269707b6d1", "52ec0e0000000000225120a04971ad2b8c16a17e70d417eb355b323e82da2726ed216775e912c08433fa96"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902ea0e094034c5e6eb4c6031e9df0a3edf88d2031e7902cc2f751a948274f36cecb8308c36425a65e399229ca8616da8fc9a443a32cb426295828f29981941139df2d2045ea5a8332f99b43418ddeba4420c79fec9082d78325dc460cf6bf74caeb74bc07096985326770db739522f0f7e471d78d2edafcda7884589c570b574a8773120b4ebacbe20a5243295993a277823b0e2b996bbe943ac58a28ddd87e91eea56181dc3f34c5e44ee8c1e3e7bc1b2154967aa7e71fc8810b0e8855033999719c3238bdf5df21520d2eb31fd017829f95513941eb5983c8d9aebe44fefeac6b4a8c7e6ada0f18e71e76c02bf5a9889578ebca7b9a1c61568d1bfaab17bb9c4021fdbaaf5182fc271caa1dce8b8d9150067bc37e0023b3ac8d9403fc4f799830793c87604f69b0310f15020aeea5d6978128e84a08025566e793c7e394f43e4bd0fb1a6a7b107624e789c0bd509bb82de81cb13914cb6619e5da1f2cf9959e151bffcfffb6383b61888cf82e452e702b60d56fe2e36cdab57ad4faeae787bed212c425c8c19da4c89cb6806fdd78c26f28f9286bc2c6503b8bb4e694dba4c9d714859521409dc972b1e8f1eb75234a311d0ab775fcfbcf6ebfeda0238f5aa36e864ff4057bebe3aa5acba8487fe5af4e02fe94824a7cfde225ec22e5c7622791eb6ce6f5534e8f13ffc1243ccf528e2abd2d2c6a14669f58a9ab3121fdc3a59c8475a231bda08e2b375cb", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f53ffac04ec4df156873ff2ce8c8da5c67fc975976d2a82eb9a66b7e9ed214d120e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e191fd70f8e44f42202023c580ea06f1578af3f03a2439147535e7b1f16736e0d18859d05a814eb862cab9a6acf3b7acf0881c47896b22b56466b77992f62c0511"]}, "failure": {"scriptSig": "", "witness": ["4d0902fdb6b31fbf2ae8d66df0a611a81c789bea6696d01d691aa75aa7bc49217f89a97be1ff706ed8d47b85afd85daaa36c57ed1ffd25133aa10f3b13c1e9a92c95c7592a133d4660e49263b9913903b14537287f0a24d271d7ff58317cac16f46c1ea3e1d9dad0d8d33ad015df33f88f17664fd1557e66820ce5e6127ffeb4eb726715a876bfcc51a9f3f630ab567a41eeecdeb741820d54e43caaff93d8e931daf5857331dab922ba7262e31e0161f6783f2d29eb034deff5f510f5342b35cd40806b1ed465f7ac9c70377fc73e72ea99aa2479581f78174dba1b99dd17b299c723b59330c894f657c827f70c860ca17e9eec954a4984f1b47af2e3fc30aa34b523f8a92050bff7bc2af149480e368983c0d0c6c120400ef277603a1278eb4d70d3b6f270bd84825b50573217681b55c592348ff8ee587252bc0064b1c17c85732287e313f2dc8bf4c7a0460dd37bed0c2741aa921a5447aec3bdff57249408788dbd7b7740fa1d0edee98d7c6e6a8c569f8a16bc9081a79d3e88dbca03b6734f14429883fb7cca514419e5b59c7345de05291fee851f295d7f4cc86b7888bcf0f1cc4602d8c4d1aa8c67d743ad8f7c4b7e03ffdb3a1378ab17fdba3fc3658b885c3c7974f71e321daf7903a77ddb0446e293e8656e2c6762b694631fbb8f0ad04d0daf1907b41a6910322975bba188123c8afe21e03047617e66dd27050057e763f10a9baeebd2a8f4447561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936628965e7d974c507f702398db63655a3c25a623e9114254b8f562e8f543efbef70b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d865720d6d723e038e6335a667e0268d00f4826306437ee84552cc7f8172181160444ef73f74a88798a5fcf30fd7aa5fdae43144d667a238076c6d52287fea96c6e3fd1"]}}, diff --git a/txscript/data/taproot-ref/f34aa9739565ceed4d2a67fa8e24e1cffda032d0 b/txscript/data/taproot-ref/f34aa9739565ceed4d2a67fa8e24e1cffda032d0 new file mode 100644 index 0000000000..294085bdfc --- /dev/null +++ b/txscript/data/taproot-ref/f34aa9739565ceed4d2a67fa8e24e1cffda032d0 @@ -0,0 +1 @@ +{"tx": "64c16f4c0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700900000000414b74a060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700d010000005c64f2b20470e81c00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc733000000", "prevouts": ["d259100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "40f50e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_bc", "final": true, "success": {"scriptSig": "", "witness": ["86ebde0a97b9ac5e1fe581e0338422a4334a3070752cc547427cc67e4e79972fff8a03a01b4a85de9224f4748e7b54e0f702a8294ee5abc6607b9b43b1f58f7983", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["e5ce9a2a9092c727c83f017e2c3e1dff7e83820131d6451ba0643e6053c375a2e8b14c84ad5a4c0c475d87e8b2e739bc8c4788df6b419a169588acd93ede2fabbc", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f36797074db1a3316cf9f79b8cedbea196a94883 b/txscript/data/taproot-ref/f36797074db1a3316cf9f79b8cedbea196a94883 new file mode 100644 index 0000000000..338d7beea2 --- /dev/null +++ b/txscript/data/taproot-ref/f36797074db1a3316cf9f79b8cedbea196a94883 @@ -0,0 +1 @@ +{"tx": "15915fbf0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709900000000fb88b9dc8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c47d000000000fa7e7b903fc313e0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875b000000", "prevouts": ["55970f0000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "ca62310000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "367d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada435635f2cd61c9348f40975186bdc5a06175f59207abbbf8c9a9810dd12002cddd84017ed719a58f336e1892f80afe07727626533c4c78318e44c39862ffd3"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936041f230424bb8fbea78efad3eb719ee17a28dae5a1a9e7f1b55ee9d01d28ee75da435635f2cd61c9348f40975186bdc5a06175f59207abbbf8c9a9810dd12002cddd84017ed719a58f336e1892f80afe07727626533c4c78318e44c39862ffd3"]}}, diff --git a/txscript/data/taproot-ref/f3a1124f0e210f773fcb446a4c6325838f796dcd b/txscript/data/taproot-ref/f3a1124f0e210f773fcb446a4c6325838f796dcd new file mode 100644 index 0000000000..719c02e3d5 --- /dev/null +++ b/txscript/data/taproot-ref/f3a1124f0e210f773fcb446a4c6325838f796dcd @@ -0,0 +1 @@ +{"tx": "392083b603dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cf8010000000320c5cf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704701000000934072f4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8200000000df73f6d504ec96cd0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac1b08b24d", "prevouts": ["47805900000000002251204e3fb1c88f2893b13c1c33c3a0d0cd819c49ecb88ca3deab379ce318a8955811", "1ca9100000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "e5a5650000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f086534a94238de44df238570c9dd488e8c889ed3d519b7674a8cabbf1761d91"]}, "failure": {"scriptSig": "", "witness": ["6a39616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f3abe34a0b2b561230223ebd55fa58c1abfa4752 b/txscript/data/taproot-ref/f3abe34a0b2b561230223ebd55fa58c1abfa4752 new file mode 100644 index 0000000000..6f023a9317 --- /dev/null +++ b/txscript/data/taproot-ref/f3abe34a0b2b561230223ebd55fa58c1abfa4752 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127010000000008e090c5160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cd01000000885fa63502431e1c0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc8a000000", "prevouts": ["68d90f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "d1220f0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_2", "final": true, "success": {"scriptSig": "", "witness": ["de3e6296b539c5d43ba746df546722bcd0ae6fccfcde1791b4b3090311d145d44ac71ae37af183ab8fd2d6761d9e3d5bc8ed3fd820decc07d60599c01c2b802002", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}, "failure": {"scriptSig": "", "witness": ["c575125c0cae9f87297938fc1b4f162ef980f5458ed9333981f99a837ff75ccc9d18428235c2c340127231dda31a63b3c2afb31c3e74f35a587b4a61a75f9b3002", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936"]}}, diff --git a/txscript/data/taproot-ref/f3aefeaaf417737c9b08ddb588ac8f34f1bfd7c0 b/txscript/data/taproot-ref/f3aefeaaf417737c9b08ddb588ac8f34f1bfd7c0 new file mode 100644 index 0000000000..3a6d6ad9e1 --- /dev/null +++ b/txscript/data/taproot-ref/f3aefeaaf417737c9b08ddb588ac8f34f1bfd7c0 @@ -0,0 +1 @@ +{"tx": "50c82e5902dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc301000000530c23e0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9f000000006367e0c201cce1b500000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac97445a20", "prevouts": ["24234d0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7", "0cba7d0000000000225120f6ebc972e8b9359a70abca9662ec0add7397530b2d8a533f3315a928b489401f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902c6c81c190d27154708867b1912e00600f5e2aadf6695da87d92506f791f2d50df22c4110e6f50963c8aaa07a8b1f6f13e31272f737c2dfb86420c921d4e106300d97b6ff006e3f5381fdb806908db2ebd1b4b055814b5f6e3372c3a9f0b8cfe635cea4cf0a31bc6f7ac16acd7ee0f0302971cafba8d2c6a48e0464885538c1c0c3d683c1ce4c94f537c2363b8741da793676dc3541b9abed643ad3a672863582f11c70d48e4f983430d408a512c721a4b93565376c17081c7ea39f5552ac86cedaa18e9297a50c1293d88d3c2ef915a0878b49d3f9663131efb13f33d1129c69091231d141773654db9aecc95aa46518b68249cf219027c5349187b69eba6ae606a154410595b157aa9afa9156992e0ab68cd28e9932d008624d4ef659e4268c0555a1bdc833de6768e4d9fb6e8afb4a60cfeb1da2cc6bd6809e6bc3f0cbef415838f69920a477c892259d2e14678f90ac6ffac284d327289b987a37b66bd8972554cc997a4e0f9a0221ac727e9c76680f7017bec4cff5049e5778cfd8b66ae358282f9a20befa9a5e4ace98e9d8ccdc81dcfe0348e1c25871dcdaecadace9f4a784ede73e9c2727b5f7d13bcc25777be6ab788902a4b9e49f3f48aea1f034b8cf9cc99a8049058a0de716bdece82da3a6993b47ec85e767ea80352d1c5ff85d6ec7399108dc2dc273c66b798baf8f99516766ce211f35441300e2958e21c4b422c3d548014fe362ac7581", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a7634d18480d5775104fe67110de7da21df5ac87ea179725883df64beed806701d1058d265ad692c8fd0f688dbf18dd54d1f122592f426fec87ed7f5bf39e232f98bea6a80fea94b985145b0732d825e6fbd27add9cac654f3749fb201eaf5c0cdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}, "failure": {"scriptSig": "", "witness": ["4d090294888dc88238cf98041df8e3c1996005b78c0b1d0c47fadc0f0f9de29a1c58e5e1bf5d39bf5725da985df4565f9f7026bb0159ab38f5ff35371d7f3a0f39b5cd007ec86fd1711c9bc5ef8c3bf2b3913040a26ad3cb052a24ce7b496e6fea088ff23d86a2034095dab89d05399ec4d56f571d5e65648582695ee886e0de19fe51506815439cdb59b15b5dbfceff5b4c19d3a89ad971ef66685e79c82383d9440beffedb6dad95bbeea48565f39d5bc1a224ef530cf107d16ad69b0b700747cecf894543b1cfa1dc7bc939c7dd77ed6dc28967516eb34b32832a7cacab62b6f51211e7dad67a89899d6388257974e78134bc0c80e9ab302e5f4b22b2c55e489e02ac92617df9cf87d370a76d3d0a96dc3c9b1e84c65eef346404bacfd7f261443402facbee94c673bd20e4a28369ef37ee0bd5223a070fd1b87475592947a820873887b3878aecbea17b3277d8782a78620e354f8888d1042269422fc93f13960ddc7662550d2b770e3a8c230cc1cd03080423df1bd37646adb5cc5918f28e0cb7bd3b181d38f396bf628136e599d850472d7d8bfa5f848ea42bb3f9733fd7bdb0bce88979f136d60f05b8cd333f91987b83d262e7f1011f228dbe7bdc40f81b5ccb76c8a9e8425ace8a71ffe51812abf9bf00ae5b4f289f1b369fe442d449a41f1f7519be519efbdd2c03f7abaf4785dfc0f1dc74f79192cc1883a35f9c2bf037bd681f3154a7b418db7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361f65007fd58bd495e8e57cff0dbbf5483e3aa8e1943b9d4f8d3979ba8fb1336b1d1058d265ad692c8fd0f688dbf18dd54d1f122592f426fec87ed7f5bf39e232f98bea6a80fea94b985145b0732d825e6fbd27add9cac654f3749fb201eaf5c0cdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}}, diff --git a/txscript/data/taproot-ref/f3b9a054bd33583afbecffad0407dcd117b60cb8 b/txscript/data/taproot-ref/f3b9a054bd33583afbecffad0407dcd117b60cb8 new file mode 100644 index 0000000000..ac262e9902 --- /dev/null +++ b/txscript/data/taproot-ref/f3b9a054bd33583afbecffad0407dcd117b60cb8 @@ -0,0 +1 @@ +{"tx": "a117860f03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc701000000bdcfc3bfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5600000000a3e6ebc160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e2000000008a5cc9e102a66ab2000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7d1010000", "prevouts": ["8417810000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1a8a2400000000002251200653636fe1575a3601b4d73c1ea9151f68d884d4a6f1db0400b56f492c494afc", "27c20e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "317d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936def5188e99593db0c47de29d7d0d72f3d5f471d35a035eb3d04eaa88af1d74c23f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08228c5b97b98364e562d83f29d0f7226f72eeb298058e828607471d679ccabea05a4517c545b323e839a783e2c84e61e1f1046ec65ac2c085bba4fcd3b8ecf0c89"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362f419aa769806fe430d3ce09ee6cb2fadfcf1c0d8c9e17198fe43e74e8367efd14e57181048ac96cb53327a8f686080e72dc312071604fe817a5f66426afc20b12f65ebf74c8b951b09da599ea3d6f486010b8cccb0a2142ec39aae62c1ca3e7"]}}, diff --git a/txscript/data/taproot-ref/f3c37d9c9bc7bbacd5acc05ecfa2dd6b3e4079be b/txscript/data/taproot-ref/f3c37d9c9bc7bbacd5acc05ecfa2dd6b3e4079be new file mode 100644 index 0000000000..f9343ee852 --- /dev/null +++ b/txscript/data/taproot-ref/f3c37d9c9bc7bbacd5acc05ecfa2dd6b3e4079be @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf301000000f07fa784bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa100000000b808a1ce027a278e0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88aca0020000", "prevouts": ["830c27000000000022512019e1bca5d0c34a5bdc7dee301e7e444158f02d22ac120f0d8dd3e9f4121adc33", "027e690000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_eb", "final": true, "success": {"scriptSig": "", "witness": ["685ef156cf62d73f7cdfa2aaa38d597851af2e5a1174e6ba21f74069c7a7f652bf2a89669337c2df5864303f99ab421b6db4a112c06a3c780a0134634e047c7d82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["f95025e4e7746f2556748bfd41186c9f0acef9c795b926a51868bef67c11f8e5d7352ae4b83789271bd1a422e300028aefbf519b2f5ff63164e56ca26d145bb6eb", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f3dbd1cd81a692630c41a036e51a108069161d76 b/txscript/data/taproot-ref/f3dbd1cd81a692630c41a036e51a108069161d76 new file mode 100644 index 0000000000..a08729e6dd --- /dev/null +++ b/txscript/data/taproot-ref/f3dbd1cd81a692630c41a036e51a108069161d76 @@ -0,0 +1 @@ +{"tx": "56b4ad660260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708400000000a354aaeb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c6010000007d9bcf8c03f5b61c000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e746000000", "prevouts": ["81920e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74e50f000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/purepk", "final": true, "success": {"scriptSig": "", "witness": ["4f07e41f1e1869cb4e84b4b46e6b2becec9328e827c5508bd00b3ee6afaed6458a6cffa6a91593edf6921924e6549ffb69761dbc1575f6dcad78da8214ef9f40"]}, "failure": {"scriptSig": "", "witness": ["35a0b0e7fea0af4106791c6c8dc56cfee58a4fdd22f6710db193fef66db2972674f7aa041d4a50f478797756b9fe2bc180bf8f925d0aa702788f4067e8fb3507"]}}, diff --git a/txscript/data/taproot-ref/f41b245dc4b63227dcd52bf8df204c69ef2c632d b/txscript/data/taproot-ref/f41b245dc4b63227dcd52bf8df204c69ef2c632d new file mode 100644 index 0000000000..39468dd425 --- /dev/null +++ b/txscript/data/taproot-ref/f41b245dc4b63227dcd52bf8df204c69ef2c632d @@ -0,0 +1 @@ +{"tx": "927a8af202dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0902000000a680769e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c499000000003a7254960188a41e000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47871c050000", "prevouts": ["48375e00000000002251207492be7c38200a6f417f2df61c3857d7747fae6fd7807509c1951e5f14ba63da", "babb340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "d0", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364c3da4617f1ee0f61cdd6b0c3800e0774a5e631cb6cd048785fdfa88f1b1ef57f81a0ae7b640e88bbe84e7c412f47337f1d12d37f95b062c539998fd28213cbdf3b3fb8d5121830dc5ea13d084a01bce62f4c2426ea7fcb92dda33a6ec3d9661"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef4a0b996a651997ca76f2d80ba069e4ceeac28cbc038cb062656a276693f78c3bd101e45a609d3b8e0b3b6f0b7594624f7e9102ef5d5dd3027418de40ebb2180d690b53af7dfcad925f9834a18ad2ddc318ee8f8616a880729dbc2fd60dfccd"]}}, diff --git a/txscript/data/taproot-ref/f43a467e1ed501e4fae97b23c7ac5f51943b4a60 b/txscript/data/taproot-ref/f43a467e1ed501e4fae97b23c7ac5f51943b4a60 new file mode 100644 index 0000000000..792e2f6e81 --- /dev/null +++ b/txscript/data/taproot-ref/f43a467e1ed501e4fae97b23c7ac5f51943b4a60 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb401000000f091c7dadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf100000000be70b49003eef1a400000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6a491a81e", "prevouts": ["c76f8000000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190", "24862600000000002251208ba879939f2c6ad8b8ece6e7af2596449dcd53da6e9921656ed46c920282904d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902f76e832bccd01ebee3e3deb319aba4ff88054cd436a3bba64686bca9e093f588d862b5a59fc063cab1b3a383af372fa19a411d4a5078bf9ebfbaacec0e3152375cd0faa3c105b50cad764301ace5ba285e9bc80b2e66e84300c5aaf77cc1ac70ded079305b3fcb0016b0f642d20c98b6ba892f1e1f79353e013e926aee39f8278c92da8d29ca778b6c89558cd24b534ff2fc7d974c0b341a7bd2810d8aafe0940a9471b29f75ceb48659c5ac1d73ac8286841c09f8d5271aca3e4904b74a3a9fd4cb1c8fcbb961be477a22608dcbe76b13e3793f1611dae000e0f7fee8935471de81e262cfafc30719059c00db405f8e5216878441d3174d59729ed35df6e898a144dccf8d3258d77591d29b059d2b887c048f566d56dd28069a5bd6157dc294f8e3d228965f08e199095cad2d3990971e68be174c76587c416e61c2738dac7dbc823ebcf6eff0c9dada42d91667c474e8d5309a8cd5b25aa0348a66dc9ba987827271e077d79f6e31d5e02ae05dbfb533a16545261c0aace40e640deda1a1907ea5504d9e40ea86ccba1d1f132c15cd9e9a55facf7bb9422a28697023ecb566ae706e4e98abe581460b4426c0e51d0b685ffd58f51747008b61a04111630d72a2e144d1752c0b0dc2f92af0a47f6da7ead72259364f7f5433040128816f9f6efe8dc0cd95976b7a0f9f11c090023cab8085a9715eb951c8ef41945a6f735ab7d4429f272d96ac8b1b75d2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f27a0285e06e4d6dd48a2aa2db1f8735e89b1fe8bbcf48293d2d44c61aedd6c7536798c57c197a746bb2ed7f28bea5bf32719d74447f5bf93d90a00b781807a2845c4b1f0ef9796b099f7837236ca3239de7da07050a4e4f568f49f6a65718f105f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}, "failure": {"scriptSig": "", "witness": ["4d09025c60a37c5d0b8cdb3cd5ad1de44f9c13610bab8a2957eca32f397892def18c271db72dc7768c9e6badd7eeff51340c6159b1ae4098b01890d1e0eb43e810f73673788887f77c361956f69e57e7a1eed5c0d91f9cec1d6eb3ee17be0cb073d455aa700f15f970789270e4cb308357a4f37db3ee6123ceb7effed95788743cccd1ebb796f5af727cbaf45c256d029c769dba242207c78b822ef9ce7ef473f60f97a1aa71d1c49fc355a00fe2ca17ebcd085f1688eb94c28e219dcfac85a82e3a15c13fb67fd930b1efcbea5d61971c10e37cebb60fbc96ee4d71adaa9e127bd56ae60b93d2ed53df8df859c1d92f0750a38699aea78922e2e0ebeceb39cc68bdfe65ebddf4b0b3c9d79808c7c5bee00c6a5d248cf33cf46de648ef5f05f552292e10883855b292e8683bf850b1f7801f0f7ead5288670aa3868493b44c0762368e5678c8015697a1d26525586ef97ea1d42ae4055e13b6443d5b03b2d75aa13200f677bb63e48b6f76b36091e5475890f3139ab9210c4624a799c14861168ceeb3fc2a14844625c662dceb9219925c3a06c4d9c598c3fde4be3c14cf51c7180a353d50e84eabff5ab415ea7ee5c10e8e69a34573a019daf4e92524d172746f17dd6ea89ab06b56c35a8820d9cde59cb6c3f4e83e726013d05cb9e96846eb60ab1779db3f489eb46da2802680825c1e97157e6237cde850ed7950a3c2a6993dc4b7fe8cfe89205cb88fe57561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365b5b9e30f4b23104a86460dbf05c99022233dbfc847410bd2050778598c1a2352bdb5955fa247e32681f749888c9d4f86e5604dd03da59f821ad9d541fb8adcb845c4b1f0ef9796b099f7837236ca3239de7da07050a4e4f568f49f6a65718f105f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}}, diff --git a/txscript/data/taproot-ref/f4466a6264c406cffaf61cd062c6954b8145b827 b/txscript/data/taproot-ref/f4466a6264c406cffaf61cd062c6954b8145b827 new file mode 100644 index 0000000000..94e0e5e587 --- /dev/null +++ b/txscript/data/taproot-ref/f4466a6264c406cffaf61cd062c6954b8145b827 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c040000000044ed024cdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bef00000000056c24ad01f45650000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748779000000", "prevouts": ["6a234a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4a73280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_92", "final": true, "success": {"scriptSig": "", "witness": ["929ed163ff0f1968403a7b8395e155526bcc85f85a7f9dea235fecc15b898dff635386de83b54e1f267e640b3362afae10f7cd3cd3ea31890c3a653e49f5c71882", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5116b9156699710958f2f334ea1767e885d13a6e46bb2d6584166491503cbd57c4527619c26e46df6cdc7c97eaa9c6d6d2d0fae6b7ca1341a18815e7c94d88e292", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f45bfc326aa2978cf872bbd25ac92e74c51b222c b/txscript/data/taproot-ref/f45bfc326aa2978cf872bbd25ac92e74c51b222c new file mode 100644 index 0000000000..f11c43506a --- /dev/null +++ b/txscript/data/taproot-ref/f45bfc326aa2978cf872bbd25ac92e74c51b222c @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706201000000f53fbee960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127004010000008b79075601f01c0f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac54000000", "prevouts": ["cf231300000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9", "bfe7110000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "d07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e81c85c730685924be02f7d46bcb10c9c474c6189388cc381e7f7055dcad1cfa477e36b196311c1a9d305bc653889017f46f4c4934a1587d131a83127df4466fae"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b0d5e55afeda99172050d01357d6d8287f4824ba4286577d269d78bc9373ff36ef78ec8d95f7a630a87f4a69d09adcdf12479e6b3f8e7304927bbc129b24d5867420b3503815f4c7b180839898c4c4aff0ab6ef4d8b082708dba105a321f7428"]}}, diff --git a/txscript/data/taproot-ref/f4604f24ef1262cff35502c140d3a3ab09e62650 b/txscript/data/taproot-ref/f4604f24ef1262cff35502c140d3a3ab09e62650 new file mode 100644 index 0000000000..c71ba1c69d --- /dev/null +++ b/txscript/data/taproot-ref/f4604f24ef1262cff35502c140d3a3ab09e62650 @@ -0,0 +1 @@ +{"tx": "cdcd5a9802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa500000000b8ae7dc6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bde000000003c6de5f402e5588f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acc9000000", "prevouts": ["a5346f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e224230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_77", "final": true, "success": {"scriptSig": "", "witness": ["8c0047ba119d7105191261fc39d1282732eee7d88f438175d67723eebfc51ab36ea0ab5cbf93e3b0a20db2f749e37a1c1ad944e447887aa161ea142c1497c81803"]}, "failure": {"scriptSig": "", "witness": ["f72adece7342a4fe15d2acd2a7203104f1aa7deef53061d3eae495a89b722824b8dedb456d14e95fe589fe4da91f6f3ec12b414c0650506d3292b419ac15a9db77"]}}, diff --git a/txscript/data/taproot-ref/f47e1dd86121d4d47b5e315b8bc8f941d5c890ba b/txscript/data/taproot-ref/f47e1dd86121d4d47b5e315b8bc8f941d5c890ba new file mode 100644 index 0000000000..558e534e4a --- /dev/null +++ b/txscript/data/taproot-ref/f47e1dd86121d4d47b5e315b8bc8f941d5c890ba @@ -0,0 +1 @@ +{"tx": "02000000038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b600000000e9c7f4e6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bcc00000000ae03d8a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b63000000004e7e6ee9020bc17c00000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acc8010000", "prevouts": ["529f330000000000225120973a94e36a4a923b8d161b8fe153210f91b56b5e4fa7540d30da78859ffb8897", "1b20280000000000225120035d0d8894332b18eeb5087880b9b7fe7a878dc0e9a501d9b85908b60f4f194b", "d2c2230000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "4e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08230e8cb56a1cc46a8845ca28d4847c7375475f2f7976a44b43884e49f27807546ab153920b849b6028620ffd2b7e486a6f5e2411aa058dab621c72a45f67f5d8e"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936323ef28f4e99bb17bfac2f1234bc4bec8e02dbcd7bd8742e9803ed76c3e6ec8530e8cb56a1cc46a8845ca28d4847c7375475f2f7976a44b43884e49f27807546ab153920b849b6028620ffd2b7e486a6f5e2411aa058dab621c72a45f67f5d8e"]}}, diff --git a/txscript/data/taproot-ref/f49204f8e85d64be3490b7843476939194bca10c b/txscript/data/taproot-ref/f49204f8e85d64be3490b7843476939194bca10c new file mode 100644 index 0000000000..a9dadee231 --- /dev/null +++ b/txscript/data/taproot-ref/f49204f8e85d64be3490b7843476939194bca10c @@ -0,0 +1 @@ +{"tx": "e40f700a02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5d01000000e6a4029260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912708d00000000b040e98602ca483700000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72b040000", "prevouts": ["7b45280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2d0d120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_c", "final": true, "success": {"scriptSig": "", "witness": ["72d1d9985f2bb5f99db483d506f51dd7e1dd9b478d640f64ab7e50b4d632d63395182d40a5c1fdb413f6229fcf5b28aa09c465b3b0255fe1a7fe362a8f5e075901", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["0e56dc3d5f52661da4eb15a7f497abb14e4a556b13019d3eeb299b53b3b04e35945df7b2a495fd6a25aca05cf77af2eaf385c06dba788bed111780c2e85709440c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f4cc235e3a3e0f11b34f866c952d52ba470ce96c b/txscript/data/taproot-ref/f4cc235e3a3e0f11b34f866c952d52ba470ce96c new file mode 100644 index 0000000000..12fb7960c6 --- /dev/null +++ b/txscript/data/taproot-ref/f4cc235e3a3e0f11b34f866c952d52ba470ce96c @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48e010000001eafe6a2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5900000000fd8a98450287b78a000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac6f000000", "prevouts": ["9605370000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "21fa55000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "a77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fada584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e389e677eaf5eeea89a70f01c0aa3bc14cf3320f4b6dd8cc61f33138af3398b5b11a008161139ac7a92b00665158d25501a881aeebdfdbf881ee45b85e0726c11"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363e9eb096ec4c0e60b6c49349abcbb61376af9764a0a95f04ae72fcd7b6082681146d6305f54208d13896b102f4aea30badeaee99896cb007ba6ff00553e24c3b2915fd873a4966f8e9b4a3b328eef3933245a1c852c287990317c3760d8289da96773453f0744a158be0509abdec64f05b1db7ccf03251d8359952271b442a24"]}}, diff --git a/txscript/data/taproot-ref/f4e60bca3a955a55d00e4186db841023ceef4e20 b/txscript/data/taproot-ref/f4e60bca3a955a55d00e4186db841023ceef4e20 new file mode 100644 index 0000000000..9c679c28c0 --- /dev/null +++ b/txscript/data/taproot-ref/f4e60bca3a955a55d00e4186db841023ceef4e20 @@ -0,0 +1 @@ +{"tx": "a5ed58ed0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d00000000034e4feb1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0200000000551f05a603895f38000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac388b6049", "prevouts": ["0a9b11000000000017a914124ce61ffefcd78a2e382c17cb257bb0bdd741e387", "7181280000000000225120bb7ba78fb938249831f92608d0f71e24d86e7660c51dd93d52c4bb7a103fd2d9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "473044022077abc4cc6b7cd5d91ef1175435e1083fd35d2b7681733ffe6a07b7e80a90f19d02205ca8f3d8a33ee788395ad27c52bef0c43d0e251f548f9ca3a7ce2976afe576da81232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}, "failure": {"scriptSig": "483045022100ab43b4ecd06deb2c157ca010f94c1b58a8909e5d7715a349f80a42d8015fab37022024dc6e2228d2b16af1111b94da45d43a8b82672c1557405441724d7b92e712ed81232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "witness": []}}, diff --git a/txscript/data/taproot-ref/f50995c18b1bea7d6e8f78c8db8139687517a781 b/txscript/data/taproot-ref/f50995c18b1bea7d6e8f78c8db8139687517a781 new file mode 100644 index 0000000000..52642e2dd4 --- /dev/null +++ b/txscript/data/taproot-ref/f50995c18b1bea7d6e8f78c8db8139687517a781 @@ -0,0 +1 @@ +{"tx": "143da98402dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b440000000025c5a983dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1f0000000038ac8a9d039d224200000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e764451426", "prevouts": ["d3781e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "694a250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_dc", "final": true, "success": {"scriptSig": "", "witness": ["29ea9629f262b3ba7fbe2f9ae3264dce36ab42ddfbf22e319e2abebd7ee781bce6078cb25373936251d6b339549f142453c46a29b6346c6f1a2c9a36d857856f82"]}, "failure": {"scriptSig": "", "witness": ["796c8696d784442be86ab003b2b733669ece34a03828c19c9a994a9a2b0775e2fb3e9b528c99c92386ac583edd69176dd3993c6d52b5a7ec33d90393d4200c09dc"]}}, diff --git a/txscript/data/taproot-ref/f50bbc9cda906042a1e0c756df37b20c36a36df6 b/txscript/data/taproot-ref/f50bbc9cda906042a1e0c756df37b20c36a36df6 new file mode 100644 index 0000000000..1bb4cbf15d --- /dev/null +++ b/txscript/data/taproot-ref/f50bbc9cda906042a1e0c756df37b20c36a36df6 @@ -0,0 +1 @@ +{"tx": "8afa4c8302bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1b020000003cfad686bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5401000000082929ed0293b5f3000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7ba010000", "prevouts": ["962f7b0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "51277a000000000022512066359af2a4c6a03e108cd4566fff7ab36618284805810b34acf3d4b4f5538ce7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_97", "final": true, "success": {"scriptSig": "", "witness": ["ca3f7f1c7693625df3183e3c6e056b4d9107ebfda286fa1c63bac9824200f327f1546e36c20e959d2c2075dac800413d5d66982bd496abfd0962d5223ec2451503"]}, "failure": {"scriptSig": "", "witness": ["40086b6d183ac46211ee43153780b3bc677fddbe93aa07e7de7fcfb3811e130ef6041c90798758373405f1e89a4b819556afc76a305b8d17204c9755e38c6e9b97"]}}, diff --git a/txscript/data/taproot-ref/f54e6bed090f658f483733605be1def47c4a00f1 b/txscript/data/taproot-ref/f54e6bed090f658f483733605be1def47c4a00f1 new file mode 100644 index 0000000000..4e95b1fd84 --- /dev/null +++ b/txscript/data/taproot-ref/f54e6bed090f658f483733605be1def47c4a00f1 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c601000000236a23f860f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127010020000006b91e6da01a7a13100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac3e000000", "prevouts": ["83e233000000000017a9149ae30fb20c1ccf139e5b5804cecde274bac08df787", "2cb5100000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "9a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936385b7c6b5b390243aefe4c626f55742daed642572f577c299043227d557e4d8e703c0353c01e1109d81375c08919405978bc042794caf82a403da05ca89d0cdeef17902325999cb16876d9e124f321b7a2400c6233e0b61b95917979ea167214"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c31382c7cae07a09a83f26d089aa1893801559adf71a019d4b3fb52cf4a1693575ccfc706e32ae7f6b2a63f59d728082bfb2443bbee0d6dae87ff94b5ceebef57e56d08eecb8b548a03ce82dd22dc92a64f1be159e88ba8944ed4666490b777c"]}}, diff --git a/txscript/data/taproot-ref/f5584e332423dfd006828addcbd73f040328b087 b/txscript/data/taproot-ref/f5584e332423dfd006828addcbd73f040328b087 new file mode 100644 index 0000000000..830fe3f92d --- /dev/null +++ b/txscript/data/taproot-ref/f5584e332423dfd006828addcbd73f040328b087 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c38010000002c06be89dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7a00000000a16685fd60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c7010000002dd89bb302d4447e000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4870e000000", "prevouts": ["c10b4a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0b942700000000004c635b2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ba5c87672102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac68", "29fb0e0000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ade", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361358df4a1c3a93eee872ed849c2733aa302b60a4d8b7bf0bf84905e283593e8220e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1aac1f02719ff09c82d93c60ae8b21e31f1ec3fca4030b09dbe2604c5a66091c209208a3d5cb0b20fec302022af702ea090b934668d0752a16a75cba2aae8c677"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08299aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb423dda11617dc042479e1d576056805c31872018ddbd603e5e1ceb926e90a3395bf82ba79f2fbafe67448595b33026800f76a879cdfc27419c1eb96837433fbad"]}}, diff --git a/txscript/data/taproot-ref/f558bde45b06e08703659c22eb17a9b25f4941d1 b/txscript/data/taproot-ref/f558bde45b06e08703659c22eb17a9b25f4941d1 new file mode 100644 index 0000000000..2b000c60a0 --- /dev/null +++ b/txscript/data/taproot-ref/f558bde45b06e08703659c22eb17a9b25f4941d1 @@ -0,0 +1 @@ +{"tx": "fb4d73380260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700b020000008922b8d1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b10020000009e066ca8014bde00000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87e8020000", "prevouts": ["02ba0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5647260000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e14c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366ed0e779cc15e2a03d2e3d97c8cf6c7506658d81da92e90af03d7b12593133764b04f8f54a0a76ae0e4c7aeaaef28ce29fe1b2cd8b193a4d28e758ec231d2b883bd198ccbfa9c702c0592bb8c84a948c36ef9eddfd1aec8278a333dab45811656e171838972c3c3a6cdacf031a4825f83b841697bfdf19ec3d087e2c9ca65f0b"]}, "failure": {"scriptSig": "", "witness": ["4c52e1", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b8e2daca36c32f10b24a19a8031edd6fcfb8e5c5d75e4dfb877ce341a790b8466ee26669afb6dac63e75f53b4cae6cf36ae7535fe99100c6f349ffc46155d224f44ecb3bab6b962a7ffa14a2ce082ec551943f33ce508b63a8ee30ee5e49264"]}}, diff --git a/txscript/data/taproot-ref/f560ba3291103bb7f5cc015586c6946d5f9e8857 b/txscript/data/taproot-ref/f560ba3291103bb7f5cc015586c6946d5f9e8857 new file mode 100644 index 0000000000..4646985b4f --- /dev/null +++ b/txscript/data/taproot-ref/f560ba3291103bb7f5cc015586c6946d5f9e8857 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7001000000a1395d8cbcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff900000000c2c480d30471ffe6000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e733000000", "prevouts": ["a365820000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e03f670000000000225120f6b24239f005e5ad8a4113ec06c48cda726a0e511c023e717379412f24fce34c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/branched_codesep/right", "success": {"scriptSig": "", "witness": ["fced320f12908ab9299f9f2d8bfa76596ed6f1097c6f43f0f9410f41789b92c683585cf63979859ba714c37c2da2d50fb16e8f2f1d7652476d3d10dad6c5123e81", "", "4cfe26427fc7901b4262f3d916bc0dd8633c30e5af8ceea1dcacd253c102db78cd839b841955f61e94bf7285a2d0e43879ae3b488b8a01e39fb2cd2bafad8fa0106bbb3fade1a7f218e6696679e4d9a0064d7cfa56e38fbce9d589ae3f102c474c244515d6deda3c971875a105d875417da42bab76fa2a27b69ca61e195bbd59e9cd2768feb7ca6768e59331499fe3edd07b3541fad96c6dd5163816913f7c6f555b72f3810c341f5ef952f6cca9fcec7a4eedbd279af7c38d57c9fb075a83b87ca30e3f546f1d56461fddbec204d0d88a9eacf4b14d4a45fdd445f343e09b7eafa0d24b8c53bef7fbf18b28e1f65ddcba4f4f353831e32a3a7c6483034fcf747563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cbbc2d3d740d8643b25368816a3e2bcc8f965749028964b311d1dfcdbc4a53b754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "50fb21868826d5606c3dff3f36b025df0d3b561df6b9510e73489d482c0e7e3480fb67be3ddd2170aa8bf5159c12d8adcedb8dc6e0f499e39970e07cd46507b0b4b7fdab416239c7a124007a3810e88f9e40ac0bde38d32ccf66c7ba92a36b1fa36bdcd7a0efa5552df0f7fa1ca6395d1c8c203acc31622ef1af08d70793cea67b57de206c1800c40f69e73a6fcc2b9e9e77ae6c92d0705fc01b388e7fd9d6b0084c"]}, "failure": {"scriptSig": "", "witness": ["643136c013061262ba2d0702ecf7902bf1e0d3372ac8ee76245fa0f56441b080abdf8d8ac7d8f6abf211c5528a5a74ec91f0e1ec983ff874f3b05c42046763b982", "", "4cfe26427fc7901b4262f3d916bc0dd8633c30e5af8ceea1dcacd253c102db78cd839b841955f61e94bf7285a2d0e43879ae3b488b8a01e39fb2cd2bafad8fa0106bbb3fade1a7f218e6696679e4d9a0064d7cfa56e38fbce9d589ae3f102c474c244515d6deda3c971875a105d875417da42bab76fa2a27b69ca61e195bbd59e9cd2768feb7ca6768e59331499fe3edd07b3541fad96c6dd5163816913f7c6f555b72f3810c341f5ef952f6cca9fcec7a4eedbd279af7c38d57c9fb075a83b87ca30e3f546f1d56461fddbec204d0d88a9eacf4b14d4a45fdd445f343e09b7eafa0d24b8c53bef7fbf18b28e1f65ddcba4f4f353831e32a3a7c6483034fcf747563ab207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93667ab20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2068ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cbbc2d3d740d8643b25368816a3e2bcc8f965749028964b311d1dfcdbc4a53b754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629", "509984bd2dd4b2f9e02fde492614c99ea2a4bb6004b5adffdd1b6296c65cf81752cf3a84e2201b04c0f30a1d57ca53e99e2d25c08d6a19ecbd287f2c867cac45f61ccf3d68064d77d68eebd6b306e37ad94d3941c9e2cab123206b274c3591255c7cbba61c6102bacbe52b4d2c14a88cd687ca07cf609da9fab9a2b9d5889a72de2db2c3"]}}, diff --git a/txscript/data/taproot-ref/f58c6d8117f18e36e7e31efdf23c18aea2a31b7c b/txscript/data/taproot-ref/f58c6d8117f18e36e7e31efdf23c18aea2a31b7c new file mode 100644 index 0000000000..558f043d90 --- /dev/null +++ b/txscript/data/taproot-ref/f58c6d8117f18e36e7e31efdf23c18aea2a31b7c @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc301000000859e9063bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfdc01000000d82019748bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c431000000003461614d047e0708010000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487e9103047", "prevouts": ["f007760000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847", "93d9610000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587", "f14b320000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368c95805bfbd60030f39f9e7ff54381e8f5f456ab69fdb578716fcf2f064cb19a3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08208660b63218e506e6f6271f897377780851eb071546e65f7287d9a4083d90048d0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c599d2b9d61b74acf4ac0275e657007f4671c4b15d8de5ed816ccf5810b1da1108660b63218e506e6f6271f897377780851eb071546e65f7287d9a4083d90048d0ff373d5c06b418f4c5ba421f2e23a69b22cb6c2b7cf326686bcbc29e387cfa"]}}, diff --git a/txscript/data/taproot-ref/f5a0c3cda376e7bd8f7a27caa053bef8617f451b b/txscript/data/taproot-ref/f5a0c3cda376e7bd8f7a27caa053bef8617f451b new file mode 100644 index 0000000000..30502ebdfc --- /dev/null +++ b/txscript/data/taproot-ref/f5a0c3cda376e7bd8f7a27caa053bef8617f451b @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b930100000044a29d078bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40600000000ce8be267bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffd000000004601938b033b82dc0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac33000000", "prevouts": ["0ba127000000000017a914e014b0ed75ce4306970c9f63e88b08a5a7bb4d0f87", "44813e0000000000225120bb7c940411adc6c3ebf9039e294ad28122b4469bbe77b36f9a131b3cbe33d3d3", "691a790000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["00639568", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e178d069a3e06f8a8ee706e51fefe68609e4a48214bf7e1dad1e46f763a0ae6da54d6fbd68a9aac62cc0fc4848936fa6d465cb32a19d5a751074f74d9c4f7fb368ab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366daa55a1279544c862a5cabf14f22e4ccb66433690cdbb1ccf1805df6ac4593ccf76285204aedeb2e654c32bdcb90a470f0de651bfbe7b8c0c018e8a9ed468384d6fbd68a9aac62cc0fc4848936fa6d465cb32a19d5a751074f74d9c4f7fb368ab0b669047babd6208c97c1428e12fb9e633b2b0d2e51b7853d96a7caae1fe0d"]}}, diff --git a/txscript/data/taproot-ref/f5a0cbe081c8037a7f36d438e758b6bcd92abcbc b/txscript/data/taproot-ref/f5a0cbe081c8037a7f36d438e758b6bcd92abcbc new file mode 100644 index 0000000000..fb4492a9e0 --- /dev/null +++ b/txscript/data/taproot-ref/f5a0cbe081c8037a7f36d438e758b6bcd92abcbc @@ -0,0 +1 @@ +{"tx": "0100000001dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bee01000000c25d89b703362d1d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e72c000000", "prevouts": ["43c71f0000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "9a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e75ccfc706e32ae7f6b2a63f59d728082bfb2443bbee0d6dae87ff94b5ceebef57e56d08eecb8b548a03ce82dd22dc92a64f1be159e88ba8944ed4666490b777c"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e2d1c68c4ff0ed36e6c29e775aa83ecac22e61e24b7e7dc940647d04cc43fa53e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e874224dbe9932044562df2f9dbf2ed3a87afba7bd9cf6855f9f40e4c24add8036ef17902325999cb16876d9e124f321b7a2400c6233e0b61b95917979ea167214"]}}, diff --git a/txscript/data/taproot-ref/f5a7ff2dc8ee9ec1ef36b73c60de71d7978d3d27 b/txscript/data/taproot-ref/f5a7ff2dc8ee9ec1ef36b73c60de71d7978d3d27 new file mode 100644 index 0000000000..480b62f930 --- /dev/null +++ b/txscript/data/taproot-ref/f5a7ff2dc8ee9ec1ef36b73c60de71d7978d3d27 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c900100000041cd9365dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb300000000928020b40148ac3f0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e734010000", "prevouts": ["e292480000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156", "0e52270000000000215f1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["75cb4bd766694d40394530cd857fe437a01fcddde654f7ed68e78fb2bb074efe7598f030701efdb0578b746a828aaff9ace293ebfd9965fdf5c286a0e8d69774", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/f5b5807a9afa7c7b8351abe9a32cdd85d696c15e b/txscript/data/taproot-ref/f5b5807a9afa7c7b8351abe9a32cdd85d696c15e new file mode 100644 index 0000000000..b57b18bc4a --- /dev/null +++ b/txscript/data/taproot-ref/f5b5807a9afa7c7b8351abe9a32cdd85d696c15e @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270130000000018cebe6901988808000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787e4020000", "prevouts": ["3e88120000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["d14c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4595f1c75585029ef5fafe40c7b455be7b6317879deb123e683907f6588babc52172c8da9bdd43b70cbab8912ef1aa7926e5ad7e47a4f7b71ac936200cc947dd0f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}, "failure": {"scriptSig": "", "witness": ["4c52d1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1ba89d18ed67dd3d5d559101471702e4f2e7d1e8ead8a22feb9e78f041b8f409f5c55ad82284641cab824687b45d4293ada5fb8cbfc4ac19bcb5188e4cd0a7708cf37d2bf9ac9d65f4f9542d60f6497573c04b4d7313f44a5c611386102890a1c"]}}, diff --git a/txscript/data/taproot-ref/f5bbca8f5a7339d3dab2b5f758f426cdb744dd6d b/txscript/data/taproot-ref/f5bbca8f5a7339d3dab2b5f758f426cdb744dd6d new file mode 100644 index 0000000000..fd1ee5aeee --- /dev/null +++ b/txscript/data/taproot-ref/f5bbca8f5a7339d3dab2b5f758f426cdb744dd6d @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707401000000447c0d19dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb600000000c89d618601bb761000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac83d9c85a", "prevouts": ["0d1d1200000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "d74954000000000017a914e8fc5dd19b81880e9ce981652fdea2006e91539787"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d090201320dfcc205589abb9f6d1a57ea01bb662c2450eb85a7615df7e46d79c034c81390b1a692e0be40b5ed8f87cb09bfd322c5d415dcfd20d67e6e24e85c379fd383df9a01b4945bcf926e1464f5d40d70091c578ce7a111aea7644d7489e063b0796cce981de5019cd46c2bf28aedb6ca56cf0656426750cc88dbb4ec973c717d7eb04c28067d76b57fb8ad39cb52e752e80ed439c15afce1cb9380d3e858e6fd9a37c8eae4a2424369b5b53a74cfa8ffa45303be336f6e2f57101f06f1c68c9a3638691d30fee30466e25a22ce8a240977e86bdcbd85ca4a57335d686f6a0abea53454ba3e2d13af98fa064474b73618284889a20de4fe70510eed63a005b0b56bda892d2a3a019b41fb1f8438b119bd7cd4a3ba77ba1e7bd453cb85d1dcf29f7df87ba958b6eb85815f380c84b19d58c3fde88f4903d0acf19e2de66b09446e69af0b63a311f76eba3519da9eb8dd74f5eb49052e45c00be607bb37fd24521f2eb2bbaeb4ae794bad806bc0f0cca8efe373f4d53f46dad7054887dc3beef2b5c8e1e8715d0884b3d5c53fa4cab69184fbb1c9f563b92ab464f48ad02932354879999744cf7d00e038a5c66f3ad98e313a41b22dc8c41158bef1cd2b045c5a529eededb14c58f901e95a8829bda9f0564bb3b380258c2ef91545c757c136da2f098b1f3ffed1196b7f3404a580d0c5912f343d1f347f63125c7dd49085a474306af4db2d41f5d1afb675", "ae7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f6d622f24f94d4576586c4a0fe62a71171bea4f7ff6dcd9fa1e4ca2ca2c05ce8fc0ca702511f3076acdc40632b43a1d65714ee25a695072e4ff6818d06cb6b94619c7e3fc3d0f43b284295c7c76b7ff66dfc7bbdbc495ce3e8e20608c97360e5"]}, "failure": {"scriptSig": "", "witness": ["4d0902c6f3caedb81d6e4e6de66fef39f8fdf17a7cb6326257543aebe4600fb427dba52b7aaf6b23ede70ab98138207619c300545b230d8ab39521b0e41d2de5e7d1d0435ee0c5ddd68640cf2e1ed7dea31c8094c2edff80abd4c89e603d10e18974d0f700afa060af487fcfb086e24dca317f7a85d3f3ffa809c51c0ac937717e401912737c4ad9a739aa1613e21c02e18dba0827f8014353c521674b92f97eaf32a27fcf815e9f16b449ef93e291673e64182e4273692bb3d54dafa52bd34f8109a09e30e4ae3b9e19b21ec368e85e9134767a16ac243baad9287a66c89d618818258c57eebceb06ca4b5e81d10a999042cee62a3af387fac7865cc1080e875f7ed8ae6f4d92c3f8805d3f84d47dbc6e1723c1967b8de0e78734eaa791d521b79af6fc3a9dbc8d5963a65a1fbc2d4499e0032c29d3ef9c42facf6aa0b0797faf809d663557150a67fad176e1bf24b5bdeca06c300901759cb05110df159b445ad95898ab5822b0c01dff435c2cf798514d5c4ab78dc8b8d6f2811066610febc2ca69c217cf412b20672b752ad2ce68b83fb22d6d57a8cbc1be110e8f67c2192db5943107a13dbc34b18faaf1374c0f6a3f34a65944b626a14867d07c8e4a53f27c855a175f616832c471aa2e6d8f5a603d6372f3893e31419d5f509d250ee300b93250597e3b156122ef9974790b4b4096cfb9c1727a1d32f119a4466887d01587afd2fdb4f84bb520d09f75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360ed42aa30ea97095c7220961c159553b9c090cc22c12fe1d4b83524e8c61dfa4c67b1d078674a4d97323398e107b13ccefe9299bb9116e21f935c64f37bba24f619c7e3fc3d0f43b284295c7c76b7ff66dfc7bbdbc495ce3e8e20608c97360e5"]}}, diff --git a/txscript/data/taproot-ref/f5bcbe0530388a9d1b0ddeb9fd52bbf9553589c1 b/txscript/data/taproot-ref/f5bcbe0530388a9d1b0ddeb9fd52bbf9553589c1 new file mode 100644 index 0000000000..df0ded82ae --- /dev/null +++ b/txscript/data/taproot-ref/f5bcbe0530388a9d1b0ddeb9fd52bbf9553589c1 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4e000000008f41f4e3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b450000000076427492dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cff00000000c272c0da025f6a97000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acbf96ea1e", "prevouts": ["4be92800000000002251202cb475dcea7fe75e0d25a92a7081f6c5af7d6f4e70a5adbeeb9514e98fbe57b4", "7fc7250000000000225120b96a099e94d8f301268cd1fd84029824568c58021a9c30fb1dbdf65372024416", "79b64a00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["8a4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369a508197ed6624452fb9289507f9cfe4408c1b7912a8bf4cd7fce31e05c3b62298751320860179e53b82a877a47edb7ce4c17ae8ab38dd25c39273bf19ccb7d56e427c91532996b84ed2c37f8a26be8637de11530a49bfc255181ba6103e3464915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}, "failure": {"scriptSig": "", "witness": ["4c528a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367c1444e0411a2b4e4bcc0084c7f38996051d23c9299734e7bc32d46b93ec3b5d2430956d1468bedd56ced1f149c0a08e9d241f188aa41dfacb5e515f08af1f16915bb1b7e7b983dc2170cc97c5c6d5436afb034e74288517b9fa4d2c2ab63870"]}}, diff --git a/txscript/data/taproot-ref/f5d29c01f03e55e2269af62ed6364a98353003af b/txscript/data/taproot-ref/f5d29c01f03e55e2269af62ed6364a98353003af new file mode 100644 index 0000000000..635ab931a7 --- /dev/null +++ b/txscript/data/taproot-ref/f5d29c01f03e55e2269af62ed6364a98353003af @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912705800000000d62312c4dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1e01000000c89799be02be4f63000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca4226936", "prevouts": ["69e00e0000000000235d212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "ced55600000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["733a1760be1f718a81519e8b535437be910cf1951b19f7e07a21b5c046cea637584007bc94113149d72c0e4bfc05429159f5901dbe1d33e766cfe3842df2545b"]}}, diff --git a/txscript/data/taproot-ref/f5d9f6f2aa6f7e44a24ecb63e2ccbe34ba6eecfe b/txscript/data/taproot-ref/f5d9f6f2aa6f7e44a24ecb63e2ccbe34ba6eecfe new file mode 100644 index 0000000000..5545b8df90 --- /dev/null +++ b/txscript/data/taproot-ref/f5d9f6f2aa6f7e44a24ecb63e2ccbe34ba6eecfe @@ -0,0 +1 @@ +{"tx": "f558c58603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b980000000056c18ef4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2401000000aee696e48bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42a01000000869aac980117bc3d00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88acdb518220", "prevouts": ["e140210000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "49c88100000000002251203b5669f5562f5e3c9be85e1a1ee6c779850048d3bbc6506033f32dde6b1fbfbd", "8e2839000000000022512097c143d16968b3b30a5e5383953157c1c65b9df293dca96f701b7f6658094838"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d09029fc7f00d6f5ac88be30ec4c385a505b2a7301f6047048d1db6e83a86f8ad594b02c2950f2324dc80bb1f5cfe36b65c4dd96949295f353677b3fd4ccfbcbd49fc5ea409dec0adb5b1088340b238dabf31d6a535749725b94917bb55153a9060165684d5361834e46e7af48a4a5ba92081655b25c9cd08993e79c82c6d4e3a546884ebbf9cc679a157d8e67a8be410668e4ec4ac5484058744a7c68288a223a340e4e7773e96af7624df3a0bed85031bf082d1d4177d89d9264709f05fe221321329c584e1e006f1ffa21d6c00aea2c62d32ce3c15b495c80561e57f72b476b71b9b606a086a5cfdc0b5b4216c198d5d28122a84a52b54985f2b5e539a18c272248f99861a5cbfe9947f631bd37597211f0443036f312d5cfe7fa63dedc66dbe06d9884978f392ee6437a220935d820be4078e6a323fa869e478ca447107d7911a67ebce222208cf6ed2d4a5c978619f88afe01c1eb69e05d09ce23d3e222c99549823c1be27076bf7e12619897c221f5d5f2d008036aef51a5b5eaf63fb1f5d887752447422555a981cbe7bc99b1a004c07a7945edfe4b5f0ce8459b90153d3613ffa48700815e9437b334c6065b2e1627b5923b69c55ca0947119c51f4f78f108163cdaf2ac4105ab0292ae1adfdf85fa2f57df3ebb3eba360502ae8d807427055beb597a9621856c9b1870f3fde075b7b7e0878ed82a02f7bf03fd3d4f804d1c77778cb905ca8a55475", "c77d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bd16996175fbce054cbd8b5c26c2d40819e04cc8aa6e6500817533caa4fcbffabb71aa1af8b43c653f5bd4a49a6dd2a2c220faf9f7ee0d38ca763740363240a33f5a7735bc8e0f27305ca0f6b127eb0c71998afa21cfa1408dfc03edc17ac2e42ff4035580f6aad3e4d48161cfa55cd77c0146622bf63e71def681bc3cbf8a6f"]}, "failure": {"scriptSig": "", "witness": ["4d09022820950910e2c2871348a124f333a391425324cd524e7b16b4f024aef96f12de918197c6ddf0cd0d2c631080ca5228140d00c7cfb9fb72f1142db333c6331655a3b525baaa3b371e4f70311356d05a0caf5821665b7e34d395fe0902256ff10c4740aa27260fe1bde00ed631e661757cddab3b4a820740208656cb3d06c53122015fdffaf986d848227c15233e159f021e63850865a2c313f035532aff372a00a6f413244e86df4859c6b73a46344d1e2830c2371de434d0617238bc18b2ff4cd22f34bef7bbc51a14106277b8b2bb4297c1e4058211ba0484ce7d4c221a8dcf376299d7b232218b748113a5dd927bf6bc786cd36f85be00287cdef698c9b48dc61552bc3825ad989f594fe57494dfeffdad764634019d2cb04bdb168d0e715ac41a86cae1be018499f5db070d5850e85b7d29122445b5187ce9ff53487f8cdab77bf9e08e1620dd694b92a24a95ebf59b5e7df787afface40daacdc923506c077a0317a69097f479d74dea8070e070b3ceff7fb05e5f42d96aadeb18593470f02c0e75a2c2497165bac664323febaef5801cd5378c8ad5dc000e273b37fdf34aeb2976c90606761730f3e0a7056af8e8675d11512fa728e072761c3d7c5bcdead04fae565b672b4917aa0aa4751dc165d3bc34cf070de28e8f3a3c049d6203c11f44493124310ca2f3fab19d6d03a5aac111146df210742329342b06aac9d0860195915b07ce3616475", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8100dfdf5c7f83af5d4cdded17045999c289d0f075ba6add5c0ed7b0f5c1761ac2ff4035580f6aad3e4d48161cfa55cd77c0146622bf63e71def681bc3cbf8a6f"]}}, diff --git a/txscript/data/taproot-ref/f5f01b555c46d9d86c043b50cdf0dc05ea4c3d08 b/txscript/data/taproot-ref/f5f01b555c46d9d86c043b50cdf0dc05ea4c3d08 new file mode 100644 index 0000000000..eeb213d153 --- /dev/null +++ b/txscript/data/taproot-ref/f5f01b555c46d9d86c043b50cdf0dc05ea4c3d08 @@ -0,0 +1 @@ +{"tx": "bfeaf70b038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41d02000000f8f102f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270de010000002f563892dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2d00000000c1b137a404a710660000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac34000000", "prevouts": ["f4c73700000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "a13c0e0000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "0f2d22000000000022512022abfe1c27b62198bb616e4483022cc980778bee956a61d21a3456cf5e2e41f8"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366be5feeab2a431d8c7218b36375cedf4fffb9b506ae8c59f48bd66d7e5f8a828"]}, "failure": {"scriptSig": "", "witness": ["6a67616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f5f4bc663f8ff671a51d503c89c7a5659c0c37ab b/txscript/data/taproot-ref/f5f4bc663f8ff671a51d503c89c7a5659c0c37ab new file mode 100644 index 0000000000..d46b85708e --- /dev/null +++ b/txscript/data/taproot-ref/f5f4bc663f8ff671a51d503c89c7a5659c0c37ab @@ -0,0 +1 @@ +{"tx": "0b6fe83703bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffe000000007cacfbdb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c468000000009c09df848bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4f700000000774f468401c92a7500000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acbd79e031", "prevouts": ["dcc37900000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "129d37000000000017a91439ec132e1466f40f0086baa7ac253013e83c7dc387", "bc53380000000000225120f3eef30b2db388e6b8a313ffb142e2e6ffc970ce6b6a81ae6dc1d81725c678ea"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4a4e91ee040b5c2876196adb98fc298df501b5f790b55a4e06e019d08b67838"]}, "failure": {"scriptSig": "", "witness": ["6a72616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f614cb3aadb14fc4cea6a3fa949cf1c4a5aa490a b/txscript/data/taproot-ref/f614cb3aadb14fc4cea6a3fa949cf1c4a5aa490a new file mode 100644 index 0000000000..0fea298de8 --- /dev/null +++ b/txscript/data/taproot-ref/f614cb3aadb14fc4cea6a3fa949cf1c4a5aa490a @@ -0,0 +1 @@ +{"tx": "e790d7e20260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700600000000a8b6c4cfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c020000000097a222af02a72e6200000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987f3a42b2c", "prevouts": ["f69a100000000000225120ffd777cccd991739bb38ccbd9db99d10dd791a1388f121434fe253b3e6e47a30", "dce2530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ac2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe2e93ace48bd6003497027436d57b628443993a76d6dc4aa3bb8a3b957edfdc60a46f1edbb097ed18057c0e42fb935953c4336ec9d443d16e55ae39a225d9f2f0288dcf8f2e1e03125ab45cd0efca3a23715e7661e5c17627e98d50057f87374b5cd80fb8cd7c947a98554a389db356265b198fc72df311d010d98c3d6e3928"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93644238c4788dcc6d7bf741c635b7a2ee8b7477bdaeabf5c2adaf292bfc6ab135bafd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a144e2b32fb029cde325456c88021dd04a80b93e0665f7e39c1e8a56bfdcaf4a64b5cd80fb8cd7c947a98554a389db356265b198fc72df311d010d98c3d6e3928"]}}, diff --git a/txscript/data/taproot-ref/f62efd7cbffa78cde24f12d7daf90b120c6b3e5f b/txscript/data/taproot-ref/f62efd7cbffa78cde24f12d7daf90b120c6b3e5f new file mode 100644 index 0000000000..2914006092 --- /dev/null +++ b/txscript/data/taproot-ref/f62efd7cbffa78cde24f12d7daf90b120c6b3e5f @@ -0,0 +1 @@ +{"tx": "c1eba3db02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4f00000000e94ce9b9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf40000000000bf6ebc6028687db00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796bb000000", "prevouts": ["0e8d74000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "cf0d690000000000225120469ff3412c89f5805e53fbb9303c790a98dd32093d40e3b7dfe22bb05f85f37f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d09024ebce0629bfe29d7ba6d368ccff3460e1a6939014001793a16b4bbeaabcfe8d9658eb0f54423f22ac73bbd15ce4dfe62bad665a213d4f47a7f3dd73a1e5edeeb7237110748eef3b5c6748fb99ea355f7bb22202c6b9249880d7820934330a58e9dce0290ad6aaa1a9ac026f299662b74f072400cfb39a90e3761ce1d790a3c228ed0c9cb118f96b02a40139bbd89c6237a5241fe98c50a74b332a177f8194344d645c191c25a25df9c16a1ceff83a66b2ff4df732a4f2aa376498ef797ac0604c6048772daae84a060dd7fed4eeb1ab1038f22bc74d2fff093311a3b7e2636111fba9cd40252c4ced4eb1f425f264d9802850e4248873578fa520c13765a3ea680b6096e14fcd3fa5da7daeb36c193283f9ac88ad4ccee869a4a45bd48e1c3ff872cdc465236789005e60b2036f7a04202acadef004b5802640f059430ecb8d09d19e9b5cd88faf91533a65d1ab0c58b4ee13084e8839e03faff357ecf3b78571eb20e88d80e15b1004fe5a7cf8ecaa8172e9b087a4a5f51c8a5b94627efde060164c1b41d384614bb66230e385f731f996cf0c290689ab61be83e4cf239b2acfa35c9ed57ac4664c28f22818bd4c5e635c3f97d1ffc47607e0f7c183d9060617e6eb603e01862c0a9acdb02511d042014e927e4874191112f0b6bc84ffd7d35dbd41cb418aa12b1f7e87880b63621cefd28b9f8090b4ffcacb84fa97d7ac6350ace1f59f3e48b7c8375fc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e1f41497843ee5deed9b1c1ba808c351924818107785eb2ec7667e528f438b571239c06a64e39d88ea3d05132fdd32c8e90a6b90ff74e726fde2d8f99de3a7b89959b5d8c486a0b4fb1c0695d0398f92463f78d98cf4d122171b1dc85f0cff66bc"]}, "failure": {"scriptSig": "", "witness": ["4d09022d7de85d544e8436853be8013693a72cc6c30b813d64ae9f882060b095c5a999fbbb4a589bf19731b8d283648ffb368bea4264c552ec8fe3578eddaa30871ea0c4f540d4f7fa8eafc08de90b854c3c2f0957dd8f539a57467e93a7a6b58b6b3dbb4a46ef5309f0ec7719c385f9549cd413fcad3aee1f2c1b0cd993cf96126e940ea7929211b20fe43d519ddfdbff6b756348178b7963da8f7df7c7c364abc52c9bb336576c38334e89dc702112923cddaeb1fcd8b2238690e1f46ca0947caac42fd5bd37242d5617ffa5a138d94e656dd25f52f2ccb3531922d953aa331cf1bd39d55dc399ee95b4fbab2951853a12785cb09796c370277a36f05cdb7a4486a3ed4bef607698a457bcd5fd3f40e2a981e0a4bf83fb0cf6427162db55769b5f74c763c33f0fe8c3e7f142c436e93d4f40cb5caf022b11d05801a7f8b76869be36b5f2696d5d409e87a632c46fff13722480b5c0491985514c1bd32ed011ace3c1bb7a9f5e3ee42f953f2558d1414ff351d668a0810904ffd4b883078524b860af7947dd0b24fe2993bf935b86e9378f1570cf2eff21042b562bc253dcf9c53fd93df02806658842fca201e737ae19ae090ee72028d9ac8c58d8da147d5aa7500b80dee971b0205378abcf701b3143e24276ecd5d8143edc6d755c8d6bf0d756f893da3149f725f0d47c48ed211a594884172b43d6e1b6ebdc1f6f61ed732c07ff2c331b92d6951cc8cf7561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad0bf4e84093dac3642575e5fc14ab670bc7f09f3e86548c6d7239588697b0a299aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4690da805934f4f93e9c0efd4d4edfea04743fe60c173721d1481257c7ee1801e4e0df2464f99a35d5bc9fbf69ae3045675e957332f77327dfd622124d00cb4df"]}}, diff --git a/txscript/data/taproot-ref/f6389882692a6a18e427b73ca3a0a34f645e476b b/txscript/data/taproot-ref/f6389882692a6a18e427b73ca3a0a34f645e476b new file mode 100644 index 0000000000..034af92c36 --- /dev/null +++ b/txscript/data/taproot-ref/f6389882692a6a18e427b73ca3a0a34f645e476b @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8f00000000ed8cc89e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45a0000000057eac8a603966c5f000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac496bcc1f", "prevouts": ["7fdf280000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a", "752e380000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["d1", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936626685b331694d0de841e58d95d1842d28c3900fed13098d035c30bbed037f96e5aa467dfe2257bccb94fb5bf6723e840de90a3890266560a9e3d72c84089f55cf37d2bf9ac9d65f4f9542d60f6497573c04b4d7313f44a5c611386102890a1c"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045716f66701312fe6b613a3a288c903128f650d73beac5c480044fdeaa8466574a9dac82751ef42f4155e8d0286eb609cd4bc8c8b3be93c107754fe282612bb362f9b27230787fc79bd718ce7ac07558dd4f31dfc3ae0570acbd1df01407b1d4ec"]}}, diff --git a/txscript/data/taproot-ref/f63afc3910d5b449d7d26586af8681218677fd6d b/txscript/data/taproot-ref/f63afc3910d5b449d7d26586af8681218677fd6d new file mode 100644 index 0000000000..5d5defb63a --- /dev/null +++ b/txscript/data/taproot-ref/f63afc3910d5b449d7d26586af8681218677fd6d @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9f01000000d913cab760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127007010000005f0436fa04d7bb8800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac46000000", "prevouts": ["c4ba7b00000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "ef5f0f000000000017a914b1a54d09172ecbb89289f2a670acc3fe14ced9ee87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d090266d942314406b975f02cab7af6ecc78440c27b3d3a72a1e78dcf6fc9cd75ebe28a2027327e19d7af4fc3451b5f22b628be6f748c0cb425739ca9e3fca11f7e93f49741064f1f867b7959613cd7011a47b2b547aae7e7aa50bc2c3f0294541f37ad51b7cd2f735df63c176a1127a90f465850bfd52e7f18c2c0d703d80da1992fb06a4c3115d8cf78685ed571221004909abc87e28fa8504322e0589820a79a2e19fb773b72ffce35c9476da8b3312b3d436ae03c2350362cc68f90bf9e31c07def92d8b445e0bed1d38f9c2e774f4ad04f0f7023f7cb89875252babe5faaaef074c4528ca86ac1f6328c4310bbd91669c6d3372bac0937570cf907aef401e6fe786ff0b638ac875768198f3c4a1ff62cd1bd41d2b94af15512667277f9f9fbc709ab349ccc5b3e6e5a4acf2948b432f572bf934b9c943a1c14bc97f2d0f90cda3a85f74e67c459ff433e51f5d5af3c54397c121f06fd60231249b47fea21ff692bcddc233047cd3de6acad0b5ad0faa2ac9b2fbf1ea44745163c255e79476e8ea1bffcd9d998b6303fa275f370c6a3b7a710da2befd35930f6c325fc4d44a1bda0dd493299bed662bc82add91a4f73f4986823543e384b3cb9bea4d252923f952b3f22efdf659ec00d9ce3afccec73236410bdf4494774dae85ae3fdd1a9c7e94c424d2d92c6828c00bdf8032ba65de411300291fb96342c6176e7954544284742ca330d53bee819f675ca", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e11ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045be01dd809c80d07fbb65649666935b9712ecafc77e536b2a27c3cd6425d00c1ec7034c4ece6ceffdf067bd97d8bd2a80e986f14e8b5dca33ff1523eba7a77d63"]}, "failure": {"scriptSig": "", "witness": ["4d0902443801a5ceb04515c5bb3d43a7a4e32f80d5b93027a50d0f70c334edf2feb2bd3876929474e34cf963899e082f640fa1146eac6dc15dabbc5c94a5271a545941c54d09cae64ae26e6402bb6b537f09b83c677cf7a3977adb8f5d8c3415a6af030af5621929ad5557f1820858a0f38fa52e9ac9c351eab815bb745ae70056ba1ae667ce1e951e16081906d4f269bed8ee2abfe1e8f60c9414bc6b188cf45e9ec5a5f0708c5aeb4c87d2344d4df9511e6a196391fe446a65844dc07c1a2e80716ed0f08a508696cfe7f6b9618e3a563e02e143d006bbd81b9b9f6e9ed8b016c32df52a9aaf9401b703178ad644ebccdc55afcc59f8b856e5c7c16450ac925e4dbfc0e71baf1ad1919f506e8fe661df0b545608cfe98e9d18af07df46dd4587f59b205fdb8026f4728d8eb59fa3120b09f3d59e9161c59287a166343a26b40386626fd32a65170999b70ae05287b1bc92129f1b0ad772b4e96888ee68eb239eb3a4c0edbcf46220ca0b0f5f7cc9c37aac73be2b3e4b56facf7415f3a0b81aab240a96af42dbbfb29e10d3c90bf92ef8b63c01584742e053687eb52b718543a9df702e618fd62dd981a8d7f2c69f5f3318ca8183e4f2a9244e1379b8f981473a3143d4a92d909ee3a71dd1017998b5e90082ddaad5b9f333be64ea66a9441796701cb9bda6703cfa1038b5cb80a794446adaa3ff597b939534bef150d3e0b9198a43df73c9d239d482b4517561", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cacf8b2242350f428bd79d35dc27fac1c499655665084a78dd769bcfb813a07758c38514ede62462d8dcaca890d92a506794ae643449cc5c1c2c2667ece3d2dbdc18898993c284d2f731b7495cb62c60e8571430965d040562487638e1f1fd248a698426442c951e7251e4e87784c9556d503d37bf6168d5559e89d6402ee5a2"]}}, diff --git a/txscript/data/taproot-ref/f64c19e45d11b07f585d65dd6f72bcd502d95a0a b/txscript/data/taproot-ref/f64c19e45d11b07f585d65dd6f72bcd502d95a0a new file mode 100644 index 0000000000..8e7b8c59b5 --- /dev/null +++ b/txscript/data/taproot-ref/f64c19e45d11b07f585d65dd6f72bcd502d95a0a @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff40100000023239086dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1b000000007b8490a101327b760000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79613fcc133", "prevouts": ["b0486c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "47c754000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_f1", "final": true, "success": {"scriptSig": "", "witness": ["97553c1c80f820ad8a2f7f6b4e91f9d3f2825eab51067bbf878caaf5b312b690f286131b4a3b6a4397c7e4dd7e9ef5d00dbdc6e3051e04d6650bf5e3a1487e3c81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3ffb6362e225b3761d4130dbf8dc6a086744f6a148501704fa3b451a634beac10dc51e03aed889e7e7d286bc9bbbd1cc2717676dbc401080e89ed7a7a76998baf1", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f6514adef6dcf766ba7179320ec6c88126688614 b/txscript/data/taproot-ref/f6514adef6dcf766ba7179320ec6c88126688614 new file mode 100644 index 0000000000..4275ff6985 --- /dev/null +++ b/txscript/data/taproot-ref/f6514adef6dcf766ba7179320ec6c88126688614 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4f00000000096ba8c2bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7400000000156c38e103eb5d8b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac71040000", "prevouts": ["1e47260000000000225120bf924c4d20f2c9cd0e276b93ccb8cc76d8c2c0447a0551ca648744a57795d235", "27a266000000000022512091a4836ea80f7ca2c21897583e26dd6f79eeaeac6399c549c1cbaa135e7e4bc1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "cc7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93617c8f5b2810c993545fdf5f31da55f5a99b1608086c79b0b58f6326267dbef5eba22abe4a548a0fc6dfdb5b637d4f02bd7b4a4be5fc13f7c30d33fe8bd172a30474a999e2826f1f27f01ebf91ad073bfebeca039a55919a1ef327838bd290026ec1da8cea892037e805a477afbb54b1f5ec380954f076c0bcd3c4e3d4797a8d6"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368620c4ec8357c3a4a921d222018bacb93cc988a86d4715e25d6f1f1c6590be1bf31245d0339f22fddf0c8a157372cfa350cb7b4c29fad108e38a2a212532063d8f95dbc4edc81931664a748b39a9978dd32dedaf5c850114f6bd2f5098c050fb"]}}, diff --git a/txscript/data/taproot-ref/f6765d4b30feb17d15d4bd81601ea5788d8d26ed b/txscript/data/taproot-ref/f6765d4b30feb17d15d4bd81601ea5788d8d26ed new file mode 100644 index 0000000000..a77a584b3e --- /dev/null +++ b/txscript/data/taproot-ref/f6765d4b30feb17d15d4bd81601ea5788d8d26ed @@ -0,0 +1 @@ +{"tx": "9cd4c5f8028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40d0100000043103d8c60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127060000000005b59fac60132e71700000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac67000000", "prevouts": ["9f583d00000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "5860110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_a1", "final": true, "success": {"scriptSig": "", "witness": ["a10458261d945d50d53c0cc865f8205a443e4a8b6e03d86b1fd7cbfe931c330f25f7e0739ebf36285a76f076bb0d29d8bbd608b1e074c0059cd4541308ee236f82", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["630dbaaee14a73e0dd531b19daa63918a1ef7834129ea60ddaf7f8d379e31a1602644354fa8f1896316633e95af39782fab525d4fd185e23924cd8d1fef7044fa1", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f678ee4a403b466dde13be7e941db7ff7684a932 b/txscript/data/taproot-ref/f678ee4a403b466dde13be7e941db7ff7684a932 new file mode 100644 index 0000000000..cf2601d23f --- /dev/null +++ b/txscript/data/taproot-ref/f678ee4a403b466dde13be7e941db7ff7684a932 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfe701000000566f672760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912706e01000000333580ee0250697b00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcb141a65f", "prevouts": ["7df96d000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "c049100000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_81", "final": true, "success": {"scriptSig": "", "witness": ["0e6ae66a3f51db8c3cea8d4b020e7486e5e480dbd6f5db160cf5d1c224418958ce5aa0eea06f972ed12f6fc3975b440cee50491ac1499c5a8052daf0c743250a81"]}, "failure": {"scriptSig": "", "witness": ["3fae62c629d2349c86cd7d14514ae14fffd598086d1b9b8254be22cdcb3dfce4189c55232dbe4e7ac6c7afb0ee0b15bfaf726e3e05aebf2cfa61f0baae074e2d81"]}}, diff --git a/txscript/data/taproot-ref/f67b572dbad35568f4ec9ba53cafa2997991340e b/txscript/data/taproot-ref/f67b572dbad35568f4ec9ba53cafa2997991340e new file mode 100644 index 0000000000..180ebc1dcd --- /dev/null +++ b/txscript/data/taproot-ref/f67b572dbad35568f4ec9ba53cafa2997991340e @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf750100000056603c16bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf44000000000058d92c0486a2f60000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac1d010000", "prevouts": ["928a81000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "d39f770000000000225120c117fdddb90a3f1a4803136a1531a36879999867f6c1969f4ff0fed79ac77cc2"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/bigmulti", "final": true, "success": {"scriptSig": "", "witness": ["3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "e6646e438b3b1f02d76efa42b04933a551e24ed9c5819f394e57f2a17f84b4f405093e225e898bf889095e21a9434815b82c132c6b9d6ebcc5b1867c4e6560c481", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "e6646e438b3b1f02d76efa42b04933a551e24ed9c5819f394e57f2a17f84b4f405093e225e898bf889095e21a9434815b82c132c6b9d6ebcc5b1867c4e6560c481", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "e6646e438b3b1f02d76efa42b04933a551e24ed9c5819f394e57f2a17f84b4f405093e225e898bf889095e21a9434815b82c132c6b9d6ebcc5b1867c4e6560c481", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "e6646e438b3b1f02d76efa42b04933a551e24ed9c5819f394e57f2a17f84b4f405093e225e898bf889095e21a9434815b82c132c6b9d6ebcc5b1867c4e6560c481", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "e6646e438b3b1f02d76efa42b04933a551e24ed9c5819f394e57f2a17f84b4f405093e225e898bf889095e21a9434815b82c132c6b9d6ebcc5b1867c4e6560c481", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "e6646e438b3b1f02d76efa42b04933a551e24ed9c5819f394e57f2a17f84b4f405093e225e898bf889095e21a9434815b82c132c6b9d6ebcc5b1867c4e6560c481", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "3fd5064df06b6378bdbf1a394cd23b562712d7fd5a6af30a2b1ed8ac5b0855edb4abd752aeff738321808a5ba6f4c1da7447541e8789efe8b1b160da9e4d282d81", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "52020a006a3c51a8ff007707013d44f615459edb4ded77db33d5d011de20818d49fefd4bacd1b46f6a16f1d150a334cdb21effa85b4f7895b46cd1c267d32bad81", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "8e554f5f1743309a0778f2b5fc909834198524aea37c85ba783bf0b25c6bae798689beeb9c4f8c731deb98bbcb7fe82e9aee423fdf6bb35b22f9ecc8a1a46d5401", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "0b08c1d3debaeb4acf7b5b9a65c983b634c37a7e392f80e1a312d204642e8c664fc13bba250525f6b90d7cf98015076a92db8261756184728ab0beb7071c2f3283", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "162ee0dc9b3a50a8aad92914c992bbaab7bda8776cfeacf4b491de79b2ee4a919097d252aafa6a2ad8dd8db1bd4fbb0c16cdb330fcb740822c881cf7a75bd49901", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "91f49da0b66c676b7af2a1e315abc0af48995348e4faf299bb9b5b2470cc0adf31c8f63d235f8a6bb03a32f169bb95d617872b7b950c6c5e4e8b366c447912aa", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "22f8816c5f3164197d9a21d5c2962c29d960407abeebb896ba729b49f53584578a88674b63581c241695a226627d20b0f33b8f8aa77611318f80562e56c2a84b", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "52c0db6699f6e83c3e0437c15da3643375ec8a68ad63a11309594e24a3776c929c5d743e11bced02e7fa04200e0b942b6ec661d946d793eaf86e26df8ea1463f03", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "6e832128c9adb130a93fd46b603dca75c504659d5b92fabb988c8d52a98525be9550e5e0538ab26d06703c6ee9cb7f2a18fc6bde48ebd5bc1879a3d702ae50ce02", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "f74c41d6f1a7d5c93931573d11b3ec79e7ef7fe2bb3cfcd7782d2c776e723a8376e8ecfda58244904355b4e87a12833c9d378d5ced53fbe6e3eceb7de504610f82", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "6867e7e97f6fbb96bcfb4cafec0bfb762c0a6dc128e41bb51395a4a8ad3054a82094f9616417ecea8368e4b4c49930006cf6dbc561f0f3dd36ff6779d8677f4881", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "fadea797ae4e5fb8ac17424bbbdb074f26ad74dffd4da10f9fb6f8b4bbdf2c0300a47e40650f39511ad75b2f97979fe877a35a07fc9cf4ed66bc5f23e1ed5f4401", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "a2e6be7fa0cd409b24c4fc7e2c410ff8515069659619502eb1bdbafb0abccc5a4ee9bef833b0e57fdc626c1bac312a85727fa0d48572f8e0532a8c58f4bc7f9883", "7c9743c31946179108adcdef1c4f2fe79689962d4830ddb1c7e1772067e8ae5273613703c8cf47d8e4c7b22ade412372ac2a0d44772d2de8f421befee38c8496", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "e1ce0092f8137acf09b9b0dabfcb05b4be5039d0e1f4df7529d596c8ec66cc87544bee43d0851fb34fcadd71a93c34407e85c90265930183d44a3cb5ec1a421a02", "4297208ac0b29c1d30b9ba59a4d9fc33d46b535b14f9d39aef432f5c3dc0d1525f5006c6481e5e0fc0560c427db9261c345d95fb829a11892196501a54fcdda982", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "b4a85678040b901b8c34d97eb757bc741524a5fd885ea95676aca4b6b6c29deea57c4f8f0f8058d591ed416575031385d46983d85dd67865fb89e13aab675da702", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "fa4e58f43338f1f930992c0b902f30e5f9019897cdbc91e7b0b0cc66625966ffb8f4a949098540480c5f97015351b99f2948b4d4d90b6e4ec1d9033e5a03713902", "96eea49c646eb1798ca0889129172b3494a4f818dd9767f8eb804dab0f99ab189a3c7d8cd4247746f35e2930579e5f44cb8720712267717689f3fcbf7d6c11a302", "298be28ee9a3d699494d2d89ed1d26abc25ceb96e32da7dc8f0f3d2587889c8055f2677dc7f2d39e1499a1fa90af32aafe115a98572120721a2d77f46177422003", "2a583a8bd3b32ababe4e93d42b3609db8b1c08a635e8479b3b0cc5c68dd567396db501c5626d5e774f6f4e74beb43623e53020139ef821e2dbb1c8b0bccde8c382", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "1395e7663cc259f7e1da04aa0ff0892c2e0fe13b74271c45e25cae515c53ee9a1d0397a15a4731dfa3148c2a8a85ee717436c93e9f20260c6cbd3c000102c33002", "4f55feeb34753827f2ca2bfc1f361a4abcf07b4f9341c138ca6ea40089e183d50e2b5356ebd5575db2066bb37d77f73c5305810eeab7608426ea7d978f7c91e881", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "4243d4dd2611f501e6bd1212e10f5bff9cba16585db2fbb97cb8d81330d7cb36e9c16dbff1e88b7c29b25341a8252daf492cf020dc8fb8ea5c29661a1158150f", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "9afd76c4fe64e98b7f23447ed6a383e70dc37f28e3501bbdf82db4fa1c1c0edc65541b3eeccfdca4a5522113fdb04a0ce5ff4fbde15533641dbebefb465e480203", "698064499c70c4bc9c00774a26cf8424e243f7f62af8976ede1be4b7d3c4ee6f1f568c1a0079c7ffabd427a95a0a00f6edbbae848e3cb00610ad8abb4361053582", "030dcecd0dbd5d8c4b4d72c9c3696d4a22d7e135e202430b65781040e8b3a5b5c2e4a5c18e7d4f44a67b623b25baa155a3422fe6845375ba2465bf0d189571c682", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "d9ccf4e6cbff88b61e4962cdf239a441f0082547272d9ce19c093de1d2d33a26416787e4341722070d39e88d5b2a60ef2c2d9060b2c5a0d80fb6fbb053ac499b83", "87029d2d23d92d5ac74690e42187f82f5877f307d8e2ec0f0695b10369f5f7c26d27d3a1a5962a46b49853d125d96fa071484748474d668498813e9c052521b902", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "c4665890359fcfdd2fc57836de46f4c08985572c324f3fda52f12beb31f068d885b22539928683631fbb2c5c54cae53f4fb73fcf23cf55c0ec901ad1d47a6a8782", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "8f663cc49404a233ecfd04ff0e6503f1442fafb6d4ba9e91fd75c1542546e63226f755f74431069929f19607c27aedb91765518574f464bf4263538e309c372781", "8122e9f8ebfb3107442afb37809ac57ca1692259ee728c2708874cada411191cd7d0282f16432e66885035dca4884f39ee90a026b25ffc09fe47b3dd795c415701", "2a2b2dd9f50988d97627c16e6a894e93a90378c00c93bb40e7166a56f54e0b333bb25f3c832e521af2acca3e24b18afc609f96dc9f58a4fa426f974ed95cdda003", "be060e39922f9cc77fe0de9070af87e82a56c145f8bdaf73f3638f4a2f140e96efe26cbd3aa123c84e79b66cb44d89f584cc67fb0930bb2c2f9d640342b92355", "b25982266c33986d527464e5386ab16d3c9a510db36e2e84c39cd1b99e80bea6963298f831c4165252be5df580568278677184cb517158eb5480b4a8fb7592c003", "add90081b383eb4e7144163aa958e458cae442e66b4e0b7ba57ced9d538f6d1790de44c2ba38477d0642051b14b7eff26db8f24437412a6443c697912ae0025c83", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "4b7740f9eb6ca8f81024fae2ad8b8b65260c91a8ae2590769ca0950123224b0190f29ad79ee12db2a168ebf6386d06aa2b38f95cc41123f034e64917d307b9ff82", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "844f16b5ad563ec846dda659a6afa9690b12728ffe62392741091492f448d3b43ad61a288d502ba77ea6b9f16cc2d29a12e2b5df9c3067ae01341ac0c0c32b6c03", "8d4e891fd74d2736aa099c869182a6a26df385f99b4f08896c3096203293405ed62ee25f1fb7172826fe4b5efa7c34753189c6e68b34082595cca953825a596782", "9e6d195808802273413438a3cb89c2c99cee31f2837531ad71b344b9fdfabd53e350f17ddbc27a9874ed22f2798a3758a8a1c3117ab35a966100b341aab2289481", "beac7fd2ed8e9d7e73b6a460dcc9efb8e831437f2420f5ff7342455a628d1e046c96ba034cb94711a3f3ca5eb4206dc2226ad2b47f0e1293c95eb90ecd917bce03", "3600b868ea2d1716b70c3a99d4174a8b5f7d316045e2aad99cc339d80ff8a07d0f57f13ed661e5f1f2ac696415e9f4dc16e5af1168c5b75d6fa1c1a227741b4b", "89cf3185505d9bff784c2b4f56c1dacba0003f642e4d596c8bcf1ec3863811deed1a50d7a39a47c7558c188dc2ee2ae2637d83116da878bf7cc2ce718054298f", "87174492b6a4dd52e3556640f64a2ba7eab56db2c60047f03dadc4b4da100ab50e0d45bc0a418b2c2f9fb9288d3c9204c0255d951606e2600415b5ecb8531cea83", "ea39321d6e868755af165f19b6840e295b1254c956a06c144d2321e37e900c3cb6cb9ff53ed41233c45fcf4530a870385709af297b82290799a575e22b32832c02", "f1ca13fbbd32b1acfeee0280603c8ace2f7a73630b4a16813a6147663f1ca5b2078b4dd10f4611b6538f50fc65aed5843e1ebb28d5dcf9b37d3f6eacbd8ae01f03", "db2eec5c12097d7ddfb7c20b0c6daf53bf772c5bbe9a25a4f4345769ba04114e43260cd03393c94703c597c6872293c44bb5c1b88df6e24bdd9f6b8e3ecbaf4401", "84219f8564d07e8187d9a96bd5a867750ac55bd1e19485f66c9d9b8a5bcf17eeb00c2eed2e264e696760968114a1360a53545e010884c9a07e4f6aebf592430083", "1eaa4326e72f68ce61fe4f6c01030934328159e3d31f9051dc039322f95502f30f35c2e7d9a9261457e3ecb8ee2f46b98c6336464bd3ccd935602c03e475017b01", "0a5bb8f7532c10dd880f4ecea0ea65b109eb0fcacacbedd862b9804f8b43cd71edee6182322ae3f7abae1cb304ffb904d65c2f8c1c2d06e579bd5983549b80d881", "f8fd5a8b2d847641f5d03c383e41e40a3d6f7ecab7a150345bac107fad75609f2cf0e4bf3bece4d89c6b94ae60391cafcd7e4e1f6df203de9a6e96d1faa6ee5183", "0ad397e524c28244395794fc57009d62ac6494ebf3ee20b6d063418cba191629a50b56631ad5078be2eb622258257797f7f2625ee61a19e6d45c2db9713a3d4a01", "63746b8c49ca2ffbcd3d517ef0af6bd37a9bb313dcb1b517a75c6676b9ac29d2e1b8e46c988b48c81ef1184448ccf231388b42854696bbc606772784cd71bfbc01", "3036e749a837b9bea6484c80a089bd22672fbbbcc8a7eb32be34ba93274548ec9e19adfa1e3d478b1c68c9d010aa8c0fb441651dbad1f7e79bd31edf560deb06", "bada600aa7be5fc70862900be3c068c690e1d881e7a5ae38857a68a008c668e08791353a63b911c69113ab26431c3c642b3fbf58032e10f700cb3e05db51298083", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936baf4c6d0c51fc96b9141842fe9eaf61c74d8eb4071ad6a2f4b34154fbc32a2d5922bf45c763bb50fa537138ed62437fbd2e1df4bc0e607113a1e5917421b0b067b81b7fc382e624798cc3862955a77c75a888c0e53a3dde41653ba5595c82f9df1baeece72c9f4be68ddb6b2a880c83faf7068dab12aeee553a178b11ea29942e8b036c46d73bf6c33c89bca25cf4f18bd2d5b1ca273be0e396ac7d54c663262554f3299d422f9f8b70de66bb7fbb8073833305569dbf3d5161b03bab0dd3cc2c88365cd45ae6f6426efd2d7f480872cf752a3caad8153d5e359c0ca9017f5b27e4d685b42f14f8c1b90a7ef83ba1348df01eba80d283958a7db4d2fbc621a66fe77277ae713e4f306bbc005bda16e1b7eeebb2f27c524213352b20eb25d682ebd49cc1c9d1c5543faf51f246263bc293a1ec3b05628bc84cfd7f4dfccc3e91545ebbb7a20d90802d61cb761b7ed3a9d8977f7a5521df44543d663068a2348a7c7f6542a544c030cbfdd70964c7e81d665feb2adbff25ad3ab75b67ecf3712c09a0b10fc29ed9ec9ba811a78159d56d191855f20d80384a7f598d54defaeda75074e07476023602dfde1c8d0d124f96edbab4af8198f97e6bceba6cad7de517a8f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "eb05b16b5b411847efd57b5108e00967390ed4ed918f85eb29dabfced3e21a79b9dde9e2771038e4ed1ac05c8c09cb151a7872243c9430e55f8120e451117ef883", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "defaac63c0b79a5f10fd7f27f28a9075a3f57dc60b516dfeee046ef7c78257e3099560206098a6f916ba638bb1ed7072080d8d0aef580b9d443735b2e1400cf903", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "0b8bcbde5c38a9054b0de0b0867b75c1b450df38f7bffd31007d41e1b7097f3a120266ea93a99ffe378d4d15670e3a420e325725b30418ff03dfd11917d99b6581", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "288399afd52c6d80a9c2cab206290717709e94f06423ac8fcb29dd935a43004da3ea0bf3cef46b71f51622fc7336012abef68ef1a2217003f0772c6bccc9e1d403", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "4ba534916fbe1111a3fb08764d4df7c9668da0a89a868e04b14ff76593c50084138ef7a0a02332afd73c86fdbf204fdc838553155484e75ead697979f6e0666101", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "3732b61d846882d4a03081fef87847ad36416a8e83b3b70bc4c2548b852fe9ca367383d9336ded6ecebdbe85fdb8ab01a09a359609595fde719f017ae50da2de01", "43e327e5f0409334c78d0805cb3381dfb83af17afae0f6cf88550e626a03908a2aca80ee058807d12b42847c2e8516dae1d35cb3ad1ba7ab7937ffa4ebce111481", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "71fbce77e053f7357f8213ec44399c02a78599d64154b1e155f7de85cd3b7a1dffaeba7c4e45a2f73b5d1b532509959c36056e3f42112b077acfebfb115ad4d003", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "6441691c52de365bd02f0968ca9f29fb87d51d3796efd19b315e75400f4cba2a167724bd2c54966ceccb5b812ae480077cc0bde76b4befa69440e5a659e01bf902", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "5b0af420e335200272e7faf2d3be31dcf38e31b3ab5ebef3f3f110d53cd47d0f459f103263c2fc110e4b8c21fad03cecb366702b40722c7c4a748eeca4f1326302", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "65883bea43df1e4a9935186675101793e6c8065c7c3e69414f5d9335ac6b80ed27bccf9d4643cd66cc9e76f6cebc06038a78aa4a4e0e62bc767e2ed82bb7d8d601", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "f02472a18a242fb92632af71abf37f6b637d7b196d6381c871e274642c67468dbd8250ed426013f67697153f58b8d5dd1b51befd86e9199c66ccf4e611de80d701", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "10b2bc51c2a40d8c5eae536896c3a978e0c94fa848b54fa0d34d51d6b83ec2f601b4bdc8b961f50b1a71a583a3fe2ecb0c3d1765e23cad95660269d56e50389781", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "e74ab0926502627dc5173ae1564a4777b823102fa9e4c99071d1476979884a1843bc87ebcf0a5dae09a325c4168394f5ee328b9f6fef451e0c294489f1035856", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "b938220f84bcf121afacce88aa27cd86a4b54ada24dd4c04bdb03e8306bb9824014f7be93ebc5cec925fbb23f38ff9e1a7f6d34be31cc9410586af63ff4c7d2503", "8d7ff6b9e2e498a0bc887566f868d7ebdd6154853d223a51ec1d6bcb3b99070aa6052e80db8ca3f64253942f580993226455a0422a33f5ebfc793f7f680157a902", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "d7d817c444d4f9a99cc4fd65778b6ef903c638c1a65b1063e300b0788fc7463b630267ed35936aa7c9f8f88e411005027c5da42dcd44fd3d3593b6cffca2b09902", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "3888fd54b1fdfa67850bd05facdee5c0a2af50ce4dc30caf7b85c42a7060c7e98c9a56a90d17e054068a2af58662cfcd89248e2435a36fea86988313390d8a8a02", "eb35f11990d515fba653c01a97e84eae7807e6ccb3273c67e0a6d84240f08f0a179233199a68afb3d725baea3fb4c06613d662d82e302516b382049c63904f5903", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "dc033aeee4753843ad351837490d11b08c226ad729ebb8d121d090505f12db441a7b20095e87c27e546b7a11e9966265d6bdb7fcf52aba54b9975a642822f39f03", "3db38abf922e8e6178f25415486ceffadf0b8b194d853d15900421b4214f23f42a9f9d27331671906cd675425f9ff843219b43144f9d2f672a96c8fe52e94b6602", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "13af116f5a52e5aefa0bb5c817f352170ef68b1dbc3ad10fb3f005c7d9ab5cc3ea57ae411b3ee91dd48fb90557fb87613a744a5b7396717f2acfdefc0596d8dc", "b37ba4a02716b8f263b71baea2a773ec72c215ff51bc74a8f8f51ba9b1b449df5b6c366861bc82d501bf2578bfb00b06af668e1e3077dae496376b9df4839d1783", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "bf158ce54f791658ff0ead9c7086b96ff77371149cad4af7cb24563a4c2e6aae16fb20da962ae82d4c1a710bdb70c3855f1a1027a400f5369b234726c597a1c701", "3e736c65b269c253d155b63556d771bae49edcd84d763def7230f1c86ec57dec0add1b9167f8cb3bce7cdd9e136531931c1c80c23f7e0c19e19138bea41dd74082", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "1dfeb80554f47279f289ac27361bdc23e312f6d8089c84c6be5dd84e1f32ce0eedaf872d1e3046f8a441f6a4606511941e5fe17d6f847d1f52bf8113081eafcb83", "211ab573a260771ca707ec45a680a1f28f254ac091db8e0db8097a128d6252ea21fee7fa211f21c129f0e4e015b781e8a65312cf9f833bbaffde1c2c48a98dcf", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "c93ce6ecf6f91b65e3277c84870442be5c892ad70c4b45d59bf36bf50735d2a1ee22bb411447921910c32546e8a83a04009ec00915d5cd8908fad5b03b7d62a981", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "c60c548a6a2e8099c6fe02ab848cf615810f82696ce1b19e514bb3f09998b7d128120d7d9928169fc01dd9a5cb0b729292be1b434b513f402929a316c9f2c30382", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "3445daf3200cb6a4af0a2753eda75d48c52935b75531b47a63e2edc1aa16e90aab1fea5dce27c7f078c4296555889275f5bd00b374171dee1f5086552aab051b82", "a2553b49a4be897d842ee29a899bca3a8ef1dfe04de8c5a8118d0f6503c319921d3427d371c3b8b269bc43c0fc08978a637c5837dd22cff63fd9d6419a0488e082", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "7573cbf96c5dc7fac987ad6c40018b9e77f224f921b22e006dc20620d025a42a4ba500b98492183644b2d24b1910e7c0e54c7fde3833824223b11fa4fdc74439", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "4b9fd28735a855230dd23d770a23bac19fa3a22b3a5e768846564b1a7abb541f8931b7e14a203c2a0a9a588cf24317678e5c5c783d2a6a1c3b55b7a43b2a491982", "562dfbc3025a85f7b70d290a116db3313819037c3aa759dee418102407a1ca826d4ef2cd22d475d9010950098c8c00c2580c4c6e1e1663b436ec9f1c3fbf69e8", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "ae9f3e67366138212f01bf7590f86e7bd8504381ee13e6a205fc75b97faa536c0f0edbf2f97b92c6db377129d275920fd19c083725083d31dca655eaf50d4db101", "025587d778729c55c07b7b0d8a6fbcabec39bb89e6cbc5f1e3ae4112219442fd9a6e331f201d7da041f5f23d47589debc790ae3fa50b290867a5c533f8c0c9e503", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "cc81ad868b8066b871e6c15808f109447988d0cc7887e350ad1e16c9bdf8532d7340d27e6f108db9231838fff9d57ca7463904c06d5d35fea33e7505d61b73b3", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "eaec74709e1c8cf5c18318d56a56dea46df72c91e1e12d4cab9ff141cb994af291f51b727562585e2443e9d3b841c34e28a1324dad8a578f45d3ae1267c52e9b82", "bb304f7e2b46e5770e1bfdf5dfdaee0f8ec27b2ef9eb825e0cee739e2eb1b8df5efe0ea12ecb020b8928063af960fa9a4f9c34f246813b06ed62744afd1595b282", "9161a221e0bc0c8faca8664e12f19963c84fd58fbd55cb570ffc7252dd0142cac9741c8914588e481f494fbcc51dd0c267c2f7b2e3a7020ee5884279dc72698281", "23bd61c5efe6bf67ccd7cf5c1dd362675a40d533d42a69efd8ccef5966a186c7f23397aaec1ee5367014db2c4b110018f3ec47dace052e46425e7bc065619f8f83", "0d2317fbc7c46a318fceeba04c050b4d87ba8f605364ac36be38c988b531ced5e960811b50b597b774555916100f917eaf10e371c7e3e521ca4e3bcc9174156a", "580b2255e939b9f07affd7cb53b47a948a653ab8c83ae12a88f058f3961fc88fb78a55cf6962c038960cae1c4c5373ad254fdeb8c0e73b744ed02487f0ddf55302", "e5af289f4f72101636927b5cc0b7035664a732486f3b45ecfcf5280c930ef600cb3ba4108768b6039cf9e03d2550317762367114775daed19997b87a0555fe4b82", "ca13d66107ee0679c74de376f48c0985af6a6140439ad8ce045e0216d088cd96e8d69473b1e5c1b28b7c6fcf5be1161e0de150cea369b7c81d789705e117143d", "d01854415d41b72f0ab7a0a352070569648e92243de5319c4e3d50992e3e4e2edecd21857caa4b1e9e0a421f2683594bebe6feb2ab13e9a256469255602d1e4681", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "5a7a3bc5a6ac62d53cdc3f07e8ea8d7193c33aa8b228480f54ed24927fc2eef017fa7562197c4b22ef711e3e68fd43c89373d690a3bc90fadfdf506e48deb1cd81", "e4d23cdccd61b75de065dcc1dee646446ecc15be8e2587026202261f9de6144453b2e3c6c80e2f055934b7a8920bdca6219f5c74bad4e47b15c336ad8af2d97201", "99545e67d8a6300d3ea763ff8d4d3592607c863af68d974f7455af9845a7f3e4e56feeec5a6cc651c8a2cd59318514613c4c36d5c677b2dce7509ba04b76144c83", "5ff60567289c081d2a2be83ab3cdbf1df04fa611c48761381687deff378c1851cd8c2c690ae64f618989ae809a4697a2795f9382d7b4ab3b0cbc1999e972dba801", "f6dbaa4f7e21481177ccbdc20c79a06eddb7f5aef7e8bf2bb15fcda0b626304effef537dba2fb030c5457028cd47620357a36616ebc03c05d0be73e0575655f283", "b5649e02ca096577500d9e32ed33cddd06a8e295f50958c62db3797620e3fc68cf8b0a771bb5127adad96117d6b394351d69dc1c326ad06996eb8bbc3120764283", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "33da902da8d5e00c2c3b98c29ac5a5584f42e606186d76b91e2e8b24de9d3bcfd3a6028ca219081f9692fcc1062a1d11d82b874962ee05fa79ddd94053fb7c0081", "05a613ef620138483a8a3b22b66e22ae52ae8e93af16b79e594e6d7c646c131b2fadb8132f34a069f541795096726332b7e30efadd567cea475aa7ec92b3932102", "d478d7fb5c3c5d7a18685ce12dd5fd9091b539bda120207c3f564468a9e6f741c861a9dc82dc3f30df39bf15bbb3ef5c0b65ac0d73a19a5d68595cd840329a8703", "e050d56b7472dad7184b25a873554f8a17b2c1301206441e0c12f3b1e693d1d08ea0f9132b0ed51507e6b02a02ba2b6405afd64fba5dd00db2547e4dc91c083483", "20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206a4e69b2d742382fd2d0b1868b4f46c13f517106779a6a84cdb82cc93236c620ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad2024f8eac36f01b445e4e05ccbda5d9837ff02b817111f34eb558803358a912a5cad20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ad20aacac216c65acb65ef3292a5f58cd89c7b776ab275013d8a6787178c9f7d42a9ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad206caf8054a443c5f9bf7801c6777845f7d20ceb354457606c181abd059e61439bad200e3860eda17de017eeda334700d195c3489b9ce431ffc94162f935fd610d2354ad20edcc845d90377d6eb9b1ba687cafa22c44d0f7e8c97287e4e7eb1957a61f9755ad207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369922219aacccb81dde864a3ec40f7c21a3eb8f46c49c9a6994071aadbfa97168c7c64bfdd97d5d3271ab928ae76e5623ba7d07b188d7730ab7eeb107a27c6eb0f8be1a390cc3e305bfbd2465df21ce81c8757e8fd4f919ac1910e9b12e8ace1c156c6aa3bd0fb78611d2427aa9d66c53b6dd1ea581e1e02aa0fcf225d9954e28b54c96f697a7bb32d3344724c289f975baf6fb6a610298cf3ab7b48bc1a572854ef455f8f94906872fcdddbd9c69123ba3e37df0d5957477116d3e27701e750ab6bf49c94f22272e9428faf1bd5cd40ce646d682c490f2c884fe432ef578e6f0312a05072c8ded55048a84110539f7afbcf82c40e617d46c3e4d1fc146955518e3c1d75bee0a7f6e2696c22018a172015efca0c777be1921fc7ae15904975690bdf2e6d377467ec6d797eaddb36a951f6c721d32620e2a3c0d329704dcd15b7f71e451376176e2f55c3c2221a739607450191971d5992e750ad1451d6be82b7f6cf6936e6b1a3a12a398c2d5b5c2ecacf11b1e8a5face090fdc96f6614bd953dadc618cf7f3a0d639ba509d355272eadbcb76778d4d1d605237c1cf557850c008acfa6a9da80a755a207eb5a3ad02b1a2cff248af93ddec122a727b43b9e8dbb8b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/f6840c641bb58cad923fc4f9c092164413ff4ce6 b/txscript/data/taproot-ref/f6840c641bb58cad923fc4f9c092164413ff4ce6 new file mode 100644 index 0000000000..f929909a37 --- /dev/null +++ b/txscript/data/taproot-ref/f6840c641bb58cad923fc4f9c092164413ff4ce6 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4e01000000192acd32dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cbd000000000851923c0387ee7a00000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a632000000", "prevouts": ["a0f6280000000000225120371978f5545190cd02a51377bbff85a41bb9eff83258c615791f81074881249a", "d6ad540000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["804c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ef50ce65e1ce97b405f0b78362b0983814277331f92d6e6fe48e5fe1e54fcd63d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51b44d35a0b3fc5d8cdca17f6fd766b3b7f076a7a891ad519d38c56688c70ff9dbd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}, "failure": {"scriptSig": "", "witness": ["4c5280", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368815cfc997b4033dd639313db9a5ccb74d87c30d58988500dc693d33d8197cd820e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e16014c92f678e181bf1dc3c918b3709f7d7746b7ca1ad43207ed3c2b1249c00bdd0313c1abdf0fb4e55d9b6d58af17743a20615f5654a8f167dbe9f4cf3a09059"]}}, diff --git a/txscript/data/taproot-ref/f6907b785c509927b03981052c87de1c9ae5f772 b/txscript/data/taproot-ref/f6907b785c509927b03981052c87de1c9ae5f772 new file mode 100644 index 0000000000..f070aa8d31 --- /dev/null +++ b/txscript/data/taproot-ref/f6907b785c509927b03981052c87de1c9ae5f772 @@ -0,0 +1 @@ +{"tx": "bfeaf70b038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41d02000000f8f102f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270de010000002f563892dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2d00000000c1b137a404a710660000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac34000000", "prevouts": ["f4c73700000000002251209c711009ff170e3e5e8c60ed867f1e7c5df59ef27f30fd46ce0613d7fdb82b23", "a13c0e0000000000225120703c36fe53a423407a1cf4f4b00ea153b2ec4ec02148a4b96436a11f0ee0e0e9", "0f2d22000000000022512022abfe1c27b62198bb616e4483022cc980778bee956a61d21a3456cf5e2e41f8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["f5", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93648f8d343e45b2a3fbb17d68cee821227f9a1b53be93535e58c68639dc86e84fc4b6f5261b409d682c30910e7df322d9859114aeb60c7168b8885bdaa0165cc6510b3b87e8b9d8544644738d4851bae032b2bf37d3a4aa6541b936ff18c715610c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c7e8952e748deb89d7f1315439c5970ec42920b4cab4cfb00d3d1dcb758e23bdbdcbe75f074483e48d717af2cfa8ab1bbef1c35fc84f016c108dd10256d535ae10b3b87e8b9d8544644738d4851bae032b2bf37d3a4aa6541b936ff18c715610c711f738010c3c65afa09c620b919c88f85303c8a6c3749257da2d218fa6976b"]}}, diff --git a/txscript/data/taproot-ref/f69458974b285f9c2ac48a1bd10b3dff2d042a8d b/txscript/data/taproot-ref/f69458974b285f9c2ac48a1bd10b3dff2d042a8d new file mode 100644 index 0000000000..21bcead94a --- /dev/null +++ b/txscript/data/taproot-ref/f69458974b285f9c2ac48a1bd10b3dff2d042a8d @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4100000000055c6482dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfa00000000f46499b502d29a9d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8767d58622", "prevouts": ["f8df48000000000017a9144370350f30aa8f875e3d2a13be81f25f19bf1a6387", "14b556000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/disabled_checkmultisig", "final": true, "success": {"scriptSig": "", "witness": ["aed9d1017c0dd38a96d1e076c25f1e3d396e1e569f80f4dca4d688d65ac11e828bc6af326eaad2a1f9a4625c2278c8209f1bd3c12e9c3a733342c6323d88d76d", "20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365cd2d09394ee01f4cbf453b8e43120c6bca0157ff833036c4a91161ae8d6db3dd3595e47f783dea9cd898c640c1ccf4b7d0ff5bfa4236f535dc6b4728299c1d69fb9e9eefbd8dee3e5857c0a5c3742d0e58764b1e6eec73b89290af63b7ef8123f752582a11afed87b1aeeab00a91ac5167325e0fc3825def3a8307d2082c1acae8c13f957496bd85a8bfb196b41115877f1c292877d449cb5d56eb109a1f8e695176267bbd1b7867e2eebc439e9f1978d6a17134b75a8bbf0107687388ddeb5ca20cf31e30816ef7bffd0e43d4efa6c46d11185474d89ac75f693a7c477baa289311c864108ea260dd739a7c927abea94bbd3ef2fa436b5348a12a03476bb9e451f31f95136dbefe9a42f2bb6868f993acae25cfce8fc0d73b984508d267a487b041864f4ad19f6b2782b89895068e96969bc0c0cb50b64c3b84612df4c73208c4bcf6cb070e67449ea1a036232a8155856b27be4c634558db013e06b79c26858824757e3ab18b9476867ac69e63e36877af9fee4aeb519472ff5a504bc7e1bb8a70b57e599289922abee7f7cb3f5c4b4e0126255c9af59ddd6c8d572a0551d9a0b10fc29ed9ec9ba811a78159d56d191855f20d80384a7f598d54defaeda75074e07476023602dfde1c8d0d124f96edbab4af8198f97e6bceba6cad7de517a8f5d6ef56d49b8ba11f647b86ee2428967481742dac54c1b1db96e16689b33190eb95b56bdead0c1a3e523ddf7bef5f6922dc6a17860d350d0b88526962aa6ed"]}, "failure": {"scriptSig": "", "witness": ["310c75ef236fb8a50f79dee81581f474d0f8d39b2916f41991bdc08b1b780ead780e8c9f8fb115ef6d378b02de75443baabaadc650ac39cb7851392eec0635b1", "007c5120871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2051ae", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936292edf0afd686b76454ac87df521bc1c20693b4cbf4ff29ba5f26b82aeaaa557bb511d41255530c42c2dc7568891b0d4b6b428c113fd1f437f7663a920fae46b0695b1973a2559bc98006a7e217715863e999230b7b20484f04307e013c080eef35b474f97b8f06ea4e4e04f1e5d63321171a362b4f33b759b3e933f71931b5f724d1f762b37e5b1fff0421819b284e552d24d26eee84e6ec01115c5d0f886b3832c6aa2a8b18e93eb8bf2f5c97352e53451353dbac83899f0e369de8412999b8da44e477b0203d3bbaa363dadfbc71173258c4fb1f25bd6c995929d401498b15cdc7b86143259203add30582e3161638396fc272dbcd8b6a4efe6b4969c5cdb375f270f52c7be2d12ffd3fb62aa84f7ad164a11de5eefbe5a620438d35e655d5ba471096a5b3a3357976911e74f87b4ef980a685ede1cf19d01f46ed9b6e0b39b0cb365e6bcc032bc02d2b91a16da658905aec2c93de3186efdb1d567fbc8d5464e05bf50edce7b1f5ca81822687132cf7d30ed84f6dc8ca7e183a338d302e00ae160e990742032df386ec8547eb181c0d102fa876c1cd80d9ef530fa1c065d2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/f6a06f14f3641278ceae3733db1a7eff71fb3629 b/txscript/data/taproot-ref/f6a06f14f3641278ceae3733db1a7eff71fb3629 new file mode 100644 index 0000000000..f869c57103 --- /dev/null +++ b/txscript/data/taproot-ref/f6a06f14f3641278ceae3733db1a7eff71fb3629 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c413000000006d7c0687bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0c02000000532d33930418b6b700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc996e2420", "prevouts": ["69f4340000000000225120ae011602bde14b63ddf579d7a3b02b5b10535576fec511bc89b313092adfef76", "b9e8840000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902e36be21c1648e42ff0cc711472cd6fa783cd04cc1a12cd7af689e55d54a52071fc4c1d6826bb0f1d5981ad6014666f42c52f676caf3c2187a661492d3fafafed82e1a580356f2c3a1a179b7cef7b39b49972988463d10195305286c35b7ad54df1cceb82e3f641483b8c3c9f963194b5c8793d1673c4a40b8a1867297fafa77b7ff7278efb9d558c925fd26f9c98693943bc15a755d11f35835b301e80e48e9b2d480c9b6960c4f0347f08f63e0f781f33cd4bf4d3173f90438b58be65d784abcc8900f529dc1959b4efc92adfc954bcb0cc77cf775752798608ff7c25a74ab7f1621b238565bf9a84b5b69659e6fea49cb7b424bd76857bcd207c307c3c2495bfe976eb42421217602baff585fd0cf0f73fd3d12c7f60fe223e29d9e77da2323963462de7ecd65c1faae9c8a01007736b9eaccac9e3c2009c7aed6a0f7d5abc32d161db66575b2ec12ab9e3f7b928558827ab45565d2ccfe5f4c9713dc5c25be16cd36b640be42de607238d50ee5e8177691c96f106b0bc902c3d31863dac864d4518f0477e02f4d0094d255241732967ebf938e88001e42a47baadb3c59d0a68f447a28884229864d6739812e320509271e17eb73d075a58fcdd1caa882482f3692a526e3c72f415383940741acd814b29d0503dfed2a892a8718f25ee76851e96790cf593939abe4e9ce44dd4a5fc80f2b3966d5cda20296e6fb95c61576a081424d628d5f6e07775", "e97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369671c715ab747f188f78ea32a93d5e14629a692e3e2d5c6a647d72992224b4dd6b9e5e4bd2cefcda110a5bf613694738c198174b403d264db4691720c8f18fc7b8321554bafe286e6661652cf416d3db0b455024b23404eea069d656c79e4f25"]}, "failure": {"scriptSig": "", "witness": ["4d0902298d3654df85d1808fa4010a2758851d10cadb7c379115188a2388efa55be047d32340f236402d8e23cc9df254834bcdf632e60ef3858c051388dd3c8c023efca9373f968e3fa3d04454509135b46595d593ed1ba378371ebfa3ce86a5be46967f6c2db967e8f8291a4670427597d2e7a038025116060540c1b3ccfa4e428e17b0743d32ca427518d519e455bf8d647594f741aefb3f5335814d4bab0350883beb8cbc8aadf04e404a1baf6e8c7de7a8048867f72960d8253178bb587fa3fbf2fd13e13a160f463eebe3e888f574630d1c377be77e2b191871ad70db5bcb1f28e0cd4a0ddd43b39bb13350250be38c77a295448f71b243af03fae6ba0661c4071bfd8a67df2112a90f938cc36918f96c12e7dca1ee67b42796853bb2c096ce474a494326d4eac9dd52631716af52d4b9bef9d8f79126d032374baa5b9e17d75b557e26156378e2424d9605afaafaf26bd0ff7bfcef1aeabf504ac544cdea7760977ca008e4f66ac3cc8d036094956ed9133caab023655569902bd4a67e84310797aca194586d0f26762bad409ce4c26a9fe9a5cdbcb918e905e25f8caca4aec17dfb249f66bd1cf8d459adac779cab51c7db717a8ea39d659b5d469bafd99e0fa1170bf35d84b79befd1ce1de8f5c72b30613f3cd0f46a39b2e9430376ff969b8d40890eba045b9ede56b33cf5ff845cad7a3ce54182cd4d3831194fbbfe4a39e08c61719f075de1ea75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082a602e473c0179dfd44294f4ddb50d827cec9d4b4e0c6eae7f68c0301f0fdfe7e6b9e5e4bd2cefcda110a5bf613694738c198174b403d264db4691720c8f18fc7b8321554bafe286e6661652cf416d3db0b455024b23404eea069d656c79e4f25"]}}, diff --git a/txscript/data/taproot-ref/f6c823a2b3203faddc06a15a61e6f0e3f3e7fe8e b/txscript/data/taproot-ref/f6c823a2b3203faddc06a15a61e6f0e3f3e7fe8e new file mode 100644 index 0000000000..1a9b5a402f --- /dev/null +++ b/txscript/data/taproot-ref/f6c823a2b3203faddc06a15a61e6f0e3f3e7fe8e @@ -0,0 +1 @@ +{"tx": "f912fae802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0902000000bd0732c4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5c01000000dba8b4d3014d37660000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7966d030000", "prevouts": ["836c7c00000000002251206a4d91ff9a31e9c489593487b5cb005a27e6a3c932fea2fea0a301cdd0cfcec5", "b5d1240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_58", "final": true, "success": {"scriptSig": "", "witness": ["d8b0e4d224996352ba73ef996183b9955d073f1ec60363c33c9b3611957f30c16f4f4dfe36456bec60864ff270df7d30a37ada20b2507c92ef3e1f8b5c274aa501"]}, "failure": {"scriptSig": "", "witness": ["8272257499a041d5be190b5af3f96ca07c354a873b1e4ad8a69c466b0d3b9d43cb5a14514c1b74762c9bb7b8ae5543e96d291e2c61767de540d8f4cd217b2d8858"]}}, diff --git a/txscript/data/taproot-ref/f6d3771166a0c4e00527b2be21466030fb499521 b/txscript/data/taproot-ref/f6d3771166a0c4e00527b2be21466030fb499521 new file mode 100644 index 0000000000..e2b64a5680 --- /dev/null +++ b/txscript/data/taproot-ref/f6d3771166a0c4e00527b2be21466030fb499521 @@ -0,0 +1 @@ +{"tx": "72ce730f02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bbb01000000937aa8c7bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd400000000e0a2bed102189b98000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787660da74c", "prevouts": ["89f4240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e849750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_26", "final": true, "success": {"scriptSig": "", "witness": ["f6389311b4cb31cdf1ec12d0c4c39eec5db5b2c7de54a20afd089d6665dc93ab1086ceb2918a717616a0ae0a21da80696cf7d7b3abd8f9e1ea8f05ea3082b67f83"]}, "failure": {"scriptSig": "", "witness": ["d366f265a60c2caf049c130814921283978a9e885bba37faa953b7189b62ae62d2a1341debcfe6a8ba82269c181e9958a3dfb04f99fe8dbed5f54a999a6a3dab26"]}}, diff --git a/txscript/data/taproot-ref/f6d618ef7f588f9fc237b18f4ad42a84337ec67e b/txscript/data/taproot-ref/f6d618ef7f588f9fc237b18f4ad42a84337ec67e new file mode 100644 index 0000000000..60da220a55 --- /dev/null +++ b/txscript/data/taproot-ref/f6d618ef7f588f9fc237b18f4ad42a84337ec67e @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1501000000e3ee7de3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c32010000003f2fec4a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b8010000006499adc6032e11bf00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc77d690e25", "prevouts": ["38975c0000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f", "cb9154000000000022512096d49a663447a0304343e0ca844d9bda5a7da8dbda233b650dfa03e219f7bd31", "eee1100000000000225120ef3d9168d15fec7bf262c68665e35843469e387edd931854cfe5c2fa2f3223f0"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c0beb567ca3cf5eec8f2b4fea5c0d7ede6fbc0bbc7906d90d754244e5b426617"]}, "failure": {"scriptSig": "", "witness": ["6aa3616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f6e85bce5c033f269bbb51eb480ff58e9d814ed5 b/txscript/data/taproot-ref/f6e85bce5c033f269bbb51eb480ff58e9d814ed5 new file mode 100644 index 0000000000..3144494a62 --- /dev/null +++ b/txscript/data/taproot-ref/f6e85bce5c033f269bbb51eb480ff58e9d814ed5 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8701000000bf8067dedff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565ca100000000d2a15cb9029568c300000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47876b040000", "prevouts": ["d3fe700000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e24b550000000000165e142540f27e90740933c99d4f17ab2dfc6c82951cfb"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["77294239263c63cefaee8399c5c256965186c29241155919927710f05cfc7ab085a3c7586e312813f4daf6b24586e46458d0c39ec1aa96a749e9e0c8388113fc", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/f6f146c32b1b724af896fdd11df580e1dc8f0e35 b/txscript/data/taproot-ref/f6f146c32b1b724af896fdd11df580e1dc8f0e35 new file mode 100644 index 0000000000..04b0446984 --- /dev/null +++ b/txscript/data/taproot-ref/f6f146c32b1b724af896fdd11df580e1dc8f0e35 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4be700000000d5ae6cd9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c040200000082777c9703cb766a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79656000000", "prevouts": ["4bf723000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "ef46480000000000225120ed261f3c61e168679c7f8a74453f2ce25dbf3ff98d002ebf2f6af0aeed189847"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/unkpk/checksigverify", "success": {"scriptSig": "", "witness": ["9052e2b91c7f9ae1f160eb25db4ec360f7c239e15cca9ef5cb5d4358e1a3ee40d22f10a082e8b4ddcb79ab7f09810a157961849e76c255316cd6a56dc79a2a8d", "51ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bbc3da94060df099fde0d42b14bc2e005dd93c33495760511801ba15172f1f8d32782ebac08ee6855f863e78330cad81cc31684ecb08218331c6703e74d17ccdefb59a23293ea293fbf595ca4a3e5e00978c3fc1dcebbd125cbee91d2f1baea984f7f489c7d362405973d36f4ddc9c75260e31c037739aed91636c98efe375e5a4bb5a7c059035c2e1c5c045ea9950eb94ee0ec4463d646d9ffda84a02686f9fc4dcc13930ebf47f3b4a6b88080c0c6eb26d453af90a7fa4d8ab4db56eb36af7e0957f1affba45cff2900ae03ba8247c0570ad2c8e23a25e0e08aff668b2d11ff3cd9a7cdd1a85d506666c817a8f8dbdeadcbb31e576859629344cf4897025483c91c79f084c70ab4e7b7949b54a5e17ec2df6fc4020f94f5331e2d487fe252cedbd71523ec723318df75e8be30db5a3e2d050e114f6b0a5a9d375f5e1fbe58bece622d42e15d9a09f8ac238b01a6949cb9ab79b540250a90b3fc35ed3b857ba67cba4445e9cd0a613a5e6e514eea7a9da662a1fb003dc0b1555d407474a0fa29f0302a595cadbe6f0743d5ef50dc2b0826f0f2e0e84d35ce4b31a2be87bad075dfde575d48d1eaafa8343c63d6f5425984d2425aca274be02e47a5142e089ba2e5262a94fc3ddd3fb5606be458b593782b16d00ce4762d13e98a6ec8488c560f68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}, "failure": {"scriptSig": "", "witness": ["b77469896fbf3afeddec7e54649c6d0e986504ed0008e67814744deea8a6e70d8bed50e6e42f9b29ccd3b9a09f71629b9c92c84dbe343a0150e3e60aa2c2ee03", "00ad51", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367b37f9cba90643389dcb84f8bb3d7354cace0c9189961587fd423479e33fe4bca7f7bc4310acf33ff6106d71eeafb5e618c06787526c83b3a4f243d9848205cbcd98a80529c2a931358c54a01926483afd2817144d11587481c84348a7a5d142851dee7e8956e7989ef1b2310726d24273d46cfad50082ad927e9fc98f9c143d160fce98e5a349b93a878297fe66e998ee720c75d1643072843d75bdb4b18b12adcdd58f284ab1c59b498a19651ff144478d4b0b5a2922bd70cb075f336fe9f4b68777d0bbd7b6c4a577c7fea562e9f4fea2126efe76f3d0ad98be5dbd6871c94c0000d45126f851620d2066634add2abef2580dc803514e3ba652e78e482b6135b10babe6957670b3c4aa2c76f4112b74affc1af435c8383e13a10ccc3e8ee7052652d5467ddd2e384b678ffc365e66fbacf63a4fbd01922cf714b18ee68a4e383d323036182d3162529448348339fc9acae0372091043e56911cb51e390ea725dd19e02d4685ba017b89767b5c8376f6b66370e3202d9e807c9c5b06b99c098acfa6a9da80a755a207eb5a3ad02b1a2cff248af93ddec122a727b43b9e8dbb8b2911ad5a3c4781fcdc9458446cd8039a7a21ad2b04a0c05bedfec6a225c83df68f68735c6d9c5f75ce1cd0826710bb7023c4213b88fb8cd1791f3b2383bd77612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/f70b704bb277d70481b756371e4d92b9dadb2d85 b/txscript/data/taproot-ref/f70b704bb277d70481b756371e4d92b9dadb2d85 new file mode 100644 index 0000000000..79303ce56d --- /dev/null +++ b/txscript/data/taproot-ref/f70b704bb277d70481b756371e4d92b9dadb2d85 @@ -0,0 +1 @@ +{"tx": "55f3a2c603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5b010000003b874fecdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c0b01000000e740bcee8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4580100000096508f98011c849e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac56000000", "prevouts": ["4ff72300000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423", "9d0f53000000000022512081f3e2c470dc60fc961d81e2d216f02fa45ed4c5eaf6bbbfbde0597598d4a1a0", "b9943e0000000000225120beebf2e29d62b55aba368e7e892512e69e2ef37d942bd7f6bc768a8958380305"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_4", "success": {"scriptSig": "", "witness": ["036270b0fc922629af9d63df0a2ab1f46f62774a4d49b9604e7bbf7db065c708d5d745623ba42c6c792c3d243151db0298b9ed05baabc80c066f3b0b63c54bbd", "0ed26051fdfc5ff86fe6bada6ea9bd8841a38f63540bbe26b6dfafbd64a6a36eabf6c8b1a72e44f91b0ffcae2817f0f1bdbee6e5942b36dc3d892c176b779780953b03d354a3c15990cac2633355c6742c12b017553d672a6f944d38fdc50fbd186aba36577d09", "75000442c44132ac91690442c441326eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93697dbf8400667a0dd303fd91e8013ba1d04386425162936fe2029a8afb99ef7630000000000000000000000000000000000000000000000000000000000000000f9494ae9ab3a13b399d1a99414c0dbfe988d321676a1369253d0947894d0e537ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b49ecd98b5550e84a046a1812fb9d2c8d6182b88714d81ba4f60a0f5c6786604cf596788c84aa55abe532dd5d9848325503b324a4448506244ab0beefa59afcd34a47132b9344dce2c6ac0e777413d180d953c5a5875c046e5c0ad7653d19ea4142929a8ed6adb2a42e6b452112251116eebf7d902ca69fb0131f05456491eec1ef250b54f3081b3d98c96b290bfe3c2982c7741c64c8c68fbb05418f3ee34a3ef1dea874d6c44b1cfe017cc6acefa04d2e78ced15f458d79c76a693371216777f9a9632bef7a9fb6626fa7757897a30bd0829794b033b9be37803c1522ab52520c20b03ecd6549ff484e2d4ad57d2cb9e9ea0f8bdc15e86afe888f74cd5f9820ee3f1256cafcdd30219e28a6f3bf0f5c0ebe5f8ab689ca043c8c5a0494889b8d16091b4146e242203bca30779b8d23639a61b9a51eca2138b5bf777b7f662700000000000000000000000000000000000000000000000000000000000000002ec568c67ae88fbd52b9b91de3017124822d2ce5bb02f6c60aac9ebdf845cce052a47df41371558bb4153c50ba007885a09b762513b138bdec543facbb1e6a0f0a93e1a29012bb0cf497e58f1abf75ed87247377d54c33b2ca4c1eb2b248ab040000000000000000000000000000000000000000000000000000000000000000", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}, "failure": {"scriptSig": "", "witness": ["036270b0fc922629af9d63df0a2ab1f46f62774a4d49b9604e7bbf7db065c708d5d745623ba42c6c792c3d243151db0298b9ed05baabc80c066f3b0b63c54bbd", "ea74b91e0b130c5b1cea451c5593b7ac2e850d2862493ccbfe16fea3bb6fed5e9b84f21b014ecc9f8e0bbf5a9a945f89f44e173ee98681093dcb2173f950fa7921c314dba5e763c534bb35063aa8eb427d8bbdab9e4ef8c502392eb1c24a121c9bb0922b818d", "75000442c44132ac91690442c441326eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac696eac69ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93697dbf8400667a0dd303fd91e8013ba1d04386425162936fe2029a8afb99ef7630000000000000000000000000000000000000000000000000000000000000000f9494ae9ab3a13b399d1a99414c0dbfe988d321676a1369253d0947894d0e537ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0b49ecd98b5550e84a046a1812fb9d2c8d6182b88714d81ba4f60a0f5c6786604cf596788c84aa55abe532dd5d9848325503b324a4448506244ab0beefa59afcd34a47132b9344dce2c6ac0e777413d180d953c5a5875c046e5c0ad7653d19ea4142929a8ed6adb2a42e6b452112251116eebf7d902ca69fb0131f05456491eec1ef250b54f3081b3d98c96b290bfe3c2982c7741c64c8c68fbb05418f3ee34a3ef1dea874d6c44b1cfe017cc6acefa04d2e78ced15f458d79c76a693371216777f9a9632bef7a9fb6626fa7757897a30bd0829794b033b9be37803c1522ab52520c20b03ecd6549ff484e2d4ad57d2cb9e9ea0f8bdc15e86afe888f74cd5f9820ee3f1256cafcdd30219e28a6f3bf0f5c0ebe5f8ab689ca043c8c5a0494889b8d16091b4146e242203bca30779b8d23639a61b9a51eca2138b5bf777b7f662700000000000000000000000000000000000000000000000000000000000000002ec568c67ae88fbd52b9b91de3017124822d2ce5bb02f6c60aac9ebdf845cce052a47df41371558bb4153c50ba007885a09b762513b138bdec543facbb1e6a0f0a93e1a29012bb0cf497e58f1abf75ed87247377d54c33b2ca4c1eb2b248ab040000000000000000000000000000000000000000000000000000000000000000", "50d75b87fd561093bd1edd2d0501486fd64623253e0326c9df75ae6d8122d03b0dbf5ac7d883a45caab5f1f88fe684f21edeb8e93d9c7f031ff5e6c076e355ebe44b3d6910f92de91b4af4de773b65ede2767a7a68132ad63f3b140ef72cc1b2d4ecd05b709c31e84caba9ef44410127462d55c90b1f5b987dfa5ffd882da2aaf36e082aa548e3f29cf6a272be3ce0059aa5852a462670c31f0cb3"]}}, diff --git a/txscript/data/taproot-ref/f747e1181b2e9303715bc0aea1cfca3babf00705 b/txscript/data/taproot-ref/f747e1181b2e9303715bc0aea1cfca3babf00705 new file mode 100644 index 0000000000..60401427d4 --- /dev/null +++ b/txscript/data/taproot-ref/f747e1181b2e9303715bc0aea1cfca3babf00705 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2601000000813b7ae6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc100000000e9fc16df02e0e58e000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac31c5cb4e", "prevouts": ["c5496a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c351270000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_12", "final": true, "success": {"scriptSig": "", "witness": ["480b7d8154a08c33eb6752cd1a4ef32b3449233137562497e14b1ea02883727605cc99492a3a1a1f9be0448e7cb795486db3b2b5de7fb79c823984c76175eb9681"]}, "failure": {"scriptSig": "", "witness": ["7226559f0c7bcb20d2085b483fb75f2cbf4bdc32a89eed872dbe51ef1883c8adf6738c3855456940aebc36d087905349230a1db61ce23a0f35e1bda75a7dee9c12"]}}, diff --git a/txscript/data/taproot-ref/f75c71bf10464658e79f72142b2c327cd6ca3347 b/txscript/data/taproot-ref/f75c71bf10464658e79f72142b2c327cd6ca3347 new file mode 100644 index 0000000000..0e984cb418 --- /dev/null +++ b/txscript/data/taproot-ref/f75c71bf10464658e79f72142b2c327cd6ca3347 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2901000000e28d14cabcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf02010000006dad27f30176a80c000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478703010000", "prevouts": ["44a84d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9959750000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d6", "final": true, "success": {"scriptSig": "", "witness": ["f1b9973e470f973281d092e638a52fb208bad47e7949649360975f9c67c743a27fa0694e11f98cdc86fafbe22e1d62fa622aa836c23b8f276907b7ce14610a99", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["d301dabe5979a7e1d10219111f780ebabb52e9b37e1a33bc89020f5796dcefc60d1f8decc3378350da498359bcd57b8f1ae6fae1b2a714688b49b80ae0ab191ed6", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f77abd655150de8bda3b775fd291d5b2bf27a1e6 b/txscript/data/taproot-ref/f77abd655150de8bda3b775fd291d5b2bf27a1e6 new file mode 100644 index 0000000000..2dd5921e87 --- /dev/null +++ b/txscript/data/taproot-ref/f77abd655150de8bda3b775fd291d5b2bf27a1e6 @@ -0,0 +1 @@ +{"tx": "fb4d73380260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700b020000008922b8d1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b10020000009e066ca8014bde00000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87e8020000", "prevouts": ["02ba0f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "5647260000000000225120d09696ea45889505661e270865d17ca69a086fe0d8b7bd5ea027866d2c9b9156"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_36", "final": true, "success": {"scriptSig": "", "witness": ["3061bc88d1f8fb9ae3acd15cb6480b37fb1ecb8e164513fecce8772ee4492c1226124378f7a795307872588d406361d758367f77217177fae8a2dcb16a90a63f03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["3f5ab886cd9f588668f98639c13ac441a1bb186252f21c08f8a809612be7d5341d21a2a144267fe311dbc39c8e5f09c491584a4398cf3dbc1f170ef6d41311d436", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f77e7d751660a7149e80488c8245aeb9be6eeb1d b/txscript/data/taproot-ref/f77e7d751660a7149e80488c8245aeb9be6eeb1d new file mode 100644 index 0000000000..7390d992b7 --- /dev/null +++ b/txscript/data/taproot-ref/f77e7d751660a7149e80488c8245aeb9be6eeb1d @@ -0,0 +1 @@ +{"tx": "30e73289018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b300000000a96cda9602f2983300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc1c010000", "prevouts": ["255a36000000000022512063eb770f298cfb14c87c6cff1e0541dd7cbc30bdbab4472c0f37d52bd55ad696"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "ba7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8a0ef97ab7ee9fc1eac24be41bfdadcbb7c9625a4e882ca5abbd81147d09c0527a47630aaed9dd66550bfcb0f3b3ec2bd830a8a42bcee9dbdef471b4e5cf2e89f5668d978bcc8d3ac0b8aded42d2a4a1c5e69a5396581e310868cb48ff813edbf"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93654dfb6f6b9a2b04f4592afe6e08b27d0dfb1567237811ea996f2ccf3ff1cd1054a7888d88a49f036a686b85959429d2c21b5cc7c31f53deb0eff848be794e4af5668d978bcc8d3ac0b8aded42d2a4a1c5e69a5396581e310868cb48ff813edbf"]}}, diff --git a/txscript/data/taproot-ref/f796e5b0c5ce67017c553a21907fd6a51a1058eb b/txscript/data/taproot-ref/f796e5b0c5ce67017c553a21907fd6a51a1058eb new file mode 100644 index 0000000000..dbf7dcc2d7 --- /dev/null +++ b/txscript/data/taproot-ref/f796e5b0c5ce67017c553a21907fd6a51a1058eb @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fe0000000085a123a1dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb8010000002f037acc0296cc62000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcf7000000", "prevouts": ["d9ef3d00000000002251206830c8b1ebe925261a77111fca109651f909c8747b4715cea67841710683246d", "f66a270000000000225120a91988f47123ec31105f67d71740ec744dd8d7d897f95cb0546a10e5e456f756"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "a47d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdea84c8431ee0615517346b97932410ca977012a316263f78a9edf0a452e478a09da521cfc521edd35405d6ff7b10120e980b699014de05f8e600b437ffa9c347"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e1a56f6cf7d9f4db4b4e32634d67c1bdca6b80e06b787823c0e4d06c57c1163a2ec4f69e5cd9a0f0c1fda8eb2f54297e33bc5edab35b299e65e2653a923d6ca55"]}}, diff --git a/txscript/data/taproot-ref/f798f952feda25e6fc4b37a429dc368f73d0d158 b/txscript/data/taproot-ref/f798f952feda25e6fc4b37a429dc368f73d0d158 new file mode 100644 index 0000000000..ac46b54c68 --- /dev/null +++ b/txscript/data/taproot-ref/f798f952feda25e6fc4b37a429dc368f73d0d158 @@ -0,0 +1 @@ +{"tx": "e714d45702bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf73000000005e8f3194dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1b000000008732789101f288010000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e798010000", "prevouts": ["9d317d00000000002251208f0cd91064976d8c425b1144e179a495d561ff85b6a95fed9a42cd95fa3d7aa3", "c26c240000000000225120396e1e3d37873693c049a0e141d36811f0051f76fd306cc6c1f2259368cdf0eb"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902a2191cad4ac12fc03830217686fec87e60d095f1111907bb3fc06c0d6cb47e9809d042e702d6585841677c1d14763cb36c9cf9f668493ce4cd15571f69d2f697179cdb4aab317c820c41a985d9eea9953d9e4054f3c25b68c5ebac916139b8e40c29d98022d8ab7081822017ab0809762cd4a4f5b1d33d82e2d2d0187700ca3d79c3fdcdb40df1ebba49aecd234c8cd212a69165fff9957698ab22410ebd0e5c41342876b1d991ecd30526be45b908ba6ad7b0ff90eb7d39eeb2ef6176312bafd71c9d0d6046c2e69d0c5e59626d682d1730ba38a4f43dde27c6f2a00ee503599021c0100103e0ca94d893e93a9449d267c72f0394e3fd1671b99cea4f9590f442a99db365d7ddb2d50e4bee950b3a3802bf61a3f1ff7cbbb657ceec9858e9f7290270d3910323915e903d7800ce1f94345ff1a598ac38a9a5f0e27ad9b92d540dd86a17c8e0e0a48bf009378f99188b2e3df63f3820b5c86cecaf4360aff5abcf14b6fe19f45c795d61a3e2ab3b8547e90fb962bfe370585e9bdf7a2a5216e0b4371f3f8fc1d0533da33906017e2ef2a1283a4a52405c3eaa3cce9b937579c9cbc767e0253d4b81120cca717360c57d25292afb7cc281035dfc8d36f964a55507ddb17f8d55e913f364bad11bbece123c3ff1c87a5e5e4eee264117eaa03595bf3d5d4a7d462db97e5f1571d046ca94ffd6e6a6f63c20062c81e55f0ae7ed8b00b2865e8250c7b77d75", "de7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e093a387cbf4f722495a20cca4e5071672ad9cff48cf2966de7657b6ee347f57da05e4a06b32de803bd9a925f4d86502b21cf2d106a73f15ada31e997750cbc80"]}, "failure": {"scriptSig": "", "witness": ["4d0902feb5b4d617c72000c837d6307c9a30d8365d505597ec5ff3f4f32e6f589eb00bdf835db950509d560d0e40d3b94de30edcea7a2a5260ca56ddc0e1222b280a0edb9d6d583f25d177bd2e55443bce9f60368b6cedc5cf2f25e6d9a43e06c47d62e8b10f312baea422b66c701fe376b3c5d8b92e32011119fd7426df10add06d81944dc34da46e699aec2de5d305356cdcffc247a383df4414223860679cf4b308ec7c3e7628e1553f7c4503725c2a6538a6668b733b29471b00469f98e44b660ce5e7f73a60161df48f9fbde9ff86b8ae17e3d10fd5ae3d4fe2f6b79ff0b84f81368560a10d2a0c0ad6426d893254a030e6083ff84a37f32dd2f1604142d67e592b8c492212eab69b51546d79b805152c900dca19749ca760ad199a1e7b66d8677fd14b0f20474a91e0bef5e80788d714116b33bfcc3c61195e2e39c8686dfe0828696b4802fe6da812add1835f79fcadc8d5d9bbee1a51af5f51f354fda784e165e420613a9a0c08b315420c375f2f99f158fbb498d5313c89ba219294d2498e8511ccbaade19b35e2565d713da355e1b084a697327b8903efa56e50ac96199b29e357950c047b2bf7ba9e7b56624cdf649aa3f85dacb6df9ceaa924662e8ab5455af556e5c5ee729e2c525856bce73ff55d299daefcd1986720cb6a8b8a9c81af3b63dc652cf16f0be06631add05120349cd6a2a7c345161a41f5ffacbe5a67e00b2daad959da092a75", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93634583728296d6d19ab926bb0bc1431ae6daddd06bee0d19ae3ca41fbe739f4c746c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa827b55d11351c6fed41de6d200bca95500243dcc7874125f5161f5be208848f0ac1d0874bb493d5b277fe586a1908760dedf191b70e37bd9b06448d9d8257f0a"]}}, diff --git a/txscript/data/taproot-ref/f7a5375d5d273e7eda804ac9335745a3fcc568ae b/txscript/data/taproot-ref/f7a5375d5d273e7eda804ac9335745a3fcc568ae new file mode 100644 index 0000000000..9ee16812c4 --- /dev/null +++ b/txscript/data/taproot-ref/f7a5375d5d273e7eda804ac9335745a3fcc568ae @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5d000000006fb370c1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfa501000000e51bbcae03ddc2c000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc7ee3e34d", "prevouts": ["52205d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "6c5565000000000017a914ca8d66b8079fd8386ff3ae1d10b869f5605e693b87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "1651142540f27e90740933c99d4f17ab2dfc6c82951cfb", "witness": ["0a3bb896097a419e1dd2142d15ca29cdce58ca25683519d007c0375247923e3e112da8695311c8ace1290f454cdf8fa643597d91a8702a4515891dc6f5689f73"]}}, diff --git a/txscript/data/taproot-ref/f7ab44a4e73a9b24bfff6a263c608abce5696639 b/txscript/data/taproot-ref/f7ab44a4e73a9b24bfff6a263c608abce5696639 new file mode 100644 index 0000000000..3934897e40 --- /dev/null +++ b/txscript/data/taproot-ref/f7ab44a4e73a9b24bfff6a263c608abce5696639 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdc01000000f1553faf8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41f020000004d967d93dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b20000000009c7a29f501e4bd6e00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac9946af3a", "prevouts": ["8fa24e0000000000225120979ac728ddd945fd0096bd7ed70641d6c3e965c9318f95ca3c406aaae5bf23bb", "07ca3b000000000017a914a7d99db8790799e567017bcc9951f7f968dba70f87", "48721e000000000017a914a1b035f555fd87548264c3580a1f62a42acf027e87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2356212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "witness": ["55baa3c845ae5d2061ade5b7acf02ee43b6459a09322cee75fc9544b65c15945e7153e11411e1425e2d5cdf0d108160eb1d096c1608a71c38aa93f5f50781ba3", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/f7b76430a96ffa6355eaf12167d0ef405e2669d8 b/txscript/data/taproot-ref/f7b76430a96ffa6355eaf12167d0ef405e2669d8 new file mode 100644 index 0000000000..74f7b3cfad --- /dev/null +++ b/txscript/data/taproot-ref/f7b76430a96ffa6355eaf12167d0ef405e2669d8 @@ -0,0 +1 @@ +{"tx": "561ea52603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6001000000363305b7dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd501000000b8f01b8d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c442010000002b7372e904bd41b000000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748703000000", "prevouts": ["f0d7250000000000225120a633ee2ffb44c3c8f2264048054482ed19487fd868fbe840370e2c32dd11b85f", "3f614c00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "cdc840000000000017a9148462ed29696925d7688e1db8e76ef9e6667f05b287"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "d97d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08246c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa2d5942624d66fc39e30c2a996d85a0dad9a6418b79db996452744438b84f9614682a6e83df749f265180f93fd54e474915a8abfc6fef0a760c06d61a0bf42967"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93660530ff30bd14645256530cc55287fd1e806d6d3c7680a3fb3225b836d58fc798cfdf3dc4b41074e6d5bb67bf9f12a242211e880ee715069382ad177c5f1aa2ff72d95b601af8434dcd53e2a5d08dfad1c07e45b1031877afc5b1801af7debef3d33b10ff9eee8ff434f7c79f826d5967b94922da2ad2ccade1cbab3a3658011"]}}, diff --git a/txscript/data/taproot-ref/f7bc805d350c55cd8e24def5b79ca3b2fe88ae80 b/txscript/data/taproot-ref/f7bc805d350c55cd8e24def5b79ca3b2fe88ae80 new file mode 100644 index 0000000000..74df361e64 --- /dev/null +++ b/txscript/data/taproot-ref/f7bc805d350c55cd8e24def5b79ca3b2fe88ae80 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b5701000000bcb31209dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7301000000fa266ec5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd8010000005d4ca570010206ad000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d3a8b624", "prevouts": ["82e721000000000017a914fd6ce7566239793444b7f37a40ec4d7b008f5d0c87", "d0211f000000000017a914a5f28fe5532719f979169bfa3a31d5746f69452187", "fa38720000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_52", "final": true, "success": {"scriptSig": "", "witness": ["451c3a5a4904f7bd93ca0073da15e6622e91aa9d593f4a255a29a10d136f3d39108bcf11a3df9953645eec387ca67209671f1858729072f2757a9a7e8eea0b4b02"]}, "failure": {"scriptSig": "", "witness": ["f4cdefefb6a7bd12030fecb11bd4f83c94cd80777841abdc54f2f8ee1446b5f35388fe861c0f97ec7cd9e5fd29fdd36bfa29ebb009159d7bd11235fc299525a152"]}}, diff --git a/txscript/data/taproot-ref/f7c02de0b4f89c043a3ebcb28bcb0e1396fe0e23 b/txscript/data/taproot-ref/f7c02de0b4f89c043a3ebcb28bcb0e1396fe0e23 new file mode 100644 index 0000000000..7d6d342f98 --- /dev/null +++ b/txscript/data/taproot-ref/f7c02de0b4f89c043a3ebcb28bcb0e1396fe0e23 @@ -0,0 +1 @@ +{"tx": "0200000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bfc000000001e5111c0bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf720000000083aefab460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270490000000053752fdd0376fea8000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987cb000000", "prevouts": ["de10240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "8c427700000000002251200b5dd6f00fbd30bf243b0d8b333be0f43818e467cea4a7bf1010683a4a4290b8", "5ba60f000000000017a914a2a8d85df2f20a0aaff7224012fc4cee13e29cb987"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "86", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366c9ccce34c09bc03bb8aaff06a11df09f3692c1f74f2178409984d1ab3c04f3715c685a6e20a464c0638846c4feb0cc1ab19a0a1d3cef03660e119c827d202a5d33ab5c29645e0220ea4ffd8cb7e67404885cb8b0cf94872336c7b06d59c3124"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b05e9ad3756e137278ae6e6e7c10c62cfba95395c884b707ca96162ed87516a80d99f698065a0710b414a8468dfa99ef083756205b6b6c9922dcca3ca4b3dec3b4167115de6998fecfb714975bc270adc7a6998f06c7ef8576e15f157ca8963750636431b24706e8b1111073dac761b2ba654f4832b7b9ae2a348c6845c1d327"]}}, diff --git a/txscript/data/taproot-ref/f7c0db2c2ed3c1e6f19acace4e10c0a99df88018 b/txscript/data/taproot-ref/f7c0db2c2ed3c1e6f19acace4e10c0a99df88018 new file mode 100644 index 0000000000..196e31a18e --- /dev/null +++ b/txscript/data/taproot-ref/f7c0db2c2ed3c1e6f19acace4e10c0a99df88018 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb9000000001e948b94dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b63010000003a5b129a014d5c680000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc10000000", "prevouts": ["2162530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "da65220000000000225120e57a7d71b34e22305b9beadfd5a56c380e33d3960d06bf6fd3c82fe378d7b10f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "ea", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045538b2525e5ad3e6ab2346b1907a9f51d3650fdbb6911031be2b995911891caa483976a7e8bc20bfa4c53f64ff2df47d867849c8cbf6df51014735817968d498535c6739a4d626ca1df00777eecd105a7e72aeb1be910a44c9d3be4aa00e70c25"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb4e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0df322cf06423056ff4efb147ba4330d28398a4f05a11ad98b1121aa54f60b594336f2bcd90a4462875ebc34531696f5fa5671e0fb7e46050530a773670978687e"]}}, diff --git a/txscript/data/taproot-ref/f7dad92963bb917f67c0a5d9a11c7a623157603e b/txscript/data/taproot-ref/f7dad92963bb917f67c0a5d9a11c7a623157603e new file mode 100644 index 0000000000..ac28b3b0c8 --- /dev/null +++ b/txscript/data/taproot-ref/f7dad92963bb917f67c0a5d9a11c7a623157603e @@ -0,0 +1 @@ +{"tx": "5bee4af203bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2200000000c005eba660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ed0100000060fdda93bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf65010000000bf347b903f07aea000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914719f78084af863e000acd618ba76df9797223689872898922a", "prevouts": ["c7c87a0000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe", "d53a0f00000000002251208be5967f09a51b19904ca66f1d269a3e717a290858b79a423744c21b4f0dcdb2", "1e11630000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_50", "final": true, "success": {"scriptSig": "", "witness": ["eb5cdf47dfbec4dcdaeaef35da079ac77acd725f50587ecca7066e0927852259a577946b7050f0849503df0416626c9926a787150e48edcc897a7c1234c3d82703"]}, "failure": {"scriptSig": "", "witness": ["07310b3746196baaf0cca9a43862c3752c063b2834466b1b8b7e6695aa9ce37a50f891b00d69260f454a33f88bc50d9e5dc1d06e1d03ebedbbd338d53eaa1fe750"]}}, diff --git a/txscript/data/taproot-ref/f7e399c76d4ec4bad55a5e054f90aaefbbefd54a b/txscript/data/taproot-ref/f7e399c76d4ec4bad55a5e054f90aaefbbefd54a new file mode 100644 index 0000000000..8fd5b2a529 --- /dev/null +++ b/txscript/data/taproot-ref/f7e399c76d4ec4bad55a5e054f90aaefbbefd54a @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6f00000000469d4db760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ca010000008269a1ba0146b74100000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5d010000", "prevouts": ["31f95a000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3", "7c1d0e0000000000225120bb20e6409e7fbcbcf1a8716a3f89f05af40f970979e4b2f45be7c2d2ab8f00b7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "81", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0824d4a172c841d8bdf967229e1606322d36b03ac644f3c557c1b9d417f1b2a2a789823c6bcc0c06b1ccedd8f3302fb965778bf11fdbd4830d29cbc62f32a77240ccdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362abad23705572fa5091822077faf7723b4aee0fe16a98731801378aa56415cd84d4a172c841d8bdf967229e1606322d36b03ac644f3c557c1b9d417f1b2a2a789823c6bcc0c06b1ccedd8f3302fb965778bf11fdbd4830d29cbc62f32a77240ccdb938e1cb9dba9647cc0512f82c526c8f6107930613b31200f04f80acff8889"]}}, diff --git a/txscript/data/taproot-ref/f7eb97d1c42b9d53be75b54f5a30490ace43fa77 b/txscript/data/taproot-ref/f7eb97d1c42b9d53be75b54f5a30490ace43fa77 new file mode 100644 index 0000000000..5f04e2e7e3 --- /dev/null +++ b/txscript/data/taproot-ref/f7eb97d1c42b9d53be75b54f5a30490ace43fa77 @@ -0,0 +1 @@ +{"tx": "0200000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9c01000000ddd5aec9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6b01000000ae192cbfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cdc00000000b552f5a70148b11f000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a69aa3133b", "prevouts": ["dd388500000000002251207c2a27667caa5d47bc631b21441672d615738889d76e34100e2309c093e91351", "3ddc6b00000000001600141cc39a492a6f67587324888ae674f2f534a7639e", "1416560000000000225120e177c8d99167d2320778fe30cbe0b2c4ee01065c7b6db09c8aca7c8181e3cf6e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902ab15cafd2ede5df0b79eefab811fb7bf23d150773a2005e95993362dfa0181807d9096773c6cefd6a561c60f1f6ed2d9adba322870f78770d1035077543ce908c3c989d6c2838566e2e0c77c69ebc361c6082778a287a71e13db7019492cb240a7924bc8d20844a965bdcb598be942d1d8e3bf0357828998e34da2d97492f4d9d21f48f4b251a3081001332750ddae2bde2f2acacab391691b74dbbed9a58f72b9ca8017635d948198c2d75f7ecb38ac53b02c7c9d3f162df98cd5389000689129a69b0029d0213ebada0b524d31623669e74791e417841162cac2f5a829cf1c54ccdfa831551a7ff1fe847e981a29323ba89f569dd6e63217f0e41fa778f3946ef506fc4429b56d6c3a6e12617b6fba094948c0c9cd4e11140f5f7adb474e21621380de6c217dc4917ed51d1b5d2faefcc9b0094104d0be7317e48abf0a0d42610da0065ed1c7b4c33f086ee5062d1ee85f809db222b25a4cd04d43feb366a138f45478b782d88267e9a496427d97004c6a47db70fe80643b79cf9eb6cb86072f8523f4ab9c843af629cd1eab91c2c3402983e2930345b21badf98f22498d183adb240a80f6eaf3bd9d13060fa63839c0a00ef15ac0daaf3ddd2f59eede0753b90aa03755ee970676868112f46dcf6def6d8f2191ad46fbc4c04f181e948e5ee1c848c9ff113e92ae8ba80cc5bcc480592edb2132ff572817f5867cc452e4511eb7971489426ef8dd75", "b17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8d9568d9f877f6ca0cee9df3d4970d26d0e286b65747316dde3c995de6e71d9f55bc912f5bf4aa2c9ddbc9747d59c78f40d0a0aa0a8a4f22dc70e3f9cdb9b6ae3"]}, "failure": {"scriptSig": "", "witness": ["4d090237b3b33c6813b46332eba5415ef25009b0be4a356886f771175d6965c9e606364d6e8814308b372830242b4414c1930593f1d8fb8ddcbcbaa4d04f4f2f915416ada3ba16e05c9c637d2e80f9898a78eaaa2e8a08895a658cdfde0fa81692942e778b47b93f7b1ee5f878910f25aba6d16eb0864f7ddf6b3a224c8834eb93d31abeaee611db48e5777ed2f59ec1b298c7aa18fb3ba3659ffc21cdb2f844e734b653ad70613e27345af77fcde0c0013daa0ea60ea8c2faf44e37c150d5dd378fa0d03a2972eea13f92ae4e010deb0c3a0ad0ad04bca0e0875a7b53c327e78abc2cdbb1ef0ca1eda61189f415a92fb5858ffdfa7e9af466f8dc23e1e3f4e5d9fdeb5f456374f9edd0ab0327d1c8854fceaebbcc8f57efaa01b6a07dff5912ffa9350ad06c2b6f9fb810980bb373e0ce6959ccbd6291ce428190e871056b279ee087193ef48b2cd103d4773f981ad407c50006927103a142bff4d5b6e95252b61977fa5ed251eeb01de3e9c2d0d4e461cf3e78c68d080454926d010657ec8824134483d1e4746fa53e27e31ebe36a6c065e80d4aae50811b4f62fe97b2b88232c3f7e906132aa1a1cd8d7a1423b7a49ad555d8f30b94cb6d8d79f28432e3e6d0a92083cc341c0ecb674e79fa18d3918345a117e2fe68719445aeaca5e778ee3738ec3f3d8df273ff76cc72cc7d6ebfc61fcde4db69e29ac1bc172abde56ee3e31f27fd49af471071830d7075", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e7965eeee556c39a9ca7aea66d0df3ed5bb1c1b5d1b815eb2ab41d6c7fc5721f63804e0ef706f1ca5c8b2fa38155abc6bb5e2265734815bc03afdad0836bb7f05989f510e73a03c44610e5cde856f75a0d7582565d561698089d126c5e7f66809"]}}, diff --git a/txscript/data/taproot-ref/f7f77a67d9bea0dcf7942ed62f29985930122ff0 b/txscript/data/taproot-ref/f7f77a67d9bea0dcf7942ed62f29985930122ff0 new file mode 100644 index 0000000000..b15dfc58a6 --- /dev/null +++ b/txscript/data/taproot-ref/f7f77a67d9bea0dcf7942ed62f29985930122ff0 @@ -0,0 +1 @@ +{"tx": "c022df1101bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acff4000000009ae69ab7048e3c67000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48733020000", "prevouts": ["28066a0000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "217d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e4f67f6e69cf51b25bdfcad90ab02b519823ccb2f4612df68d1a9a4df99984c88f488f9b2dd04714e2920653c1afab7d010d81355bbe53edbfcaebea15ff1da48"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fe391bfd09479964276dd59b1d58dc35d2e52175d5fee5e0ea28559bd14655b056da9396880b08a11a17662bac4a7b382e749572eea29fa5ac5793c70e2d18ea5bb5ed745f7425de3873ba37c460c85acd2f4f50490d9d3680fc958bb85bfda6f488f9b2dd04714e2920653c1afab7d010d81355bbe53edbfcaebea15ff1da48"]}}, diff --git a/txscript/data/taproot-ref/f803ece8ba109526994448413d0b5389e89fec0b b/txscript/data/taproot-ref/f803ece8ba109526994448413d0b5389e89fec0b new file mode 100644 index 0000000000..408629dccd --- /dev/null +++ b/txscript/data/taproot-ref/f803ece8ba109526994448413d0b5389e89fec0b @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c452010000004e24b6b360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127082010000008e6c8db2045a9741000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7965802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914719f78084af863e000acd618ba76df97972236898755010000", "prevouts": ["2c1f340000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "c8200f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_be", "final": true, "success": {"scriptSig": "", "witness": ["2a4e4d2690b383f6bf7d76118dc9b47a989676a8aa38c26587f9f3c1545e7c29b510fe6adc84ca6d4a92fb29af735684c01b8268c0bd2a40d6eb6fa3df15072d83", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["af77173d64c354a97cc4aff2aad7d33623f6d31a2ec2a595d5a535ede13602789ecb36a77b0a03d3dae4f13b6cf6c124afb14ba6d6f33b30d86dad64faf88538be", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/f808813d157995b8d10c3cffd1f2616528fdad1f b/txscript/data/taproot-ref/f808813d157995b8d10c3cffd1f2616528fdad1f new file mode 100644 index 0000000000..a5f3ecd08e --- /dev/null +++ b/txscript/data/taproot-ref/f808813d157995b8d10c3cffd1f2616528fdad1f @@ -0,0 +1 @@ +{"tx": "f8e59ec202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b020200000080e71b9e60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701d01000000ff9dfcfa024f03350000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787b5000000", "prevouts": ["2b8d260000000000225120eeb645229ded9c683f00135b937b2e4e86df68d251777aa040a582f59863bb1e", "b21a100000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["e24c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93605be3ea16000e1e5d0cd0f286bdd228006eef88980c7cd756b0c9f357e0882437c6ac6071aeb5642f86cbd8c403a36f49b1ae971c310fa0b2c6d23cdcc52f9ae3b30ae9fa149c8f8e298eb730b57bfc5eb02dfdad9864c9ec3129b8b9775e615"]}, "failure": {"scriptSig": "", "witness": ["4c52e2", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d51ab4aa5d5e3dbd00e7a6b81724e903c1ca482dc7bc8339f552afc52b4f38fc6a5b77966166a359aa5541e77c34a58fd9dcb7d88ef6e7e0cd0e140e1adf959d28b"]}}, diff --git a/txscript/data/taproot-ref/f8136e4e492396052082b2d3eb7f45ce735b580e b/txscript/data/taproot-ref/f8136e4e492396052082b2d3eb7f45ce735b580e new file mode 100644 index 0000000000..0a2673ecc7 --- /dev/null +++ b/txscript/data/taproot-ref/f8136e4e492396052082b2d3eb7f45ce735b580e @@ -0,0 +1 @@ +{"tx": "21283431028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49b000000002471ef9560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701502000000ffca41f901f4dc31000000000017a914719f78084af863e000acd618ba76df979722368987c191064a", "prevouts": ["4e9736000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "2315120000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["db4c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361eadd57732c956dfe38750ac99bf9f6a185a50e2b535aa6e427b8b7d9ced3e4c3f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082a04823906532712c3d4cb334ae6c7c41a1294a824a25b5277d43f47953a1da33e053a85c36f8a6bbb26ecc461a581c33f0f0e79993e29030d20b8bcc8871f830"]}, "failure": {"scriptSig": "", "witness": ["614c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936387e64f87645be2ecaf6d33cdf9f0facef33dfa6a290eb8ddb5654788a0f6944ba0f4accdd80d494e1b95824e4feb55c95caee559d90e25fbf6396e2b6be61303dda2dfca806ccc9c3ad62846e64b9ac16121de5d926db5bebf2e82f8dec8d2a"]}}, diff --git a/txscript/data/taproot-ref/f82150120ceb9a7b6d24c8144a2fc40fca6c7ded b/txscript/data/taproot-ref/f82150120ceb9a7b6d24c8144a2fc40fca6c7ded new file mode 100644 index 0000000000..614dae6e6b --- /dev/null +++ b/txscript/data/taproot-ref/f82150120ceb9a7b6d24c8144a2fc40fca6c7ded @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7400000000ed794b8ddff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2200000000422cea9001bc295b00000000001976a914c629d61df58baceae110d15eb5b55e144268615388acaf970346", "prevouts": ["1f3653000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87", "fdbc5a0000000000225120469ff3412c89f5805e53fbb9303c790a98dd32093d40e3b7dfe22bb05f85f37f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_hashtype_82", "success": {"scriptSig": "", "witness": ["96d64d818258c976c7920c0e8a7797d90fe7f62e090f4bdd61ec908801679506f89e5e41d15e0f24bab418a194ca5f9758a9dc13316239c5cad2fe229fc6f9b782", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50d3e09a20f2e8779831cb302d568c9425c209cb5b98a5ac88437b4b6666b13231624513d6aef0e03758f91deb751c2a3dbf203ac10049a5e6ee2a65b38f3f8c511254096298cedd5acf1630fe965b59d887030edb7060defe9daef5930ada70174ab0f22fce103aa046d86ea2274aa25f89def91e7c46d789623a231447612dae1eef9e01f79acce2e62dbf005feaf6acea63a5ce268397cb04a1e7e0e9a156a7d1cb0a60b94ceb314ccf884d21fdc56e4a24db35c759200c"]}, "failure": {"scriptSig": "", "witness": ["8950174d5d07f79d86a9641569535ddc0ccc9f2a952766d99565519120b22115aa910d6923993976405cc3feef2e8094d5d1a9a9d49f5486e2bf03ee27ad17c982", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936", "50bf4d1fe99c8a8d15a60f1705e2c91cd7af"]}}, diff --git a/txscript/data/taproot-ref/f846835025106a0f7d7d18630b87f4321e626835 b/txscript/data/taproot-ref/f846835025106a0f7d7d18630b87f4321e626835 new file mode 100644 index 0000000000..57d4ed38b6 --- /dev/null +++ b/txscript/data/taproot-ref/f846835025106a0f7d7d18630b87f4321e626835 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf92010000002d7002b0dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cb100000000c01dcced048b91e100000000001600149d38710eb90e420b159c7a9263994c88e6810bc75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79628eed841", "prevouts": ["b3f9850000000000235e212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "aa485e0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "6c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ec8a01b0e4032a423e99f1c4d6ecd2d2b88eecc51e0791d65e631b79e0d29889c3000b960c1063a40dfb5dc510671dff140eefb73aa6757bc42ddda0d13c6b661"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367eba9119756d434ff44abdee5a94e7585a9a57670d5d24b9bc15dfbf2b5caf57c8a01b0e4032a423e99f1c4d6ecd2d2b88eecc51e0791d65e631b79e0d29889c3000b960c1063a40dfb5dc510671dff140eefb73aa6757bc42ddda0d13c6b661"]}}, diff --git a/txscript/data/taproot-ref/f84d4edb22fee2109b5e00fd5ac471e49c15e25c b/txscript/data/taproot-ref/f84d4edb22fee2109b5e00fd5ac471e49c15e25c new file mode 100644 index 0000000000..35d78b1d25 --- /dev/null +++ b/txscript/data/taproot-ref/f84d4edb22fee2109b5e00fd5ac471e49c15e25c @@ -0,0 +1 @@ +{"tx": "3ba8d6ed03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1d01000000e3bae3a4bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8c0000000072f053efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0e01000000551026e5037abdec0000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb7963948d921", "prevouts": ["75f85e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74c36b0000000000225120901d00c5a53f44ff53918b171e70ab2bbbfff6b107bf8ab5ecdbe45602efd01d", "26ba240000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_85", "final": true, "success": {"scriptSig": "", "witness": ["85ba65144ec5de235f0845c21c253aa1f236daf1721ec5ce560cf0947c9254f4819f6f6d146c485d92203e4d2665a7f7363fbd13dfbe16419a9e9abc6957189081"]}, "failure": {"scriptSig": "", "witness": ["be6919a15e50ec80ba8b991c63f887f1d1ba2309d4801d573d3f335490584d69a3c8957c26bbf4258eb00d5939d2e8a6a5e560b66fcc72c12d58e58bf7dec71d85"]}}, diff --git a/txscript/data/taproot-ref/f86da2aa3ec8718d5308b84e38864225dfeb6819 b/txscript/data/taproot-ref/f86da2aa3ec8718d5308b84e38864225dfeb6819 new file mode 100644 index 0000000000..cf33c37b57 --- /dev/null +++ b/txscript/data/taproot-ref/f86da2aa3ec8718d5308b84e38864225dfeb6819 @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9501000000a8b3eea4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6601000000cc72cc87043cc19900000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e71b040000", "prevouts": ["60ae7b0000000000225120ab4625f49c703a23e189ede82045800566d41c1fd8d57f05292e3c6cc685d2ae", "2cba2000000000002251205ab8b22cfa491307edea11ffaf6a065b7e494e63cc66e0c2b2743a26e3a8b68a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364811c32104c8163ae86eee8111aeb1d0c2a95f553393d749299f51992bd2412b"]}, "failure": {"scriptSig": "", "witness": ["6a34616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f880da185f238333598d20ee2e139229db739f94 b/txscript/data/taproot-ref/f880da185f238333598d20ee2e139229db739f94 new file mode 100644 index 0000000000..09a33229d9 --- /dev/null +++ b/txscript/data/taproot-ref/f880da185f238333598d20ee2e139229db739f94 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd20000000060f33779dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b70000000001ed470278bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ab00000000c60fe4de03dd71ba000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914719f78084af863e000acd618ba76df979722368987a6000000", "prevouts": ["e3725e000000000022512058d9157fc9d952418a25b425d32bdf0bd8b0c43f9b89a53f52a9ce592c2bbecb", "5044260000000000225120af0a79bea452506df006e72c75367a56e4c5bc681991443c0d3eb6d09440377f", "2a20380000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["e3", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e17387e8fdb6e1953b8492ce494f93b549856be52be3e0b2251aade3a72c8c2c0db79b88164a8f67b1298a482dda9483af1363bdf02371c7e121a2c285843f3f1e449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c8b4938871a8e43bb69010d25957b1b3dd5e0f775cf541eef5db4a9b76fa4cf4c71af5165e16a75a4d38ea496516a466796a1cbb48ef44578cf258de537130fb0277e21fac1036469cce09bee47dd6f35fd38d265061a05632a5c9d8280907c6449280c515e7ef393424f0dc01282cb8b28e26e76822dbd41f29cf7fcf3ef3a2"]}}, diff --git a/txscript/data/taproot-ref/f881895a273c1bb8b76313a9f0ff65520ad27975 b/txscript/data/taproot-ref/f881895a273c1bb8b76313a9f0ff65520ad27975 new file mode 100644 index 0000000000..62c8c83082 --- /dev/null +++ b/txscript/data/taproot-ref/f881895a273c1bb8b76313a9f0ff65520ad27975 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf090100000080c5ae2e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c408010000006b50ec9a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46f01000000809ae9ca023333d50000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e78c000000", "prevouts": ["8b6969000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "5187380000000000225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "971f3600000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "677d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362ed6d007bbf77981b2b4b9d56de334ccb7bea90f2e4de65bf3c704c80b3ea05cda584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e577a14a6eded01e2af38af60eef18c742302cceec7e721187e3fa159b8f76816fa195b9f6f39c732eb35859a6bf094cf148e251ed4d8a79570f47a225cba2c42"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936db89d69a983556104bdeaa20c3c7cf6c5eadccf0658711338de1f7551c0feea7577a14a6eded01e2af38af60eef18c742302cceec7e721187e3fa159b8f76816fa195b9f6f39c732eb35859a6bf094cf148e251ed4d8a79570f47a225cba2c42"]}}, diff --git a/txscript/data/taproot-ref/f8835febdb55dca918a36795f2203f4ee4a6b841 b/txscript/data/taproot-ref/f8835febdb55dca918a36795f2203f4ee4a6b841 new file mode 100644 index 0000000000..6e074162e6 --- /dev/null +++ b/txscript/data/taproot-ref/f8835febdb55dca918a36795f2203f4ee4a6b841 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270df010000000d2d46bf60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704500000000609e4da760f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a601000000c24588ea01641b0d000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87260bfd52", "prevouts": ["9707110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "bde20e000000000022512009aaafe5c25742bc31707a3d3e67825093b9287fcffecedf6a81328faea09126", "f260120000000000225120f52aac6d1851a3bcc3e02eab41e79301b2d0925e53812529fe85f9ade1401e4d"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902473cc65bfcdebfd82df412219de8bd13e6e17501aab721e02ae8ce645099ae0ceac3ad75b7b2e8da66ca599e3ec3079f034c51582f9904a0f4224e2b815e1a6be94a99dc1b3fbdf1fb155dca74cdb089ae0f782fc880a053987dc17b39be8a397abc573e43d15576dcbd4ec120705d4c89e928857e55195a0b263459b592069b25441c6e7f0a949d561f81bd864dd28a81461621fb802b7b3defb9d161cf5f292fea358382c405594fe46c5d7655e8f7473392626b6b883e97bebf21d217694720946d6c686a5d862c488f725be6a7986d982738d7eda987b568ca4ad627302bf6a22b042116e3498e69595046eb99b41cff7684ada77246142d19c7e4ff36d33ccfbc976d26f9d4d088dc3a0643b4e2a314ea145f82c97310d956fce8620466f08965c2a9337c8622558794fc766875506cd90bfcafee9f2f10b4a7aa2fba964296b71d469e1bfc45a25db6b5edb965d93140f03b3680a5931d9e361b8d27334e4c03b026a342fa5cbe675233f1bcd63c083c021921d68cae2c6b88a0e64795f53fe02812591f10ac604c9de783dbd7afdf487e58c57f4d16a5af509d93358b3cfd4e4efbd45254d95102136dd0878fe8409d7469d45ff157614f9e214ef13dfe4a8d6b44ae96e674844e20d3fd03b00a8ed5f79b319a20ef4399d0c11771065179d7901d6086b29fbe3e66117313c6385629c6a9ee003db61cf77258f6d950020fb5ea0cf187760d75", "9a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4bc06d4332bb52a2dcbc7a55bc4ae6946dddd938636e5b51064f41569d763ab36d8f87b1e85da432696d33eb6b4e5e78e6d1d086344ff9567d72236d13448237e56d08eecb8b548a03ce82dd22dc92a64f1be159e88ba8944ed4666490b777c"]}, "failure": {"scriptSig": "", "witness": ["4d0902012a9cd2f836f86aa506364424c28ef20cfce5502d236349bbb68136664f73482ff3cb957fe78bb3ed6e3c6a31eb5108e3dc23a4a60071a2dd99b9e1dad6ba60e351372f2d653dafe72efc7240b1cc4d30429db8d1492e3a046490880b4987bf517d5ef4f2fd6ded9786f539e2f2fc6a2c7f4563d0e03e59c1d5632ad313b561b8512b3a2a100899e3714244be3332ecc07a8f697f2a54b2eb871f1d52ea2fd55f65354d40eb8e765b6b9dcdb537cbeef1117a2c4f6d6f2f86ed7ec5e6edbd5d032b21b8384e1e231769646d556ce4456559dd4c68f732963d31b694f5b591c9108656b8a9cd1ab1a201752faa2de6e570b559689f4b47dc70cb250e49f2a20f719486d4cfd13965ec83f45b18719ec00cf2fbe8f487d26146c0bd16db7175200542eed3489556568bc23f3d41eb456e9956a501e2688fec080afd0a401cf288e1d7f8ec0e9ab679d5a7f4a1035caf7223047034cbaa27711159681e5d74d0aef443a2a88c74f1caea4cbf38a51cc8305018e81899c4d9d84c67b46a44e8ee0f6f339968726a93900409ddd8979ad042f623e954e7eb51bf9d3b62af636b2b5f1ef637e0546d97c6ee48591a4121bd4111de9ac98f0bc18555f234372637cd25e7f95bf04eea85268add7ef395f6689abb7bbd94b5ed5f870af2fc7a98f6ab15c7b86e5d36e1cc9ebce6a35059ba1934df4ecc832b15890717198148e20a00b9dc7143f4ac999028e775", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361423b2e0fb5322b254cab9d769b8e25c52cf91cc54a09a7894a482d3fd1e988536d8f87b1e85da432696d33eb6b4e5e78e6d1d086344ff9567d72236d13448237e56d08eecb8b548a03ce82dd22dc92a64f1be159e88ba8944ed4666490b777c"]}}, diff --git a/txscript/data/taproot-ref/f8930f55c55efa927ccec4a3a273d7af679fe190 b/txscript/data/taproot-ref/f8930f55c55efa927ccec4a3a273d7af679fe190 new file mode 100644 index 0000000000..60e7d61bcb --- /dev/null +++ b/txscript/data/taproot-ref/f8930f55c55efa927ccec4a3a273d7af679fe190 @@ -0,0 +1 @@ +{"tx": "3b690b7c02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bd20100000061e238addceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1f020000001b923abc018b9d0600000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac8a000000", "prevouts": ["180323000000000022512027f9b2b57f7a44e5bf8532a7eee0efe01d123524baab13824442034531d1453d", "ffde2200000000002251202bcd1037a7ead4d36c79b4ba9602283e849258826382b8d227fb6c37d295c423"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "c0", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360b0630a14fdba5198d2cd32fc4420c8a8ab4ff45908222cfc645bf4223ff04bdf827dd3f971806aab342b51fb6c2519c5b3aa410ee2eacb06207a66da829722129de37322ddf566a2356077a247b666bf816d75bd62d8842c555909c8a1545e03de843256fc2f72424a897ba91cb5d3893aa03eaf52af3ae765db300c5c19165"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f54907a8d380556c8a330e16c78ee3af2c39f1cd46f776ecc20664efdc303ae9784ae775de15fa9e8fc81d7676ee4bb7b8b5e55729a9bd981757787c0c2477c76fd75cc9ac1e6f185878d252db6c7bbd874f5ae03fa9961d4f4a0208503b0750f17ad4bbf375bb62f626ec8048d4347cc1eef977780228a6d2fc47294088d561"]}}, diff --git a/txscript/data/taproot-ref/f8d8d11d95153ea9449df09e90a108d0d46dd36a b/txscript/data/taproot-ref/f8d8d11d95153ea9449df09e90a108d0d46dd36a new file mode 100644 index 0000000000..46861277b4 --- /dev/null +++ b/txscript/data/taproot-ref/f8d8d11d95153ea9449df09e90a108d0d46dd36a @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf10010000001f3f7932dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3401000000f67932efdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b2102000000826b9d0304a1acf2000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688accafa8b37", "prevouts": ["0a62760000000000225120a1fcba824e09608ce0e4adebb5c0144bd444bc623da6b47f88c86cb859b1d13a", "ff685e0000000000225120d40d9fd470af8cb0d93055b906564b331441f52449b6053adb5dc55560c180a5", "64a1200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "4e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08230e8cb56a1cc46a8845ca28d4847c7375475f2f7976a44b43884e49f27807546ab153920b849b6028620ffd2b7e486a6f5e2411aa058dab621c72a45f67f5d8e"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936323ef28f4e99bb17bfac2f1234bc4bec8e02dbcd7bd8742e9803ed76c3e6ec8530e8cb56a1cc46a8845ca28d4847c7375475f2f7976a44b43884e49f27807546ab153920b849b6028620ffd2b7e486a6f5e2411aa058dab621c72a45f67f5d8e"]}}, diff --git a/txscript/data/taproot-ref/f8e2668d6408cd99bb9b4144dccc869b5b5c3995 b/txscript/data/taproot-ref/f8e2668d6408cd99bb9b4144dccc869b5b5c3995 new file mode 100644 index 0000000000..dad045acef --- /dev/null +++ b/txscript/data/taproot-ref/f8e2668d6408cd99bb9b4144dccc869b5b5c3995 @@ -0,0 +1 @@ +{"tx": "0200000001dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cad000000007467c8bd039cbb4500000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914719f78084af863e000acd618ba76df9797223689878589b224", "prevouts": ["454b480000000000225120ea4dd4fdddeb85910d968a8720de3e26cfa946a55a30f257fee5a4b92ccf36fe"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["ec", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0828ed780475d4e357c95738577784a2a9ab12c45b3a32d4ee82ce9965ecaf5f6bbb17c496824b626c02ab547b0eab6d99cf720fc5f5950d9f56a4e0f1a7586e075a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368fc8101a1f14b662558c0e8593c88d9d486003e9c8266cbc14341013234749228ed780475d4e357c95738577784a2a9ab12c45b3a32d4ee82ce9965ecaf5f6bbb17c496824b626c02ab547b0eab6d99cf720fc5f5950d9f56a4e0f1a7586e075a9cfc1055a4268af502090450271f6d102883ab16be8e011ae292d6da52fbee7"]}}, diff --git a/txscript/data/taproot-ref/f8f8928329f1f5ae3c966fb5ec2113e076eafcfe b/txscript/data/taproot-ref/f8f8928329f1f5ae3c966fb5ec2113e076eafcfe new file mode 100644 index 0000000000..2c8f6705dc --- /dev/null +++ b/txscript/data/taproot-ref/f8f8928329f1f5ae3c966fb5ec2113e076eafcfe @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c40000000009d51e232dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c42000000001c11fa30025f6fa30000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48730f47c39", "prevouts": ["9532570000000000225f202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "3d794e0000000000215a1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["549e585f569f0029b8ad233f810536bcc592cd03bafd9d4c76138b19f70f397e613e6db527ac4442db3e49e1f760d605b74d5c253e16ced5f48ac06e5c47c8bf", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/f8f9451ddef15046ebb34b8ada8344e100e77c6b b/txscript/data/taproot-ref/f8f9451ddef15046ebb34b8ada8344e100e77c6b new file mode 100644 index 0000000000..6fd3b3bc2a --- /dev/null +++ b/txscript/data/taproot-ref/f8f9451ddef15046ebb34b8ada8344e100e77c6b @@ -0,0 +1 @@ +{"tx": "0200000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf500100000025b6048bdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf0010000009bc157c302da139300000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787d8000000", "prevouts": ["923e720000000000225120279eabb29e123e29b3e35f5f3a43ff6342d7d66d04195fa790bd9d720ea8f0a0", "4a6f230000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93656e70bccfe8a05e4278ed37056f198005b9b7c7170c1af3ea92479ba6ee8fbde"]}, "failure": {"scriptSig": "", "witness": ["6ab7616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f90c809fa2d5593e55f0033ebff4eb6de3bf7a4d b/txscript/data/taproot-ref/f90c809fa2d5593e55f0033ebff4eb6de3bf7a4d new file mode 100644 index 0000000000..d78c060a17 --- /dev/null +++ b/txscript/data/taproot-ref/f90c809fa2d5593e55f0033ebff4eb6de3bf7a4d @@ -0,0 +1 @@ +{"tx": "8dbcaa8f0260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704e000000001f96ee99bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb900000000f13ab3910248cb8c00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac4f13664b", "prevouts": ["cc920f00000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "1dc97f0000000000220020e1b76f9b72221fc6d0b005cf598043f1c9baebcf6357c47a6fd2c54d470c73b1"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "success": {"scriptSig": "", "witness": ["304402200dec731c63b4cb576ed1aa0d68b96931c6ebefabde27dedf1c0cb0edb933a87602206432d636c7234f2784526d52b6ef0e7614915c1987b2906cf5fb26ddd4d85e6003", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}, "failure": {"scriptSig": "", "witness": ["3045022100ebc3c78555a75d15e19905be089a7086d4f3283446cc7f3eece805376c6a5245022041074126509f962778c6435c65cdb55abc66f4f8258f933a257e6ec784b80ef803", "4104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893ac"]}}, diff --git a/txscript/data/taproot-ref/f92ae6d39d23d890f0a4bbb1700628cf97bfd5a6 b/txscript/data/taproot-ref/f92ae6d39d23d890f0a4bbb1700628cf97bfd5a6 new file mode 100644 index 0000000000..d4549d2afb --- /dev/null +++ b/txscript/data/taproot-ref/f92ae6d39d23d890f0a4bbb1700628cf97bfd5a6 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf090100000080c5ae2e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c408010000006b50ec9a8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46f01000000809ae9ca023333d50000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e78c000000", "prevouts": ["8b6969000000000022512027fec823148be86509eead145c0fc284438e34535639d609cff1daade835bbe3", "5187380000000000225c202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "971f3600000000001976a9141cc39a492a6f67587324888ae674f2f534a7639e88ac"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "47304402206b0d26fc7d5aa03514d2525b7b97e2b089f28244da8583a4545ced8f2d8489a9022050e337d5704d85948d1f3fbd3cca389036727bb1e08426e0b98fc16ba695e765014104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}, "failure": {"scriptSig": "483045022100ed726120bec6c442a1f463d10affb9f04e8109102d21d2c3f2624e467f08e00402200294ba13cfbdfea82f4684cfb62e3091546d98f0f60dc501ac811c25bbd428bd014104d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893", "witness": []}}, diff --git a/txscript/data/taproot-ref/f92ff19d417dd30243bf0048d8947d33b4bf7064 b/txscript/data/taproot-ref/f92ff19d417dd30243bf0048d8947d33b4bf7064 new file mode 100644 index 0000000000..d2730958cb --- /dev/null +++ b/txscript/data/taproot-ref/f92ff19d417dd30243bf0048d8947d33b4bf7064 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1800000000ba47f20abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5b010000002d1ad987014ca42b00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac74b5bf31", "prevouts": ["d8116500000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "264d63000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902966530f152f3a446ee34537de1160c2c45522243c0aacf231686b36dc6b021273dc7698a8d3b96111f78979242a46c68076259ea722690fa2ed13b3bff3641576f66f2aa864515ae45a22c4e21628fd49b651dd942127d16de21c5cb84b73459a693871f7b74062fc5fe28f5f8fff510e8645a1f22a3ec507e87aca9179b72dd904440b0d41d13e13bff62907721a864040ffc87078c3c77bbd04c04b3f1e3a9c4d10186a80667274e75d1343f16b7c8494fefe947640b49d50a1034b0a6e407759e6065849f9d3ffc429fa8759d27b51f5ea04764fa94495845b1b7e14e546f423404724e5ef223bdf918b1e9e7dff7ceb6f94a5d6816d3e61424f41dc027e65bab6dc12bc40a444b0dd4f73899fa31e6b2899b0eda4bae05fbf173340037084e50562d3ac3efc4ca44e17e9e71e75b7a4bac44cd42427a6eaa44a07b51ff579f0888c304a93b86445a6262a3d1a6bec4174d8e1c3242407697c7307eca2659419f331762bd4a5f511f8f5809216722d8e3101fba876ad03379e3982eaf309c4795f11636695fb9bb6e5f5b8e214eee9a832018fa4d93a8b761ee148b28b5e5f7a6ffc590e64cc8e4a790696448167ec8ad24ec09ef2aad174975aebf311b9c37bfc157f639d81eb5e883ce4beec79f03d77841d94d571ef99bfac17b88173672e19bcf5431ab8a4bffb9f86408af0a661726d5aea4198f2f101c3a8466a1594efd3323159965f77775", "557d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365570074ba5d6534b1acd7012ede0bb8dc645b9846f6493ec98be18925bfc342d2d0ae3a8a51f8512ed3183c6b189898e3d13807be8720838a97bd7135cdf46e7da77d1c2cfbe9569ee5db2c51580a9857624040db9177af617be0771cc5b8a1b"]}, "failure": {"scriptSig": "", "witness": ["4d09025bda3b7d42ec465570f9a1c8b32a3b73052df58358a4cfb6d9144b73c58e42d1010bf3e26186d3eb501d05d8a7d394489cee54773e5787e3cf22abaf8d98dadac3f3de0a9e95a2a696a005176e8624565f027e42122cb5586da3a5138d9e27efb1450dfa3e56171f2d51e23674f82a5019f67b66e1e210cdd0e06134a94c0c92598f9c3437ae9e6a0b6afe889095f88b7833360f2d7674623cc0d0e24050459a8d19ac7749cf48eecd0e7656c1aea5f44f39d13e659d448fc3fb600d111e0de1ed7c04f747140118e4a638bd23ba4209d0ea9274e7fc363247904674f583df80fc6cab3e1a57f0a0f3d554afd3f02b023e7183f073dc04bfeb85cf0a3da04575d7bce0e3c9d106bf30d0a6b5b69744327765e2ff4b8e9d9bfaf2ace4645a0ad8cffb947799efe998f9bd2536d1c506bb06d44b8eda4303adafa63dbd61e9b42b8cf59188957679e185bb700be07de7e67ac158bc48bcf5ce1ccea48c55feeccd37c2356fe36a1c765300b60dc5b8b6a4eea659a1d124fc25f251d54e8405e0d63a1077fbe62fe8ac7cbaedb1f958422fba811740949c91c9b3c627e014b140dc33a320729194a0e7114f39a843204f930f537f0ecb5a9d33c58a9fb5f4659d6fe7f1a123a4eaa0118ad71f1855e33bccb1d2b8a06b1e386761a1acc02648d709df78a7ee4635529fbca5bfe3d9d43dbcf9831ad49a3efeb2bfd36c97bec30c1c3fc74bc0a4d446b50d75", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362e27c3ef10f9d2f55b89f870bb007bb039d5dbcdd8b8a07f79103695c3c109fdf33eaf0e0e2046a2b327db0183a88d397c5be0a86c812e98815a20f9da9843a2a4c5d50721208c85113b157b4dd4688510f63bd33d4c90ece0d9e0afcb8224b1"]}}, diff --git a/txscript/data/taproot-ref/f950057a3fe68206273e224b1a0c92d75bf4cffd b/txscript/data/taproot-ref/f950057a3fe68206273e224b1a0c92d75bf4cffd new file mode 100644 index 0000000000..512fd0b641 --- /dev/null +++ b/txscript/data/taproot-ref/f950057a3fe68206273e224b1a0c92d75bf4cffd @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf1800000000ba47f20abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf5b010000002d1ad987014ca42b00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac74b5bf31", "prevouts": ["d8116500000000002251204cd7ec6ae4f2b0a3444c5804c92054f57c943d1375da0f99d43cad136a94d2df", "264d63000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["3045022100ce090b0be1e63db11f84335f97a38a7878541f5f012bf3b904fcc0f6c840444a0220381008f21e1f710b2966444f8b7c78b5d2881f4c20cf6ae2d426a3f332112d4482", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["3045022100b6a94089c242da02f6d05ff53cabf59b77eea81481b11ec61c32c10570f20a6202204ddedc993527bc0d85e31aa1e8b9cc49fdf5ba326ccd4c3782a00e9f4d80333682", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/f9527f53e0c01295c939d322769c4900690eac47 b/txscript/data/taproot-ref/f9527f53e0c01295c939d322769c4900690eac47 new file mode 100644 index 0000000000..72516836a7 --- /dev/null +++ b/txscript/data/taproot-ref/f9527f53e0c01295c939d322769c4900690eac47 @@ -0,0 +1 @@ +{"tx": "84a1e22002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6700000000d31a558abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3e00000000a47f97e303c77edb00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7b8821e39", "prevouts": ["fe68600000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "69857d00000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "89", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea0237369b8fe49ed1b05e21155f7ffba4fa029aaf0d531232d0302472e08390b90b3e537e0a498718b42d83f823725a04b39327b9237d74ba7af037a7c89be8bd8f71710e2f4773b226617f0b144a9d046788db13e8347a383f909c13421323cf46474fab8e7e9306b35224640e271c3ad2c01a28b74e8035b5ea3da4b2d4b1"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e15f4861bfb2a6452ac4a4804b2c6a2c641047e4f139d9501cd1bf471f8e5b3ea6913d98effacbdfffd2adbbf71932929e08e9cbcb7e06a345b8d84d9192524cd99d8f9ebf09b0c450213ac35faa1ca38fcf1ad0a46ee35414da06dc92335be8b4"]}}, diff --git a/txscript/data/taproot-ref/f953c76798af4534303b789774638f6750bf064f b/txscript/data/taproot-ref/f953c76798af4534303b789774638f6750bf064f new file mode 100644 index 0000000000..42d597929a --- /dev/null +++ b/txscript/data/taproot-ref/f953c76798af4534303b789774638f6750bf064f @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf2b0100000003d33c9abcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acffd0100000038eb109e031793e40000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e75802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc01802d38", "prevouts": ["08d775000000000017a914613e66961ccf40c7c83ed07cc80b2528cfe51edb87", "e447710000000000225120e477b1c5b341d71bb24c39a2320bc0d86da52fdae37edac491a92c571a2df14a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364b234f7ec6a8dd17a567955d51e11bb1a7dcaabf34b2b14b63e8c8f172f77efa"]}, "failure": {"scriptSig": "", "witness": ["6a58616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/f95a0a2fc49acea853b2fa634e154189153c8e19 b/txscript/data/taproot-ref/f95a0a2fc49acea853b2fa634e154189153c8e19 new file mode 100644 index 0000000000..18f7314d75 --- /dev/null +++ b/txscript/data/taproot-ref/f95a0a2fc49acea853b2fa634e154189153c8e19 @@ -0,0 +1 @@ +{"tx": "d07c79b8038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41f0100000018502eebdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9a000000002d3f28d1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c170100000063ffc498030747e700000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47874de2e530", "prevouts": ["a595390000000000225120c4289f295f2323e1a679e2ac23fa4ce9cef8c78af5f55473b4c272e984282d2e", "51a15800000000002251209907b2e5a8727f92d01ee9564efd2935f4d16cad3aca9531ec5054e94bf8eff6", "dec15700000000002251204c67bfe7b8ea24990d5c0ded805d67c336776f2a51059014263e3e0b5e292bd1"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bigpush", "success": {"scriptSig": "", "witness": ["4d0902fc7bd4820f0eeae1572d9e91bf2bbbae9c08eb147bfb0969fecdb800d1aa84f10d7cd1713c107a0409705d93a596bdc07570c89add51ad52f005d502d8d02076e311eb89b5ad01844cc78dce05165ac3b3e7c979e5f44f9b0503f61ae72489f477f78beea5d696cd0d9c9686de99c5ba07f5f32243fcdbdfe771ff0582bc4e10b3277da13b0f1bfb40cf081c1578a2b2b1d73820e0fba0d8a49d8a414cc558b34e3ee6f260416a8313bb2c3970c033f58c7141da5adf81443d77748a56f1f871f8225ca5aa05d9efe31fef73e8a22a975d4a3eef3fd317171573ce0b1b2718f69d7030f0f1598974917249bddd6d6a13759e6145be40175a8ebad77131d7b8a7223c3710df0500f54f379ca19315ab7be8fd997d9e186d28107d1fbc882ef296b866dda790e3731b74b114485b8aa39af6297da11c073d0bcb31b92b2a21dc777e7063a642a5580678c51b8df973bc21f7987df2daf361a1478f9f4e8e04640eeb255fbee93fcd9b6e7a2f7985d48d68642107ffe409cc41d2d0ff585e8c4c9ae7266cc8c2232407435323d7b5fa4266264a71f265ac69ad4b7913396229684758a9a9bdaa5815f519d0f5371536b4a48a62894cc295fc7c7a5d81b8a85099d608391275776bd6c73b22a4123a59fc3a627608b111f389889df3ada0f361ebdb50c17a98cc6ab879b70470689d0da13a47063da79a3aae254304c25e7c6f687dc94ce84c598546b5f275dc", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d5183faa9f1fb55f2c754174031ab88b9fb2c4d1471ac070ceb12091a666ed99e827470af5f469e43c444817efa23ad8740a4ec3822d36804e7973b39d521bdef59faeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}, "failure": {"scriptSig": "", "witness": ["4d0902a01aa5c6a07e8b63c4b5caf6d935f8ced78752f84f4158b07970df28f8ac85848b2abfaeeb6f641e3dda2e01db7e678d4f0260f192616d0109a787dcdb71e6a00224cd795be015ce50c3afe419ce3392569ffa15d852421e4119bc357ddb8857dc0ff19e06d5aeffdcfd30c62f5549a3559789de15c841eab2c65dcc5a43503e63938f62daa8509b8430afbd2e4745445f84a8500d84dd7dd60b7c21120a16869919b097568deda20d7280777fc93de59d3fbb664b4474857f327b6425d62bcc4c61fd1758a0892761d5b29b5f757a383bb464ccaef225797aa00539ed641e0cb76a4c86cd2706ce1584583adc27d8f0004f8bc753459728ab820869a2be6fc35c75229093e0e22defcf9c83915a871fbbea227c8a83d8f0eca091e5f0f3abc0115d6c2b64870a4e7f1cee49b34e39ad9eb8335ca38bfbf886f75f1b899a0c8f3b7c83db0d8206cdfc7e36cc0b8916a30c087d8aa7cee72529c32ebeace7e6fd2e0994b7aac8d4a8151c35538d95e5b63dfa2b26c0fef794c85b8872a52c3cabbe936dba05ab2a262f853cdb05428677557721b5f72567d86fef1df45d77fe08fb1ae78f10fac539e7902de09b10cf00c5395ccb2e7911fd8d51b82f1c16c205db3e3353d19a686f3b49e9651941858c8d3fe44b8da718e05189938534bfe2aac7a9710a872bff685f65a6e25a682c4141259b772f7703b460c715d53c9706341ff283c941d0d899507561", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93688348219a84d53835cacb5e278792a361bab3f99c1b38c46419f6f84c91a9bff6950266b78c1c1a06b0abf9d183417cba91a47bb46abdc469d8aa6f91cbf6a3fa39f866618102a4b08e1c83cadbbeb41bf3ed62f238c8432fccdf019ac45545bfaeb7b84c883e27227adf79edca80c57b026715ff0da0f52c5e2d2aa306e3b89"]}}, diff --git a/txscript/data/taproot-ref/f9ae968bede9072e9913f275110691863b21d704 b/txscript/data/taproot-ref/f9ae968bede9072e9913f275110691863b21d704 new file mode 100644 index 0000000000..7b834042be --- /dev/null +++ b/txscript/data/taproot-ref/f9ae968bede9072e9913f275110691863b21d704 @@ -0,0 +1 @@ +{"tx": "4de70a2202dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1402000000fa3ce6a6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf401000000b6192cae031df747000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47875802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374872a010000", "prevouts": ["52c025000000000022512081fe6bd81c93a76bc00ce825f56a69a98e925b76c72731e1070d37ac4d963490", "e47b24000000000017a91477661b6925aaf216859ba3f511d1eeb98029e4cd87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "success": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["304402207d868a2f53f800e4387c8261971bbcbf2a44766462a25438f0a0ba5d3640c332022042097a752da9ee4dcda57407ed551f21cbfce9a2e9934a00351d1c001519a6ff01", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}, "failure": {"scriptSig": "1600141cc39a492a6f67587324888ae674f2f534a7639e", "witness": ["3045022100893ccf09d5a720800608a90705862cce4f26c9fbe9623b1d730ffe9e3d9ec93602205df4ecdca8b974423986f87124e1f8f9110147e52543bac90cf527d3ca1eb75501", "04d70500cb6c337bb15b9d342f75e4aef8fc44c2aeae92cf1059813b79463bc0773f9cb2f3e3ebd960820440fa2837455c997c4f35da4ba1c196cb51427fd21893"]}}, diff --git a/txscript/data/taproot-ref/f9e9604adf8a8fa70a8a2d8699243ba825c4c268 b/txscript/data/taproot-ref/f9e9604adf8a8fa70a8a2d8699243ba825c4c268 new file mode 100644 index 0000000000..fe93f045a7 --- /dev/null +++ b/txscript/data/taproot-ref/f9e9604adf8a8fa70a8a2d8699243ba825c4c268 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b500000000011604128bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49200000000a36624610468c3470000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac78010000", "prevouts": ["c58410000000000022512041c21a039e22b4c62c3aba6b6aeaf308dac861e9dfa80f1544cfdbe544b0d99b", "78f438000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a4f83673b9228ad584e3c758d3a7ef913b0130d95503994689e6b12c1cc0f2a2ca477f7eac6c013e182e33a949b526b028f901138401b50189d2a4f50cede7d4a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364a27ab33ad30c866663b6aaa2ec98e71770b4a6226bfe80c47bff7f69f5996db8ef0ecf285bc5470eddb41e1019d9d697e32571bfa8271cd432e6dc81a28355aef31942b1858214ae33105eca3f0b2cf78e8df05a3972acf71e40f309e975162b655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}}, diff --git a/txscript/data/taproot-ref/f9f75f9ba55d66c16536a85bc2406112ffaef2ff b/txscript/data/taproot-ref/f9f75f9ba55d66c16536a85bc2406112ffaef2ff new file mode 100644 index 0000000000..3575abcf1f --- /dev/null +++ b/txscript/data/taproot-ref/f9f75f9ba55d66c16536a85bc2406112ffaef2ff @@ -0,0 +1 @@ +{"tx": "26717be901bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfad01000000ca211f9e02ebb77c0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487a6020000", "prevouts": ["f3837f000000000022512056841eb16851a8254dd440f9b87fb50fd6caa3d6a42582cdb16ba84fde29c407"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6af4", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9368938b1de1479bd29eea6cd3e0abeaefd74a04968d0ad5778826ab6e5abe10907ebf10485a7565da4888b0296454aba30a39a8416dd3eaaebe7fea4a18750e931ca477f7eac6c013e182e33a949b526b028f901138401b50189d2a4f50cede7d4a6f8b9af6548d116d93931f99bf1698fdad997ce51263e0555061e012c5780fd"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936082ca7a5cfe1a9e0b80c54adc09274a6801d747ad511d5fafa337d754a1e0573ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b270b4d2addc31b8421907b0cff80194a5513593e3802bd921239c9c6063ea806bb655a633384d647dfd447ac375ea9b2c02c16d8a17436cec940ed1871036c5ed"]}}, diff --git a/txscript/data/taproot-ref/f9fc9e2a4f2af623fc883937402f30bb39d7194c b/txscript/data/taproot-ref/f9fc9e2a4f2af623fc883937402f30bb39d7194c new file mode 100644 index 0000000000..9b941588da --- /dev/null +++ b/txscript/data/taproot-ref/f9fc9e2a4f2af623fc883937402f30bb39d7194c @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270240100000016d9ce96dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b740100000085d2d2f90174352f00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388acc1040000", "prevouts": ["3fde11000000000017a9149d4bcb1ed806c9beed692a78614f8b90a68c708187", "7903270000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063bd68", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364beac8453c08a82879ff5e72e60d02b43bb4030aabb448d6315e82d153ff340281cd61fd18311004a5536d1440b72b537197adb3a0d17581cb4a1679e89097edb5843f54915b2c97abdf26ed2d562b36c2375ce95d63af6aa508e6368a687449"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d0820cffa7efd13876b56a4fb6d16fe87f2b3bb25d39f5e6fb1dfb5ce04c0283c8690e634e19498d3396bfa452af2ece499faa564dc4b58fae514f4ede8dd179fb909e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}}, diff --git a/txscript/data/taproot-ref/f9fe421cb9a3952dc45c8d26a7ddd2f53b952533 b/txscript/data/taproot-ref/f9fe421cb9a3952dc45c8d26a7ddd2f53b952533 new file mode 100644 index 0000000000..1d40e6290d --- /dev/null +++ b/txscript/data/taproot-ref/f9fe421cb9a3952dc45c8d26a7ddd2f53b952533 @@ -0,0 +1 @@ +{"tx": "865915d603dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b4200000000458456e0dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9d00000000e0cafcf560f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707a000000000805b2d203a5255300000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4a000000", "prevouts": ["ed2920000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "3f51250000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "e9fa0f0000000000225120398f9b6183163c03ad23a14c61a29f1667ce990766f9351cc380767011c973dd"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/no10000limit", "final": true, "success": {"scriptSig": "", "witness": ["269886b1e345109252e6f614d6637275d1af89f5e7fc3d31083c65a51898fa10ed42fc5eb18ccfee52739c3c519aa55766dfeaa266355ec1c9e850633a81a508", "00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d00006d20871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ac", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c4bd634f33c5ecdc824e032f7f6505e1a79908414cd9cb4904e5be53af7e276009aa0844af634d6a88942fc07e09cac01273a53719e9c7d657ab3dca82f27dff7476f30639288ee83f7e586fbe3eebf95392294d770910004bf988ac20d733d0689898eaa54a64e338f0d6f587db8967e9a32da3cd142bbda1995bbc1041216c07e8ceacce0cc704ff4253cad15b4bad56fa12d498e75acea888835d93f185996410acc12bc4c5dedac1c586862bc30c8c8c35c43f931a88b1e66ce87253be2d9fa8e1ab3eda915843deee8f6933962b6489afb9525529b0503d03bfa76215bd5c68195c04b797f18bb2cfea1a746c9cd9f9f26f7d097f82c81888e43ac3d6d788b3e61c662dc0c68cf1e428de0b3881159a8984908386c22cbf6cc6c3f2d9481e07e856e8b93123b7d28bc5ec1dae7bc0c0785a4b348cb95c92daf9b4a1a6d2b65cbfaa9ed654ade91c00c9fe4f57391c241e95cfd60b1f44f495a05086ba006260268f3fa4d832afae96ff672bd19d7e928d42bc878143589bed193337fe656f28feb26558d4d064770c2eb738b0251c60e0a639239140ddba0ceb61ff7c3e738a88f45b76d7bc9f694c0e4e272f5d4f15822286d483919ad24a64a55c6aea77b92a17291ccc674c2e3ccdda7238c0844a935fb5296ae650389c65e5133f0a612c82056373d0e95f592d1bc3cf4aac0fb3e0b8245a80d6d0d3bc3eab472fda"]}}, diff --git a/txscript/data/taproot-ref/fa167d1943fe2df543ef85cf25a11984cbd5a5a2 b/txscript/data/taproot-ref/fa167d1943fe2df543ef85cf25a11984cbd5a5a2 new file mode 100644 index 0000000000..1fd0a50f6d --- /dev/null +++ b/txscript/data/taproot-ref/fa167d1943fe2df543ef85cf25a11984cbd5a5a2 @@ -0,0 +1 @@ +{"tx": "010000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270dc0100000041fe47ba01f3b30c000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487053d2e30", "prevouts": ["40d11100000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bigpush", "success": {"scriptSig": "", "witness": ["4d0902e03f7d21d2b8b3e12ffd2f14d707486ff62bc31943c6b68eeceb6a6b3fef9d3493ce630b2b2a0663bab7a8067a372d46e196e4494d793481fc12488197d1622713e1eb72dd6cbe73a0f991c2e4a766adc7c3ffac77bbff9ba0a54cb3f1014915f638d82f07c2fd5d99ddc2273334f94b57b93cb8f6d22c796a8e33a6c5eee77ead76ab35ad4821740bcef67899f7c4969a749c27a073e4bda0108870e26e12b308af144ff9928cb2ae246ddf046fa82bf55d6da59100dc52334c56b59693b6cdcd073499deb245170d9e745ea845b1dd02fec310edc94d1599c90ba7ceb4bfb9b14072f6eb1e7a95a3e02916b246f87e71e6d0592afd5c93db66c7c1b12af4cb11bb733385f627495ba5ee6906620beaa8e13d2ca7f39a88b48e14ab31bab1b5273bd53f7134d84e7bbdc05bedf80ef01a9ada58734a1d03237d38aef755fa54cb1a20836611729b44293899a469d9a9b0816ea1f638eecec06268a42f743df127fa80a5fcc162a9152c25caafa1c6459f483b29a13119e28d25f947ecc83865e0170086b64192b40a3e483059301333ca6a83a0f8f421c1728080f67017dd5db6c1fe50b9aee076e16b3d10ca9240ef7b8cf0cb0ed00ac120759704b0f73814c45c3dd4c34e65b0919edc85c05c3650b2b4046726edd43af2032349fba6f037a302d25513fc800a0973c2cb0dbc742e0e866f8a2d892aedaeb617be122907e6136d36fa2e7d58a51875", "537d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9369e56f8367801e6cb4b8a091b8158ac933c3bc0e4e5c9ffc0637287cd390f6356c1fcc94e870ec95c088fd37f5daf805336fc0aa07ac91d9d5a0c770a5a47ed76aee97a7dfb8acbc78fdce4694f8ba1e1e3bf612a81f34559c93e6dfd336d600fd892d02e0db2d70aca72db86bdb1e35d04291625c81ec0b3d884b10be9f787fb"]}, "failure": {"scriptSig": "", "witness": ["4d0902094499413ccbdfb4c4c84178ca8e55e80b1c1ffe32e6be62459c17bfaa45e901bfd28210d71039246543dae4a04606f80beeba3cd68ed7aa3c7c027d3906b6094a30c79f513337d15a663a7e794ec1752cbf29f9f8f6fecd79ab8aaabc85c20a098a5f51dac2a4bc8b913e5e338bb859c5bdccf31ff0f31938776300e71b1be51ca66bec8707648a429e27004e4bbcbe404e6589b8dfa5cdedae589d70d88f06f0c342c2a2c4f0397367075f0933f113d12a04ccb82bb187fd815d79e919858ce39358cc83dd6755bf64abc7fcfe94db82d2967b98bbc2684e0fdee54fe642a54dd214ee6b30721a5a294abccdcb4dbfdd4f28d17a328a1fd1bc7d2471b86b2bcf92eaa08c3818dc0dfe0943029b312692bc4068cc7487554ec6d5bf7dfb57578ab4683bca02c20ee432a46ba031d439e2e5331d757e8c115fda7308c8f76db70a53d208a07ede01fbd5e51a4df26dea35af2d397046bea173ab97bdbd4c406006b1536ebcafe074fbc183a89001bdcf79633b5b910bb648e1cbaca45e06c27e34359e6bd4fa4f95843030558b4a3752fa11d355232f1d91b164b755e5335d5a204b9ac04c14bf73d2165f3e3931f270a3984a57aedec4e4ed57131ec1168c00a2cdc8801d4051e01303d4e13f86d4e3adc71bf40b74d69383702c2922d9203852eb7497f68acbb267c2dabbb193a60e16bd0abd55e78254d99cc3a028f85c9624b5c1151a072ab60475", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa1d38f649aceaf83ba76018e55a1207707882be6904852f7ab0998fc8ad53a321d892d02e0db2d70aca72db86bdb1e35d04291625c81ec0b3d884b10be9f787fb"]}}, diff --git a/txscript/data/taproot-ref/fa18264203439b69d71bc0bf47eb42c09a0276b5 b/txscript/data/taproot-ref/fa18264203439b69d71bc0bf47eb42c09a0276b5 new file mode 100644 index 0000000000..427feaf7b6 --- /dev/null +++ b/txscript/data/taproot-ref/fa18264203439b69d71bc0bf47eb42c09a0276b5 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4be000000007e34d8a360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704c000000009d55639704a6b64b000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6f14dd35d", "prevouts": ["34853e00000000002359212540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b8900", "86520f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["7e6d39cf53a6e18ed0d941a7377d313afcdb97dda6f3349e2246f7b995ddb3951d82f4e74bc0ac5e599dbe27a1645d2d26358c876b70e9cd431e6e277197cbdf", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/fa2f957cce50a9e152ca7a429346901042de9fc5 b/txscript/data/taproot-ref/fa2f957cce50a9e152ca7a429346901042de9fc5 new file mode 100644 index 0000000000..5e282bf339 --- /dev/null +++ b/txscript/data/taproot-ref/fa2f957cce50a9e152ca7a429346901042de9fc5 @@ -0,0 +1 @@ +{"tx": "b8a0e6aa02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7401000000992304cfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b58010000007f10f6d10409577100000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a65802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7abce484b", "prevouts": ["81ea510000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "74d5210000000000215b1f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "", "witness": ["badc8b1e93286f5cf5bb033f2b9660d704d1f7e6d4208b141e049bd781d7a0c41e1dda72e7ea98c1acc7d2125d2ec1142afbff8f8bd1473a60d6114908dcce48"]}}, diff --git a/txscript/data/taproot-ref/fa49e364b5b789a639515d469e423d52b4437393 b/txscript/data/taproot-ref/fa49e364b5b789a639515d469e423d52b4437393 new file mode 100644 index 0000000000..ad242e1c7a --- /dev/null +++ b/txscript/data/taproot-ref/fa49e364b5b789a639515d469e423d52b4437393 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c483010000004b90d992bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf690100000046acbee704b8599500000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487b8040000", "prevouts": ["a0413100000000002251202b3b427270f2ca619ae178ac9705b497d3b6bfee82eb9aa7db09432365097408", "cd9e650000000000225120444987fec3a0729a80d98404b6d5826620ad219568baea49ec5499ba522f466c"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "4c7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082126001c6c44c6d65a09c6d1b267ed4323a5b88ec68ff3dda19058d2d3d94a32d819d45740b1e9d6e416a8a4978331345395bf058ef0b936b66c7755017d83c65"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d840fd1b4336118158b49a207c7c1265147fcdb5164c3ca7c69b8b407af04dfd126001c6c44c6d65a09c6d1b267ed4323a5b88ec68ff3dda19058d2d3d94a32d819d45740b1e9d6e416a8a4978331345395bf058ef0b936b66c7755017d83c65"]}}, diff --git a/txscript/data/taproot-ref/fa4c5cdf26645ea0534a498e6eed0980cfb7a7c8 b/txscript/data/taproot-ref/fa4c5cdf26645ea0534a498e6eed0980cfb7a7c8 new file mode 100644 index 0000000000..eee2a929a6 --- /dev/null +++ b/txscript/data/taproot-ref/fa4c5cdf26645ea0534a498e6eed0980cfb7a7c8 @@ -0,0 +1 @@ +{"tx": "fdc7ce4202bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf0900000000f49ff5b1bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfbb01000000249669d202c284cc000000000017a914719f78084af863e000acd618ba76df9797223689875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e77d020000", "prevouts": ["f3566600000000002251209bc793d7c3b05f6eda9a2c26b213a9e100dca8f4a7f94360c5b61ae9a4f972e8", "cd22690000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_5c", "final": true, "success": {"scriptSig": "", "witness": ["9d69121c64aa823ae8029931fc63dc21a790a754effeedd0b99dd749f199a43b78578697e126f0e825ec8a34ee98dfd9662e0076aaa67f6733f937c1c2bef7e401", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["cd8961769bf3fe148f6d4d3437a9fd04af879c70323c770e7368a04f57fad871add4cd367cdd856d6d72dda471bc287778b07010e63d118d04461f1f4201a22f5c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fa597ee663f096b76cd93b293bc4d7f7aaefc262 b/txscript/data/taproot-ref/fa597ee663f096b76cd93b293bc4d7f7aaefc262 new file mode 100644 index 0000000000..58ea1bdc51 --- /dev/null +++ b/txscript/data/taproot-ref/fa597ee663f096b76cd93b293bc4d7f7aaefc262 @@ -0,0 +1 @@ +{"tx": "fa183ec302dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b530000000029438bd260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709d01000000a26a9cc804691a39000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7b8b82732", "prevouts": ["2b15280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "acb41200000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063bb68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93620e1233246ac9a23fcb5b3ba301349c9efee22ef31ffea4e16f8e5d228bda7e14052bd780e62e78eddfa6319e1e9b5f2922c9c635f126e8f8471707cb2f26f8c7017bb5ae96064d7d19e957b5258c9c864deb4239d29676eb164d7ecbdb9fd5a354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93690dba15435832e62db4273c7c8000a302670526f3381315f96b1fa3e28a433b54c3d251f378473e49463283b18fa00944324abf75c7e60d6956acdb0e7ed03a7354ad806189ae64381d3b11a94f516f6d81b0c787d08b0f0aee4f0e917017ea5"]}}, diff --git a/txscript/data/taproot-ref/fa5f468e5077c7552905d4b235d938ba656a8956 b/txscript/data/taproot-ref/fa5f468e5077c7552905d4b235d938ba656a8956 new file mode 100644 index 0000000000..c386df7ddc --- /dev/null +++ b/txscript/data/taproot-ref/fa5f468e5077c7552905d4b235d938ba656a8956 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf21000000004676830d8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41702000000bbb7591260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707600000000094760f703733ebe000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc56f0646", "prevouts": ["044877000000000017a914b1a54d09172ecbb89289f2a670acc3fe14ced9ee87", "4656390000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512", "ea96100000000000225120c72d052844e54654bf1b4ba7d482e0a32ceacfdb2b793a896c2e00e5d00b606a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "ac7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e32d0ccdc2029b00ec7048abf887bee187f4acce1681536a58b887d4e93139fe875006811b549bdf6e8160f30212dc3199b386e615ec459cd6a9a101291e049b6126490c72a5b15e8927e2896ebf8102d665fc08f8a92e888d3aee8fbb5026d2b"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e6183f419ce491b450889838cb0d7f10895831b7ec092cc5b3df9912c86be24377e3df24c23560dc7d916d43eb4e055d70ba52495a1ba5531ef20ccccb2bc5f4126490c72a5b15e8927e2896ebf8102d665fc08f8a92e888d3aee8fbb5026d2b"]}}, diff --git a/txscript/data/taproot-ref/fa6ab5df5a5d808c4d736244d69510fa6e17f904 b/txscript/data/taproot-ref/fa6ab5df5a5d808c4d736244d69510fa6e17f904 new file mode 100644 index 0000000000..6c515f88f7 --- /dev/null +++ b/txscript/data/taproot-ref/fa6ab5df5a5d808c4d736244d69510fa6e17f904 @@ -0,0 +1 @@ +{"tx": "671d5a89028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46a000000006a1175f18bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c41701000000b71cd6f70163c15100000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac85010000", "prevouts": ["96443e00000000002251205c592164d59d166201a2e20d3b054756549dd213ab6179e4cd71f1fda3a90111", "82ac3200000000002251207a2f20e860cda556c5e91362c7f67d77fa79d70cce9558dd8fd8d88940237552"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/return", "success": {"scriptSig": "", "witness": ["6ad7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045908709641cf32dc4788f906f7e3621a0528df09509ddf1e9982e4479aa4b5d9a2d50ee9aa3de1fe988255b0d8b9f34dc2cecc4a96432b9f704e90359a06b468476e3192190387ccfa53649887be3b08a6a0e7169a64b02c3bbfb054cf523373b"]}, "failure": {"scriptSig": "", "witness": ["6a61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ea06acabd314b946ab482c02917c0ab57ee7a12ea5d3f66acc20e49152ededa94c1a4ef98c473095d2df256e4c96a081ff076f8ed25b9a6c5f4dacfc5de1b1d157a61376c510bdd1fc860151a3b261939fa407ec1a2d0490cf2efc4278abc783"]}}, diff --git a/txscript/data/taproot-ref/fa7d0a81564418a5df2eae24548c51be6486a4aa b/txscript/data/taproot-ref/fa7d0a81564418a5df2eae24548c51be6486a4aa new file mode 100644 index 0000000000..9d0c25808c --- /dev/null +++ b/txscript/data/taproot-ref/fa7d0a81564418a5df2eae24548c51be6486a4aa @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912700001000000f3c0e6a660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707d0100000038f3cdae03080d1e000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f875802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc63000000", "prevouts": ["aeae0e00000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "dbf0110000000000225120c5b78d1c72b60a56d77dd9836e8bbc3efbf1d0cca20448403458031ceee22a71"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "087d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b67972f0806ad83b266cea94fe60bccfb9dd1aa3e3a25c977f11b54b402f72177a9c5848e7797e88ab157cf3f92cb1e084ad7139395a6330a6d0efe4ec0158f0520a79ac573d08fada6e0a495a70546abebfe2eb256837e38d30334686ccae33"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93641c9464980f97737135f85384f09f0e2a54d854eba07e7e38719fe827040e76bbc0204111bf7e5d13e3ecd3b1c8f71c6ecf5827e1a757374a2d5a102d95777fd392ef61cba24ca089522adfb015944d93e6e298b3bdb8572d6b7e61874c3a207520a79ac573d08fada6e0a495a70546abebfe2eb256837e38d30334686ccae33"]}}, diff --git a/txscript/data/taproot-ref/fa862d772ea0c551e8a2b2e955c3a314343a9249 b/txscript/data/taproot-ref/fa862d772ea0c551e8a2b2e955c3a314343a9249 new file mode 100644 index 0000000000..27c7d5967f --- /dev/null +++ b/txscript/data/taproot-ref/fa862d772ea0c551e8a2b2e955c3a314343a9249 @@ -0,0 +1 @@ +{"tx": "ec16b2e503bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf71010000001e2984c9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cff01000000d37921d6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b9d010000006e9e6c8f0155bb16000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8796000000", "prevouts": ["55bd6700000000002251201b1a5025b4fe9992b0e02773e7f35e6be2fc0ec95e56c0e62f01a84c1b9caac2", "4966600000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "2317250000000000225120103e7c2917eb37935b19ad951dd63925690af67710d97c5b32ba23098190dae6"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "4a7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364758c64267c751cdb3a7d0ad4e97f82b7320c0de5dc96a77478bcc9a1aac62dfb1956d2c402f72d86d9128969f4c9ed8db93dfb826b4075483e7d557b0e234b512efaba1d06903f148d2465ca4e4c6639d336576fa6993c6ca48823372648a44"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e696e0a39b8006d5c38246735bc900624bc412e796f8d634640137370e1472505749e2a390543356cdb3691ba8d54627dfb45f7f1132e94c1a4e909f84f1614c2"]}}, diff --git a/txscript/data/taproot-ref/fa8814b8ee8c8c0b59933c5df3e62bc70882f43c b/txscript/data/taproot-ref/fa8814b8ee8c8c0b59933c5df3e62bc70882f43c new file mode 100644 index 0000000000..38935df6da --- /dev/null +++ b/txscript/data/taproot-ref/fa8814b8ee8c8c0b59933c5df3e62bc70882f43c @@ -0,0 +1 @@ +{"tx": "ea6657fb02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7c000000006ca5e1b2dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c82010000009c4ddacd0182ae3b000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487178c3054", "prevouts": ["08b54b000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "d0105400000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000098", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b221c730e6687b91edd1d82ce458a1670f1f5c408c9b3edae12af622fd1823f6afd27be809d0458ddf0db95e5817368170188425ca115f37ef512065bd7b173a4b5563559956b4521d685614895115ff3b761ab3fb4dd1d8def3bf310bb092b594c58b1e468d5c742a8cec262986ad36b584a802070024df25b549bdc05f9a8a"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9365a5f4ba5a5870b42b6e90a30a8f8a9ba693ad2a3207303cea806cfbc5b598730390e5640971602922d6b073671c4e08980ecd1f17d1da07e150f68606efdd1f96e2c0067d6235544c969c57bb6383bc4dfe8083fe3443e336f29d85bd1c9f087"]}}, diff --git a/txscript/data/taproot-ref/fa90b9f27b4ef61835f27c23a72f15ab0bc2f8d4 b/txscript/data/taproot-ref/fa90b9f27b4ef61835f27c23a72f15ab0bc2f8d4 new file mode 100644 index 0000000000..fb525716e6 --- /dev/null +++ b/txscript/data/taproot-ref/fa90b9f27b4ef61835f27c23a72f15ab0bc2f8d4 @@ -0,0 +1 @@ +{"tx": "7647552a02dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfc01000000b71eb1cb8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c489010000005bb7d7a804ae458a00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac4dab3f4e", "prevouts": ["3c0e530000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "85f03900000000002251201e1e43c91fff99f096580082345e8b6c592108fedec9f6a82472097138f3a147"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_af", "final": true, "success": {"scriptSig": "", "witness": ["772396c83c3adfdfb4159e115ccd019751496615d9a86bf5ed75f0f6f6782ed43c6b3366d510c7b7b429087032f6518a4e40277126ab74c18e274e7fd89b97be01"]}, "failure": {"scriptSig": "", "witness": ["7e3b230549998be0e83e84993439922c5871fa7e8d0fca56b406287a8b167be462f1067da339b2298cc161acc2659ee0dccf2944fc0991a82004fc5323f4bf44af"]}}, diff --git a/txscript/data/taproot-ref/fab23300d1e8e0ac77217a22517738b6de5afead b/txscript/data/taproot-ref/fab23300d1e8e0ac77217a22517738b6de5afead new file mode 100644 index 0000000000..5a5e7484ba --- /dev/null +++ b/txscript/data/taproot-ref/fab23300d1e8e0ac77217a22517738b6de5afead @@ -0,0 +1 @@ +{"tx": "02000000018bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4380100000066bbaa8b02fe733a00000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875bc22d35", "prevouts": ["2d6e3c00000000002251203066114b40f5bd33eccc7991d35f41784b4d14ee4746b37c559802b9f69c1e67"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["cf4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936576dcfbd45e3fc8427f121d4200b68bae14bb12011fb1b2bbae78ffacf19fef2e4a15251ce914d64550800735eadc470245b559e7958aa5fe88058750f8ecc0decf70b79dd1be85a38988f8929e7263abb01bba95965800009381ed351eddb0fa653bf1dd2d82b0dcbd644d98f066b9fc3e48690fe18b2084515352f558033ba"]}, "failure": {"scriptSig": "", "witness": ["4c52cf", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045cf32df52f44331c723f7b513b476c9aa41e2dab3be9ace9864b6dc0f919492d46a7a52674f359a7dbed67a49e09732132053a9cde77eaa564fdce3cafe7738b9f4a62e14d7fc4acbfb0196ec29a60565ac2b3043dda4cedec8cb1ff291b90d41"]}}, diff --git a/txscript/data/taproot-ref/fac25d9ab05e1c85b45aa41798674daebf462237 b/txscript/data/taproot-ref/fac25d9ab05e1c85b45aa41798674daebf462237 new file mode 100644 index 0000000000..2547e36dd6 --- /dev/null +++ b/txscript/data/taproot-ref/fac25d9ab05e1c85b45aa41798674daebf462237 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e900000000852477de60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912704301000000434e8635dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bab01000000ef552e5e0380634000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875e020000", "prevouts": ["f4eb1000000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8", "4b251000000000002251206c72b3037c076bc24cb037d18e3d205b716c1618de062091033c827bbd6cacd2", "e5f4200000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "047d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4d71d423df8d84b17d708d44fb85f057f10e7a19067ae82c5093f6b2e5d73dc0d3ad511cf44769b6705694216a5b431b28318b130ebf832e7f6887216fa315d1a343680beaae3fbea53ecc49afe7cbe880992a117d636f336d7d159be7b446d"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c98631dd6d757e946b35f133dbe1fc758574142a05432a88a9c9ab5699e20b5a3af26a389e120e94680e27477caee46163f2ffed4e6499d7dcb61a15b1d76a7c8460181b685601280cbfaae0e90478ea5ae6fea73a2d03f5a79a14a3e0c6d503"]}}, diff --git a/txscript/data/taproot-ref/fad3ceab7d42e3ad2e07e8e88420e42ecf4dd0b8 b/txscript/data/taproot-ref/fad3ceab7d42e3ad2e07e8e88420e42ecf4dd0b8 new file mode 100644 index 0000000000..aa8ee08c51 --- /dev/null +++ b/txscript/data/taproot-ref/fad3ceab7d42e3ad2e07e8e88420e42ecf4dd0b8 @@ -0,0 +1 @@ +{"tx": "020000000206f5bd527bde63f7c45daff54c390a64a59dabeafc8078a9bd0a050f54db6b44000000000096e4218fd15657a619affff084fc6b1bc2cdf5e85e399bb207d84ace710aa8effb82232f0100000000d0187eb30492422a51220000001600146d764276c66fec1127e5074db5bff3aa6c5255335802000000000000160014a4c1279efe108bfac1a01a2fe5d5c45b8fa18363580200000000000017a9143f5d8a006e43f5509420a4ea1e0b36ae11579f4487580200000000000017a9143f5d8a006e43f5509420a4ea1e0b36ae11579f4487a529293a", "prevouts": ["22cbf72c10000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664", "ddc7342412000000225120b3c1b5eb7ad8055b17188a846c986bb22e20c96017f7532122d5f2784100a664"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "inactive/scriptpath_valid_unkleaf", "success": {"scriptSig": "", "witness": ["927f78d725339a9988bb82916001c2fe87cdbe2f22625c6e57a38b67b3a1e9cec429468441f91a498d977c0cfbb981493a854cadfbe774133a9c0875c07d3d79", "20159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717ac", "c2159f9373f8b28a67627a464ae370e1e712479726144a1a48958863033f16f717c320986550a60a376b2d6a26894b932a0140931c95b78be03572545c726a283e7902b78fc59ae74800241e9b7a2e0578a35ace37791478c3e04a51e81e708c61"]}}, diff --git a/txscript/data/taproot-ref/fae57409d88f4b4a8521c3bbd0560991c2a8986b b/txscript/data/taproot-ref/fae57409d88f4b4a8521c3bbd0560991c2a8986b new file mode 100644 index 0000000000..ccde46a8f7 --- /dev/null +++ b/txscript/data/taproot-ref/fae57409d88f4b4a8521c3bbd0560991c2a8986b @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a901000000929372e9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c190100000046ba7ae502e2b28d00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748795000000", "prevouts": ["d018370000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "22c3580000000000225120dd69e0acb4456a75559641628e54f237a5bfa27624d5103e01688d193a4ffbc6"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_7d", "final": true, "success": {"scriptSig": "", "witness": ["9b6b0b5e56df64ced40030513c996573d84ba715e04642611b2663e910925c6f4bb9811b7d90c53f38bd997d37193d541ba12fafe02ca029d260cea17267e6b202", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["718f09d59653ff2e9def5e1d294c31803d32b6394e8a400a74d6f2d4e1f94ded7e19d26d48aa2bf80c27192453c89a8f9f490c588c5d2c871cc988da5c3352297d", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fb0c60f40b98f2127746a9a359165bc8d41dcb8c b/txscript/data/taproot-ref/fb0c60f40b98f2127746a9a359165bc8d41dcb8c new file mode 100644 index 0000000000..6b1e736834 --- /dev/null +++ b/txscript/data/taproot-ref/fb0c60f40b98f2127746a9a359165bc8d41dcb8c @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cb00000000e2137298bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4b010000003490f9c1dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5901000000e9b952fd0237c4c2000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000017a914719f78084af863e000acd618ba76df97972236898757020000", "prevouts": ["30081100000000002251204ebf7559d8ece5a24eb4557ad9651ea9e540f660a3b9ceeb85b1a057c0cbe335", "bc186b00000000002251204ae1ababcab221c9b79fd61156e6b377c6d7a0004ca7d6810cc3f2d6a7149040", "22bd48000000000022512095cedeef0cb7aea3c0bd06d7fb572f0efff66b1d28013a778af1acfd69604efe"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "937d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71ef65737139d8cb51b826e6105ecbce8352aa10f0d50686f2268ca6d7900ff7d4462d371a9b01f30ea116c30e8195d2d6eb7c97c8692c0c95de95a904f83b96ad4"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e88b73eb14a8afa044a1a6f0495df635bb2745ae30a5fce84d6222f661b17136fd6f60e166ab3c31d6fe53c0e4c47c333102fdf48f7428a1dab907384d3ec09a32"]}}, diff --git a/txscript/data/taproot-ref/fb18611c9ee4a416896469762bdeb28572310087 b/txscript/data/taproot-ref/fb18611c9ee4a416896469762bdeb28572310087 new file mode 100644 index 0000000000..305f81baa0 --- /dev/null +++ b/txscript/data/taproot-ref/fb18611c9ee4a416896469762bdeb28572310087 @@ -0,0 +1 @@ +{"tx": "020000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703300000000690e42c28bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c42102000000816bc2b260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270f701000000b4d361eb03c83c6000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcad010000", "prevouts": ["3f56100000000000225120b874b1e22d211de93cb73e099e487e9eba0bad15702159b3571f2da29e9ccdb9", "e9274300000000002251201d9d7b8068d804e3524a88462f1a480f3f4200cc7b90f0ee3c3216cc2f53f488", "35100f0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_6", "final": true, "success": {"scriptSig": "", "witness": ["8c7b47569d187d9fb6d3209bddb5ab3e7bcbd6ffeb3a8b88b82ec3df5e38f5ce3014d70ff93e31690e6e7a9cd0991db7a6ae4548fca0e4395b82d91cc67f4a0782", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["7bc8cc7487cf84f6a0956d7c87b1d000eb1bd650ce6c4f9ee0974ef72428586e3fd1c4c2da9533a80705c394d952ff6decaa6e5f40b16875e0d6d9aa287a03c606", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fb193ee81245f14d9b19cacbf56cbcb01dec02be b/txscript/data/taproot-ref/fb193ee81245f14d9b19cacbf56cbcb01dec02be new file mode 100644 index 0000000000..7c47457789 --- /dev/null +++ b/txscript/data/taproot-ref/fb193ee81245f14d9b19cacbf56cbcb01dec02be @@ -0,0 +1 @@ +{"tx": "4c754ce802dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c9700000000926720a3dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c80010000001f7d298004572a9800000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87b7128437", "prevouts": ["effc4c0000000000225120e181fd7d5a5189f175c5e112edc7401a8c528393c340dac4325961e6f48db1a9", "631e4d0000000000225120a283e1ea0142d34d03fade4b28902cd262d82bab6ae3891658a9596d967dbc43"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "617d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e460f3bb33adb38a0b939502b6e7259f92f13a6469935cb372eb38500268af6f1b0e931380661372836164f4a50b3ffb46f1fe83bc177b7c1bf309591800c178bdd304186c0a2faa80f59261766b0cb9b0760b78eb1f31f166a6f091ab62e6898"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9362d1264c87f4fd59154372454f3974cb0401499307bfe3672aaf1c84c6b5643ec460f3bb33adb38a0b939502b6e7259f92f13a6469935cb372eb38500268af6f1b0e931380661372836164f4a50b3ffb46f1fe83bc177b7c1bf309591800c178bdd304186c0a2faa80f59261766b0cb9b0760b78eb1f31f166a6f091ab62e6898"]}}, diff --git a/txscript/data/taproot-ref/fb3a40b01dd182dc32fd94d86be6aeec9cfda7dc b/txscript/data/taproot-ref/fb3a40b01dd182dc32fd94d86be6aeec9cfda7dc new file mode 100644 index 0000000000..b43f08c3d8 --- /dev/null +++ b/txscript/data/taproot-ref/fb3a40b01dd182dc32fd94d86be6aeec9cfda7dc @@ -0,0 +1 @@ +{"tx": "1addd65a01dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c6d01000000c90a7298021f0149000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88aca6000000", "prevouts": ["4bb74b0000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "147d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ab0e9d9a4858a0e69605fe9c5a42d739fbe26fa79650e7074f462b02645f7ea7d9d0ef68974064b15682d7a9aede6e3fda6769a3db9d22f26322e1baaf4532e568dbaf979cca58396dcf271ee6fc736edd00965a3b0ecce9c87347ff88ab08a"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ab120007c9d6e5438fb32187fc2295f6e0f6d7a9b61cc04930744a089d58d965ad1099cc9bb3a5e2066786e30d0fff4359b3ce527e140b44a0b5c89c6b4383919a07a456edaef7c148906e899606040bd539df7c8cc4ad6955d406f95fd3100efb63111b06c7a0ce3f44d9f6906db8fc60057b72694cfd58ed25db88d188e5fc"]}}, diff --git a/txscript/data/taproot-ref/fb3feed4650211ed4fd84c29e022288219979e4a b/txscript/data/taproot-ref/fb3feed4650211ed4fd84c29e022288219979e4a new file mode 100644 index 0000000000..c6808f089b --- /dev/null +++ b/txscript/data/taproot-ref/fb3feed4650211ed4fd84c29e022288219979e4a @@ -0,0 +1 @@ +{"tx": "020000000160f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b401000000391043c902e2fa0d00000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478776010000", "prevouts": ["1591100000000000225120703a27ee37b547411791bd0e189100b9b1aab12509c8c95d384d172c3abbca5e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["bd4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f8a7004a68fdc05e100340c712f74a3d62667ca0b5d0eafc5e716949571fe18725432b67bf7a212872373c5ea5ac6512ad650fe3d5c26e1d584bcbdba0083b9a9e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93617cd6ee4f8b94dcd19f57a756bcb8a90fe2911c96cfd4cc653cd06b0f9d9556a5bc79ec207f4553f17b4d8afbf0e47b02e8cf3ab2b0172732171fcb0f92ff87125432b67bf7a212872373c5ea5ac6512ad650fe3d5c26e1d584bcbdba0083b9a9e9ba325ae7de51b47d98058ae5f9889bb6f52223c96865cd06dfd05531cc8a0"]}}, diff --git a/txscript/data/taproot-ref/fb47b82833fbb82a6a9844bcfa75012bfc49c9cf b/txscript/data/taproot-ref/fb47b82833fbb82a6a9844bcfa75012bfc49c9cf new file mode 100644 index 0000000000..5b49a991e0 --- /dev/null +++ b/txscript/data/taproot-ref/fb47b82833fbb82a6a9844bcfa75012bfc49c9cf @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bc9010000008d41693360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fe01000000b3acba1101460a090000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc89e64f5d", "prevouts": ["b00c260000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "90ae0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_7d", "final": true, "success": {"scriptSig": "", "witness": ["905259ed3a6600c70020cdb0b7411726f739bbd391413e8854b27206a8eeee859c2ceb63b692a5be63c475329c63dfd927d8be177fe715e97de4324edb0b240381"]}, "failure": {"scriptSig": "", "witness": ["625e61820c26157f79553e1b70a3a0f7e031893951c5b1a7f610ec9931a50b7d876d9e6986e773543d16a700b5fccbfb11ffa771e1e20157444aafecfe014b427d"]}}, diff --git a/txscript/data/taproot-ref/fb56305966435f548db004e141dd614dcb71150d b/txscript/data/taproot-ref/fb56305966435f548db004e141dd614dcb71150d new file mode 100644 index 0000000000..8deaff9e2c --- /dev/null +++ b/txscript/data/taproot-ref/fb56305966435f548db004e141dd614dcb71150d @@ -0,0 +1 @@ +{"tx": "020000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701602000000869bf9f460f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701402000000ab8972f801e82b1100000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac09010000", "prevouts": ["a0941100000000002251205fb82515a803bc66e22805d16c9967a9f99675502991462318dd4d89658b7382", "2266120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_4", "final": true, "success": {"scriptSig": "", "witness": ["c6d85fabb6cfea1892b3bc9dbed3194c971f18589af0585b597a745f07d3f63a1052b7ccb4b08be1505ead737f1870985337cd9f60c5f16d62a0c583a7dfa1ca", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["cc3dd89d7aa5a798699cd36c6630645657e8266ca54dda89aa335d7930a33605acfb27d771d8ecac702a66250281e9105b3968196010e0abb52dbf97879081c204", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fb6bbbb8192f592ebde7d1bb37924cade63c96c8 b/txscript/data/taproot-ref/fb6bbbb8192f592ebde7d1bb37924cade63c96c8 new file mode 100644 index 0000000000..f0299de841 --- /dev/null +++ b/txscript/data/taproot-ref/fb6bbbb8192f592ebde7d1bb37924cade63c96c8 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3500000000f75e818ddceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bdf01000000a0889ad4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b87010000002757f8a404a146990000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4875dfe903c", "prevouts": ["79b65900000000001976a914bb1edec93acb47abb0cd0078cfdb77063cd446c888ac", "221d220000000000225120086c5a8f8e6906e62f6d85a81f1ec942fa4d0768e046e2c41c1e8b8749778d7d", "80fb1e0000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063de68", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d7b27a3c30fa3f74fcb2fb63df4fd439cfb75b063c79b31cc96700ee0514110802b5f712fb146ffe69ff220cec8aeafe04d8a9d43d299b22043a34551aa1e56e09208a3d5cb0b20fec302022af702ea090b934668d0752a16a75cba2aae8c677"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936cdde2ff9e08044486741f25be80bacc73799296fd9f200381e6c31b1185faea4591d3592ddb0f56a18929886f1890713028f922113494349427ddaa1ea39184e02b5f712fb146ffe69ff220cec8aeafe04d8a9d43d299b22043a34551aa1e56e09208a3d5cb0b20fec302022af702ea090b934668d0752a16a75cba2aae8c677"]}}, diff --git a/txscript/data/taproot-ref/fb803c7f3034af611f6dd19c6cd55245f319dd86 b/txscript/data/taproot-ref/fb803c7f3034af611f6dd19c6cd55245f319dd86 new file mode 100644 index 0000000000..1847bc9e28 --- /dev/null +++ b/txscript/data/taproot-ref/fb803c7f3034af611f6dd19c6cd55245f319dd86 @@ -0,0 +1 @@ +{"tx": "9ca1b5ad038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c46400000000a64e37f060f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e001000000fa4a59c660f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912703701000000d0973dde03647656000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688acd90b845f", "prevouts": ["ae4139000000000021511f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "4d750e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "7465110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_10", "final": true, "success": {"scriptSig": "", "witness": ["3c098e408d58f71373567968cbca1b560e822ca3b24fcd98666b0c4d6a47f9e466c8a6d753121ed9497a6eda066ab59673423d343ae08f31966e5c6a5b84b8bc81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["34b2e9db76efd5bbce32a47f6a93610de3874fda52b060e6a7cfbedeaa76c85a7062626222eca22018b62b1ecaef7f9d85064b9c18dcf00a19a1fe7ebee5faaf10", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fb84f0eaf5bbab71df0de66b8e502f2e52604fac b/txscript/data/taproot-ref/fb84f0eaf5bbab71df0de66b8e502f2e52604fac new file mode 100644 index 0000000000..a1209a3d0f --- /dev/null +++ b/txscript/data/taproot-ref/fb84f0eaf5bbab71df0de66b8e502f2e52604fac @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cca01000000beed76a9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cfa01000000006e98b98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4b701000000b215db96035f51d900000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7f08c9e1f", "prevouts": ["f6c5510000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "2aaa4900000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "ab2940000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable", "success": {"scriptSig": "", "witness": ["c74c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93670b862a9e953c5158d35cb69a591b350b4931a459f6811c437cb72d14d86572024cf807c4b041deab506320299ff116921971164ef72b2742896e58a89a98f91cdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}, "failure": {"scriptSig": "", "witness": ["614c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d082aede7f6feac32430a03a6fb4ca18c03b66145006034584e3a19904465ea1e66424cf807c4b041deab506320299ff116921971164ef72b2742896e58a89a98f91cdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}}, diff --git a/txscript/data/taproot-ref/fb964d7fe5e195fa98766d8c4058c8258646e95a b/txscript/data/taproot-ref/fb964d7fe5e195fa98766d8c4058c8258646e95a new file mode 100644 index 0000000000..d9dce65251 --- /dev/null +++ b/txscript/data/taproot-ref/fb964d7fe5e195fa98766d8c4058c8258646e95a @@ -0,0 +1 @@ +{"tx": "f608de5102dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1c01000000234b88da8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4e200000000afc6ffcb04a1565700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7bcb4062d", "prevouts": ["be01210000000000225120d632d9c3807cee2f3b07918ef684335c8e7823a1a0eb476eaf46267e076b018f", "4c44380000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "147d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936f78d8e6fb6c853fdc672d488ae32f4e909f7a3793ceb1fbacf52fce604b8b07d7d9d0ef68974064b15682d7a9aede6e3fda6769a3db9d22f26322e1baaf4532e568dbaf979cca58396dcf271ee6fc736edd00965a3b0ecce9c87347ff88ab08a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936da584e7d32612381cf88edc1c02e28a296e807c16ad22f591ee113946e48a71e7a317a052512b66d9c0a593db192e28ab9b1379143982fc432aa6f278435f8ccfb63111b06c7a0ce3f44d9f6906db8fc60057b72694cfd58ed25db88d188e5fc"]}}, diff --git a/txscript/data/taproot-ref/fb9e6ec52fad74ca4a775818f110ba219adaadbb b/txscript/data/taproot-ref/fb9e6ec52fad74ca4a775818f110ba219adaadbb new file mode 100644 index 0000000000..bbb615ad7b --- /dev/null +++ b/txscript/data/taproot-ref/fb9e6ec52fad74ca4a775818f110ba219adaadbb @@ -0,0 +1 @@ +{"tx": "9a528aa802bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf76010000007a3820ef8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4a80000000038f526ba02ce2c980000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acd87ed42c", "prevouts": ["60e1680000000000232102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac", "5ef9310000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_79", "final": true, "success": {"scriptSig": "", "witness": ["47f6ec7e814a5acc4a2d30b2298879c35acbc0daa00962c7a9c41f87d614c802b3b0a55a51bea2d093bbe22be426d8f21eb878200b526824e44af1955ddfa4eb81"]}, "failure": {"scriptSig": "", "witness": ["001c07a63e03f4d4bf7b73fbf2f480044f0b54c11e24ad0c6ea4b00241ec5f85e91dfce4780a8d7f8e0cbbea0ee27f34426f89c017cb5a8faa515f91ed0890c779"]}}, diff --git a/txscript/data/taproot-ref/fba8bb171f6333a2f8f8099ed7061ca7507012bc b/txscript/data/taproot-ref/fba8bb171f6333a2f8f8099ed7061ca7507012bc new file mode 100644 index 0000000000..cf9eaa108a --- /dev/null +++ b/txscript/data/taproot-ref/fba8bb171f6333a2f8f8099ed7061ca7507012bc @@ -0,0 +1 @@ +{"tx": "2b467a1e03dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3d01000000139453f3dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b81000000002569e0acdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4c01000000b62770a0012fe80c0000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc33010000", "prevouts": ["8f265c000000000022512035205488698c55c3e7035f1484d2f513744eb9d8b6fb6f0df083f7669ef0bfda", "7d6a1f0000000000225120cae2bb06a958c067dd1208634cfec6f24075b217020915696a25607be87b4540", "d6c05300000000002251205e4247b509e7d8a6d6f324d155ac6817eba62ef7261a7c3067f7c871658806c5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364ad853b43a90b24cf1df821e2e638dfd9c14c3d8474f8af4a5aef1878bd54085"]}, "failure": {"scriptSig": "", "witness": ["6a53616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/fbae541afc8fd2842b660a15ba61db2dbd26dca5 b/txscript/data/taproot-ref/fbae541afc8fd2842b660a15ba61db2dbd26dca5 new file mode 100644 index 0000000000..69f10786a3 --- /dev/null +++ b/txscript/data/taproot-ref/fbae541afc8fd2842b660a15ba61db2dbd26dca5 @@ -0,0 +1 @@ +{"tx": "0200000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4901000000213507c5dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c5300000000f92f4bb6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf150100000091782beb0145d3670000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fcc4eafb2e", "prevouts": ["6e315000000000002251203d78fd2bb4b62ef0589e0f6d3292b9d4b4f73a96f936b719c8327103cb45d1ec", "96f25c0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "60086b0000000000225120f31e3a320eea15b969f8b18ed69a6dfb33cc054a2307ba2bd3877db1ef9fdc39"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_73", "final": true, "success": {"scriptSig": "", "witness": ["a0d981aa2f946ce124668f185fc5f8e7cc4b0dea59feceee0365603b1577a0e23ada5bb27e48debfa96504a531e975513e3eef10ea7ab753c817b2932d405b4d82"]}, "failure": {"scriptSig": "", "witness": ["968228efe5e280d21ca3d7c033c93d5da349f23d3120ccfc0c93c44228f536b2fd71ab923813d356412d93a515bc7fb8e0386238f9a898314cae0d7a5798925372"]}}, diff --git a/txscript/data/taproot-ref/fbd1df6484bc96485135c2b29c3b125355c62848 b/txscript/data/taproot-ref/fbd1df6484bc96485135c2b29c3b125355c62848 new file mode 100644 index 0000000000..c6f45a1130 --- /dev/null +++ b/txscript/data/taproot-ref/fbd1df6484bc96485135c2b29c3b125355c62848 @@ -0,0 +1 @@ +{"tx": "0100000003dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1a020000005f503664bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf3a01000000af22f6838bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45a01000000ec72071c0131d9410000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc7bf29061", "prevouts": ["8127570000000000225120679c204dddfbbd298129e4670a621c532ae6353c600a37c86662e442bb91ded5", "5719770000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4e193e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/hashtype0to1_keypath", "final": true, "success": {"scriptSig": "", "witness": ["0465f5807019e300f51eac08f5272990f1ca970cb0e1deaadf44250141d44de331a90434d535b49c339120ca7893dd5a3f879937e563104eace1e31ef490db52"]}, "failure": {"scriptSig": "", "witness": ["0465f5807019e300f51eac08f5272990f1ca970cb0e1deaadf44250141d44de331a90434d535b49c339120ca7893dd5a3f879937e563104eace1e31ef490db5201"]}}, diff --git a/txscript/data/taproot-ref/fbeb89304a55a7ab8a338b807ad02b8dd2ab9c28 b/txscript/data/taproot-ref/fbeb89304a55a7ab8a338b807ad02b8dd2ab9c28 new file mode 100644 index 0000000000..83f0a9803a --- /dev/null +++ b/txscript/data/taproot-ref/fbeb89304a55a7ab8a338b807ad02b8dd2ab9c28 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127072000000003a6d923adff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c2301000000ec825d2b0388966900000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc7a76d4227", "prevouts": ["e98711000000000022512009ca3b7467d9dea91d906b1b0e7a427b6496d4aab6be2799f71c47ade6ce7f57", "583e5a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d8", "final": true, "success": {"scriptSig": "", "witness": ["524beb9f61e89a1f59df769d68a1ccacfd26cab78398d52646483d8fdfa733a0b4571b776590cb1b8f43aacffd20be68473133a0c1a32d813e29b0889572d32e81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["c7785dcbb83d524a33cb932d8431188cc233d9c90416f996d3e19bfb5b8d9b45453906088269089c39c113b26a0464256b97f53da86a144d2d9647f908ffac72d8", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fc1908d2145aa6f1cf830f6aeb9bf24470454805 b/txscript/data/taproot-ref/fc1908d2145aa6f1cf830f6aeb9bf24470454805 new file mode 100644 index 0000000000..8e47ef4975 --- /dev/null +++ b/txscript/data/taproot-ref/fc1908d2145aa6f1cf830f6aeb9bf24470454805 @@ -0,0 +1 @@ +{"tx": "a16810340360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270320100000001d67dfb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912701a00000000ce8a8e9e8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40601000000d70e389401384e260000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79622030000", "prevouts": ["40320f00000000002251208fa17604bea1a2fa3728b697c38b10509b65e0ce8e421d974d98824035b3dbb8", "2701120000000000225d202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "41d2360000000000225120469b0d5af3b652b8630a1c8a749c6ca969e84c67dc08b1fae26a9cf0bb3b6587"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "", "witness": ["25ef58eb18e36d98d017aca2a5e61c3f3a073e2ce9fd7caaa909ebd761ca6f8f521440ee2c3e95cc0a6698708ea3a447ab3649da8ecf6d13d543db378c15f690", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/fc6ad6441d0d3ba1260efa94e68b4af0576bf63f b/txscript/data/taproot-ref/fc6ad6441d0d3ba1260efa94e68b4af0576bf63f new file mode 100644 index 0000000000..ba293501f5 --- /dev/null +++ b/txscript/data/taproot-ref/fc6ad6441d0d3ba1260efa94e68b4af0576bf63f @@ -0,0 +1 @@ +{"tx": "4431cfc6028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c40701000000be5f58b98bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bf000000000206778f03fb9a7700000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f871feb932f", "prevouts": ["fede3f000000000022512012b975b505febce3d90537f513ce86dc778c6aa76aa4c7c143b3b99f1662d22e", "5c57390000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_2", "final": true, "success": {"scriptSig": "", "witness": ["c98207f6e7e605a3700ebff3688f2b4769adf8b0d5ca1032dde96a951df98a8e0d478d3835bf3b542e9237d546024a898fc4cb8780c754bf7f55cc5d2d7ac8bb02"]}, "failure": {"scriptSig": "", "witness": ["f8f17060fc893a7aaa17959d793c734978e744c5b5293f0e109255a8bbf4939b85c1d02dc1af34a0497e2a4553d37d05c3750e735523ab90a49b3a0ce0aa252702"]}}, diff --git a/txscript/data/taproot-ref/fc6e7fbd1048ad4d4f9eadb18d79a7ddaddee244 b/txscript/data/taproot-ref/fc6e7fbd1048ad4d4f9eadb18d79a7ddaddee244 new file mode 100644 index 0000000000..d2222415cd --- /dev/null +++ b/txscript/data/taproot-ref/fc6e7fbd1048ad4d4f9eadb18d79a7ddaddee244 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfd6000000006b1f0cfb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270fe000000009f41f51201fadd4e00000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac43020000", "prevouts": ["70e7780000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "88ef0e0000000000225120eb71a13199b51ac9b0ace6bcee525494dad4a8780bc850f36224b177f5d9dc5a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "5e7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08259bd71c400ab2f54869740392a5675e37e70879689c9d1a6bcb33863a193d8cf0c8cbc16505271ed8ce1a03d67d2c4a35529bcf4a25ace24696315022c27c9cf"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93601f485ab8dab36fc4237cf32204629d23ab8b7a9b8c57b9fb58bb07cc298c65859bd71c400ab2f54869740392a5675e37e70879689c9d1a6bcb33863a193d8cf0c8cbc16505271ed8ce1a03d67d2c4a35529bcf4a25ace24696315022c27c9cf"]}}, diff --git a/txscript/data/taproot-ref/fc72b1ff88ff0bb9a8e7a27d860b1e727bc825b0 b/txscript/data/taproot-ref/fc72b1ff88ff0bb9a8e7a27d860b1e727bc825b0 new file mode 100644 index 0000000000..9239401d5b --- /dev/null +++ b/txscript/data/taproot-ref/fc72b1ff88ff0bb9a8e7a27d860b1e727bc825b0 @@ -0,0 +1 @@ +{"tx": "0100000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c13000000007dd53f9260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b5010000000b3d637101b5bf3d000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6d1010000", "prevouts": ["ba5b49000000000022512085bbaf732586004b91d5e29af7be3965e4cbd4294c3dd4aad30280f6dcbe0145", "a090120000000000225120473417efae73fd5e93fcc212950b9b19ee652cc977c17e6edd4b3172c741ca78"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "217d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa9505bf473a3597e826ed191951239b12c364d282b43e59333c5c9d2effa4a8821a54b706cb1ffe8cdd8302265f43043d8c7f0cfca18957505a6e0d7d2690f95c84bdfafc9427bbc75e549436fc0749ee4f6acf063a9661c81b3024fc653ae79a"]}, "failure": {"scriptSig": "", "witness": ["6a", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936612f59f79f08a8dcd41fba0e90fc36d30e7d0e0028aa30a51161912fee70ec039505bf473a3597e826ed191951239b12c364d282b43e59333c5c9d2effa4a8821a54b706cb1ffe8cdd8302265f43043d8c7f0cfca18957505a6e0d7d2690f95c84bdfafc9427bbc75e549436fc0749ee4f6acf063a9661c81b3024fc653ae79a"]}}, diff --git a/txscript/data/taproot-ref/fc833899bb452572fe6f3e84efd6737cca4eb786 b/txscript/data/taproot-ref/fc833899bb452572fe6f3e84efd6737cca4eb786 new file mode 100644 index 0000000000..be3abe6fd3 --- /dev/null +++ b/txscript/data/taproot-ref/fc833899bb452572fe6f3e84efd6737cca4eb786 @@ -0,0 +1 @@ +{"tx": "1aeda83f03bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf9900000000a9e71ddadff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c1601000000c1e722ec8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4bb01000000a0e9adf902bb0efd000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88acdf000000", "prevouts": ["6cae7f0000000000225120ac005ce4773d3aee0620b129ba36f72cd2ee645537f63f3488482809f788413d", "02fc470000000000225120cdee1b260cf2a57b2a4f41467ca1d526e01a2fabdcb63f8ae4942bbd063c3ae7", "ca9e3700000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b81e5f8184480151a33ea2ef90622481c324d5b0da017369a2ae7e89125987bb4ecdbff3eecb3f5fa90fd3ed1bb4a8c0c36fc15f71a4102bd4f372c5f95e5c7d5941b26b476c022edf868776977d31e53e85212ba204fe552062798c457a392dc1a6e987e7baaf45cc4656191a1a193c7abe05aba02d24b24cf2747f96e1d33b"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363cfa0f25e80db82d1df7d31067deb7f7ffba540dee916ca5c0f9f286a347a1270ec0b51bfc4485592d1a8fc32a0105404420a8dd2ba09b048dd208f3df546c127e5a3ad1358e4c8217aebfca59af3ae3bc6dd2d33fcb7e66f52e86370eeb61bbcdb1729650f5e7315a74782ce14a5f1169946bc7ff3758bb098f0ad0a25b2b7f"]}}, diff --git a/txscript/data/taproot-ref/fc9c2ac36745e20f981008bf5f85f146b9c9dbb1 b/txscript/data/taproot-ref/fc9c2ac36745e20f981008bf5f85f146b9c9dbb1 new file mode 100644 index 0000000000..76b23bca87 --- /dev/null +++ b/txscript/data/taproot-ref/fc9c2ac36745e20f981008bf5f85f146b9c9dbb1 @@ -0,0 +1 @@ +{"tx": "0100000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b440100000090a859b3bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf91010000003771e53e030b83950000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87d8030000", "prevouts": ["0817280000000000225120325bb8bd692aa21257fa568f0567c628c6e8ab7924eed74b5d76df030defb001", "86656f0000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/bare", "success": {"scriptSig": "", "witness": ["62", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d8b553b0a6fa8101b21fae89df5dd09b18d30a3ef06025a3f9cb6b07028f8b60ad339194ab8214f981edb9ff4477fbcef7a6ea6cf7b4eddf16a8a4e2aa6ff5b2a28c39ce330a19a0d6c22ddc640bc3609271e6194de475fecd1ad84a88d361935a9a81b6bc4d13af192f1d19d1915de95ad8d42e49add8bb4e9a9400ca460b05"]}, "failure": {"scriptSig": "", "witness": ["61", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93608efc3524da3cce9064a39cd829c421044a59a48c5000df9ec45b645663b2d3865d6469ded31e8361d538153e3993104db0c9d480dfc3dcfe9dd6d2fbda5f8f6abc42ab3738335b78a2a7135de763706b017ef32cb75bc24ca1210f74f6e5b7b3fd119d5a804161d41189f11d8f3e11243ae602674c5e73f1686492aa1f485fe"]}}, diff --git a/txscript/data/taproot-ref/fcc3f72c08a026d3c0f4cc50227793a26fc3efeb b/txscript/data/taproot-ref/fcc3f72c08a026d3c0f4cc50227793a26fc3efeb new file mode 100644 index 0000000000..84d87d5d4a --- /dev/null +++ b/txscript/data/taproot-ref/fcc3f72c08a026d3c0f4cc50227793a26fc3efeb @@ -0,0 +1 @@ +{"tx": "acbf9f810260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270cc000000000eb572d4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b920100000084c9bc8602e0ab2e000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388acb0633037", "prevouts": ["2dff0e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "f34f210000000000225120eec26bd33d4c7b88cfedb1ec4d1edaf2070bd273924a77ba1006105de9dd5258"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_48", "final": true, "success": {"scriptSig": "", "witness": ["154f4a7affa81c867d749fd1b19a4a69ce000dee1ca40bf935972f02c3a587f28d6b11986c09b73e0714491915a3b082f28a89c3b5450194ccde0964e2936e0881"]}, "failure": {"scriptSig": "", "witness": ["d5d3799e272d242fb0a696ce31aab9ada4d1feda51a108c8e0dcee97b7917d1dfe24f37583dadebde02c01505e0189d8f4f46bd1d9ca2a252209746171faf17d48"]}}, diff --git a/txscript/data/taproot-ref/fcd03d953e3452f116e4035d2029de953e62334d b/txscript/data/taproot-ref/fcd03d953e3452f116e4035d2029de953e62334d new file mode 100644 index 0000000000..429aee637d --- /dev/null +++ b/txscript/data/taproot-ref/fcd03d953e3452f116e4035d2029de953e62334d @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a900000000bab6199360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912702000000000ac5597b703f23b1c000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48752d1432e", "prevouts": ["fa6510000000000022512066e06b662ecb6981e0f3917eb0b6248b84ec5cd53a7a521c7d24c865c53918b4", "febe0e0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "907d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936a54b43c188a8877a2a3a86a1fc429fffab130c683e7f6d5ea2708892288e828358fa50c6d7a3057541347f50382af7d86a4158110d747d8a87c6e51bda235e7807d6dd053b835b300872a79bbaa392d17bbe19548a92a63c5948e9fc7e63dbc8"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361773499d4b7734b9d17b8063bb26023932d8136237a2a4376fdf258dbd3041e4ccc0d92396a6e5b4e10ed573234ead163b054b024f08ace7ccde70990779f457ba4f11ff80ca9181e3d85997fa959accb8f97af45a52bfd0df916797673441f5"]}}, diff --git a/txscript/data/taproot-ref/fcd91aa7ad2c0011f8f2516f5687f9e91aa76b71 b/txscript/data/taproot-ref/fcd91aa7ad2c0011f8f2516f5687f9e91aa76b71 new file mode 100644 index 0000000000..81241ed856 --- /dev/null +++ b/txscript/data/taproot-ref/fcd91aa7ad2c0011f8f2516f5687f9e91aa76b71 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b550000000085442cebdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8301000000993071c6049f014a0000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487580200000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f87c8000000", "prevouts": ["9ec324000000000017a914f5a65ca4534ef3ca5833434c0dd44a3e128f499587", "f67527000000000022512068810aef011b819679577c24f008f8785d9903d2c43eb118d09024962a03144e"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/scriptpath", "success": {"scriptSig": "2259202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["715c4c8f8e8b3ed1787fc9df753dd65839bbb5842ed20e1c32139ea87d240b5694bd3b9318237b306aacb4ddd25830c6ea683312f30219e2522c1694eb888217", "207d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ac", "c0871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e2046c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa"]}}, diff --git a/txscript/data/taproot-ref/fcda2ec36cb7652d368098a0c2ac64665164601f b/txscript/data/taproot-ref/fcda2ec36cb7652d368098a0c2ac64665164601f new file mode 100644 index 0000000000..df8b0f4333 --- /dev/null +++ b/txscript/data/taproot-ref/fcda2ec36cb7652d368098a0c2ac64665164601f @@ -0,0 +1 @@ +{"tx": "4817304a02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8b0100000004f694a9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7b01000000216ddf84044aeae6000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6fe1c4f2f", "prevouts": ["c95b7a0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "d8d96e0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_2c", "final": true, "success": {"scriptSig": "", "witness": ["e860e3cdae548610f7dad2b1a4136b1635e0bb85a0f9315b93d16ad48e40c7f773241ce115d1663ab5c4746630764df389f967dce8621e24a38532460c94abe981", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["ebfce58453b0036ebb933e6816f5aac009ddf80d14115ebf6664464fc5e31f36a92fcc6c7ab2c8b3f6891f5f4deea77b318bd6deaf59ba2d0172089d4de347fb2c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fd03276208dbd6219a958f47d888d22fa303e89e b/txscript/data/taproot-ref/fd03276208dbd6219a958f47d888d22fa303e89e new file mode 100644 index 0000000000..6e7dc0fd0d --- /dev/null +++ b/txscript/data/taproot-ref/fd03276208dbd6219a958f47d888d22fa303e89e @@ -0,0 +1 @@ +{"tx": "28a354820260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270ff00000000be3b46b4dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1a020000000e78c7d001ff502400000000001600149d38710eb90e420b159c7a9263994c88e6810bc79c000000", "prevouts": ["1ea6100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9e2f22000000000022512061049d3bf8d8628387c6dd15fd6aa94597135d2428743d9f5049ba6d570084f3"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_3c", "final": true, "success": {"scriptSig": "", "witness": ["42740861859d08047fed4c9e32fdcfe049ac0cbd2db6bb0a9647b99dee8028c3ac59a5800d0796927a475ffd468cc0311b86e0034313f57941102410c85720bf01", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["711608cd1a51181983c5fe9bbe7491c3a0cb0daea2b35bfde8ac0b6a5f52f7d377ac459d82ecfa93a62be7244c55ac45b75bb94dc86c6f30dca7dd609bfe485f3c", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fd14286e8c496b3f62dea79de42d57a7b02b22fc b/txscript/data/taproot-ref/fd14286e8c496b3f62dea79de42d57a7b02b22fc new file mode 100644 index 0000000000..827d558b99 --- /dev/null +++ b/txscript/data/taproot-ref/fd14286e8c496b3f62dea79de42d57a7b02b22fc @@ -0,0 +1 @@ +{"tx": "e0ed141303dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b93000000001fcf05f6dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b7a0100000091bd69b9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfc8000000009a4857d5047746c200000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa93083937487bf000000", "prevouts": ["bec22800000000002251207e677ee6e0a9f5a7b76d32fc490de736680fedcc1b5666802b0cdd6035d1f989", "73802000000000002251208e3aff7c578d941c4c0ef50f0a58a5ae91118406955ace5ac0e7cb917f87f0e8", "8c967a00000000002251208560e60ff9f5f50e17abe0faa94b8704db3bcecc7cb6f74a11a752b4bbc814f5"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/bare", "success": {"scriptSig": "", "witness": ["61", "967d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e889b1afbd82754ccbdb229e33ad6472305abc54dae2fa9ac3a68b58b93ca8c8390ad15d5ff3e747c4643a2e7779e2cae74c1db700bc0de7d47935e7ffa6ea968f"]}, "failure": {"scriptSig": "", "witness": ["61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936393d3666f153f5444bbde9f12a33ca18bffeb96af6c3b3812e1be180585532ecbf86d7708a8015fd8c392d5dfda539be3c55b3d42b83ba5bec57bef080407e280ad15d5ff3e747c4643a2e7779e2cae74c1db700bc0de7d47935e7ffa6ea968f"]}}, diff --git a/txscript/data/taproot-ref/fd1a057fd69f2113eeeafc133d9d51c7cded9125 b/txscript/data/taproot-ref/fd1a057fd69f2113eeeafc133d9d51c7cded9125 new file mode 100644 index 0000000000..53b3298c25 --- /dev/null +++ b/txscript/data/taproot-ref/fd1a057fd69f2113eeeafc133d9d51c7cded9125 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270c700000000f132150a60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270af000000009c88c48704e0582000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc5802000000000000160014deb4696df95e4685eae8f9ff2e77fc7edabbe2fc580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374876daaae5e", "prevouts": ["e225100000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "19be1100000000002251204e92f58f07bd1c983dce937cb6ff2655b495f5bbe642bc389d13f2d55749a90b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "a87d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936783a3bc7d79cabcbcc0867fb5538daddb7c00a7193bf5b1437e698397aa24b0d5480c0b3df47fa838c1e54894d9f77b7e2e8bb4e3c514b095e8a55995fa5d8569e26d26d9f798657ab1642d8194f1f5dc9158412142f65824f82701f20125ac7"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936438d090c2a648f11c3897ecefe41fdc11118ed9b1c4529cbb2ee4038fc727b19159738ff2c4f90cd16c07bb852218b8a19eccf086ed61d505eed94e2770983c2cd165f299bdaaa06ccf8947d9b12e815a5b39fc50068532880492a3446c423d89e26d26d9f798657ab1642d8194f1f5dc9158412142f65824f82701f20125ac7"]}}, diff --git a/txscript/data/taproot-ref/fd1c6cdb67bcc23e0920c0b2724591695d7e88b1 b/txscript/data/taproot-ref/fd1c6cdb67bcc23e0920c0b2724591695d7e88b1 new file mode 100644 index 0000000000..5e9f806f35 --- /dev/null +++ b/txscript/data/taproot-ref/fd1c6cdb67bcc23e0920c0b2724591695d7e88b1 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c491000000007392a7f260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912707500000000579abf8d03798c4b000000000017a914719f78084af863e000acd618ba76df979722368987580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e4876b000000", "prevouts": ["f7dc3e000000000021581f2540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b", "ee930f000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pkh-sighashflip", "final": true, "success": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["30450221008e336def7ebe3e190b6ca7af316f7560a09ac6567f419ac68fe49abf806ff95a02200e9c0495f41c9ba589242c52e30d41f796752cd58aa61bab0ebca7adf24d811b03", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}, "failure": {"scriptSig": "160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "witness": ["304402205d3080ceb411b4ef46aef3fd3e2ab493b5e005b33ed0423fad0589e5334a6a840220070143503584eab6d74eba4d0bef2b4823d0f6797e946f5b60f11217ff587b4a03", "02972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404"]}}, diff --git a/txscript/data/taproot-ref/fd1d4fb758440d51c0db63f8a401ad4f7dd1ba6d b/txscript/data/taproot-ref/fd1d4fb758440d51c0db63f8a401ad4f7dd1ba6d new file mode 100644 index 0000000000..81db8a6cbf --- /dev/null +++ b/txscript/data/taproot-ref/fd1d4fb758440d51c0db63f8a401ad4f7dd1ba6d @@ -0,0 +1 @@ +{"tx": "a5db689303dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8e00000000ee83d8e88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49d010000003a8b0fcadceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b6e01000000d40773fa021b25830000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb79658020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ace0020000", "prevouts": ["24a5260000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8", "e8e73c0000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88", "4909220000000000225120acc511cd55079365da76d18a33af3ae7411f3879a9caec918e9264c8959f5dac"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "alwaysvalid/notsuccessx", "success": {"scriptSig": "", "witness": ["6a50", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9367ac1a66615b2aaa170e13c634fe4adc8e21579cd2ad4b0e05677ccecae701899"]}, "failure": {"scriptSig": "", "witness": ["6a30616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936fa0cedfc8c4c5a04ac3787009b16f69cf342d2af09b40867d2c29ecd108727e2"]}}, diff --git a/txscript/data/taproot-ref/fd1f6bb68c1a0317e7fb3e9c65ce2b765717f38f b/txscript/data/taproot-ref/fd1f6bb68c1a0317e7fb3e9c65ce2b765717f38f new file mode 100644 index 0000000000..b18f31334e --- /dev/null +++ b/txscript/data/taproot-ref/fd1f6bb68c1a0317e7fb3e9c65ce2b765717f38f @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709a01000000adafb548bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf8201000000cf248c1a03e0558a000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac05010000", "prevouts": ["bd9b110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "4ea27b000000000022512039db30de33ea15b8f8fd0a316b7175d66e0ba7a162f794600ae9aaebda3948b7"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_90", "final": true, "success": {"scriptSig": "", "witness": ["31fb061ded3aa06aeead8cef95af3f5ab33eaf6af75fb1c2c8068eeafc6a374453f6fa96ecabb51ed47a2e44780cb75ddc6744d295ebe3e8574c8a415afee6a883"]}, "failure": {"scriptSig": "", "witness": ["84654a7a4cf578f1918dc1d48048039bd30ae9ec1adc37bd1fe9378e377c2c6211b7ae7b0c96c997a4b5a60d39c1b8890eb1ede443ec626fe4b3ea6ce85a442590"]}}, diff --git a/txscript/data/taproot-ref/fd275d920066468018b3ec78708e01bbf4634f89 b/txscript/data/taproot-ref/fd275d920066468018b3ec78708e01bbf4634f89 new file mode 100644 index 0000000000..40dc82ceb7 --- /dev/null +++ b/txscript/data/taproot-ref/fd275d920066468018b3ec78708e01bbf4634f89 @@ -0,0 +1 @@ +{"tx": "0100000003bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf6b000000005c19b047dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c4300000000fa054f9360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d9127072010000002e2b715c0281e4d10000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000016001428425a8aab0a57cd9398c2c78c3d097fe1a397a6940e7f4d", "prevouts": ["ab4c790000000000225120a57586f77f9f96f121f5205525f023e067d8d4ffab15aca94e058cc3473eae5a", "48984900000000002251202361d91ff13391fd25020ba7e60c60643b5255f5adbfbdf7f0353592847fec4a", "4c73110000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001inputs", "success": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "f7", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936dbc4082c88742c64e777227e559cc787fa79f9ad49b3844bdd2aa78bdd53ae153e2d335f383706a312226510c4ca5ed297e59b2981bccad977d4984b4ab81a7bbe0beccf8b53a38f7a20d51eb008bdc60f78fac094fdd23935202ece673d8622376e34112ab1bc736956b41978cebed690ad16294afa2ba0e9d8b5fa7e9f6f2f"]}, "failure": {"scriptSig": "", "witness": ["", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "61", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9366d95f1ea0a1fd23653d05da4ad0eda243001c7a04351d1c2a22e8a2afb82411fc18d13f23505bf80401329c8d1a0bac5ffbe219ba0d96925c38e985a7086f175ac8db205c7d3bb0390b2e22910f5d1cbad00807eee3325f4c4e7f4412ed3064a1c25c837ec0a1f852472f3f26e6d49055bb98717b7b68c46cae1e5f9804f9145"]}}, diff --git a/txscript/data/taproot-ref/fd30d1fabe3c70d63ebf6eb08fcc889f2062dd96 b/txscript/data/taproot-ref/fd30d1fabe3c70d63ebf6eb08fcc889f2062dd96 new file mode 100644 index 0000000000..f80858e599 --- /dev/null +++ b/txscript/data/taproot-ref/fd30d1fabe3c70d63ebf6eb08fcc889f2062dd96 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c43c00000000668a0bdfdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cc300000000031806d602a2158800000000001600149d38710eb90e420b159c7a9263994c88e6810bc758020000000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac11cba52a", "prevouts": ["b5fc3f0000000000225120e32017a134852f161f6cfbdc82f7fe66db755e2ed5bb55497d5cae1e53c5c006", "d02e4a000000000022512019bef84f9e846c1fdc0e0b6c8a2e8cd0934b4588f64b20133ad72602ae6fe529"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/unexecif", "success": {"scriptSig": "", "witness": ["0063d368", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93699c890f1cb77bd1e07e1591340b8ea7c636a6b93a8dd025cb092d0253a3c2a4496525fdd0eb5f3c5c39bf5b04d78b37703e3d3b538b36e17fa0ddbdeb236a5daa4337ae81428241101d56ff91a1822e405405037c9afab8da6ba5df5d84918ed"]}, "failure": {"scriptSig": "", "witness": ["00636168", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364c6a87e468bc2f4636d01a06f33fa62a820a91bb3fa58159484fa6a6e3a3321f8f435ba6abdf70be4dec7b2a0789d26eb9361219ce4916c9f3e2c2146b2213509dff863108f68b54d204f4b43b2fddebfd69630b8c1a20ba8be96c4e7e2557a5003e045cb689fe4fc6de332c618eb0cdce02c2dd8aae7c6dd6f70bdbaede2814"]}}, diff --git a/txscript/data/taproot-ref/fd4b486776c7fc4e964a57db37f46b6fb893446f b/txscript/data/taproot-ref/fd4b486776c7fc4e964a57db37f46b6fb893446f new file mode 100644 index 0000000000..06d8951a60 --- /dev/null +++ b/txscript/data/taproot-ref/fd4b486776c7fc4e964a57db37f46b6fb893446f @@ -0,0 +1 @@ +{"tx": "62db20530260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270b30000000059a62bffdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c8d0100000072c0dded011a3b5000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac4c2e7253", "prevouts": ["f1091000000000002251209807c6fa5fbdf8b77e6e8a9ff33ccee8e5ba6f6b181d807daf9039f015b3a190", "c7f15f00000000002251208acf7a61bb45458dd86d3c9f45a9fce258820fbbf84c7164c88d41367f6e76b9"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d2", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93634d7d9bf32378ef7c35504ad126f5933fce7000c51c0cb771db02273ac9ce3ce99aaf103cceb41d9bc37ec231aca89b984b5fd3c65977ce764d51033ac65adb45d26c3c7079b274e62542512e39807ee92511541c708e3b51bc61366b8def992ef429df53f77997a088ac7849be23d2367c05dc96029904e93835fc046c3c5b9"]}, "failure": {"scriptSig": "", "witness": ["000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000061", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9361ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d90045d300bab14a59e521ba24782c2f2145d4a7429c0cdd6ce75f9b04f76a9e5b4d519d9c6e51540aa9a09fa82ae61189b3f4badb16bfd2877ff7bde730e5687247de05f27aeb1527a9572d42a0ad2bcfbe2bc67b36cc3101a74fc3488cf03d6f1bd0"]}}, diff --git a/txscript/data/taproot-ref/fde4e348195fef4158d57bce09b8132261e53404 b/txscript/data/taproot-ref/fde4e348195fef4158d57bce09b8132261e53404 new file mode 100644 index 0000000000..1b29467033 --- /dev/null +++ b/txscript/data/taproot-ref/fde4e348195fef4158d57bce09b8132261e53404 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfcf00000000b38236dfdceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8a010000005a24c55301f9287000000000001600149d38710eb90e420b159c7a9263994c88e6810bc78fb4e75d", "prevouts": ["e7bd7500000000002251208ae894af2a9600386c37dee4cfaf898fd39bd624f9812efea0f89b144f5e3b3c", "1d6a230000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_d1", "final": true, "success": {"scriptSig": "", "witness": ["b812a9eccfdee570ea0932c50b747c18f9efb7d24bc86523f8013c60d6e2c9330faa5b6502762fdf009c7b2f67d233b7de4b49377639d2f0208da94d3dd7300e81", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5db5f597ecf51d78218b825845253793121754d6c4298eea9bd02cc8cfce48a7717b3cc912d223589d9e45812bb8c60d0ba478149802626104f5a169f7406d7ad1", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fe3a254545ba65877f7f12c1957e6983a9540725 b/txscript/data/taproot-ref/fe3a254545ba65877f7f12c1957e6983a9540725 new file mode 100644 index 0000000000..b0c2e7bb13 --- /dev/null +++ b/txscript/data/taproot-ref/fe3a254545ba65877f7f12c1957e6983a9540725 @@ -0,0 +1 @@ +{"tx": "02000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4fa00000000486720d6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb200000000fa9d4aef03b15daa000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac24ac6649", "prevouts": ["0aaf3d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "804b6e0000000000225120f46c27e4be4b28b9a4817d4bb21e6d76e9bff45d28c4e23d061d7fc56326d512"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_76", "final": true, "success": {"scriptSig": "", "witness": ["b34b78c0f4f93e8146e965541e2435fa7f87a26ca202cb0ca98dc2f2fd9f1171ec37a43174416403df31a5b17997fc8638d297220e5fe3f386bf3aab32b89ccf03", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["85b963bc8b6543e0415f70d92974aacf0a9e26dc91540e7f3f31d85ed46a53a54fc1041d4a1f34e94701747d3bbc467ad670f92261992740ef3312fdcadf6d4c76", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fe4991f96a4078203ed82f3dc9d57b0f5c8d7c31 b/txscript/data/taproot-ref/fe4991f96a4078203ed82f3dc9d57b0f5c8d7c31 new file mode 100644 index 0000000000..e8b68fd18c --- /dev/null +++ b/txscript/data/taproot-ref/fe4991f96a4078203ed82f3dc9d57b0f5c8d7c31 @@ -0,0 +1 @@ +{"tx": "01000000028bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4c5000000006242d66edff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565cd601000000ddd1212b04e58899000000000017a914f017945d4d088c7d42ab3bcbc1adce51d74fbd9f8758020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a914c629d61df58baceae110d15eb5b55e144268615388ac58020000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88acb2000000", "prevouts": ["26f83d0000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "36595e000000000017a914856f7c6a5a6a1ac0e553b769a4c35bcb9fb6f50287"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_87", "final": true, "success": {"scriptSig": "", "witness": ["0d1ffaeeda23e31038e5a484758074dca0089f8b9381b15cc25283479e2840fad7f770b4f5decef5df5f22a16e045da1a2faeed7c103e10eed6daa193cd4b95703", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["5f524706c16a3a58297c7c107996d87e2cd25bc1f7d07eb761eb950dfbbd67007af96d52608ba90f24a6d035f47578079744da1e6c4829739e7015d3fcad5f0187", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/fe5a94896e814e80a5d4f0d17825ea303d136807 b/txscript/data/taproot-ref/fe5a94896e814e80a5d4f0d17825ea303d136807 new file mode 100644 index 0000000000..b4abf12d3b --- /dev/null +++ b/txscript/data/taproot-ref/fe5a94896e814e80a5d4f0d17825ea303d136807 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270a4010000007ffa04c8dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b250100000082473360dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b0b00000000b573fe37040fb04f00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e48758020000000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e790c8515b", "prevouts": ["d2ef120000000000225120ea663cdaedbff64137eb6e6df4db9508c973045e9b4d61d7f67dd2d12ed5b278", "8cf01f00000000002251209ae0f9a30bb32466818047220431a71836305abdffa7870d853c3e44af672d80", "df861e0000000000225120dff7f04a1648925acb0c2995e1633664c97ab25bb4c317b29fea48d8a2c27a17"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "ae7d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363f7be6f8848b5bddf332c4d7bd83077f73701e2479f70e02b5730e841234d08231f1765c4043c65869fc44409698468cef1d88a3aab3981df946f88d25a1c2d5c67b1d078674a4d97323398e107b13ccefe9299bb9116e21f935c64f37bba24f619c7e3fc3d0f43b284295c7c76b7ff66dfc7bbdbc495ce3e8e20608c97360e5"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936252d0fde16f88d3d71135f2afb7fd13a00ae20e347d34ef21ddf868171a0f5b8b92d0c8bb72b9935581697fe84ef0173536b04207acfd5de8a2df8889a2a895490189ee9b6b94816743a58868693b6f0ba58cb07e4c6d5ed2ce590077e887d5b"]}}, diff --git a/txscript/data/taproot-ref/fe754dfb4207b538736ac33f4d6d3a8b39ed7eb8 b/txscript/data/taproot-ref/fe754dfb4207b538736ac33f4d6d3a8b39ed7eb8 new file mode 100644 index 0000000000..a4296b9918 --- /dev/null +++ b/txscript/data/taproot-ref/fe754dfb4207b538736ac33f4d6d3a8b39ed7eb8 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d912709800000000daf956298bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45e00000000b3893e6902e64243000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa930839374875802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e740010000", "prevouts": ["4038110000000000225120b77a4d3965d24a3fad7e13b4b8f89b1c642ad197d3735fb97eb5af1aa4db0ae8", "f0bd340000000000225120fa8a9eda5cf5b8cdf600ff6d95d78a3e3ba730f4e5093bedd0b749c08f958e88"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "017d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f93646c7eccffefd2d573ec014130e508f0c9963ccebd7830409f7b1b1301725e9fa54ce7cc5f439b597f56fd9de2c1657ae9d64eb6e71f5398fcdfdc60a0bc251e633479914332f6e309839a0f3b0f115e1019ec5f6a2a9189a2d7ee13d1c4f5f4ae05873438be84f92d1402d5d55e9fb409fe52800aaeb5db180b239b834bc1ca2"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e4f09646afdeac9857da657a09b8018dcf81d67c29f0281da7afdb83ec8526e8e4e5ee47dc19cce5f5bcfbe17d15c6a925997647a0a2c3c32d22380bb5e59a56e05873438be84f92d1402d5d55e9fb409fe52800aaeb5db180b239b834bc1ca2"]}}, diff --git a/txscript/data/taproot-ref/fe8a403b551fce23551c1a364c5d7a9bdf4082b4 b/txscript/data/taproot-ref/fe8a403b551fce23551c1a364c5d7a9bdf4082b4 new file mode 100644 index 0000000000..15810fd4e3 --- /dev/null +++ b/txscript/data/taproot-ref/fe8a403b551fce23551c1a364c5d7a9bdf4082b4 @@ -0,0 +1 @@ +{"tx": "010000000260f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d60100000045a55a8fdff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c760000000073f099380186396800000000001976a91490770ceff2b1c32e9dbf952fbe65b04a54d1949388ac2586664f", "prevouts": ["f629120000000000225120b4ca0199f2c1b4fe89ded0fec9677a159da93a40f23df8c7f92820e897b82544", "06e05a0000000000225120d05281144396364d925ea6b3a1aef63a9288a440d2428aed5ab1312e751c56f8"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "opsuccess/undecodable_bypass", "success": {"scriptSig": "", "witness": ["834c", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bf852205919db101e7100c264881cf502d3d2e764ba6b83faae2c86d526b113f2b9d1447cbfb5d72d5da72ac5ad193469eaa6b44c038aa23e2a9d2dd480586adaf3b292550aa3dd1beea84cf7009fb6c6992543e64edf52f25a9194aed3bcd7c"]}, "failure": {"scriptSig": "", "witness": ["4c5283", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936ff698adfda0327f188e2ee35f7aecc0f90c9138a350d450648d968c2b5dd7ef91ef6944ca9eae19b43c4423072484bbc3f643e0e770f53f8e7474c81f5d900458e881bd6493e98dc576a1c76b7dda488b188d283086ec2219562e3f5b97e3fb63f980255362d30444bd4a09dfd60422f4fe5b70b7cde78729ca8cd52cb50aace"]}}, diff --git a/txscript/data/taproot-ref/fead4cb9efe769ed34fc79a6f7f7c301fa44b950 b/txscript/data/taproot-ref/fead4cb9efe769ed34fc79a6f7f7c301fa44b950 new file mode 100644 index 0000000000..225043a2df --- /dev/null +++ b/txscript/data/taproot-ref/fead4cb9efe769ed34fc79a6f7f7c301fa44b950 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b8801000000c8c8d8b88bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4ad010000004c9346de03c1f76000000000001976a91401f109af244d8c7f2563284ac2d2ba7d6323a75e88ac580200000000000017a914719f78084af863e000acd618ba76df97972236898758020000000000001600149d38710eb90e420b159c7a9263994c88e6810bc731010000", "prevouts": ["4b5d270000000000225120795828cbdd13db8bfd99175dd96610ae8d272a9240d5c9e537830514248aeee7", "c51a3c000000000017a9146f2d26adc5ad58653becfc45ce03a0b1167b1b7e87"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "applic/keypath", "success": {"scriptSig": "225f202540f27e90740933c99d4f17ab2dfc6c82951cfb0b8674c83ad179cfbc247b89", "witness": ["73d8d5d8ed532f0f53c3e0f5a4fd64ce0dd9b9af52c8ee51179644ed0386a7e56acd541b49bef09466b789571a82c78c95f3dd46bd51b44f513d4a8f7cf182af"]}}, diff --git a/txscript/data/taproot-ref/fec0428a7d5b4dd2f894abbef22a4fd55b125e79 b/txscript/data/taproot-ref/fec0428a7d5b4dd2f894abbef22a4fd55b125e79 new file mode 100644 index 0000000000..85f4a0eff4 --- /dev/null +++ b/txscript/data/taproot-ref/fec0428a7d5b4dd2f894abbef22a4fd55b125e79 @@ -0,0 +1 @@ +{"tx": "0100000002bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf7c000000006ccee4d5bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf550100000006f9c30c016ca90a00000000001976a914f9cfef42654b8e1307276f4274b9e35435f17e8d88ac1b9c1b47", "prevouts": ["66cc700000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "9fee7e0000000000225120b5fac7f9d1efa21092b4bbfea1ca41fe5694dd20d67936ab2b478b1ec4aee588"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_unk_hashtype_a7", "final": true, "success": {"scriptSig": "", "witness": ["0dee6e0544a085c8a15febbd719b6e253db589d68487212f4ce2c93d742bc535830cca84f845d1506fbedebf02f9768a6ef5d1e4dbad8f878701309f199eff1681"]}, "failure": {"scriptSig": "", "witness": ["7e9a4442076322941c3512c0d70ff676e7f84fce1c13ccbc11dabed4705c8d2d1bb4ad1d0cb0b44b13dce392c77e728d7baefa05c2d60847d9743f4ecd129df2a7"]}}, diff --git a/txscript/data/taproot-ref/fed7b4e8b0ffa8ba7ee920409e365993f8f23423 b/txscript/data/taproot-ref/fed7b4e8b0ffa8ba7ee920409e365993f8f23423 new file mode 100644 index 0000000000..d64ac2a65a --- /dev/null +++ b/txscript/data/taproot-ref/fed7b4e8b0ffa8ba7ee920409e365993f8f23423 @@ -0,0 +1 @@ +{"tx": "0100000003dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bf101000000673c277b8bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c4370100000035cb6dc58bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c45d0000000023dea660014dee30000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df47879c010000", "prevouts": ["f5ff280000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "0bce3600000000002200204d9fa7499ad409ec9ec48eb45241c17306a16ea85aa9131c6c693d5ac440e116", "67f0410000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY", "comment": "legacy/pk-wrongkey", "final": true, "success": {"scriptSig": "", "witness": ["304402200eed20c923d2ec7fd6fd0412758ca0fd74be8a2b42e716a369b732d4b1812a3f0220749423388300602ad44c525c88e6a2f8b3364efc9ada5bd241f50da4f878f57901", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}, "failure": {"scriptSig": "", "witness": ["3045022100e120bcd0c42112150a93961039df1f5282548ffb791bebbf2063fc0ce3880b790220577f0761154e3f35545b6eaabd84153a6ce7e0b666805531e1647844d822c8b101", "2102972df56c6f8e97bfcc0f442f93cfc00fc91f37d7ee3708f904ad9af3abc29404ac"]}}, diff --git a/txscript/data/taproot-ref/ff02cab52406b52d736534063539b815a83e9ec9 b/txscript/data/taproot-ref/ff02cab52406b52d736534063539b815a83e9ec9 new file mode 100644 index 0000000000..5980156986 --- /dev/null +++ b/txscript/data/taproot-ref/ff02cab52406b52d736534063539b815a83e9ec9 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270130100000004782a72dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1e010000004a150c568bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48d01000000dfbafbcc0153c12000000000001600149d38710eb90e420b159c7a9263994c88e6810bc776010000", "prevouts": ["053e120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1850210000000000225120bf7c0652824d65f4682a3056a4ee7d3427d5bd09fcf8c412b9591353033138ae", "3e9d3b00000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327"], "index": 2, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/1001push", "success": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "447d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936b929eb7e8ad4e073db170590e53035ad212210bb9f64e5a212e35f16cad1d1a0da290f4428e3e675f4a51c1ca36b5af7f0162ea7962d369252b53cfa5e2a91134f357c04ffd5ab4b0848fd0bc62a9916d6f879ccec8b8201b6b82c9f83bee932"]}, "failure": {"scriptSig": "", "witness": ["0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936473b52d2f86e55a148378d231c070b8b3f2682e3af8489ef4b5e89a9ad3d421046ff9fefe634101043d8ca11d5a4647687c0df4bd98e414158186cc8065d9a91f7b6e2c095a2b9a1b3d0ba71ae2a36fa91117ca9fadc253f03c0f98f0de350244f357c04ffd5ab4b0848fd0bc62a9916d6f879ccec8b8201b6b82c9f83bee932"]}}, diff --git a/txscript/data/taproot-ref/ff0c9a3fa047cac34488cf6902e39ceb0b31a1f2 b/txscript/data/taproot-ref/ff0c9a3fa047cac34488cf6902e39ceb0b31a1f2 new file mode 100644 index 0000000000..69baf697e1 --- /dev/null +++ b/txscript/data/taproot-ref/ff0c9a3fa047cac34488cf6902e39ceb0b31a1f2 @@ -0,0 +1 @@ +{"tx": "2cc56a15038bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c49a00000000ec9501e6dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c7b0000000043261ee960f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270e100000000823f43cc013ca96b000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487b5010000", "prevouts": ["c1243f0000000000225120036cd49b0a5a8928de04f8e04bd3da02711fbb4d9053aeba12a20cf11cba05b5", "bb6f4700000000002251200106699296107db4ccd4290b8d3cc7be3754a2d9979743f64d14b4c3e7741f8d", "cd9e10000000000022512014168556a36ebb5fc7069983062b713ccfb69f91c25af78f116f616f92a54679"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "tapscript/sigopsratio_5", "success": {"scriptSig": "", "witness": ["9a5c10aefbfe506270d18f51e3be8b44d93730a589604d3e1927f1a51d003c71429665b47fdf8bf1de06d0a417b9db74d9d56685b35ad6e57f11deee7d5177e9", "96e22827d237bafcee6a73a75c6a0e801dd9792f0b1f30f99cebac9452a0c866b29bbe5a422a3a3a108e60151df9d07fa61bb2fb824875f19faf5e0e", "75005a29dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b3250ba5a8829dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32506e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364f8548ac9430c378b802a76bf4e30330b029db06562270d6dfa552c82f7ad828e4624988dbf1a8e05379085fe4f1d6daf4c052cf4e31fa12e77ebff59a6d1354000000000000000000000000000000000000000000000000000000000000000081eb60ecb145257b9a19aaa8c28dcc18c09e8a27d8f71ac28dee91a3117f6396ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc40e504b0102296de467c96da7e93b9174579d48da6397918b442a10bcba6549ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d04f1eb9ef398401490690d5d07e06cff4af8360fe27af9a63bc5f407a83ca8a5241e263d8c98cebbf362e2f0177af6696af7ee410e6642fbe91e0e216320689b6c2f432398bccd3202a6fddea1631b0c72129de51fa4a0b5b8cdbbaefc8b37ea04bf92e580dc3c05cd14080d8c1d5af39f5dba79470b5c86f67841386278ef0000000000000000000000000000000000000000000000000000000000000000057ad767594cbafa2ef386a7d859e365266f1c6028473d451552269018c152754d35c1deee4ec7deaeaa831940ac201271b6ff776017bb50a44bcbd42a0c164b511cfe55e11095d26e1ccbc0bcc0f69c673f0a76d41cefac9551a860b225dc38ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff31f8c6befe27f7d412413acf38cbeb58b24a7961476c2b373b6ae26a6f114a1f49d18c9b7c39eaed314f293ff206f53e67992e1dba3e6c10d0cfb9c6f5c55874ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11bdf10d236531c096bed1430c3f73887f20c7a94898c8c08832c27fe2e7ae420000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe53f0c91c28ad9fb56769cb7f6852de91427d2cecd613e78323eb1647c287d4fe45daf562ed92d3f70d93d776c50cd7104170022f9714c22c0eb2a60e62e93d11d00987f263adad68f084a3fa19f55f577c12c00242e3df2afd487d4a9be407a77057648493ff83a64b83763581afc73f88546e4c8c65a1a183ac99fbe86254399cc5d7346b555c2da780d05477850ba4a1c8cf3e0174889ab50bd917dddbaa48b1465b1783e37520bae6833f5c1eb425b398b379bea622d9299e67dfa74fe46652a9c4d9d09dbe4efb9c134356818b8f370bd01045ad70aa4166a29cd56160c75f1ed36289f63eeeff2b9bc390022ca828a1e325f7db8790bae25846d92f384f331588ae8361ce48197c4fa3d84e917b7b094596a42c9fba9ff70a2df18d998ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5698d2f1e8d99f280adcafd85c48e656006e47b8f0eb554b25fad29f38026015c658a33b444cfb8855d6c8c6b7ee7831149e19a91fc7e7c36563558e288347a6dc14210dbdee7b1ee2afe12374313fc9e90f7d54bc72ca8c9728bd18f27a992f13cc42831ead5b3c2231edb7dbd5b41fa74b5183081618dcfbe43f899ca3a223501baa00eeec5d37da5a1c6973c6685eb86690a2196e95b6372c40f81163bc5534963657b2fad15ce0772d0f30ba336255a26afc2cdf1eb26984cb6e47e0c32f25e33a7a8681fee80b544addbffe10ec28fa79b05f0dbeee61dce9c221bd4db6"]}, "failure": {"scriptSig": "", "witness": ["9a5c10aefbfe506270d18f51e3be8b44d93730a589604d3e1927f1a51d003c71429665b47fdf8bf1de06d0a417b9db74d9d56685b35ad6e57f11deee7d5177e9", "b2a8004ce53e9ffdda644b661b18374f7b878a6d1c36733009cdd3ce5a69b2d783d72e6902bc31b3c3dccf2bf3aa8665128354ad1b8de05fbe8f23", "75005a29dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b3250ba5a8829dd0239d45c6ebc84fce483cb108c20da66a09760f11ee5126885a304919e89dccaa3bc1d22786b32506e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba0111886e607cba011188ac", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9364f8548ac9430c378b802a76bf4e30330b029db06562270d6dfa552c82f7ad828e4624988dbf1a8e05379085fe4f1d6daf4c052cf4e31fa12e77ebff59a6d1354000000000000000000000000000000000000000000000000000000000000000081eb60ecb145257b9a19aaa8c28dcc18c09e8a27d8f71ac28dee91a3117f6396ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc40e504b0102296de467c96da7e93b9174579d48da6397918b442a10bcba6549ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff7d04f1eb9ef398401490690d5d07e06cff4af8360fe27af9a63bc5f407a83ca8a5241e263d8c98cebbf362e2f0177af6696af7ee410e6642fbe91e0e216320689b6c2f432398bccd3202a6fddea1631b0c72129de51fa4a0b5b8cdbbaefc8b37ea04bf92e580dc3c05cd14080d8c1d5af39f5dba79470b5c86f67841386278ef0000000000000000000000000000000000000000000000000000000000000000057ad767594cbafa2ef386a7d859e365266f1c6028473d451552269018c152754d35c1deee4ec7deaeaa831940ac201271b6ff776017bb50a44bcbd42a0c164b511cfe55e11095d26e1ccbc0bcc0f69c673f0a76d41cefac9551a860b225dc38ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff31f8c6befe27f7d412413acf38cbeb58b24a7961476c2b373b6ae26a6f114a1f49d18c9b7c39eaed314f293ff206f53e67992e1dba3e6c10d0cfb9c6f5c55874ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff11bdf10d236531c096bed1430c3f73887f20c7a94898c8c08832c27fe2e7ae420000000000000000000000000000000000000000000000000000000000000000ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe53f0c91c28ad9fb56769cb7f6852de91427d2cecd613e78323eb1647c287d4fe45daf562ed92d3f70d93d776c50cd7104170022f9714c22c0eb2a60e62e93d11d00987f263adad68f084a3fa19f55f577c12c00242e3df2afd487d4a9be407a77057648493ff83a64b83763581afc73f88546e4c8c65a1a183ac99fbe86254399cc5d7346b555c2da780d05477850ba4a1c8cf3e0174889ab50bd917dddbaa48b1465b1783e37520bae6833f5c1eb425b398b379bea622d9299e67dfa74fe46652a9c4d9d09dbe4efb9c134356818b8f370bd01045ad70aa4166a29cd56160c75f1ed36289f63eeeff2b9bc390022ca828a1e325f7db8790bae25846d92f384f331588ae8361ce48197c4fa3d84e917b7b094596a42c9fba9ff70a2df18d998ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff5698d2f1e8d99f280adcafd85c48e656006e47b8f0eb554b25fad29f38026015c658a33b444cfb8855d6c8c6b7ee7831149e19a91fc7e7c36563558e288347a6dc14210dbdee7b1ee2afe12374313fc9e90f7d54bc72ca8c9728bd18f27a992f13cc42831ead5b3c2231edb7dbd5b41fa74b5183081618dcfbe43f899ca3a223501baa00eeec5d37da5a1c6973c6685eb86690a2196e95b6372c40f81163bc5534963657b2fad15ce0772d0f30ba336255a26afc2cdf1eb26984cb6e47e0c32f25e33a7a8681fee80b544addbffe10ec28fa79b05f0dbeee61dce9c221bd4db6"]}}, diff --git a/txscript/data/taproot-ref/ff0ecc250f060fadb2dfbc788f027f6c46ef6c40 b/txscript/data/taproot-ref/ff0ecc250f060fadb2dfbc788f027f6c46ef6c40 new file mode 100644 index 0000000000..ae2c711bd8 --- /dev/null +++ b/txscript/data/taproot-ref/ff0ecc250f060fadb2dfbc788f027f6c46ef6c40 @@ -0,0 +1 @@ +{"tx": "c1eba3db02bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf4f00000000e94ce9b9bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acf40000000000bf6ebc6028687db00000000001976a91497b8b6d3828f12a792c9de6df78e0b1514b7967688ac5802000000000000160014f19f1969da9e474444a7b8fc50ae71f46e1eb796bb000000", "prevouts": ["0e8d74000000000022512056830ed1745d06f5c865a011820a618c1aa3c70bd00028049bf30f33c5c664cc", "cf0d690000000000225120469ff3412c89f5805e53fbb9303c790a98dd32093d40e3b7dfe22bb05f85f37f"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/keypath_hashtype_82", "success": {"scriptSig": "", "witness": ["b2b1f387b9825b810412ce3419971c4ee5c35106a558c6faba67d6b82e228086ccb09a4cb73dd2e73ed6f9ced1e170e78aa8e29f47da6669cc424c6b8ced7e9d82", "50174d347af8ea2207120d07506725832b840dddf73f1573701a23084184426fbe18911e046a0533fd933b5b49f4886da199bf25550f53a1472cebe9e24e66298054be5d5301c3834510ed84198e654f3c8ca3a7e36114f8818c395e16c529419271a7c5ba205a3158e12afa1ac3446d681c5e51d94c308df2c33fc9c171bffb836429a9841d6d2710c26b80c6e227548562af49e67bc02b486214149e86e30321157d1289b382577c22fca76c52df489eacd2f933a225f2e03e47add671d2921b90c3b3f0dcf6badb0bc8ad21384a13ec63c85b6481357fddb63b2efda345"]}, "failure": {"scriptSig": "", "witness": ["bf64ecef48e9d5122211f7261b14a8fafed77649f7108a8c7f59a971722f50d0a7a21de1757c1deea12605a4de9fe961abc481200bcfdd36d1529f5f4a563cc882", "500cf653630e8d24a23667e26672a6cd044ac9ea916488d508863d2daef6177d00f03161f89a8d001d917167eec87c6ae8022f1afb02785ee38d82c6c95f22761059b6f68605"]}}, diff --git a/txscript/data/taproot-ref/ff269c4192d92ee1330ca6cb368ffaf3dec65d44 b/txscript/data/taproot-ref/ff269c4192d92ee1330ca6cb368ffaf3dec65d44 new file mode 100644 index 0000000000..6caa2b6eec --- /dev/null +++ b/txscript/data/taproot-ref/ff269c4192d92ee1330ca6cb368ffaf3dec65d44 @@ -0,0 +1 @@ +{"tx": "010000000360f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270130100000004782a72dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b1e010000004a150c568bd9b9012d1e9d0bc9c34df9d487a1d5663f1b37dbd4a857a2bddcbe25f0d0c48d01000000dfbafbcc0153c12000000000001600149d38710eb90e420b159c7a9263994c88e6810bc776010000", "prevouts": ["053e120000000000225120860597d3b29a47949c68e53703a7c358236fede9036ee1439f49b54ea72cb70b", "1850210000000000225120bf7c0652824d65f4682a3056a4ee7d3427d5bd09fcf8c412b9591353033138ae", "3e9d3b00000000002251200fa149a1be921b54e78f55c020f385d43ef2042352395c285ad3c0f835b7f327"], "index": 0, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "sighash/scriptpath_unk_hashtype_54", "final": true, "success": {"scriptSig": "", "witness": ["f46c55fd5a01d67b7b26b7208fbb53d9c3587c277f716f62b7030122f999b17401be49a0d19888c8fd110aedd4c0fbe5a162ec1b6b7da66f151ddb36d637776602", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}, "failure": {"scriptSig": "", "witness": ["55b094ae001890588580a9c3fa4c6d045ef5398d50b35f60e470f9b2749624677b457298f433856679c5aa0bd0184271256ad3b8135b037048375850e8807d7b54", "0020871bf677dcc1eeea213f60505c1c9f1695f8b7d2ee8bbacb3ba246e9f1e57e20ba5187ab", "c17d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9363ca46e263a260b65760ba16fc7221d8949b643b52b6000a40fc66cf5b479cf31754943580dc1bd6713260228477cc107c802e16d4edc27befd908a8bf6eb3629"]}}, diff --git a/txscript/data/taproot-ref/ffba9a51f35e6cfeb9726e3eb3551989a55a2ab6 b/txscript/data/taproot-ref/ffba9a51f35e6cfeb9726e3eb3551989a55a2ab6 new file mode 100644 index 0000000000..5f15505f4e --- /dev/null +++ b/txscript/data/taproot-ref/ffba9a51f35e6cfeb9726e3eb3551989a55a2ab6 @@ -0,0 +1 @@ +{"tx": "0200000002dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4b910000000007b8c7cb60f8b8616e71e7ed05613145ce7cda782ac9861e64f9ce24e333ca1e91d91270d2010000006a6039d303ae933100000000001976a9145dabd582fbdb106f3f7460c03ce83bc27d461d0f88ac5802000000000000160014619b982e9f6832d2edb1a1ee4e7656a8d72c65e7580200000000000017a9148f07d0f98cfe0d6aff29ca20bcda3fa9308393748784110e48", "prevouts": ["759f24000000000022512040610cb8e3decd88d4c59cdbdfeb76bec671852dd837e2ccede76befc391039a", "1a8a0f000000000022512003f4235cf93ae95226c79f4ac7e76f24996218ade11a16913609a6e39f31ad9a"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "247d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936eebc95ded88fb8050094e8dfa958c3be0894eaff0fafae678206b26918d8d7ac2f1db23017f271ba09e9de40cbf6bd4b292cb969b1168724d03b4425efd5cf153506420e788c3ffd3d8d88ddb9154e82106737a8dd2b5d0940daf68f275cd0d7"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936d34b659cf09d8349f11874dab6e59e9cab85ba068159b5d193f4bbbdcc88f75d5e7553debb7d46df339c30c507d2c3e528ab4da6adeae898375a123e3f0f1c20ee08d5698d988fd8465309aa10a601f39a775c4be89f69280a5de9411e45585f440784f6f41cc1ae323b623cf5dcb000da45020704fab66b6b5f2ff7d67a93a3"]}}, diff --git a/txscript/data/taproot-ref/ffbfc4371313a95615a944ca1fb473bf2569d7aa b/txscript/data/taproot-ref/ffbfc4371313a95615a944ca1fb473bf2569d7aa new file mode 100644 index 0000000000..0524a69dc8 --- /dev/null +++ b/txscript/data/taproot-ref/ffbfc4371313a95615a944ca1fb473bf2569d7aa @@ -0,0 +1 @@ +{"tx": "cc2e403e02dceb5f5568f8ada45d428630f512fb8efacd46682b4367b4edaf1985c5e4af4bb10100000091ff68d6bcb2054607a921b3c6df992a9486776863b28485e731a805931b6feb14221acfb901000000bd8eaca701a18f31000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df478795736527", "prevouts": ["94a2240000000000160014bb1edec93acb47abb0cd0078cfdb77063cd446c8", "ca7d660000000000225120618acdfff396d05c4f42f34a54f40947ed380d009b19743557014bb4ecd5d247"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/return", "success": {"scriptSig": "", "witness": ["6a", "847d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936e7e370719e3d30fbc2ea4d983b233608f68df319a16a215567d8496b6d2fdfa7cc3b36ccc81fe4912a925ea2b1eb99a41bced4468215b0c94e7bf4feca6759c79f31796df107fae040796e44aea27c7a7d41418cdc7206378fd34089f9daf951"]}, "failure": {"scriptSig": "", "witness": ["6a", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f9360641e660d1e5392fb79d64838c2b84faf04b7f5f283c9d8bf83e39e177b64372ff78d21b135ee37de5fb006beb46b85f4aedf8bacb6598da1f15171cdf92c209c568c76d6b344a062dd798f6575db1f1731d6a7ca3f2682e7e1b801cd94d3826"]}}, diff --git a/txscript/data/taproot-ref/ffc6076c34629ad5d440389f97bac8efcd2db5b7 b/txscript/data/taproot-ref/ffc6076c34629ad5d440389f97bac8efcd2db5b7 new file mode 100644 index 0000000000..b5542e27ce --- /dev/null +++ b/txscript/data/taproot-ref/ffc6076c34629ad5d440389f97bac8efcd2db5b7 @@ -0,0 +1 @@ +{"tx": "0200000002dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c3a00000000e20d6af9dff9d694a434b13abfbbd618e2ece4460f24b4821cf47d5afc481a386c59565c56010000002af908f40301a1b1000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487580200000000000017a914472b5d2e0c04ba5495728dd81d0885af2587df4787580200000000000017a9141d5a2c690c3e2dacb3cead240f0ce4a273b9d0e487363aad34", "prevouts": ["c6e55a000000000017a914c9840c38196e75dd475876fc1e51c080e92b574c87", "0950590000000000225120c3ede40be7fa2b5d36872db3a22bce0eb482f16144c003b683cf5791052fa029"], "index": 1, "flags": "P2SH,DERSIG,CHECKLOCKTIMEVERIFY,CHECKSEQUENCEVERIFY,WITNESS,NULLDUMMY,TAPROOT", "comment": "unkver/undecodable", "success": {"scriptSig": "", "witness": ["4c", "287d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936c89a90bd6ee635b9a469d0d01d0c15436cff095a2a8e7aa2387b3d6b61c337a118f8625f860d8689a2679aa71112fac717f40bee978e3269b215b9f9d8467661efcb4d33820b2e80b50b7a60cab20b6261c566fe48480267b41ad585cde9a4bb"]}, "failure": {"scriptSig": "", "witness": ["4c", "c07d732801de7e0c866f2462f29c14b63e555159b62ba93a5d5963d1c04795f936bf7d06d12d9f93c68b7270a0e92986b9529219a8b1f03a05e07750c355db869496153d9d0825641ad9dc2862c4b07cae929842b36229bdcb06007f7d47362644efcb4d33820b2e80b50b7a60cab20b6261c566fe48480267b41ad585cde9a4bb"]}}, diff --git a/txscript/engine.go b/txscript/engine.go index db661860c8..7dfd092eae 100644 --- a/txscript/engine.go +++ b/txscript/engine.go @@ -10,8 +10,10 @@ import ( "crypto/sha256" "fmt" "math/big" + "strings" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -94,6 +96,24 @@ const ( // operation whose public key isn't serialized in a compressed format // non-standard. ScriptVerifyWitnessPubKeyType + + // ScriptVerifyTaproot defines whether or not to verify a transaction + // output using the new taproot validation rules. + ScriptVerifyTaproot + + // ScriptVerifyDiscourageUpgradeableWitnessProgram defines whether or + // not to consider any new/unknown taproot leaf versions as + // non-standard. + ScriptVerifyDiscourageUpgradeableTaprootVersion + + // ScriptVerifyDiscourageOpSuccess defines whether or not to consider + // usage of OP_SUCCESS op codes during tapscript execution as + // non-standard. + ScriptVerifyDiscourageOpSuccess + + // ScriptVerifyDiscourageUpgradeablePubkeyType defines if unknown + // public key versions (during tapscript execution) is non-standard. + ScriptVerifyDiscourageUpgradeablePubkeyType ) const ( @@ -111,31 +131,160 @@ const ( // payToWitnessScriptHashDataSize is the size of the witness program's // data push for a pay-to-witness-script-hash output. payToWitnessScriptHashDataSize = 32 + + // payToTaprootDataSize is the size of the witness program push for + // taproot spends. This will be the serialized x-coordinate of the + // top-level taproot output public key. + payToTaprootDataSize = 32 +) + +const ( + // BaseSegwitWitnessVersion is the original witness version that defines + // the initial set of segwit validation logic. + BaseSegwitWitnessVersion = 0 + + // TaprootWitnessVersion is the witness version that defines the new + // taproot verification logic. + TaprootWitnessVersion = 1 ) // halforder is used to tame ECDSA malleability (see BIP0062). var halfOrder = new(big.Int).Rsh(btcec.S256().N, 1) +// taprootExecutionCtx houses the special context-specific information we need +// to validate a taproot script spend. This includes the annex, the running sig +// op count tally, and other relevant information. +type taprootExecutionCtx struct { + annex []byte + + codeSepPos uint32 + + tapLeafHash chainhash.Hash + + sigOpsBudget int32 + + mustSucceed bool +} + +// sigOpsDelta is both the starting budget for sig ops for tapscript +// verification, as well as the decrease in the total budget when we encounter +// a signature. +const sigOpsDelta = 50 + +// tallysigOp attempts to decrease the current sig ops budget by sigOpsDelta. +// An error is returned if after subtracting the delta, the budget is below +// zero. +func (t *taprootExecutionCtx) tallysigOp() error { + t.sigOpsBudget -= sigOpsDelta + + if t.sigOpsBudget < 0 { + return scriptError(ErrTaprootMaxSigOps, "") + } + + return nil +} + +// newTaprootExecutionCtx returns a fresh instance of the taproot execution +// context. +func newTaprootExecutionCtx(inputWitnessSize int32) *taprootExecutionCtx { + return &taprootExecutionCtx{ + codeSepPos: blankCodeSepValue, + sigOpsBudget: sigOpsDelta + inputWitnessSize, + } +} + // Engine is the virtual machine that executes scripts. type Engine struct { - scripts [][]parsedOpcode + // The following fields are set when the engine is created and must not be + // changed afterwards. The entries of the signature cache are mutated + // during execution, however, the cache pointer itself is not changed. + // + // flags specifies the additional flags which modify the execution behavior + // of the engine. + // + // tx identifies the transaction that contains the input which in turn + // contains the signature script being executed. + // + // txIdx identifies the input index within the transaction that contains + // the signature script being executed. + // + // version specifies the version of the public key script to execute. Since + // signature scripts redeem public keys scripts, this means the same version + // also extends to signature scripts and redeem scripts in the case of + // pay-to-script-hash. + // + // bip16 specifies that the public key script is of a special form that + // indicates it is a BIP16 pay-to-script-hash and therefore the + // execution must be treated as such. + // + // sigCache caches the results of signature verifications. This is useful + // since transaction scripts are often executed more than once from various + // contexts (e.g. new block templates, when transactions are first seen + // prior to being mined, part of full block verification, etc). + // + // hashCache caches the midstate of segwit v0 and v1 sighashes to + // optimize worst-case hashing complexity. + // + // prevOutFetcher is used to look up all the previous output of + // taproot transactions, as that information is hashed into the + // sighash digest for such inputs. + flags ScriptFlags + tx wire.MsgTx + txIdx int + version uint16 + bip16 bool + sigCache *SigCache + hashCache *TxSigHashes + prevOutFetcher PrevOutputFetcher + + // The following fields handle keeping track of the current execution state + // of the engine. + // + // scripts houses the raw scripts that are executed by the engine. This + // includes the signature script as well as the public key script. It also + // includes the redeem script in the case of pay-to-script-hash. + // + // scriptIdx tracks the index into the scripts array for the current program + // counter. + // + // opcodeIdx tracks the number of the opcode within the current script for + // the current program counter. Note that it differs from the actual byte + // index into the script and is really only used for disassembly purposes. + // + // lastCodeSep specifies the position within the current script of the last + // OP_CODESEPARATOR. + // + // tokenizer provides the token stream of the current script being executed + // and doubles as state tracking for the program counter within the script. + // + // savedFirstStack keeps a copy of the stack from the first script when + // performing pay-to-script-hash execution. + // + // dstack is the primary data stack the various opcodes push and pop data + // to and from during execution. + // + // astack is the alternate data stack the various opcodes push and pop data + // to and from during execution. + // + // condStack tracks the conditional execution state with support for + // multiple nested conditional execution opcodes. + // + // numOps tracks the total number of non-push operations in a script and is + // primarily used to enforce maximum limits. + scripts [][]byte scriptIdx int - scriptOff int + opcodeIdx int lastCodeSep int - dstack stack // data stack - astack stack // alt stack - tx wire.MsgTx - txIdx int + tokenizer ScriptTokenizer + savedFirstStack [][]byte + dstack stack + astack stack condStack []int numOps int - flags ScriptFlags - sigCache *SigCache - hashCache *TxSigHashes - bip16 bool // treat execution as pay-to-script-hash - savedFirstStack [][]byte // stack from first script for bip16 scripts witnessVersion int witnessProgram []byte inputAmount int64 + taprootCtx *taprootExecutionCtx } // hasFlag returns whether the script engine instance has the passed flag set. @@ -154,26 +303,144 @@ func (vm *Engine) isBranchExecuting() bool { return vm.condStack[len(vm.condStack)-1] == OpCondTrue } +// isOpcodeDisabled returns whether or not the opcode is disabled and thus is +// always bad to see in the instruction stream (even if turned off by a +// conditional). +func isOpcodeDisabled(opcode byte) bool { + switch opcode { + case OP_CAT: + return true + case OP_SUBSTR: + return true + case OP_LEFT: + return true + case OP_RIGHT: + return true + case OP_INVERT: + return true + case OP_AND: + return true + case OP_OR: + return true + case OP_XOR: + return true + case OP_2MUL: + return true + case OP_2DIV: + return true + case OP_MUL: + return true + case OP_DIV: + return true + case OP_MOD: + return true + case OP_LSHIFT: + return true + case OP_RSHIFT: + return true + default: + return false + } +} + +// isOpcodeAlwaysIllegal returns whether or not the opcode is always illegal +// when passed over by the program counter even if in a non-executed branch (it +// isn't a coincidence that they are conditionals). +func isOpcodeAlwaysIllegal(opcode byte) bool { + switch opcode { + case OP_VERIF: + return true + case OP_VERNOTIF: + return true + default: + return false + } +} + +// isOpcodeConditional returns whether or not the opcode is a conditional opcode +// which changes the conditional execution stack when executed. +func isOpcodeConditional(opcode byte) bool { + switch opcode { + case OP_IF: + return true + case OP_NOTIF: + return true + case OP_ELSE: + return true + case OP_ENDIF: + return true + default: + return false + } +} + +// checkMinimalDataPush returns whether or not the provided opcode is the +// smallest possible way to represent the given data. For example, the value 15 +// could be pushed with OP_DATA_1 15 (among other variations); however, OP_15 is +// a single opcode that represents the same value and is only a single byte +// versus two bytes. +func checkMinimalDataPush(op *opcode, data []byte) error { + opcodeVal := op.value + dataLen := len(data) + switch { + case dataLen == 0 && opcodeVal != OP_0: + str := fmt.Sprintf("zero length data push is encoded with opcode %s "+ + "instead of OP_0", op.name) + return scriptError(ErrMinimalData, str) + case dataLen == 1 && data[0] >= 1 && data[0] <= 16: + if opcodeVal != OP_1+data[0]-1 { + // Should have used OP_1 .. OP_16 + str := fmt.Sprintf("data push of the value %d encoded with opcode "+ + "%s instead of OP_%d", data[0], op.name, data[0]) + return scriptError(ErrMinimalData, str) + } + case dataLen == 1 && data[0] == 0x81: + if opcodeVal != OP_1NEGATE { + str := fmt.Sprintf("data push of the value -1 encoded with opcode "+ + "%s instead of OP_1NEGATE", op.name) + return scriptError(ErrMinimalData, str) + } + case dataLen <= 75: + if int(opcodeVal) != dataLen { + // Should have used a direct push + str := fmt.Sprintf("data push of %d bytes encoded with opcode %s "+ + "instead of OP_DATA_%d", dataLen, op.name, dataLen) + return scriptError(ErrMinimalData, str) + } + case dataLen <= 255: + if opcodeVal != OP_PUSHDATA1 { + str := fmt.Sprintf("data push of %d bytes encoded with opcode %s "+ + "instead of OP_PUSHDATA1", dataLen, op.name) + return scriptError(ErrMinimalData, str) + } + case dataLen <= 65535: + if opcodeVal != OP_PUSHDATA2 { + str := fmt.Sprintf("data push of %d bytes encoded with opcode %s "+ + "instead of OP_PUSHDATA2", dataLen, op.name) + return scriptError(ErrMinimalData, str) + } + } + return nil +} + // executeOpcode peforms execution on the passed opcode. It takes into account // whether or not it is hidden by conditionals, but some rules still must be // tested in this case. -func (vm *Engine) executeOpcode(pop *parsedOpcode) error { +func (vm *Engine) executeOpcode(op *opcode, data []byte) error { // Disabled opcodes are fail on program counter. - if pop.isDisabled() { - str := fmt.Sprintf("attempt to execute disabled opcode %s", - pop.opcode.name) + if isOpcodeDisabled(op.value) { + str := fmt.Sprintf("attempt to execute disabled opcode %s", op.name) return scriptError(ErrDisabledOpcode, str) } // Always-illegal opcodes are fail on program counter. - if pop.alwaysIllegal() { - str := fmt.Sprintf("attempt to execute reserved opcode %s", - pop.opcode.name) + if isOpcodeAlwaysIllegal(op.value) { + str := fmt.Sprintf("attempt to execute reserved opcode %s", op.name) return scriptError(ErrReservedOpcode, str) } // Note that this includes OP_RESERVED which counts as a push operation. - if pop.opcode.value > OP_16 { + if vm.taprootCtx == nil && op.value > OP_16 { vm.numOps++ if vm.numOps > MaxOpsPerScript { str := fmt.Sprintf("exceeded max operation limit of %d", @@ -181,67 +448,42 @@ func (vm *Engine) executeOpcode(pop *parsedOpcode) error { return scriptError(ErrTooManyOperations, str) } - } else if len(pop.data) > MaxScriptElementSize { + } else if len(data) > MaxScriptElementSize { str := fmt.Sprintf("element size %d exceeds max allowed size %d", - len(pop.data), MaxScriptElementSize) + len(data), MaxScriptElementSize) return scriptError(ErrElementTooBig, str) } // Nothing left to do when this is not a conditional opcode and it is // not in an executing branch. - if !vm.isBranchExecuting() && !pop.isConditional() { + if !vm.isBranchExecuting() && !isOpcodeConditional(op.value) { return nil } // Ensure all executed data push opcodes use the minimal encoding when // the minimal data verification flag is set. if vm.dstack.verifyMinimalData && vm.isBranchExecuting() && - pop.opcode.value >= 0 && pop.opcode.value <= OP_PUSHDATA4 { + op.value >= 0 && op.value <= OP_PUSHDATA4 { - if err := pop.checkMinimalDataPush(); err != nil { + if err := checkMinimalDataPush(op, data); err != nil { return err } } - return pop.opcode.opfunc(pop, vm) -} - -// disasm is a helper function to produce the output for DisasmPC and -// DisasmScript. It produces the opcode prefixed by the program counter at the -// provided position in the script. It does no error checking and leaves that -// to the caller to provide a valid offset. -func (vm *Engine) disasm(scriptIdx int, scriptOff int) string { - return fmt.Sprintf("%02x:%04x: %s", scriptIdx, scriptOff, - vm.scripts[scriptIdx][scriptOff].print(false)) + return op.opfunc(op, data, vm) } -// validPC returns an error if the current script position is valid for -// execution, nil otherwise. -func (vm *Engine) validPC() error { +// checkValidPC returns an error if the current script position is not valid for +// execution. +func (vm *Engine) checkValidPC() error { if vm.scriptIdx >= len(vm.scripts) { - str := fmt.Sprintf("past input scripts %v:%v %v:xxxx", - vm.scriptIdx, vm.scriptOff, len(vm.scripts)) - return scriptError(ErrInvalidProgramCounter, str) - } - if vm.scriptOff >= len(vm.scripts[vm.scriptIdx]) { - str := fmt.Sprintf("past input scripts %v:%v %v:%04d", - vm.scriptIdx, vm.scriptOff, vm.scriptIdx, - len(vm.scripts[vm.scriptIdx])) + str := fmt.Sprintf("script index %d beyond total scripts %d", + vm.scriptIdx, len(vm.scripts)) return scriptError(ErrInvalidProgramCounter, str) } return nil } -// curPC returns either the current script and offset, or an error if the -// position isn't valid. -func (vm *Engine) curPC() (script int, off int, err error) { - err = vm.validPC() - if err != nil { - return 0, 0, err - } - return vm.scriptIdx, vm.scriptOff, nil -} - // isWitnessVersionActive returns true if a witness program was extracted // during the initialization of the Engine, and the program's version matches // the specified version. @@ -251,8 +493,12 @@ func (vm *Engine) isWitnessVersionActive(version uint) bool { // verifyWitnessProgram validates the stored witness program using the passed // witness as input. -func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { - if vm.isWitnessVersionActive(0) { +func (vm *Engine) verifyWitnessProgram(witness wire.TxWitness) error { + switch { + + // We're attempting to verify a base (witness version 0) segwit output, + // so we'll be looking for either a p2wsh or a p2wkh spend. + case vm.isWitnessVersionActive(BaseSegwitWitnessVersion): switch len(vm.witnessProgram) { case payToWitnessPubKeyHashDataSize: // P2WKH // The witness stack should consist of exactly two @@ -269,7 +515,9 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { if err != nil { return err } - pops, err := parseScript(pkScript) + + const scriptVersion = 0 + err = checkScriptParses(vm.version, pkScript) if err != nil { return err } @@ -277,7 +525,7 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { // Set the stack to the provided witness stack, then // append the pkScript generated above as the next // script to execute. - vm.scripts = append(vm.scripts, pops) + vm.scripts = append(vm.scripts, pkScript) vm.SetStack(witness) case payToWitnessScriptHashDataSize: // P2WSH @@ -307,10 +555,10 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { "witness program hash mismatch") } - // With all the validity checks passed, parse the - // script into individual op-codes so w can execute it - // as the next script. - pops, err := parseScript(witnessScript) + // With all the validity checks passed, assert that the + // script parses without failure. + const scriptVersion = 0 + err := checkScriptParses(vm.version, witnessScript) if err != nil { return err } @@ -318,7 +566,7 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { // The hash matched successfully, so use the witness as // the stack, and set the witnessScript to be the next // script executed. - vm.scripts = append(vm.scripts, pops) + vm.scripts = append(vm.scripts, witnessScript) vm.SetStack(witness[:len(witness)-1]) default: @@ -329,11 +577,164 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { len(vm.witnessProgram)) return scriptError(ErrWitnessProgramWrongLength, errStr) } - } else if vm.hasFlag(ScriptVerifyDiscourageUpgradeableWitnessProgram) { + + // We're attempting to to verify a taproot input, and the witness + // program data push is of the expected size, so we'll be looking for a + // normal key-path spend, or a merkle proof for a tapscript with + // execution afterwards. + case vm.isWitnessVersionActive(TaprootWitnessVersion) && + len(vm.witnessProgram) == payToTaprootDataSize && !vm.bip16: + + // If taproot isn't currently active, then we'll return a + // success here in place as we don't apply the new rules unless + // the flag flips, as governed by the version bits deployment. + if !vm.hasFlag(ScriptVerifyTaproot) { + return nil + } + + // If there're no stack elements at all, then this is an + // invalid spend. + if len(witness) == 0 { + return scriptError(ErrWitnessProgramEmpty, "witness "+ + "program empty passed empty witness") + } + + // At this point, we know taproot is active, so we'll populate + // the taproot execution context. + vm.taprootCtx = newTaprootExecutionCtx( + int32(witness.SerializeSize()), + ) + + // If we can detect the annex, then drop that off the stack, + // we'll only need it to compute the sighash later. + if isAnnexedWitness(witness) { + vm.taprootCtx.annex, _ = extractAnnex(witness) + + // Snip the annex off the end of the witness stack. + witness = witness[:len(witness)-1] + } + + // From here, we'll either be validating a normal key spend, or + // a spend from the tap script leaf using a committed leaf. + switch { + // If there's only a single element left on the stack (the + // signature), then we'll apply the normal top-level schnorr + // signature verification. + case len(witness) == 1: + // As we only have a single element left (after maybe + // removing the annex), we'll do normal taproot + // keyspend validation. + rawSig := witness[0] + err := VerifyTaprootKeySpend( + vm.witnessProgram, rawSig, &vm.tx, vm.txIdx, + vm.prevOutFetcher, vm.hashCache, vm.sigCache, + ) + if err != nil { + // TODO(roasbeef): proper error + return err + } + + // TODO(roasbeef): or remove the other items from the stack? + vm.taprootCtx.mustSucceed = true + return nil + + // Otherwise, we need to attempt full tapscript leaf + // verification in place. + default: + // First, attempt to parse the control block, if this + // isn't formatted properly, then we'll end execution + // right here. + controlBlock, err := ParseControlBlock( + witness[len(witness)-1], + ) + if err != nil { + return err + } + + // Now that we know the control block is valid, we'll + // verify the top-level taproot commitment, which + // proves that the specified script was committed to in + // the merkle tree. + witnessScript := witness[len(witness)-2] + err = VerifyTaprootLeafCommitment( + controlBlock, vm.witnessProgram, witnessScript, + ) + if err != nil { + return err + } + + // Now that we know the commitment is valid, we'll + // check to see if OP_SUCCESS op codes are found in the + // script. If so, then we'll return here early as we + // skip proper validation. + if ScriptHasOpSuccess(witnessScript) { + // An op success op code has been found, however if + // the policy flag forbidding them is active, then + // we'll return an error. + if vm.hasFlag(ScriptVerifyDiscourageOpSuccess) { + errStr := fmt.Sprintf("script contains " + + "OP_SUCCESS op code") + return scriptError(ErrDiscourageOpSuccess, errStr) + } + + // Otherwise, the script passes scott free. + vm.taprootCtx.mustSucceed = true + return nil + } + + // Before we proceed with normal execution, check the + // leaf version of the script, as if the policy flag is + // active, then we should only allow the base leaf + // version. + if controlBlock.LeafVersion != BaseLeafVersion { + switch { + case vm.hasFlag(ScriptVerifyDiscourageUpgradeableTaprootVersion): + errStr := fmt.Sprintf("tapscript is attempting "+ + "to use version: %v", controlBlock.LeafVersion) + return scriptError( + ErrDiscourageUpgradeableTaprootVersion, errStr, + ) + default: + // If the policy flag isn't active, + // then execution succeeds here as we + // don't know the rules of the future + // leaf versions. + vm.taprootCtx.mustSucceed = true + return nil + } + } + + // Now that we know we don't have any op success + // fields, ensure that the script parses properly. + // + // TODO(roasbeef): combine w/ the above? + err = checkScriptParses(vm.version, witnessScript) + if err != nil { + return err + } + + // Now that we know the script parses, and we have a + // valid leaf version, we'll save the tapscript hash of + // the leaf, as we need that for signature validation + // later. + vm.taprootCtx.tapLeafHash = NewBaseTapLeaf( + witnessScript, + ).TapHash() + + // Otherwise, we'll now "recurse" one level deeper, and + // set the remaining witness (leaving off the annex and + // the witness script) as the execution stack, and + // enter further execution. + vm.scripts = append(vm.scripts, witnessScript) + vm.SetStack(witness[:len(witness)-2]) + } + + case vm.hasFlag(ScriptVerifyDiscourageUpgradeableWitnessProgram): errStr := fmt.Sprintf("new witness program versions "+ "invalid: %v", vm.witnessProgram) + return scriptError(ErrDiscourageUpgradableWitnessProgram, errStr) - } else { + default: // If we encounter an unknown witness program version and we // aren't discouraging future unknown witness based soft-forks, // then we de-activate the segwit behavior within the VM for @@ -341,7 +742,20 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { vm.witnessProgram = nil } - if vm.isWitnessVersionActive(0) { + // TODO(roasbeef): other sanity checks here + switch { + + // In addition to the normal script element size limits, taproot also + // enforces a limit on the max _starting_ stack size. + case vm.isWitnessVersionActive(TaprootWitnessVersion): + if vm.dstack.Depth() > MaxStackSize { + str := fmt.Sprintf("tapscript stack size %d > max allowed %d", + vm.dstack.Depth(), MaxStackSize) + return scriptError(ErrStackOverflow, str) + } + + fallthrough + case vm.isWitnessVersionActive(BaseSegwitWitnessVersion): // All elements within the witness stack must not be greater // than the maximum bytes which are allowed to be pushed onto // the stack. @@ -353,24 +767,58 @@ func (vm *Engine) verifyWitnessProgram(witness [][]byte) error { return scriptError(ErrElementTooBig, str) } } + + return nil } return nil } // DisasmPC returns the string for the disassembly of the opcode that will be -// next to execute when Step() is called. +// next to execute when Step is called. func (vm *Engine) DisasmPC() (string, error) { - scriptIdx, scriptOff, err := vm.curPC() - if err != nil { + if err := vm.checkValidPC(); err != nil { return "", err } - return vm.disasm(scriptIdx, scriptOff), nil + + // Create a copy of the current tokenizer and parse the next opcode in the + // copy to avoid mutating the current one. + peekTokenizer := vm.tokenizer + if !peekTokenizer.Next() { + // Note that due to the fact that all scripts are checked for parse + // failures before this code ever runs, there should never be an error + // here, but check again to be safe in case a refactor breaks that + // assumption or new script versions are introduced with different + // semantics. + if err := peekTokenizer.Err(); err != nil { + return "", err + } + + // Note that this should be impossible to hit in practice because the + // only way it could happen would be for the final opcode of a script to + // already be parsed without the script index having been updated, which + // is not the case since stepping the script always increments the + // script index when parsing and executing the final opcode of a script. + // + // However, check again to be safe in case a refactor breaks that + // assumption or new script versions are introduced with different + // semantics. + str := fmt.Sprintf("program counter beyond script index %d (bytes %x)", + vm.scriptIdx, vm.scripts[vm.scriptIdx]) + return "", scriptError(ErrInvalidProgramCounter, str) + } + + var buf strings.Builder + disasmOpcode(&buf, peekTokenizer.op, peekTokenizer.Data(), false) + return fmt.Sprintf("%02x:%04x: %s", vm.scriptIdx, vm.opcodeIdx, + buf.String()), nil } // DisasmScript returns the disassembly string for the script at the requested // offset index. Index 0 is the signature script and 1 is the public key -// script. +// script. In the case of pay-to-script-hash, index 2 is the redeem script once +// the execution has progressed far enough to have successfully verified script +// hash and thus add the script to the scripts to execute. func (vm *Engine) DisasmScript(idx int) (string, error) { if idx >= len(vm.scripts) { str := fmt.Sprintf("script index %d >= total scripts %d", idx, @@ -378,19 +826,29 @@ func (vm *Engine) DisasmScript(idx int) (string, error) { return "", scriptError(ErrInvalidIndex, str) } - var disstr string - for i := range vm.scripts[idx] { - disstr = disstr + vm.disasm(idx, i) + "\n" + var disbuf strings.Builder + script := vm.scripts[idx] + tokenizer := MakeScriptTokenizer(vm.version, script) + var opcodeIdx int + for tokenizer.Next() { + disbuf.WriteString(fmt.Sprintf("%02x:%04x: ", idx, opcodeIdx)) + disasmOpcode(&disbuf, tokenizer.op, tokenizer.Data(), false) + disbuf.WriteByte('\n') + opcodeIdx++ } - return disstr, nil + return disbuf.String(), tokenizer.Err() } // CheckErrorCondition returns nil if the running script has ended and was // successful, leaving a a true boolean on the stack. An error otherwise, // including if the script has not finished. func (vm *Engine) CheckErrorCondition(finalScript bool) error { - // Check execution is actually done. When pc is past the end of script - // array there are no more scripts to run. + if vm.taprootCtx != nil && vm.taprootCtx.mustSucceed { + return nil + } + + // Check execution is actually done by ensuring the script index is after + // the final script in the array script. if vm.scriptIdx < len(vm.scripts) { return scriptError(ErrScriptUnfinished, "error check when script unfinished") @@ -399,16 +857,20 @@ func (vm *Engine) CheckErrorCondition(finalScript bool) error { // If we're in version zero witness execution mode, and this was the // final script, then the stack MUST be clean in order to maintain // compatibility with BIP16. - if finalScript && vm.isWitnessVersionActive(0) && vm.dstack.Depth() != 1 { + if finalScript && vm.isWitnessVersionActive(BaseSegwitWitnessVersion) && + vm.dstack.Depth() != 1 { return scriptError(ErrEvalFalse, "witness program must "+ "have clean stack") } - if finalScript && vm.hasFlag(ScriptVerifyCleanStack) && - vm.dstack.Depth() != 1 { + // The final script must end with exactly one data stack item when the + // verify clean stack flag is set. Otherwise, there must be at least one + // data stack item in order to interpret it as a boolean. + cleanStackActive := vm.hasFlag(ScriptVerifyCleanStack) || vm.taprootCtx != nil + if finalScript && cleanStackActive && vm.dstack.Depth() != 1 { - str := fmt.Sprintf("stack contains %d unexpected items", - vm.dstack.Depth()-1) + str := fmt.Sprintf("stack must contain exactly one item (contains %d)", + vm.dstack.Depth()) return scriptError(ErrCleanStack, str) } else if vm.dstack.Depth() < 1 { return scriptError(ErrEmptyStack, @@ -422,10 +884,14 @@ func (vm *Engine) CheckErrorCondition(finalScript bool) error { if !v { // Log interesting data. log.Tracef("%v", newLogClosure(func() string { - dis0, _ := vm.DisasmScript(0) - dis1, _ := vm.DisasmScript(1) - return fmt.Sprintf("scripts failed: script0: %s\n"+ - "script1: %s", dis0, dis1) + var buf strings.Builder + buf.WriteString("scripts failed:\n") + for i := range vm.scripts { + dis, _ := vm.DisasmScript(i) + buf.WriteString(fmt.Sprintf("script%d:\n", i)) + buf.WriteString(dis) + } + return buf.String() })) return scriptError(ErrEvalFalse, "false stack entry at end of script execution") @@ -433,25 +899,38 @@ func (vm *Engine) CheckErrorCondition(finalScript bool) error { return nil } -// Step will execute the next instruction and move the program counter to the -// next opcode in the script, or the next script if the current has ended. Step -// will return true in the case that the last opcode was successfully executed. +// Step executes the next instruction and moves the program counter to the next +// opcode in the script, or the next script if the current has ended. Step will +// return true in the case that the last opcode was successfully executed. // // The result of calling Step or any other method is undefined if an error is // returned. func (vm *Engine) Step() (done bool, err error) { - // Verify that it is pointing to a valid script address. - err = vm.validPC() - if err != nil { + // Verify the engine is pointing to a valid program counter. + if err := vm.checkValidPC(); err != nil { return true, err } - opcode := &vm.scripts[vm.scriptIdx][vm.scriptOff] - vm.scriptOff++ + + // Attempt to parse the next opcode from the current script. + if !vm.tokenizer.Next() { + // Note that due to the fact that all scripts are checked for parse + // failures before this code ever runs, there should never be an error + // here, but check again to be safe in case a refactor breaks that + // assumption or new script versions are introduced with different + // semantics. + if err := vm.tokenizer.Err(); err != nil { + return false, err + } + + str := fmt.Sprintf("attempt to step beyond script index %d (bytes %x)", + vm.scriptIdx, vm.scripts[vm.scriptIdx]) + return true, scriptError(ErrInvalidProgramCounter, str) + } // Execute the opcode while taking into account several things such as - // disabled opcodes, illegal opcodes, maximum allowed operations per - // script, maximum script element sizes, and conditionals. - err = vm.executeOpcode(opcode) + // disabled opcodes, illegal opcodes, maximum allowed operations per script, + // maximum script element sizes, and conditionals. + err = vm.executeOpcode(vm.tokenizer.op, vm.tokenizer.Data()) if err != nil { return true, err } @@ -466,43 +945,53 @@ func (vm *Engine) Step() (done bool, err error) { } // Prepare for next instruction. - if vm.scriptOff >= len(vm.scripts[vm.scriptIdx]) { - // Illegal to have an `if' that straddles two scripts. - if err == nil && len(vm.condStack) != 0 { + vm.opcodeIdx++ + if vm.tokenizer.Done() { + // Illegal to have a conditional that straddles two scripts. + if len(vm.condStack) != 0 { return false, scriptError(ErrUnbalancedConditional, "end of script reached in conditional execution") } - // Alt stack doesn't persist. + // Alt stack doesn't persist between scripts. _ = vm.astack.DropN(vm.astack.Depth()) - vm.numOps = 0 // number of ops is per script. - vm.scriptOff = 0 - if vm.scriptIdx == 0 && vm.bip16 { + // The number of operations is per script. + vm.numOps = 0 + + // Reset the opcode index for the next script. + vm.opcodeIdx = 0 + + // Advance to the next script as needed. + switch { + case vm.scriptIdx == 0 && vm.bip16: vm.scriptIdx++ vm.savedFirstStack = vm.GetStack() - } else if vm.scriptIdx == 1 && vm.bip16 { + + case vm.scriptIdx == 1 && vm.bip16: // Put us past the end for CheckErrorCondition() vm.scriptIdx++ - // Check script ran successfully and pull the script - // out of the first stack and execute that. + + // Check script ran successfully. err := vm.CheckErrorCondition(false) if err != nil { return false, err } + // Obtain the redeem script from the first stack and ensure it + // parses. script := vm.savedFirstStack[len(vm.savedFirstStack)-1] - pops, err := parseScript(script) - if err != nil { + if err := checkScriptParses(vm.version, script); err != nil { return false, err } - vm.scripts = append(vm.scripts, pops) + vm.scripts = append(vm.scripts, script) - // Set stack to be the stack from first script minus the + // Set stack to be the stack from first script minus the redeem // script itself vm.SetStack(vm.savedFirstStack[:len(vm.savedFirstStack)-1]) - } else if (vm.scriptIdx == 1 && vm.witnessProgram != nil) || - (vm.scriptIdx == 2 && vm.witnessProgram != nil && vm.bip16) { // Nested P2SH. + + case vm.scriptIdx == 1 && vm.witnessProgram != nil, + vm.scriptIdx == 2 && vm.witnessProgram != nil && vm.bip16: // np2sh vm.scriptIdx++ @@ -510,30 +999,46 @@ func (vm *Engine) Step() (done bool, err error) { if err := vm.verifyWitnessProgram(witness); err != nil { return false, err } - } else { + + default: vm.scriptIdx++ } - // there are zero length scripts in the wild - if vm.scriptIdx < len(vm.scripts) && vm.scriptOff >= len(vm.scripts[vm.scriptIdx]) { + + // Skip empty scripts. + if vm.scriptIdx < len(vm.scripts) && len(vm.scripts[vm.scriptIdx]) == 0 { vm.scriptIdx++ } + vm.lastCodeSep = 0 if vm.scriptIdx >= len(vm.scripts) { return true, nil } + + // Finally, update the current tokenizer used to parse through scripts + // one opcode at a time to start from the beginning of the new script + // associated with the program counter. + vm.tokenizer = MakeScriptTokenizer(vm.version, vm.scripts[vm.scriptIdx]) } + return false, nil } // Execute will execute all scripts in the script engine and return either nil // for successful validation or an error if one occurred. func (vm *Engine) Execute() (err error) { + // All script versions other than 0 currently execute without issue, + // making all outputs to them anyone can pay. In the future this + // will allow for the addition of new scripting languages. + if vm.version != 0 { + return nil + } + done := false for !done { log.Tracef("%v", newLogClosure(func() string { dis, err := vm.DisasmPC() if err != nil { - return fmt.Sprintf("stepping (%v)", err) + return fmt.Sprintf("stepping - failed to disasm pc: %v", err) } return fmt.Sprintf("stepping %v", dis) })) @@ -545,7 +1050,7 @@ func (vm *Engine) Execute() (err error) { log.Tracef("%v", newLogClosure(func() string { var dstr, astr string - // if we're tracing, dump the stacks. + // Log the non-empty stacks when tracing. if vm.dstack.Depth() != 0 { dstr = "Stack:\n" + vm.dstack.String() } @@ -561,7 +1066,7 @@ func (vm *Engine) Execute() (err error) { } // subScript returns the script since the last OP_CODESEPARATOR. -func (vm *Engine) subScript() []parsedOpcode { +func (vm *Engine) subScript() []byte { return vm.scripts[vm.scriptIdx][vm.lastCodeSep:] } @@ -580,13 +1085,35 @@ func (vm *Engine) checkHashTypeEncoding(hashType SigHashType) error { return nil } +// isStrictPubKeyEncoding returns whether or not the passed public key adheres +// to the strict encoding requirements. +func isStrictPubKeyEncoding(pubKey []byte) bool { + if len(pubKey) == 33 && (pubKey[0] == 0x02 || pubKey[0] == 0x03) { + // Compressed + return true + } + if len(pubKey) == 65 { + switch pubKey[0] { + case 0x04: + // Uncompressed + return true + + case 0x06, 0x07: + // Hybrid + return true + } + } + return false +} + // checkPubKeyEncoding returns whether or not the passed public key adheres to // the strict encoding requirements if enabled. func (vm *Engine) checkPubKeyEncoding(pubKey []byte) error { if vm.hasFlag(ScriptVerifyWitnessPubKeyType) && - vm.isWitnessVersionActive(0) && !btcec.IsCompressedPubKey(pubKey) { + vm.isWitnessVersionActive(BaseSegwitWitnessVersion) && + !btcec.IsCompressedPubKey(pubKey) { - str := "only uncompressed keys are accepted post-segwit" + str := "only compressed keys are accepted post-segwit" return scriptError(ErrWitnessPubKeyType, str) } @@ -853,7 +1380,10 @@ func (vm *Engine) SetAltStack(data [][]byte) { // transaction, and input index. The flags modify the behavior of the script // engine according to the description provided by each flag. func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags, - sigCache *SigCache, hashCache *TxSigHashes, inputAmount int64) (*Engine, error) { + sigCache *SigCache, hashCache *TxSigHashes, inputAmount int64, + prevOutFetcher PrevOutputFetcher) (*Engine, error) { + + const scriptVersion = 0 // The provided transaction input index must refer to a valid input. if txIdx < 0 || txIdx >= len(tx.TxIn) { @@ -863,10 +1393,10 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags } scriptSig := tx.TxIn[txIdx].SignatureScript - // When both the signature script and public key script are empty the - // result is necessarily an error since the stack would end up being - // empty which is equivalent to a false top element. Thus, just return - // the relevant error now as an optimization. + // When both the signature script and public key script are empty the result + // is necessarily an error since the stack would end up being empty which is + // equivalent to a false top element. Thus, just return the relevant error + // now as an optimization. if len(scriptSig) == 0 && len(scriptPubKey) == 0 { return nil, scriptError(ErrEvalFalse, "false stack entry at end of script execution") @@ -882,8 +1412,13 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags // it possible to have a situation where P2SH would not be a soft fork // when it should be. The same goes for segwit which will pull in // additional scripts for execution from the witness stack. - vm := Engine{flags: flags, sigCache: sigCache, hashCache: hashCache, - inputAmount: inputAmount} + vm := Engine{ + flags: flags, + sigCache: sigCache, + hashCache: hashCache, + inputAmount: inputAmount, + prevOutFetcher: prevOutFetcher, + } if vm.hasFlag(ScriptVerifyCleanStack) && (!vm.hasFlag(ScriptBip16) && !vm.hasFlag(ScriptVerifyWitness)) { return nil, scriptError(ErrInvalidFlags, @@ -897,40 +1432,45 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags "signature script is not push only") } - // The engine stores the scripts in parsed form using a slice. This - // allows multiple scripts to be executed in sequence. For example, - // with a pay-to-script-hash transaction, there will be ultimately be - // a third script to execute. + // The signature script must only contain data pushes for PS2H which is + // determined based on the form of the public key script. + if vm.hasFlag(ScriptBip16) && isScriptHashScript(scriptPubKey) { + // Only accept input scripts that push data for P2SH. + // Notice that the push only checks have already been done when + // the flag to verify signature scripts are push only is set + // above, so avoid checking again. + alreadyChecked := vm.hasFlag(ScriptVerifySigPushOnly) + if !alreadyChecked && !IsPushOnlyScript(scriptSig) { + return nil, scriptError(ErrNotPushOnly, + "pay to script hash is not push only") + } + vm.bip16 = true + } + + // The engine stores the scripts using a slice. This allows multiple + // scripts to be executed in sequence. For example, with a + // pay-to-script-hash transaction, there will be ultimately be a third + // script to execute. scripts := [][]byte{scriptSig, scriptPubKey} - vm.scripts = make([][]parsedOpcode, len(scripts)) - for i, scr := range scripts { + for _, scr := range scripts { if len(scr) > MaxScriptSize { - str := fmt.Sprintf("script size %d is larger than max "+ - "allowed size %d", len(scr), MaxScriptSize) + str := fmt.Sprintf("script size %d is larger than max allowed "+ + "size %d", len(scr), MaxScriptSize) return nil, scriptError(ErrScriptTooBig, str) } - var err error - vm.scripts[i], err = parseScript(scr) - if err != nil { + + const scriptVersion = 0 + if err := checkScriptParses(scriptVersion, scr); err != nil { return nil, err } } + vm.scripts = scripts // Advance the program counter to the public key script if the signature - // script is empty since there is nothing to execute for it in that - // case. - if len(scripts[0]) == 0 { + // script is empty since there is nothing to execute for it in that case. + if len(scriptSig) == 0 { vm.scriptIdx++ } - - if vm.hasFlag(ScriptBip16) && isScriptHash(vm.scripts[1]) { - // Only accept input scripts that push data for P2SH. - if !isPushOnly(vm.scripts[0]) { - return nil, scriptError(ErrNotPushOnly, - "pay to script hash is not push only") - } - vm.bip16 = true - } if vm.hasFlag(ScriptVerifyMinimalData) { vm.dstack.verifyMinimalData = true vm.astack.verifyMinimalData = true @@ -952,7 +1492,7 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags var witProgram []byte switch { - case isWitnessProgram(vm.scripts[1]): + case IsWitnessProgram(vm.scripts[1]): // The scriptSig must be *empty* for all native witness // programs, otherwise we introduce malleability. if len(scriptSig) != 0 { @@ -967,10 +1507,11 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags // data push of the witness program, otherwise we // reintroduce malleability. sigPops := vm.scripts[0] - if len(sigPops) == 1 && canonicalPush(sigPops[0]) && - IsWitnessProgram(sigPops[0].data) { + if len(sigPops) > 2 && + isCanonicalPush(sigPops[0], sigPops[1:]) && + IsWitnessProgram(sigPops[1:]) { - witProgram = sigPops[0].data + witProgram = sigPops[1:] } else { errStr := "signature script for witness " + "nested p2sh is not canonical" @@ -980,7 +1521,9 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags if witProgram != nil { var err error - vm.witnessVersion, vm.witnessProgram, err = ExtractWitnessProgramInfo(witProgram) + vm.witnessVersion, vm.witnessProgram, err = ExtractWitnessProgramInfo( + witProgram, + ) if err != nil { return nil, err } @@ -997,6 +1540,10 @@ func NewEngine(scriptPubKey []byte, tx *wire.MsgTx, txIdx int, flags ScriptFlags } + // Setup the current tokenizer used to parse through the script one opcode + // at a time with the script associated with the program counter. + vm.tokenizer = MakeScriptTokenizer(scriptVersion, scripts[vm.scriptIdx]) + vm.tx = *tx vm.txIdx = txIdx diff --git a/txscript/engine_test.go b/txscript/engine_test.go index 2e8c522c1a..51a899be33 100644 --- a/txscript/engine_test.go +++ b/txscript/engine_test.go @@ -1,4 +1,5 @@ // Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2019 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -11,16 +12,16 @@ import ( "github.com/btcsuite/btcd/wire" ) -// TestBadPC sets the pc to a deliberately bad result then confirms that Step() +// TestBadPC sets the pc to a deliberately bad result then confirms that Step // and Disasm fail correctly. func TestBadPC(t *testing.T) { t.Parallel() tests := []struct { - script, off int + scriptIdx int }{ - {script: 2, off: 0}, - {script: 0, off: 2}, + {scriptIdx: 2}, + {scriptIdx: 3}, } // tx with almost empty scripts. @@ -54,25 +55,25 @@ func TestBadPC(t *testing.T) { pkScript := mustParseShortForm("NOP") for _, test := range tests { - vm, err := NewEngine(pkScript, tx, 0, 0, nil, nil, -1) + vm, err := NewEngine(pkScript, tx, 0, 0, nil, nil, -1, nil) if err != nil { t.Errorf("Failed to create script: %v", err) } - // set to after all scripts - vm.scriptIdx = test.script - vm.scriptOff = test.off + // Set to after all scripts. + vm.scriptIdx = test.scriptIdx + // Ensure attempting to step fails. _, err = vm.Step() if err == nil { t.Errorf("Step with invalid pc (%v) succeeds!", test) continue } + // Ensure attempting to disassemble the current program counter fails. _, err = vm.DisasmPC() if err == nil { - t.Errorf("DisasmPC with invalid pc (%v) succeeds!", - test) + t.Errorf("DisasmPC with invalid pc (%v) succeeds!", test) } } } @@ -111,7 +112,7 @@ func TestCheckErrorCondition(t *testing.T) { pkScript := mustParseShortForm("NOP NOP NOP NOP NOP NOP NOP NOP NOP" + " NOP TRUE") - vm, err := NewEngine(pkScript, tx, 0, 0, nil, nil, 0) + vm, err := NewEngine(pkScript, tx, 0, 0, nil, nil, 0, nil) if err != nil { t.Errorf("failed to create script: %v", err) } @@ -187,7 +188,7 @@ func TestInvalidFlagCombinations(t *testing.T) { pkScript := []byte{OP_NOP} for i, test := range tests { - _, err := NewEngine(pkScript, tx, 0, test, nil, nil, -1) + _, err := NewEngine(pkScript, tx, 0, test, nil, nil, -1, nil) if !IsErrorCode(err, ErrInvalidFlags) { t.Fatalf("TestInvalidFlagCombinations #%d unexpected "+ "error: %v", i, err) diff --git a/txscript/error.go b/txscript/error.go index a61d02729f..072778a268 100644 --- a/txscript/error.go +++ b/txscript/error.go @@ -1,4 +1,5 @@ // Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2019 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -47,6 +48,10 @@ const ( // the provided data exceeds MaxDataCarrierSize. ErrTooMuchNullData + // ErrUnsupportedScriptVersion is returned when an unsupported script + // version is passed to a function which deals with script analysis. + ErrUnsupportedScriptVersion + // ------------------------------------------ // Failures related to final execution state. // ------------------------------------------ @@ -338,6 +343,71 @@ const ( // serialized in a compressed format. ErrWitnessPubKeyType + // ---------------------------- + // Failures related to taproot. + // ---------------------------- + + // ErrDiscourageOpSuccess is returned if + // ScriptVerifyDiscourageOpSuccess is active, and a OP_SUCCESS op code + // is encountered during tapscript validation. + ErrDiscourageOpSuccess + + // ErrDiscourageUpgradeableTaprootVersion is returned if + // ScriptVerifyDiscourageUpgradeableTaprootVersion is active and a leaf + // version encountered isn't the base leaf version. + ErrDiscourageUpgradeableTaprootVersion + + // ErrTapscriptCheckMultisig is returned if a script attempts to use + // OP_CHECKMULTISIGVERIFY or OP_CHECKMULTISIG during tapscript + // execution. + ErrTapscriptCheckMultisig + + // ErrDiscourageUpgradeableTaprootVersion is returned if during + // tapscript execution, we encoutner a public key that isn't 0 or 32 + // bytes. + ErrDiscourageUpgradeablePubKeyType + + // ErrTaprootSigInvalid is returned when an invalid taproot key spend + // signature is encountered. + ErrTaprootSigInvalid + + // ErrTaprootMerkleProofInvalid is returned when the revealed script + // merkle proof for a taproot spend is found to be invalid. + ErrTaprootMerkleProofInvalid + + // ErrTaprootOutputKeyParityMismatch is returned when the control block + // proof is valid, but the parity of the y-coordinate of the derived + // key doesn't match the value encoded in the control block. + ErrTaprootOutputKeyParityMismatch + + // ErrControlBlockTooSmall is returned when a parsed control block is + // less than 33 bytes. + ErrControlBlockTooSmall + + // ErrControlBlockTooLarge is returned when the control block is larger + // than the largest possible proof for a merkle script tree. + ErrControlBlockTooLarge + + // ErrControlBlockInvalidLength is returned when the control block, + // without the public key isn't a multiple of 32. + ErrControlBlockInvalidLength + + // ErrWitnessHasNoAnnex is returned when a caller attempts to extract + // an annex, but the witness has no annex present. + ErrWitnessHasNoAnnex + + // ErrInvalidTaprootSigLen is returned when taproot signature isn't 64 + // or 65 bytes. + ErrInvalidTaprootSigLen + + // ErrTaprootPubkeyIsEmpty is returned when a signature checking op + // code encounters an empty public key. + ErrTaprootPubkeyIsEmpty + + // ErrTaprootMaxSigOps is returned when the number of allotted sig ops + // is exceeded during taproot execution. + ErrTaprootMaxSigOps + // numErrorCodes is the maximum error code number used in tests. This // entry MUST be the last entry in the enum. numErrorCodes @@ -345,70 +415,85 @@ const ( // Map of ErrorCode values back to their constant names for pretty printing. var errorCodeStrings = map[ErrorCode]string{ - ErrInternal: "ErrInternal", - ErrInvalidFlags: "ErrInvalidFlags", - ErrInvalidIndex: "ErrInvalidIndex", - ErrUnsupportedAddress: "ErrUnsupportedAddress", - ErrNotMultisigScript: "ErrNotMultisigScript", - ErrTooManyRequiredSigs: "ErrTooManyRequiredSigs", - ErrTooMuchNullData: "ErrTooMuchNullData", - ErrEarlyReturn: "ErrEarlyReturn", - ErrEmptyStack: "ErrEmptyStack", - ErrEvalFalse: "ErrEvalFalse", - ErrScriptUnfinished: "ErrScriptUnfinished", - ErrInvalidProgramCounter: "ErrInvalidProgramCounter", - ErrScriptTooBig: "ErrScriptTooBig", - ErrElementTooBig: "ErrElementTooBig", - ErrTooManyOperations: "ErrTooManyOperations", - ErrStackOverflow: "ErrStackOverflow", - ErrInvalidPubKeyCount: "ErrInvalidPubKeyCount", - ErrInvalidSignatureCount: "ErrInvalidSignatureCount", - ErrNumberTooBig: "ErrNumberTooBig", - ErrVerify: "ErrVerify", - ErrEqualVerify: "ErrEqualVerify", - ErrNumEqualVerify: "ErrNumEqualVerify", - ErrCheckSigVerify: "ErrCheckSigVerify", - ErrCheckMultiSigVerify: "ErrCheckMultiSigVerify", - ErrDisabledOpcode: "ErrDisabledOpcode", - ErrReservedOpcode: "ErrReservedOpcode", - ErrMalformedPush: "ErrMalformedPush", - ErrInvalidStackOperation: "ErrInvalidStackOperation", - ErrUnbalancedConditional: "ErrUnbalancedConditional", - ErrMinimalData: "ErrMinimalData", - ErrInvalidSigHashType: "ErrInvalidSigHashType", - ErrSigTooShort: "ErrSigTooShort", - ErrSigTooLong: "ErrSigTooLong", - ErrSigInvalidSeqID: "ErrSigInvalidSeqID", - ErrSigInvalidDataLen: "ErrSigInvalidDataLen", - ErrSigMissingSTypeID: "ErrSigMissingSTypeID", - ErrSigMissingSLen: "ErrSigMissingSLen", - ErrSigInvalidSLen: "ErrSigInvalidSLen", - ErrSigInvalidRIntID: "ErrSigInvalidRIntID", - ErrSigZeroRLen: "ErrSigZeroRLen", - ErrSigNegativeR: "ErrSigNegativeR", - ErrSigTooMuchRPadding: "ErrSigTooMuchRPadding", - ErrSigInvalidSIntID: "ErrSigInvalidSIntID", - ErrSigZeroSLen: "ErrSigZeroSLen", - ErrSigNegativeS: "ErrSigNegativeS", - ErrSigTooMuchSPadding: "ErrSigTooMuchSPadding", - ErrSigHighS: "ErrSigHighS", - ErrNotPushOnly: "ErrNotPushOnly", - ErrSigNullDummy: "ErrSigNullDummy", - ErrPubKeyType: "ErrPubKeyType", - ErrCleanStack: "ErrCleanStack", - ErrNullFail: "ErrNullFail", - ErrDiscourageUpgradableNOPs: "ErrDiscourageUpgradableNOPs", - ErrNegativeLockTime: "ErrNegativeLockTime", - ErrUnsatisfiedLockTime: "ErrUnsatisfiedLockTime", - ErrWitnessProgramEmpty: "ErrWitnessProgramEmpty", - ErrWitnessProgramMismatch: "ErrWitnessProgramMismatch", - ErrWitnessProgramWrongLength: "ErrWitnessProgramWrongLength", - ErrWitnessMalleated: "ErrWitnessMalleated", - ErrWitnessMalleatedP2SH: "ErrWitnessMalleatedP2SH", - ErrWitnessUnexpected: "ErrWitnessUnexpected", - ErrMinimalIf: "ErrMinimalIf", - ErrWitnessPubKeyType: "ErrWitnessPubKeyType", - ErrDiscourageUpgradableWitnessProgram: "ErrDiscourageUpgradableWitnessProgram", + ErrInternal: "ErrInternal", + ErrInvalidFlags: "ErrInvalidFlags", + ErrInvalidIndex: "ErrInvalidIndex", + ErrUnsupportedAddress: "ErrUnsupportedAddress", + ErrNotMultisigScript: "ErrNotMultisigScript", + ErrTooManyRequiredSigs: "ErrTooManyRequiredSigs", + ErrTooMuchNullData: "ErrTooMuchNullData", + ErrUnsupportedScriptVersion: "ErrUnsupportedScriptVersion", + ErrEarlyReturn: "ErrEarlyReturn", + ErrEmptyStack: "ErrEmptyStack", + ErrEvalFalse: "ErrEvalFalse", + ErrScriptUnfinished: "ErrScriptUnfinished", + ErrInvalidProgramCounter: "ErrInvalidProgramCounter", + ErrScriptTooBig: "ErrScriptTooBig", + ErrElementTooBig: "ErrElementTooBig", + ErrTooManyOperations: "ErrTooManyOperations", + ErrStackOverflow: "ErrStackOverflow", + ErrInvalidPubKeyCount: "ErrInvalidPubKeyCount", + ErrInvalidSignatureCount: "ErrInvalidSignatureCount", + ErrNumberTooBig: "ErrNumberTooBig", + ErrVerify: "ErrVerify", + ErrEqualVerify: "ErrEqualVerify", + ErrNumEqualVerify: "ErrNumEqualVerify", + ErrCheckSigVerify: "ErrCheckSigVerify", + ErrCheckMultiSigVerify: "ErrCheckMultiSigVerify", + ErrDisabledOpcode: "ErrDisabledOpcode", + ErrReservedOpcode: "ErrReservedOpcode", + ErrMalformedPush: "ErrMalformedPush", + ErrInvalidStackOperation: "ErrInvalidStackOperation", + ErrUnbalancedConditional: "ErrUnbalancedConditional", + ErrMinimalData: "ErrMinimalData", + ErrInvalidSigHashType: "ErrInvalidSigHashType", + ErrSigTooShort: "ErrSigTooShort", + ErrSigTooLong: "ErrSigTooLong", + ErrSigInvalidSeqID: "ErrSigInvalidSeqID", + ErrSigInvalidDataLen: "ErrSigInvalidDataLen", + ErrSigMissingSTypeID: "ErrSigMissingSTypeID", + ErrSigMissingSLen: "ErrSigMissingSLen", + ErrSigInvalidSLen: "ErrSigInvalidSLen", + ErrSigInvalidRIntID: "ErrSigInvalidRIntID", + ErrSigZeroRLen: "ErrSigZeroRLen", + ErrSigNegativeR: "ErrSigNegativeR", + ErrSigTooMuchRPadding: "ErrSigTooMuchRPadding", + ErrSigInvalidSIntID: "ErrSigInvalidSIntID", + ErrSigZeroSLen: "ErrSigZeroSLen", + ErrSigNegativeS: "ErrSigNegativeS", + ErrSigTooMuchSPadding: "ErrSigTooMuchSPadding", + ErrSigHighS: "ErrSigHighS", + ErrNotPushOnly: "ErrNotPushOnly", + ErrSigNullDummy: "ErrSigNullDummy", + ErrPubKeyType: "ErrPubKeyType", + ErrCleanStack: "ErrCleanStack", + ErrNullFail: "ErrNullFail", + ErrDiscourageUpgradableNOPs: "ErrDiscourageUpgradableNOPs", + ErrNegativeLockTime: "ErrNegativeLockTime", + ErrUnsatisfiedLockTime: "ErrUnsatisfiedLockTime", + ErrWitnessProgramEmpty: "ErrWitnessProgramEmpty", + ErrWitnessProgramMismatch: "ErrWitnessProgramMismatch", + ErrWitnessProgramWrongLength: "ErrWitnessProgramWrongLength", + ErrWitnessMalleated: "ErrWitnessMalleated", + ErrWitnessMalleatedP2SH: "ErrWitnessMalleatedP2SH", + ErrWitnessUnexpected: "ErrWitnessUnexpected", + ErrMinimalIf: "ErrMinimalIf", + ErrWitnessPubKeyType: "ErrWitnessPubKeyType", + ErrDiscourageUpgradableWitnessProgram: "ErrDiscourageUpgradableWitnessProgram", + ErrDiscourageOpSuccess: "ErrDiscourageOpSuccess", + ErrDiscourageUpgradeableTaprootVersion: "ErrDiscourageUpgradeableTaprootVersion", + ErrTapscriptCheckMultisig: "ErrTapscriptCheckMultisig", + ErrDiscourageUpgradeablePubKeyType: "ErrDiscourageUpgradeablePubKeyType", + ErrTaprootSigInvalid: "ErrTaprootSigInvalid", + ErrTaprootMerkleProofInvalid: "ErrTaprootMerkleProofInvalid", + ErrTaprootOutputKeyParityMismatch: "ErrTaprootOutputKeyParityMismatch", + ErrControlBlockTooSmall: "ErrControlBlockTooSmall", + ErrControlBlockTooLarge: "ErrControlBlockTooLarge", + ErrControlBlockInvalidLength: "ErrControlBlockInvalidLength", + ErrWitnessHasNoAnnex: "ErrWitnessHasNoAnnex", + ErrInvalidTaprootSigLen: "ErrInvalidTaprootSigLen", + ErrTaprootPubkeyIsEmpty: "ErrTaprootPubkeyIsEmpty", + ErrTaprootMaxSigOps: "ErrTaprootMaxSigOps", } // String returns the ErrorCode as a human-readable name. diff --git a/txscript/error_test.go b/txscript/error_test.go index ebac85fdaa..accdf11a8c 100644 --- a/txscript/error_test.go +++ b/txscript/error_test.go @@ -1,4 +1,5 @@ // Copyright (c) 2017 The btcsuite developers +// Copyright (c) 2015-2019 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -22,6 +23,7 @@ func TestErrorCodeStringer(t *testing.T) { {ErrUnsupportedAddress, "ErrUnsupportedAddress"}, {ErrTooManyRequiredSigs, "ErrTooManyRequiredSigs"}, {ErrTooMuchNullData, "ErrTooMuchNullData"}, + {ErrUnsupportedScriptVersion, "ErrUnsupportedScriptVersion"}, {ErrNotMultisigScript, "ErrNotMultisigScript"}, {ErrEarlyReturn, "ErrEarlyReturn"}, {ErrEmptyStack, "ErrEmptyStack"}, @@ -79,7 +81,21 @@ func TestErrorCodeStringer(t *testing.T) { {ErrWitnessUnexpected, "ErrWitnessUnexpected"}, {ErrMinimalIf, "ErrMinimalIf"}, {ErrWitnessPubKeyType, "ErrWitnessPubKeyType"}, + {ErrDiscourageOpSuccess, "ErrDiscourageOpSuccess"}, + {ErrDiscourageUpgradeableTaprootVersion, "ErrDiscourageUpgradeableTaprootVersion"}, + {ErrTapscriptCheckMultisig, "ErrTapscriptCheckMultisig"}, {ErrDiscourageUpgradableWitnessProgram, "ErrDiscourageUpgradableWitnessProgram"}, + {ErrDiscourageUpgradeablePubKeyType, "ErrDiscourageUpgradeablePubKeyType"}, + {ErrTaprootSigInvalid, "ErrTaprootSigInvalid"}, + {ErrTaprootMerkleProofInvalid, "ErrTaprootMerkleProofInvalid"}, + {ErrTaprootOutputKeyParityMismatch, "ErrTaprootOutputKeyParityMismatch"}, + {ErrControlBlockTooSmall, "ErrControlBlockTooSmall"}, + {ErrControlBlockTooLarge, "ErrControlBlockTooLarge"}, + {ErrControlBlockInvalidLength, "ErrControlBlockInvalidLength"}, + {ErrWitnessHasNoAnnex, "ErrWitnessHasNoAnnex"}, + {ErrInvalidTaprootSigLen, "ErrInvalidTaprootSigLen"}, + {ErrTaprootPubkeyIsEmpty, "ErrTaprootPubkeyIsEmpty"}, + {ErrTaprootMaxSigOps, "ErrTaprootMaxSigOps"}, {0xffff, "Unknown ErrorCode (65535)"}, } diff --git a/txscript/example_test.go b/txscript/example_test.go index 7bf2b3f059..b8c7104b5a 100644 --- a/txscript/example_test.go +++ b/txscript/example_test.go @@ -1,4 +1,5 @@ // Copyright (c) 2014-2016 The btcsuite developers +// Copyright (c) 2015-2019 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -8,12 +9,12 @@ import ( "encoding/hex" "fmt" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/txscript" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // This example demonstrates creating a script which pays to a bitcoin address. @@ -89,7 +90,7 @@ func ExampleSignTxOutput() { fmt.Println(err) return } - privKey, pubKey := btcec.PrivKeyFromBytes(btcec.S256(), privKeyBytes) + privKey, pubKey := btcec.PrivKeyFromBytes(privKeyBytes) pubKeyHash := btcutil.Hash160(pubKey.SerializeCompressed()) addr, err := btcutil.NewAddressPubKeyHash(pubKeyHash, &chaincfg.MainNetParams) @@ -166,7 +167,7 @@ func ExampleSignTxOutput() { txscript.ScriptStrictMultiSig | txscript.ScriptDiscourageUpgradableNops vm, err := txscript.NewEngine(originTx.TxOut[0].PkScript, redeemTx, 0, - flags, nil, nil, -1) + flags, nil, nil, -1, nil) if err != nil { fmt.Println(err) return @@ -180,3 +181,34 @@ func ExampleSignTxOutput() { // Output: // Transaction successfully signed } + +// This example demonstrates creating a script tokenizer instance and using it +// to count the number of opcodes a script contains. +func ExampleScriptTokenizer() { + // Create a script to use in the example. Ordinarily this would come from + // some other source. + hash160 := btcutil.Hash160([]byte("example")) + script, err := txscript.NewScriptBuilder().AddOp(txscript.OP_DUP). + AddOp(txscript.OP_HASH160).AddData(hash160). + AddOp(txscript.OP_EQUALVERIFY).AddOp(txscript.OP_CHECKSIG).Script() + if err != nil { + fmt.Printf("failed to build script: %v\n", err) + return + } + + // Create a tokenizer to iterate the script and count the number of opcodes. + const scriptVersion = 0 + var numOpcodes int + tokenizer := txscript.MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + numOpcodes++ + } + if tokenizer.Err() != nil { + fmt.Printf("script failed to parse: %v\n", err) + } else { + fmt.Printf("script contains %d opcode(s)\n", numOpcodes) + } + + // Output: + // script contains 5 opcode(s) +} diff --git a/txscript/hashcache.go b/txscript/hashcache.go index f9c2caf76c..4a5f88fb24 100644 --- a/txscript/hashcache.go +++ b/txscript/hashcache.go @@ -5,30 +5,293 @@ package txscript import ( + "bytes" + "encoding/binary" + "math" "sync" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) +// calcHashPrevOuts calculates a single hash of all the previous outputs +// (txid:index) referenced within the passed transaction. This calculated hash +// can be re-used when validating all inputs spending segwit outputs, with a +// signature hash type of SigHashAll. This allows validation to re-use previous +// hashing computation, reducing the complexity of validating SigHashAll inputs +// from O(N^2) to O(N). +func calcHashPrevOuts(tx *wire.MsgTx) chainhash.Hash { + var b bytes.Buffer + for _, in := range tx.TxIn { + // First write out the 32-byte transaction ID one of whose + // outputs are being referenced by this input. + b.Write(in.PreviousOutPoint.Hash[:]) + + // Next, we'll encode the index of the referenced output as a + // little endian integer. + var buf [4]byte + binary.LittleEndian.PutUint32(buf[:], in.PreviousOutPoint.Index) + b.Write(buf[:]) + } + + return chainhash.HashH(b.Bytes()) +} + +// calcHashSequence computes an aggregated hash of each of the sequence numbers +// within the inputs of the passed transaction. This single hash can be re-used +// when validating all inputs spending segwit outputs, which include signatures +// using the SigHashAll sighash type. This allows validation to re-use previous +// hashing computation, reducing the complexity of validating SigHashAll inputs +// from O(N^2) to O(N). +func calcHashSequence(tx *wire.MsgTx) chainhash.Hash { + var b bytes.Buffer + for _, in := range tx.TxIn { + var buf [4]byte + binary.LittleEndian.PutUint32(buf[:], in.Sequence) + b.Write(buf[:]) + } + + return chainhash.HashH(b.Bytes()) +} + +// calcHashOutputs computes a hash digest of all outputs created by the +// transaction encoded using the wire format. This single hash can be re-used +// when validating all inputs spending witness programs, which include +// signatures using the SigHashAll sighash type. This allows computation to be +// cached, reducing the total hashing complexity from O(N^2) to O(N). +func calcHashOutputs(tx *wire.MsgTx) chainhash.Hash { + var b bytes.Buffer + for _, out := range tx.TxOut { + wire.WriteTxOut(&b, 0, 0, out) + } + + return chainhash.HashH(b.Bytes()) +} + +// PrevOutputFetcher is an interface used to supply the sighash cache with the +// previous output information needed to calculate the pre-computed sighash +// midstate for taproot transactions. +type PrevOutputFetcher interface { + // FetchPrevOutput attempts to fetch the previous output referenced by + // the passed outpoint. A nil value will be returned if the passed + // outpoint doesn't exist. + FetchPrevOutput(wire.OutPoint) *wire.TxOut +} + +// CannedPrevOutputFetcher is an implementation of PrevOutputFetcher that only +// is able to return information for a single previous output. +type CannedPrevOutputFetcher struct { + pkScript []byte + amt int64 +} + +// NewCannedPrevOutputFetcher returns an instance of a CannedPrevOutputFetcher +// that can only return the TxOut defined by the passed script and amount. +func NewCannedPrevOutputFetcher(script []byte, amt int64) *CannedPrevOutputFetcher { + return &CannedPrevOutputFetcher{ + pkScript: script, + amt: amt, + } +} + +// FetchPrevOutput attempts to fetch the previous output referenced by the +// passed outpoint. +// +// NOTE: This is a part of the PrevOutputFetcher interface. +func (c *CannedPrevOutputFetcher) FetchPrevOutput(wire.OutPoint) *wire.TxOut { + return &wire.TxOut{ + PkScript: c.pkScript, + Value: c.amt, + } +} + +// A compile-time assertion to ensure that CannedPrevOutputFetcher matches the +// PrevOutputFetcher interface. +var _ PrevOutputFetcher = (*CannedPrevOutputFetcher)(nil) + +// MultiPrevOutFetcher is a custom implementation of the PrevOutputFetcher +// backed by a key-value map of prevouts to outputs. +type MultiPrevOutFetcher struct { + prevOuts map[wire.OutPoint]*wire.TxOut +} + +// NewMultiPrevOutFetcher returns an instance of a PrevOutputFetcher that's +// backed by an optional map which is used as an input source. The +func NewMultiPrevOutFetcher(prevOuts map[wire.OutPoint]*wire.TxOut) *MultiPrevOutFetcher { + if prevOuts == nil { + prevOuts = make(map[wire.OutPoint]*wire.TxOut) + } + + return &MultiPrevOutFetcher{ + prevOuts: prevOuts, + } +} + +// FetchPrevOutput attempts to fetch the previous output referenced by the +// passed outpoint. +// +// NOTE: This is a part of the CannedPrevOutputFetcher interface. +func (m *MultiPrevOutFetcher) FetchPrevOutput(op wire.OutPoint) *wire.TxOut { + return m.prevOuts[op] +} + +// AddPrevOut adds a new prev out, tx out pair to the backing map. +func (m *MultiPrevOutFetcher) AddPrevOut(op wire.OutPoint, txOut *wire.TxOut) { + m.prevOuts[op] = txOut +} + +// Merge merges two instances of a MultiPrevOutFetcher into a single source. +func (m *MultiPrevOutFetcher) Merge(other *MultiPrevOutFetcher) { + for k, v := range other.prevOuts { + m.prevOuts[k] = v + } +} + +// A compile-time assertion to ensure that MultiPrevOutFetcher matches the +// PrevOutputFetcher interface. +var _ PrevOutputFetcher = (*MultiPrevOutFetcher)(nil) + +// calcHashInputAmounts computes a hash digest of the input amounts of all +// inputs referenced in the passed transaction. This hash pre computation is only +// used for validating taproot inputs. +func calcHashInputAmounts(tx *wire.MsgTx, inputFetcher PrevOutputFetcher) chainhash.Hash { + var b bytes.Buffer + for _, txIn := range tx.TxIn { + prevOut := inputFetcher.FetchPrevOutput(txIn.PreviousOutPoint) + + _ = binary.Write(&b, binary.LittleEndian, prevOut.Value) + } + + return chainhash.HashH(b.Bytes()) +} + +// calcHashInputAmts computes the hash digest of all the previous input scripts +// referenced by the passed transaction. This hash pre computation is only used +// for validating taproot inputs. +func calcHashInputScripts(tx *wire.MsgTx, inputFetcher PrevOutputFetcher) chainhash.Hash { + var b bytes.Buffer + for _, txIn := range tx.TxIn { + prevOut := inputFetcher.FetchPrevOutput(txIn.PreviousOutPoint) + + _ = wire.WriteVarBytes(&b, 0, prevOut.PkScript) + } + + return chainhash.HashH(b.Bytes()) +} + +// SegwitSigHashMidstate is the sighash midstate used in the base segwit +// sighash calculation as defined in BIP 143. +type SegwitSigHashMidstate struct { + HashPrevOutsV0 chainhash.Hash + HashSequenceV0 chainhash.Hash + HashOutputsV0 chainhash.Hash +} + +// TaprootSigHashMidState is the sighash midstate used to compute taproot and +// tapscript signatures as defined in BIP 341. +type TaprootSigHashMidState struct { + HashPrevOutsV1 chainhash.Hash + HashSequenceV1 chainhash.Hash + HashOutputsV1 chainhash.Hash + HashInputScriptsV1 chainhash.Hash + HashInputAmountsV1 chainhash.Hash +} + // TxSigHashes houses the partial set of sighashes introduced within BIP0143. // This partial set of sighashes may be re-used within each input across a // transaction when validating all inputs. As a result, validation complexity // for SigHashAll can be reduced by a polynomial factor. type TxSigHashes struct { - HashPrevOuts chainhash.Hash - HashSequence chainhash.Hash - HashOutputs chainhash.Hash + SegwitSigHashMidstate + + TaprootSigHashMidState } // NewTxSigHashes computes, and returns the cached sighashes of the given // transaction. -func NewTxSigHashes(tx *wire.MsgTx) *TxSigHashes { - return &TxSigHashes{ - HashPrevOuts: calcHashPrevOuts(tx), - HashSequence: calcHashSequence(tx), - HashOutputs: calcHashOutputs(tx), +func NewTxSigHashes(tx *wire.MsgTx, + inputFetcher PrevOutputFetcher) *TxSigHashes { + + var ( + sigHashes TxSigHashes + zeroHash chainhash.Hash + ) + + // Base segwit (witness version v0), and taproot (witness version v1) + // differ in how the set of pre-computed cached sighash midstate is + // computed. For taproot, the prevouts, sequence, and outputs are + // computed as normal, but a single sha256 hash invocation is used. In + // addition, the hashes of all the previous input amounts and scripts + // are included as well. + // + // Based on the above distinction, we'll run through all the referenced + // inputs to determine what we need to compute. + var hasV0Inputs, hasV1Inputs bool + for _, txIn := range tx.TxIn { + // If this is a coinbase input, then we know that we only need + // the v0 midstate (though it won't be used) in this instance. + outpoint := txIn.PreviousOutPoint + if outpoint.Index == math.MaxUint32 && outpoint.Hash == zeroHash { + hasV0Inputs = true + continue + } + + prevOut := inputFetcher.FetchPrevOutput(outpoint) + + // If this is spending a script that looks like a taproot output, + // then we'll need to pre-compute the extra taproot data. + if IsPayToTaproot(prevOut.PkScript) { + hasV1Inputs = true + } else { + // Otherwise, we'll assume we need the v0 sighash midstate. + hasV0Inputs = true + } + + // If the transaction has _both_ v0 and v1 inputs, then we can stop + // here. + if hasV0Inputs && hasV1Inputs { + break + } + } + + // Now that we know which cached midstate we need to calculate, we can + // go ahead and do so. + // + // First, we can calculate the information that both segwit v0 and v1 + // need: the prevout, sequence and output hashes. For v1 the only + // difference is that this is a single instead of a double hash. + // + // Both v0 and v1 share this base data computed using a sha256 single + // hash. + sigHashes.HashPrevOutsV1 = calcHashPrevOuts(tx) + sigHashes.HashSequenceV1 = calcHashSequence(tx) + sigHashes.HashOutputsV1 = calcHashOutputs(tx) + + // The v0 data is the same as the v1 (newer data) but it uses a double + // hash instead. + if hasV0Inputs { + sigHashes.HashPrevOutsV0 = chainhash.HashH( + sigHashes.HashPrevOutsV1[:], + ) + sigHashes.HashSequenceV0 = chainhash.HashH( + sigHashes.HashSequenceV1[:], + ) + sigHashes.HashOutputsV0 = chainhash.HashH( + sigHashes.HashOutputsV1[:], + ) } + + // Finally, we'll compute the taproot specific data if needed. + if hasV1Inputs { + sigHashes.HashInputAmountsV1 = calcHashInputAmounts( + tx, inputFetcher, + ) + sigHashes.HashInputScriptsV1 = calcHashInputScripts( + tx, inputFetcher, + ) + } + + return &sigHashes } // HashCache houses a set of partial sighashes keyed by txid. The set of partial @@ -52,9 +315,11 @@ func NewHashCache(maxSize uint) *HashCache { // AddSigHashes computes, then adds the partial sighashes for the passed // transaction. -func (h *HashCache) AddSigHashes(tx *wire.MsgTx) { +func (h *HashCache) AddSigHashes(tx *wire.MsgTx, + inputFetcher PrevOutputFetcher) { + h.Lock() - h.sigHashes[tx.TxHash()] = NewTxSigHashes(tx) + h.sigHashes[tx.TxHash()] = NewTxSigHashes(tx, inputFetcher) h.Unlock() } diff --git a/txscript/hashcache_test.go b/txscript/hashcache_test.go index 389918e2f2..8d731820ec 100644 --- a/txscript/hashcache_test.go +++ b/txscript/hashcache_test.go @@ -13,12 +13,18 @@ import ( "github.com/davecgh/go-spew/spew" ) +func init() { + rand.Seed(time.Now().Unix()) +} + // genTestTx creates a random transaction for uses within test cases. -func genTestTx() (*wire.MsgTx, error) { +func genTestTx() (*wire.MsgTx, *MultiPrevOutFetcher, error) { tx := wire.NewMsgTx(2) tx.Version = rand.Int31() - numTxins := rand.Intn(11) + prevOuts := NewMultiPrevOutFetcher(nil) + + numTxins := 1 + rand.Intn(11) for i := 0; i < numTxins; i++ { randTxIn := wire.TxIn{ PreviousOutPoint: wire.OutPoint{ @@ -28,25 +34,29 @@ func genTestTx() (*wire.MsgTx, error) { } _, err := rand.Read(randTxIn.PreviousOutPoint.Hash[:]) if err != nil { - return nil, err + return nil, nil, err } tx.TxIn = append(tx.TxIn, &randTxIn) + + prevOuts.AddPrevOut( + randTxIn.PreviousOutPoint, &wire.TxOut{}, + ) } - numTxouts := rand.Intn(11) + numTxouts := 1 + rand.Intn(11) for i := 0; i < numTxouts; i++ { randTxOut := wire.TxOut{ Value: rand.Int63(), PkScript: make([]byte, rand.Intn(30)), } if _, err := rand.Read(randTxOut.PkScript); err != nil { - return nil, err + return nil, nil, err } tx.TxOut = append(tx.TxOut, &randTxOut) } - return tx, nil + return tx, prevOuts, nil } // TestHashCacheAddContainsHashes tests that after items have been added to the @@ -56,27 +66,31 @@ func genTestTx() (*wire.MsgTx, error) { func TestHashCacheAddContainsHashes(t *testing.T) { t.Parallel() - rand.Seed(time.Now().Unix()) - cache := NewHashCache(10) - var err error + var ( + err error + randPrevOuts *MultiPrevOutFetcher + ) + prevOuts := NewMultiPrevOutFetcher(nil) // First, we'll generate 10 random transactions for use within our // tests. const numTxns = 10 txns := make([]*wire.MsgTx, numTxns) for i := 0; i < numTxns; i++ { - txns[i], err = genTestTx() + txns[i], randPrevOuts, err = genTestTx() if err != nil { t.Fatalf("unable to generate test tx: %v", err) } + + prevOuts.Merge(randPrevOuts) } // With the transactions generated, we'll add each of them to the hash // cache. for _, tx := range txns { - cache.AddSigHashes(tx) + cache.AddSigHashes(tx, prevOuts) } // Next, we'll ensure that each of the transactions inserted into the @@ -89,7 +103,7 @@ func TestHashCacheAddContainsHashes(t *testing.T) { } } - randTx, err := genTestTx() + randTx, _, err := genTestTx() if err != nil { t.Fatalf("unable to generate tx: %v", err) } @@ -109,20 +123,18 @@ func TestHashCacheAddContainsHashes(t *testing.T) { func TestHashCacheAddGet(t *testing.T) { t.Parallel() - rand.Seed(time.Now().Unix()) - cache := NewHashCache(10) // To start, we'll generate a random transaction and compute the set of // sighashes for the transaction. - randTx, err := genTestTx() + randTx, prevOuts, err := genTestTx() if err != nil { t.Fatalf("unable to generate tx: %v", err) } - sigHashes := NewTxSigHashes(randTx) + sigHashes := NewTxSigHashes(randTx, prevOuts) // Next, add the transaction to the hash cache. - cache.AddSigHashes(randTx) + cache.AddSigHashes(randTx, prevOuts) // The transaction inserted into the cache above should be found. txid := randTx.TxHash() @@ -144,23 +156,27 @@ func TestHashCacheAddGet(t *testing.T) { func TestHashCachePurge(t *testing.T) { t.Parallel() - rand.Seed(time.Now().Unix()) - cache := NewHashCache(10) - var err error + var ( + err error + randPrevOuts *MultiPrevOutFetcher + ) + prevOuts := NewMultiPrevOutFetcher(nil) // First we'll start by inserting numTxns transactions into the hash cache. const numTxns = 10 txns := make([]*wire.MsgTx, numTxns) for i := 0; i < numTxns; i++ { - txns[i], err = genTestTx() + txns[i], randPrevOuts, err = genTestTx() if err != nil { t.Fatalf("unable to generate test tx: %v", err) } + + prevOuts.Merge(randPrevOuts) } for _, tx := range txns { - cache.AddSigHashes(tx) + cache.AddSigHashes(tx, prevOuts) } // Once all the transactions have been inserted, we'll purge them from diff --git a/txscript/opcode.go b/txscript/opcode.go index 5ffb398277..6e0434423e 100644 --- a/txscript/opcode.go +++ b/txscript/opcode.go @@ -8,13 +8,16 @@ import ( "bytes" "crypto/sha1" "crypto/sha256" - "encoding/binary" + "encoding/hex" + "errors" "fmt" "hash" + "strings" "golang.org/x/crypto/ripemd160" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -27,7 +30,7 @@ type opcode struct { value byte name string length int - opfunc func(*parsedOpcode, *Engine) error + opfunc func(*opcode, []byte, *Engine) error } // These constants are the values of the official opcodes used on the btc wiki, @@ -224,7 +227,7 @@ const ( OP_NOP8 = 0xb7 // 183 OP_NOP9 = 0xb8 // 184 OP_NOP10 = 0xb9 // 185 - OP_UNKNOWN186 = 0xba // 186 + OP_CHECKSIGADD = 0xba // 186 OP_UNKNOWN187 = 0xbb // 187 OP_UNKNOWN188 = 0xbc // 188 OP_UNKNOWN189 = 0xbd // 189 @@ -498,6 +501,7 @@ var opcodeArray = [256]opcode{ OP_CHECKSIGVERIFY: {OP_CHECKSIGVERIFY, "OP_CHECKSIGVERIFY", 1, opcodeCheckSigVerify}, OP_CHECKMULTISIG: {OP_CHECKMULTISIG, "OP_CHECKMULTISIG", 1, opcodeCheckMultiSig}, OP_CHECKMULTISIGVERIFY: {OP_CHECKMULTISIGVERIFY, "OP_CHECKMULTISIGVERIFY", 1, opcodeCheckMultiSigVerify}, + OP_CHECKSIGADD: {OP_CHECKSIGADD, "OP_CHECKSIGADD", 1, opcodeCheckSigAdd}, // Reserved opcodes. OP_NOP1: {OP_NOP1, "OP_NOP1", 1, opcodeNop}, @@ -510,7 +514,6 @@ var opcodeArray = [256]opcode{ OP_NOP10: {OP_NOP10, "OP_NOP10", 1, opcodeNop}, // Undefined opcodes. - OP_UNKNOWN186: {OP_UNKNOWN186, "OP_UNKNOWN186", 1, opcodeInvalid}, OP_UNKNOWN187: {OP_UNKNOWN187, "OP_UNKNOWN187", 1, opcodeInvalid}, OP_UNKNOWN188: {OP_UNKNOWN188, "OP_UNKNOWN188", 1, opcodeInvalid}, OP_UNKNOWN189: {OP_UNKNOWN189, "OP_UNKNOWN189", 1, opcodeInvalid}, @@ -610,233 +613,145 @@ var opcodeOnelineRepls = map[string]string{ "OP_16": "16", } -// parsedOpcode represents an opcode that has been parsed and includes any -// potential data associated with it. -type parsedOpcode struct { - opcode *opcode - data []byte -} - -// isDisabled returns whether or not the opcode is disabled and thus is always -// bad to see in the instruction stream (even if turned off by a conditional). -func (pop *parsedOpcode) isDisabled() bool { - switch pop.opcode.value { - case OP_CAT: - return true - case OP_SUBSTR: - return true - case OP_LEFT: - return true - case OP_RIGHT: - return true - case OP_INVERT: - return true - case OP_AND: - return true - case OP_OR: - return true - case OP_XOR: - return true - case OP_2MUL: - return true - case OP_2DIV: - return true - case OP_MUL: - return true - case OP_DIV: - return true - case OP_MOD: - return true - case OP_LSHIFT: - return true - case OP_RSHIFT: - return true - default: - return false - } -} - -// alwaysIllegal returns whether or not the opcode is always illegal when passed -// over by the program counter even if in a non-executed branch (it isn't a -// coincidence that they are conditionals). -func (pop *parsedOpcode) alwaysIllegal() bool { - switch pop.opcode.value { - case OP_VERIF: - return true - case OP_VERNOTIF: - return true - default: - return false - } -} - -// isConditional returns whether or not the opcode is a conditional opcode which -// changes the conditional execution stack when executed. -func (pop *parsedOpcode) isConditional() bool { - switch pop.opcode.value { - case OP_IF: - return true - case OP_NOTIF: - return true - case OP_ELSE: - return true - case OP_ENDIF: - return true - default: - return false - } -} - -// checkMinimalDataPush returns whether or not the current data push uses the -// smallest possible opcode to represent it. For example, the value 15 could -// be pushed with OP_DATA_1 15 (among other variations); however, OP_15 is a -// single opcode that represents the same value and is only a single byte versus -// two bytes. -func (pop *parsedOpcode) checkMinimalDataPush() error { - data := pop.data - dataLen := len(data) - opcode := pop.opcode.value - - if dataLen == 0 && opcode != OP_0 { - str := fmt.Sprintf("zero length data push is encoded with "+ - "opcode %s instead of OP_0", pop.opcode.name) - return scriptError(ErrMinimalData, str) - } else if dataLen == 1 && data[0] >= 1 && data[0] <= 16 { - if opcode != OP_1+data[0]-1 { - // Should have used OP_1 .. OP_16 - str := fmt.Sprintf("data push of the value %d encoded "+ - "with opcode %s instead of OP_%d", data[0], - pop.opcode.name, data[0]) - return scriptError(ErrMinimalData, str) - } - } else if dataLen == 1 && data[0] == 0x81 { - if opcode != OP_1NEGATE { - str := fmt.Sprintf("data push of the value -1 encoded "+ - "with opcode %s instead of OP_1NEGATE", - pop.opcode.name) - return scriptError(ErrMinimalData, str) - } - } else if dataLen <= 75 { - if int(opcode) != dataLen { - // Should have used a direct push - str := fmt.Sprintf("data push of %d bytes encoded "+ - "with opcode %s instead of OP_DATA_%d", dataLen, - pop.opcode.name, dataLen) - return scriptError(ErrMinimalData, str) - } - } else if dataLen <= 255 { - if opcode != OP_PUSHDATA1 { - str := fmt.Sprintf("data push of %d bytes encoded "+ - "with opcode %s instead of OP_PUSHDATA1", - dataLen, pop.opcode.name) - return scriptError(ErrMinimalData, str) - } - } else if dataLen <= 65535 { - if opcode != OP_PUSHDATA2 { - str := fmt.Sprintf("data push of %d bytes encoded "+ - "with opcode %s instead of OP_PUSHDATA2", - dataLen, pop.opcode.name) - return scriptError(ErrMinimalData, str) - } - } - return nil -} - -// print returns a human-readable string representation of the opcode for use -// in script disassembly. -func (pop *parsedOpcode) print(oneline bool) string { - // The reference implementation one-line disassembly replaces opcodes - // which represent values (e.g. OP_0 through OP_16 and OP_1NEGATE) - // with the raw value. However, when not doing a one-line dissassembly, - // we prefer to show the actual opcode names. Thus, only replace the - // opcodes in question when the oneline flag is set. - opcodeName := pop.opcode.name - if oneline { +// successOpcodes tracks the set of op codes that are to be interpreted as op +// codes that cause execution to automatically succeed. This map is used to +// quickly look up the op codes during script pre-processing. +var successOpcodes = map[byte]struct{}{ + OP_RESERVED: {}, // 80 + OP_VER: {}, // 98 + OP_CAT: {}, // 126 + OP_SUBSTR: {}, // 127 + OP_LEFT: {}, // 128 + OP_RIGHT: {}, // 129 + OP_INVERT: {}, // 131 + OP_AND: {}, // 132 + OP_OR: {}, // 133 + OP_XOR: {}, // 134 + OP_RESERVED1: {}, // 137 + OP_RESERVED2: {}, // 138 + OP_2MUL: {}, // 141 + OP_2DIV: {}, // 142 + OP_MUL: {}, // 149 + OP_DIV: {}, // 150 + OP_MOD: {}, // 151 + OP_LSHIFT: {}, // 152 + OP_RSHIFT: {}, // 153 + OP_UNKNOWN187: {}, // 187 + OP_UNKNOWN188: {}, // 188 + OP_UNKNOWN189: {}, // 189 + OP_UNKNOWN190: {}, // 190 + OP_UNKNOWN191: {}, // 191 + OP_UNKNOWN192: {}, // 192 + OP_UNKNOWN193: {}, // 193 + OP_UNKNOWN194: {}, // 194 + OP_UNKNOWN195: {}, // 195 + OP_UNKNOWN196: {}, // 196 + OP_UNKNOWN197: {}, // 197 + OP_UNKNOWN198: {}, // 198 + OP_UNKNOWN199: {}, // 199 + OP_UNKNOWN200: {}, // 200 + OP_UNKNOWN201: {}, // 201 + OP_UNKNOWN202: {}, // 202 + OP_UNKNOWN203: {}, // 203 + OP_UNKNOWN204: {}, // 204 + OP_UNKNOWN205: {}, // 205 + OP_UNKNOWN206: {}, // 206 + OP_UNKNOWN207: {}, // 207 + OP_UNKNOWN208: {}, // 208 + OP_UNKNOWN209: {}, // 209 + OP_UNKNOWN210: {}, // 210 + OP_UNKNOWN211: {}, // 211 + OP_UNKNOWN212: {}, // 212 + OP_UNKNOWN213: {}, // 213 + OP_UNKNOWN214: {}, // 214 + OP_UNKNOWN215: {}, // 215 + OP_UNKNOWN216: {}, // 216 + OP_UNKNOWN217: {}, // 217 + OP_UNKNOWN218: {}, // 218 + OP_UNKNOWN219: {}, // 219 + OP_UNKNOWN220: {}, // 220 + OP_UNKNOWN221: {}, // 221 + OP_UNKNOWN222: {}, // 222 + OP_UNKNOWN223: {}, // 223 + OP_UNKNOWN224: {}, // 224 + OP_UNKNOWN225: {}, // 225 + OP_UNKNOWN226: {}, // 226 + OP_UNKNOWN227: {}, // 227 + OP_UNKNOWN228: {}, // 228 + OP_UNKNOWN229: {}, // 229 + OP_UNKNOWN230: {}, // 230 + OP_UNKNOWN231: {}, // 231 + OP_UNKNOWN232: {}, // 232 + OP_UNKNOWN233: {}, // 233 + OP_UNKNOWN234: {}, // 234 + OP_UNKNOWN235: {}, // 235 + OP_UNKNOWN236: {}, // 236 + OP_UNKNOWN237: {}, // 237 + OP_UNKNOWN238: {}, // 238 + OP_UNKNOWN239: {}, // 239 + OP_UNKNOWN240: {}, // 240 + OP_UNKNOWN241: {}, // 241 + OP_UNKNOWN242: {}, // 242 + OP_UNKNOWN243: {}, // 243 + OP_UNKNOWN244: {}, // 244 + OP_UNKNOWN245: {}, // 245 + OP_UNKNOWN246: {}, // 246 + OP_UNKNOWN247: {}, // 247 + OP_UNKNOWN248: {}, // 248 + OP_UNKNOWN249: {}, // 249 + OP_SMALLINTEGER: {}, // 250 + OP_PUBKEYS: {}, // 251 + OP_UNKNOWN252: {}, // 252 + OP_PUBKEYHASH: {}, // 253 + OP_PUBKEY: {}, // 254 +} + +// disasmOpcode writes a human-readable disassembly of the provided opcode and +// data into the provided buffer. The compact flag indicates the disassembly +// should print a more compact representation of data-carrying and small integer +// opcodes. For example, OP_0 through OP_16 are replaced with the numeric value +// and data pushes are printed as only the hex representation of the data as +// opposed to including the opcode that specifies the amount of data to push as +// well. +func disasmOpcode(buf *strings.Builder, op *opcode, data []byte, compact bool) { + // Replace opcode which represent values (e.g. OP_0 through OP_16 and + // OP_1NEGATE) with the raw value when performing a compact disassembly. + opcodeName := op.name + if compact { if replName, ok := opcodeOnelineRepls[opcodeName]; ok { opcodeName = replName } - // Nothing more to do for non-data push opcodes. - if pop.opcode.length == 1 { - return opcodeName + // Either write the human-readable opcode or the parsed data in hex for + // data-carrying opcodes. + switch { + case op.length == 1: + buf.WriteString(opcodeName) + + default: + buf.WriteString(hex.EncodeToString(data)) } - return fmt.Sprintf("%x", pop.data) + return } - // Nothing more to do for non-data push opcodes. - if pop.opcode.length == 1 { - return opcodeName - } + buf.WriteString(opcodeName) + + switch op.length { + // Only write the opcode name for non-data push opcodes. + case 1: + return // Add length for the OP_PUSHDATA# opcodes. - retString := opcodeName - switch pop.opcode.length { case -1: - retString += fmt.Sprintf(" 0x%02x", len(pop.data)) + buf.WriteString(fmt.Sprintf(" 0x%02x", len(data))) case -2: - retString += fmt.Sprintf(" 0x%04x", len(pop.data)) + buf.WriteString(fmt.Sprintf(" 0x%04x", len(data))) case -4: - retString += fmt.Sprintf(" 0x%08x", len(pop.data)) - } - - return fmt.Sprintf("%s 0x%02x", retString, pop.data) -} - -// bytes returns any data associated with the opcode encoded as it would be in -// a script. This is used for unparsing scripts from parsed opcodes. -func (pop *parsedOpcode) bytes() ([]byte, error) { - var retbytes []byte - if pop.opcode.length > 0 { - retbytes = make([]byte, 1, pop.opcode.length) - } else { - retbytes = make([]byte, 1, 1+len(pop.data)- - pop.opcode.length) - } - - retbytes[0] = pop.opcode.value - if pop.opcode.length == 1 { - if len(pop.data) != 0 { - str := fmt.Sprintf("internal consistency error - "+ - "parsed opcode %s has data length %d when %d "+ - "was expected", pop.opcode.name, len(pop.data), - 0) - return nil, scriptError(ErrInternal, str) - } - return retbytes, nil - } - nbytes := pop.opcode.length - if pop.opcode.length < 0 { - l := len(pop.data) - // tempting just to hardcode to avoid the complexity here. - switch pop.opcode.length { - case -1: - retbytes = append(retbytes, byte(l)) - nbytes = int(retbytes[1]) + len(retbytes) - case -2: - retbytes = append(retbytes, byte(l&0xff), - byte(l>>8&0xff)) - nbytes = int(binary.LittleEndian.Uint16(retbytes[1:])) + - len(retbytes) - case -4: - retbytes = append(retbytes, byte(l&0xff), - byte((l>>8)&0xff), byte((l>>16)&0xff), - byte((l>>24)&0xff)) - nbytes = int(binary.LittleEndian.Uint32(retbytes[1:])) + - len(retbytes) - } + buf.WriteString(fmt.Sprintf(" 0x%08x", len(data))) } - retbytes = append(retbytes, pop.data...) - - if len(retbytes) != nbytes { - str := fmt.Sprintf("internal consistency error - "+ - "parsed opcode %s has data length %d when %d was "+ - "expected", pop.opcode.name, len(retbytes), nbytes) - return nil, scriptError(ErrInternal, str) - } - - return retbytes, nil + buf.WriteString(fmt.Sprintf(" 0x%02x", data)) } // ******************************************* @@ -849,45 +764,42 @@ func (pop *parsedOpcode) bytes() ([]byte, error) { // opcodes before executing in an initial parse step, the consensus rules // dictate the script doesn't fail until the program counter passes over a // disabled opcode (even when they appear in a branch that is not executed). -func opcodeDisabled(op *parsedOpcode, vm *Engine) error { - str := fmt.Sprintf("attempt to execute disabled opcode %s", - op.opcode.name) +func opcodeDisabled(op *opcode, data []byte, vm *Engine) error { + str := fmt.Sprintf("attempt to execute disabled opcode %s", op.name) return scriptError(ErrDisabledOpcode, str) } // opcodeReserved is a common handler for all reserved opcodes. It returns an // appropriate error indicating the opcode is reserved. -func opcodeReserved(op *parsedOpcode, vm *Engine) error { - str := fmt.Sprintf("attempt to execute reserved opcode %s", - op.opcode.name) +func opcodeReserved(op *opcode, data []byte, vm *Engine) error { + str := fmt.Sprintf("attempt to execute reserved opcode %s", op.name) return scriptError(ErrReservedOpcode, str) } // opcodeInvalid is a common handler for all invalid opcodes. It returns an // appropriate error indicating the opcode is invalid. -func opcodeInvalid(op *parsedOpcode, vm *Engine) error { - str := fmt.Sprintf("attempt to execute invalid opcode %s", - op.opcode.name) +func opcodeInvalid(op *opcode, data []byte, vm *Engine) error { + str := fmt.Sprintf("attempt to execute invalid opcode %s", op.name) return scriptError(ErrReservedOpcode, str) } // opcodeFalse pushes an empty array to the data stack to represent false. Note // that 0, when encoded as a number according to the numeric encoding consensus // rules, is an empty array. -func opcodeFalse(op *parsedOpcode, vm *Engine) error { +func opcodeFalse(op *opcode, data []byte, vm *Engine) error { vm.dstack.PushByteArray(nil) return nil } // opcodePushData is a common handler for the vast majority of opcodes that push // raw data (bytes) to the data stack. -func opcodePushData(op *parsedOpcode, vm *Engine) error { - vm.dstack.PushByteArray(op.data) +func opcodePushData(op *opcode, data []byte, vm *Engine) error { + vm.dstack.PushByteArray(data) return nil } // opcode1Negate pushes -1, encoded as a number, to the data stack. -func opcode1Negate(op *parsedOpcode, vm *Engine) error { +func opcode1Negate(op *opcode, data []byte, vm *Engine) error { vm.dstack.PushInt(scriptNum(-1)) return nil } @@ -895,23 +807,24 @@ func opcode1Negate(op *parsedOpcode, vm *Engine) error { // opcodeN is a common handler for the small integer data push opcodes. It // pushes the numeric value the opcode represents (which will be from 1 to 16) // onto the data stack. -func opcodeN(op *parsedOpcode, vm *Engine) error { +func opcodeN(op *opcode, data []byte, vm *Engine) error { // The opcodes are all defined consecutively, so the numeric value is // the difference. - vm.dstack.PushInt(scriptNum((op.opcode.value - (OP_1 - 1)))) + vm.dstack.PushInt(scriptNum((op.value - (OP_1 - 1)))) return nil } // opcodeNop is a common handler for the NOP family of opcodes. As the name // implies it generally does nothing, however, it will return an error when // the flag to discourage use of NOPs is set for select opcodes. -func opcodeNop(op *parsedOpcode, vm *Engine) error { - switch op.opcode.value { +func opcodeNop(op *opcode, data []byte, vm *Engine) error { + switch op.value { case OP_NOP1, OP_NOP4, OP_NOP5, OP_NOP6, OP_NOP7, OP_NOP8, OP_NOP9, OP_NOP10: + if vm.hasFlag(ScriptDiscourageUpgradableNops) { - str := fmt.Sprintf("OP_NOP%d reserved for soft-fork "+ - "upgrades", op.opcode.value-(OP_NOP1-1)) + str := fmt.Sprintf("%v reserved for soft-fork "+ + "upgrades", op.name) return scriptError(ErrDiscourageUpgradableNOPs, str) } } @@ -926,15 +839,27 @@ func opcodeNop(op *parsedOpcode, vm *Engine) error { // the stack will be popped and interpreted as a boolean. func popIfBool(vm *Engine) (bool, error) { // When not in witness execution mode, not executing a v0 witness - // program, or the minimal if flag isn't set pop the top stack item as - // a normal bool. - if !vm.isWitnessVersionActive(0) || !vm.hasFlag(ScriptVerifyMinimalIf) { + // program, or not doing tapscript execution, or the minimal if flag + // isn't set pop the top stack item as a normal bool. + switch { + // Minimal if is always on for taproot execution. + case vm.isWitnessVersionActive(TaprootWitnessVersion): + break + + // If this isn't the base segwit version, then we'll coerce the stack + // element as a bool as normal. + case !vm.isWitnessVersionActive(BaseSegwitWitnessVersion): + fallthrough + + // If the minimal if flag isn't set, then we don't need any extra + // checks here. + case !vm.hasFlag(ScriptVerifyMinimalIf): return vm.dstack.PopBool() } - // At this point, a v0 witness program is being executed and the minimal - // if flag is set, so enforce additional constraints on the top stack - // item. + // At this point, a v0 or v1 witness program is being executed and the + // minimal if flag is set, so enforce additional constraints on the top + // stack item. so, err := vm.dstack.PopByteArray() if err != nil { return false, err @@ -974,7 +899,7 @@ func popIfBool(vm *Engine) (bool, error) { // // Data stack transformation: [... bool] -> [...] // Conditional stack transformation: [...] -> [... OpCondValue] -func opcodeIf(op *parsedOpcode, vm *Engine) error { +func opcodeIf(op *opcode, data []byte, vm *Engine) error { condVal := OpCondFalse if vm.isBranchExecuting() { ok, err := popIfBool(vm) @@ -1008,7 +933,7 @@ func opcodeIf(op *parsedOpcode, vm *Engine) error { // // Data stack transformation: [... bool] -> [...] // Conditional stack transformation: [...] -> [... OpCondValue] -func opcodeNotIf(op *parsedOpcode, vm *Engine) error { +func opcodeNotIf(op *opcode, data []byte, vm *Engine) error { condVal := OpCondFalse if vm.isBranchExecuting() { ok, err := popIfBool(vm) @@ -1031,10 +956,10 @@ func opcodeNotIf(op *parsedOpcode, vm *Engine) error { // An error is returned if there has not already been a matching OP_IF. // // Conditional stack transformation: [... OpCondValue] -> [... !OpCondValue] -func opcodeElse(op *parsedOpcode, vm *Engine) error { +func opcodeElse(op *opcode, data []byte, vm *Engine) error { if len(vm.condStack) == 0 { str := fmt.Sprintf("encountered opcode %s with no matching "+ - "opcode to begin conditional execution", op.opcode.name) + "opcode to begin conditional execution", op.name) return scriptError(ErrUnbalancedConditional, str) } @@ -1057,10 +982,10 @@ func opcodeElse(op *parsedOpcode, vm *Engine) error { // An error is returned if there has not already been a matching OP_IF. // // Conditional stack transformation: [... OpCondValue] -> [...] -func opcodeEndif(op *parsedOpcode, vm *Engine) error { +func opcodeEndif(op *opcode, data []byte, vm *Engine) error { if len(vm.condStack) == 0 { str := fmt.Sprintf("encountered opcode %s with no matching "+ - "opcode to begin conditional execution", op.opcode.name) + "opcode to begin conditional execution", op.name) return scriptError(ErrUnbalancedConditional, str) } @@ -1073,14 +998,14 @@ func opcodeEndif(op *parsedOpcode, vm *Engine) error { // item on the stack or when that item evaluates to false. In the latter case // where the verification fails specifically due to the top item evaluating // to false, the returned error will use the passed error code. -func abstractVerify(op *parsedOpcode, vm *Engine, c ErrorCode) error { +func abstractVerify(op *opcode, vm *Engine, c ErrorCode) error { verified, err := vm.dstack.PopBool() if err != nil { return err } if !verified { - str := fmt.Sprintf("%s failed", op.opcode.name) + str := fmt.Sprintf("%s failed", op.name) return scriptError(c, str) } return nil @@ -1088,13 +1013,13 @@ func abstractVerify(op *parsedOpcode, vm *Engine, c ErrorCode) error { // opcodeVerify examines the top item on the data stack as a boolean value and // verifies it evaluates to true. An error is returned if it does not. -func opcodeVerify(op *parsedOpcode, vm *Engine) error { +func opcodeVerify(op *opcode, data []byte, vm *Engine) error { return abstractVerify(op, vm, ErrVerify) } // opcodeReturn returns an appropriate error since it is always an error to // return early from a script. -func opcodeReturn(op *parsedOpcode, vm *Engine) error { +func opcodeReturn(op *opcode, data []byte, vm *Engine) error { return scriptError(ErrEarlyReturn, "script returned early") } @@ -1124,7 +1049,7 @@ func verifyLockTime(txLockTime, threshold, lockTime int64) error { // validating if the transaction outputs are spendable yet. If flag // ScriptVerifyCheckLockTimeVerify is not set, the code continues as if OP_NOP2 // were executed. -func opcodeCheckLockTimeVerify(op *parsedOpcode, vm *Engine) error { +func opcodeCheckLockTimeVerify(op *opcode, data []byte, vm *Engine) error { // If the ScriptVerifyCheckLockTimeVerify script flag is not set, treat // opcode as OP_NOP2 instead. if !vm.hasFlag(ScriptVerifyCheckLockTimeVerify) { @@ -1198,7 +1123,7 @@ func opcodeCheckLockTimeVerify(op *parsedOpcode, vm *Engine) error { // validating if the transaction outputs are spendable yet. If flag // ScriptVerifyCheckSequenceVerify is not set, the code continues as if OP_NOP3 // were executed. -func opcodeCheckSequenceVerify(op *parsedOpcode, vm *Engine) error { +func opcodeCheckSequenceVerify(op *opcode, data []byte, vm *Engine) error { // If the ScriptVerifyCheckSequenceVerify script flag is not set, treat // opcode as OP_NOP3 instead. if !vm.hasFlag(ScriptVerifyCheckSequenceVerify) { @@ -1275,7 +1200,7 @@ func opcodeCheckSequenceVerify(op *parsedOpcode, vm *Engine) error { // // Main data stack transformation: [... x1 x2 x3] -> [... x1 x2] // Alt data stack transformation: [... y1 y2 y3] -> [... y1 y2 y3 x3] -func opcodeToAltStack(op *parsedOpcode, vm *Engine) error { +func opcodeToAltStack(op *opcode, data []byte, vm *Engine) error { so, err := vm.dstack.PopByteArray() if err != nil { return err @@ -1290,7 +1215,7 @@ func opcodeToAltStack(op *parsedOpcode, vm *Engine) error { // // Main data stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 y3] // Alt data stack transformation: [... y1 y2 y3] -> [... y1 y2] -func opcodeFromAltStack(op *parsedOpcode, vm *Engine) error { +func opcodeFromAltStack(op *opcode, data []byte, vm *Engine) error { so, err := vm.astack.PopByteArray() if err != nil { return err @@ -1303,35 +1228,35 @@ func opcodeFromAltStack(op *parsedOpcode, vm *Engine) error { // opcode2Drop removes the top 2 items from the data stack. // // Stack transformation: [... x1 x2 x3] -> [... x1] -func opcode2Drop(op *parsedOpcode, vm *Engine) error { +func opcode2Drop(op *opcode, data []byte, vm *Engine) error { return vm.dstack.DropN(2) } // opcode2Dup duplicates the top 2 items on the data stack. // // Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x2 x3] -func opcode2Dup(op *parsedOpcode, vm *Engine) error { +func opcode2Dup(op *opcode, data []byte, vm *Engine) error { return vm.dstack.DupN(2) } // opcode3Dup duplicates the top 3 items on the data stack. // // Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x1 x2 x3] -func opcode3Dup(op *parsedOpcode, vm *Engine) error { +func opcode3Dup(op *opcode, data []byte, vm *Engine) error { return vm.dstack.DupN(3) } // opcode2Over duplicates the 2 items before the top 2 items on the data stack. // // Stack transformation: [... x1 x2 x3 x4] -> [... x1 x2 x3 x4 x1 x2] -func opcode2Over(op *parsedOpcode, vm *Engine) error { +func opcode2Over(op *opcode, data []byte, vm *Engine) error { return vm.dstack.OverN(2) } // opcode2Rot rotates the top 6 items on the data stack to the left twice. // // Stack transformation: [... x1 x2 x3 x4 x5 x6] -> [... x3 x4 x5 x6 x1 x2] -func opcode2Rot(op *parsedOpcode, vm *Engine) error { +func opcode2Rot(op *opcode, data []byte, vm *Engine) error { return vm.dstack.RotN(2) } @@ -1339,7 +1264,7 @@ func opcode2Rot(op *parsedOpcode, vm *Engine) error { // before them. // // Stack transformation: [... x1 x2 x3 x4] -> [... x3 x4 x1 x2] -func opcode2Swap(op *parsedOpcode, vm *Engine) error { +func opcode2Swap(op *opcode, data []byte, vm *Engine) error { return vm.dstack.SwapN(2) } @@ -1347,7 +1272,7 @@ func opcode2Swap(op *parsedOpcode, vm *Engine) error { // // Stack transformation (x1==0): [... x1] -> [... x1] // Stack transformation (x1!=0): [... x1] -> [... x1 x1] -func opcodeIfDup(op *parsedOpcode, vm *Engine) error { +func opcodeIfDup(op *opcode, data []byte, vm *Engine) error { so, err := vm.dstack.PeekByteArray(0) if err != nil { return err @@ -1367,7 +1292,7 @@ func opcodeIfDup(op *parsedOpcode, vm *Engine) error { // Stack transformation: [...] -> [... ] // Example with 2 items: [x1 x2] -> [x1 x2 2] // Example with 3 items: [x1 x2 x3] -> [x1 x2 x3 3] -func opcodeDepth(op *parsedOpcode, vm *Engine) error { +func opcodeDepth(op *opcode, data []byte, vm *Engine) error { vm.dstack.PushInt(scriptNum(vm.dstack.Depth())) return nil } @@ -1375,28 +1300,28 @@ func opcodeDepth(op *parsedOpcode, vm *Engine) error { // opcodeDrop removes the top item from the data stack. // // Stack transformation: [... x1 x2 x3] -> [... x1 x2] -func opcodeDrop(op *parsedOpcode, vm *Engine) error { +func opcodeDrop(op *opcode, data []byte, vm *Engine) error { return vm.dstack.DropN(1) } // opcodeDup duplicates the top item on the data stack. // // Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x3] -func opcodeDup(op *parsedOpcode, vm *Engine) error { +func opcodeDup(op *opcode, data []byte, vm *Engine) error { return vm.dstack.DupN(1) } // opcodeNip removes the item before the top item on the data stack. // // Stack transformation: [... x1 x2 x3] -> [... x1 x3] -func opcodeNip(op *parsedOpcode, vm *Engine) error { +func opcodeNip(op *opcode, data []byte, vm *Engine) error { return vm.dstack.NipN(1) } // opcodeOver duplicates the item before the top item on the data stack. // // Stack transformation: [... x1 x2 x3] -> [... x1 x2 x3 x2] -func opcodeOver(op *parsedOpcode, vm *Engine) error { +func opcodeOver(op *opcode, data []byte, vm *Engine) error { return vm.dstack.OverN(1) } @@ -1406,7 +1331,7 @@ func opcodeOver(op *parsedOpcode, vm *Engine) error { // Stack transformation: [xn ... x2 x1 x0 n] -> [xn ... x2 x1 x0 xn] // Example with n=1: [x2 x1 x0 1] -> [x2 x1 x0 x1] // Example with n=2: [x2 x1 x0 2] -> [x2 x1 x0 x2] -func opcodePick(op *parsedOpcode, vm *Engine) error { +func opcodePick(op *opcode, data []byte, vm *Engine) error { val, err := vm.dstack.PopInt() if err != nil { return err @@ -1421,7 +1346,7 @@ func opcodePick(op *parsedOpcode, vm *Engine) error { // Stack transformation: [xn ... x2 x1 x0 n] -> [... x2 x1 x0 xn] // Example with n=1: [x2 x1 x0 1] -> [x2 x0 x1] // Example with n=2: [x2 x1 x0 2] -> [x1 x0 x2] -func opcodeRoll(op *parsedOpcode, vm *Engine) error { +func opcodeRoll(op *opcode, data []byte, vm *Engine) error { val, err := vm.dstack.PopInt() if err != nil { return err @@ -1433,14 +1358,14 @@ func opcodeRoll(op *parsedOpcode, vm *Engine) error { // opcodeRot rotates the top 3 items on the data stack to the left. // // Stack transformation: [... x1 x2 x3] -> [... x2 x3 x1] -func opcodeRot(op *parsedOpcode, vm *Engine) error { +func opcodeRot(op *opcode, data []byte, vm *Engine) error { return vm.dstack.RotN(1) } // opcodeSwap swaps the top two items on the stack. // // Stack transformation: [... x1 x2] -> [... x2 x1] -func opcodeSwap(op *parsedOpcode, vm *Engine) error { +func opcodeSwap(op *opcode, data []byte, vm *Engine) error { return vm.dstack.SwapN(1) } @@ -1448,7 +1373,7 @@ func opcodeSwap(op *parsedOpcode, vm *Engine) error { // second-to-top item. // // Stack transformation: [... x1 x2] -> [... x2 x1 x2] -func opcodeTuck(op *parsedOpcode, vm *Engine) error { +func opcodeTuck(op *opcode, data []byte, vm *Engine) error { return vm.dstack.Tuck() } @@ -1456,7 +1381,7 @@ func opcodeTuck(op *parsedOpcode, vm *Engine) error { // stack. // // Stack transformation: [... x1] -> [... x1 len(x1)] -func opcodeSize(op *parsedOpcode, vm *Engine) error { +func opcodeSize(op *opcode, data []byte, vm *Engine) error { so, err := vm.dstack.PeekByteArray(0) if err != nil { return err @@ -1470,7 +1395,7 @@ func opcodeSize(op *parsedOpcode, vm *Engine) error { // bytes, and pushes the result, encoded as a boolean, back to the stack. // // Stack transformation: [... x1 x2] -> [... bool] -func opcodeEqual(op *parsedOpcode, vm *Engine) error { +func opcodeEqual(op *opcode, data []byte, vm *Engine) error { a, err := vm.dstack.PopByteArray() if err != nil { return err @@ -1491,8 +1416,8 @@ func opcodeEqual(op *parsedOpcode, vm *Engine) error { // evaluates to true. An error is returned if it does not. // // Stack transformation: [... x1 x2] -> [... bool] -> [...] -func opcodeEqualVerify(op *parsedOpcode, vm *Engine) error { - err := opcodeEqual(op, vm) +func opcodeEqualVerify(op *opcode, data []byte, vm *Engine) error { + err := opcodeEqual(op, data, vm) if err == nil { err = abstractVerify(op, vm, ErrEqualVerify) } @@ -1503,7 +1428,7 @@ func opcodeEqualVerify(op *parsedOpcode, vm *Engine) error { // it with its incremented value (plus 1). // // Stack transformation: [... x1 x2] -> [... x1 x2+1] -func opcode1Add(op *parsedOpcode, vm *Engine) error { +func opcode1Add(op *opcode, data []byte, vm *Engine) error { m, err := vm.dstack.PopInt() if err != nil { return err @@ -1517,7 +1442,7 @@ func opcode1Add(op *parsedOpcode, vm *Engine) error { // it with its decremented value (minus 1). // // Stack transformation: [... x1 x2] -> [... x1 x2-1] -func opcode1Sub(op *parsedOpcode, vm *Engine) error { +func opcode1Sub(op *opcode, data []byte, vm *Engine) error { m, err := vm.dstack.PopInt() if err != nil { return err @@ -1531,7 +1456,7 @@ func opcode1Sub(op *parsedOpcode, vm *Engine) error { // it with its negation. // // Stack transformation: [... x1 x2] -> [... x1 -x2] -func opcodeNegate(op *parsedOpcode, vm *Engine) error { +func opcodeNegate(op *opcode, data []byte, vm *Engine) error { m, err := vm.dstack.PopInt() if err != nil { return err @@ -1545,7 +1470,7 @@ func opcodeNegate(op *parsedOpcode, vm *Engine) error { // it with its absolute value. // // Stack transformation: [... x1 x2] -> [... x1 abs(x2)] -func opcodeAbs(op *parsedOpcode, vm *Engine) error { +func opcodeAbs(op *opcode, data []byte, vm *Engine) error { m, err := vm.dstack.PopInt() if err != nil { return err @@ -1570,7 +1495,7 @@ func opcodeAbs(op *parsedOpcode, vm *Engine) error { // Stack transformation (x2==0): [... x1 0] -> [... x1 1] // Stack transformation (x2!=0): [... x1 1] -> [... x1 0] // Stack transformation (x2!=0): [... x1 17] -> [... x1 0] -func opcodeNot(op *parsedOpcode, vm *Engine) error { +func opcodeNot(op *opcode, data []byte, vm *Engine) error { m, err := vm.dstack.PopInt() if err != nil { return err @@ -1590,7 +1515,7 @@ func opcodeNot(op *parsedOpcode, vm *Engine) error { // Stack transformation (x2==0): [... x1 0] -> [... x1 0] // Stack transformation (x2!=0): [... x1 1] -> [... x1 1] // Stack transformation (x2!=0): [... x1 17] -> [... x1 1] -func opcode0NotEqual(op *parsedOpcode, vm *Engine) error { +func opcode0NotEqual(op *opcode, data []byte, vm *Engine) error { m, err := vm.dstack.PopInt() if err != nil { return err @@ -1607,7 +1532,7 @@ func opcode0NotEqual(op *parsedOpcode, vm *Engine) error { // them with their sum. // // Stack transformation: [... x1 x2] -> [... x1+x2] -func opcodeAdd(op *parsedOpcode, vm *Engine) error { +func opcodeAdd(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1627,7 +1552,7 @@ func opcodeAdd(op *parsedOpcode, vm *Engine) error { // entry. // // Stack transformation: [... x1 x2] -> [... x1-x2] -func opcodeSub(op *parsedOpcode, vm *Engine) error { +func opcodeSub(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1649,7 +1574,7 @@ func opcodeSub(op *parsedOpcode, vm *Engine) error { // Stack transformation (x1!=0, x2==0): [... 5 0] -> [... 0] // Stack transformation (x1==0, x2!=0): [... 0 7] -> [... 0] // Stack transformation (x1!=0, x2!=0): [... 4 8] -> [... 1] -func opcodeBoolAnd(op *parsedOpcode, vm *Engine) error { +func opcodeBoolAnd(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1676,7 +1601,7 @@ func opcodeBoolAnd(op *parsedOpcode, vm *Engine) error { // Stack transformation (x1!=0, x2==0): [... 5 0] -> [... 1] // Stack transformation (x1==0, x2!=0): [... 0 7] -> [... 1] // Stack transformation (x1!=0, x2!=0): [... 4 8] -> [... 1] -func opcodeBoolOr(op *parsedOpcode, vm *Engine) error { +func opcodeBoolOr(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1701,7 +1626,7 @@ func opcodeBoolOr(op *parsedOpcode, vm *Engine) error { // // Stack transformation (x1==x2): [... 5 5] -> [... 1] // Stack transformation (x1!=x2): [... 5 7] -> [... 0] -func opcodeNumEqual(op *parsedOpcode, vm *Engine) error { +func opcodeNumEqual(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1729,8 +1654,8 @@ func opcodeNumEqual(op *parsedOpcode, vm *Engine) error { // to true. An error is returned if it does not. // // Stack transformation: [... x1 x2] -> [... bool] -> [...] -func opcodeNumEqualVerify(op *parsedOpcode, vm *Engine) error { - err := opcodeNumEqual(op, vm) +func opcodeNumEqualVerify(op *opcode, data []byte, vm *Engine) error { + err := opcodeNumEqual(op, data, vm) if err == nil { err = abstractVerify(op, vm, ErrNumEqualVerify) } @@ -1742,7 +1667,7 @@ func opcodeNumEqualVerify(op *parsedOpcode, vm *Engine) error { // // Stack transformation (x1==x2): [... 5 5] -> [... 0] // Stack transformation (x1!=x2): [... 5 7] -> [... 1] -func opcodeNumNotEqual(op *parsedOpcode, vm *Engine) error { +func opcodeNumNotEqual(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1767,7 +1692,7 @@ func opcodeNumNotEqual(op *parsedOpcode, vm *Engine) error { // otherwise a 0. // // Stack transformation: [... x1 x2] -> [... bool] -func opcodeLessThan(op *parsedOpcode, vm *Engine) error { +func opcodeLessThan(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1792,7 +1717,7 @@ func opcodeLessThan(op *parsedOpcode, vm *Engine) error { // with a 1, otherwise a 0. // // Stack transformation: [... x1 x2] -> [... bool] -func opcodeGreaterThan(op *parsedOpcode, vm *Engine) error { +func opcodeGreaterThan(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1816,7 +1741,7 @@ func opcodeGreaterThan(op *parsedOpcode, vm *Engine) error { // replaced with a 1, otherwise a 0. // // Stack transformation: [... x1 x2] -> [... bool] -func opcodeLessThanOrEqual(op *parsedOpcode, vm *Engine) error { +func opcodeLessThanOrEqual(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1840,7 +1765,7 @@ func opcodeLessThanOrEqual(op *parsedOpcode, vm *Engine) error { // item, they are replaced with a 1, otherwise a 0. // // Stack transformation: [... x1 x2] -> [... bool] -func opcodeGreaterThanOrEqual(op *parsedOpcode, vm *Engine) error { +func opcodeGreaterThanOrEqual(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1864,7 +1789,7 @@ func opcodeGreaterThanOrEqual(op *parsedOpcode, vm *Engine) error { // them with the minimum of the two. // // Stack transformation: [... x1 x2] -> [... min(x1, x2)] -func opcodeMin(op *parsedOpcode, vm *Engine) error { +func opcodeMin(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1888,7 +1813,7 @@ func opcodeMin(op *parsedOpcode, vm *Engine) error { // them with the maximum of the two. // // Stack transformation: [... x1 x2] -> [... max(x1, x2)] -func opcodeMax(op *parsedOpcode, vm *Engine) error { +func opcodeMax(op *opcode, data []byte, vm *Engine) error { v0, err := vm.dstack.PopInt() if err != nil { return err @@ -1916,7 +1841,7 @@ func opcodeMax(op *parsedOpcode, vm *Engine) error { // the third-to-top item is the value to test. // // Stack transformation: [... x1 min max] -> [... bool] -func opcodeWithin(op *parsedOpcode, vm *Engine) error { +func opcodeWithin(op *opcode, data []byte, vm *Engine) error { maxVal, err := vm.dstack.PopInt() if err != nil { return err @@ -1950,7 +1875,7 @@ func calcHash(buf []byte, hasher hash.Hash) []byte { // replaces it with ripemd160(data). // // Stack transformation: [... x1] -> [... ripemd160(x1)] -func opcodeRipemd160(op *parsedOpcode, vm *Engine) error { +func opcodeRipemd160(op *opcode, data []byte, vm *Engine) error { buf, err := vm.dstack.PopByteArray() if err != nil { return err @@ -1964,7 +1889,7 @@ func opcodeRipemd160(op *parsedOpcode, vm *Engine) error { // with sha1(data). // // Stack transformation: [... x1] -> [... sha1(x1)] -func opcodeSha1(op *parsedOpcode, vm *Engine) error { +func opcodeSha1(op *opcode, data []byte, vm *Engine) error { buf, err := vm.dstack.PopByteArray() if err != nil { return err @@ -1979,7 +1904,7 @@ func opcodeSha1(op *parsedOpcode, vm *Engine) error { // it with sha256(data). // // Stack transformation: [... x1] -> [... sha256(x1)] -func opcodeSha256(op *parsedOpcode, vm *Engine) error { +func opcodeSha256(op *opcode, data []byte, vm *Engine) error { buf, err := vm.dstack.PopByteArray() if err != nil { return err @@ -1994,7 +1919,7 @@ func opcodeSha256(op *parsedOpcode, vm *Engine) error { // it with ripemd160(sha256(data)). // // Stack transformation: [... x1] -> [... ripemd160(sha256(x1))] -func opcodeHash160(op *parsedOpcode, vm *Engine) error { +func opcodeHash160(op *opcode, data []byte, vm *Engine) error { buf, err := vm.dstack.PopByteArray() if err != nil { return err @@ -2009,7 +1934,7 @@ func opcodeHash160(op *parsedOpcode, vm *Engine) error { // it with sha256(sha256(data)). // // Stack transformation: [... x1] -> [... sha256(sha256(x1))] -func opcodeHash256(op *parsedOpcode, vm *Engine) error { +func opcodeHash256(op *opcode, data []byte, vm *Engine) error { buf, err := vm.dstack.PopByteArray() if err != nil { return err @@ -2023,8 +1948,13 @@ func opcodeHash256(op *parsedOpcode, vm *Engine) error { // seen OP_CODESEPARATOR which is used during signature checking. // // This opcode does not change the contents of the data stack. -func opcodeCodeSeparator(op *parsedOpcode, vm *Engine) error { - vm.lastCodeSep = vm.scriptOff +func opcodeCodeSeparator(op *opcode, data []byte, vm *Engine) error { + vm.lastCodeSep = int(vm.tokenizer.ByteIndex()) + + if vm.taprootCtx != nil { + vm.taprootCtx.codeSepPos = uint32(vm.tokenizer.OpcodePosition()) + } + return nil } @@ -2042,7 +1972,7 @@ func opcodeCodeSeparator(op *parsedOpcode, vm *Engine) error { // cryptographic methods against the provided public key. // // Stack transformation: [... signature pubkey] -> [... bool] -func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { +func opcodeCheckSig(op *opcode, data []byte, vm *Engine) error { pkBytes, err := vm.dstack.PopByteArray() if err != nil { return err @@ -2056,95 +1986,101 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { // The signature actually needs needs to be longer than this, but at // least 1 byte is needed for the hash type below. The full length is // checked depending on the script flags and upon parsing the signature. - if len(fullSigBytes) < 1 { + // + // This only applies if tapscript verification isn't active, as this + // check is done within the sighash itself. + if vm.taprootCtx == nil && len(fullSigBytes) < 1 { vm.dstack.PushBool(false) return nil } - // Trim off hashtype from the signature string and check if the - // signature and pubkey conform to the strict encoding requirements - // depending on the flags. - // - // NOTE: When the strict encoding flags are set, any errors in the - // signature or public encoding here result in an immediate script error - // (and thus no result bool is pushed to the data stack). This differs - // from the logic below where any errors in parsing the signature is - // treated as the signature failure resulting in false being pushed to - // the data stack. This is required because the more general script - // validation consensus rules do not have the new strict encoding - // requirements enabled by the flags. - hashType := SigHashType(fullSigBytes[len(fullSigBytes)-1]) - sigBytes := fullSigBytes[:len(fullSigBytes)-1] - if err := vm.checkHashTypeEncoding(hashType); err != nil { - return err - } - if err := vm.checkSignatureEncoding(sigBytes); err != nil { - return err - } - if err := vm.checkPubKeyEncoding(pkBytes); err != nil { - return err - } + var sigVerifier signatureVerifier + switch { + // If no witness program is active, then we're verifying under the + // base consensus rules. + case vm.witnessProgram == nil: + sigVerifier, err = newBaseSigVerifier( + pkBytes, fullSigBytes, vm, + ) + if err != nil { + var scriptErr Error + if errors.As(err, &scriptErr) { + return err + } - // Get script starting from the most recent OP_CODESEPARATOR. - subScript := vm.subScript() - - // Generate the signature hash based on the signature hash type. - var hash []byte - if vm.isWitnessVersionActive(0) { - var sigHashes *TxSigHashes - if vm.hashCache != nil { - sigHashes = vm.hashCache - } else { - sigHashes = NewTxSigHashes(&vm.tx) + vm.dstack.PushBool(false) + return nil } - hash, err = calcWitnessSignatureHash(subScript, sigHashes, hashType, - &vm.tx, vm.txIdx, vm.inputAmount) + // If the base segwit version is active, then we'll create the verifier + // that factors in those new consensus rules. + case vm.isWitnessVersionActive(BaseSegwitWitnessVersion): + sigVerifier, err = newBaseSegwitSigVerifier( + pkBytes, fullSigBytes, vm, + ) if err != nil { - return err - } - } else { - // Remove the signature since there is no way for a signature - // to sign itself. - subScript = removeOpcodeByData(subScript, fullSigBytes) - - hash = calcSignatureHash(subScript, hashType, &vm.tx, vm.txIdx) - } + var scriptErr Error + if errors.As(err, &scriptErr) { + return err + } - pubKey, err := btcec.ParsePubKey(pkBytes, btcec.S256()) - if err != nil { - vm.dstack.PushBool(false) - return nil - } + vm.dstack.PushBool(false) + return nil + } - var signature *btcec.Signature - if vm.hasFlag(ScriptVerifyStrictEncoding) || - vm.hasFlag(ScriptVerifyDERSignatures) { + // Otherwise, this is routine tapscript execution. + case vm.taprootCtx != nil: + // Account for changes in the sig ops budget after this + // execution, but only for non-empty signatures. + if len(fullSigBytes) > 0 { + if err := vm.taprootCtx.tallysigOp(); err != nil { + return err + } + } - signature, err = btcec.ParseDERSignature(sigBytes, btcec.S256()) - } else { - signature, err = btcec.ParseSignature(sigBytes, btcec.S256()) - } - if err != nil { - vm.dstack.PushBool(false) - return nil - } + // Empty public keys immediately cause execution to fail. + if len(pkBytes) == 0 { + return scriptError(ErrTaprootPubkeyIsEmpty, "") + } - var valid bool - if vm.sigCache != nil { - var sigHash chainhash.Hash - copy(sigHash[:], hash) + // If this is tapscript execution, and the signature was + // actually an empty vector, then we push on an empty vector + // and continue execution from there, but only if the pubkey + // isn't empty. + if len(fullSigBytes) == 0 { + vm.dstack.PushByteArray([]byte{}) + return nil + } - valid = vm.sigCache.Exists(sigHash, signature, pubKey) - if !valid && signature.Verify(hash, pubKey) { - vm.sigCache.Add(sigHash, signature, pubKey) - valid = true + // If the constructor fails immediately, then it's because + // the public key size is zero, so we'll fail all script + // execution. + sigVerifier, err = newBaseTapscriptSigVerifier( + pkBytes, fullSigBytes, vm, + ) + if err != nil { + return err } - } else { - valid = signature.Verify(hash, pubKey) - } - if !valid && vm.hasFlag(ScriptVerifyNullFail) && len(sigBytes) > 0 { + default: + // We skip segwit v1 in isolation here, as the v1 rules aren't + // used in script execution (for sig verification) and are only + // part of the top-level key-spend verification which we + // already skipped. + // + // In other words, this path shouldn't ever be reached + // + // TODO(roasbeef): return an error? + } + + valid := sigVerifier.Verify() + + switch { + // For tapscript, and prior execution with null fail active, if the + // signature is invalid, then this MUST be an empty signature. + case !valid && vm.taprootCtx != nil && len(fullSigBytes) != 0: + fallthrough + case !valid && vm.hasFlag(ScriptVerifyNullFail) && len(fullSigBytes) > 0: str := "signature not empty on failed checksig" return scriptError(ErrNullFail, str) } @@ -2157,21 +2093,101 @@ func opcodeCheckSig(op *parsedOpcode, vm *Engine) error { // The opcodeCheckSig function is invoked followed by opcodeVerify. See the // documentation for each of those opcodes for more details. // -// Stack transformation: signature pubkey] -> [... bool] -> [...] -func opcodeCheckSigVerify(op *parsedOpcode, vm *Engine) error { - err := opcodeCheckSig(op, vm) +// Stack transformation: [... signature pubkey] -> [... bool] -> [...] +func opcodeCheckSigVerify(op *opcode, data []byte, vm *Engine) error { + err := opcodeCheckSig(op, data, vm) if err == nil { err = abstractVerify(op, vm, ErrCheckSigVerify) } return err } +// opcodeCheckSigAdd implements the OP_CHECKSIGADD operation defined in BIP +// 342. This is a replacement for OP_CHECKMULTISIGVERIFY and OP_CHECKMULTISIG +// that lends better to batch sig validation, as well as a possible future of +// signature aggregation across inputs. +// +// The op code takes a public key, an integer (N) and a signature, and returns +// N if the signature was the empty vector, and n+1 otherwise. +// +// Stack transformation: [... pubkey n signature] -> [... n | n+1 ] -> [...] +func opcodeCheckSigAdd(op *opcode, data []byte, vm *Engine) error { + // This op code can only be used if tapsript execution is active. + // Before the soft fork, this opcode was marked as an invalid reserved + // op code. + if vm.taprootCtx == nil { + str := fmt.Sprintf("attempt to execute invalid opcode %s", op.name) + return scriptError(ErrReservedOpcode, str) + } + + // Pop the signature, integer n, and public key off the stack. + pubKeyBytes, err := vm.dstack.PopByteArray() + if err != nil { + return err + } + accumulatorInt, err := vm.dstack.PopInt() + if err != nil { + return err + } + sigBytes, err := vm.dstack.PopByteArray() + if err != nil { + return err + } + + // Only non-empty signatures count towards the total tapscript sig op + // limit. + if len(sigBytes) != 0 { + // Account for changes in the sig ops budget after this execution. + if err := vm.taprootCtx.tallysigOp(); err != nil { + return err + } + } + + // Empty public keys immediately cause execution to fail. + if len(pubKeyBytes) == 0 { + return scriptError(ErrTaprootPubkeyIsEmpty, "") + } + + // If the signature is empty, then we'll just push the value N back + // onto the stack and continue from here. + if len(sigBytes) == 0 { + vm.dstack.PushInt(accumulatorInt) + return nil + } + + // Otherwise, we'll attempt to validate the signature as normal. + // + // If the constructor fails immediately, then it's because the public + // key size is zero, so we'll fail all script execution. + sigVerifier, err := newBaseTapscriptSigVerifier( + pubKeyBytes, sigBytes, vm, + ) + if err != nil { + return err + } + + valid := sigVerifier.Verify() + + // If the signature is invalid, this we fail execution, as it should + // have been an empty signature. + if !valid { + str := "signature not empty on failed checksig" + return scriptError(ErrNullFail, str) + } + + // Otherwise, we increment the accumulatorInt by one, and push that + // back onto the stack. + vm.dstack.PushInt(accumulatorInt + 1) + + return nil +} + // parsedSigInfo houses a raw signature along with its parsed form and a flag // for whether or not it has already been parsed. It is used to prevent parsing // the same signature multiple times when verifying a multisig. type parsedSigInfo struct { signature []byte - parsedSignature *btcec.Signature + parsedSignature *ecdsa.Signature parsed bool } @@ -2194,7 +2210,15 @@ type parsedSigInfo struct { // // Stack transformation: // [... dummy [sig ...] numsigs [pubkey ...] numpubkeys] -> [... bool] -func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { +func opcodeCheckMultiSig(op *opcode, data []byte, vm *Engine) error { + // If we're doing tapscript execution, then this op code is disabled. + if vm.taprootCtx != nil { + str := fmt.Sprintf("OP_CHECKMULTISIG and " + + "OP_CHECKMULTISIGVERIFY are disabled during " + + "tapscript execution") + return scriptError(ErrTapscriptCheckMultisig, str) + } + numKeys, err := vm.dstack.PopInt() if err != nil { return err @@ -2316,7 +2340,7 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { signature := rawSig[:len(rawSig)-1] // Only parse and check the signature encoding once. - var parsedSig *btcec.Signature + var parsedSig *ecdsa.Signature if !sigInfo.parsed { if err := vm.checkHashTypeEncoding(hashType); err != nil { return err @@ -2330,11 +2354,9 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { if vm.hasFlag(ScriptVerifyStrictEncoding) || vm.hasFlag(ScriptVerifyDERSignatures) { - parsedSig, err = btcec.ParseDERSignature(signature, - btcec.S256()) + parsedSig, err = ecdsa.ParseDERSignature(signature) } else { - parsedSig, err = btcec.ParseSignature(signature, - btcec.S256()) + parsedSig, err = ecdsa.ParseSignature(signature) } sigInfo.parsed = true if err != nil { @@ -2356,7 +2378,7 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { } // Parse the pubkey. - parsedPubKey, err := btcec.ParsePubKey(pubKey, btcec.S256()) + parsedPubKey, err := btcec.ParsePubKey(pubKey) if err != nil { continue } @@ -2368,10 +2390,12 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { if vm.hashCache != nil { sigHashes = vm.hashCache } else { - sigHashes = NewTxSigHashes(&vm.tx) + sigHashes = NewTxSigHashes( + &vm.tx, vm.prevOutFetcher, + ) } - hash, err = calcWitnessSignatureHash(script, sigHashes, hashType, + hash, err = calcWitnessSignatureHashRaw(script, sigHashes, hashType, &vm.tx, vm.txIdx, vm.inputAmount) if err != nil { return err @@ -2385,9 +2409,9 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { var sigHash chainhash.Hash copy(sigHash[:], hash) - valid = vm.sigCache.Exists(sigHash, parsedSig, parsedPubKey) + valid = vm.sigCache.Exists(sigHash, signature, pubKey) if !valid && parsedSig.Verify(hash, parsedPubKey) { - vm.sigCache.Add(sigHash, parsedSig, parsedPubKey) + vm.sigCache.Add(sigHash, signature, pubKey) valid = true } } else { @@ -2420,8 +2444,8 @@ func opcodeCheckMultiSig(op *parsedOpcode, vm *Engine) error { // // Stack transformation: // [... dummy [sig ...] numsigs [pubkey ...] numpubkeys] -> [... bool] -> [...] -func opcodeCheckMultiSigVerify(op *parsedOpcode, vm *Engine) error { - err := opcodeCheckMultiSig(op, vm) +func opcodeCheckMultiSigVerify(op *opcode, data []byte, vm *Engine) error { + err := opcodeCheckMultiSig(op, data, vm) if err == nil { err = abstractVerify(op, vm, ErrCheckMultiSigVerify) } diff --git a/txscript/opcode_test.go b/txscript/opcode_test.go index 6e3205a209..15c62907aa 100644 --- a/txscript/opcode_test.go +++ b/txscript/opcode_test.go @@ -23,8 +23,8 @@ func TestOpcodeDisabled(t *testing.T) { OP_LSHIFT, OP_RSHIFT, } for _, opcodeVal := range tests { - pop := parsedOpcode{opcode: &opcodeArray[opcodeVal], data: nil} - err := opcodeDisabled(&pop, nil) + op := &opcodeArray[opcodeVal] + err := opcodeDisabled(op, nil, nil) if !IsErrorCode(err, ErrDisabledOpcode) { t.Errorf("opcodeDisabled: unexpected error - got %v, "+ "want %v", err, ErrDisabledOpcode) @@ -77,7 +77,7 @@ func TestOpcodeDisasm(t *testing.T) { 0xae: "OP_CHECKMULTISIG", 0xaf: "OP_CHECKMULTISIGVERIFY", 0xfa: "OP_SMALLINTEGER", 0xfb: "OP_PUBKEYS", 0xfd: "OP_PUBKEYHASH", 0xfe: "OP_PUBKEY", - 0xff: "OP_INVALIDOPCODE", + 0xff: "OP_INVALIDOPCODE", 0xba: "OP_CHECKSIGADD", } for opcodeVal, expectedStr := range expectedStrings { var data []byte @@ -123,12 +123,13 @@ func TestOpcodeDisasm(t *testing.T) { } // OP_UNKNOWN#. - case opcodeVal >= 0xba && opcodeVal <= 0xf9 || opcodeVal == 0xfc: - expectedStr = "OP_UNKNOWN" + strconv.Itoa(int(opcodeVal)) + case opcodeVal >= 0xbb && opcodeVal <= 0xf9 || opcodeVal == 0xfc: + expectedStr = "OP_UNKNOWN" + strconv.Itoa(opcodeVal) } - pop := parsedOpcode{opcode: &opcodeArray[opcodeVal], data: data} - gotStr := pop.print(true) + var buf strings.Builder + disasmOpcode(&buf, &opcodeArray[opcodeVal], data, true) + gotStr := buf.String() if gotStr != expectedStr { t.Errorf("pop.print (opcode %x): Unexpected disasm "+ "string - got %v, want %v", opcodeVal, gotStr, @@ -190,11 +191,18 @@ func TestOpcodeDisasm(t *testing.T) { // OP_UNKNOWN#. case opcodeVal >= 0xba && opcodeVal <= 0xf9 || opcodeVal == 0xfc: - expectedStr = "OP_UNKNOWN" + strconv.Itoa(int(opcodeVal)) + switch opcodeVal { + // OP_UNKNOWN186 a.k.a 0xba is now OP_CHECKSIGADD. + case 0xba: + expectedStr = "OP_CHECKSIGADD" + default: + expectedStr = "OP_UNKNOWN" + strconv.Itoa(opcodeVal) + } } - pop := parsedOpcode{opcode: &opcodeArray[opcodeVal], data: data} - gotStr := pop.print(false) + var buf strings.Builder + disasmOpcode(&buf, &opcodeArray[opcodeVal], data, false) + gotStr := buf.String() if gotStr != expectedStr { t.Errorf("pop.print (opcode %x): Unexpected disasm "+ "string - got %v, want %v", opcodeVal, gotStr, diff --git a/txscript/pkscript.go b/txscript/pkscript.go index 0703ef5d05..4998f97b2f 100644 --- a/txscript/pkscript.go +++ b/txscript/pkscript.go @@ -5,10 +5,11 @@ import ( "errors" "fmt" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" "golang.org/x/crypto/ripemd160" ) @@ -20,7 +21,7 @@ const ( // Signature hash type (1 byte) // Public key length (1 byte) // Public key (33 byte) - minPubKeyHashSigScriptLen = 1 + btcec.MinSigLen + 1 + 1 + 33 + minPubKeyHashSigScriptLen = 1 + ecdsa.MinSigLen + 1 + 1 + 33 // maxPubKeyHashSigScriptLen is the maximum length of a signature script // that spends a P2PKH output. The length is composed of the following: @@ -47,6 +48,9 @@ const ( // witnessV0ScriptHashLen is the length of a P2WSH script. witnessV0ScriptHashLen = 34 + // witnessV1TaprootLen is the length of a P2TR script. + witnessV1TaprootLen = 34 + // maxLen is the maximum script length supported by ParsePkScript. maxLen = witnessV0ScriptHashLen ) @@ -99,7 +103,7 @@ func ParsePkScript(pkScript []byte) (PkScript, error) { func isSupportedScriptType(class ScriptClass) bool { switch class { case PubKeyHashTy, WitnessV0PubKeyHashTy, ScriptHashTy, - WitnessV0ScriptHashTy: + WitnessV0ScriptHashTy, WitnessV1TaprootTy: return true default: return false @@ -132,6 +136,10 @@ func (s PkScript) Script() []byte { script = make([]byte, witnessV0ScriptHashLen) copy(script, s.script[:witnessV0ScriptHashLen]) + case WitnessV1TaprootTy: + script = make([]byte, witnessV1TaprootLen) + copy(script, s.script[:witnessV1TaprootLen]) + default: // Unsupported script type. return nil @@ -211,11 +219,12 @@ func computeNonWitnessPkScript(sigScript []byte) (PkScript, error) { // The redeem script will always be the last data push of the // signature script, so we'll parse the script into opcodes to // obtain it. - parsedOpcodes, err := parseScript(sigScript) + const scriptVersion = 0 + err := checkScriptParses(scriptVersion, sigScript) if err != nil { return PkScript{}, err } - redeemScript := parsedOpcodes[len(parsedOpcodes)-1].data + redeemScript := finalOpcodeData(scriptVersion, sigScript) scriptHash := hash160(redeemScript) script, err := payToScriptHashScript(scriptHash) diff --git a/txscript/pkscript_test.go b/txscript/pkscript_test.go index 841842c268..c82ab04e62 100644 --- a/txscript/pkscript_test.go +++ b/txscript/pkscript_test.go @@ -337,9 +337,9 @@ func TestComputePkScript(t *testing.T) { name: "P2WSH witness", sigScript: nil, witness: [][]byte{ - []byte{}, + {}, // Witness script. - []byte{ + { 0x21, 0x03, 0x82, 0x62, 0xa6, 0xc6, 0xce, 0xc9, 0x3c, 0x2d, 0x3e, 0xcd, 0x6c, 0x60, 0x72, 0xef, 0xea, 0x86, @@ -367,9 +367,9 @@ func TestComputePkScript(t *testing.T) { witness: [][]byte{ // Signature is not needed to re-derive the // pkScript. - []byte{}, + {}, // Compressed pubkey. - []byte{ + { 0x03, 0x82, 0x62, 0xa6, 0xc6, 0xce, 0xc9, 0x3c, 0x2d, 0x3e, 0xcd, 0x6c, 0x60, 0x72, 0xef, 0xea, 0x86, 0xd0, @@ -398,9 +398,9 @@ func TestComputePkScript(t *testing.T) { witness: [][]byte{ // Signature is not needed to re-derive the // pkScript. - []byte{}, + {}, // Malformed compressed pubkey. - []byte{ + { 0x03, 0x82, 0x62, 0xa6, 0xc6, 0xce, 0xc9, 0x3c, 0x2d, 0x3e, 0xcd, 0x6c, 0x60, 0x72, 0xef, 0xea, 0x86, 0xd0, @@ -429,12 +429,12 @@ func TestComputePkScript(t *testing.T) { } if pkScript.Class() != test.class { - t.Fatalf("expected pkScript of type %v, got %v", - test.class, pkScript.Class()) + t.Fatalf("%s: expected pkScript of type %v, got %v", + test.name, test.class, pkScript.Class()) } if !bytes.Equal(pkScript.Script(), test.pkScript) { - t.Fatalf("expected pkScript=%x, got pkScript=%x", - test.pkScript, pkScript.Script()) + t.Fatalf("%s: expected pkScript=%x, got pkScript=%x", + test.name, test.pkScript, pkScript.Script()) } }) } diff --git a/txscript/reference_test.go b/txscript/reference_test.go index 5015960b94..59acdb8da7 100644 --- a/txscript/reference_test.go +++ b/txscript/reference_test.go @@ -10,14 +10,16 @@ import ( "encoding/json" "errors" "fmt" + "io/fs" "io/ioutil" + "path/filepath" "strconv" "strings" "testing" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // scriptTestName returns a descriptive test name for the given reference script @@ -192,6 +194,8 @@ func parseScriptFlags(flagStr string) (ScriptFlags, error) { flags |= ScriptVerifyMinimalIf case "WITNESS_PUBKEYTYPE": flags |= ScriptVerifyWitnessPubKeyType + case "TAPROOT": + flags |= ScriptVerifyTaproot default: return flags, fmt.Errorf("invalid flag: %s", flag) } @@ -441,10 +445,14 @@ func testScripts(t *testing.T, tests [][]interface{}, useSigCache bool) { // Generate a transaction pair such that one spends from the // other and the provided signature and public key scripts are // used, then create a new engine to execute the scripts. - tx := createSpendingTx(witness, scriptSig, scriptPubKey, - int64(inputAmt)) - vm, err := NewEngine(scriptPubKey, tx, 0, flags, sigCache, nil, - int64(inputAmt)) + tx := createSpendingTx( + witness, scriptSig, scriptPubKey, int64(inputAmt), + ) + prevOuts := NewCannedPrevOutputFetcher(scriptPubKey, int64(inputAmt)) + vm, err := NewEngine( + scriptPubKey, tx, 0, flags, sigCache, nil, + int64(inputAmt), prevOuts, + ) if err == nil { err = vm.Execute() } @@ -572,7 +580,7 @@ testloop: continue } - prevOuts := make(map[wire.OutPoint]scriptWithInputVal) + prevOutFetcher := NewMultiPrevOutFetcher(nil) for j, iinput := range inputs { input, ok := iinput.([]interface{}) if !ok { @@ -633,16 +641,18 @@ testloop: } } - v := scriptWithInputVal{ - inputVal: int64(inputValue), - pkScript: script, - } - prevOuts[*wire.NewOutPoint(prevhash, idx)] = v + op := wire.NewOutPoint(prevhash, idx) + prevOutFetcher.AddPrevOut(*op, &wire.TxOut{ + Value: int64(inputValue), + PkScript: script, + }) } for k, txin := range tx.MsgTx().TxIn { - prevOut, ok := prevOuts[txin.PreviousOutPoint] - if !ok { + prevOut := prevOutFetcher.FetchPrevOutput( + txin.PreviousOutPoint, + ) + if prevOut == nil { t.Errorf("bad test (missing %dth input) %d:%v", k, i, test) continue testloop @@ -650,8 +660,8 @@ testloop: // These are meant to fail, so as soon as the first // input fails the transaction has failed. (some of the // test txns have good inputs, too.. - vm, err := NewEngine(prevOut.pkScript, tx.MsgTx(), k, - flags, nil, nil, prevOut.inputVal) + vm, err := NewEngine(prevOut.PkScript, tx.MsgTx(), k, + flags, nil, nil, prevOut.Value, prevOutFetcher) if err != nil { continue testloop } @@ -727,7 +737,7 @@ testloop: continue } - prevOuts := make(map[wire.OutPoint]scriptWithInputVal) + prevOutFetcher := NewMultiPrevOutFetcher(nil) for j, iinput := range inputs { input, ok := iinput.([]interface{}) if !ok { @@ -788,22 +798,24 @@ testloop: } } - v := scriptWithInputVal{ - inputVal: int64(inputValue), - pkScript: script, - } - prevOuts[*wire.NewOutPoint(prevhash, idx)] = v + op := wire.NewOutPoint(prevhash, idx) + prevOutFetcher.AddPrevOut(*op, &wire.TxOut{ + Value: int64(inputValue), + PkScript: script, + }) } for k, txin := range tx.MsgTx().TxIn { - prevOut, ok := prevOuts[txin.PreviousOutPoint] - if !ok { + prevOut := prevOutFetcher.FetchPrevOutput( + txin.PreviousOutPoint, + ) + if prevOut == nil { t.Errorf("bad test (missing %dth input) %d:%v", k, i, test) continue testloop } - vm, err := NewEngine(prevOut.pkScript, tx.MsgTx(), k, - flags, nil, nil, prevOut.inputVal) + vm, err := NewEngine(prevOut.PkScript, tx.MsgTx(), k, + flags, nil, nil, prevOut.Value, prevOutFetcher) if err != nil { t.Errorf("test (%d:%v:%d) failed to create "+ "script: %v", i, test, k, err) @@ -836,6 +848,7 @@ func TestCalcSignatureHash(t *testing.T) { err) } + const scriptVersion = 0 for i, test := range tests { if i == 0 { // Skip first line -- contains comments only. @@ -855,16 +868,20 @@ func TestCalcSignatureHash(t *testing.T) { } subScript, _ := hex.DecodeString(test[1].(string)) - parsedScript, err := parseScript(subScript) - if err != nil { + if err := checkScriptParses(scriptVersion, subScript); err != nil { t.Errorf("TestCalcSignatureHash failed test #%d: "+ "Failed to parse sub-script: %v", i, err) continue } hashType := SigHashType(testVecF64ToUint32(test[3].(float64))) - hash := calcSignatureHash(parsedScript, hashType, &tx, + hash, err := CalcSignatureHash(subScript, hashType, &tx, int(test[2].(float64))) + if err != nil { + t.Errorf("TestCalcSignatureHash failed test #%d: "+ + "Failed to compute sighash: %v", i, err) + continue + } expectedHash, _ := chainhash.NewHashFromStr(test[4].(string)) if !bytes.Equal(hash, expectedHash[:]) { @@ -873,3 +890,189 @@ func TestCalcSignatureHash(t *testing.T) { } } } + +type inputWitness struct { + ScriptSig string `json:"scriptSig"` + Witness []string `json:"witness"` +} + +type taprootJsonTest struct { + Tx string `json:"tx"` + Prevouts []string `json:"prevouts"` + Index int `json:"index"` + Flags string `json:"flags"` + + Comment string `json:"comment"` + + Success *inputWitness `json:"success"` + + Failure *inputWitness `json:"failure"` +} + +func executeTaprootRefTest(t *testing.T, testCase taprootJsonTest) { + t.Helper() + + txHex, err := hex.DecodeString(testCase.Tx) + if err != nil { + t.Fatalf("unable to decode hex: %v", err) + } + tx, err := btcutil.NewTxFromBytes(txHex) + if err != nil { + t.Fatalf("unable to decode hex: %v", err) + } + + var prevOut wire.TxOut + + prevOutFetcher := NewMultiPrevOutFetcher(nil) + for i, prevOutString := range testCase.Prevouts { + prevOutBytes, err := hex.DecodeString(prevOutString) + if err != nil { + t.Fatalf("unable to decode hex: %v", err) + } + + var txOut wire.TxOut + err = wire.ReadTxOut( + bytes.NewReader(prevOutBytes), 0, 0, &txOut, + ) + if err != nil { + t.Fatalf("unable to read utxo: %v", err) + } + + prevOutFetcher.AddPrevOut( + tx.MsgTx().TxIn[i].PreviousOutPoint, &txOut, + ) + + if i == testCase.Index { + prevOut = txOut + } + } + + flags, err := parseScriptFlags(testCase.Flags) + if err != nil { + t.Fatalf("unable to parse flags: %v", err) + } + + makeVM := func() *Engine { + hashCache := NewTxSigHashes(tx.MsgTx(), prevOutFetcher) + + vm, err := NewEngine( + prevOut.PkScript, tx.MsgTx(), testCase.Index, + flags, nil, hashCache, prevOut.Value, prevOutFetcher, + ) + if err != nil { + t.Fatalf("unable to create vm: %v", err) + } + + return vm + } + + if testCase.Success != nil { + tx.MsgTx().TxIn[testCase.Index].SignatureScript, err = hex.DecodeString( + testCase.Success.ScriptSig, + ) + if err != nil { + t.Fatalf("unable to parse sig script: %v", err) + } + + var witness [][]byte + for _, witnessStr := range testCase.Success.Witness { + witElem, err := hex.DecodeString(witnessStr) + if err != nil { + t.Fatalf("unable to parse witness stack: %v", err) + } + + witness = append(witness, witElem) + } + + tx.MsgTx().TxIn[testCase.Index].Witness = witness + + vm := makeVM() + + err = vm.Execute() + if err != nil { + t.Fatalf("test (%v) failed to execute: "+ + "%v", testCase.Comment, err) + } + } + + if testCase.Failure != nil { + tx.MsgTx().TxIn[testCase.Index].SignatureScript, err = hex.DecodeString( + testCase.Failure.ScriptSig, + ) + if err != nil { + t.Fatalf("unable to parse sig script: %v", err) + } + + var witness [][]byte + for _, witnessStr := range testCase.Failure.Witness { + witElem, err := hex.DecodeString(witnessStr) + if err != nil { + t.Fatalf("unable to parse witness stack: %v", err) + } + + witness = append(witness, witElem) + } + + tx.MsgTx().TxIn[testCase.Index].Witness = witness + + vm := makeVM() + + err = vm.Execute() + if err == nil { + t.Fatalf("test (%v) succeeded, should fail: "+ + "%v", testCase.Comment, err) + } + } +} + +// TestTaprootReferenceTests test that we're able to properly validate (success +// and failure paths for each test) the set of functional generative tests +// created by the bitcoind project for taproot at: +// https://github.com/bitcoin/bitcoin/blob/master/test/functional/feature_taproot.py. +func TestTaprootReferenceTests(t *testing.T) { + t.Parallel() + + filePath := "data/taproot-ref" + + testFunc := func(path string, info fs.FileInfo, walkErr error) error { + if walkErr != nil { + return walkErr + } + + if info.IsDir() { + t.Logf("skipping dir: %v", info.Name()) + return nil + } + + testJson, err := ioutil.ReadFile(path) + if err != nil { + return fmt.Errorf("unable to read file: %v", err) + } + + // All the JSON files have a trailing comma and a new line + // character, so we'll remove that here before attempting to + // parse it. + testJson = bytes.TrimSuffix(testJson, []byte(",\n")) + + var testCase taprootJsonTest + if err := json.Unmarshal(testJson, &testCase); err != nil { + return fmt.Errorf("unable to decode json: %v", err) + } + + testName := fmt.Sprintf( + "%v:%v", testCase.Comment, filepath.Base(path), + ) + _ = t.Run(testName, func(t *testing.T) { + t.Parallel() + + executeTaprootRefTest(t, testCase) + }) + + return nil + } + + err := filepath.Walk(filePath, testFunc) + if err != nil { + t.Fatalf("unable to execute taproot test vectors: %v", err) + } +} diff --git a/txscript/script.go b/txscript/script.go index aac3d4aaaa..602c1fced1 100644 --- a/txscript/script.go +++ b/txscript/script.go @@ -1,4 +1,5 @@ // Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2019 The Decred developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -6,11 +7,10 @@ package txscript import ( "bytes" - "encoding/binary" "fmt" + "strings" "time" - "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" ) @@ -19,20 +19,18 @@ import ( // This timestamp corresponds to Sun Apr 1 00:00:00 UTC 2012. var Bip16Activation = time.Unix(1333238400, 0) -// SigHashType represents hash type bits at the end of a signature. -type SigHashType uint32 - -// Hash type bits from the end of a signature. const ( - SigHashOld SigHashType = 0x0 - SigHashAll SigHashType = 0x1 - SigHashNone SigHashType = 0x2 - SigHashSingle SigHashType = 0x3 - SigHashAnyOneCanPay SigHashType = 0x80 - - // sigHashMask defines the number of bits of the hash type which is used - // to identify which outputs are signed. - sigHashMask = 0x1f + // TaprootAnnexTag is the tag for an annex. This value is used to + // identify the annex during tapscript spends. If there're at least two + // elements in the taproot witness stack, and the first byte of the + // last element matches this tag, then we'll extract this as a distinct + // item. + TaprootAnnexTag = 0x50 + + // TaprootLeafMask is the mask applied to the control block to extract + // the leaf version and parity of the y-coordinate of the output key if + // the taproot script leaf being spent. + TaprootLeafMask = 0xfe ) // These are the constants specified for maximums in individual scripts. @@ -44,66 +42,54 @@ const ( // isSmallInt returns whether or not the opcode is considered a small integer, // which is an OP_0, or OP_1 through OP_16. -func isSmallInt(op *opcode) bool { - if op.value == OP_0 || (op.value >= OP_1 && op.value <= OP_16) { - return true - } - return false +// +// NOTE: This function is only valid for version 0 opcodes. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func isSmallInt(op byte) bool { + return op == OP_0 || (op >= OP_1 && op <= OP_16) } -// isScriptHash returns true if the script passed is a pay-to-script-hash -// transaction, false otherwise. -func isScriptHash(pops []parsedOpcode) bool { - return len(pops) == 3 && - pops[0].opcode.value == OP_HASH160 && - pops[1].opcode.value == OP_DATA_20 && - pops[2].opcode.value == OP_EQUAL +// IsPayToPubKey returns true if the script is in the standard pay-to-pubkey +// (P2PK) format, false otherwise. +func IsPayToPubKey(script []byte) bool { + return isPubKeyScript(script) +} + +// IsPayToPubKeyHash returns true if the script is in the standard +// pay-to-pubkey-hash (P2PKH) format, false otherwise. +func IsPayToPubKeyHash(script []byte) bool { + return isPubKeyHashScript(script) } // IsPayToScriptHash returns true if the script is in the standard // pay-to-script-hash (P2SH) format, false otherwise. +// +// WARNING: This function always treats the passed script as version 0. Great +// care must be taken if introducing a new script version because it is used in +// consensus which, unfortunately as of the time of this writing, does not check +// script versions before determining if the script is a P2SH which means nodes +// on existing rules will analyze new version scripts as if they were version 0. func IsPayToScriptHash(script []byte) bool { - pops, err := parseScript(script) - if err != nil { - return false - } - return isScriptHash(pops) -} - -// isWitnessScriptHash returns true if the passed script is a -// pay-to-witness-script-hash transaction, false otherwise. -func isWitnessScriptHash(pops []parsedOpcode) bool { - return len(pops) == 2 && - pops[0].opcode.value == OP_0 && - pops[1].opcode.value == OP_DATA_32 + return isScriptHashScript(script) } // IsPayToWitnessScriptHash returns true if the is in the standard // pay-to-witness-script-hash (P2WSH) format, false otherwise. func IsPayToWitnessScriptHash(script []byte) bool { - pops, err := parseScript(script) - if err != nil { - return false - } - return isWitnessScriptHash(pops) + return isWitnessScriptHashScript(script) } // IsPayToWitnessPubKeyHash returns true if the is in the standard // pay-to-witness-pubkey-hash (P2WKH) format, false otherwise. func IsPayToWitnessPubKeyHash(script []byte) bool { - pops, err := parseScript(script) - if err != nil { - return false - } - return isWitnessPubKeyHash(pops) + return isWitnessPubKeyHashScript(script) } -// isWitnessPubKeyHash returns true if the passed script is a -// pay-to-witness-pubkey-hash, and false otherwise. -func isWitnessPubKeyHash(pops []parsedOpcode) bool { - return len(pops) == 2 && - pops[0].opcode.value == OP_0 && - pops[1].opcode.value == OP_DATA_20 +// IsPayToTaproot returns true if if the passed script is a standard +// pay-to-taproot (PTTR) scripts, and false otherwise. +func IsPayToTaproot(script []byte) bool { + return isWitnessTaprootScript(script) } // IsWitnessProgram returns true if the passed script is a valid witness @@ -111,191 +97,52 @@ func isWitnessPubKeyHash(pops []parsedOpcode) bool { // witness program must be a small integer (from 0-16), followed by 2-40 bytes // of pushed data. func IsWitnessProgram(script []byte) bool { - // The length of the script must be between 4 and 42 bytes. The - // smallest program is the witness version, followed by a data push of - // 2 bytes. The largest allowed witness program has a data push of - // 40-bytes. - if len(script) < 4 || len(script) > 42 { - return false - } - - pops, err := parseScript(script) - if err != nil { - return false - } - - return isWitnessProgram(pops) + return isWitnessProgramScript(script) } -// isWitnessProgram returns true if the passed script is a witness program, and -// false otherwise. A witness program MUST adhere to the following constraints: -// there must be exactly two pops (program version and the program itself), the -// first opcode MUST be a small integer (0-16), the push data MUST be -// canonical, and finally the size of the push data must be between 2 and 40 -// bytes. -func isWitnessProgram(pops []parsedOpcode) bool { - return len(pops) == 2 && - isSmallInt(pops[0].opcode) && - canonicalPush(pops[1]) && - (len(pops[1].data) >= 2 && len(pops[1].data) <= 40) +// IsNullData returns true if the passed script is a null data script, false +// otherwise. +func IsNullData(script []byte) bool { + const scriptVersion = 0 + return isNullDataScript(scriptVersion, script) } // ExtractWitnessProgramInfo attempts to extract the witness program version, // as well as the witness program itself from the passed script. func ExtractWitnessProgramInfo(script []byte) (int, []byte, error) { - pops, err := parseScript(script) - if err != nil { - return 0, nil, err - } - // If at this point, the scripts doesn't resemble a witness program, // then we'll exit early as there isn't a valid version or program to // extract. - if !isWitnessProgram(pops) { + version, program, valid := extractWitnessProgramInfo(script) + if !valid { return 0, nil, fmt.Errorf("script is not a witness program, " + "unable to extract version or witness program") } - witnessVersion := asSmallInt(pops[0].opcode) - witnessProgram := pops[1].data - - return witnessVersion, witnessProgram, nil + return version, program, nil } -// isPushOnly returns true if the script only pushes data, false otherwise. -func isPushOnly(pops []parsedOpcode) bool { - // NOTE: This function does NOT verify opcodes directly since it is - // internal and is only called with parsed opcodes for scripts that did - // not have any parse errors. Thus, consensus is properly maintained. - - for _, pop := range pops { - // All opcodes up to OP_16 are data push instructions. - // NOTE: This does consider OP_RESERVED to be a data push - // instruction, but execution of OP_RESERVED will fail anyways - // and matches the behavior required by consensus. - if pop.opcode.value > OP_16 { - return false - } - } - return true -} - -// IsPushOnlyScript returns whether or not the passed script only pushes data. +// IsPushOnlyScript returns whether or not the passed script only pushes data +// according to the consensus definition of pushing data. // -// False will be returned when the script does not parse. +// WARNING: This function always treats the passed script as version 0. Great +// care must be taken if introducing a new script version because it is used in +// consensus which, unfortunately as of the time of this writing, does not check +// script versions before checking if it is a push only script which means nodes +// on existing rules will treat new version scripts as if they were version 0. func IsPushOnlyScript(script []byte) bool { - pops, err := parseScript(script) - if err != nil { - return false - } - return isPushOnly(pops) -} - -// parseScriptTemplate is the same as parseScript but allows the passing of the -// template list for testing purposes. When there are parse errors, it returns -// the list of parsed opcodes up to the point of failure along with the error. -func parseScriptTemplate(script []byte, opcodes *[256]opcode) ([]parsedOpcode, error) { - retScript := make([]parsedOpcode, 0, len(script)) - for i := 0; i < len(script); { - instr := script[i] - op := &opcodes[instr] - pop := parsedOpcode{opcode: op} - - // Parse data out of instruction. - switch { - // No additional data. Note that some of the opcodes, notably - // OP_1NEGATE, OP_0, and OP_[1-16] represent the data - // themselves. - case op.length == 1: - i++ - - // Data pushes of specific lengths -- OP_DATA_[1-75]. - case op.length > 1: - if len(script[i:]) < op.length { - str := fmt.Sprintf("opcode %s requires %d "+ - "bytes, but script only has %d remaining", - op.name, op.length, len(script[i:])) - return retScript, scriptError(ErrMalformedPush, - str) - } - - // Slice out the data. - pop.data = script[i+1 : i+op.length] - i += op.length - - // Data pushes with parsed lengths -- OP_PUSHDATAP{1,2,4}. - case op.length < 0: - var l uint - off := i + 1 - - if len(script[off:]) < -op.length { - str := fmt.Sprintf("opcode %s requires %d "+ - "bytes, but script only has %d remaining", - op.name, -op.length, len(script[off:])) - return retScript, scriptError(ErrMalformedPush, - str) - } - - // Next -length bytes are little endian length of data. - switch op.length { - case -1: - l = uint(script[off]) - case -2: - l = ((uint(script[off+1]) << 8) | - uint(script[off])) - case -4: - l = ((uint(script[off+3]) << 24) | - (uint(script[off+2]) << 16) | - (uint(script[off+1]) << 8) | - uint(script[off])) - default: - str := fmt.Sprintf("invalid opcode length %d", - op.length) - return retScript, scriptError(ErrMalformedPush, - str) - } - - // Move offset to beginning of the data. - off += -op.length - - // Disallow entries that do not fit script or were - // sign extended. - if int(l) > len(script[off:]) || int(l) < 0 { - str := fmt.Sprintf("opcode %s pushes %d bytes, "+ - "but script only has %d remaining", - op.name, int(l), len(script[off:])) - return retScript, scriptError(ErrMalformedPush, - str) - } - - pop.data = script[off : off+int(l)] - i += 1 - op.length + int(l) - } - - retScript = append(retScript, pop) - } - - return retScript, nil -} - -// parseScript preparses the script in bytes into a list of parsedOpcodes while -// applying a number of sanity checks. -func parseScript(script []byte) ([]parsedOpcode, error) { - return parseScriptTemplate(script, &opcodeArray) -} - -// unparseScript reversed the action of parseScript and returns the -// parsedOpcodes as a list of bytes -func unparseScript(pops []parsedOpcode) ([]byte, error) { - script := make([]byte, 0, len(pops)) - for _, pop := range pops { - b, err := pop.bytes() - if err != nil { - return nil, err + const scriptVersion = 0 + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + // All opcodes up to OP_16 are data push instructions. + // NOTE: This does consider OP_RESERVED to be a data push instruction, + // but execution of OP_RESERVED will fail anyway and matches the + // behavior required by consensus. + if tokenizer.Opcode() > OP_16 { + return false } - script = append(script, b...) } - return script, nil + return tokenizer.Err() == nil } // DisasmString formats a disassembled script for one line printing. When the @@ -303,41 +150,78 @@ func unparseScript(pops []parsedOpcode) ([]byte, error) { // script up to the point the failure occurred along with the string '[error]' // appended. In addition, the reason the script failed to parse is returned // if the caller wants more information about the failure. -func DisasmString(buf []byte) (string, error) { - var disbuf bytes.Buffer - opcodes, err := parseScript(buf) - for _, pop := range opcodes { - disbuf.WriteString(pop.print(true)) +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func DisasmString(script []byte) (string, error) { + const scriptVersion = 0 + + var disbuf strings.Builder + tokenizer := MakeScriptTokenizer(scriptVersion, script) + if tokenizer.Next() { + disasmOpcode(&disbuf, tokenizer.op, tokenizer.Data(), true) + } + for tokenizer.Next() { disbuf.WriteByte(' ') + disasmOpcode(&disbuf, tokenizer.op, tokenizer.Data(), true) } - if disbuf.Len() > 0 { - disbuf.Truncate(disbuf.Len() - 1) - } - if err != nil { + if tokenizer.Err() != nil { + if tokenizer.ByteIndex() != 0 { + disbuf.WriteByte(' ') + } disbuf.WriteString("[error]") } - return disbuf.String(), err + return disbuf.String(), tokenizer.Err() } -// removeOpcode will remove any opcode matching ``opcode'' from the opcode -// stream in pkscript -func removeOpcode(pkscript []parsedOpcode, opcode byte) []parsedOpcode { - retScript := make([]parsedOpcode, 0, len(pkscript)) - for _, pop := range pkscript { - if pop.opcode.value != opcode { - retScript = append(retScript, pop) +// removeOpcodeRaw will return the script after removing any opcodes that match +// `opcode`. If the opcode does not appear in script, the original script will +// be returned unmodified. Otherwise, a new script will be allocated to contain +// the filtered script. This metehod assumes that the script parses +// successfully. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func removeOpcodeRaw(script []byte, opcode byte) []byte { + // Avoid work when possible. + if len(script) == 0 { + return script + } + + const scriptVersion = 0 + var result []byte + var prevOffset int32 + + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + if tokenizer.Opcode() == opcode { + if result == nil { + result = make([]byte, 0, len(script)) + result = append(result, script[:prevOffset]...) + } + } else if result != nil { + result = append(result, script[prevOffset:tokenizer.ByteIndex()]...) } + prevOffset = tokenizer.ByteIndex() } - return retScript + if result == nil { + return script + } + return result } -// canonicalPush returns true if the object is either not a push instruction -// or the push instruction contained wherein is matches the canonical form -// or using the smallest instruction to do the job. False otherwise. -func canonicalPush(pop parsedOpcode) bool { - opcode := pop.opcode.value - data := pop.data - dataLen := len(pop.data) +// isCanonicalPush returns true if the opcode is either not a push instruction +// or the data associated with the push instruction uses the smallest +// instruction to do the job. False otherwise. +// +// For example, it is possible to push a value of 1 to the stack as "OP_1", +// "OP_DATA_1 0x01", "OP_PUSHDATA1 0x01 0x01", and others, however, the first +// only takes a single byte, while the rest take more. Only the first is +// considered canonical. +func isCanonicalPush(opcode byte, data []byte) bool { + dataLen := len(data) if opcode > OP_16 { return true } @@ -357,390 +241,153 @@ func canonicalPush(pop parsedOpcode) bool { return true } -// removeOpcodeByData will return the script minus any opcodes that would push -// the passed data to the stack. -func removeOpcodeByData(pkscript []parsedOpcode, data []byte) []parsedOpcode { - retScript := make([]parsedOpcode, 0, len(pkscript)) - for _, pop := range pkscript { - if !canonicalPush(pop) || !bytes.Contains(pop.data, data) { - retScript = append(retScript, pop) - } - } - return retScript - -} - -// calcHashPrevOuts calculates a single hash of all the previous outputs -// (txid:index) referenced within the passed transaction. This calculated hash -// can be re-used when validating all inputs spending segwit outputs, with a -// signature hash type of SigHashAll. This allows validation to re-use previous -// hashing computation, reducing the complexity of validating SigHashAll inputs -// from O(N^2) to O(N). -func calcHashPrevOuts(tx *wire.MsgTx) chainhash.Hash { - var b bytes.Buffer - for _, in := range tx.TxIn { - // First write out the 32-byte transaction ID one of whose - // outputs are being referenced by this input. - b.Write(in.PreviousOutPoint.Hash[:]) - - // Next, we'll encode the index of the referenced output as a - // little endian integer. - var buf [4]byte - binary.LittleEndian.PutUint32(buf[:], in.PreviousOutPoint.Index) - b.Write(buf[:]) - } - - return chainhash.DoubleHashH(b.Bytes()) -} - -// calcHashSequence computes an aggregated hash of each of the sequence numbers -// within the inputs of the passed transaction. This single hash can be re-used -// when validating all inputs spending segwit outputs, which include signatures -// using the SigHashAll sighash type. This allows validation to re-use previous -// hashing computation, reducing the complexity of validating SigHashAll inputs -// from O(N^2) to O(N). -func calcHashSequence(tx *wire.MsgTx) chainhash.Hash { - var b bytes.Buffer - for _, in := range tx.TxIn { - var buf [4]byte - binary.LittleEndian.PutUint32(buf[:], in.Sequence) - b.Write(buf[:]) - } - - return chainhash.DoubleHashH(b.Bytes()) -} - -// calcHashOutputs computes a hash digest of all outputs created by the -// transaction encoded using the wire format. This single hash can be re-used -// when validating all inputs spending witness programs, which include -// signatures using the SigHashAll sighash type. This allows computation to be -// cached, reducing the total hashing complexity from O(N^2) to O(N). -func calcHashOutputs(tx *wire.MsgTx) chainhash.Hash { - var b bytes.Buffer - for _, out := range tx.TxOut { - wire.WriteTxOut(&b, 0, 0, out) - } - - return chainhash.DoubleHashH(b.Bytes()) -} - -// calcWitnessSignatureHash computes the sighash digest of a transaction's -// segwit input using the new, optimized digest calculation algorithm defined -// in BIP0143: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki. -// This function makes use of pre-calculated sighash fragments stored within -// the passed HashCache to eliminate duplicate hashing computations when -// calculating the final digest, reducing the complexity from O(N^2) to O(N). -// Additionally, signatures now cover the input value of the referenced unspent -// output. This allows offline, or hardware wallets to compute the exact amount -// being spent, in addition to the final transaction fee. In the case the -// wallet if fed an invalid input amount, the real sighash will differ causing -// the produced signature to be invalid. -func calcWitnessSignatureHash(subScript []parsedOpcode, sigHashes *TxSigHashes, - hashType SigHashType, tx *wire.MsgTx, idx int, amt int64) ([]byte, error) { - - // As a sanity check, ensure the passed input index for the transaction - // is valid. - if idx > len(tx.TxIn)-1 { - return nil, fmt.Errorf("idx %d but %d txins", idx, len(tx.TxIn)) - } - - // We'll utilize this buffer throughout to incrementally calculate - // the signature hash for this transaction. - var sigHash bytes.Buffer - - // First write out, then encode the transaction's version number. - var bVersion [4]byte - binary.LittleEndian.PutUint32(bVersion[:], uint32(tx.Version)) - sigHash.Write(bVersion[:]) - - // Next write out the possibly pre-calculated hashes for the sequence - // numbers of all inputs, and the hashes of the previous outs for all - // outputs. - var zeroHash chainhash.Hash - - // If anyone can pay isn't active, then we can use the cached - // hashPrevOuts, otherwise we just write zeroes for the prev outs. - if hashType&SigHashAnyOneCanPay == 0 { - sigHash.Write(sigHashes.HashPrevOuts[:]) - } else { - sigHash.Write(zeroHash[:]) - } - - // If the sighash isn't anyone can pay, single, or none, the use the - // cached hash sequences, otherwise write all zeroes for the - // hashSequence. - if hashType&SigHashAnyOneCanPay == 0 && - hashType&sigHashMask != SigHashSingle && - hashType&sigHashMask != SigHashNone { - sigHash.Write(sigHashes.HashSequence[:]) - } else { - sigHash.Write(zeroHash[:]) - } - - txIn := tx.TxIn[idx] - - // Next, write the outpoint being spent. - sigHash.Write(txIn.PreviousOutPoint.Hash[:]) - var bIndex [4]byte - binary.LittleEndian.PutUint32(bIndex[:], txIn.PreviousOutPoint.Index) - sigHash.Write(bIndex[:]) - - if isWitnessPubKeyHash(subScript) { - // The script code for a p2wkh is a length prefix varint for - // the next 25 bytes, followed by a re-creation of the original - // p2pkh pk script. - sigHash.Write([]byte{0x19}) - sigHash.Write([]byte{OP_DUP}) - sigHash.Write([]byte{OP_HASH160}) - sigHash.Write([]byte{OP_DATA_20}) - sigHash.Write(subScript[1].data) - sigHash.Write([]byte{OP_EQUALVERIFY}) - sigHash.Write([]byte{OP_CHECKSIG}) - } else { - // For p2wsh outputs, and future outputs, the script code is - // the original script, with all code separators removed, - // serialized with a var int length prefix. - rawScript, _ := unparseScript(subScript) - wire.WriteVarBytes(&sigHash, 0, rawScript) - } - - // Next, add the input amount, and sequence number of the input being - // signed. - var bAmount [8]byte - binary.LittleEndian.PutUint64(bAmount[:], uint64(amt)) - sigHash.Write(bAmount[:]) - var bSequence [4]byte - binary.LittleEndian.PutUint32(bSequence[:], txIn.Sequence) - sigHash.Write(bSequence[:]) - - // If the current signature mode isn't single, or none, then we can - // re-use the pre-generated hashoutputs sighash fragment. Otherwise, - // we'll serialize and add only the target output index to the signature - // pre-image. - if hashType&SigHashSingle != SigHashSingle && - hashType&SigHashNone != SigHashNone { - sigHash.Write(sigHashes.HashOutputs[:]) - } else if hashType&sigHashMask == SigHashSingle && idx < len(tx.TxOut) { - var b bytes.Buffer - wire.WriteTxOut(&b, 0, 0, tx.TxOut[idx]) - sigHash.Write(chainhash.DoubleHashB(b.Bytes())) - } else { - sigHash.Write(zeroHash[:]) - } - - // Finally, write out the transaction's locktime, and the sig hash - // type. - var bLockTime [4]byte - binary.LittleEndian.PutUint32(bLockTime[:], tx.LockTime) - sigHash.Write(bLockTime[:]) - var bHashType [4]byte - binary.LittleEndian.PutUint32(bHashType[:], uint32(hashType)) - sigHash.Write(bHashType[:]) - - return chainhash.DoubleHashB(sigHash.Bytes()), nil -} - -// CalcWitnessSigHash computes the sighash digest for the specified input of -// the target transaction observing the desired sig hash type. -func CalcWitnessSigHash(script []byte, sigHashes *TxSigHashes, hType SigHashType, - tx *wire.MsgTx, idx int, amt int64) ([]byte, error) { - - parsedScript, err := parseScript(script) - if err != nil { - return nil, fmt.Errorf("cannot parse output script: %v", err) - } - - return calcWitnessSignatureHash(parsedScript, sigHashes, hType, tx, idx, - amt) -} - -// shallowCopyTx creates a shallow copy of the transaction for use when -// calculating the signature hash. It is used over the Copy method on the -// transaction itself since that is a deep copy and therefore does more work and -// allocates much more space than needed. -func shallowCopyTx(tx *wire.MsgTx) wire.MsgTx { - // As an additional memory optimization, use contiguous backing arrays - // for the copied inputs and outputs and point the final slice of - // pointers into the contiguous arrays. This avoids a lot of small - // allocations. - txCopy := wire.MsgTx{ - Version: tx.Version, - TxIn: make([]*wire.TxIn, len(tx.TxIn)), - TxOut: make([]*wire.TxOut, len(tx.TxOut)), - LockTime: tx.LockTime, - } - txIns := make([]wire.TxIn, len(tx.TxIn)) - for i, oldTxIn := range tx.TxIn { - txIns[i] = *oldTxIn - txCopy.TxIn[i] = &txIns[i] - } - txOuts := make([]wire.TxOut, len(tx.TxOut)) - for i, oldTxOut := range tx.TxOut { - txOuts[i] = *oldTxOut - txCopy.TxOut[i] = &txOuts[i] - } - return txCopy -} - -// CalcSignatureHash will, given a script and hash type for the current script -// engine instance, calculate the signature hash to be used for signing and -// verification. -func CalcSignatureHash(script []byte, hashType SigHashType, tx *wire.MsgTx, idx int) ([]byte, error) { - parsedScript, err := parseScript(script) - if err != nil { - return nil, fmt.Errorf("cannot parse output script: %v", err) - } - return calcSignatureHash(parsedScript, hashType, tx, idx), nil -} - -// calcSignatureHash will, given a script and hash type for the current script -// engine instance, calculate the signature hash to be used for signing and -// verification. -func calcSignatureHash(script []parsedOpcode, hashType SigHashType, tx *wire.MsgTx, idx int) []byte { - // The SigHashSingle signature type signs only the corresponding input - // and output (the output with the same index number as the input). - // - // Since transactions can have more inputs than outputs, this means it - // is improper to use SigHashSingle on input indices that don't have a - // corresponding output. - // - // A bug in the original Satoshi client implementation means specifying - // an index that is out of range results in a signature hash of 1 (as a - // uint256 little endian). The original intent appeared to be to - // indicate failure, but unfortunately, it was never checked and thus is - // treated as the actual signature hash. This buggy behavior is now - // part of the consensus and a hard fork would be required to fix it. - // - // Due to this, care must be taken by software that creates transactions - // which make use of SigHashSingle because it can lead to an extremely - // dangerous situation where the invalid inputs will end up signing a - // hash of 1. This in turn presents an opportunity for attackers to - // cleverly construct transactions which can steal those coins provided - // they can reuse signatures. - if hashType&sigHashMask == SigHashSingle && idx >= len(tx.TxOut) { - var hash chainhash.Hash - hash[0] = 0x01 - return hash[:] - } - - // Remove all instances of OP_CODESEPARATOR from the script. - script = removeOpcode(script, OP_CODESEPARATOR) - - // Make a shallow copy of the transaction, zeroing out the script for - // all inputs that are not currently being processed. - txCopy := shallowCopyTx(tx) - for i := range txCopy.TxIn { - if i == idx { - // UnparseScript cannot fail here because removeOpcode - // above only returns a valid script. - sigScript, _ := unparseScript(script) - txCopy.TxIn[idx].SignatureScript = sigScript - } else { - txCopy.TxIn[i].SignatureScript = nil - } - } - - switch hashType & sigHashMask { - case SigHashNone: - txCopy.TxOut = txCopy.TxOut[0:0] // Empty slice. - for i := range txCopy.TxIn { - if i != idx { - txCopy.TxIn[i].Sequence = 0 - } - } - - case SigHashSingle: - // Resize output array to up to and including requested index. - txCopy.TxOut = txCopy.TxOut[:idx+1] - - // All but current output get zeroed out. - for i := 0; i < idx; i++ { - txCopy.TxOut[i].Value = -1 - txCopy.TxOut[i].PkScript = nil - } - - // Sequence on all other inputs is 0, too. - for i := range txCopy.TxIn { - if i != idx { - txCopy.TxIn[i].Sequence = 0 +// removeOpcodeByData will return the script minus any opcodes that perform a +// canonical push of data that contains the passed data to remove. This +// function assumes it is provided a version 0 script as any future version of +// script should avoid this functionality since it is unncessary due to the +// signature scripts not being part of the witness-free transaction hash. +// +// WARNING: This will return the passed script unmodified unless a modification +// is necessary in which case the modified script is returned. This implies +// callers may NOT rely on being able to safely mutate either the passed or +// returned script without potentially modifying the same data. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func removeOpcodeByData(script []byte, dataToRemove []byte) []byte { + // Avoid work when possible. + if len(script) == 0 || len(dataToRemove) == 0 { + return script + } + + // Parse through the script looking for a canonical data push that contains + // the data to remove. + const scriptVersion = 0 + var result []byte + var prevOffset int32 + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + // In practice, the script will basically never actually contain the + // data since this function is only used during signature verification + // to remove the signature itself which would require some incredibly + // non-standard code to create. + // + // Thus, as an optimization, avoid allocating a new script unless there + // is actually a match that needs to be removed. + op, data := tokenizer.Opcode(), tokenizer.Data() + if isCanonicalPush(op, data) && bytes.Contains(data, dataToRemove) { + if result == nil { + fullPushLen := tokenizer.ByteIndex() - prevOffset + result = make([]byte, 0, int32(len(script))-fullPushLen) + result = append(result, script[0:prevOffset]...) } + } else if result != nil { + result = append(result, script[prevOffset:tokenizer.ByteIndex()]...) } - default: - // Consensus treats undefined hashtypes like normal SigHashAll - // for purposes of hash generation. - fallthrough - case SigHashOld: - fallthrough - case SigHashAll: - // Nothing special here. + prevOffset = tokenizer.ByteIndex() } - if hashType&SigHashAnyOneCanPay != 0 { - txCopy.TxIn = txCopy.TxIn[idx : idx+1] + if result == nil { + result = script } - - // The final hash is the double sha256 of both the serialized modified - // transaction and the hash type (encoded as a 4-byte little-endian - // value) appended. - wbuf := bytes.NewBuffer(make([]byte, 0, txCopy.SerializeSizeStripped()+4)) - txCopy.SerializeNoWitness(wbuf) - binary.Write(wbuf, binary.LittleEndian, hashType) - return chainhash.DoubleHashB(wbuf.Bytes()) + return result } // asSmallInt returns the passed opcode, which must be true according to // isSmallInt(), as an integer. -func asSmallInt(op *opcode) int { - if op.value == OP_0 { +func asSmallInt(op byte) int { + if op == OP_0 { return 0 } - return int(op.value - (OP_1 - 1)) + return int(op - (OP_1 - 1)) } -// getSigOpCount is the implementation function for counting the number of -// signature operations in the script provided by pops. If precise mode is -// requested then we attempt to count the number of operations for a multisig -// op. Otherwise we use the maximum. -func getSigOpCount(pops []parsedOpcode, precise bool) int { - nSigs := 0 - for i, pop := range pops { - switch pop.opcode.value { - case OP_CHECKSIG: - fallthrough - case OP_CHECKSIGVERIFY: - nSigs++ - case OP_CHECKMULTISIG: - fallthrough - case OP_CHECKMULTISIGVERIFY: - // If we are being precise then look for familiar - // patterns for multisig, for now all we recognize is - // OP_1 - OP_16 to signify the number of pubkeys. - // Otherwise, we use the max of 20. - if precise && i > 0 && - pops[i-1].opcode.value >= OP_1 && - pops[i-1].opcode.value <= OP_16 { - nSigs += asSmallInt(pops[i-1].opcode) +// countSigOpsV0 returns the number of signature operations in the provided +// script up to the point of the first parse failure or the entire script when +// there are no parse failures. The precise flag attempts to accurately count +// the number of operations for a multisig operation versus using the maximum +// allowed. +// +// WARNING: This function always treats the passed script as version 0. Great +// care must be taken if introducing a new script version because it is used in +// consensus which, unfortunately as of the time of this writing, does not check +// script versions before counting their signature operations which means nodes +// on existing rules will count new version scripts as if they were version 0. +func countSigOpsV0(script []byte, precise bool) int { + const scriptVersion = 0 + + numSigOps := 0 + tokenizer := MakeScriptTokenizer(scriptVersion, script) + prevOp := byte(OP_INVALIDOPCODE) + for tokenizer.Next() { + switch tokenizer.Opcode() { + case OP_CHECKSIG, OP_CHECKSIGVERIFY: + numSigOps++ + + case OP_CHECKMULTISIG, OP_CHECKMULTISIGVERIFY: + // Note that OP_0 is treated as the max number of sigops here in + // precise mode despite it being a valid small integer in order to + // highly discourage multisigs with zero pubkeys. + // + // Also, even though this is referred to as "precise" counting, it's + // not really precise at all due to the small int opcodes only + // covering 1 through 16 pubkeys, which means this will count any + // more than that value (e.g. 17, 18 19) as the maximum number of + // allowed pubkeys. This is, unfortunately, now part of + // the Bitcoin consensus rules, due to historical + // reasons. This could be made more correct with a new + // script version, however, ideally all multisignaure + // operations in new script versions should move to + // aggregated schemes such as Schnorr instead. + if precise && prevOp >= OP_1 && prevOp <= OP_16 { + numSigOps += asSmallInt(prevOp) } else { - nSigs += MaxPubKeysPerMultiSig + numSigOps += MaxPubKeysPerMultiSig } + default: // Not a sigop. } + + prevOp = tokenizer.Opcode() } - return nSigs + return numSigOps } // GetSigOpCount provides a quick count of the number of signature operations // in a script. a CHECKSIG operations counts for 1, and a CHECK_MULTISIG for 20. // If the script fails to parse, then the count up to the point of failure is // returned. +// +// WARNING: This function always treats the passed script as version 0. Great +// care must be taken if introducing a new script version because it is used in +// consensus which, unfortunately as of the time of this writing, does not check +// script versions before counting their signature operations which means nodes +// on existing rules will count new version scripts as if they were version 0. func GetSigOpCount(script []byte) int { - // Don't check error since parseScript returns the parsed-up-to-error - // list of pops. - pops, _ := parseScript(script) - return getSigOpCount(pops, false) + return countSigOpsV0(script, false) +} + +// finalOpcodeData returns the data associated with the final opcode in the +// script. It will return nil if the script fails to parse. +func finalOpcodeData(scriptVersion uint16, script []byte) []byte { + // Avoid unnecessary work. + if len(script) == 0 { + return nil + } + + var data []byte + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + data = tokenizer.Data() + } + if tokenizer.Err() != nil { + return nil + } + return data } // GetPreciseSigOpCount returns the number of signature operations in @@ -748,44 +395,44 @@ func GetSigOpCount(script []byte) int { // Pay-To-Script-Hash script in order to find the precise number of signature // operations in the transaction. If the script fails to parse, then the count // up to the point of failure is returned. -func GetPreciseSigOpCount(scriptSig, scriptPubKey []byte, bip16 bool) int { - // Don't check error since parseScript returns the parsed-up-to-error - // list of pops. - pops, _ := parseScript(scriptPubKey) - - // Treat non P2SH transactions as normal. - if !(bip16 && isScriptHash(pops)) { - return getSigOpCount(pops, true) - } +// +// WARNING: This function always treats the passed script as version 0. Great +// care must be taken if introducing a new script version because it is used in +// consensus which, unfortunately as of the time of this writing, does not check +// script versions before counting their signature operations which means nodes +// on existing rules will count new version scripts as if they were version 0. +// +// The third parameter is DEPRECATED and is unused. +func GetPreciseSigOpCount(scriptSig, scriptPubKey []byte, _ bool) int { + const scriptVersion = 0 - // The public key script is a pay-to-script-hash, so parse the signature - // script to get the final item. Scripts that fail to fully parse count - // as 0 signature operations. - sigPops, err := parseScript(scriptSig) - if err != nil { - return 0 + // Treat non P2SH transactions as normal. Note that signature operation + // counting includes all operations up to the first parse failure. + if !isScriptHashScript(scriptPubKey) { + return countSigOpsV0(scriptPubKey, true) } // The signature script must only push data to the stack for P2SH to be // a valid pair, so the signature operation count is 0 when that is not // the case. - if !isPushOnly(sigPops) || len(sigPops) == 0 { + if len(scriptSig) == 0 || !IsPushOnlyScript(scriptSig) { return 0 } // The P2SH script is the last item the signature script pushes to the // stack. When the script is empty, there are no signature operations. - shScript := sigPops[len(sigPops)-1].data - if len(shScript) == 0 { + // + // Notice that signature scripts that fail to fully parse count as 0 + // signature operations unlike public key and redeem scripts. + redeemScript := finalOpcodeData(scriptVersion, scriptSig) + if len(redeemScript) == 0 { return 0 } - // Parse the P2SH script and don't check the error since parseScript - // returns the parsed-up-to-error list of pops and the consensus rules - // dictate signature operations are counted up to the first parse - // failure. - shPops, _ := parseScript(shScript) - return getSigOpCount(shPops, true) + // Return the more precise sigops count for the redeem script. Note that + // signature operation counting includes all operations up to the first + // parse failure. + return countSigOpsV0(redeemScript, true) } // GetWitnessSigOpCount returns the number of signature operations generated by @@ -797,19 +444,15 @@ func GetPreciseSigOpCount(scriptSig, scriptPubKey []byte, bip16 bool) int { func GetWitnessSigOpCount(sigScript, pkScript []byte, witness wire.TxWitness) int { // If this is a regular witness program, then we can proceed directly // to counting its signature operations without any further processing. - if IsWitnessProgram(pkScript) { + if isWitnessProgramScript(pkScript) { return getWitnessSigOps(pkScript, witness) } // Next, we'll check the sigScript to see if this is a nested p2sh // witness program. This is a case wherein the sigScript is actually a // datapush of a p2wsh witness program. - sigPops, err := parseScript(sigScript) - if err != nil { - return 0 - } - if IsPayToScriptHash(pkScript) && isPushOnly(sigPops) && - IsWitnessProgram(sigScript[1:]) { + if isScriptHashScript(pkScript) && IsPushOnlyScript(sigScript) && + len(sigScript) > 0 && isWitnessProgramScript(sigScript[1:]) { return getWitnessSigOps(sigScript[1:], witness) } @@ -831,7 +474,7 @@ func getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int { } switch witnessVersion { - case 0: + case BaseSegwitWitnessVersion: switch { case len(witnessProgram) == payToWitnessPubKeyHashDataSize: return 1 @@ -839,22 +482,64 @@ func getWitnessSigOps(pkScript []byte, witness wire.TxWitness) int { len(witness) > 0: witnessScript := witness[len(witness)-1] - pops, _ := parseScript(witnessScript) - return getSigOpCount(pops, true) + return countSigOpsV0(witnessScript, true) } + + // Taproot signature operations don't count towards the block-wide sig + // op limit, instead a distinct weight-based accounting method is used. + case TaprootWitnessVersion: + return 0 } return 0 } +// checkScriptParses returns an error if the provided script fails to parse. +func checkScriptParses(scriptVersion uint16, script []byte) error { + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + // Nothing to do. + } + return tokenizer.Err() +} + // IsUnspendable returns whether the passed public key script is unspendable, or // guaranteed to fail at execution. This allows inputs to be pruned instantly // when entering the UTXO set. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. func IsUnspendable(pkScript []byte) bool { - pops, err := parseScript(pkScript) - if err != nil { + // The script is unspendable if starts with OP_RETURN or is guaranteed + // to fail at execution due to being larger than the max allowed script + // size. + switch { + case len(pkScript) > 0 && pkScript[0] == OP_RETURN: + return true + case len(pkScript) > MaxScriptSize: return true } - return len(pops) > 0 && pops[0].opcode.value == OP_RETURN + // The script is unspendable if it is guaranteed to fail at execution. + const scriptVersion = 0 + return checkScriptParses(scriptVersion, pkScript) != nil +} + +// ScriptHasOpSuccess returns true if any op codes in the script contain an +// OP_SUCCESS op code. +func ScriptHasOpSuccess(witnessScript []byte) bool { + // First, create a new script tokenizer so we can run through all the + // elements. + tokenizer := MakeScriptTokenizer(0, witnessScript) + + // Run through all the op codes, returning true if we find anything + // that is marked as a new op success. + for tokenizer.Next() { + if _, ok := successOpcodes[tokenizer.Opcode()]; ok { + return true + } + } + + return false } diff --git a/txscript/script_test.go b/txscript/script_test.go index 6a725e275c..a90e1940e5 100644 --- a/txscript/script_test.go +++ b/txscript/script_test.go @@ -12,3673 +12,6 @@ import ( "github.com/btcsuite/btcd/wire" ) -// TestParseOpcode tests for opcode parsing with bad data templates. -func TestParseOpcode(t *testing.T) { - // Deep copy the array and make one of the opcodes invalid by setting it - // to the wrong length. - fakeArray := opcodeArray - fakeArray[OP_PUSHDATA4] = opcode{value: OP_PUSHDATA4, - name: "OP_PUSHDATA4", length: -8, opfunc: opcodePushData} - - // This script would be fine if -8 was a valid length. - _, err := parseScriptTemplate([]byte{OP_PUSHDATA4, 0x1, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00}, &fakeArray) - if err == nil { - t.Errorf("no error with dodgy opcode array!") - } -} - -// TestUnparsingInvalidOpcodes tests for errors when unparsing invalid parsed -// opcodes. -func TestUnparsingInvalidOpcodes(t *testing.T) { - tests := []struct { - name string - pop *parsedOpcode - expectedErr error - }{ - { - name: "OP_FALSE", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_FALSE], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_FALSE long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_FALSE], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_1 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_1], - data: nil, - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_1", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_1], - data: make([]byte, 1), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_1 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_1], - data: make([]byte, 2), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_2 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_2], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_2", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_2], - data: make([]byte, 2), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_2 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_2], - data: make([]byte, 3), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_3 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_3], - data: make([]byte, 2), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_3", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_3], - data: make([]byte, 3), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_3 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_3], - data: make([]byte, 4), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_4 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_4], - data: make([]byte, 3), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_4", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_4], - data: make([]byte, 4), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_4 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_4], - data: make([]byte, 5), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_5 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_5], - data: make([]byte, 4), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_5", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_5], - data: make([]byte, 5), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_5 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_5], - data: make([]byte, 6), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_6 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_6], - data: make([]byte, 5), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_6", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_6], - data: make([]byte, 6), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_6 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_6], - data: make([]byte, 7), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_7 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_7], - data: make([]byte, 6), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_7", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_7], - data: make([]byte, 7), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_7 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_7], - data: make([]byte, 8), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_8 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_8], - data: make([]byte, 7), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_8", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_8], - data: make([]byte, 8), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_8 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_8], - data: make([]byte, 9), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_9 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_9], - data: make([]byte, 8), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_9", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_9], - data: make([]byte, 9), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_9 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_9], - data: make([]byte, 10), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_10 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_10], - data: make([]byte, 9), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_10", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_10], - data: make([]byte, 10), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_10 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_10], - data: make([]byte, 11), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_11 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_11], - data: make([]byte, 10), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_11", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_11], - data: make([]byte, 11), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_11 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_11], - data: make([]byte, 12), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_12 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_12], - data: make([]byte, 11), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_12", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_12], - data: make([]byte, 12), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_12 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_12], - data: make([]byte, 13), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_13 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_13], - data: make([]byte, 12), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_13", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_13], - data: make([]byte, 13), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_13 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_13], - data: make([]byte, 14), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_14 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_14], - data: make([]byte, 13), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_14", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_14], - data: make([]byte, 14), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_14 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_14], - data: make([]byte, 15), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_15 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_15], - data: make([]byte, 14), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_15", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_15], - data: make([]byte, 15), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_15 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_15], - data: make([]byte, 16), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_16 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_16], - data: make([]byte, 15), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_16", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_16], - data: make([]byte, 16), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_16 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_16], - data: make([]byte, 17), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_17 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_17], - data: make([]byte, 16), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_17", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_17], - data: make([]byte, 17), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_17 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_17], - data: make([]byte, 18), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_18 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_18], - data: make([]byte, 17), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_18", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_18], - data: make([]byte, 18), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_18 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_18], - data: make([]byte, 19), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_19 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_19], - data: make([]byte, 18), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_19", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_19], - data: make([]byte, 19), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_19 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_19], - data: make([]byte, 20), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_20 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_20], - data: make([]byte, 19), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_20", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_20], - data: make([]byte, 20), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_20 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_20], - data: make([]byte, 21), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_21 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_21], - data: make([]byte, 20), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_21", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_21], - data: make([]byte, 21), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_21 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_21], - data: make([]byte, 22), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_22 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_22], - data: make([]byte, 21), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_22", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_22], - data: make([]byte, 22), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_22 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_22], - data: make([]byte, 23), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_23 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_23], - data: make([]byte, 22), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_23", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_23], - data: make([]byte, 23), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_23 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_23], - data: make([]byte, 24), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_24 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_24], - data: make([]byte, 23), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_24", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_24], - data: make([]byte, 24), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_24 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_24], - data: make([]byte, 25), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_25 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_25], - data: make([]byte, 24), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_25", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_25], - data: make([]byte, 25), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_25 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_25], - data: make([]byte, 26), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_26 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_26], - data: make([]byte, 25), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_26", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_26], - data: make([]byte, 26), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_26 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_26], - data: make([]byte, 27), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_27 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_27], - data: make([]byte, 26), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_27", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_27], - data: make([]byte, 27), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_27 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_27], - data: make([]byte, 28), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_28 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_28], - data: make([]byte, 27), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_28", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_28], - data: make([]byte, 28), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_28 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_28], - data: make([]byte, 29), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_29 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_29], - data: make([]byte, 28), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_29", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_29], - data: make([]byte, 29), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_29 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_29], - data: make([]byte, 30), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_30 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_30], - data: make([]byte, 29), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_30", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_30], - data: make([]byte, 30), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_30 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_30], - data: make([]byte, 31), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_31 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_31], - data: make([]byte, 30), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_31", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_31], - data: make([]byte, 31), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_31 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_31], - data: make([]byte, 32), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_32 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_32], - data: make([]byte, 31), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_32", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_32], - data: make([]byte, 32), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_32 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_32], - data: make([]byte, 33), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_33 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_33], - data: make([]byte, 32), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_33", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_33], - data: make([]byte, 33), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_33 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_33], - data: make([]byte, 34), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_34 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_34], - data: make([]byte, 33), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_34", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_34], - data: make([]byte, 34), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_34 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_34], - data: make([]byte, 35), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_35 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_35], - data: make([]byte, 34), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_35", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_35], - data: make([]byte, 35), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_35 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_35], - data: make([]byte, 36), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_36 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_36], - data: make([]byte, 35), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_36", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_36], - data: make([]byte, 36), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_36 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_36], - data: make([]byte, 37), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_37 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_37], - data: make([]byte, 36), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_37", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_37], - data: make([]byte, 37), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_37 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_37], - data: make([]byte, 38), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_38 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_38], - data: make([]byte, 37), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_38", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_38], - data: make([]byte, 38), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_38 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_38], - data: make([]byte, 39), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_39 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_39], - data: make([]byte, 38), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_39", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_39], - data: make([]byte, 39), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_39 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_39], - data: make([]byte, 40), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_40 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_40], - data: make([]byte, 39), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_40", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_40], - data: make([]byte, 40), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_40 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_40], - data: make([]byte, 41), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_41 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_41], - data: make([]byte, 40), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_41", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_41], - data: make([]byte, 41), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_41 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_41], - data: make([]byte, 42), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_42 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_42], - data: make([]byte, 41), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_42", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_42], - data: make([]byte, 42), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_42 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_42], - data: make([]byte, 43), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_43 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_43], - data: make([]byte, 42), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_43", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_43], - data: make([]byte, 43), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_43 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_43], - data: make([]byte, 44), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_44 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_44], - data: make([]byte, 43), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_44", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_44], - data: make([]byte, 44), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_44 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_44], - data: make([]byte, 45), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_45 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_45], - data: make([]byte, 44), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_45", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_45], - data: make([]byte, 45), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_45 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_45], - data: make([]byte, 46), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_46 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_46], - data: make([]byte, 45), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_46", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_46], - data: make([]byte, 46), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_46 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_46], - data: make([]byte, 47), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_47 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_47], - data: make([]byte, 46), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_47", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_47], - data: make([]byte, 47), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_47 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_47], - data: make([]byte, 48), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_48 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_48], - data: make([]byte, 47), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_48", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_48], - data: make([]byte, 48), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_48 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_48], - data: make([]byte, 49), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_49 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_49], - data: make([]byte, 48), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_49", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_49], - data: make([]byte, 49), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_49 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_49], - data: make([]byte, 50), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_50 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_50], - data: make([]byte, 49), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_50", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_50], - data: make([]byte, 50), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_50 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_50], - data: make([]byte, 51), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_51 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_51], - data: make([]byte, 50), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_51", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_51], - data: make([]byte, 51), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_51 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_51], - data: make([]byte, 52), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_52 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_52], - data: make([]byte, 51), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_52", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_52], - data: make([]byte, 52), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_52 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_52], - data: make([]byte, 53), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_53 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_53], - data: make([]byte, 52), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_53", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_53], - data: make([]byte, 53), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_53 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_53], - data: make([]byte, 54), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_54 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_54], - data: make([]byte, 53), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_54", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_54], - data: make([]byte, 54), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_54 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_54], - data: make([]byte, 55), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_55 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_55], - data: make([]byte, 54), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_55", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_55], - data: make([]byte, 55), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_55 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_55], - data: make([]byte, 56), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_56 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_56], - data: make([]byte, 55), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_56", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_56], - data: make([]byte, 56), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_56 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_56], - data: make([]byte, 57), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_57 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_57], - data: make([]byte, 56), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_57", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_57], - data: make([]byte, 57), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_57 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_57], - data: make([]byte, 58), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_58 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_58], - data: make([]byte, 57), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_58", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_58], - data: make([]byte, 58), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_58 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_58], - data: make([]byte, 59), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_59 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_59], - data: make([]byte, 58), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_59", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_59], - data: make([]byte, 59), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_59 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_59], - data: make([]byte, 60), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_60 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_60], - data: make([]byte, 59), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_60", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_60], - data: make([]byte, 60), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_60 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_60], - data: make([]byte, 61), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_61 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_61], - data: make([]byte, 60), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_61", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_61], - data: make([]byte, 61), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_61 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_61], - data: make([]byte, 62), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_62 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_62], - data: make([]byte, 61), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_62", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_62], - data: make([]byte, 62), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_62 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_62], - data: make([]byte, 63), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_63 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_63], - data: make([]byte, 62), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_63", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_63], - data: make([]byte, 63), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_63 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_63], - data: make([]byte, 64), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_64 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_64], - data: make([]byte, 63), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_64", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_64], - data: make([]byte, 64), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_64 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_64], - data: make([]byte, 65), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_65 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_65], - data: make([]byte, 64), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_65", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_65], - data: make([]byte, 65), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_65 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_65], - data: make([]byte, 66), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_66 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_66], - data: make([]byte, 65), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_66", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_66], - data: make([]byte, 66), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_66 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_66], - data: make([]byte, 67), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_67 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_67], - data: make([]byte, 66), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_67", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_67], - data: make([]byte, 67), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_67 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_67], - data: make([]byte, 68), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_68 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_68], - data: make([]byte, 67), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_68", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_68], - data: make([]byte, 68), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_68 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_68], - data: make([]byte, 69), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_69 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_69], - data: make([]byte, 68), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_69", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_69], - data: make([]byte, 69), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_69 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_69], - data: make([]byte, 70), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_70 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_70], - data: make([]byte, 69), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_70", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_70], - data: make([]byte, 70), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_70 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_70], - data: make([]byte, 71), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_71 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_71], - data: make([]byte, 70), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_71", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_71], - data: make([]byte, 71), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_71 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_71], - data: make([]byte, 72), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_72 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_72], - data: make([]byte, 71), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_72", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_72], - data: make([]byte, 72), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_72 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_72], - data: make([]byte, 73), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_73 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_73], - data: make([]byte, 72), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_73", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_73], - data: make([]byte, 73), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_73 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_73], - data: make([]byte, 74), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_74 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_74], - data: make([]byte, 73), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_74", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_74], - data: make([]byte, 74), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_74 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_74], - data: make([]byte, 75), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_75 short", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_75], - data: make([]byte, 74), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DATA_75", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_75], - data: make([]byte, 75), - }, - expectedErr: nil, - }, - { - name: "OP_DATA_75 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DATA_75], - data: make([]byte, 76), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_PUSHDATA1", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PUSHDATA1], - data: []byte{0, 1, 2, 3, 4}, - }, - expectedErr: nil, - }, - { - name: "OP_PUSHDATA2", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PUSHDATA2], - data: []byte{0, 1, 2, 3, 4}, - }, - expectedErr: nil, - }, - { - name: "OP_PUSHDATA4", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PUSHDATA1], - data: []byte{0, 1, 2, 3, 4}, - }, - expectedErr: nil, - }, - { - name: "OP_1NEGATE", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_1NEGATE], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_1NEGATE long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_1NEGATE], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_RESERVED", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RESERVED], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_RESERVED long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RESERVED], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_TRUE", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_TRUE], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_TRUE long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_TRUE], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_3", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_3], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_3 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_3], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_4", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_4], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_4 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_4], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_5", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_5], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_5 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_5], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_6", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_6], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_6 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_6], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_7", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_7], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_7 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_7], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_8", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_8], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_8 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_8], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_9", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_9], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_9 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_9], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_10", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_10], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_10 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_10], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_11", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_11], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_11 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_11], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_12", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_12], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_12 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_12], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_13", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_13], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_13 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_13], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_14", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_14], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_14 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_14], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_15", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_15], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_15 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_15], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_16", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_16], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_16 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_16], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_VER", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VER], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_VER long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VER], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_IF", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_IF], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_IF long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_IF], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOTIF", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOTIF], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOTIF long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOTIF], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_VERIF", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VERIF], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_VERIF long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VERIF], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_VERNOTIF", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VERNOTIF], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_VERNOTIF long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VERNOTIF], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_ELSE", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ELSE], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_ELSE long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ELSE], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_ENDIF", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ENDIF], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_ENDIF long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ENDIF], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_VERIFY", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VERIFY], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_VERIFY long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_VERIFY], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_RETURN", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RETURN], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_RETURN long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RETURN], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_TOALTSTACK", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_TOALTSTACK], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_TOALTSTACK long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_TOALTSTACK], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_FROMALTSTACK", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_FROMALTSTACK], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_FROMALTSTACK long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_FROMALTSTACK], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2DROP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2DROP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2DROP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2DROP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2DUP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2DUP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2DUP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2DUP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_3DUP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_3DUP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_3DUP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_3DUP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2OVER", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2OVER], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2OVER long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2OVER], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2ROT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2ROT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2ROT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2ROT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2SWAP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2SWAP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2SWAP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2SWAP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_IFDUP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_IFDUP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_IFDUP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_IFDUP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DEPTH", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DEPTH], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_DEPTH long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DEPTH], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DROP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DROP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_DROP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DROP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DUP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DUP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_DUP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DUP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NIP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NIP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NIP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NIP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_OVER", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_OVER], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_OVER long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_OVER], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_PICK", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PICK], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_PICK long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PICK], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_ROLL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ROLL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_ROLL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ROLL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_ROT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ROT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_ROT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ROT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_SWAP", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SWAP], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_SWAP long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SWAP], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_TUCK", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_TUCK], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_TUCK long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_TUCK], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_CAT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CAT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_CAT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CAT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_SUBSTR", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SUBSTR], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_SUBSTR long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SUBSTR], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_LEFT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LEFT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_LEFT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LEFT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_LEFT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LEFT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_LEFT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LEFT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_RIGHT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RIGHT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_RIGHT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RIGHT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_SIZE", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SIZE], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_SIZE long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SIZE], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_INVERT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_INVERT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_INVERT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_INVERT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_AND", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_AND], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_AND long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_AND], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_OR", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_OR], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_OR long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_OR], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_XOR", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_XOR], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_XOR long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_XOR], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_EQUAL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_EQUAL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_EQUAL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_EQUAL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_EQUALVERIFY", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_EQUALVERIFY], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_EQUALVERIFY long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_EQUALVERIFY], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_RESERVED1", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RESERVED1], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_RESERVED1 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RESERVED1], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_RESERVED2", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RESERVED2], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_RESERVED2 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RESERVED2], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_1ADD", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_1ADD], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_1ADD long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_1ADD], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_1SUB", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_1SUB], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_1SUB long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_1SUB], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2MUL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2MUL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2MUL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2MUL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_2DIV", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2DIV], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_2DIV long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_2DIV], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NEGATE", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NEGATE], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NEGATE long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NEGATE], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_ABS", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ABS], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_ABS long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ABS], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_0NOTEQUAL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_0NOTEQUAL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_0NOTEQUAL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_0NOTEQUAL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_ADD", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ADD], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_ADD long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_ADD], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_SUB", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SUB], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_SUB long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SUB], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_MUL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MUL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_MUL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MUL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_DIV", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DIV], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_DIV long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_DIV], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_MOD", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MOD], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_MOD long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MOD], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_LSHIFT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LSHIFT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_LSHIFT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LSHIFT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_RSHIFT", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RSHIFT], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_RSHIFT long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RSHIFT], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_BOOLAND", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_BOOLAND], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_BOOLAND long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_BOOLAND], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_BOOLOR", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_BOOLOR], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_BOOLOR long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_BOOLOR], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NUMEQUAL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NUMEQUAL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NUMEQUAL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NUMEQUAL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NUMEQUALVERIFY", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NUMEQUALVERIFY], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NUMEQUALVERIFY long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NUMEQUALVERIFY], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NUMNOTEQUAL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NUMNOTEQUAL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NUMNOTEQUAL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NUMNOTEQUAL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_LESSTHAN", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LESSTHAN], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_LESSTHAN long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LESSTHAN], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_GREATERTHAN", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_GREATERTHAN], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_GREATERTHAN long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_GREATERTHAN], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_LESSTHANOREQUAL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LESSTHANOREQUAL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_LESSTHANOREQUAL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_LESSTHANOREQUAL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_GREATERTHANOREQUAL", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_GREATERTHANOREQUAL], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_GREATERTHANOREQUAL long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_GREATERTHANOREQUAL], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_MIN", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MIN], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_MIN long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MIN], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_MAX", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MAX], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_MAX long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_MAX], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_WITHIN", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_WITHIN], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_WITHIN long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_WITHIN], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_RIPEMD160", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RIPEMD160], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_RIPEMD160 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_RIPEMD160], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_SHA1", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SHA1], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_SHA1 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SHA1], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_SHA256", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SHA256], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_SHA256 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_SHA256], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_HASH160", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_HASH160], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_HASH160 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_HASH160], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_HASH256", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_HASH256], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_HASH256 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_HASH256], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_CODESAPERATOR", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CODESEPARATOR], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_CODESEPARATOR long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CODESEPARATOR], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_CHECKSIG", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKSIG], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_CHECKSIG long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKSIG], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_CHECKSIGVERIFY", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKSIGVERIFY], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_CHECKSIGVERIFY long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKSIGVERIFY], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_CHECKMULTISIG", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKMULTISIG], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_CHECKMULTISIG long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKMULTISIG], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_CHECKMULTISIGVERIFY", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKMULTISIGVERIFY], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_CHECKMULTISIGVERIFY long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_CHECKMULTISIGVERIFY], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP1", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP1], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP1 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP1], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP2", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP2], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP2 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP2], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP3", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP3], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP3 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP3], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP4", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP4], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP4 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP4], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP5", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP5], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP5 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP5], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP6", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP6], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP6 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP6], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP7", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP7], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP7 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP7], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP8", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP8], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP8 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP8], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP9", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP9], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP9 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP9], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_NOP10", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP10], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_NOP10 long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_NOP10], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_PUBKEYHASH", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PUBKEYHASH], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_PUBKEYHASH long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PUBKEYHASH], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_PUBKEY", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PUBKEY], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_PUBKEY long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_PUBKEY], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - { - name: "OP_INVALIDOPCODE", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_INVALIDOPCODE], - data: nil, - }, - expectedErr: nil, - }, - { - name: "OP_INVALIDOPCODE long", - pop: &parsedOpcode{ - opcode: &opcodeArray[OP_INVALIDOPCODE], - data: make([]byte, 1), - }, - expectedErr: scriptError(ErrInternal, ""), - }, - } - - for _, test := range tests { - _, err := test.pop.bytes() - if e := tstCheckScriptError(err, test.expectedErr); e != nil { - t.Errorf("Parsed opcode test '%s': %v", test.name, e) - continue - } - } -} - // TestPushedData ensured the PushedData function extracts the expected data out // of various scripts. func TestPushedData(t *testing.T) { @@ -3740,31 +73,25 @@ func TestPushedData(t *testing.T) { } } -// TestHasCanonicalPush ensures the canonicalPush function works as expected. +// TestHasCanonicalPush ensures the isCanonicalPush function works as expected. func TestHasCanonicalPush(t *testing.T) { t.Parallel() + const scriptVersion = 0 for i := 0; i < 65535; i++ { script, err := NewScriptBuilder().AddInt64(int64(i)).Script() if err != nil { - t.Errorf("Script: test #%d unexpected error: %v\n", i, - err) - continue - } - if result := IsPushOnlyScript(script); !result { - t.Errorf("IsPushOnlyScript: test #%d failed: %x\n", i, - script) + t.Errorf("Script: test #%d unexpected error: %v\n", i, err) continue } - pops, err := parseScript(script) - if err != nil { - t.Errorf("parseScript: #%d failed: %v", i, err) + if !IsPushOnlyScript(script) { + t.Errorf("IsPushOnlyScript: test #%d failed: %x\n", i, script) continue } - for _, pop := range pops { - if result := canonicalPush(pop); !result { - t.Errorf("canonicalPush: test #%d failed: %x\n", - i, script) + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + if !isCanonicalPush(tokenizer.Opcode(), tokenizer.Data()) { + t.Errorf("isCanonicalPush: test #%d failed: %x\n", i, script) break } } @@ -3774,21 +101,17 @@ func TestHasCanonicalPush(t *testing.T) { builder.AddData(bytes.Repeat([]byte{0x49}, i)) script, err := builder.Script() if err != nil { - t.Errorf("StandardPushesTests test #%d unexpected error: %v\n", i, err) - continue - } - if result := IsPushOnlyScript(script); !result { - t.Errorf("StandardPushesTests IsPushOnlyScript test #%d failed: %x\n", i, script) + t.Errorf("Script: test #%d unexpected error: %v\n", i, err) continue } - pops, err := parseScript(script) - if err != nil { - t.Errorf("StandardPushesTests #%d failed to TstParseScript: %v", i, err) + if !IsPushOnlyScript(script) { + t.Errorf("IsPushOnlyScript: test #%d failed: %x\n", i, script) continue } - for _, pop := range pops { - if result := canonicalPush(pop); !result { - t.Errorf("StandardPushesTests TstHasCanonicalPushes test #%d failed: %x\n", i, script) + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + if !isCanonicalPush(tokenizer.Opcode(), tokenizer.Data()) { + t.Errorf("isCanonicalPush: test #%d failed: %x\n", i, script) break } } @@ -3850,6 +173,7 @@ func TestGetPreciseSigOps(t *testing.T) { // nested p2sh, and invalid variants are counted properly. func TestGetWitnessSigOpCount(t *testing.T) { t.Parallel() + tests := []struct { name string @@ -3859,7 +183,7 @@ func TestGetWitnessSigOpCount(t *testing.T) { numSigOps int }{ - // A regualr p2wkh witness program. The output being spent + // A regular p2wkh witness program. The output being spent // should only have a single sig-op counted. { name: "p2wkh", @@ -3991,13 +315,12 @@ func TestRemoveOpcodes(t *testing.T) { // tstRemoveOpcode is a convenience function to parse the provided // raw script, remove the passed opcode, then unparse the result back // into a raw script. + const scriptVersion = 0 tstRemoveOpcode := func(script []byte, opcode byte) ([]byte, error) { - pops, err := parseScript(script) - if err != nil { + if err := checkScriptParses(scriptVersion, script); err != nil { return nil, err } - pops = removeOpcode(pops, opcode) - return unparseScript(pops) + return removeOpcodeRaw(script, opcode), nil } for _, test := range tests { @@ -4139,16 +462,15 @@ func TestRemoveOpcodeByData(t *testing.T) { }, } - // tstRemoveOpcodeByData is a convenience function to parse the provided - // raw script, remove the passed data, then unparse the result back - // into a raw script. + // tstRemoveOpcodeByData is a convenience function to ensure the provided + // script parses before attempting to remove the passed data. + const scriptVersion = 0 tstRemoveOpcodeByData := func(script []byte, data []byte) ([]byte, error) { - pops, err := parseScript(script) - if err != nil { + if err := checkScriptParses(scriptVersion, script); err != nil { return nil, err } - pops = removeOpcodeByData(pops, data) - return unparseScript(pops) + + return removeOpcodeByData(script, data), nil } for _, test := range tests { @@ -4213,11 +535,13 @@ func TestIsPayToWitnessPubKeyHash(t *testing.T) { } } -// TestHasCanonicalPushes ensures the canonicalPush function properly determines -// what is considered a canonical push for the purposes of removeOpcodeByData. +// TestHasCanonicalPushes ensures the isCanonicalPush function properly +// determines what is considered a canonical push for the purposes of +// removeOpcodeByData. func TestHasCanonicalPushes(t *testing.T) { t.Parallel() + const scriptVersion = 0 tests := []struct { name string script string @@ -4236,20 +560,20 @@ func TestHasCanonicalPushes(t *testing.T) { }, } - for i, test := range tests { + for _, test := range tests { script := mustParseShortForm(test.script) - pops, err := parseScript(script) - if err != nil { + if err := checkScriptParses(scriptVersion, script); err != nil { if test.expected { - t.Errorf("TstParseScript #%d failed: %v", i, err) + t.Errorf("%q: script parse failed: %v", test.name, err) } continue } - for _, pop := range pops { - if canonicalPush(pop) != test.expected { - t.Errorf("canonicalPush: #%d (%s) wrong result"+ - "\ngot: %v\nwant: %v", i, test.name, - true, test.expected) + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + result := isCanonicalPush(tokenizer.Opcode(), tokenizer.Data()) + if result != test.expected { + t.Errorf("%q: isCanonicalPush wrong result\ngot: %v\nwant: %v", + test.name, result, test.expected) break } } @@ -4301,6 +625,28 @@ func TestIsUnspendable(t *testing.T) { 0xfa, 0x0b, 0x5c, 0x88, 0xac}, expected: false, }, + { + // Spendable + pkScript: []byte{0xa9, 0x14, 0x82, 0x1d, 0xba, 0x94, 0xbc, 0xfb, + 0xa2, 0x57, 0x36, 0xa3, 0x9e, 0x5d, 0x14, 0x5d, 0x69, 0x75, + 0xba, 0x8c, 0x0b, 0x42, 0x87}, + expected: false, + }, + { + // Not Necessarily Unspendable + pkScript: []byte{}, + expected: false, + }, + { + // Spendable + pkScript: []byte{OP_TRUE}, + expected: false, + }, + { + // Unspendable + pkScript: []byte{OP_RETURN}, + expected: true, + }, } for i, test := range tests { diff --git a/txscript/scriptnum.go b/txscript/scriptnum.go index a89d5f39cc..81f2636121 100644 --- a/txscript/scriptnum.go +++ b/txscript/scriptnum.go @@ -12,9 +12,21 @@ const ( maxInt32 = 1<<31 - 1 minInt32 = -1 << 31 - // defaultScriptNumLen is the default number of bytes - // data being interpreted as an integer may be. - defaultScriptNumLen = 4 + // maxScriptNumLen is the maximum number of bytes data being interpreted + // as an integer may be for the majority of op codes. + maxScriptNumLen = 4 + + // cltvMaxScriptNumLen is the maximum number of bytes data being interpreted + // as an integer may be for by-time and by-height locks as interpreted by + // CHECKLOCKTIMEVERIFY. + // + // The value comes from the fact that the current transaction locktime + // is a uint32 resulting in a maximum locktime of 2^32-1 (the year + // 2106). However, scriptNums are signed and therefore a standard + // 4-byte scriptNum would only support up to a maximum of 2^31-1 (the + // year 2038). Thus, a 5-byte scriptNum is needed since it will support + // up to 2^39-1 which allows dates beyond the current locktime limit. + cltvMaxScriptNumLen = 5 ) // scriptNum represents a numeric value used in the scripting engine with @@ -178,7 +190,7 @@ func (n scriptNum) Int32() int32 { // before an ErrStackNumberTooBig is returned. This effectively limits the // range of allowed values. // WARNING: Great care should be taken if passing a value larger than -// defaultScriptNumLen, which could lead to addition and multiplication +// maxScriptNumLen, which could lead to addition and multiplication // overflows. // // See the Bytes function documentation for example encodings. diff --git a/txscript/scriptnum_test.go b/txscript/scriptnum_test.go index e32862b736..668f912f6f 100644 --- a/txscript/scriptnum_test.go +++ b/txscript/scriptnum_test.go @@ -104,35 +104,35 @@ func TestMakeScriptNum(t *testing.T) { err error }{ // Minimal encoding must reject negative 0. - {hexToBytes("80"), 0, defaultScriptNumLen, true, errMinimalData}, + {hexToBytes("80"), 0, maxScriptNumLen, true, errMinimalData}, // Minimally encoded valid values with minimal encoding flag. // Should not error and return expected integral number. - {nil, 0, defaultScriptNumLen, true, nil}, - {hexToBytes("01"), 1, defaultScriptNumLen, true, nil}, - {hexToBytes("81"), -1, defaultScriptNumLen, true, nil}, - {hexToBytes("7f"), 127, defaultScriptNumLen, true, nil}, - {hexToBytes("ff"), -127, defaultScriptNumLen, true, nil}, - {hexToBytes("8000"), 128, defaultScriptNumLen, true, nil}, - {hexToBytes("8080"), -128, defaultScriptNumLen, true, nil}, - {hexToBytes("8100"), 129, defaultScriptNumLen, true, nil}, - {hexToBytes("8180"), -129, defaultScriptNumLen, true, nil}, - {hexToBytes("0001"), 256, defaultScriptNumLen, true, nil}, - {hexToBytes("0081"), -256, defaultScriptNumLen, true, nil}, - {hexToBytes("ff7f"), 32767, defaultScriptNumLen, true, nil}, - {hexToBytes("ffff"), -32767, defaultScriptNumLen, true, nil}, - {hexToBytes("008000"), 32768, defaultScriptNumLen, true, nil}, - {hexToBytes("008080"), -32768, defaultScriptNumLen, true, nil}, - {hexToBytes("ffff00"), 65535, defaultScriptNumLen, true, nil}, - {hexToBytes("ffff80"), -65535, defaultScriptNumLen, true, nil}, - {hexToBytes("000008"), 524288, defaultScriptNumLen, true, nil}, - {hexToBytes("000088"), -524288, defaultScriptNumLen, true, nil}, - {hexToBytes("000070"), 7340032, defaultScriptNumLen, true, nil}, - {hexToBytes("0000f0"), -7340032, defaultScriptNumLen, true, nil}, - {hexToBytes("00008000"), 8388608, defaultScriptNumLen, true, nil}, - {hexToBytes("00008080"), -8388608, defaultScriptNumLen, true, nil}, - {hexToBytes("ffffff7f"), 2147483647, defaultScriptNumLen, true, nil}, - {hexToBytes("ffffffff"), -2147483647, defaultScriptNumLen, true, nil}, + {nil, 0, maxScriptNumLen, true, nil}, + {hexToBytes("01"), 1, maxScriptNumLen, true, nil}, + {hexToBytes("81"), -1, maxScriptNumLen, true, nil}, + {hexToBytes("7f"), 127, maxScriptNumLen, true, nil}, + {hexToBytes("ff"), -127, maxScriptNumLen, true, nil}, + {hexToBytes("8000"), 128, maxScriptNumLen, true, nil}, + {hexToBytes("8080"), -128, maxScriptNumLen, true, nil}, + {hexToBytes("8100"), 129, maxScriptNumLen, true, nil}, + {hexToBytes("8180"), -129, maxScriptNumLen, true, nil}, + {hexToBytes("0001"), 256, maxScriptNumLen, true, nil}, + {hexToBytes("0081"), -256, maxScriptNumLen, true, nil}, + {hexToBytes("ff7f"), 32767, maxScriptNumLen, true, nil}, + {hexToBytes("ffff"), -32767, maxScriptNumLen, true, nil}, + {hexToBytes("008000"), 32768, maxScriptNumLen, true, nil}, + {hexToBytes("008080"), -32768, maxScriptNumLen, true, nil}, + {hexToBytes("ffff00"), 65535, maxScriptNumLen, true, nil}, + {hexToBytes("ffff80"), -65535, maxScriptNumLen, true, nil}, + {hexToBytes("000008"), 524288, maxScriptNumLen, true, nil}, + {hexToBytes("000088"), -524288, maxScriptNumLen, true, nil}, + {hexToBytes("000070"), 7340032, maxScriptNumLen, true, nil}, + {hexToBytes("0000f0"), -7340032, maxScriptNumLen, true, nil}, + {hexToBytes("00008000"), 8388608, maxScriptNumLen, true, nil}, + {hexToBytes("00008080"), -8388608, maxScriptNumLen, true, nil}, + {hexToBytes("ffffff7f"), 2147483647, maxScriptNumLen, true, nil}, + {hexToBytes("ffffffff"), -2147483647, maxScriptNumLen, true, nil}, {hexToBytes("ffffffff7f"), 549755813887, 5, true, nil}, {hexToBytes("ffffffffff"), -549755813887, 5, true, nil}, {hexToBytes("ffffffffffffff7f"), 9223372036854775807, 8, true, nil}, @@ -145,50 +145,50 @@ func TestMakeScriptNum(t *testing.T) { // Minimally encoded values that are out of range for data that // is interpreted as script numbers with the minimal encoding // flag set. Should error and return 0. - {hexToBytes("0000008000"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000008080"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000009000"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000009080"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffff00"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffff80"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000000001"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("0000000081"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffff00"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffff80"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffff00"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffff80"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffff7f"), 0, defaultScriptNumLen, true, errNumTooBig}, - {hexToBytes("ffffffffffffffff"), 0, defaultScriptNumLen, true, errNumTooBig}, + {hexToBytes("0000008000"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("0000008080"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("0000009000"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("0000009080"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffff00"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffff80"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("0000000001"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("0000000081"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffffffff00"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffffffff80"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffffffffff00"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffffffffff80"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffffffffff7f"), 0, maxScriptNumLen, true, errNumTooBig}, + {hexToBytes("ffffffffffffffff"), 0, maxScriptNumLen, true, errNumTooBig}, // Non-minimally encoded, but otherwise valid values with // minimal encoding flag. Should error and return 0. - {hexToBytes("00"), 0, defaultScriptNumLen, true, errMinimalData}, // 0 - {hexToBytes("0100"), 0, defaultScriptNumLen, true, errMinimalData}, // 1 - {hexToBytes("7f00"), 0, defaultScriptNumLen, true, errMinimalData}, // 127 - {hexToBytes("800000"), 0, defaultScriptNumLen, true, errMinimalData}, // 128 - {hexToBytes("810000"), 0, defaultScriptNumLen, true, errMinimalData}, // 129 - {hexToBytes("000100"), 0, defaultScriptNumLen, true, errMinimalData}, // 256 - {hexToBytes("ff7f00"), 0, defaultScriptNumLen, true, errMinimalData}, // 32767 - {hexToBytes("00800000"), 0, defaultScriptNumLen, true, errMinimalData}, // 32768 - {hexToBytes("ffff0000"), 0, defaultScriptNumLen, true, errMinimalData}, // 65535 - {hexToBytes("00000800"), 0, defaultScriptNumLen, true, errMinimalData}, // 524288 - {hexToBytes("00007000"), 0, defaultScriptNumLen, true, errMinimalData}, // 7340032 - {hexToBytes("0009000100"), 0, 5, true, errMinimalData}, // 16779520 + {hexToBytes("00"), 0, maxScriptNumLen, true, errMinimalData}, // 0 + {hexToBytes("0100"), 0, maxScriptNumLen, true, errMinimalData}, // 1 + {hexToBytes("7f00"), 0, maxScriptNumLen, true, errMinimalData}, // 127 + {hexToBytes("800000"), 0, maxScriptNumLen, true, errMinimalData}, // 128 + {hexToBytes("810000"), 0, maxScriptNumLen, true, errMinimalData}, // 129 + {hexToBytes("000100"), 0, maxScriptNumLen, true, errMinimalData}, // 256 + {hexToBytes("ff7f00"), 0, maxScriptNumLen, true, errMinimalData}, // 32767 + {hexToBytes("00800000"), 0, maxScriptNumLen, true, errMinimalData}, // 32768 + {hexToBytes("ffff0000"), 0, maxScriptNumLen, true, errMinimalData}, // 65535 + {hexToBytes("00000800"), 0, maxScriptNumLen, true, errMinimalData}, // 524288 + {hexToBytes("00007000"), 0, maxScriptNumLen, true, errMinimalData}, // 7340032 + {hexToBytes("0009000100"), 0, 5, true, errMinimalData}, // 16779520 // Non-minimally encoded, but otherwise valid values without // minimal encoding flag. Should not error and return expected // integral number. - {hexToBytes("00"), 0, defaultScriptNumLen, false, nil}, - {hexToBytes("0100"), 1, defaultScriptNumLen, false, nil}, - {hexToBytes("7f00"), 127, defaultScriptNumLen, false, nil}, - {hexToBytes("800000"), 128, defaultScriptNumLen, false, nil}, - {hexToBytes("810000"), 129, defaultScriptNumLen, false, nil}, - {hexToBytes("000100"), 256, defaultScriptNumLen, false, nil}, - {hexToBytes("ff7f00"), 32767, defaultScriptNumLen, false, nil}, - {hexToBytes("00800000"), 32768, defaultScriptNumLen, false, nil}, - {hexToBytes("ffff0000"), 65535, defaultScriptNumLen, false, nil}, - {hexToBytes("00000800"), 524288, defaultScriptNumLen, false, nil}, - {hexToBytes("00007000"), 7340032, defaultScriptNumLen, false, nil}, + {hexToBytes("00"), 0, maxScriptNumLen, false, nil}, + {hexToBytes("0100"), 1, maxScriptNumLen, false, nil}, + {hexToBytes("7f00"), 127, maxScriptNumLen, false, nil}, + {hexToBytes("800000"), 128, maxScriptNumLen, false, nil}, + {hexToBytes("810000"), 129, maxScriptNumLen, false, nil}, + {hexToBytes("000100"), 256, maxScriptNumLen, false, nil}, + {hexToBytes("ff7f00"), 32767, maxScriptNumLen, false, nil}, + {hexToBytes("00800000"), 32768, maxScriptNumLen, false, nil}, + {hexToBytes("ffff0000"), 65535, maxScriptNumLen, false, nil}, + {hexToBytes("00000800"), 524288, maxScriptNumLen, false, nil}, + {hexToBytes("00007000"), 7340032, maxScriptNumLen, false, nil}, {hexToBytes("0009000100"), 16779520, 5, false, nil}, } diff --git a/txscript/sigcache.go b/txscript/sigcache.go index d9e4fa6ce1..b7b1308968 100644 --- a/txscript/sigcache.go +++ b/txscript/sigcache.go @@ -5,9 +5,9 @@ package txscript import ( + "bytes" "sync" - "github.com/btcsuite/btcd/btcec" "github.com/btcsuite/btcd/chaincfg/chainhash" ) @@ -18,20 +18,23 @@ import ( // match. In the occasion that two sigHashes collide, the newer sigHash will // simply overwrite the existing entry. type sigCacheEntry struct { - sig *btcec.Signature - pubKey *btcec.PublicKey + sig []byte + pubKey []byte } -// SigCache implements an ECDSA signature verification cache with a randomized -// entry eviction policy. Only valid signatures will be added to the cache. The -// benefits of SigCache are two fold. Firstly, usage of SigCache mitigates a DoS -// attack wherein an attack causes a victim's client to hang due to worst-case -// behavior triggered while processing attacker crafted invalid transactions. A -// detailed description of the mitigated DoS attack can be found here: +// SigCache implements an Schnorr+ECDSA signature verification cache with a +// randomized entry eviction policy. Only valid signatures will be added to the +// cache. The benefits of SigCache are two fold. Firstly, usage of SigCache +// mitigates a DoS attack wherein an attack causes a victim's client to hang +// due to worst-case behavior triggered while processing attacker crafted +// invalid transactions. A detailed description of the mitigated DoS attack can +// be found here: // https://bitslog.wordpress.com/2013/01/23/fixed-bitcoin-vulnerability-explanation-why-the-signature-cache-is-a-dos-protection/. // Secondly, usage of the SigCache introduces a signature verification // optimization which speeds up the validation of transactions within a block, // if they've already been seen and verified within the mempool. +// +// TODO(roasbeef): use type params here after Go 1.18 type SigCache struct { sync.RWMutex validSigs map[chainhash.Hash]sigCacheEntry @@ -55,12 +58,12 @@ func NewSigCache(maxEntries uint) *SigCache { // // NOTE: This function is safe for concurrent access. Readers won't be blocked // unless there exists a writer, adding an entry to the SigCache. -func (s *SigCache) Exists(sigHash chainhash.Hash, sig *btcec.Signature, pubKey *btcec.PublicKey) bool { +func (s *SigCache) Exists(sigHash chainhash.Hash, sig []byte, pubKey []byte) bool { s.RLock() entry, ok := s.validSigs[sigHash] s.RUnlock() - return ok && entry.pubKey.IsEqual(pubKey) && entry.sig.IsEqual(sig) + return ok && bytes.Equal(entry.pubKey, pubKey) && bytes.Equal(entry.sig, sig) } // Add adds an entry for a signature over 'sigHash' under public key 'pubKey' @@ -70,7 +73,7 @@ func (s *SigCache) Exists(sigHash chainhash.Hash, sig *btcec.Signature, pubKey * // // NOTE: This function is safe for concurrent access. Writers will block // simultaneous readers until function execution has concluded. -func (s *SigCache) Add(sigHash chainhash.Hash, sig *btcec.Signature, pubKey *btcec.PublicKey) { +func (s *SigCache) Add(sigHash chainhash.Hash, sig []byte, pubKey []byte) { s.Lock() defer s.Unlock() diff --git a/txscript/sigcache_test.go b/txscript/sigcache_test.go index 5413ea3b2c..f83b8350b1 100644 --- a/txscript/sigcache_test.go +++ b/txscript/sigcache_test.go @@ -8,15 +8,16 @@ import ( "crypto/rand" "testing" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/chaincfg/chainhash" ) // genRandomSig returns a random message, a signature of the message under the // public key and the public key. This function is used to generate randomized // test data. -func genRandomSig() (*chainhash.Hash, *btcec.Signature, *btcec.PublicKey, error) { - privKey, err := btcec.NewPrivateKey(btcec.S256()) +func genRandomSig() (*chainhash.Hash, *ecdsa.Signature, *btcec.PublicKey, error) { + privKey, err := btcec.NewPrivateKey() if err != nil { return nil, nil, nil, err } @@ -26,10 +27,7 @@ func genRandomSig() (*chainhash.Hash, *btcec.Signature, *btcec.PublicKey, error) return nil, nil, nil, err } - sig, err := privKey.Sign(msgHash[:]) - if err != nil { - return nil, nil, nil, err - } + sig := ecdsa.Sign(privKey, msgHash[:]) return &msgHash, sig, privKey.PubKey(), nil } @@ -46,12 +44,12 @@ func TestSigCacheAddExists(t *testing.T) { } // Add the triplet to the signature cache. - sigCache.Add(*msg1, sig1, key1) + sigCache.Add(*msg1, sig1.Serialize(), key1.SerializeCompressed()) // The previously added triplet should now be found within the sigcache. - sig1Copy, _ := btcec.ParseSignature(sig1.Serialize(), btcec.S256()) - key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed(), btcec.S256()) - if !sigCache.Exists(*msg1, sig1Copy, key1Copy) { + sig1Copy, _ := ecdsa.ParseSignature(sig1.Serialize()) + key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) + if !sigCache.Exists(*msg1, sig1Copy.Serialize(), key1Copy.SerializeCompressed()) { t.Errorf("previously added item not found in signature cache") } } @@ -71,11 +69,17 @@ func TestSigCacheAddEvictEntry(t *testing.T) { t.Fatalf("unable to generate random signature test data") } - sigCache.Add(*msg, sig, key) + sigCache.Add(*msg, sig.Serialize(), key.SerializeCompressed()) - sigCopy, _ := btcec.ParseSignature(sig.Serialize(), btcec.S256()) - keyCopy, _ := btcec.ParsePubKey(key.SerializeCompressed(), btcec.S256()) - if !sigCache.Exists(*msg, sigCopy, keyCopy) { + sigCopy, err := ecdsa.ParseSignature(sig.Serialize()) + if err != nil { + t.Fatalf("unable to parse sig: %v", err) + } + keyCopy, err := btcec.ParsePubKey(key.SerializeCompressed()) + if err != nil { + t.Fatalf("unable to parse key: %v", err) + } + if !sigCache.Exists(*msg, sigCopy.Serialize(), keyCopy.SerializeCompressed()) { t.Errorf("previously added item not found in signature" + "cache") } @@ -93,7 +97,7 @@ func TestSigCacheAddEvictEntry(t *testing.T) { if err != nil { t.Fatalf("unable to generate random signature test data") } - sigCache.Add(*msgNew, sigNew, keyNew) + sigCache.Add(*msgNew, sigNew.Serialize(), keyNew.SerializeCompressed()) // The sigcache should still have sigCache entries. if uint(len(sigCache.validSigs)) != sigCacheSize { @@ -102,9 +106,9 @@ func TestSigCacheAddEvictEntry(t *testing.T) { } // The entry added above should be found within the sigcache. - sigNewCopy, _ := btcec.ParseSignature(sigNew.Serialize(), btcec.S256()) - keyNewCopy, _ := btcec.ParsePubKey(keyNew.SerializeCompressed(), btcec.S256()) - if !sigCache.Exists(*msgNew, sigNewCopy, keyNewCopy) { + sigNewCopy, _ := ecdsa.ParseSignature(sigNew.Serialize()) + keyNewCopy, _ := btcec.ParsePubKey(keyNew.SerializeCompressed()) + if !sigCache.Exists(*msgNew, sigNewCopy.Serialize(), keyNewCopy.SerializeCompressed()) { t.Fatalf("previously added item not found in signature cache") } } @@ -122,12 +126,12 @@ func TestSigCacheAddMaxEntriesZeroOrNegative(t *testing.T) { } // Add the triplet to the signature cache. - sigCache.Add(*msg1, sig1, key1) + sigCache.Add(*msg1, sig1.Serialize(), key1.SerializeCompressed()) // The generated triplet should not be found. - sig1Copy, _ := btcec.ParseSignature(sig1.Serialize(), btcec.S256()) - key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed(), btcec.S256()) - if sigCache.Exists(*msg1, sig1Copy, key1Copy) { + sig1Copy, _ := ecdsa.ParseSignature(sig1.Serialize()) + key1Copy, _ := btcec.ParsePubKey(key1.SerializeCompressed()) + if sigCache.Exists(*msg1, sig1Copy.Serialize(), key1Copy.SerializeCompressed()) { t.Errorf("previously added signature found in sigcache, but" + "shouldn't have been") } diff --git a/txscript/sighash.go b/txscript/sighash.go new file mode 100644 index 0000000000..eaae070d5c --- /dev/null +++ b/txscript/sighash.go @@ -0,0 +1,628 @@ +// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2015-2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txscript + +import ( + "bytes" + "crypto/sha256" + "encoding/binary" + "fmt" + "io" + "math" + + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// SigHashType represents hash type bits at the end of a signature. +type SigHashType uint32 + +// Hash type bits from the end of a signature. +const ( + SigHashDefault SigHashType = 0x00 + SigHashOld SigHashType = 0x0 + SigHashAll SigHashType = 0x1 + SigHashNone SigHashType = 0x2 + SigHashSingle SigHashType = 0x3 + SigHashAnyOneCanPay SigHashType = 0x80 + + // sigHashMask defines the number of bits of the hash type which is used + // to identify which outputs are signed. + sigHashMask = 0x1f +) + +const ( + // blankCodeSepValue is the value of the code separator position in the + // tapscript sighash when no code separator was found in the script. + blankCodeSepValue = math.MaxUint32 +) + +// shallowCopyTx creates a shallow copy of the transaction for use when +// calculating the signature hash. It is used over the Copy method on the +// transaction itself since that is a deep copy and therefore does more work and +// allocates much more space than needed. +func shallowCopyTx(tx *wire.MsgTx) wire.MsgTx { + // As an additional memory optimization, use contiguous backing arrays + // for the copied inputs and outputs and point the final slice of + // pointers into the contiguous arrays. This avoids a lot of small + // allocations. + txCopy := wire.MsgTx{ + Version: tx.Version, + TxIn: make([]*wire.TxIn, len(tx.TxIn)), + TxOut: make([]*wire.TxOut, len(tx.TxOut)), + LockTime: tx.LockTime, + } + txIns := make([]wire.TxIn, len(tx.TxIn)) + for i, oldTxIn := range tx.TxIn { + txIns[i] = *oldTxIn + txCopy.TxIn[i] = &txIns[i] + } + txOuts := make([]wire.TxOut, len(tx.TxOut)) + for i, oldTxOut := range tx.TxOut { + txOuts[i] = *oldTxOut + txCopy.TxOut[i] = &txOuts[i] + } + return txCopy +} + +// CalcSignatureHash will, given a script and hash type for the current script +// engine instance, calculate the signature hash to be used for signing and +// verification. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func CalcSignatureHash(script []byte, hashType SigHashType, tx *wire.MsgTx, idx int) ([]byte, error) { + const scriptVersion = 0 + if err := checkScriptParses(scriptVersion, script); err != nil { + return nil, err + } + + return calcSignatureHash(script, hashType, tx, idx), nil +} + +// calcSignatureHash computes the signature hash for the specified input of the +// target transaction observing the desired signature hash type. +func calcSignatureHash(sigScript []byte, hashType SigHashType, tx *wire.MsgTx, idx int) []byte { + // The SigHashSingle signature type signs only the corresponding input + // and output (the output with the same index number as the input). + // + // Since transactions can have more inputs than outputs, this means it + // is improper to use SigHashSingle on input indices that don't have a + // corresponding output. + // + // A bug in the original Satoshi client implementation means specifying + // an index that is out of range results in a signature hash of 1 (as a + // uint256 little endian). The original intent appeared to be to + // indicate failure, but unfortunately, it was never checked and thus is + // treated as the actual signature hash. This buggy behavior is now + // part of the consensus and a hard fork would be required to fix it. + // + // Due to this, care must be taken by software that creates transactions + // which make use of SigHashSingle because it can lead to an extremely + // dangerous situation where the invalid inputs will end up signing a + // hash of 1. This in turn presents an opportunity for attackers to + // cleverly construct transactions which can steal those coins provided + // they can reuse signatures. + if hashType&sigHashMask == SigHashSingle && idx >= len(tx.TxOut) { + var hash chainhash.Hash + hash[0] = 0x01 + return hash[:] + } + + // Remove all instances of OP_CODESEPARATOR from the script. + sigScript = removeOpcodeRaw(sigScript, OP_CODESEPARATOR) + + // Make a shallow copy of the transaction, zeroing out the script for + // all inputs that are not currently being processed. + txCopy := shallowCopyTx(tx) + for i := range txCopy.TxIn { + if i == idx { + txCopy.TxIn[idx].SignatureScript = sigScript + } else { + txCopy.TxIn[i].SignatureScript = nil + } + } + + switch hashType & sigHashMask { + case SigHashNone: + txCopy.TxOut = txCopy.TxOut[0:0] // Empty slice. + for i := range txCopy.TxIn { + if i != idx { + txCopy.TxIn[i].Sequence = 0 + } + } + + case SigHashSingle: + // Resize output array to up to and including requested index. + txCopy.TxOut = txCopy.TxOut[:idx+1] + + // All but current output get zeroed out. + for i := 0; i < idx; i++ { + txCopy.TxOut[i].Value = -1 + txCopy.TxOut[i].PkScript = nil + } + + // Sequence on all other inputs is 0, too. + for i := range txCopy.TxIn { + if i != idx { + txCopy.TxIn[i].Sequence = 0 + } + } + + default: + // Consensus treats undefined hashtypes like normal SigHashAll + // for purposes of hash generation. + fallthrough + case SigHashOld: + fallthrough + case SigHashAll: + // Nothing special here. + } + if hashType&SigHashAnyOneCanPay != 0 { + txCopy.TxIn = txCopy.TxIn[idx : idx+1] + } + + // The final hash is the double sha256 of both the serialized modified + // transaction and the hash type (encoded as a 4-byte little-endian + // value) appended. + wbuf := bytes.NewBuffer(make([]byte, 0, txCopy.SerializeSizeStripped()+4)) + txCopy.SerializeNoWitness(wbuf) + binary.Write(wbuf, binary.LittleEndian, hashType) + return chainhash.DoubleHashB(wbuf.Bytes()) +} + +// calcWitnessSignatureHashRaw computes the sighash digest of a transaction's +// segwit input using the new, optimized digest calculation algorithm defined +// in BIP0143: https://github.com/bitcoin/bips/blob/master/bip-0143.mediawiki. +// This function makes use of pre-calculated sighash fragments stored within +// the passed HashCache to eliminate duplicate hashing computations when +// calculating the final digest, reducing the complexity from O(N^2) to O(N). +// Additionally, signatures now cover the input value of the referenced unspent +// output. This allows offline, or hardware wallets to compute the exact amount +// being spent, in addition to the final transaction fee. In the case the +// wallet if fed an invalid input amount, the real sighash will differ causing +// the produced signature to be invalid. +func calcWitnessSignatureHashRaw(subScript []byte, sigHashes *TxSigHashes, + hashType SigHashType, tx *wire.MsgTx, idx int, amt int64) ([]byte, error) { + + // As a sanity check, ensure the passed input index for the transaction + // is valid. + // + // TODO(roasbeef): check needs to be lifted elsewhere? + if idx > len(tx.TxIn)-1 { + return nil, fmt.Errorf("idx %d but %d txins", idx, len(tx.TxIn)) + } + + // We'll utilize this buffer throughout to incrementally calculate + // the signature hash for this transaction. + var sigHash bytes.Buffer + + // First write out, then encode the transaction's version number. + var bVersion [4]byte + binary.LittleEndian.PutUint32(bVersion[:], uint32(tx.Version)) + sigHash.Write(bVersion[:]) + + // Next write out the possibly pre-calculated hashes for the sequence + // numbers of all inputs, and the hashes of the previous outs for all + // outputs. + var zeroHash chainhash.Hash + + // If anyone can pay isn't active, then we can use the cached + // hashPrevOuts, otherwise we just write zeroes for the prev outs. + if hashType&SigHashAnyOneCanPay == 0 { + sigHash.Write(sigHashes.HashPrevOutsV0[:]) + } else { + sigHash.Write(zeroHash[:]) + } + + // If the sighash isn't anyone can pay, single, or none, the use the + // cached hash sequences, otherwise write all zeroes for the + // hashSequence. + if hashType&SigHashAnyOneCanPay == 0 && + hashType&sigHashMask != SigHashSingle && + hashType&sigHashMask != SigHashNone { + sigHash.Write(sigHashes.HashSequenceV0[:]) + } else { + sigHash.Write(zeroHash[:]) + } + + txIn := tx.TxIn[idx] + + // Next, write the outpoint being spent. + sigHash.Write(txIn.PreviousOutPoint.Hash[:]) + var bIndex [4]byte + binary.LittleEndian.PutUint32(bIndex[:], txIn.PreviousOutPoint.Index) + sigHash.Write(bIndex[:]) + + if isWitnessPubKeyHashScript(subScript) { + // The script code for a p2wkh is a length prefix varint for + // the next 25 bytes, followed by a re-creation of the original + // p2pkh pk script. + sigHash.Write([]byte{0x19}) + sigHash.Write([]byte{OP_DUP}) + sigHash.Write([]byte{OP_HASH160}) + sigHash.Write([]byte{OP_DATA_20}) + sigHash.Write(extractWitnessPubKeyHash(subScript)) + sigHash.Write([]byte{OP_EQUALVERIFY}) + sigHash.Write([]byte{OP_CHECKSIG}) + } else { + // For p2wsh outputs, and future outputs, the script code is + // the original script, with all code separators removed, + // serialized with a var int length prefix. + wire.WriteVarBytes(&sigHash, 0, subScript) + } + + // Next, add the input amount, and sequence number of the input being + // signed. + var bAmount [8]byte + binary.LittleEndian.PutUint64(bAmount[:], uint64(amt)) + sigHash.Write(bAmount[:]) + var bSequence [4]byte + binary.LittleEndian.PutUint32(bSequence[:], txIn.Sequence) + sigHash.Write(bSequence[:]) + + // If the current signature mode isn't single, or none, then we can + // re-use the pre-generated hashoutputs sighash fragment. Otherwise, + // we'll serialize and add only the target output index to the signature + // pre-image. + if hashType&sigHashMask != SigHashSingle && + hashType&sigHashMask != SigHashNone { + sigHash.Write(sigHashes.HashOutputsV0[:]) + } else if hashType&sigHashMask == SigHashSingle && idx < len(tx.TxOut) { + var b bytes.Buffer + wire.WriteTxOut(&b, 0, 0, tx.TxOut[idx]) + sigHash.Write(chainhash.DoubleHashB(b.Bytes())) + } else { + sigHash.Write(zeroHash[:]) + } + + // Finally, write out the transaction's locktime, and the sig hash + // type. + var bLockTime [4]byte + binary.LittleEndian.PutUint32(bLockTime[:], tx.LockTime) + sigHash.Write(bLockTime[:]) + var bHashType [4]byte + binary.LittleEndian.PutUint32(bHashType[:], uint32(hashType)) + sigHash.Write(bHashType[:]) + + return chainhash.DoubleHashB(sigHash.Bytes()), nil +} + +// CalcWitnessSigHash computes the sighash digest for the specified input of +// the target transaction observing the desired sig hash type. +func CalcWitnessSigHash(script []byte, sigHashes *TxSigHashes, hType SigHashType, + tx *wire.MsgTx, idx int, amt int64) ([]byte, error) { + + const scriptVersion = 0 + if err := checkScriptParses(scriptVersion, script); err != nil { + return nil, err + } + + return calcWitnessSignatureHashRaw(script, sigHashes, hType, tx, idx, amt) +} + +// sigHashExtFlag represents the sig hash extension flag as defined in BIP 341. +// Extensions to the base sighash algorithm will be appended to the base +// sighash digest. +type sigHashExtFlag uint8 + +const ( + // baseSigHashExtFlag is the base extension flag. This adds no changes + // to the sighash digest message. This is used for segwit v1 spends, + // a.k.a the tapscript keyspend path. + baseSigHashExtFlag sigHashExtFlag = 0 + + // tapscriptSighashExtFlag is the extension flag defined by tapscript + // base leaf version spend define din BIP 342. This augments the base + // sighash by including the tapscript leaf hash, the key version, and + // the code separator position. + tapscriptSighashExtFlag sigHashExtFlag = 1 +) + +// taprootSigHashOptions houses a set of functional options that may optionally +// modify how the taproot/script sighash digest algorithm is implemented. +type taprootSigHashOptions struct { + // extFlag denotes the current message digest extension being used. For + // top-level script spends use a value of zero, while each tapscript + // version can define its own values as well. + extFlag sigHashExtFlag + + // annexHash is the sha256 hash of the annex with a compact size length + // prefix: sha256(sizeOf(annex) || annex). + annexHash []byte + + // tapLeafHash is the hash of the tapscript leaf as defined in BIP 341. + // This should be h_tapleaf(version || compactSizeOf(script) || script). + tapLeafHash []byte + + // keyVersion is the key version as defined in BIP 341. This is always + // 0x00 for all currently defined leaf versions. + keyVersion byte + + // codeSepPos is the op code position of the last code separator. This + // is used for the BIP 342 sighash message extension. + codeSepPos uint32 +} + +// writeDigestExtensions writes out the sighah mesage extensiosn defined by the +// current active sigHashExtFlags. +func (t *taprootSigHashOptions) writeDigestExtensions(w io.Writer) error { + switch t.extFlag { + // The base extension, used for tapscript keypath spends doesn't modify + // the digest at all. + case baseSigHashExtFlag: + return nil + + // The tapscript base leaf version extension adds the leaf hash, key + // version, and code separator position to the final digest. + case tapscriptSighashExtFlag: + if _, err := w.Write(t.tapLeafHash); err != nil { + return err + } + if _, err := w.Write([]byte{t.keyVersion}); err != nil { + return err + } + err := binary.Write(w, binary.LittleEndian, t.codeSepPos) + if err != nil { + return err + } + } + + return nil +} + +// defaultTaprootSighashOptions returns the set of default sighash options for +// taproot execution. +func defaultTaprootSighashOptions() *taprootSigHashOptions { + return &taprootSigHashOptions{} +} + +// TaprootSigHashOption defines a set of functional param options that can be +// used to modify the base sighash message with optional extensions. +type TaprootSigHashOption func(*taprootSigHashOptions) + +// WithAnnex is a functional option that allows the caller to specify the +// existence of an annex in the final witness stack for the taproot/tapscript +// spends. +func WithAnnex(annex []byte) TaprootSigHashOption { + return func(o *taprootSigHashOptions) { + // It's just a bytes.Buffer which never returns an error on + // write. + var b bytes.Buffer + _ = wire.WriteVarBytes(&b, 0, annex) + + o.annexHash = chainhash.HashB(b.Bytes()) + } +} + +// WithBaseTapscriptVersion is a functional option that specifies that the +// sighash digest should include the extra information included as part of the +// base tapscript version. +func WithBaseTapscriptVersion(codeSepPos uint32, + tapLeafHash []byte) TaprootSigHashOption { + + return func(o *taprootSigHashOptions) { + o.extFlag = tapscriptSighashExtFlag + o.tapLeafHash = tapLeafHash + o.keyVersion = 0 + o.codeSepPos = codeSepPos + } +} + +// isValidTaprootSigHash returns true if the passed sighash is a valid taproot +// sighash. +func isValidTaprootSigHash(hashType SigHashType) bool { + switch hashType { + case SigHashDefault, SigHashAll, SigHashNone, SigHashSingle: + fallthrough + case 0x81, 0x82, 0x83: + return true + + default: + return false + } +} + +// calcTaprootSignatureHashRaw computes the sighash as specified in BIP 143. +// If an invalid sighash type is passed in, an error is returned. +func calcTaprootSignatureHashRaw(sigHashes *TxSigHashes, hType SigHashType, + tx *wire.MsgTx, idx int, + prevOutFetcher PrevOutputFetcher, + sigHashOpts ...TaprootSigHashOption) ([]byte, error) { + + opts := defaultTaprootSighashOptions() + for _, sigHashOpt := range sigHashOpts { + sigHashOpt(opts) + } + + // If a valid sighash type isn't passed in, then we'll exit early. + if !isValidTaprootSigHash(hType) { + // TODO(roasbeef): use actual errr here + return nil, fmt.Errorf("invalid taproot sighash type: %v", hType) + } + + // As a sanity check, ensure the passed input index for the transaction + // is valid. + if idx > len(tx.TxIn)-1 { + return nil, fmt.Errorf("idx %d but %d txins", idx, len(tx.TxIn)) + } + + // We'll utilize this buffer throughout to incrementally calculate + // the signature hash for this transaction. + var sigMsg bytes.Buffer + + // The final sighash always has a value of 0x00 prepended to it, which + // is called the sighash epoch. + sigMsg.WriteByte(0x00) + + // First, we write the hash type encoded as a single byte. + if err := sigMsg.WriteByte(byte(hType)); err != nil { + return nil, err + } + + // Next we'll write out the transaction specific data which binds the + // outer context of the sighash. + err := binary.Write(&sigMsg, binary.LittleEndian, tx.Version) + if err != nil { + return nil, err + } + err = binary.Write(&sigMsg, binary.LittleEndian, tx.LockTime) + if err != nil { + return nil, err + } + + // If sighash isn't anyone can pay, then we'll include all the + // pre-computed midstate digests in the sighash. + if hType&SigHashAnyOneCanPay != SigHashAnyOneCanPay { + sigMsg.Write(sigHashes.HashPrevOutsV1[:]) + sigMsg.Write(sigHashes.HashInputAmountsV1[:]) + sigMsg.Write(sigHashes.HashInputScriptsV1[:]) + sigMsg.Write(sigHashes.HashSequenceV1[:]) + } + + // If this is sighash all, or its taproot alias (sighash default), + // then we'll also include the pre-computed digest of all the outputs + // of the transaction. + if hType&SigHashSingle != SigHashSingle && + hType&SigHashSingle != SigHashNone { + + sigMsg.Write(sigHashes.HashOutputsV1[:]) + } + + // Next, we'll write out the relevant information for this specific + // input. + // + // The spend type is computed as the (ext_flag*2) + annex_present. We + // use this to bind the extension flag (that BIP 342 uses), as well as + // the annex if its present. + input := tx.TxIn[idx] + witnessHasAnnex := opts.annexHash != nil + spendType := byte(opts.extFlag) * 2 + if witnessHasAnnex { + spendType += 1 + } + + if err := sigMsg.WriteByte(spendType); err != nil { + return nil, err + } + + // If anyone can pay is active, then we'll write out just the specific + // information about this input, given we skipped writing all the + // information of all the inputs above. + if hType&SigHashAnyOneCanPay == SigHashAnyOneCanPay { + // We'll start out with writing this input specific information by + // first writing the entire previous output. + err = wire.WriteOutPoint(&sigMsg, 0, 0, &input.PreviousOutPoint) + if err != nil { + return nil, err + } + + // Next, we'll write out the previous output (amt+script) being + // spent itself. + prevOut := prevOutFetcher.FetchPrevOutput(input.PreviousOutPoint) + if err := wire.WriteTxOut(&sigMsg, 0, 0, prevOut); err != nil { + return nil, err + } + + // Finally, we'll write out the input sequence itself. + err = binary.Write(&sigMsg, binary.LittleEndian, input.Sequence) + if err != nil { + return nil, err + } + } else { + err := binary.Write(&sigMsg, binary.LittleEndian, uint32(idx)) + if err != nil { + return nil, err + } + } + + // Now that we have the input specific information written, we'll + // include the anex, if we have it. + if witnessHasAnnex { + sigMsg.Write(opts.annexHash) + } + + // Finally, if this is sighash single, then we'll write out the + // information for this given output. + if hType&sigHashMask == SigHashSingle { + // If this output doesn't exist, then we'll return with an error + // here as this is an invalid sighash type for this input. + if idx >= len(tx.TxOut) { + // TODO(roasbeef): real error here + return nil, fmt.Errorf("invalid sighash type for input") + } + + // Now that we know this is a valid sighash input combination, + // we'll write out the information specific to this input. + // We'll write the wire serialization of the output and compute + // the sha256 in a single step. + shaWriter := sha256.New() + txOut := tx.TxOut[idx] + if err := wire.WriteTxOut(shaWriter, 0, 0, txOut); err != nil { + return nil, err + } + + // With the digest obtained, we'll write this out into our + // signature message. + if _, err := sigMsg.Write(shaWriter.Sum(nil)); err != nil { + return nil, err + } + } + + // Now that we've written out all the base information, we'll write any + // message extensions (if they exist). + if err := opts.writeDigestExtensions(&sigMsg); err != nil { + return nil, err + } + + // The final sighash is computed as: hash_TagSigHash(0x00 || sigMsg). + // We wrote the 0x00 above so we don't need to append here and incur + // extra allocations. + sigHash := chainhash.TaggedHash(chainhash.TagTapSighash, sigMsg.Bytes()) + return sigHash[:], nil +} + +// CalcTaprootSignatureHash computes the sighash digest of a transaction's +// taproot-spending input using the new sighash digest algorithm described in +// BIP 341. As the new digest algoriths may require the digest to commit to the +// entire prev output, a PrevOutputFetcher argument is required to obtain the +// needed information. The TxSigHashes pre-computed sighash midstate MUST be +// specified. +func CalcTaprootSignatureHash(sigHashes *TxSigHashes, hType SigHashType, + tx *wire.MsgTx, idx int, + prevOutFetcher PrevOutputFetcher) ([]byte, error) { + + return calcTaprootSignatureHashRaw( + sigHashes, hType, tx, idx, prevOutFetcher, + ) +} + +// CalcTaprootSignatureHash is similar to CalcTaprootSignatureHash but for +// _tapscript_ spends instead. A proper TapLeaf instance (the script leaf being +// signed) must be passed in. The functional options can be used to specify an +// annex if the signature was bound to that context. +// +// NOTE: This function is able to compute the sighash of scripts that contain a +// code separator if the caller passes in an instance of +// WithBaseTapscriptVersion with the valid position. +func CalcTapscriptSignaturehash(sigHashes *TxSigHashes, hType SigHashType, + tx *wire.MsgTx, idx int, prevOutFetcher PrevOutputFetcher, + tapLeaf TapLeaf, + sigHashOpts ...TaprootSigHashOption) ([]byte, error) { + + tapLeafHash := tapLeaf.TapHash() + + var opts []TaprootSigHashOption + opts = append( + opts, WithBaseTapscriptVersion(blankCodeSepValue, tapLeafHash[:]), + ) + opts = append(opts, sigHashOpts...) + + return calcTaprootSignatureHashRaw( + sigHashes, hType, tx, idx, prevOutFetcher, opts..., + ) +} diff --git a/txscript/sign.go b/txscript/sign.go index 42af9686cb..fc89312f20 100644 --- a/txscript/sign.go +++ b/txscript/sign.go @@ -6,12 +6,14 @@ package txscript import ( "errors" - "fmt" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/btcutil" + + "github.com/btcsuite/btcd/btcec/v2/ecdsa" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // RawTxInWitnessSignature returns the serialized ECDA signature for the input @@ -22,21 +24,13 @@ func RawTxInWitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, amt int64, subScript []byte, hashType SigHashType, key *btcec.PrivateKey) ([]byte, error) { - parsedScript, err := parseScript(subScript) - if err != nil { - return nil, fmt.Errorf("cannot parse output script: %v", err) - } - - hash, err := calcWitnessSignatureHash(parsedScript, sigHashes, hashType, tx, + hash, err := calcWitnessSignatureHashRaw(subScript, sigHashes, hashType, tx, idx, amt) if err != nil { return nil, err } - signature, err := key.Sign(hash) - if err != nil { - return nil, fmt.Errorf("cannot sign tx input: %s", err) - } + signature := ecdsa.Sign(key, hash) return append(signature.Serialize(), byte(hashType)), nil } @@ -56,7 +50,7 @@ func WitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, amt int64 return nil, err } - pk := (*btcec.PublicKey)(&privKey.PublicKey) + pk := privKey.PubKey() var pkData []byte if compress { pkData = pk.SerializeCompressed() @@ -69,6 +63,115 @@ func WitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, amt int64 return wire.TxWitness{sig, pkData}, nil } +// RawTxInTaprootSignature returns a valid schnorr signature required to +// perform a taproot key-spend of the specified input. If SigHashDefault was +// specified, then the returned signature is 64-byte in length, as it omits the +// additional byte to denote the sighash type. +func RawTxInTaprootSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, + amt int64, pkScript []byte, tapScriptRootHash []byte, hashType SigHashType, + key *btcec.PrivateKey) ([]byte, error) { + + // First, we'll start by compute the top-level taproot sighash. + sigHash, err := calcTaprootSignatureHashRaw( + sigHashes, hashType, tx, idx, + NewCannedPrevOutputFetcher(pkScript, amt), + ) + if err != nil { + return nil, err + } + + // Before we sign the sighash, we'll need to apply the taptweak to the + // private key based on the tapScriptRootHash. + privKeyTweak := TweakTaprootPrivKey(key, tapScriptRootHash) + + // With the sighash constructed, we can sign it with the specified + // private key. + signature, err := schnorr.Sign(privKeyTweak, sigHash) + if err != nil { + return nil, err + } + + sig := signature.Serialize() + + // If this is sighash default, then we can just return the signature + // directly. + if hashType&SigHashDefault == SigHashDefault { + return sig, nil + } + + // Otherwise, append the sighash type to the final sig. + return append(sig, byte(hashType)), nil +} + +// TaprootWitnessSignature returns a valid witness stack that can be used to +// spend the key-spend path of a taproot input as specified in BIP 342 and BIP +// 86. This method assumes that the public key included in pkScript was +// generated using ComputeTaprootKeyNoScript that commits to a fake root +// tapscript hash. If not, then RawTxInTaprootSignature should be used with the +// actual committed contents. +// +// TODO(roasbeef): add support for annex even tho it's non-standard? +func TaprootWitnessSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, + amt int64, pkScript []byte, hashType SigHashType, + key *btcec.PrivateKey) (wire.TxWitness, error) { + + // As we're assuming this was a BIP 86 key, we use an empty root hash + // which means output key commits to just the public key. + fakeTapscriptRootHash := []byte{} + + sig, err := RawTxInTaprootSignature( + tx, sigHashes, idx, amt, pkScript, fakeTapscriptRootHash, + hashType, key, + ) + if err != nil { + return nil, err + } + + // The witness script to spend a taproot input using the key-spend path + // is just the signature itself, given the public key is + // embedded in the previous output script. + return wire.TxWitness{sig}, nil +} + +// RawTxInTapscriptSignature computes a raw schnorr signature for a signature +// generated from a tapscript leaf. This differs from the +// RawTxInTaprootSignature which is used to generate signatures for top-level +// taproot key spends. +// +// TODO(roasbeef): actually add code-sep to interface? not really used +// anywhere.... +func RawTxInTapscriptSignature(tx *wire.MsgTx, sigHashes *TxSigHashes, idx int, + amt int64, pkScript []byte, tapLeaf TapLeaf, hashType SigHashType, + privKey *btcec.PrivateKey) ([]byte, error) { + + // First, we'll start by compute the top-level taproot sighash. + tapLeafHash := tapLeaf.TapHash() + sigHash, err := calcTaprootSignatureHashRaw( + sigHashes, hashType, tx, idx, + NewCannedPrevOutputFetcher(pkScript, amt), + WithBaseTapscriptVersion(blankCodeSepValue, tapLeafHash[:]), + ) + if err != nil { + return nil, err + } + + // With the sighash constructed, we can sign it with the specified + // private key. + signature, err := schnorr.Sign(privKey, sigHash) + if err != nil { + return nil, err + } + + // Finally, append the sighash type to the final sig if it's not the + // default sighash value (in which case appending it is disallowed). + if hashType != SigHashDefault { + return append(signature.Serialize(), byte(hashType)), nil + } + + // The default sighash case where we'll return _just_ the signature. + return signature.Serialize(), nil +} + // RawTxInSignature returns the serialized ECDSA signature for the input idx of // the given transaction, with hashType appended to it. func RawTxInSignature(tx *wire.MsgTx, idx int, subScript []byte, @@ -78,10 +181,7 @@ func RawTxInSignature(tx *wire.MsgTx, idx int, subScript []byte, if err != nil { return nil, err } - signature, err := key.Sign(hash) - if err != nil { - return nil, fmt.Errorf("cannot sign tx input: %s", err) - } + signature := ecdsa.Sign(key, hash) return append(signature.Serialize(), byte(hashType)), nil } @@ -100,7 +200,7 @@ func SignatureScript(tx *wire.MsgTx, idx int, subscript []byte, hashType SigHash return nil, err } - pk := (*btcec.PublicKey)(&privKey.PublicKey) + pk := privKey.PubKey() var pkData []byte if compress { pkData = pk.SerializeCompressed() @@ -212,110 +312,50 @@ func sign(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int, } } -// mergeScripts merges sigScript and prevScript assuming they are both -// partial solutions for pkScript spending output idx of tx. class, addresses -// and nrequired are the result of extracting the addresses from pkscript. -// The return value is the best effort merging of the two scripts. Calling this -// function with addresses, class and nrequired that do not match pkScript is -// an error and results in undefined behaviour. -func mergeScripts(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int, - pkScript []byte, class ScriptClass, addresses []btcutil.Address, - nRequired int, sigScript, prevScript []byte) []byte { - - // TODO: the scripthash and multisig paths here are overly - // inefficient in that they will recompute already known data. - // some internal refactoring could probably make this avoid needless - // extra calculations. - switch class { - case ScriptHashTy: - // Remove the last push in the script and then recurse. - // this could be a lot less inefficient. - sigPops, err := parseScript(sigScript) - if err != nil || len(sigPops) == 0 { - return prevScript - } - prevPops, err := parseScript(prevScript) - if err != nil || len(prevPops) == 0 { - return sigScript - } - - // assume that script in sigPops is the correct one, we just - // made it. - script := sigPops[len(sigPops)-1].data - - // We already know this information somewhere up the stack. - class, addresses, nrequired, _ := - ExtractPkScriptAddrs(script, chainParams) - - // regenerate scripts. - sigScript, _ := unparseScript(sigPops) - prevScript, _ := unparseScript(prevPops) - - // Merge - mergedScript := mergeScripts(chainParams, tx, idx, script, - class, addresses, nrequired, sigScript, prevScript) - - // Reappend the script and return the result. - builder := NewScriptBuilder() - builder.AddOps(mergedScript) - builder.AddData(script) - finalScript, _ := builder.Script() - return finalScript - case MultiSigTy: - return mergeMultiSig(tx, idx, addresses, nRequired, pkScript, - sigScript, prevScript) - - // It doesn't actually make sense to merge anything other than multiig - // and scripthash (because it could contain multisig). Everything else - // has either zero signature, can't be spent, or has a single signature - // which is either present or not. The other two cases are handled - // above. In the conflict case here we just assume the longest is - // correct (this matches behaviour of the reference implementation). - default: - if len(sigScript) > len(prevScript) { - return sigScript - } - return prevScript - } -} - // mergeMultiSig combines the two signature scripts sigScript and prevScript // that both provide signatures for pkScript in output idx of tx. addresses // and nRequired should be the results from extracting the addresses from // pkScript. Since this function is internal only we assume that the arguments // have come from other functions internally and thus are all consistent with // each other, behaviour is undefined if this contract is broken. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. func mergeMultiSig(tx *wire.MsgTx, idx int, addresses []btcutil.Address, nRequired int, pkScript, sigScript, prevScript []byte) []byte { - // This is an internal only function and we already parsed this script - // as ok for multisig (this is how we got here), so if this fails then - // all assumptions are broken and who knows which way is up? - pkPops, _ := parseScript(pkScript) - - sigPops, err := parseScript(sigScript) - if err != nil || len(sigPops) == 0 { + // Nothing to merge if either the new or previous signature scripts are + // empty. + if len(sigScript) == 0 { return prevScript } - - prevPops, err := parseScript(prevScript) - if err != nil || len(prevPops) == 0 { + if len(prevScript) == 0 { return sigScript } // Convenience function to avoid duplication. - extractSigs := func(pops []parsedOpcode, sigs [][]byte) [][]byte { - for _, pop := range pops { - if len(pop.data) != 0 { - sigs = append(sigs, pop.data) + var possibleSigs [][]byte + extractSigs := func(script []byte) error { + const scriptVersion = 0 + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + if data := tokenizer.Data(); len(data) != 0 { + possibleSigs = append(possibleSigs, data) } } - return sigs + return tokenizer.Err() } - possibleSigs := make([][]byte, 0, len(sigPops)+len(prevPops)) - possibleSigs = extractSigs(sigPops, possibleSigs) - possibleSigs = extractSigs(prevPops, possibleSigs) + // Attempt to extract signatures from the two scripts. Return the other + // script that is intended to be merged in the case signature extraction + // fails for some reason. + if err := extractSigs(sigScript); err != nil { + return prevScript + } + if err := extractSigs(prevScript); err != nil { + return sigScript + } // Now we need to match the signatures to pubkeys, the only real way to // do that is to try to verify them all and match it to the pubkey @@ -335,7 +375,7 @@ sigLoop: tSig := sig[:len(sig)-1] hashType := SigHashType(sig[len(sig)-1]) - pSig, err := btcec.ParseDERSignature(tSig, btcec.S256()) + pSig, err := ecdsa.ParseDERSignature(tSig) if err != nil { continue } @@ -345,7 +385,7 @@ sigLoop: // however, assume no sigs etc are in the script since that // would make the transaction nonstandard and thus not // MultiSigTy, so we just need to hash the full thing. - hash := calcSignatureHash(pkPops, hashType, tx, idx) + hash := calcSignatureHash(pkScript, hashType, tx, idx) for _, addr := range addresses { // All multisig addresses should be pubkey addresses @@ -394,6 +434,81 @@ sigLoop: return script } +// mergeScripts merges sigScript and prevScript assuming they are both +// partial solutions for pkScript spending output idx of tx. class, addresses +// and nrequired are the result of extracting the addresses from pkscript. +// The return value is the best effort merging of the two scripts. Calling this +// function with addresses, class and nrequired that do not match pkScript is +// an error and results in undefined behaviour. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func mergeScripts(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int, + pkScript []byte, class ScriptClass, addresses []btcutil.Address, + nRequired int, sigScript, prevScript []byte) []byte { + + // TODO(oga) the scripthash and multisig paths here are overly + // inefficient in that they will recompute already known data. + // some internal refactoring could probably make this avoid needless + // extra calculations. + const scriptVersion = 0 + switch class { + case ScriptHashTy: + // Nothing to merge if either the new or previous signature + // scripts are empty or fail to parse. + if len(sigScript) == 0 || + checkScriptParses(scriptVersion, sigScript) != nil { + + return prevScript + } + if len(prevScript) == 0 || + checkScriptParses(scriptVersion, prevScript) != nil { + + return sigScript + } + + // Remove the last push in the script and then recurse. + // this could be a lot less inefficient. + // + // Assume that final script is the correct one since it was just + // made and it is a pay-to-script-hash. + script := finalOpcodeData(scriptVersion, sigScript) + + // We already know this information somewhere up the stack, + // therefore the error is ignored. + class, addresses, nrequired, _ := + ExtractPkScriptAddrs(script, chainParams) + + // Merge + mergedScript := mergeScripts(chainParams, tx, idx, script, + class, addresses, nrequired, sigScript, prevScript) + + // Reappend the script and return the result. + builder := NewScriptBuilder() + builder.AddOps(mergedScript) + builder.AddData(script) + finalScript, _ := builder.Script() + return finalScript + + case MultiSigTy: + return mergeMultiSig(tx, idx, addresses, nRequired, pkScript, + sigScript, prevScript) + + // It doesn't actually make sense to merge anything other than multiig + // and scripthash (because it could contain multisig). Everything else + // has either zero signature, can't be spent, or has a single signature + // which is either present or not. The other two cases are handled + // above. In the conflict case here we just assume the longest is + // correct (this matches behaviour of the reference implementation). + default: + if len(sigScript) > len(prevScript) { + return sigScript + } + return prevScript + } +} + // KeyDB is an interface type provided to SignTxOutput, it encapsulates // any user state required to get the private keys for an address. type KeyDB interface { @@ -404,8 +519,7 @@ type KeyDB interface { type KeyClosure func(btcutil.Address) (*btcec.PrivateKey, bool, error) // GetKey implements KeyDB by returning the result of calling the closure. -func (kc KeyClosure) GetKey(address btcutil.Address) (*btcec.PrivateKey, - bool, error) { +func (kc KeyClosure) GetKey(address btcutil.Address) (*btcec.PrivateKey, bool, error) { return kc(address) } @@ -430,6 +544,10 @@ func (sc ScriptClosure) GetScript(address btcutil.Address) ([]byte, error) { // getScript. If previousScript is provided then the results in previousScript // will be merged in a type-dependent manner with the newly generated. // signature script. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. func SignTxOutput(chainParams *chaincfg.Params, tx *wire.MsgTx, idx int, pkScript []byte, hashType SigHashType, kdb KeyDB, sdb ScriptDB, previousScript []byte) ([]byte, error) { diff --git a/txscript/sign_test.go b/txscript/sign_test.go index b97a8a64d4..ae10ba17d8 100644 --- a/txscript/sign_test.go +++ b/txscript/sign_test.go @@ -9,11 +9,11 @@ import ( "fmt" "testing" - "github.com/btcsuite/btcd/btcec" + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/chaincfg/chainhash" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) type addressToKey struct { @@ -56,7 +56,7 @@ func mkGetScript(scripts map[string][]byte) ScriptDB { func checkScripts(msg string, tx *wire.MsgTx, idx int, inputAmt int64, sigScript, pkScript []byte) error { tx.TxIn[idx].SignatureScript = sigScript vm, err := NewEngine(pkScript, tx, idx, - ScriptBip16|ScriptVerifyDERSignatures, nil, nil, inputAmt) + ScriptBip16|ScriptVerifyDERSignatures, nil, nil, inputAmt, nil) if err != nil { return fmt.Errorf("failed to make script engine for %s: %v", msg, err) @@ -143,15 +143,14 @@ func TestSignTxOutput(t *testing.T) { for _, hashType := range hashTypes { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -180,15 +179,14 @@ func TestSignTxOutput(t *testing.T) { for _, hashType := range hashTypes { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -241,15 +239,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -280,15 +277,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -342,15 +338,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -381,15 +376,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -442,15 +436,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -481,15 +474,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -543,15 +535,14 @@ func TestSignTxOutput(t *testing.T) { for _, hashType := range hashTypes { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -600,15 +591,14 @@ func TestSignTxOutput(t *testing.T) { for _, hashType := range hashTypes { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -683,15 +673,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -740,15 +729,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKeyHash( btcutil.Hash160(pk), &chaincfg.TestNet3Params) if err != nil { @@ -822,15 +810,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -879,15 +866,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeUncompressed() + pk := key.PubKey().SerializeUncompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -960,15 +946,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -1016,15 +1001,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key, err := btcec.NewPrivateKey(btcec.S256()) + key, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk := (*btcec.PublicKey)(&key.PublicKey). - SerializeCompressed() + pk := key.PubKey().SerializeCompressed() address, err := btcutil.NewAddressPubKey(pk, &chaincfg.TestNet3Params) if err != nil { @@ -1097,15 +1081,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key1, err := btcec.NewPrivateKey(btcec.S256()) + key1, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk1 := (*btcec.PublicKey)(&key1.PublicKey). - SerializeCompressed() + pk1 := key1.PubKey().SerializeCompressed() address1, err := btcutil.NewAddressPubKey(pk1, &chaincfg.TestNet3Params) if err != nil { @@ -1114,15 +1097,14 @@ func TestSignTxOutput(t *testing.T) { break } - key2, err := btcec.NewPrivateKey(btcec.S256()) + key2, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey 2 for %s: %v", msg, err) break } - pk2 := (*btcec.PublicKey)(&key2.PublicKey). - SerializeCompressed() + pk2 := key2.PubKey().SerializeCompressed() address2, err := btcutil.NewAddressPubKey(pk2, &chaincfg.TestNet3Params) if err != nil { @@ -1173,15 +1155,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key1, err := btcec.NewPrivateKey(btcec.S256()) + key1, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk1 := (*btcec.PublicKey)(&key1.PublicKey). - SerializeCompressed() + pk1 := key1.PubKey().SerializeCompressed() address1, err := btcutil.NewAddressPubKey(pk1, &chaincfg.TestNet3Params) if err != nil { @@ -1190,15 +1171,14 @@ func TestSignTxOutput(t *testing.T) { break } - key2, err := btcec.NewPrivateKey(btcec.S256()) + key2, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey 2 for %s: %v", msg, err) break } - pk2 := (*btcec.PublicKey)(&key2.PublicKey). - SerializeCompressed() + pk2 := key2.PubKey().SerializeCompressed() address2, err := btcutil.NewAddressPubKey(pk2, &chaincfg.TestNet3Params) if err != nil { @@ -1279,15 +1259,14 @@ func TestSignTxOutput(t *testing.T) { for i := range tx.TxIn { msg := fmt.Sprintf("%d:%d", hashType, i) - key1, err := btcec.NewPrivateKey(btcec.S256()) + key1, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey for %s: %v", msg, err) break } - pk1 := (*btcec.PublicKey)(&key1.PublicKey). - SerializeCompressed() + pk1 := key1.PubKey().SerializeCompressed() address1, err := btcutil.NewAddressPubKey(pk1, &chaincfg.TestNet3Params) if err != nil { @@ -1296,15 +1275,14 @@ func TestSignTxOutput(t *testing.T) { break } - key2, err := btcec.NewPrivateKey(btcec.S256()) + key2, err := btcec.NewPrivateKey() if err != nil { t.Errorf("failed to make privKey 2 for %s: %v", msg, err) break } - pk2 := (*btcec.PublicKey)(&key2.PublicKey). - SerializeCompressed() + pk2 := key2.PubKey().SerializeCompressed() address2, err := btcutil.NewAddressPubKey(pk2, &chaincfg.TestNet3Params) if err != nil { @@ -1635,7 +1613,7 @@ var sigScriptTests = []tstSigScript{ func TestSignatureScript(t *testing.T) { t.Parallel() - privKey, _ := btcec.PrivKeyFromBytes(btcec.S256(), privKeyD) + privKey, _ := btcec.PrivKeyFromBytes(privKeyD) nexttest: for i := range sigScriptTests { @@ -1694,7 +1672,7 @@ nexttest: scriptFlags := ScriptBip16 | ScriptVerifyDERSignatures for j := range tx.TxIn { vm, err := NewEngine(sigScriptTests[i]. - inputs[j].txout.PkScript, tx, j, scriptFlags, nil, nil, 0) + inputs[j].txout.PkScript, tx, j, scriptFlags, nil, nil, 0, nil) if err != nil { t.Errorf("cannot create script vm for test %v: %v", sigScriptTests[i].name, err) diff --git a/txscript/sigvalidate.go b/txscript/sigvalidate.go new file mode 100644 index 0000000000..0bd00c326d --- /dev/null +++ b/txscript/sigvalidate.go @@ -0,0 +1,479 @@ +// Copyright (c) 2013-2022 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txscript + +import ( + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/ecdsa" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" +) + +// signatureVerifier is an abstract interface that allows the op code execution +// to abstract over the _type_ of signature validation being executed. At this +// point in Bitcoin's history, there're four possible sig validation contexts: +// pre-segwit, segwit v0, segwit v1 (taproot key spend validation), and the +// base tapscript verification. +type signatureVerifier interface { + // Verify returns true if the signature verifier context deems the + // signature to be valid for the given context. + Verify() bool +} + +// baseSigVerifier is used to verify signatures for the _base_ system, meaning +// ECDSA signatures encoded in DER or BER encoding. +type baseSigVerifier struct { + vm *Engine + + pubKey *btcec.PublicKey + + sig *ecdsa.Signature + + fullSigBytes []byte + + sigBytes []byte + pkBytes []byte + + subScript []byte + + hashType SigHashType +} + +// parseBaseSigAndPubkey attempts to parse a signature and public key according +// to the base consensus rules, which expect an 33-byte public key and DER or +// BER encoded signature. +func parseBaseSigAndPubkey(pkBytes, fullSigBytes []byte, + vm *Engine) (*btcec.PublicKey, *ecdsa.Signature, SigHashType, error) { + + strictEncoding := vm.hasFlag(ScriptVerifyStrictEncoding) || + vm.hasFlag(ScriptVerifyDERSignatures) + + // Trim off hashtype from the signature string and check if the + // signature and pubkey conform to the strict encoding requirements + // depending on the flags. + // + // NOTE: When the strict encoding flags are set, any errors in the + // signature or public encoding here result in an immediate script error + // (and thus no result bool is pushed to the data stack). This differs + // from the logic below where any errors in parsing the signature is + // treated as the signature failure resulting in false being pushed to + // the data stack. This is required because the more general script + // validation consensus rules do not have the new strict encoding + // requirements enabled by the flags. + hashType := SigHashType(fullSigBytes[len(fullSigBytes)-1]) + sigBytes := fullSigBytes[:len(fullSigBytes)-1] + if err := vm.checkHashTypeEncoding(hashType); err != nil { + return nil, nil, 0, err + } + if err := vm.checkSignatureEncoding(sigBytes); err != nil { + return nil, nil, 0, err + } + if err := vm.checkPubKeyEncoding(pkBytes); err != nil { + return nil, nil, 0, err + } + + // First, parse the public key, which we expect to be in the proper + // encoding. + pubKey, err := btcec.ParsePubKey(pkBytes) + if err != nil { + return nil, nil, 0, err + } + + // Next, parse the signature which should be in DER or BER depending on + // the active script flags. + var signature *ecdsa.Signature + if strictEncoding { + signature, err = ecdsa.ParseDERSignature(sigBytes) + } else { + signature, err = ecdsa.ParseSignature(sigBytes) + } + if err != nil { + return nil, nil, 0, err + } + + return pubKey, signature, hashType, nil +} + +// newBaseSigVerifier returns a new instance of the base signature verifier. An +// error is returned if the signature, sighash, or public key aren't correctly +// encoded. +func newBaseSigVerifier(pkBytes, fullSigBytes []byte, + vm *Engine) (*baseSigVerifier, error) { + + pubKey, sig, hashType, err := parseBaseSigAndPubkey( + pkBytes, fullSigBytes, vm, + ) + if err != nil { + return nil, err + } + + // Get script starting from the most recent OP_CODESEPARATOR. + subScript := vm.subScript() + + return &baseSigVerifier{ + vm: vm, + pubKey: pubKey, + pkBytes: pkBytes, + sig: sig, + sigBytes: fullSigBytes[:len(fullSigBytes)-1], + subScript: subScript, + hashType: hashType, + fullSigBytes: fullSigBytes, + }, nil +} + +// verifySig attempts to verify the signature given the computed sighash. A nil +// error is returned if the signature is valid. +func (b *baseSigVerifier) verifySig(sigHash []byte) bool { + var valid bool + if b.vm.sigCache != nil { + var sigHashBytes chainhash.Hash + copy(sigHashBytes[:], sigHash[:]) + + valid = b.vm.sigCache.Exists(sigHashBytes, b.sigBytes, b.pkBytes) + if !valid && b.sig.Verify(sigHash, b.pubKey) { + b.vm.sigCache.Add(sigHashBytes, b.sigBytes, b.pkBytes) + valid = true + } + } else { + valid = b.sig.Verify(sigHash, b.pubKey) + } + + return valid +} + +// Verify returns true if the signature verifier context deems the signature to +// be valid for the given context. +// +// NOTE: This is part of the baseSigVerifier interface. +func (b *baseSigVerifier) Verify() bool { + // Remove the signature since there is no way for a signature + // to sign itself. + subScript := removeOpcodeByData(b.subScript, b.fullSigBytes) + + sigHash := calcSignatureHash( + subScript, b.hashType, &b.vm.tx, b.vm.txIdx, + ) + + return b.verifySig(sigHash) +} + +// A compile-time assertion to ensure baseSigVerifier implements the +// signatureVerifier interface. +var _ signatureVerifier = (*baseSigVerifier)(nil) + +// baseSegwitSigVerifier implements signature verification for segwit v0. The +// only difference between this and the baseSigVerifier is how the sighash is +// computed. +type baseSegwitSigVerifier struct { + *baseSigVerifier +} + +// newBaseSegwitSigVerifier returns a new instance of the base segwit verifier. +func newBaseSegwitSigVerifier(pkBytes, fullSigBytes []byte, + vm *Engine) (*baseSegwitSigVerifier, error) { + + sigVerifier, err := newBaseSigVerifier(pkBytes, fullSigBytes, vm) + if err != nil { + return nil, err + } + + return &baseSegwitSigVerifier{ + baseSigVerifier: sigVerifier, + }, nil +} + +// Verify returns true if the signature verifier context deems the signature to +// be valid for the given context. +// +// NOTE: This is part of the baseSigVerifier interface. +func (s *baseSegwitSigVerifier) Verify() bool { + var sigHashes *TxSigHashes + if s.vm.hashCache != nil { + sigHashes = s.vm.hashCache + } else { + sigHashes = NewTxSigHashes(&s.vm.tx, s.vm.prevOutFetcher) + } + + sigHash, err := calcWitnessSignatureHashRaw( + s.subScript, sigHashes, s.hashType, &s.vm.tx, s.vm.txIdx, + s.vm.inputAmount, + ) + if err != nil { + // TODO(roasbeef): this doesn't need to return an error, should + // instead be further up the stack? this only returns an error + // if the input index is greater than the number of inputs + return false + } + + return s.verifySig(sigHash) +} + +// A compile-time assertion to ensure baseSegwitSigVerifier implements the +// signatureVerifier interface. +var _ signatureVerifier = (*baseSegwitSigVerifier)(nil) + +// taprootSigVerifier verifies signatures according to the segwit v1 rules, +// which are described in BIP 341. +type taprootSigVerifier struct { + pubKey *btcec.PublicKey + pkBytes []byte + + fullSigBytes []byte + sig *schnorr.Signature + + hashType SigHashType + + sigCache *SigCache + hashCache *TxSigHashes + + tx *wire.MsgTx + + inputIndex int + + annex []byte + + prevOuts PrevOutputFetcher +} + +// parseTaprootSigAndPubKey attempts to parse the public key and signature for +// a taproot spend that may be a keyspend or script path spend. This function +// returns an error if the pubkey is invalid, or the sig is. +func parseTaprootSigAndPubKey(pkBytes, rawSig []byte, +) (*btcec.PublicKey, *schnorr.Signature, SigHashType, error) { + + // Now that we have the raw key, we'll parse it into a schnorr public + // key we can work with. + pubKey, err := schnorr.ParsePubKey(pkBytes) + if err != nil { + return nil, nil, 0, err + } + + // Next, we'll parse the signature, which may or may not be appended + // with the desired sighash flag. + var ( + sig *schnorr.Signature + sigHashType SigHashType + ) + switch { + // If the signature is exactly 64 bytes, then we know we're using the + // implicit SIGHASH_DEFAULT sighash type. + case len(rawSig) == schnorr.SignatureSize: + // First, parse out the signature which is just the raw sig itself. + sig, err = schnorr.ParseSignature(rawSig) + if err != nil { + return nil, nil, 0, err + } + + // If the sig is 64 bytes, then we'll assume that it's the + // default sighash type, which is actually an alias for + // SIGHASH_ALL. + sigHashType = SigHashDefault + + // Otherwise, if this is a signature, with a sighash looking byte + // appended that isn't all zero, then we'll extract the sighash from + // the end of the signature. + case len(rawSig) == schnorr.SignatureSize+1 && rawSig[64] != 0: + // Extract the sighash type, then snip off the last byte so we can + // parse the signature. + sigHashType = SigHashType(rawSig[schnorr.SignatureSize]) + + rawSig = rawSig[:schnorr.SignatureSize] + sig, err = schnorr.ParseSignature(rawSig) + if err != nil { + return nil, nil, 0, err + } + + // Otherwise, this is an invalid signature, so we need to bail out. + default: + str := fmt.Sprintf("invalid sig len: %v", len(rawSig)) + return nil, nil, 0, scriptError(ErrInvalidTaprootSigLen, str) + } + + return pubKey, sig, sigHashType, nil +} + +// newTaprootSigVerifier returns a new instance of a taproot sig verifier given +// the necessary contextual information. +func newTaprootSigVerifier(pkBytes []byte, fullSigBytes []byte, + tx *wire.MsgTx, inputIndex int, prevOuts PrevOutputFetcher, + sigCache *SigCache, hashCache *TxSigHashes, + annex []byte) (*taprootSigVerifier, error) { + + pubKey, sig, sigHashType, err := parseTaprootSigAndPubKey( + pkBytes, fullSigBytes, + ) + if err != nil { + return nil, err + } + + return &taprootSigVerifier{ + pubKey: pubKey, + pkBytes: pkBytes, + sig: sig, + fullSigBytes: fullSigBytes, + hashType: sigHashType, + tx: tx, + inputIndex: inputIndex, + prevOuts: prevOuts, + sigCache: sigCache, + hashCache: hashCache, + annex: annex, + }, nil +} + +// verifySig attempts to verify a BIP 340 signature using the internal public +// key and signature, and the passed sigHash as the message digest. +func (t *taprootSigVerifier) verifySig(sigHash []byte) bool { + // At this point, we can check to see if this signature is already + // included in the sigCcahe and is valid or not (if one was passed in). + cacheKey, _ := chainhash.NewHash(sigHash) + if t.sigCache != nil { + if t.sigCache.Exists(*cacheKey, t.fullSigBytes, t.pkBytes) { + return true + } + } + + // If we didn't find the entry in the cache, then we'll perform full + // verification as normal, adding the entry to the cache if it's found + // to be valid. + sigValid := t.sig.Verify(sigHash, t.pubKey) + if sigValid { + if t.sigCache != nil { + // The sig is valid, so we'll add it to the cache. + t.sigCache.Add(*cacheKey, t.fullSigBytes, t.pkBytes) + } + + return true + } + + // Otherwise the sig is invalid if we get to this point. + return false +} + +// Verify returns true if the signature verifier context deems the signature to +// be valid for the given context. +// +// NOTE: This is part of the baseSigVerifier interface. +func (t *taprootSigVerifier) Verify() bool { + var opts []TaprootSigHashOption + if t.annex != nil { + opts = append(opts, WithAnnex(t.annex)) + } + + // Before we attempt to verify the signature, we'll need to first + // compute the sighash based on the input and tx information. + sigHash, err := calcTaprootSignatureHashRaw( + t.hashCache, t.hashType, t.tx, t.inputIndex, t.prevOuts, + opts..., + ) + if err != nil { + // TODO(roasbeef): propagate the error here? + return false + } + + return t.verifySig(sigHash) +} + +// A compile-time assertion to ensure taprootSigVerifier implements the +// signatureVerifier interface. +var _ signatureVerifier = (*taprootSigVerifier)(nil) + +// baseTapscriptSigVerifier verifies a signature for an input spending a +// tapscript leaf from the prevoous output. +type baseTapscriptSigVerifier struct { + *taprootSigVerifier + + vm *Engine +} + +// newBaseTapscriptSigVerifier returns a new sig verifier for tapscript input +// spends. If the public key or signature aren't correctly formatted, an error +// is returned. +func newBaseTapscriptSigVerifier(pkBytes, rawSig []byte, + vm *Engine) (*baseTapscriptSigVerifier, error) { + + switch len(pkBytes) { + // If the public key is zero bytes, then this is invalid, and will fail + // immediately. + case 0: + return nil, scriptError(ErrTaprootPubkeyIsEmpty, "") + + // If the public key is 32 byte as we expect, then we'll parse things + // as normal. + case 32: + baseTaprootVerifier, err := newTaprootSigVerifier( + pkBytes, rawSig, &vm.tx, vm.txIdx, vm.prevOutFetcher, + vm.sigCache, vm.hashCache, vm.taprootCtx.annex, + ) + if err != nil { + return nil, err + } + + return &baseTapscriptSigVerifier{ + taprootSigVerifier: baseTaprootVerifier, + vm: vm, + }, nil + + // Otherwise, we consider this to be an unknown public key, which means + // that we'll just assume the sig to be valid. + default: + // However, if the flag preventing usage of unknown key types + // is active, then we'll return that error. + if vm.hasFlag(ScriptVerifyDiscourageUpgradeablePubkeyType) { + str := fmt.Sprintf("pubkey of length %v was used", + len(pkBytes)) + return nil, scriptError( + ErrDiscourageUpgradeablePubKeyType, str, + ) + } + + return &baseTapscriptSigVerifier{ + taprootSigVerifier: &taprootSigVerifier{}, + }, nil + } +} + +// Verify returns true if the signature verifier context deems the signature to +// be valid for the given context. +// +// NOTE: This is part of the baseSigVerifier interface. +func (b *baseTapscriptSigVerifier) Verify() bool { + // If the public key is blank, then that means it wasn't 0 or 32 bytes, + // so we'll treat this as an unknown public key version and return + // true. + if b.pubKey == nil { + return true + } + + var opts []TaprootSigHashOption + opts = append(opts, WithBaseTapscriptVersion( + b.vm.taprootCtx.codeSepPos, b.vm.taprootCtx.tapLeafHash[:], + )) + + if b.vm.taprootCtx.annex != nil { + opts = append(opts, WithAnnex(b.vm.taprootCtx.annex)) + } + + // Otherwise, we'll compute the sighash using the tapscript message + // extensions and return the outcome. + sigHash, err := calcTaprootSignatureHashRaw( + b.hashCache, b.hashType, b.tx, b.inputIndex, b.prevOuts, + opts..., + ) + if err != nil { + // TODO(roasbeef): propagate the error here? + return false + } + + return b.verifySig(sigHash) +} + +// A compile-time assertion to ensure baseTapscriptSigVerifier implements the +// signatureVerifier interface. +var _ signatureVerifier = (*baseTapscriptSigVerifier)(nil) diff --git a/txscript/stack.go b/txscript/stack.go index eb1d8cfdfe..923047d93e 100644 --- a/txscript/stack.go +++ b/txscript/stack.go @@ -86,7 +86,7 @@ func (s *stack) PopInt() (scriptNum, error) { return 0, err } - return makeScriptNum(so, s.verifyMinimalData, defaultScriptNumLen) + return makeScriptNum(so, s.verifyMinimalData, maxScriptNumLen) } // PopBool pops the value off the top of the stack, converts it into a bool, and @@ -123,7 +123,7 @@ func (s *stack) PeekInt(idx int32) (scriptNum, error) { return 0, err } - return makeScriptNum(so, s.verifyMinimalData, defaultScriptNumLen) + return makeScriptNum(so, s.verifyMinimalData, maxScriptNumLen) } // PeekBool returns the Nth item on the stack as a bool without removing it. diff --git a/txscript/standard.go b/txscript/standard.go index a7e929d101..aa7a7970d7 100644 --- a/txscript/standard.go +++ b/txscript/standard.go @@ -1,4 +1,4 @@ -// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2013-2020 The btcsuite developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -7,9 +7,9 @@ package txscript import ( "fmt" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) const ( @@ -42,7 +42,11 @@ const ( ScriptVerifyWitness | ScriptVerifyDiscourageUpgradeableWitnessProgram | ScriptVerifyMinimalIf | - ScriptVerifyWitnessPubKeyType + ScriptVerifyWitnessPubKeyType | + ScriptVerifyTaproot | + ScriptVerifyDiscourageUpgradeableTaprootVersion | + ScriptVerifyDiscourageOpSuccess | + ScriptVerifyDiscourageUpgradeablePubkeyType ) // ScriptClass is an enumeration for the list of standard types of script. @@ -58,6 +62,8 @@ const ( WitnessV0ScriptHashTy // Pay to witness script hash. MultiSigTy // Multi signature. NullDataTy // Empty data-only (provably prunable). + WitnessV1TaprootTy // Taproot output + WitnessUnknownTy // Witness unknown ) // scriptClassToName houses the human-readable strings which describe each @@ -71,6 +77,8 @@ var scriptClassToName = []string{ WitnessV0ScriptHashTy: "witness_v0_scripthash", MultiSigTy: "multisig", NullDataTy: "nulldata", + WitnessV1TaprootTy: "witness_v1_taproot", + WitnessUnknownTy: "witness_unknown", } // String implements the Stringer interface by returning the name of @@ -83,97 +91,468 @@ func (t ScriptClass) String() string { return scriptClassToName[t] } -// isPubkey returns true if the script passed is a pay-to-pubkey transaction, -// false otherwise. -func isPubkey(pops []parsedOpcode) bool { - // Valid pubkeys are either 33 or 65 bytes. - return len(pops) == 2 && - (len(pops[0].data) == 33 || len(pops[0].data) == 65) && - pops[1].opcode.value == OP_CHECKSIG +// extractCompressedPubKey extracts a compressed public key from the passed +// script if it is a standard pay-to-compressed-secp256k1-pubkey script. It +// will return nil otherwise. +func extractCompressedPubKey(script []byte) []byte { + // A pay-to-compressed-pubkey script is of the form: + // OP_DATA_33 <33-byte compressed pubkey> OP_CHECKSIG + + // All compressed secp256k1 public keys must start with 0x02 or 0x03. + if len(script) == 35 && + script[34] == OP_CHECKSIG && + script[0] == OP_DATA_33 && + (script[1] == 0x02 || script[1] == 0x03) { + + return script[1:34] + } + + return nil } -// isPubkeyHash returns true if the script passed is a pay-to-pubkey-hash -// transaction, false otherwise. -func isPubkeyHash(pops []parsedOpcode) bool { - return len(pops) == 5 && - pops[0].opcode.value == OP_DUP && - pops[1].opcode.value == OP_HASH160 && - pops[2].opcode.value == OP_DATA_20 && - pops[3].opcode.value == OP_EQUALVERIFY && - pops[4].opcode.value == OP_CHECKSIG +// extractUncompressedPubKey extracts an uncompressed public key from the +// passed script if it is a standard pay-to-uncompressed-secp256k1-pubkey +// script. It will return nil otherwise. +func extractUncompressedPubKey(script []byte) []byte { + // A pay-to-uncompressed-pubkey script is of the form: + // OP_DATA_65 <65-byte uncompressed pubkey> OP_CHECKSIG + // + // All non-hybrid uncompressed secp256k1 public keys must start with 0x04. + // Hybrid uncompressed secp256k1 public keys start with 0x06 or 0x07: + // - 0x06 => hybrid format for even Y coords + // - 0x07 => hybrid format for odd Y coords + if len(script) == 67 && + script[66] == OP_CHECKSIG && + script[0] == OP_DATA_65 && + (script[1] == 0x04 || script[1] == 0x06 || script[1] == 0x07) { + + return script[1:66] + } + return nil +} +// extractPubKey extracts either compressed or uncompressed public key from the +// passed script if it is a either a standard pay-to-compressed-secp256k1-pubkey +// or pay-to-uncompressed-secp256k1-pubkey script, respectively. It will return +// nil otherwise. +func extractPubKey(script []byte) []byte { + if pubKey := extractCompressedPubKey(script); pubKey != nil { + return pubKey + } + return extractUncompressedPubKey(script) } -// isMultiSig returns true if the passed script is a multisig transaction, false -// otherwise. -func isMultiSig(pops []parsedOpcode) bool { - // The absolute minimum is 1 pubkey: - // OP_0/OP_1-16 OP_1 OP_CHECKMULTISIG - l := len(pops) - if l < 4 { - return false +// isPubKeyScript returns whether or not the passed script is either a standard +// pay-to-compressed-secp256k1-pubkey or pay-to-uncompressed-secp256k1-pubkey +// script. +func isPubKeyScript(script []byte) bool { + return extractPubKey(script) != nil +} + +// extractPubKeyHash extracts the public key hash from the passed script if it +// is a standard pay-to-pubkey-hash script. It will return nil otherwise. +func extractPubKeyHash(script []byte) []byte { + // A pay-to-pubkey-hash script is of the form: + // OP_DUP OP_HASH160 <20-byte hash> OP_EQUALVERIFY OP_CHECKSIG + if len(script) == 25 && + script[0] == OP_DUP && + script[1] == OP_HASH160 && + script[2] == OP_DATA_20 && + script[23] == OP_EQUALVERIFY && + script[24] == OP_CHECKSIG { + + return script[3:23] } - if !isSmallInt(pops[0].opcode) { - return false + + return nil +} + +// isPubKeyHashScript returns whether or not the passed script is a standard +// pay-to-pubkey-hash script. +func isPubKeyHashScript(script []byte) bool { + return extractPubKeyHash(script) != nil +} + +// extractScriptHash extracts the script hash from the passed script if it is a +// standard pay-to-script-hash script. It will return nil otherwise. +// +// NOTE: This function is only valid for version 0 opcodes. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func extractScriptHash(script []byte) []byte { + // A pay-to-script-hash script is of the form: + // OP_HASH160 <20-byte scripthash> OP_EQUAL + if len(script) == 23 && + script[0] == OP_HASH160 && + script[1] == OP_DATA_20 && + script[22] == OP_EQUAL { + + return script[2:22] } - if !isSmallInt(pops[l-2].opcode) { + + return nil +} + +// isScriptHashScript returns whether or not the passed script is a standard +// pay-to-script-hash script. +func isScriptHashScript(script []byte) bool { + return extractScriptHash(script) != nil +} + +// multiSigDetails houses details extracted from a standard multisig script. +type multiSigDetails struct { + requiredSigs int + numPubKeys int + pubKeys [][]byte + valid bool +} + +// extractMultisigScriptDetails attempts to extract details from the passed +// script if it is a standard multisig script. The returned details struct will +// have the valid flag set to false otherwise. +// +// The extract pubkeys flag indicates whether or not the pubkeys themselves +// should also be extracted and is provided because extracting them results in +// an allocation that the caller might wish to avoid. The pubKeys member of +// the returned details struct will be nil when the flag is false. +// +// NOTE: This function is only valid for version 0 scripts. The returned +// details struct will always be empty and have the valid flag set to false for +// other script versions. +func extractMultisigScriptDetails(scriptVersion uint16, script []byte, extractPubKeys bool) multiSigDetails { + // The only currently supported script version is 0. + if scriptVersion != 0 { + return multiSigDetails{} + } + + // A multi-signature script is of the form: + // NUM_SIGS PUBKEY PUBKEY PUBKEY ... NUM_PUBKEYS OP_CHECKMULTISIG + + // The script can't possibly be a multisig script if it doesn't end with + // OP_CHECKMULTISIG or have at least two small integer pushes preceding it. + // Fail fast to avoid more work below. + if len(script) < 3 || script[len(script)-1] != OP_CHECKMULTISIG { + return multiSigDetails{} + } + + // The first opcode must be a small integer specifying the number of + // signatures required. + tokenizer := MakeScriptTokenizer(scriptVersion, script) + if !tokenizer.Next() || !isSmallInt(tokenizer.Opcode()) { + return multiSigDetails{} + } + requiredSigs := asSmallInt(tokenizer.Opcode()) + + // The next series of opcodes must either push public keys or be a small + // integer specifying the number of public keys. + var numPubKeys int + var pubKeys [][]byte + if extractPubKeys { + pubKeys = make([][]byte, 0, MaxPubKeysPerMultiSig) + } + for tokenizer.Next() { + if isSmallInt(tokenizer.Opcode()) { + break + } + + data := tokenizer.Data() + numPubKeys++ + if !isStrictPubKeyEncoding(data) { + continue + } + if extractPubKeys { + pubKeys = append(pubKeys, data) + } + } + if tokenizer.Done() { + return multiSigDetails{} + } + + // The next opcode must be a small integer specifying the number of public + // keys required. + op := tokenizer.Opcode() + if !isSmallInt(op) || asSmallInt(op) != numPubKeys { + return multiSigDetails{} + } + + // There must only be a single opcode left unparsed which will be + // OP_CHECKMULTISIG per the check above. + if int32(len(tokenizer.Script()))-tokenizer.ByteIndex() != 1 { + return multiSigDetails{} + } + + return multiSigDetails{ + requiredSigs: requiredSigs, + numPubKeys: numPubKeys, + pubKeys: pubKeys, + valid: true, + } +} + +// isMultisigScript returns whether or not the passed script is a standard +// multisig script. +// +// NOTE: This function is only valid for version 0 scripts. It will always +// return false for other script versions. +func isMultisigScript(scriptVersion uint16, script []byte) bool { + // Since this is only checking the form of the script, don't extract the + // public keys to avoid the allocation. + details := extractMultisigScriptDetails(scriptVersion, script, false) + return details.valid +} + +// IsMultisigScript returns whether or not the passed script is a standard +// multisignature script. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +// +// The error is DEPRECATED and will be removed in the major version bump. +func IsMultisigScript(script []byte) (bool, error) { + const scriptVersion = 0 + return isMultisigScript(scriptVersion, script), nil +} + +// IsMultisigSigScript returns whether or not the passed script appears to be a +// signature script which consists of a pay-to-script-hash multi-signature +// redeem script. Determining if a signature script is actually a redemption of +// pay-to-script-hash requires the associated public key script which is often +// expensive to obtain. Therefore, this makes a fast best effort guess that has +// a high probability of being correct by checking if the signature script ends +// with a data push and treating that data push as if it were a p2sh redeem +// script +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func IsMultisigSigScript(script []byte) bool { + const scriptVersion = 0 + + // The script can't possibly be a multisig signature script if it doesn't + // end with OP_CHECKMULTISIG in the redeem script or have at least two small + // integers preceding it, and the redeem script itself must be preceded by + // at least a data push opcode. Fail fast to avoid more work below. + if len(script) < 4 || script[len(script)-1] != OP_CHECKMULTISIG { return false } - if pops[l-1].opcode.value != OP_CHECKMULTISIG { + + // Parse through the script to find the last opcode and any data it might + // push and treat it as a p2sh redeem script even though it might not + // actually be one. + possibleRedeemScript := finalOpcodeData(scriptVersion, script) + if possibleRedeemScript == nil { return false } - // Verify the number of pubkeys specified matches the actual number - // of pubkeys provided. - if l-2-1 != asSmallInt(pops[l-2].opcode) { + // Finally, return if that possible redeem script is a multisig script. + return isMultisigScript(scriptVersion, possibleRedeemScript) +} + +// extractWitnessPubKeyHash extracts the witness public key hash from the passed +// script if it is a standard pay-to-witness-pubkey-hash script. It will return +// nil otherwise. +func extractWitnessPubKeyHash(script []byte) []byte { + // A pay-to-witness-pubkey-hash script is of the form: + // OP_0 OP_DATA_20 <20-byte-hash> + if len(script) == witnessV0PubKeyHashLen && + script[0] == OP_0 && + script[1] == OP_DATA_20 { + + return script[2:witnessV0PubKeyHashLen] + } + + return nil +} + +// isWitnessPubKeyHashScript returns whether or not the passed script is a +// standard pay-to-witness-pubkey-hash script. +func isWitnessPubKeyHashScript(script []byte) bool { + return extractWitnessPubKeyHash(script) != nil +} + +// extractWitnessV0ScriptHash extracts the witness script hash from the passed +// script if it is standard pay-to-witness-script-hash script. It will return +// nil otherwise. +func extractWitnessV0ScriptHash(script []byte) []byte { + // A pay-to-witness-script-hash script is of the form: + // OP_0 OP_DATA_32 <32-byte-hash> + if len(script) == witnessV0ScriptHashLen && + script[0] == OP_0 && + script[1] == OP_DATA_32 { + + return script[2:34] + } + + return nil +} + +// extractWitnessV1KeyBytes extracts the raw public key bytes script if it is +// standard pay-to-witness-script-hash v1 script. It will return nil otherwise. +func extractWitnessV1KeyBytes(script []byte) []byte { + // A pay-to-witness-script-hash script is of the form: + // OP_1 OP_DATA_32 <32-byte-hash> + if len(script) == witnessV1TaprootLen && + script[0] == OP_1 && + script[1] == OP_DATA_32 { + + return script[2:34] + } + + return nil +} + +// isWitnessScriptHashScript returns whether or not the passed script is a +// standard pay-to-witness-script-hash script. +func isWitnessScriptHashScript(script []byte) bool { + return extractWitnessV0ScriptHash(script) != nil +} + +// extractWitnessProgramInfo returns the version and program if the passed +// script constitutes a valid witness program. The last return value indicates +// whether or not the script is a valid witness program. +func extractWitnessProgramInfo(script []byte) (int, []byte, bool) { + // Skip parsing if we know the program is invalid based on size. + if len(script) < 4 || len(script) > 42 { + return 0, nil, false + } + + const scriptVersion = 0 + tokenizer := MakeScriptTokenizer(scriptVersion, script) + + // The first opcode must be a small int. + if !tokenizer.Next() || + !isSmallInt(tokenizer.Opcode()) { + + return 0, nil, false + } + version := asSmallInt(tokenizer.Opcode()) + + // The second opcode must be a canonical data push, the length of the + // data push is bounded to 40 by the initial check on overall script + // length. + if !tokenizer.Next() || + !isCanonicalPush(tokenizer.Opcode(), tokenizer.Data()) { + + return 0, nil, false + } + program := tokenizer.Data() + + // The witness program is valid if there are no more opcodes, and we + // terminated without a parsing error. + valid := tokenizer.Done() && tokenizer.Err() == nil + + return version, program, valid +} + +// isWitnessProgramScript returns true if the passed script is a witness +// program, and false otherwise. A witness program MUST adhere to the following +// constraints: there must be exactly two pops (program version and the program +// itself), the first opcode MUST be a small integer (0-16), the push data MUST +// be canonical, and finally the size of the push data must be between 2 and 40 +// bytes. +// +// The length of the script must be between 4 and 42 bytes. The +// smallest program is the witness version, followed by a data push of +// 2 bytes. The largest allowed witness program has a data push of +// 40-bytes. +func isWitnessProgramScript(script []byte) bool { + _, _, valid := extractWitnessProgramInfo(script) + return valid +} + +// isWitnessTaprootScript returns true if the passed script is for a +// pay-to-witness-taproot output, false otherwise. +func isWitnessTaprootScript(script []byte) bool { + return extractWitnessV1KeyBytes(script) != nil +} + +// isAnnexedWitness returns true if the passed witness has a final push +// that is a witness annex. +func isAnnexedWitness(witness wire.TxWitness) bool { + if len(witness) < 2 { return false } - for _, pop := range pops[1 : l-2] { - // Valid pubkeys are either 33 or 65 bytes. - if len(pop.data) != 33 && len(pop.data) != 65 { - return false - } + lastElement := witness[len(witness)-1] + return len(lastElement) > 0 && lastElement[0] == TaprootAnnexTag +} + +// extractAnnex attempts to extract the annex from the passed witness. If the +// witness doesn't contain an annex, then an error is returned. +func extractAnnex(witness [][]byte) ([]byte, error) { + if !isAnnexedWitness(witness) { + return nil, scriptError(ErrWitnessHasNoAnnex, "") } - return true + + lastElement := witness[len(witness)-1] + return lastElement, nil } -// isNullData returns true if the passed script is a null data transaction, -// false otherwise. -func isNullData(pops []parsedOpcode) bool { - // A nulldata transaction is either a single OP_RETURN or an - // OP_RETURN SMALLDATA (where SMALLDATA is a data push up to - // MaxDataCarrierSize bytes). - l := len(pops) - if l == 1 && pops[0].opcode.value == OP_RETURN { +// isNullDataScript returns whether or not the passed script is a standard +// null data script. +// +// NOTE: This function is only valid for version 0 scripts. It will always +// return false for other script versions. +func isNullDataScript(scriptVersion uint16, script []byte) bool { + // The only currently supported script version is 0. + if scriptVersion != 0 { + return false + } + + // A null script is of the form: + // OP_RETURN + // + // Thus, it can either be a single OP_RETURN or an OP_RETURN followed by a + // data push up to MaxDataCarrierSize bytes. + + // The script can't possibly be a null data script if it doesn't start + // with OP_RETURN. Fail fast to avoid more work below. + if len(script) < 1 || script[0] != OP_RETURN { + return false + } + + // Single OP_RETURN. + if len(script) == 1 { return true } - return l == 2 && - pops[0].opcode.value == OP_RETURN && - (isSmallInt(pops[1].opcode) || pops[1].opcode.value <= - OP_PUSHDATA4) && - len(pops[1].data) <= MaxDataCarrierSize + // OP_RETURN followed by data push up to MaxDataCarrierSize bytes. + tokenizer := MakeScriptTokenizer(scriptVersion, script[1:]) + return tokenizer.Next() && tokenizer.Done() && + (isSmallInt(tokenizer.Opcode()) || tokenizer.Opcode() <= OP_PUSHDATA4) && + len(tokenizer.Data()) <= MaxDataCarrierSize } // scriptType returns the type of the script being inspected from the known -// standard types. -func typeOfScript(pops []parsedOpcode) ScriptClass { - if isPubkey(pops) { - return PubKeyTy - } else if isPubkeyHash(pops) { - return PubKeyHashTy - } else if isWitnessPubKeyHash(pops) { - return WitnessV0PubKeyHashTy - } else if isScriptHash(pops) { - return ScriptHashTy - } else if isWitnessScriptHash(pops) { - return WitnessV0ScriptHashTy - } else if isMultiSig(pops) { - return MultiSigTy - } else if isNullData(pops) { - return NullDataTy +// standard types. The version version should be 0 if the script is segwit v0 +// or prior, and 1 for segwit v1 (taproot) scripts. +func typeOfScript(scriptVersion uint16, script []byte) ScriptClass { + switch scriptVersion { + case BaseSegwitWitnessVersion: + switch { + case isPubKeyScript(script): + return PubKeyTy + case isPubKeyHashScript(script): + return PubKeyHashTy + case isScriptHashScript(script): + return ScriptHashTy + case isWitnessPubKeyHashScript(script): + return WitnessV0PubKeyHashTy + case isWitnessScriptHashScript(script): + return WitnessV0ScriptHashTy + case isMultisigScript(scriptVersion, script): + return MultiSigTy + case isNullDataScript(scriptVersion, script): + return NullDataTy + } + case TaprootWitnessVersion: + switch { + case isWitnessTaprootScript(script): + return WitnessV1TaprootTy + } } + return NonStandardTy } @@ -181,11 +560,31 @@ func typeOfScript(pops []parsedOpcode) ScriptClass { // // NonStandardTy will be returned when the script does not parse. func GetScriptClass(script []byte) ScriptClass { - pops, err := parseScript(script) - if err != nil { - return NonStandardTy + const scriptVersionSegWit = 0 + classSegWit := typeOfScript(scriptVersionSegWit, script) + + if classSegWit != NonStandardTy { + return classSegWit } - return typeOfScript(pops) + + const scriptVersionTaproot = 1 + return typeOfScript(scriptVersionTaproot, script) +} + +// NewScriptClass returns the ScriptClass corresponding to the string name +// provided as argument. ErrUnsupportedScriptType error is returned if the +// name doesn't correspond to any known ScriptClass. +// +// Not to be confused with GetScriptClass. +func NewScriptClass(name string) (*ScriptClass, error) { + for i, n := range scriptClassToName { + if n == name { + value := ScriptClass(i) + return &value, nil + } + } + + return nil, fmt.Errorf("%w: %s", ErrUnsupportedScriptType, name) } // expectedInputs returns the number of arguments required by a script. @@ -193,7 +592,11 @@ func GetScriptClass(script []byte) ScriptClass { // then -1 is returned. We are an internal function and thus assume that class // is the real class of pops (and we can thus assume things that were determined // while finding out the type). -func expectedInputs(pops []parsedOpcode, class ScriptClass) int { +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +func expectedInputs(script []byte, class ScriptClass) int { switch class { case PubKeyTy: return 1 @@ -212,6 +615,10 @@ func expectedInputs(pops []parsedOpcode, class ScriptClass) int { // Not including script. That is handled by the caller. return 1 + case WitnessV1TaprootTy: + // Not including script. That is handled by the caller. + return 1 + case MultiSigTy: // Standard multisig has a push a small number for the number // of sigs and number of keys. Check the first push instruction @@ -220,7 +627,7 @@ func expectedInputs(pops []parsedOpcode, class ScriptClass) int { // the original bitcoind bug where OP_CHECKMULTISIG pops an // additional item from the stack, add an extra expected input // for the extra push that is required to compensate. - return asSmallInt(pops[0].opcode) + 1 + return asSmallInt(script[0]) + 1 case NullDataTy: fallthrough @@ -252,53 +659,61 @@ type ScriptInfo struct { // pair. It will error if the pair is in someway invalid such that they can not // be analysed, i.e. if they do not parse or the pkScript is not a push-only // script +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. +// +// DEPRECATED. This will be removed in the next major version bump. func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, bip16, segwit bool) (*ScriptInfo, error) { - sigPops, err := parseScript(sigScript) - if err != nil { + // Count the number of opcodes in the signature script while also ensuring + // that successfully parses. Since there is a check below to ensure the + // script is push only, this equates to the number of inputs to the public + // key script. + const scriptVersion = 0 + var numInputs int + tokenizer := MakeScriptTokenizer(scriptVersion, sigScript) + for tokenizer.Next() { + numInputs++ + } + if err := tokenizer.Err(); err != nil { return nil, err } - pkPops, err := parseScript(pkScript) - if err != nil { + if err := checkScriptParses(scriptVersion, pkScript); err != nil { return nil, err } - // Push only sigScript makes little sense. - si := new(ScriptInfo) - si.PkScriptClass = typeOfScript(pkPops) - // Can't have a signature script that doesn't just push data. - if !isPushOnly(sigPops) { + if !IsPushOnlyScript(sigScript) { return nil, scriptError(ErrNotPushOnly, "signature script is not push only") } - si.ExpectedInputs = expectedInputs(pkPops, si.PkScriptClass) + si := new(ScriptInfo) + si.PkScriptClass = typeOfScript(scriptVersion, pkScript) + + si.ExpectedInputs = expectedInputs(pkScript, si.PkScriptClass) switch { // Count sigops taking into account pay-to-script-hash. case si.PkScriptClass == ScriptHashTy && bip16 && !segwit: - // The pay-to-hash-script is the final data push of the - // signature script. - script := sigPops[len(sigPops)-1].data - shPops, err := parseScript(script) - if err != nil { - return nil, err - } - - shInputs := expectedInputs(shPops, typeOfScript(shPops)) - if shInputs == -1 { + // The redeem script is the final data push of the signature script. + redeemScript := finalOpcodeData(scriptVersion, sigScript) + reedeemClass := typeOfScript(scriptVersion, redeemScript) + rsInputs := expectedInputs(redeemScript, reedeemClass) + if rsInputs == -1 { si.ExpectedInputs = -1 } else { - si.ExpectedInputs += shInputs + si.ExpectedInputs += rsInputs } - si.SigOps = getSigOpCount(shPops, true) + si.SigOps = countSigOpsV0(redeemScript, true) // All entries pushed to stack (or are OP_RESERVED and exec // will fail). - si.NumInputs = len(sigPops) + si.NumInputs = numInputs // If segwit is active, and this is a regular p2wkh output, then we'll // treat the script as a p2pkh output in essence. @@ -314,8 +729,8 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, // Extract the pushed witness program from the sigScript so we // can determine the number of expected inputs. - pkPops, _ := parseScript(sigScript[1:]) - shInputs := expectedInputs(pkPops, typeOfScript(pkPops)) + redeemClass := typeOfScript(scriptVersion, sigScript[1:]) + shInputs := expectedInputs(sigScript[1:], redeemClass) if shInputs == -1 { si.ExpectedInputs = -1 } else { @@ -325,17 +740,14 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, si.SigOps = GetWitnessSigOpCount(sigScript, pkScript, witness) si.NumInputs = len(witness) - si.NumInputs += len(sigPops) + si.NumInputs += numInputs // If segwit is active, and this is a p2wsh output, then we'll need to // examine the witness script to generate accurate script info. case si.PkScriptClass == WitnessV0ScriptHashTy && segwit: - // The witness script is the final element of the witness - // stack. witnessScript := witness[len(witness)-1] - pops, _ := parseScript(witnessScript) - - shInputs := expectedInputs(pops, typeOfScript(pops)) + redeemClass := typeOfScript(scriptVersion, witnessScript) + shInputs := expectedInputs(witnessScript, redeemClass) if shInputs == -1 { si.ExpectedInputs = -1 } else { @@ -346,11 +758,11 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, si.NumInputs = len(witness) default: - si.SigOps = getSigOpCount(pkPops, true) + si.SigOps = countSigOpsV0(pkScript, true) // All entries pushed to stack (or are OP_RESERVED and exec // will fail). - si.NumInputs = len(sigPops) + si.NumInputs = numInputs } return si, nil @@ -359,27 +771,21 @@ func CalcScriptInfo(sigScript, pkScript []byte, witness wire.TxWitness, // CalcMultiSigStats returns the number of public keys and signatures from // a multi-signature transaction script. The passed script MUST already be // known to be a multi-signature script. +// +// NOTE: This function is only valid for version 0 scripts. Since the function +// does not accept a script version, the results are undefined for other script +// versions. func CalcMultiSigStats(script []byte) (int, int, error) { - pops, err := parseScript(script) - if err != nil { - return 0, 0, err - } - - // A multi-signature script is of the pattern: - // NUM_SIGS PUBKEY PUBKEY PUBKEY... NUM_PUBKEYS OP_CHECKMULTISIG - // Therefore the number of signatures is the oldest item on the stack - // and the number of pubkeys is the 2nd to last. Also, the absolute - // minimum for a multi-signature script is 1 pubkey, so at least 4 - // items must be on the stack per: - // OP_1 PUBKEY OP_1 OP_CHECKMULTISIG - if len(pops) < 4 { + // The public keys are not needed here, so pass false to avoid the extra + // allocation. + const scriptVersion = 0 + details := extractMultisigScriptDetails(scriptVersion, script, false) + if !details.valid { str := fmt.Sprintf("script %x is not a multisig script", script) return 0, 0, scriptError(ErrNotMultisigScript, str) } - numSigs := asSmallInt(pops[0].opcode) - numPubKeys := asSmallInt(pops[len(pops)-2].opcode) - return numPubKeys, numSigs, nil + return details.numPubKeys, details.requiredSigs, nil } // payToPubKeyHashScript creates a new script to pay a transaction @@ -410,6 +816,12 @@ func payToWitnessScriptHashScript(scriptHash []byte) ([]byte, error) { return NewScriptBuilder().AddOp(OP_0).AddData(scriptHash).Script() } +// payToWitnessTaprootScript creates a new script to pay to a version 1 +// (taproot) witness program. The passed hash is expected to be valid. +func payToWitnessTaprootScript(rawKey []byte) ([]byte, error) { + return NewScriptBuilder().AddOp(OP_1).AddData(rawKey).Script() +} + // payToPubkeyScript creates a new script to pay a transaction output to a // public key. It is expected that the input is a valid pubkey. func payToPubKeyScript(serializedPubKey []byte) ([]byte, error) { @@ -456,6 +868,12 @@ func PayToAddrScript(addr btcutil.Address) ([]byte, error) { nilAddrErrStr) } return payToWitnessScriptHashScript(addr.ScriptAddress()) + case *btcutil.AddressTaproot: + if addr == nil { + return nil, scriptError(ErrUnsupportedAddress, + nilAddrErrStr) + } + return payToWitnessTaprootScript(addr.ScriptAddress()) } str := fmt.Sprintf("unable to generate payment script for unsupported "+ @@ -501,127 +919,126 @@ func MultiSigScript(pubkeys []*btcutil.AddressPubKey, nrequired int) ([]byte, er // PushedData returns an array of byte slices containing any pushed data found // in the passed script. This includes OP_0, but not OP_1 - OP_16. func PushedData(script []byte) ([][]byte, error) { - pops, err := parseScript(script) - if err != nil { - return nil, err - } + const scriptVersion = 0 var data [][]byte - for _, pop := range pops { - if pop.data != nil { - data = append(data, pop.data) - } else if pop.opcode.value == OP_0 { + tokenizer := MakeScriptTokenizer(scriptVersion, script) + for tokenizer.Next() { + if tokenizer.Data() != nil { + data = append(data, tokenizer.Data()) + } else if tokenizer.Opcode() == OP_0 { data = append(data, nil) } } + if err := tokenizer.Err(); err != nil { + return nil, err + } return data, nil } +// pubKeyHashToAddrs is a convenience function to attempt to convert the +// passed hash to a pay-to-pubkey-hash address housed within an address +// slice. It is used to consolidate common code. +func pubKeyHashToAddrs(hash []byte, params *chaincfg.Params) []btcutil.Address { + // Skip the pubkey hash if it's invalid for some reason. + var addrs []btcutil.Address + addr, err := btcutil.NewAddressPubKeyHash(hash, params) + if err == nil { + addrs = append(addrs, addr) + } + return addrs +} + +// scriptHashToAddrs is a convenience function to attempt to convert the passed +// hash to a pay-to-script-hash address housed within an address slice. It is +// used to consolidate common code. +func scriptHashToAddrs(hash []byte, params *chaincfg.Params) []btcutil.Address { + // Skip the hash if it's invalid for some reason. + var addrs []btcutil.Address + addr, err := btcutil.NewAddressScriptHashFromHash(hash, params) + if err == nil { + addrs = append(addrs, addr) + } + return addrs +} + // ExtractPkScriptAddrs returns the type of script, addresses and required // signatures associated with the passed PkScript. Note that it only works for // 'standard' transaction script types. Any data such as public keys which are // invalid are omitted from the results. -func ExtractPkScriptAddrs(pkScript []byte, chainParams *chaincfg.Params) (ScriptClass, []btcutil.Address, int, error) { - var addrs []btcutil.Address - var requiredSigs int +func ExtractPkScriptAddrs(pkScript []byte, + chainParams *chaincfg.Params) (ScriptClass, []btcutil.Address, int, error) { - // No valid addresses or required signatures if the script doesn't - // parse. - pops, err := parseScript(pkScript) - if err != nil { - return NonStandardTy, nil, 0, err + // Check for pay-to-pubkey-hash script. + if hash := extractPubKeyHash(pkScript); hash != nil { + return PubKeyHashTy, pubKeyHashToAddrs(hash, chainParams), 1, nil } - scriptClass := typeOfScript(pops) - switch scriptClass { - case PubKeyHashTy: - // A pay-to-pubkey-hash script is of the form: - // OP_DUP OP_HASH160 OP_EQUALVERIFY OP_CHECKSIG - // Therefore the pubkey hash is the 3rd item on the stack. - // Skip the pubkey hash if it's invalid for some reason. - requiredSigs = 1 - addr, err := btcutil.NewAddressPubKeyHash(pops[2].data, - chainParams) + // Check for pay-to-script-hash. + if hash := extractScriptHash(pkScript); hash != nil { + return ScriptHashTy, scriptHashToAddrs(hash, chainParams), 1, nil + } + + // Check for pay-to-pubkey script. + if data := extractPubKey(pkScript); data != nil { + var addrs []btcutil.Address + addr, err := btcutil.NewAddressPubKey(data, chainParams) if err == nil { addrs = append(addrs, addr) } + return PubKeyTy, addrs, 1, nil + } - case WitnessV0PubKeyHashTy: - // A pay-to-witness-pubkey-hash script is of thw form: - // OP_0 <20-byte hash> - // Therefore, the pubkey hash is the second item on the stack. - // Skip the pubkey hash if it's invalid for some reason. - requiredSigs = 1 - addr, err := btcutil.NewAddressWitnessPubKeyHash(pops[1].data, - chainParams) - if err == nil { - addrs = append(addrs, addr) + // Check for multi-signature script. + const scriptVersion = 0 + details := extractMultisigScriptDetails(scriptVersion, pkScript, true) + if details.valid { + // Convert the public keys while skipping any that are invalid. + addrs := make([]btcutil.Address, 0, len(details.pubKeys)) + for _, pubkey := range details.pubKeys { + addr, err := btcutil.NewAddressPubKey(pubkey, chainParams) + if err == nil { + addrs = append(addrs, addr) + } } + return MultiSigTy, addrs, details.requiredSigs, nil + } - case PubKeyTy: - // A pay-to-pubkey script is of the form: - // OP_CHECKSIG - // Therefore the pubkey is the first item on the stack. - // Skip the pubkey if it's invalid for some reason. - requiredSigs = 1 - addr, err := btcutil.NewAddressPubKey(pops[0].data, chainParams) + // Check for null data script. + if isNullDataScript(scriptVersion, pkScript) { + // Null data transactions have no addresses or required signatures. + return NullDataTy, nil, 0, nil + } + + if hash := extractWitnessPubKeyHash(pkScript); hash != nil { + var addrs []btcutil.Address + addr, err := btcutil.NewAddressWitnessPubKeyHash(hash, chainParams) if err == nil { addrs = append(addrs, addr) } + return WitnessV0PubKeyHashTy, addrs, 1, nil + } - case ScriptHashTy: - // A pay-to-script-hash script is of the form: - // OP_HASH160 OP_EQUAL - // Therefore the script hash is the 2nd item on the stack. - // Skip the script hash if it's invalid for some reason. - requiredSigs = 1 - addr, err := btcutil.NewAddressScriptHashFromHash(pops[1].data, - chainParams) + if hash := extractWitnessV0ScriptHash(pkScript); hash != nil { + var addrs []btcutil.Address + addr, err := btcutil.NewAddressWitnessScriptHash(hash, chainParams) if err == nil { addrs = append(addrs, addr) } + return WitnessV0ScriptHashTy, addrs, 1, nil + } - case WitnessV0ScriptHashTy: - // A pay-to-witness-script-hash script is of the form: - // OP_0 <32-byte hash> - // Therefore, the script hash is the second item on the stack. - // Skip the script hash if it's invalid for some reason. - requiredSigs = 1 - addr, err := btcutil.NewAddressWitnessScriptHash(pops[1].data, - chainParams) + if rawKey := extractWitnessV1KeyBytes(pkScript); rawKey != nil { + var addrs []btcutil.Address + addr, err := btcutil.NewAddressTaproot(rawKey, chainParams) if err == nil { addrs = append(addrs, addr) } - - case MultiSigTy: - // A multi-signature script is of the form: - // ... OP_CHECKMULTISIG - // Therefore the number of required signatures is the 1st item - // on the stack and the number of public keys is the 2nd to last - // item on the stack. - requiredSigs = asSmallInt(pops[0].opcode) - numPubKeys := asSmallInt(pops[len(pops)-2].opcode) - - // Extract the public keys while skipping any that are invalid. - addrs = make([]btcutil.Address, 0, numPubKeys) - for i := 0; i < numPubKeys; i++ { - addr, err := btcutil.NewAddressPubKey(pops[i+1].data, - chainParams) - if err == nil { - addrs = append(addrs, addr) - } - } - - case NullDataTy: - // Null data transactions have no addresses or required - // signatures. - - case NonStandardTy: - // Don't attempt to extract addresses or required signatures for - // nonstandard transactions. + return WitnessV1TaprootTy, addrs, 1, nil } - return scriptClass, addrs, requiredSigs, nil + // If none of the above passed, then the address must be non-standard. + return NonStandardTy, nil, 0, nil } // AtomicSwapDataPushes houses the data pushes found in atomic swap contracts. @@ -644,64 +1061,102 @@ type AtomicSwapDataPushes struct { // // This function is only defined in the txscript package due to API limitations // which prevent callers using txscript to parse nonstandard scripts. +// +// DEPRECATED. This will be removed in the next major version bump. The error +// should also likely be removed if the code is reimplemented by any callers +// since any errors result in a nil result anyway. func ExtractAtomicSwapDataPushes(version uint16, pkScript []byte) (*AtomicSwapDataPushes, error) { - pops, err := parseScript(pkScript) - if err != nil { - return nil, err + // An atomic swap is of the form: + // IF + // SIZE EQUALVERIFY SHA256 <32-byte secret> EQUALVERIFY DUP + // HASH160 <20-byte recipient hash> + // ELSE + // CHECKLOCKTIMEVERIFY DROP DUP HASH160 <20-byte refund hash> + // ENDIF + // EQUALVERIFY CHECKSIG + type templateMatch struct { + expectCanonicalInt bool + maxIntBytes int + opcode byte + extractedInt int64 + extractedData []byte } - - if len(pops) != 20 { - return nil, nil - } - isAtomicSwap := pops[0].opcode.value == OP_IF && - pops[1].opcode.value == OP_SIZE && - canonicalPush(pops[2]) && - pops[3].opcode.value == OP_EQUALVERIFY && - pops[4].opcode.value == OP_SHA256 && - pops[5].opcode.value == OP_DATA_32 && - pops[6].opcode.value == OP_EQUALVERIFY && - pops[7].opcode.value == OP_DUP && - pops[8].opcode.value == OP_HASH160 && - pops[9].opcode.value == OP_DATA_20 && - pops[10].opcode.value == OP_ELSE && - canonicalPush(pops[11]) && - pops[12].opcode.value == OP_CHECKLOCKTIMEVERIFY && - pops[13].opcode.value == OP_DROP && - pops[14].opcode.value == OP_DUP && - pops[15].opcode.value == OP_HASH160 && - pops[16].opcode.value == OP_DATA_20 && - pops[17].opcode.value == OP_ENDIF && - pops[18].opcode.value == OP_EQUALVERIFY && - pops[19].opcode.value == OP_CHECKSIG - if !isAtomicSwap { - return nil, nil + var template = [20]templateMatch{ + {opcode: OP_IF}, + {opcode: OP_SIZE}, + {expectCanonicalInt: true, maxIntBytes: maxScriptNumLen}, + {opcode: OP_EQUALVERIFY}, + {opcode: OP_SHA256}, + {opcode: OP_DATA_32}, + {opcode: OP_EQUALVERIFY}, + {opcode: OP_DUP}, + {opcode: OP_HASH160}, + {opcode: OP_DATA_20}, + {opcode: OP_ELSE}, + {expectCanonicalInt: true, maxIntBytes: cltvMaxScriptNumLen}, + {opcode: OP_CHECKLOCKTIMEVERIFY}, + {opcode: OP_DROP}, + {opcode: OP_DUP}, + {opcode: OP_HASH160}, + {opcode: OP_DATA_20}, + {opcode: OP_ENDIF}, + {opcode: OP_EQUALVERIFY}, + {opcode: OP_CHECKSIG}, } - pushes := new(AtomicSwapDataPushes) - copy(pushes.SecretHash[:], pops[5].data) - copy(pushes.RecipientHash160[:], pops[9].data) - copy(pushes.RefundHash160[:], pops[16].data) - if pops[2].data != nil { - locktime, err := makeScriptNum(pops[2].data, true, 5) - if err != nil { + var templateOffset int + tokenizer := MakeScriptTokenizer(version, pkScript) + for tokenizer.Next() { + // Not an atomic swap script if it has more opcodes than expected in the + // template. + if templateOffset >= len(template) { return nil, nil } - pushes.SecretSize = int64(locktime) - } else if op := pops[2].opcode; isSmallInt(op) { - pushes.SecretSize = int64(asSmallInt(op)) - } else { - return nil, nil - } - if pops[11].data != nil { - locktime, err := makeScriptNum(pops[11].data, true, 5) - if err != nil { - return nil, nil + + op := tokenizer.Opcode() + data := tokenizer.Data() + tplEntry := &template[templateOffset] + if tplEntry.expectCanonicalInt { + switch { + case data != nil: + val, err := makeScriptNum(data, true, tplEntry.maxIntBytes) + if err != nil { + return nil, err + } + tplEntry.extractedInt = int64(val) + + case isSmallInt(op): + tplEntry.extractedInt = int64(asSmallInt(op)) + + // Not an atomic swap script if the opcode does not push an int. + default: + return nil, nil + } + } else { + if op != tplEntry.opcode { + return nil, nil + } + + tplEntry.extractedData = data } - pushes.LockTime = int64(locktime) - } else if op := pops[11].opcode; isSmallInt(op) { - pushes.LockTime = int64(asSmallInt(op)) - } else { + + templateOffset++ + } + if err := tokenizer.Err(); err != nil { + return nil, err + } + if !tokenizer.Done() || templateOffset != len(template) { return nil, nil } - return pushes, nil + + // At this point, the script appears to be an atomic swap, so populate and + // return the extacted data. + pushes := AtomicSwapDataPushes{ + SecretSize: template[2].extractedInt, + LockTime: template[11].extractedInt, + } + copy(pushes.SecretHash[:], template[5].extractedData) + copy(pushes.RecipientHash160[:], template[9].extractedData) + copy(pushes.RefundHash160[:], template[16].extractedData) + return &pushes, nil } diff --git a/txscript/standard_test.go b/txscript/standard_test.go index e24d5f615b..283e2ccb7b 100644 --- a/txscript/standard_test.go +++ b/txscript/standard_test.go @@ -1,4 +1,4 @@ -// Copyright (c) 2013-2017 The btcsuite developers +// Copyright (c) 2013-2020 The btcsuite developers // Use of this source code is governed by an ISC // license that can be found in the LICENSE file. @@ -7,12 +7,13 @@ package txscript import ( "bytes" "encoding/hex" + "errors" "reflect" "testing" + "github.com/btcsuite/btcd/btcutil" "github.com/btcsuite/btcd/chaincfg" "github.com/btcsuite/btcd/wire" - "github.com/btcsuite/btcutil" ) // mustParseShortForm parses the passed short form script and returns the @@ -70,6 +71,20 @@ func newAddressScriptHash(scriptHash []byte) btcutil.Address { return addr } +// newAddressTaproot returns a new btcutil.AddressTaproot from the +// provided hash. It panics if an error occurs. This is only used in the tests +// as a helper since the only way it can fail is if there is an error in the +// test source code. +func newAddressTaproot(scriptHash []byte) btcutil.Address { + addr, err := btcutil.NewAddressTaproot(scriptHash, + &chaincfg.MainNetParams) + if err != nil { + panic("invalid script hash in test source") + } + + return addr +} + // TestExtractPkScriptAddrs ensures that extracting the type, addresses, and // number of required signatures from PkScripts works as intended. func TestExtractPkScriptAddrs(t *testing.T) { @@ -310,8 +325,16 @@ func TestExtractPkScriptAddrs(t *testing.T) { reqSigs: 1, class: MultiSigTy, }, - // from real tx: 691dd277dc0e90a462a3d652a1171686de49cf19067cd33c7df0392833fb986a, vout 44 - // invalid public keys + { + name: "v1 p2tr witness-script-hash", + script: hexToBytes("51201a82f7457a9ba6ab1074e9f50" + + "053eefc637f8b046e389b636766bdc7d1f676f8"), + addrs: []btcutil.Address{newAddressTaproot( + hexToBytes("1a82f7457a9ba6ab1074e9f50053eefc6" + + "37f8b046e389b636766bdc7d1f676f8"))}, + reqSigs: 1, + class: WitnessV1TaprootTy, + }, { name: "1 of 3 multisig with invalid pubkeys 2", script: hexToBytes("514134633365633235396337346461636" + @@ -636,6 +659,27 @@ func TestPayToAddrScript(t *testing.T) { err) } + p2wsh, err := btcutil.NewAddressWitnessScriptHash(hexToBytes("e981bd992a43650657"+ + "d705ef7a30b2adc75a927ed42a4cf6b3da0f865a475fb4"), &chaincfg.MainNetParams) + if err != nil { + t.Fatalf("Unable to create p2wsh address: %v", + err) + } + + p2tr, err := btcutil.NewAddressTaproot(hexToBytes("3a8e170b546c3b122ab9c175e"+ + "ff36fb344db2684fe96497eb51b440e75232709"), &chaincfg.MainNetParams) + if err != nil { + t.Fatalf("Unable to create p2tr address: %v", + err) + } + + p2wpkh, err := btcutil.NewAddressWitnessPubKeyHash(hexToBytes("748e50366adb8"+ + "ae4b0255e406a28f99d24b73cbc"), &chaincfg.MainNetParams) + if err != nil { + t.Fatalf("Unable to create p2wpkh address: %v", + err) + } + // Errors used in the tests below defined here for convenience and to // keep the horizontal test size shorter. errUnsupportedAddress := scriptError(ErrUnsupportedAddress, "") @@ -682,11 +726,34 @@ func TestPayToAddrScript(t *testing.T) { "CHECKSIG", nil, }, + // pay-to-witness-script-hash address on mainnet. + { + p2wsh, + "OP_0 DATA_32 0xe981bd992a43650657d705ef7a30b2adc75a927ed" + + "42a4cf6b3da0f865a475fb4", + nil, + }, + // pay-to-taproot address on mainnet. + { + p2tr, + "OP_1 DATA_32 0x3a8e170b546c3b122ab9c175eff36fb344db2684" + + "fe96497eb51b440e75232709", + nil, + }, + // pay-to-witness-pubkey-hash address on mainnet. + { + p2wpkh, + "OP_0 DATA_20 0x748e50366adb8ae4b0255e406a28f99d24b73cbc", + nil, + }, // Supported address types with nil pointers. {(*btcutil.AddressPubKeyHash)(nil), "", errUnsupportedAddress}, {(*btcutil.AddressScriptHash)(nil), "", errUnsupportedAddress}, {(*btcutil.AddressPubKey)(nil), "", errUnsupportedAddress}, + {(*btcutil.AddressWitnessPubKeyHash)(nil), "", errUnsupportedAddress}, + {(*btcutil.AddressWitnessScriptHash)(nil), "", errUnsupportedAddress}, + {(*btcutil.AddressTaproot)(nil), "", errUnsupportedAddress}, // Unsupported address type. {&bogusAddress{}, "", errUnsupportedAddress}, @@ -831,7 +898,7 @@ func TestCalcMultiSigStats(t *testing.T) { name: "short script", script: "0x046708afdb0fe5548271967f1a67130b7105cd6a828" + "e03909a67962e0ea1f61d", - err: scriptError(ErrMalformedPush, ""), + err: scriptError(ErrNotMultisigScript, ""), }, { name: "stack underflow", @@ -842,11 +909,7 @@ func TestCalcMultiSigStats(t *testing.T) { }, { name: "multisig script", - script: "0 DATA_72 0x30450220106a3e4ef0b51b764a2887226" + - "2ffef55846514dacbdcbbdd652c849d395b4384022100" + - "e03ae554c3cbb40600d31dd46fc33f25e47bf8525b1fe" + - "07282e3b6ecb5f3bb2801 CODESEPARATOR 1 DATA_33 " + - "0x0232abdc893e7f0631364d7fd01cb33d24da45329a0" + + script: "1 DATA_33 0x0232abdc893e7f0631364d7fd01cb33d24da45329a0" + "0357b3a7886211ab414d55a 1 CHECKMULTISIG", err: nil, }, @@ -1213,3 +1276,40 @@ func TestNullDataScript(t *testing.T) { } } } + +// TestNewScriptClass tests whether NewScriptClass returns a valid ScriptClass. +func TestNewScriptClass(t *testing.T) { + tests := []struct { + name string + scriptName string + want *ScriptClass + wantErr error + }{ + { + name: "NewScriptClass - ok", + scriptName: NullDataTy.String(), + want: func() *ScriptClass { + s := NullDataTy + return &s + }(), + }, + { + name: "NewScriptClass - invalid", + scriptName: "foo", + wantErr: ErrUnsupportedScriptType, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := NewScriptClass(tt.scriptName) + if err != nil && !errors.Is(err, tt.wantErr) { + t.Errorf("NewScriptClass() error = %v, wantErr %v", err, tt.wantErr) + return + } + + if !reflect.DeepEqual(got, tt.want) { + t.Errorf("NewScriptClass() got = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/txscript/taproot.go b/txscript/taproot.go new file mode 100644 index 0000000000..2e452f92d7 --- /dev/null +++ b/txscript/taproot.go @@ -0,0 +1,776 @@ +// Copyright (c) 2013-2022 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txscript + +import ( + "bytes" + "fmt" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/chaincfg/chainhash" + "github.com/btcsuite/btcd/wire" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" +) + +// TapscriptLeafVersion represents the various possible versions of a tapscript +// leaf version. Leaf versions are used to define, or introduce new script +// semantics, under the base taproot execution model. +// +// TODO(roasbeef): add validation here as well re proper prefix, etc? +type TapscriptLeafVersion uint8 + +const ( + // BaseLeafVersion is the base tapscript leaf version. The semantics of + // this version are defined in BIP 342. + BaseLeafVersion TapscriptLeafVersion = 0xc0 +) + +const ( + // ControlBlockBaseSize is the base size of a control block. This + // includes the initial byte for the leaf version, and then serialized + // schnorr public key. + ControlBlockBaseSize = 33 + + // ControlBlockNodeSize is the size of a given merkle branch hash in + // the control block. + ControlBlockNodeSize = 32 + + // ControlBlockMaxNodeCount is the max number of nodes that can be + // included in a control block. This value represents a merkle tree of + // depth 2^128. + ControlBlockMaxNodeCount = 128 + + // ControlBlockMaxSize is the max possible size of a control block. + // This simulates revealing a leaf from the largest possible tapscript + // tree. + ControlBlockMaxSize = ControlBlockBaseSize + (ControlBlockNodeSize * + ControlBlockMaxNodeCount) +) + +// VerifyTaprootKeySpend attempts to verify a top-level taproot key spend, +// returning a non-nil error if the passed signature is invalid. If a sigCache +// is passed in, then the sig cache will be consulted to skip full verification +// of a signature that has already been seen. Witness program here should be +// the 32-byte x-only schnorr output public key. +// +// NOTE: The TxSigHashes MUST be passed in and fully populated. +func VerifyTaprootKeySpend(witnessProgram []byte, rawSig []byte, tx *wire.MsgTx, + inputIndex int, prevOuts PrevOutputFetcher, hashCache *TxSigHashes, + sigCache *SigCache) error { + + // First, we'll need to extract the public key from the witness + // program. + rawKey := witnessProgram + + // Extract the annex if it exists, so we can compute the proper proper + // sighash below. + var annex []byte + witness := tx.TxIn[inputIndex].Witness + if isAnnexedWitness(witness) { + annex, _ = extractAnnex(witness) + } + + // Now that we have the public key, we can create a new top-level + // keyspend verifier that'll handle all the sighash and schnorr + // specifics for us. + keySpendVerifier, err := newTaprootSigVerifier( + rawKey, rawSig, tx, inputIndex, prevOuts, sigCache, + hashCache, annex, + ) + if err != nil { + return err + } + + valid := keySpendVerifier.Verify() + if valid { + return nil + } + + return scriptError(ErrTaprootSigInvalid, "") +} + +// ControlBlock houses the structured witness input for a taproot spend. This +// includes the internal taproot key, the leaf version, and finally a nearly +// complete merkle inclusion proof for the main taproot commitment. +// +// TODO(roasbeef): method to serialize control block that commits to even +// y-bit, which pops up everywhere even tho 32 byte keys +type ControlBlock struct { + // InternalKey is the internal public key in the taproot commitment. + InternalKey *btcec.PublicKey + + // OutputKeyYIsOdd denotes if the y coordinate of the output key (the + // key placed in the actual taproot output is odd. + OutputKeyYIsOdd bool + + // LeafVersion is the specified leaf version of the tapscript leaf that + // the InclusionProof below is based off of. + LeafVersion TapscriptLeafVersion + + // InclusionProof is a series of merkle branches that when hashed + // pairwise, starting with the revealed script, will yield the taproot + // commitment root. + InclusionProof []byte +} + +// ToBytes returns the control block in a format suitable for using as part of +// a witness spending a tapscript output. +func (c *ControlBlock) ToBytes() ([]byte, error) { + var b bytes.Buffer + + // The first byte of the control block is the leaf version byte XOR'd with + // the parity of the y coordinate of the public key. + yParity := byte(0) + if c.OutputKeyYIsOdd { + yParity = 1 + } + + // The first byte is a combination of the leaf version, using the lowest + // bit to encode the single bit that denotes if the yo coordinate if odd or + // even. + leafVersionAndParity := byte(c.LeafVersion) | yParity + if err := b.WriteByte(leafVersionAndParity); err != nil { + return nil, err + } + + // Next, we encode the raw 32 byte schnorr public key + if _, err := b.Write(schnorr.SerializePubKey(c.InternalKey)); err != nil { + return nil, err + } + + // Finally, we'll write out the inclusion proof as is, without any length + // prefix. + if _, err := b.Write(c.InclusionProof); err != nil { + return nil, err + } + + return b.Bytes(), nil +} + +// RootHash calculates the root hash of a tapscript given the revealed script. +func (c *ControlBlock) RootHash(revealedScript []byte) []byte { + // We'll start by creating a new tapleaf from the revealed script, + // this'll serve as the initial hash we'll use to incrementally + // reconstruct the merkle root using the control block elements. + merkleAccumulator := NewTapLeaf(c.LeafVersion, revealedScript).TapHash() + + // Now that we have our initial hash, we'll parse the control block one + // node at a time to build up our merkle accumulator into the taproot + // commitment. + // + // The control block is a series of nodes that serve as an inclusion + // proof as we can start hashing with our leaf, with each internal + // branch, until we reach the root. + numNodes := len(c.InclusionProof) / ControlBlockNodeSize + for nodeOffset := 0; nodeOffset < numNodes; nodeOffset++ { + // Extract the new node using our index to serve as a 32-byte + // offset. + leafOffset := 32 * nodeOffset + nextNode := c.InclusionProof[leafOffset : leafOffset+32] + + merkleAccumulator = tapBranchHash(merkleAccumulator[:], nextNode) + } + + return merkleAccumulator[:] +} + +// ParseControlBlock attempts to parse the raw bytes of a control block. An +// error is returned if the control block isn't well formed, or can't be +// parsed. +func ParseControlBlock(ctrlBlock []byte) (*ControlBlock, error) { + // The control block minimally must contain 33 bytes (for the leaf + // version and internal key) along with at least a single value + // comprising the merkle proof. If not, then it's invalid. + switch { + // The control block must minimally have 33 bytes for the internal + // public key and script leaf version. + case len(ctrlBlock) < ControlBlockBaseSize: + str := fmt.Sprintf("min size is %v bytes, control block "+ + "is %v bytes", ControlBlockBaseSize, len(ctrlBlock)) + return nil, scriptError(ErrControlBlockTooSmall, str) + + // The control block can't be larger than a proof for the largest + // possible tapscript merkle tree with 2^128 leaves. + case len(ctrlBlock) > ControlBlockMaxSize: + str := fmt.Sprintf("max size is %v, control block is %v bytes", + ControlBlockMaxSize, len(ctrlBlock)) + return nil, scriptError(ErrControlBlockTooLarge, str) + + // Ignoring the fixed sized portion, we expect the total number of + // remaining bytes to be a multiple of the node size, which is 32 + // bytes. + case (len(ctrlBlock)-ControlBlockBaseSize)%ControlBlockNodeSize != 0: + str := fmt.Sprintf("control block proof is not a multiple "+ + "of 32: %v", len(ctrlBlock)-ControlBlockBaseSize) + return nil, scriptError(ErrControlBlockInvalidLength, str) + } + + // With the basic sanity checking complete, we can now parse the + // control block. + leafVersion := TapscriptLeafVersion(ctrlBlock[0] & TaprootLeafMask) + + // Extract the parity of the y coordinate of the internal key. + var yIsOdd bool + if ctrlBlock[0]&0x01 == 0x01 { + yIsOdd = true + } + + // Next, we'll parse the public key, which is the 32 bytes following + // the leaf version. + rawKey := ctrlBlock[1:33] + pubKey, err := schnorr.ParsePubKey(rawKey) + if err != nil { + return nil, err + } + + // The rest of the bytes are the control block itself, which encodes a + // merkle proof of inclusion. + proofBytes := ctrlBlock[33:] + + return &ControlBlock{ + InternalKey: pubKey, + OutputKeyYIsOdd: yIsOdd, + LeafVersion: leafVersion, + InclusionProof: proofBytes, + }, nil +} + +// ComputeTaprootOutputKey calculates a top-level taproot output key given an +// internal key, and tapscript merkle root. The final key is derived as: +// taprootKey = internalKey + (h_tapTweak(internalKey || merkleRoot)*G). +func ComputeTaprootOutputKey(pubKey *btcec.PublicKey, + scriptRoot []byte) *btcec.PublicKey { + + // This routine only operates on x-only public keys where the public + // key always has an even y coordinate, so we'll re-parse it as such. + internalKey, _ := schnorr.ParsePubKey(schnorr.SerializePubKey(pubKey)) + + // First, we'll compute the tap tweak hash that commits to the internal + // key and the merkle script root. + tapTweakHash := chainhash.TaggedHash( + chainhash.TagTapTweak, schnorr.SerializePubKey(internalKey), + scriptRoot, + ) + + // With the tap tweek computed, we'll need to convert the merkle root + // into something in the domain we can manipulate: a scalar value mod + // N. + var tweakScalar btcec.ModNScalar + tweakScalar.SetBytes((*[32]byte)(tapTweakHash)) + + // Next, we'll need to convert the internal key to jacobian coordinates + // as the routines we need only operate on this type. + var internalPoint btcec.JacobianPoint + internalKey.AsJacobian(&internalPoint) + + // With our intermediate data obtained, we'll now compute: + // + // taprootKey = internalPoint + (tapTweak*G). + var tPoint, taprootKey btcec.JacobianPoint + btcec.ScalarBaseMultNonConst(&tweakScalar, &tPoint) + btcec.AddNonConst(&internalPoint, &tPoint, &taprootKey) + + // Finally, we'll convert the key back to affine coordinates so we can + // return the format of public key we usually use. + taprootKey.ToAffine() + + return btcec.NewPublicKey(&taprootKey.X, &taprootKey.Y) +} + +// ComputeTaprootKeyNoScript calculates the top-level taproot output key given +// an internal key, and a desire that the only way an output can be spent is +// with the keyspend path. This is useful for normal wallet operations that +// don't need any other additional spending conditions. +func ComputeTaprootKeyNoScript(internalKey *btcec.PublicKey) *btcec.PublicKey { + // We'll compute a custom tap tweak hash that just commits to the key, + // rather than an actual root hash. + fakeScriptroot := []byte{} + + return ComputeTaprootOutputKey(internalKey, fakeScriptroot) +} + +// TweakTaprootPrivKey applies the same operation as ComputeTaprootOutputKey, +// but on the private key instead. The final key is derived as: privKey + +// h_tapTweak(internalKey || merkleRoot) % N, where N is the order of the +// secp256k1 curve, and merkleRoot is the root hash of the tapscript tree. +func TweakTaprootPrivKey(privKey *btcec.PrivateKey, + scriptRoot []byte) *btcec.PrivateKey { + + // If the corresponding public key has an odd y coordinate, then we'll + // negate the private key as specified in BIP 341. + privKeyScalar := &privKey.Key + pubKeyBytes := privKey.PubKey().SerializeCompressed() + if pubKeyBytes[0] == secp.PubKeyFormatCompressedOdd { + privKeyScalar.Negate() + } + + // Next, we'll compute the tap tweak hash that commits to the internal + // key and the merkle script root. We'll snip off the extra parity byte + // from the compressed serialization and use that directly. + schnorrKeyBytes := pubKeyBytes[1:] + tapTweakHash := chainhash.TaggedHash( + chainhash.TagTapTweak, schnorrKeyBytes, scriptRoot, + ) + + // Map the private key to a ModNScalar which is needed to perform + // operation mod the curve order. + var tweakScalar btcec.ModNScalar + tweakScalar.SetBytes((*[32]byte)(tapTweakHash)) + + // Now that we have the private key in its may negated form, we'll add + // the script root as a tweak. As we're using a ModNScalar all + // operations are already normalized mod the curve order. + privTweak := privKeyScalar.Add(&tweakScalar) + + return btcec.PrivKeyFromScalar(privTweak) +} + +// VerifyTaprootLeafCommitment attempts to verify a taproot commitment of the +// revealed script within the taprootWitnessProgram (a schnorr public key) +// given the required information included in the control block. An error is +// returned if the reconstructed taproot commitment (a function of the merkle +// root and the internal key) doesn't match the passed witness program. +func VerifyTaprootLeafCommitment(controlBlock *ControlBlock, + taprootWitnessProgram []byte, revealedScript []byte) error { + + // First, we'll calculate the root hash from the given proof and + // revealed script. + rootHash := controlBlock.RootHash(revealedScript) + + // Next, we'll construct the final commitment (creating the external or + // taproot output key) as a function of this commitment and the + // included internal key: taprootKey = internalKey + (tPoint*G). + taprootKey := ComputeTaprootOutputKey( + controlBlock.InternalKey, rootHash, + ) + + // If we convert the taproot key to a witness program (we just need to + // serialize the public key), then it should exactly match the witness + // program passed in. + expectedWitnessProgram := schnorr.SerializePubKey(taprootKey) + if !bytes.Equal(expectedWitnessProgram, taprootWitnessProgram) { + + return scriptError(ErrTaprootMerkleProofInvalid, "") + } + + // Finally, we'll verify that the parity of the y coordinate of the + // public key we've derived matches the control block. + derivedYIsOdd := (taprootKey.SerializeCompressed()[0] == + secp.PubKeyFormatCompressedOdd) + if controlBlock.OutputKeyYIsOdd != derivedYIsOdd { + str := fmt.Sprintf("control block y is odd: %v, derived "+ + "parity is odd: %v", controlBlock.OutputKeyYIsOdd, + derivedYIsOdd) + return scriptError(ErrTaprootOutputKeyParityMismatch, str) + } + + // Otherwise, if we reach here, the commitment opening is valid and + // execution can continue. + return nil +} + +// TapNode represents an abstract node in a tapscript merkle tree. A node is +// either a branch or a leaf. +type TapNode interface { + // TapHash returns the hash of the node. This will either be a tagged + // hash derived from a branch, or a leaf. + TapHash() chainhash.Hash + + // Left returns the left node. If this is a leaf node, this may be nil. + Left() TapNode + + // Right returns the right node. If this is a leaf node, this may be + // nil. + Right() TapNode +} + +// TapLeaf represents a leaf in a tapscript tree. A leaf has two components: +// the leaf version, and the script associated with that leaf version. +type TapLeaf struct { + // LeafVersion is the leaf version of this leaf. + LeafVersion TapscriptLeafVersion + + // Script is the script to be validated based on the specified leaf + // version. + Script []byte +} + +// Left rights the left node for this leaf. As this is a leaf the left node is +// nil. +func (t TapLeaf) Left() TapNode { + return nil +} + +// Right rights the right node for this leaf. As this is a leaf the right node +// is nil. +func (t TapLeaf) Right() TapNode { + return nil +} + +// NewBaseTapLeaf returns a new TapLeaf for the specified script, using the +// current base leaf version (BIP 342). +func NewBaseTapLeaf(script []byte) TapLeaf { + return TapLeaf{ + Script: script, + LeafVersion: BaseLeafVersion, + } +} + +// NewTapLeaf returns a new TapLeaf with the given leaf version and script to +// be committed to. +func NewTapLeaf(leafVersion TapscriptLeafVersion, script []byte) TapLeaf { + return TapLeaf{ + LeafVersion: leafVersion, + Script: script, + } +} + +// TapHash returns the hash digest of the target taproot script leaf. The +// digest is computed as: h_tapleaf(leafVersion || compactSizeof(script) || +// script). +func (t TapLeaf) TapHash() chainhash.Hash { + // TODO(roasbeef): cache these and the branch due to the recursive + // call, so memoize + + // The leaf encoding is: leafVersion || compactSizeof(script) || + // script, where compactSizeof returns the compact size needed to + // encode the value. + var leafEncoding bytes.Buffer + + _ = leafEncoding.WriteByte(byte(t.LeafVersion)) + _ = wire.WriteVarBytes(&leafEncoding, 0, t.Script) + + return *chainhash.TaggedHash(chainhash.TagTapLeaf, leafEncoding.Bytes()) +} + +// TapBranch represents an internal branch in the tapscript tree. The left or +// right nodes may either be another branch, leaves, or a combination of both. +type TapBranch struct { + // leftNode is the left node, this cannot be nil. + leftNode TapNode + + // rightNode is the right node, this cannot be nil. + rightNode TapNode +} + +// NewTapBranch creates a new internal branch from a left and right node. +func NewTapBranch(l, r TapNode) TapBranch { + + return TapBranch{ + leftNode: l, + rightNode: r, + } +} + +// Left is the left node of the branch, this might be a leaf or another +// branch. +func (t TapBranch) Left() TapNode { + return t.leftNode +} + +// Right is the right node of a branch, this might be a leaf or another branch. +func (t TapBranch) Right() TapNode { + return t.rightNode +} + +// TapHash returns the hash digest of the taproot internal branch given a left +// and right node. The final hash digest is: h_tapbranch(leftNode || +// rightNode), where leftNode is the lexicographically smaller of the two nodes. +func (t TapBranch) TapHash() chainhash.Hash { + leftHash := t.leftNode.TapHash() + rightHash := t.rightNode.TapHash() + return tapBranchHash(leftHash[:], rightHash[:]) +} + +// tapBranchHash takes the raw tap hashes of the right and left nodes and +// hashes them into a branch. See The TapBranch method for the specifics. +func tapBranchHash(l, r []byte) chainhash.Hash { + if bytes.Compare(l[:], r[:]) > 0 { + l, r = r, l + } + + return *chainhash.TaggedHash( + chainhash.TagTapBranch, l[:], r[:], + ) +} + +// TapscriptProof is a proof of inclusion that a given leaf (a script and leaf +// version) is included within a top-level taproot output commitment. +type TapscriptProof struct { + // TapLeaf is the leaf that we want to prove inclusion for. + TapLeaf + + // RootNode is the root of the tapscript tree, this will be used to + // compute what the final output key looks like. + RootNode TapNode + + // InclusionProof is the tail end of the control block that contains + // the series of hashes (the sibling hashes up the tree), that when + // hashed together allow us to re-derive the top level taproot output. + InclusionProof []byte +} + +// ToControlBlock maps the tapscript proof into a fully valid control block +// that can be used as a witness item for a tapscript spend. +func (t *TapscriptProof) ToControlBlock(internalKey *btcec.PublicKey) ControlBlock { + // Compute the total level output commitment based on the populated + // root node. + rootHash := t.RootNode.TapHash() + taprootKey := ComputeTaprootOutputKey( + internalKey, rootHash[:], + ) + + // With the commitment computed we can obtain the bit that denotes if + // the resulting key has an odd y coordinate or not. + var outputKeyYIsOdd bool + if taprootKey.SerializeCompressed()[0] == + secp.PubKeyFormatCompressedOdd { + + outputKeyYIsOdd = true + } + + return ControlBlock{ + InternalKey: internalKey, + OutputKeyYIsOdd: outputKeyYIsOdd, + LeafVersion: t.TapLeaf.LeafVersion, + InclusionProof: t.InclusionProof, + } +} + +// IndexedTapScriptTree reprints a fully contracted tapscript tree. The +// RootNode can be used to traverse down the full tree. In addition, complete +// inclusion proofs for each leaf are included as well, with an index into the +// slice of proof based on the tap leaf hash of a given leaf. +type IndexedTapScriptTree struct { + // RootNode is the root of the tapscript tree. RootNode.TapHash() can + // be used to extract the hash needed to derive the taptweak committed + // to in the taproot output. + RootNode TapNode + + // LeafMerkleProofs is a slice that houses the series of merkle + // inclusion proofs for each leaf based on the input order of the + // leaves. + LeafMerkleProofs []TapscriptProof + + // LeafProofIndex maps the TapHash() of a given leaf node to the index + // within the LeafMerkleProofs array above. This can be used to + // retrieve the inclusion proof for a given script when constructing + // the witness stack and control block for spending a tapscript path. + LeafProofIndex map[chainhash.Hash]int +} + +// NewIndexedTapScriptTree creates a new empty tapscript tree that has enough +// space to hold information for the specified amount of leaves. +func NewIndexedTapScriptTree(numLeaves int) *IndexedTapScriptTree { + return &IndexedTapScriptTree{ + LeafMerkleProofs: make([]TapscriptProof, numLeaves), + LeafProofIndex: make(map[chainhash.Hash]int, numLeaves), + } +} + +// hashTapNodes takes a left and right now, and returns the left and right tap +// hashes, along with the new combined node. If both nodes are nil, nil +// pointers are returned. If the right now is nil, then the left node is passed +// in, which effectively will "lift" the node up in the tree as long as it +// doesn't have any siblings. +func hashTapNodes(left, right TapNode) (*chainhash.Hash, *chainhash.Hash, TapNode) { + switch { + // If there's no left child, then this is a "nil" portion of the array + // tree, so well thread thru nil. + case left == nil: + return nil, nil, nil + + // If there's no right child, then this is a single node that'll be + // passed all the way up the tree as it has no children. + case right == nil: + return nil, nil, left + } + + // The result of hashing two nodes will always be a branch, so we start + // with that. + leftHash := left.TapHash() + rightHash := right.TapHash() + + return &leftHash, &rightHash, NewTapBranch(left, right) +} + +// leafDescendants is a recursive algorithm that returns all the leaf nodes +// that are a decedents of this tree. This is used to collect the series of +// nodes we need to extend the inclusion proof of each time we go up in the +// tree. +func leafDescendants(node TapNode) []TapNode { + // A leaf node has no decedents, so we just return it directly. + if node.Left() == nil && node.Right() == nil { + return []TapNode{node} + } + + // Otherwise, get the descendants of the left and right sub-trees to + // return. + leftLeaves := leafDescendants(node.Left()) + rightLeaves := leafDescendants(node.Right()) + + return append(leftLeaves, rightLeaves...) +} + +// AssembleTaprootScriptTree constructs a new fully indexed tapscript tree +// given a series of leaf nodes. A combination of a recursive data structure, +// and an array-based representation are used to both generate the tree and +// also accumulate all the necessary inclusion proofs in the same path. See the +// comment of blockchain.BuildMerkleTreeStore for further details. +func AssembleTaprootScriptTree(leaves ...TapLeaf) *IndexedTapScriptTree { + // If there's only a single leaf, then that becomes our root. + if len(leaves) == 1 { + // A lone leaf has no additional inclusion proof, as a verifier + // will just hash the leaf as the sole branch. + leaf := leaves[0] + return &IndexedTapScriptTree{ + RootNode: leaf, + LeafProofIndex: map[chainhash.Hash]int{ + leaf.TapHash(): 0, + }, + LeafMerkleProofs: []TapscriptProof{ + { + TapLeaf: leaf, + RootNode: leaf, + InclusionProof: nil, + }, + }, + } + } + + // We'll start out by populating the leaf index which maps a leave's + // taphash to its index within the tree. + scriptTree := NewIndexedTapScriptTree(len(leaves)) + for i, leaf := range leaves { + leafHash := leaf.TapHash() + scriptTree.LeafProofIndex[leafHash] = i + } + + var branches []TapBranch + for i := 0; i < len(leaves); i += 2 { + // If there's only a single leaf left, then we'll merge this + // with the last branch we have. + if i == len(leaves)-1 { + branchToMerge := branches[len(branches)-1] + leaf := leaves[i] + newBranch := NewTapBranch(branchToMerge, leaf) + + branches[len(branches)-1] = newBranch + + // The leaf includes the existing branch within its + // inclusion proof. + branchHash := branchToMerge.TapHash() + + scriptTree.LeafMerkleProofs[i].TapLeaf = leaf + scriptTree.LeafMerkleProofs[i].InclusionProof = append( + scriptTree.LeafMerkleProofs[i].InclusionProof, + branchHash[:]..., + ) + + // We'll also add this right hash to the inclusion of + // the left and right nodes of the branch. + lastLeafHash := leaf.TapHash() + + leftLeafHash := branchToMerge.Left().TapHash() + leftLeafIndex := scriptTree.LeafProofIndex[leftLeafHash] + scriptTree.LeafMerkleProofs[leftLeafIndex].InclusionProof = append( + scriptTree.LeafMerkleProofs[leftLeafIndex].InclusionProof, + lastLeafHash[:]..., + ) + + rightLeafHash := branchToMerge.Right().TapHash() + rightLeafIndex := scriptTree.LeafProofIndex[rightLeafHash] + scriptTree.LeafMerkleProofs[rightLeafIndex].InclusionProof = append( + scriptTree.LeafMerkleProofs[rightLeafIndex].InclusionProof, + lastLeafHash[:]..., + ) + + continue + } + + // While we still have leaves left, we'll combine two of them + // into a new branch node. + left, right := leaves[i], leaves[i+1] + nextBranch := NewTapBranch(left, right) + branches = append(branches, nextBranch) + + // The left node will use the right node as part of its + // inclusion proof, and vice versa. + leftHash := left.TapHash() + rightHash := right.TapHash() + + scriptTree.LeafMerkleProofs[i].TapLeaf = left + scriptTree.LeafMerkleProofs[i].InclusionProof = append( + scriptTree.LeafMerkleProofs[i].InclusionProof, + rightHash[:]..., + ) + + scriptTree.LeafMerkleProofs[i+1].TapLeaf = right + scriptTree.LeafMerkleProofs[i+1].InclusionProof = append( + scriptTree.LeafMerkleProofs[i+1].InclusionProof, + leftHash[:]..., + ) + } + + // In this second phase, we'll merge all the leaf branches we have one + // by one until we have our final root. + var rootNode TapNode + for len(branches) != 0 { + // When we only have a single branch left, then that becomes + // our root. + if len(branches) == 1 { + rootNode = branches[0] + break + } + + left, right := branches[0], branches[1] + + newBranch := NewTapBranch(left, right) + + branches = branches[2:] + + branches = append(branches, newBranch) + + // Accumulate the sibling hash of this new branch for all the + // leaves that are its children. + leftLeafDescendants := leafDescendants(left) + rightLeafDescendants := leafDescendants(right) + + leftHash, rightHash := left.TapHash(), right.TapHash() + + // For each left hash that's a leaf descendants, well add the + // right sibling as that sibling is needed to construct the new + // internal branch we just created. We also do the same for the + // siblings of the right node. + for _, leftLeaf := range leftLeafDescendants { + leafHash := leftLeaf.TapHash() + leafIndex := scriptTree.LeafProofIndex[leafHash] + + scriptTree.LeafMerkleProofs[leafIndex].InclusionProof = append( + scriptTree.LeafMerkleProofs[leafIndex].InclusionProof, + rightHash[:]..., + ) + } + for _, rightLeaf := range rightLeafDescendants { + leafHash := rightLeaf.TapHash() + leafIndex := scriptTree.LeafProofIndex[leafHash] + + scriptTree.LeafMerkleProofs[leafIndex].InclusionProof = append( + scriptTree.LeafMerkleProofs[leafIndex].InclusionProof, + leftHash[:]..., + ) + } + } + + // Populate the top level root node pointer, as well as the pointer in + // each proof. + scriptTree.RootNode = rootNode + for i := range scriptTree.LeafMerkleProofs { + scriptTree.LeafMerkleProofs[i].RootNode = rootNode + } + + return scriptTree +} diff --git a/txscript/taproot_test.go b/txscript/taproot_test.go new file mode 100644 index 0000000000..178405b526 --- /dev/null +++ b/txscript/taproot_test.go @@ -0,0 +1,363 @@ +// Copyright (c) 2013-2022 The btcsuite developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txscript + +import ( + "bytes" + "encoding/hex" + "fmt" + prand "math/rand" + "testing" + "testing/quick" + + "github.com/btcsuite/btcd/btcec/v2" + "github.com/btcsuite/btcd/btcec/v2/schnorr" + "github.com/btcsuite/btcd/btcutil" + "github.com/btcsuite/btcd/btcutil/hdkeychain" + "github.com/btcsuite/btcd/chaincfg" + secp "github.com/decred/dcrd/dcrec/secp256k1/v4" + "github.com/stretchr/testify/require" +) + +var ( + testPubBytes, _ = hex.DecodeString("F9308A019258C31049344F85F89D5229B" + + "531C845836F99B08601F113BCE036F9") + + // rootKey is the test root key defined in the test vectors: + // https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki + rootKey, _ = hdkeychain.NewKeyFromString( + "xprv9s21ZrQH143K3GJpoapnV8SFfukcVBSfeCficPSGfubmSFDxo1kuHnLi" + + "sriDvSnRRuL2Qrg5ggqHKNVpxR86QEC8w35uxmGoggxtQTPvfUu", + ) + + // accountPath is the base path for BIP86 (m/86'/0'/0'). + accountPath = []uint32{ + 86 + hdkeychain.HardenedKeyStart, hdkeychain.HardenedKeyStart, + hdkeychain.HardenedKeyStart, + } + expectedExternalAddresses = []string{ + "bc1p5cyxnuxmeuwuvkwfem96lqzszd02n6xdcjrs20cac6yqjjwudpxqkedrcr", + "bc1p4qhjn9zdvkux4e44uhx8tc55attvtyu358kutcqkudyccelu0was9fqzwh", + } + expectedInternalAddresses = []string{ + "bc1p3qkhfews2uk44qtvauqyr2ttdsw7svhkl9nkm9s9c3x4ax5h60wqwruhk7", + } +) + +// TestControlBlockParsing tests that we're able to generate and parse a valid +// control block. +func TestControlBlockParsing(t *testing.T) { + t.Parallel() + + var testCases = []struct { + controlBlockGen func() []byte + valid bool + }{ + // An invalid control block, it's only 5 bytes and needs to be + // at least 33 bytes. + { + controlBlockGen: func() []byte { + return bytes.Repeat([]byte{0x00}, 5) + }, + valid: false, + }, + + // An invalid control block, it's greater than the largest + // accepted control block. + { + controlBlockGen: func() []byte { + return bytes.Repeat([]byte{0x00}, ControlBlockMaxSize+1) + }, + valid: false, + }, + + // An invalid control block, it isn't a multiple of 32 bytes + // enough though it has a valid starting byte length. + { + controlBlockGen: func() []byte { + return bytes.Repeat([]byte{0x00}, ControlBlockBaseSize+34) + }, + valid: false, + }, + + // A valid control block, of the largest possible size. + { + controlBlockGen: func() []byte { + privKey, _ := btcec.NewPrivateKey() + pubKey := privKey.PubKey() + + yIsOdd := (pubKey.SerializeCompressed()[0] == + secp.PubKeyFormatCompressedOdd) + + ctrl := ControlBlock{ + InternalKey: pubKey, + OutputKeyYIsOdd: yIsOdd, + LeafVersion: BaseLeafVersion, + InclusionProof: bytes.Repeat( + []byte{0x00}, + ControlBlockMaxSize-ControlBlockBaseSize, + ), + } + + ctrlBytes, _ := ctrl.ToBytes() + return ctrlBytes + }, + valid: true, + }, + + // A valid control block, only has a single element in the + // proof as the tree only has a single element. + { + controlBlockGen: func() []byte { + privKey, _ := btcec.NewPrivateKey() + pubKey := privKey.PubKey() + + yIsOdd := (pubKey.SerializeCompressed()[0] == + secp.PubKeyFormatCompressedOdd) + + ctrl := ControlBlock{ + InternalKey: pubKey, + OutputKeyYIsOdd: yIsOdd, + LeafVersion: BaseLeafVersion, + InclusionProof: bytes.Repeat( + []byte{0x00}, ControlBlockNodeSize, + ), + } + + ctrlBytes, _ := ctrl.ToBytes() + return ctrlBytes + }, + valid: true, + }, + } + for i, testCase := range testCases { + ctrlBlockBytes := testCase.controlBlockGen() + + ctrlBlock, err := ParseControlBlock(ctrlBlockBytes) + switch { + case testCase.valid && err != nil: + t.Fatalf("#%v: unable to parse valid control block: %v", i, err) + + case !testCase.valid && err == nil: + t.Fatalf("#%v: invalid control block should have failed: %v", i, err) + } + + if !testCase.valid { + continue + } + + // If we serialize the control block, we should get the exact same + // set of bytes as the input. + ctrlBytes, err := ctrlBlock.ToBytes() + if err != nil { + t.Fatalf("#%v: unable to encode bytes: %v", i, err) + } + if !bytes.Equal(ctrlBytes, ctrlBlockBytes) { + t.Fatalf("#%v: encoding mismatch: expected %x, "+ + "got %x", i, ctrlBlockBytes, ctrlBytes) + } + } +} + +// TestTaprootScriptSpendTweak tests that for any 32-byte hypothetical script +// root, the resulting tweaked public key is the same as tweaking the private +// key, then generating a public key from that. This test a quickcheck test to +// assert the following invariant: +// +// * taproot_tweak_pubkey(pubkey_gen(seckey), h)[1] == +// pubkey_gen(taproot_tweak_seckey(seckey, h)) +func TestTaprootScriptSpendTweak(t *testing.T) { + t.Parallel() + + // Assert that if we use this x value as the hash of the script root, + // then if we generate a tweaked public key, it's the same key as if we + // used that key to generate the tweaked + // private key, and then generated the public key from that. + f := func(x [32]byte) bool { + privKey, err := btcec.NewPrivateKey() + if err != nil { + return false + } + + // Generate the tweaked public key using the x value as the + // script root. + tweakedPub := ComputeTaprootOutputKey(privKey.PubKey(), x[:]) + + // Now we'll generate the corresponding tweaked private key. + tweakedPriv := TweakTaprootPrivKey(privKey, x[:]) + + // The public key for this private key should be the same as + // the tweaked public key we generate above. + return tweakedPub.IsEqual(tweakedPriv.PubKey()) && + bytes.Equal( + schnorr.SerializePubKey(tweakedPub), + schnorr.SerializePubKey(tweakedPriv.PubKey()), + ) + } + + if err := quick.Check(f, nil); err != nil { + t.Fatalf("tweaked public/private key mapping is "+ + "incorrect: %v", err) + } + +} + +// TestTaprootConstructKeyPath tests the key spend only taproot construction. +func TestTaprootConstructKeyPath(t *testing.T) { + checkPath := func(branch uint32, expectedAddresses []string) { + path, err := derivePath(rootKey, append(accountPath, branch)) + require.NoError(t, err) + + for index, expectedAddr := range expectedAddresses { + extendedKey, err := path.Derive(uint32(index)) + require.NoError(t, err) + + pubKey, err := extendedKey.ECPubKey() + require.NoError(t, err) + + tapKey := ComputeTaprootKeyNoScript(pubKey) + + addr, err := btcutil.NewAddressTaproot( + schnorr.SerializePubKey(tapKey), + &chaincfg.MainNetParams, + ) + require.NoError(t, err) + + require.Equal(t, expectedAddr, addr.String()) + } + } + checkPath(0, expectedExternalAddresses) + checkPath(1, expectedInternalAddresses) +} + +func derivePath(key *hdkeychain.ExtendedKey, path []uint32) ( + *hdkeychain.ExtendedKey, error) { + + var ( + currentKey = key + err error + ) + for _, pathPart := range path { + currentKey, err = currentKey.Derive(pathPart) + if err != nil { + return nil, err + } + } + return currentKey, nil +} + +// TestTapscriptCommitmentVerification that given a valid control block, proof +// we're able to both generate and validate validate script tree leaf inclusion +// proofs. +func TestTapscriptCommitmentVerification(t *testing.T) { + t.Parallel() + + // make from 0 to 1 leaf + // ensure verifies properly + testCases := []struct { + numLeaves int + + valid bool + + treeMutateFunc func(*IndexedTapScriptTree) + + ctrlBlockMutateFunc func(*ControlBlock) + }{ + // A valid merkle proof of a single leaf. + { + numLeaves: 1, + valid: true, + }, + + // A valid series of merkle proofs with an odd number of leaves. + { + numLeaves: 3, + valid: true, + }, + + // A valid series of merkle proofs with an even number of leaves. + { + numLeaves: 4, + valid: true, + }, + + // An invalid merkle proof, we modify the last byte of one of + // the leaves. + { + numLeaves: 4, + valid: false, + treeMutateFunc: func(t *IndexedTapScriptTree) { + for _, leafProof := range t.LeafMerkleProofs { + leafProof.InclusionProof[0] ^= 1 + } + }, + }, + + { + // An invalid series of proofs, we modify the control + // block to not match the parity of the final output + // key commitment. + numLeaves: 2, + valid: false, + ctrlBlockMutateFunc: func(c *ControlBlock) { + c.OutputKeyYIsOdd = !c.OutputKeyYIsOdd + }, + }, + } + for _, testCase := range testCases { + testName := fmt.Sprintf("num_leaves=%v, valid=%v, treeMutate=%v, "+ + "ctrlBlockMutate=%v", testCase.numLeaves, testCase.valid, + testCase.treeMutateFunc == nil, testCase.ctrlBlockMutateFunc == nil) + + t.Run(testName, func(t *testing.T) { + tapScriptLeaves := make([]TapLeaf, testCase.numLeaves) + for i := 0; i < len(tapScriptLeaves); i++ { + numLeafBytes := prand.Intn(1000) + scriptBytes := make([]byte, numLeafBytes) + if _, err := prand.Read(scriptBytes[:]); err != nil { + t.Fatalf("unable to read rand bytes: %v", err) + } + tapScriptLeaves[i] = NewBaseTapLeaf(scriptBytes) + } + + scriptTree := AssembleTaprootScriptTree(tapScriptLeaves...) + + if testCase.treeMutateFunc != nil { + testCase.treeMutateFunc(scriptTree) + } + + internalKey, _ := btcec.NewPrivateKey() + + rootHash := scriptTree.RootNode.TapHash() + outputKey := ComputeTaprootOutputKey( + internalKey.PubKey(), rootHash[:], + ) + + for _, leafProof := range scriptTree.LeafMerkleProofs { + ctrlBlock := leafProof.ToControlBlock( + internalKey.PubKey(), + ) + + if testCase.ctrlBlockMutateFunc != nil { + testCase.ctrlBlockMutateFunc(&ctrlBlock) + } + + err := VerifyTaprootLeafCommitment( + &ctrlBlock, schnorr.SerializePubKey(outputKey), + leafProof.TapLeaf.Script, + ) + valid := err == nil + + if valid != testCase.valid { + t.Fatalf("test case mismatch: expected "+ + "valid=%v, got valid=%v", testCase.valid, + valid) + } + } + + // TODO(roasbeef): index correctness + }) + } +} diff --git a/txscript/tokenizer.go b/txscript/tokenizer.go new file mode 100644 index 0000000000..4c7c883a27 --- /dev/null +++ b/txscript/tokenizer.go @@ -0,0 +1,209 @@ +// Copyright (c) 2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txscript + +import ( + "encoding/binary" + "fmt" +) + +// opcodeArrayRef is used to break initialization cycles. +var opcodeArrayRef *[256]opcode + +func init() { + opcodeArrayRef = &opcodeArray +} + +// ScriptTokenizer provides a facility for easily and efficiently tokenizing +// transaction scripts without creating allocations. Each successive opcode is +// parsed with the Next function, which returns false when iteration is +// complete, either due to successfully tokenizing the entire script or +// encountering a parse error. In the case of failure, the Err function may be +// used to obtain the specific parse error. +// +// Upon successfully parsing an opcode, the opcode and data associated with it +// may be obtained via the Opcode and Data functions, respectively. +// +// The ByteIndex function may be used to obtain the tokenizer's current offset +// into the raw script. +type ScriptTokenizer struct { + script []byte + version uint16 + offset int32 + opcodePos int32 + op *opcode + data []byte + err error +} + +// Done returns true when either all opcodes have been exhausted or a parse +// failure was encountered and therefore the state has an associated error. +func (t *ScriptTokenizer) Done() bool { + return t.err != nil || t.offset >= int32(len(t.script)) +} + +// Next attempts to parse the next opcode and returns whether or not it was +// successful. It will not be successful if invoked when already at the end of +// the script, a parse failure is encountered, or an associated error already +// exists due to a previous parse failure. +// +// In the case of a true return, the parsed opcode and data can be obtained with +// the associated functions and the offset into the script will either point to +// the next opcode or the end of the script if the final opcode was parsed. +// +// In the case of a false return, the parsed opcode and data will be the last +// successfully parsed values (if any) and the offset into the script will +// either point to the failing opcode or the end of the script if the function +// was invoked when already at the end of the script. +// +// Invoking this function when already at the end of the script is not +// considered an error and will simply return false. +func (t *ScriptTokenizer) Next() bool { + if t.Done() { + return false + } + + // Increment the op code position each time we attempt to parse the + // next op code. Note that since the starting value is -1 (no op codes + // parsed), by incrementing here, we start at 0, then 1, and so on for + // the other op codes. + t.opcodePos++ + + op := &opcodeArrayRef[t.script[t.offset]] + switch { + // No additional data. Note that some of the opcodes, notably OP_1NEGATE, + // OP_0, and OP_[1-16] represent the data themselves. + case op.length == 1: + t.offset++ + t.op = op + t.data = nil + return true + + // Data pushes of specific lengths -- OP_DATA_[1-75]. + case op.length > 1: + script := t.script[t.offset:] + if len(script) < op.length { + str := fmt.Sprintf("opcode %s requires %d bytes, but script only "+ + "has %d remaining", op.name, op.length, len(script)) + t.err = scriptError(ErrMalformedPush, str) + return false + } + + // Move the offset forward and set the opcode and data accordingly. + t.offset += int32(op.length) + t.op = op + t.data = script[1:op.length] + return true + + // Data pushes with parsed lengths -- OP_PUSHDATA{1,2,4}. + case op.length < 0: + script := t.script[t.offset+1:] + if len(script) < -op.length { + str := fmt.Sprintf("opcode %s requires %d bytes, but script only "+ + "has %d remaining", op.name, -op.length, len(script)) + t.err = scriptError(ErrMalformedPush, str) + return false + } + + // Next -length bytes are little endian length of data. + var dataLen int32 + switch op.length { + case -1: + dataLen = int32(script[0]) + case -2: + dataLen = int32(binary.LittleEndian.Uint16(script[:2])) + case -4: + dataLen = int32(binary.LittleEndian.Uint32(script[:4])) + default: + // In practice it should be impossible to hit this + // check as each op code is predefined, and only uses + // the specified lengths. + str := fmt.Sprintf("invalid opcode length %d", op.length) + t.err = scriptError(ErrMalformedPush, str) + return false + } + + // Move to the beginning of the data. + script = script[-op.length:] + + // Disallow entries that do not fit script or were sign extended. + if dataLen > int32(len(script)) || dataLen < 0 { + str := fmt.Sprintf("opcode %s pushes %d bytes, but script only "+ + "has %d remaining", op.name, dataLen, len(script)) + t.err = scriptError(ErrMalformedPush, str) + return false + } + + // Move the offset forward and set the opcode and data accordingly. + t.offset += 1 + int32(-op.length) + dataLen + t.op = op + t.data = script[:dataLen] + return true + } + + // The only remaining case is an opcode with length zero which is + // impossible. + panic("unreachable") +} + +// Script returns the full script associated with the tokenizer. +func (t *ScriptTokenizer) Script() []byte { + return t.script +} + +// ByteIndex returns the current offset into the full script that will be parsed +// next and therefore also implies everything before it has already been parsed. +func (t *ScriptTokenizer) ByteIndex() int32 { + return t.offset +} + +// OpcodePosition returns the current op code counter. Unlike the ByteIndex +// above (referred to as the program counter or pc at times), this is +// incremented with each node op code, and isn't incremented more than once for +// push datas. +// +// NOTE: If no op codes have been parsed, this returns -1. +func (t *ScriptTokenizer) OpcodePosition() int32 { + return t.opcodePos +} + +// Opcode returns the current opcode associated with the tokenizer. +func (t *ScriptTokenizer) Opcode() byte { + return t.op.value +} + +// Data returns the data associated with the most recently successfully parsed +// opcode. +func (t *ScriptTokenizer) Data() []byte { + return t.data +} + +// Err returns any errors currently associated with the tokenizer. This will +// only be non-nil in the case a parsing error was encountered. +func (t *ScriptTokenizer) Err() error { + return t.err +} + +// MakeScriptTokenizer returns a new instance of a script tokenizer. Passing +// an unsupported script version will result in the returned tokenizer +// immediately having an err set accordingly. +// +// See the docs for ScriptTokenizer for more details. +func MakeScriptTokenizer(scriptVersion uint16, script []byte) ScriptTokenizer { + // Only version 0 scripts are currently supported. + var err error + if scriptVersion != 0 { + str := fmt.Sprintf("script version %d is not supported", scriptVersion) + err = scriptError(ErrUnsupportedScriptVersion, str) + + } + return ScriptTokenizer{ + version: scriptVersion, + script: script, + err: err, + // We use a value of negative 1 here so the first op code has a value of 0. + opcodePos: -1, + } +} diff --git a/txscript/tokenizer_test.go b/txscript/tokenizer_test.go new file mode 100644 index 0000000000..fd008bfc54 --- /dev/null +++ b/txscript/tokenizer_test.go @@ -0,0 +1,259 @@ +// Copyright (c) 2019 The Decred developers +// Use of this source code is governed by an ISC +// license that can be found in the LICENSE file. + +package txscript + +import ( + "bytes" + "fmt" + "testing" +) + +// TestScriptTokenizer ensures a wide variety of behavior provided by the script +// tokenizer performs as expected. +func TestScriptTokenizer(t *testing.T) { + t.Skip() + + type expectedResult struct { + op byte // expected parsed opcode + data []byte // expected parsed data + index int32 // expected index into raw script after parsing token + } + + type tokenizerTest struct { + name string // test description + script []byte // the script to tokenize + expected []expectedResult // the expected info after parsing each token + finalIdx int32 // the expected final byte index + err error // expected error + } + + // Add both positive and negative tests for OP_DATA_1 through OP_DATA_75. + const numTestsHint = 100 // Make prealloc linter happy. + tests := make([]tokenizerTest, 0, numTestsHint) + for op := byte(OP_DATA_1); op < OP_DATA_75; op++ { + data := bytes.Repeat([]byte{0x01}, int(op)) + tests = append(tests, tokenizerTest{ + name: fmt.Sprintf("OP_DATA_%d", op), + script: append([]byte{op}, data...), + expected: []expectedResult{{op, data, 1 + int32(op)}}, + finalIdx: 1 + int32(op), + err: nil, + }) + + // Create test that provides one less byte than the data push requires. + tests = append(tests, tokenizerTest{ + name: fmt.Sprintf("short OP_DATA_%d", op), + script: append([]byte{op}, data[1:]...), + expected: nil, + finalIdx: 0, + err: scriptError(ErrMalformedPush, ""), + }) + } + + // Add both positive and negative tests for OP_PUSHDATA{1,2,4}. + data := mustParseShortForm("0x01{76}") + tests = append(tests, []tokenizerTest{{ + name: "OP_PUSHDATA1", + script: mustParseShortForm("OP_PUSHDATA1 0x4c 0x01{76}"), + expected: []expectedResult{{OP_PUSHDATA1, data, 2 + int32(len(data))}}, + finalIdx: 2 + int32(len(data)), + err: nil, + }, { + name: "OP_PUSHDATA1 no data length", + script: mustParseShortForm("OP_PUSHDATA1"), + expected: nil, + finalIdx: 0, + err: scriptError(ErrMalformedPush, ""), + }, { + name: "OP_PUSHDATA1 short data by 1 byte", + script: mustParseShortForm("OP_PUSHDATA1 0x4c 0x01{75}"), + expected: nil, + finalIdx: 0, + err: scriptError(ErrMalformedPush, ""), + }, { + name: "OP_PUSHDATA2", + script: mustParseShortForm("OP_PUSHDATA2 0x4c00 0x01{76}"), + expected: []expectedResult{{OP_PUSHDATA2, data, 3 + int32(len(data))}}, + finalIdx: 3 + int32(len(data)), + err: nil, + }, { + name: "OP_PUSHDATA2 no data length", + script: mustParseShortForm("OP_PUSHDATA2"), + expected: nil, + finalIdx: 0, + err: scriptError(ErrMalformedPush, ""), + }, { + name: "OP_PUSHDATA2 short data by 1 byte", + script: mustParseShortForm("OP_PUSHDATA2 0x4c00 0x01{75}"), + expected: nil, + finalIdx: 0, + err: scriptError(ErrMalformedPush, ""), + }, { + name: "OP_PUSHDATA4", + script: mustParseShortForm("OP_PUSHDATA4 0x4c000000 0x01{76}"), + expected: []expectedResult{{OP_PUSHDATA4, data, 5 + int32(len(data))}}, + finalIdx: 5 + int32(len(data)), + err: nil, + }, { + name: "OP_PUSHDATA4 no data length", + script: mustParseShortForm("OP_PUSHDATA4"), + expected: nil, + finalIdx: 0, + err: scriptError(ErrMalformedPush, ""), + }, { + name: "OP_PUSHDATA4 short data by 1 byte", + script: mustParseShortForm("OP_PUSHDATA4 0x4c000000 0x01{75}"), + expected: nil, + finalIdx: 0, + err: scriptError(ErrMalformedPush, ""), + }}...) + + // Add tests for OP_0, and OP_1 through OP_16 (small integers/true/false). + opcodes := []byte{OP_0} + for op := byte(OP_1); op < OP_16; op++ { + opcodes = append(opcodes, op) + } + for _, op := range opcodes { + tests = append(tests, tokenizerTest{ + name: fmt.Sprintf("OP_%d", op), + script: []byte{op}, + expected: []expectedResult{{op, nil, 1}}, + finalIdx: 1, + err: nil, + }) + } + + // Add various positive and negative tests for multi-opcode scripts. + tests = append(tests, []tokenizerTest{{ + name: "pay-to-pubkey-hash", + script: mustParseShortForm("DUP HASH160 DATA_20 0x01{20} EQUAL CHECKSIG"), + expected: []expectedResult{ + {OP_DUP, nil, 1}, {OP_HASH160, nil, 2}, + {OP_DATA_20, mustParseShortForm("0x01{20}"), 23}, + {OP_EQUAL, nil, 24}, {OP_CHECKSIG, nil, 25}, + }, + finalIdx: 25, + err: nil, + }, { + name: "almost pay-to-pubkey-hash (short data)", + script: mustParseShortForm("DUP HASH160 DATA_20 0x01{17} EQUAL CHECKSIG"), + expected: []expectedResult{ + {OP_DUP, nil, 1}, {OP_HASH160, nil, 2}, + }, + finalIdx: 2, + err: scriptError(ErrMalformedPush, ""), + }, { + name: "almost pay-to-pubkey-hash (overlapped data)", + script: mustParseShortForm("DUP HASH160 DATA_20 0x01{19} EQUAL CHECKSIG"), + expected: []expectedResult{ + {OP_DUP, nil, 1}, {OP_HASH160, nil, 2}, + {OP_DATA_20, mustParseShortForm("0x01{19} EQUAL"), 23}, + {OP_CHECKSIG, nil, 24}, + }, + finalIdx: 24, + err: nil, + }, { + name: "pay-to-script-hash", + script: mustParseShortForm("HASH160 DATA_20 0x01{20} EQUAL"), + expected: []expectedResult{ + {OP_HASH160, nil, 1}, + {OP_DATA_20, mustParseShortForm("0x01{20}"), 22}, + {OP_EQUAL, nil, 23}, + }, + finalIdx: 23, + err: nil, + }, { + name: "almost pay-to-script-hash (short data)", + script: mustParseShortForm("HASH160 DATA_20 0x01{18} EQUAL"), + expected: []expectedResult{ + {OP_HASH160, nil, 1}, + }, + finalIdx: 1, + err: scriptError(ErrMalformedPush, ""), + }, { + name: "almost pay-to-script-hash (overlapped data)", + script: mustParseShortForm("HASH160 DATA_20 0x01{19} EQUAL"), + expected: []expectedResult{ + {OP_HASH160, nil, 1}, + {OP_DATA_20, mustParseShortForm("0x01{19} EQUAL"), 22}, + }, + finalIdx: 22, + err: nil, + }}...) + + const scriptVersion = 0 + for _, test := range tests { + tokenizer := MakeScriptTokenizer(scriptVersion, test.script) + var opcodeNum int + for tokenizer.Next() { + // Ensure Next never returns true when there is an error set. + if err := tokenizer.Err(); err != nil { + t.Fatalf("%q: Next returned true when tokenizer has err: %v", + test.name, err) + } + + // Ensure the test data expects a token to be parsed. + op := tokenizer.Opcode() + data := tokenizer.Data() + if opcodeNum >= len(test.expected) { + t.Fatalf("%q: unexpected token '%d' (data: '%x')", test.name, + op, data) + } + expected := &test.expected[opcodeNum] + + // Ensure the opcode and data are the expected values. + if op != expected.op { + t.Fatalf("%q: unexpected opcode -- got %v, want %v", test.name, + op, expected.op) + } + if !bytes.Equal(data, expected.data) { + t.Fatalf("%q: unexpected data -- got %x, want %x", test.name, + data, expected.data) + } + + tokenizerIdx := tokenizer.ByteIndex() + if tokenizerIdx != expected.index { + t.Fatalf("%q: unexpected byte index -- got %d, want %d", + test.name, tokenizerIdx, expected.index) + } + + opcodeNum++ + } + + // Ensure the tokenizer claims it is done. This should be the case + // regardless of whether or not there was a parse error. + if !tokenizer.Done() { + t.Fatalf("%q: tokenizer claims it is not done", test.name) + } + + // Ensure the error is as expected. + if test.err == nil && tokenizer.Err() != nil { + t.Fatalf("%q: unexpected tokenizer err -- got %v, want nil", + test.name, tokenizer.Err()) + } else if test.err != nil { + if !IsErrorCode(tokenizer.Err(), test.err.(Error).ErrorCode) { + t.Fatalf("%q: unexpected tokenizer err -- got %v, want %v", + test.name, tokenizer.Err(), test.err.(Error).ErrorCode) + } + } + + // Ensure the final index is the expected value. + tokenizerIdx := tokenizer.ByteIndex() + if tokenizerIdx != test.finalIdx { + t.Fatalf("%q: unexpected final byte index -- got %d, want %d", + test.name, tokenizerIdx, test.finalIdx) + } + } +} + +// TestScriptTokenizerUnsupportedVersion ensures the tokenizer fails immediately +// with an unsupported script version. +func TestScriptTokenizerUnsupportedVersion(t *testing.T) { + const scriptVersion = 65535 + tokenizer := MakeScriptTokenizer(scriptVersion, nil) + if !IsErrorCode(tokenizer.Err(), ErrUnsupportedScriptVersion) { + t.Fatalf("script tokenizer did not error with unsupported version") + } +} diff --git a/upnp.go b/upnp.go index feb256d072..c74e4ed79a 100644 --- a/upnp.go +++ b/upnp.go @@ -36,6 +36,7 @@ import ( "bytes" "encoding/xml" "errors" + "fmt" "net" "net/http" "os" @@ -229,7 +230,7 @@ func getServiceURL(rootURL string) (url string, err error) { } defer r.Body.Close() if r.StatusCode >= 400 { - err = errors.New(string(r.StatusCode)) + err = errors.New(fmt.Sprint(r.StatusCode)) return } var root root diff --git a/version.go b/version.go index fba55b5a37..19af5b8bd0 100644 --- a/version.go +++ b/version.go @@ -17,8 +17,8 @@ const semanticAlphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqr // versioning 2.0.0 spec (http://semver.org/). const ( appMajor uint = 0 - appMinor uint = 20 - appPatch uint = 1 + appMinor uint = 23 + appPatch uint = 3 // appPreRelease MUST only contain characters from semanticAlphabet // per the semantic versioning spec. diff --git a/wire/README.md b/wire/README.md index 646bc0a309..8660bbfd54 100644 --- a/wire/README.md +++ b/wire/README.md @@ -1,9 +1,9 @@ wire ==== -[![Build Status](http://img.shields.io/travis/btcsuite/btcd.svg)](https://travis-ci.org/btcsuite/btcd) +[![Build Status](https://github.com/btcsuite/btcd/workflows/Build%20and%20Test/badge.svg)](https://github.com/btcsuite/btcd/actions) [![ISC License](http://img.shields.io/badge/license-ISC-blue.svg)](http://copyfree.org) -[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/btcsuite/btcd/wire) +[![GoDoc](https://img.shields.io/badge/godoc-reference-blue.svg)](https://pkg.go.dev/github.com/btcsuite/btcd/wire) ======= Package wire implements the bitcoin wire protocol. A comprehensive suite of diff --git a/wire/bench_test.go b/wire/bench_test.go index f6637d4210..5176c962e8 100644 --- a/wire/bench_test.go +++ b/wire/bench_test.go @@ -200,7 +200,7 @@ func BenchmarkWriteOutPoint(b *testing.B) { Index: 0, } for i := 0; i < b.N; i++ { - writeOutPoint(ioutil.Discard, 0, 0, op) + WriteOutPoint(ioutil.Discard, 0, 0, op) } } @@ -226,7 +226,7 @@ func BenchmarkReadTxOut(b *testing.B) { var txOut TxOut for i := 0; i < b.N; i++ { r.Seek(0, 0) - readTxOut(r, 0, 0, &txOut) + ReadTxOut(r, 0, 0, &txOut) scriptPool.Return(txOut.PkScript) } } diff --git a/wire/common_test.go b/wire/common_test.go index fa963d4b5d..46e3fa6613 100644 --- a/wire/common_test.go +++ b/wire/common_test.go @@ -118,15 +118,15 @@ func TestElementWire(t *testing.T) { }, }, { - ServiceFlag(SFNodeNetwork), + SFNodeNetwork, []byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}, }, { - InvType(InvTypeTx), + InvTypeTx, []byte{0x01, 0x00, 0x00, 0x00}, }, { - BitcoinNet(MainNet), + MainNet, []byte{0xf9, 0xbe, 0xb4, 0xd9}, }, // Type not supported by the "fast" path and requires reflection. @@ -211,9 +211,9 @@ func TestElementWireErrors(t *testing.T) { }), 0, io.ErrShortWrite, io.EOF, }, - {ServiceFlag(SFNodeNetwork), 0, io.ErrShortWrite, io.EOF}, - {InvType(InvTypeTx), 0, io.ErrShortWrite, io.EOF}, - {BitcoinNet(MainNet), 0, io.ErrShortWrite, io.EOF}, + {SFNodeNetwork, 0, io.ErrShortWrite, io.EOF}, + {InvTypeTx, 0, io.ErrShortWrite, io.EOF}, + {MainNet, 0, io.ErrShortWrite, io.EOF}, } t.Logf("Running %d tests", len(tests)) diff --git a/wire/fixedIO_test.go b/wire/fixedIO_test.go index 731c463892..ccd67ae411 100644 --- a/wire/fixedIO_test.go +++ b/wire/fixedIO_test.go @@ -68,7 +68,7 @@ func (fr *fixedReader) Read(p []byte) (n int, err error) { func newFixedReader(max int, buf []byte) io.Reader { b := make([]byte, max) if buf != nil { - copy(b[:], buf) + copy(b, buf) } iobuf := bytes.NewBuffer(b) diff --git a/wire/message.go b/wire/message.go index e937647702..1f412fa6fa 100644 --- a/wire/message.go +++ b/wire/message.go @@ -32,6 +32,7 @@ const ( CmdVerAck = "verack" CmdGetAddr = "getaddr" CmdAddr = "addr" + CmdAddrV2 = "addrv2" CmdGetBlocks = "getblocks" CmdInv = "inv" CmdGetData = "getdata" @@ -57,6 +58,7 @@ const ( CmdCFilter = "cfilter" CmdCFHeaders = "cfheaders" CmdCFCheckpt = "cfcheckpt" + CmdSendAddrV2 = "sendaddrv2" ) // MessageEncoding represents the wire message encoding format to be used. @@ -77,6 +79,13 @@ const ( // protocol. var LatestEncoding = WitnessEncoding +// ErrUnknownMessage is the error returned when decoding an unknown message. +var ErrUnknownMessage = fmt.Errorf("received unknown message") + +// ErrInvalidHandshake is the error returned when a peer sends us a known +// message that does not belong in the version-verack handshake. +var ErrInvalidHandshake = fmt.Errorf("invalid message during handshake") + // Message is an interface that describes a bitcoin message. A type that // implements Message has complete control over the representation of its data // and may therefore contain additional or fewer fields than those which @@ -99,12 +108,18 @@ func makeEmptyMessage(command string) (Message, error) { case CmdVerAck: msg = &MsgVerAck{} + case CmdSendAddrV2: + msg = &MsgSendAddrV2{} + case CmdGetAddr: msg = &MsgGetAddr{} case CmdAddr: msg = &MsgAddr{} + case CmdAddrV2: + msg = &MsgAddrV2{} + case CmdGetBlocks: msg = &MsgGetBlocks{} @@ -181,7 +196,7 @@ func makeEmptyMessage(command string) (Message, error) { msg = &MsgCFCheckpt{} default: - return nil, fmt.Errorf("unhandled command [%s]", command) + return nil, ErrUnknownMessage } return msg, nil } @@ -213,7 +228,7 @@ func readMessageHeader(r io.Reader) (int, *messageHeader, error) { readElements(hr, &hdr.magic, &command, &hdr.length, &hdr.checksum) // Strip trailing zeros from command string. - hdr.command = string(bytes.TrimRight(command[:], string(0))) + hdr.command = string(bytes.TrimRight(command[:], "\x00")) return n, &hdr, nil } @@ -374,9 +389,10 @@ func ReadMessageWithEncodingN(r io.Reader, pver uint32, btcnet BitcoinNet, // Create struct of appropriate message type based on the command. msg, err := makeEmptyMessage(command) if err != nil { + // makeEmptyMessage can only return ErrUnknownMessage and it is + // important that we bubble it up to the caller. discardInput(r, hdr.length) - return totalBytes, nil, nil, messageError("ReadMessage", - err.Error()) + return totalBytes, nil, nil, err } // Check for maximum length based on the message type as a malicious client @@ -401,7 +417,7 @@ func ReadMessageWithEncodingN(r io.Reader, pver uint32, btcnet BitcoinNet, // Test checksum. checksum := chainhash.DoubleHashB(payload)[0:4] - if !bytes.Equal(checksum[:], hdr.checksum[:]) { + if !bytes.Equal(checksum, hdr.checksum[:]) { str := fmt.Sprintf("payload checksum failed - header "+ "indicates %v, but actual checksum is %v.", hdr.checksum, checksum) diff --git a/wire/message_test.go b/wire/message_test.go index 3a422e66ba..7ba2e0639f 100644 --- a/wire/message_test.go +++ b/wire/message_test.go @@ -295,7 +295,7 @@ func TestReadMessageWireErrors(t *testing.T) { pver, btcnet, len(unsupportedCommandBytes), - &MessageError{}, + ErrUnknownMessage, 24, }, @@ -345,7 +345,7 @@ func TestReadMessageWireErrors(t *testing.T) { pver, btcnet, len(discardBytes), - &MessageError{}, + ErrUnknownMessage, 24, }, } diff --git a/wire/msgaddrv2.go b/wire/msgaddrv2.go new file mode 100644 index 0000000000..4db4a1334a --- /dev/null +++ b/wire/msgaddrv2.go @@ -0,0 +1,102 @@ +package wire + +import ( + "fmt" + "io" +) + +// MaxV2AddrPerMsg is the maximum number of version 2 addresses that will exist +// in a single addrv2 message (MsgAddrV2). +const MaxV2AddrPerMsg = 1000 + +// MsgAddrV2 implements the Message interface and represents a bitcoin addrv2 +// message that can support longer-length addresses like torv3, cjdns, and i2p. +// It is used to gossip addresses on the network. Each message is limited to +// MaxV2AddrPerMsg addresses. This is the same limit as MsgAddr. +type MsgAddrV2 struct { + AddrList []*NetAddressV2 +} + +// BtcDecode decodes r using the bitcoin protocol into a MsgAddrV2. +func (m *MsgAddrV2) BtcDecode(r io.Reader, pver uint32, + enc MessageEncoding) error { + + count, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + // Limit to max addresses per message. + if count > MaxV2AddrPerMsg { + str := fmt.Sprintf("too many addresses for message [count %v,"+ + " max %v]", count, MaxV2AddrPerMsg) + return messageError("MsgAddrV2.BtcDecode", str) + } + + addrList := make([]NetAddressV2, count) + m.AddrList = make([]*NetAddressV2, 0, count) + for i := uint64(0); i < count; i++ { + na := &addrList[i] + err := readNetAddressV2(r, pver, na) + switch err { + case ErrSkippedNetworkID: + // This may be a network ID we don't know of, but is + // still valid. We can safely skip those. + continue + case ErrInvalidAddressSize: + // The encoding used by the peer does not follow + // BIP-155 and we should stop processing this message. + return err + } + + m.AddrList = append(m.AddrList, na) + } + + return nil +} + +// BtcEncode encodes the MsgAddrV2 into a writer w. +func (m *MsgAddrV2) BtcEncode(w io.Writer, pver uint32, + enc MessageEncoding) error { + + count := len(m.AddrList) + if count > MaxV2AddrPerMsg { + str := fmt.Sprintf("too many addresses for message [count %v,"+ + " max %v]", count, MaxV2AddrPerMsg) + return messageError("MsgAddrV2.BtcEncode", str) + } + + err := WriteVarInt(w, pver, uint64(count)) + if err != nil { + return err + } + + for _, na := range m.AddrList { + err = writeNetAddressV2(w, pver, na) + if err != nil { + return err + } + } + + return nil +} + +// Command returns the protocol command string for MsgAddrV2. +func (m *MsgAddrV2) Command() string { + return CmdAddrV2 +} + +// MaxPayloadLength returns the maximum length payload possible for MsgAddrV2. +func (m *MsgAddrV2) MaxPayloadLength(pver uint32) uint32 { + // The varint that can store the maximum number of addresses is 3 bytes + // long. The maximum payload is then 3 + 1000 * maxNetAddressV2Payload. + return 3 + (MaxV2AddrPerMsg * maxNetAddressV2Payload()) +} + +// NewMsgAddrV2 returns a new bitcoin addrv2 message that conforms to the +// Message interface. +func NewMsgAddrV2() *MsgAddrV2 { + return &MsgAddrV2{ + AddrList: make([]*NetAddressV2, 0, MaxV2AddrPerMsg), + } +} diff --git a/wire/msgaddrv2_test.go b/wire/msgaddrv2_test.go new file mode 100644 index 0000000000..213d699c96 --- /dev/null +++ b/wire/msgaddrv2_test.go @@ -0,0 +1,73 @@ +package wire + +import ( + "bytes" + "io" + "testing" +) + +// TestAddrV2Decode checks that decoding an addrv2 message off the wire behaves +// as expected. This means ignoring certain addresses, and failing in certain +// failure scenarios. +func TestAddrV2Decode(t *testing.T) { + tests := []struct { + buf []byte + expectedError bool + expectedAddrs int + }{ + // Exceeding max addresses. + { + []byte{0xfd, 0xff, 0xff}, + true, + 0, + }, + + // Invalid address size. + { + []byte{0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05}, + true, + 0, + }, + + // One valid address and one skipped address + { + []byte{ + 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, + 0x7f, 0x00, 0x00, 0x01, 0x22, 0x22, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x10, 0xfd, 0x87, 0xd8, + 0x7e, 0xeb, 0x43, 0xff, 0xfe, 0xcc, 0x39, 0xa8, + 0x73, 0x69, 0x15, 0xff, 0xff, 0x22, 0x22, + }, + false, + 1, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + r := bytes.NewReader(test.buf) + m := &MsgAddrV2{} + + err := m.BtcDecode(r, 0, LatestEncoding) + if test.expectedError { + if err == nil { + t.Errorf("Test #%d expected error", i) + } + + continue + } else if err != nil { + t.Errorf("Test #%d unexpected error %v", i, err) + } + + // Trying to read more should give EOF. + var b [1]byte + if _, err := r.Read(b[:]); err != io.EOF { + t.Errorf("Test #%d did not cleanly finish reading", i) + } + + if len(m.AddrList) != test.expectedAddrs { + t.Errorf("Test #%d expected %d addrs, instead of %d", + i, test.expectedAddrs, len(m.AddrList)) + } + } +} diff --git a/wire/msgsendaddrv2.go b/wire/msgsendaddrv2.go new file mode 100644 index 0000000000..d6d19efb27 --- /dev/null +++ b/wire/msgsendaddrv2.go @@ -0,0 +1,42 @@ +package wire + +import ( + "io" +) + +// MsgSendAddrV2 defines a bitcoin sendaddrv2 message which is used for a peer +// to signal support for receiving ADDRV2 messages (BIP155). It implements the +// Message interface. +// +// This message has no payload. +type MsgSendAddrV2 struct{} + +// BtcDecode decodes r using the bitcoin protocol encoding into the receiver. +// This is part of the Message interface implementation. +func (msg *MsgSendAddrV2) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error { + return nil +} + +// BtcEncode encodes the receiver to w using the bitcoin protocol encoding. +// This is part of the Message interface implementation. +func (msg *MsgSendAddrV2) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error { + return nil +} + +// Command returns the protocol command string for the message. This is part +// of the Message interface implementation. +func (msg *MsgSendAddrV2) Command() string { + return CmdSendAddrV2 +} + +// MaxPayloadLength returns the maximum length the payload can be for the +// receiver. This is part of the Message interface implementation. +func (msg *MsgSendAddrV2) MaxPayloadLength(pver uint32) uint32 { + return 0 +} + +// NewMsgSendAddrV2 returns a new bitcoin sendaddrv2 message that conforms to the +// Message interface. +func NewMsgSendAddrV2() *MsgSendAddrV2 { + return &MsgSendAddrV2{} +} diff --git a/wire/msgtx.go b/wire/msgtx.go index 4f10ef9f98..80a5fcc674 100644 --- a/wire/msgtx.go +++ b/wire/msgtx.go @@ -96,27 +96,54 @@ const ( // maxWitnessItemsPerInput is the maximum number of witness items to // be read for the witness data for a single TxIn. This number is - // derived using a possble lower bound for the encoding of a witness + // derived using a possible lower bound for the encoding of a witness // item: 1 byte for length + 1 byte for the witness item itself, or two // bytes. This value is then divided by the currently allowed maximum - // "cost" for a transaction. - maxWitnessItemsPerInput = 500000 + // "cost" for a transaction. We use this for an upper bound for the + // buffer and consensus makes sure that the weight of a transaction + // cannot be more than 4000000. + maxWitnessItemsPerInput = 4_000_000 // maxWitnessItemSize is the maximum allowed size for an item within - // an input's witness data. This number is derived from the fact that - // for script validation, each pushed item onto the stack must be less - // than 10k bytes. - maxWitnessItemSize = 11000 + // an input's witness data. This value is bounded by the largest + // possible block size, post segwit v1 (taproot). + maxWitnessItemSize = 4_000_000 ) -// witnessMarkerBytes are a pair of bytes specific to the witness encoding. If -// this sequence is encoutered, then it indicates a transaction has iwtness -// data. The first byte is an always 0x00 marker byte, which allows decoders to -// distinguish a serialized transaction with witnesses from a regular (legacy) -// one. The second byte is the Flag field, which at the moment is always 0x01, -// but may be extended in the future to accommodate auxiliary non-committed -// fields. -var witessMarkerBytes = []byte{0x00, 0x01} +// TxFlagMarker is the first byte of the FLAG field in a bitcoin tx +// message. It allows decoders to distinguish a regular serialized +// transaction from one that would require a different parsing logic. +// +// Position of FLAG in a bitcoin tx message: +// +// ┌─────────┬────────────────────┬─────────────┬─────┐ +// │ VERSION │ FLAG │ TX-IN-COUNT │ ... │ +// │ 4 bytes │ 2 bytes (optional) │ varint │ │ +// └─────────┴────────────────────┴─────────────┴─────┘ +// +// Zooming into the FLAG field: +// +// ┌── FLAG ─────────────┬────────┐ +// │ TxFlagMarker (0x00) │ TxFlag │ +// │ 1 byte │ 1 byte │ +// └─────────────────────┴────────┘ +const TxFlagMarker = 0x00 + +// TxFlag is the second byte of the FLAG field in a bitcoin tx message. +// It indicates the decoding logic to use in the transaction parser, if +// TxFlagMarker is detected in the tx message. +// +// As of writing this, only the witness flag (0x01) is supported, but may be +// extended in the future to accommodate auxiliary non-committed fields. +type TxFlag = byte + +const ( + // WitnessFlag is a flag specific to witness encoding. If the TxFlagMarker + // is encountered followed by the WitnessFlag, then it indicates a + // transaction has witness data. This allows decoders to distinguish a + // serialized transaction with witnesses from a legacy one. + WitnessFlag TxFlag = 0x01 +) // scriptFreeList defines a free list of byte slices (up to the maximum number // defined by the freeListMaxItems constant) that have a cap according to the @@ -420,18 +447,19 @@ func (msg *MsgTx) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error return err } - // A count of zero (meaning no TxIn's to the uninitiated) indicates - // this is a transaction with witness data. - var flag [1]byte - if count == 0 && enc == WitnessEncoding { - // Next, we need to read the flag, which is a single byte. + // A count of zero (meaning no TxIn's to the uninitiated) means that the + // value is a TxFlagMarker, and hence indicates the presence of a flag. + var flag [1]TxFlag + if count == TxFlagMarker && enc == WitnessEncoding { + // The count varint was in fact the flag marker byte. Next, we need to + // read the flag value, which is a single byte. if _, err = io.ReadFull(r, flag[:]); err != nil { return err } - // At the moment, the flag MUST be 0x01. In the future other - // flag types may be supported. - if flag[0] != 0x01 { + // At the moment, the flag MUST be WitnessFlag (0x01). In the future + // other flag types may be supported. + if flag[0] != WitnessFlag { str := fmt.Sprintf("witness tx but flag byte is %x", flag) return messageError("MsgTx.BtcDecode", str) } @@ -525,7 +553,7 @@ func (msg *MsgTx) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error // and needs to be returned to the pool on error. to := &txOuts[i] msg.TxOut[i] = to - err = readTxOut(r, pver, msg.Version, to) + err = ReadTxOut(r, pver, msg.Version, to) if err != nil { returnScriptBuffers() return err @@ -561,8 +589,9 @@ func (msg *MsgTx) BtcDecode(r io.Reader, pver uint32, enc MessageEncoding) error // item itself. txin.Witness = make([][]byte, witCount) for j := uint64(0); j < witCount; j++ { - txin.Witness[j], err = readScript(r, pver, - maxWitnessItemSize, "script witness item") + txin.Witness[j], err = readScript( + r, pver, maxWitnessItemSize, "script witness item", + ) if err != nil { returnScriptBuffers() return err @@ -690,14 +719,11 @@ func (msg *MsgTx) BtcEncode(w io.Writer, pver uint32, enc MessageEncoding) error // defined in BIP0144. doWitness := enc == WitnessEncoding && msg.HasWitness() if doWitness { - // After the txn's Version field, we include two additional - // bytes specific to the witness encoding. The first byte is an - // always 0x00 marker byte, which allows decoders to - // distinguish a serialized transaction with witnesses from a - // regular (legacy) one. The second byte is the Flag field, - // which at the moment is always 0x01, but may be extended in - // the future to accommodate auxiliary non-committed fields. - if _, err := w.Write(witessMarkerBytes); err != nil { + // After the transaction's Version field, we include two additional + // bytes specific to the witness encoding. This byte sequence is known + // as a flag. The first byte is a marker byte (TxFlagMarker) and the + // second one is the flag value to indicate presence of witness data. + if _, err := w.Write([]byte{TxFlagMarker, WitnessFlag}); err != nil { return err } } @@ -908,9 +934,9 @@ func readOutPoint(r io.Reader, pver uint32, version int32, op *OutPoint) error { return err } -// writeOutPoint encodes op to the bitcoin protocol encoding for an OutPoint +// WriteOutPoint encodes op to the bitcoin protocol encoding for an OutPoint // to w. -func writeOutPoint(w io.Writer, pver uint32, version int32, op *OutPoint) error { +func WriteOutPoint(w io.Writer, pver uint32, version int32, op *OutPoint) error { _, err := w.Write(op.Hash[:]) if err != nil { return err @@ -970,7 +996,7 @@ func readTxIn(r io.Reader, pver uint32, version int32, ti *TxIn) error { // writeTxIn encodes ti to the bitcoin protocol encoding for a transaction // input (TxIn) to w. func writeTxIn(w io.Writer, pver uint32, version int32, ti *TxIn) error { - err := writeOutPoint(w, pver, version, &ti.PreviousOutPoint) + err := WriteOutPoint(w, pver, version, &ti.PreviousOutPoint) if err != nil { return err } @@ -983,9 +1009,9 @@ func writeTxIn(w io.Writer, pver uint32, version int32, ti *TxIn) error { return binarySerializer.PutUint32(w, littleEndian, ti.Sequence) } -// readTxOut reads the next sequence of bytes from r as a transaction output +// ReadTxOut reads the next sequence of bytes from r as a transaction output // (TxOut). -func readTxOut(r io.Reader, pver uint32, version int32, to *TxOut) error { +func ReadTxOut(r io.Reader, pver uint32, version int32, to *TxOut) error { err := readElement(r, &to.Value) if err != nil { return err diff --git a/wire/msgtx_test.go b/wire/msgtx_test.go index dd809f81e2..66965043e6 100644 --- a/wire/msgtx_test.go +++ b/wire/msgtx_test.go @@ -935,9 +935,9 @@ var multiWitnessTx = &MsgTx{ // tests. var multiWitnessTxEncoded = []byte{ 0x1, 0x0, 0x0, 0x0, // Version - 0x0, // Marker byte indicating 0 inputs, or a segwit encoded tx - 0x1, // Flag byte - 0x1, // Varint for number of inputs + TxFlagMarker, // Marker byte indicating 0 inputs, or a segwit encoded tx + WitnessFlag, // Flag byte + 0x1, // Varint for number of inputs 0xa5, 0x33, 0x52, 0xd5, 0x13, 0x57, 0x66, 0xf0, 0x30, 0x76, 0x59, 0x74, 0x18, 0x26, 0x3d, 0xa2, 0xd9, 0xc9, 0x58, 0x31, 0x59, 0x68, 0xfe, 0xa8, @@ -978,9 +978,9 @@ var multiWitnessTxEncoded = []byte{ // being set to 0x01, the flag is 0x00, which should trigger a decoding error. var multiWitnessTxEncodedNonZeroFlag = []byte{ 0x1, 0x0, 0x0, 0x0, // Version - 0x0, // Marker byte indicating 0 inputs, or a segwit encoded tx - 0x0, // Incorrect flag byte (should be 0x01) - 0x1, // Varint for number of inputs + TxFlagMarker, // Marker byte indicating 0 inputs, or a segwit encoded tx + 0x0, // Incorrect flag byte (should be 0x01) + 0x1, // Varint for number of inputs 0xa5, 0x33, 0x52, 0xd5, 0x13, 0x57, 0x66, 0xf0, 0x30, 0x76, 0x59, 0x74, 0x18, 0x26, 0x3d, 0xa2, 0xd9, 0xc9, 0x58, 0x31, 0x59, 0x68, 0xfe, 0xa8, diff --git a/wire/netaddressv2.go b/wire/netaddressv2.go new file mode 100644 index 0000000000..15f7916456 --- /dev/null +++ b/wire/netaddressv2.go @@ -0,0 +1,588 @@ +package wire + +import ( + "encoding/base32" + "encoding/binary" + "fmt" + "io" + "net" + "strings" + "time" + + "golang.org/x/crypto/sha3" +) + +const ( + // maxAddrV2Size is the maximum size an address may be in the addrv2 + // message. + maxAddrV2Size = 512 +) + +var ( + // ErrInvalidAddressSize is an error that means an incorrect address + // size was decoded for a networkID or that the address exceeded the + // maximum size for an unknown networkID. + ErrInvalidAddressSize = fmt.Errorf("invalid address size") + + // ErrSkippedNetworkID is returned when the cjdns, i2p, or unknown + // networks are encountered during decoding. btcd does not support i2p + // or cjdns addresses. In the case of an unknown networkID, this is so + // that a future BIP reserving a new networkID does not cause older + // addrv2-supporting btcd software to disconnect upon receiving the new + // addresses. This error can also be returned when an OnionCat-encoded + // torv2 address is received with the ipv6 networkID. This error + // signals to the caller to continue reading. + ErrSkippedNetworkID = fmt.Errorf("skipped networkID") +) + +// maxNetAddressV2Payload returns the max payload size for an address used in +// the addrv2 message. +func maxNetAddressV2Payload() uint32 { + // The timestamp takes up four bytes. + plen := uint32(4) + + // The ServiceFlag is a varint and its maximum size is 9 bytes. + plen += 9 + + // The netID is a single byte. + plen += 1 + + // The largest address is 512 bytes. Even though it will not be a valid + // address, we should read and ignore it. The preceeding varint to + // store 512 bytes is 3 bytes long. This gives us a total of 515 bytes. + plen += 515 + + // The port is 2 bytes. + plen += 2 + + return plen +} + +// isOnionCatTor returns whether a given ip address is actually an encoded tor +// v2 address. The wire package is unable to use the addrmgr's IsOnionCatTor as +// doing so would give an import cycle. +func isOnionCatTor(ip net.IP) bool { + onionCatNet := net.IPNet{ + IP: net.ParseIP("fd87:d87e:eb43::"), + Mask: net.CIDRMask(48, 128), + } + return onionCatNet.Contains(ip) +} + +// NetAddressV2 defines information about a peer on the network including the +// last time it was seen, the services it supports, its address, and port. This +// struct is used in the addrv2 message (MsgAddrV2) and can contain larger +// addresses, like Tor. Additionally, it can contain any NetAddress address. +type NetAddressV2 struct { + // Last time the address was seen. This is, unfortunately, encoded as a + // uint32 on the wire and therefore is limited to 2106. This field is + // not present in the bitcoin version message (MsgVersion) nor was it + // added until protocol version >= NetAddressTimeVersion. + Timestamp time.Time + + // Services is a bitfield which identifies the services supported by + // the address. This is encoded in CompactSize. + Services ServiceFlag + + // Addr is the network address of the peer. This is a variable-length + // address. Network() returns the BIP-155 networkID which is a uint8 + // encoded as a string. String() returns the address as a string. + Addr net.Addr + + // Port is the port of the address. This is 0 if the network doesn't + // use ports. + Port uint16 +} + +// HasService returns whether the specified service is supported by the +// address. +func (na *NetAddressV2) HasService(service ServiceFlag) bool { + return na.Services&service == service +} + +// AddService adds a service to the Services bitfield. +func (na *NetAddressV2) AddService(service ServiceFlag) { + na.Services |= service +} + +// ToLegacy attempts to convert a NetAddressV2 to a legacy NetAddress. This +// only works for ipv4, ipv6, or torv2 addresses as they can be encoded with +// the OnionCat encoding. If this method is called on a torv3 address, nil will +// be returned. +func (na *NetAddressV2) ToLegacy() *NetAddress { + legacyNa := &NetAddress{ + Timestamp: na.Timestamp, + Services: na.Services, + Port: na.Port, + } + + switch a := na.Addr.(type) { + case *ipv4Addr: + legacyNa.IP = a.addr[:] + case *ipv6Addr: + legacyNa.IP = a.addr[:] + case *torv2Addr: + legacyNa.IP = a.onionCatEncoding() + case *torv3Addr: + return nil + } + + return legacyNa +} + +// IsTorV3 returns a bool that signals to the caller whether or not this is a +// torv3 address. +func (na *NetAddressV2) IsTorV3() bool { + _, ok := na.Addr.(*torv3Addr) + return ok +} + +// TorV3Key returns the first byte of the v3 public key. This is used in the +// addrmgr to calculate a key from a network group. +func (na *NetAddressV2) TorV3Key() byte { + // This should never be called on a non-torv3 address. + addr, ok := na.Addr.(*torv3Addr) + if !ok { + panic("unexpected TorV3Key call on non-torv3 address") + } + + return addr.addr[0] +} + +// NetAddressV2FromBytes creates a NetAddressV2 from a byte slice. It will +// also handle a torv2 address using the OnionCat encoding. +func NetAddressV2FromBytes(timestamp time.Time, services ServiceFlag, + addrBytes []byte, port uint16) *NetAddressV2 { + + var netAddr net.Addr + switch len(addrBytes) { + case ipv4Size: + addr := &ipv4Addr{} + addr.netID = ipv4 + copy(addr.addr[:], addrBytes) + netAddr = addr + case ipv6Size: + if isOnionCatTor(addrBytes) { + addr := &torv2Addr{} + addr.netID = torv2 + copy(addr.addr[:], addrBytes[6:]) + netAddr = addr + break + } + + addr := &ipv6Addr{} + addr.netID = ipv6 + copy(addr.addr[:], addrBytes) + netAddr = addr + case torv2Size: + addr := &torv2Addr{} + addr.netID = torv2 + copy(addr.addr[:], addrBytes) + netAddr = addr + case TorV3Size: + addr := &torv3Addr{} + addr.netID = torv3 + copy(addr.addr[:], addrBytes) + netAddr = addr + } + + return &NetAddressV2{ + Timestamp: timestamp, + Services: services, + Addr: netAddr, + Port: port, + } +} + +// writeNetAddressV2 writes a NetAddressV2 to a writer. +func writeNetAddressV2(w io.Writer, pver uint32, na *NetAddressV2) error { + err := writeElement(w, uint32(na.Timestamp.Unix())) + if err != nil { + return err + } + + if err := WriteVarInt(w, pver, uint64(na.Services)); err != nil { + return err + } + + var ( + netID networkID + address []byte + ) + + switch a := na.Addr.(type) { + case *ipv4Addr: + netID = a.netID + address = a.addr[:] + case *ipv6Addr: + netID = a.netID + address = a.addr[:] + case *torv2Addr: + netID = a.netID + address = a.addr[:] + case *torv3Addr: + netID = a.netID + address = a.addr[:] + default: + // This should not occur. + return fmt.Errorf("unexpected address type") + } + + if err := writeElement(w, netID); err != nil { + return err + } + + addressSize := uint64(len(address)) + if err := WriteVarInt(w, pver, addressSize); err != nil { + return err + } + + if err := writeElement(w, address); err != nil { + return err + } + + return binary.Write(w, bigEndian, na.Port) +} + +// readNetAddressV2 reads a NetAddressV2 from a reader. This function has +// checks that the corresponding write function doesn't. This is because +// reading from the peer is untrusted whereas writing assumes we have already +// validated the NetAddressV2. +func readNetAddressV2(r io.Reader, pver uint32, na *NetAddressV2) error { + err := readElement(r, (*uint32Time)(&na.Timestamp)) + if err != nil { + return err + } + + // Services is encoded as a variable length integer in addrv2. + services, err := ReadVarInt(r, pver) + if err != nil { + return err + } + na.Services = ServiceFlag(services) + + var netID uint8 + if err := readElement(r, &netID); err != nil { + return err + } + + decodedSize, err := ReadVarInt(r, pver) + if err != nil { + return err + } + + if !isKnownNetworkID(netID) { + // In the case of an unknown networkID, we'll read the address + // size and error with ErrInvalidAddressSize if it's greater + // than maxAddrV2Size. If the address size is within the valid + // range, we'll just read and discard the address. In this + // case, ErrSkippedNetworkID will be returned to signal to the + // caller to continue reading. + if decodedSize > maxAddrV2Size { + return ErrInvalidAddressSize + } + + // The +2 is the port field. + discardedAddrPort := make([]byte, decodedSize+2) + if err := readElement(r, &discardedAddrPort); err != nil { + return err + } + + return ErrSkippedNetworkID + } + + // If the netID is an i2p or cjdns address, we'll advance the reader + // and return a special error to signal to the caller to not use the + // passed NetAddressV2 struct. Otherwise, we'll just read the address + // and port without returning an error. + switch networkID(netID) { + case ipv4: + addr := &ipv4Addr{} + addr.netID = ipv4 + if decodedSize != uint64(ipv4Size) { + return ErrInvalidAddressSize + } + + if err := readElement(r, &addr.addr); err != nil { + return err + } + + na.Port, err = binarySerializer.Uint16(r, bigEndian) + if err != nil { + return err + } + + na.Addr = addr + case ipv6: + addr := &ipv6Addr{} + addr.netID = ipv6 + if decodedSize != uint64(ipv6Size) { + return ErrInvalidAddressSize + } + + if err := readElement(r, &addr.addr); err != nil { + return err + } + + na.Port, err = binarySerializer.Uint16(r, bigEndian) + if err != nil { + return err + } + + na.Addr = addr + + // BIP-155 says to ignore OnionCat addresses in addrv2 + // messages. + if isOnionCatTor(addr.addr[:]) { + return ErrSkippedNetworkID + } + case torv2: + addr := &torv2Addr{} + addr.netID = torv2 + if decodedSize != uint64(torv2Size) { + return ErrInvalidAddressSize + } + + if err := readElement(r, &addr.addr); err != nil { + return err + } + + na.Port, err = binarySerializer.Uint16(r, bigEndian) + if err != nil { + return err + } + + na.Addr = addr + case torv3: + addr := &torv3Addr{} + addr.netID = torv3 + if decodedSize != uint64(TorV3Size) { + return ErrInvalidAddressSize + } + + if err := readElement(r, &addr.addr); err != nil { + return err + } + + na.Port, err = binarySerializer.Uint16(r, bigEndian) + if err != nil { + return err + } + + // BIP-155 does not specify to validate the public key here. + // bitcoind does not validate the ed25519 pubkey. + na.Addr = addr + case i2p: + addr := &i2pAddr{} + addr.netID = i2p + if decodedSize != uint64(i2pSize) { + return ErrInvalidAddressSize + } + + if err := readElement(r, &addr.addr); err != nil { + return err + } + + na.Port, err = binarySerializer.Uint16(r, bigEndian) + if err != nil { + return err + } + + return ErrSkippedNetworkID + case cjdns: + addr := &cjdnsAddr{} + addr.netID = cjdns + if decodedSize != uint64(cjdnsSize) { + return ErrInvalidAddressSize + } + + if err := readElement(r, &addr.addr); err != nil { + return err + } + + na.Port, err = binarySerializer.Uint16(r, bigEndian) + if err != nil { + return err + } + + return ErrSkippedNetworkID + } + + return nil +} + +// networkID represents the network that a given address is in. CJDNS and I2P +// addresses are not included. +type networkID uint8 + +const ( + // ipv4 means the following address is ipv4. + ipv4 networkID = iota + 1 + + // ipv6 means the following address is ipv6. + ipv6 + + // torv2 means the following address is a torv2 hidden service address. + torv2 + + // torv3 means the following address is a torv3 hidden service address. + torv3 + + // i2p means the following address is an i2p address. + i2p + + // cjdns means the following address is a cjdns address. + cjdns +) + +const ( + // ipv4Size is the size of an ipv4 address. + ipv4Size = 4 + + // ipv6Size is the size of an ipv6 address. + ipv6Size = 16 + + // torv2Size is the size of a torv2 address. + torv2Size = 10 + + // TorV3Size is the size of a torv3 address in bytes. + TorV3Size = 32 + + // i2pSize is the size of an i2p address. + i2pSize = 32 + + // cjdnsSize is the size of a cjdns address. + cjdnsSize = 16 +) + +const ( + // TorV2EncodedSize is the size of a torv2 address encoded in base32 + // with the ".onion" suffix. + TorV2EncodedSize = 22 + + // TorV3EncodedSize is the size of a torv3 address encoded in base32 + // with the ".onion" suffix. + TorV3EncodedSize = 62 +) + +// isKnownNetworkID returns true if the networkID is one listed above and false +// otherwise. +func isKnownNetworkID(netID uint8) bool { + return uint8(ipv4) <= netID && netID <= uint8(cjdns) +} + +type ipv4Addr struct { + addr [ipv4Size]byte + netID networkID +} + +// Part of the net.Addr interface. +func (a *ipv4Addr) String() string { + return net.IP(a.addr[:]).String() +} + +// Part of the net.Addr interface. +func (a *ipv4Addr) Network() string { + return string(a.netID) +} + +// Compile-time constraints to check that ipv4Addr meets the net.Addr +// interface. +var _ net.Addr = (*ipv4Addr)(nil) + +type ipv6Addr struct { + addr [ipv6Size]byte + netID networkID +} + +// Part of the net.Addr interface. +func (a *ipv6Addr) String() string { + return net.IP(a.addr[:]).String() +} + +// Part of the net.Addr interface. +func (a *ipv6Addr) Network() string { + return string(a.netID) +} + +// Compile-time constraints to check that ipv6Addr meets the net.Addr +// interface. +var _ net.Addr = (*ipv4Addr)(nil) + +type torv2Addr struct { + addr [torv2Size]byte + netID networkID +} + +// Part of the net.Addr interface. +func (a *torv2Addr) String() string { + base32Hash := base32.StdEncoding.EncodeToString(a.addr[:]) + return strings.ToLower(base32Hash) + ".onion" +} + +// Part of the net.Addr interface. +func (a *torv2Addr) Network() string { + return string(a.netID) +} + +// onionCatEncoding returns a torv2 address as an ipv6 address. +func (a *torv2Addr) onionCatEncoding() net.IP { + prefix := []byte{0xfd, 0x87, 0xd8, 0x7e, 0xeb, 0x43} + return net.IP(append(prefix, a.addr[:]...)) +} + +// Compile-time constraints to check that torv2Addr meets the net.Addr +// interface. +var _ net.Addr = (*torv2Addr)(nil) + +type torv3Addr struct { + addr [TorV3Size]byte + netID networkID +} + +// Part of the net.Addr interface. +func (a *torv3Addr) String() string { + // BIP-155 describes the torv3 address format: + // onion_address = base32(PUBKEY | CHECKSUM | VERSION) + ".onion" + // CHECKSUM = H(".onion checksum" | PUBKEY | VERSION)[:2] + // PUBKEY = addr, which is the ed25519 pubkey of the hidden service. + // VERSION = '\x03' + // H() is the SHA3-256 cryptographic hash function. + + torV3Version := []byte("\x03") + checksumConst := []byte(".onion checksum") + + // Write never returns an error so there is no need to handle it. + h := sha3.New256() + h.Write(checksumConst) + h.Write(a.addr[:]) + h.Write(torV3Version) + truncatedChecksum := h.Sum(nil)[:2] + + var base32Input [35]byte + copy(base32Input[:32], a.addr[:]) + copy(base32Input[32:34], truncatedChecksum) + copy(base32Input[34:], torV3Version) + + base32Hash := base32.StdEncoding.EncodeToString(base32Input[:]) + return strings.ToLower(base32Hash) + ".onion" +} + +// Part of the net.Addr interface. +func (a *torv3Addr) Network() string { + return string(a.netID) +} + +// Compile-time constraints to check that torv3Addr meets the net.Addr +// interface. +var _ net.Addr = (*torv3Addr)(nil) + +type i2pAddr struct { + addr [i2pSize]byte + netID networkID +} + +type cjdnsAddr struct { + addr [cjdnsSize]byte + netID networkID +} diff --git a/wire/netaddressv2_test.go b/wire/netaddressv2_test.go new file mode 100644 index 0000000000..bd5084b009 --- /dev/null +++ b/wire/netaddressv2_test.go @@ -0,0 +1,285 @@ +package wire + +import ( + "bytes" + "io" + "testing" + "time" +) + +// TestNetAddressV2FromBytes tests that NetAddressV2FromBytes works as +// expected. +func TestNetAddressV2FromBytes(t *testing.T) { + tests := []struct { + addrBytes []byte + expectedString string + expectedNetwork string + }{ + // Ipv4 encoding + { + []byte{0x7f, 0x00, 0x00, 0x01}, + "127.0.0.1", + string(ipv4), + }, + + // Ipv6 encoding + { + []byte{ + 0x20, 0x01, 0x09, 0xe8, 0x26, 0x15, 0x73, 0x00, + 0x09, 0x54, 0x12, 0x63, 0xef, 0xc8, 0x2e, 0x34, + }, + "2001:9e8:2615:7300:954:1263:efc8:2e34", + string(ipv6), + }, + + // OnionCat encoding + { + []byte{ + 0xfd, 0x87, 0xd8, 0x7e, 0xeb, 0x43, 0xff, 0xfe, + 0xcc, 0x39, 0xa8, 0x73, 0x69, 0x15, 0xff, 0xff, + }, + "777myonionurl777.onion", + string(torv2), + }, + + // Torv2 encoding + { + []byte{ + 0xff, 0xfe, 0xcc, 0x39, 0xa8, 0x73, 0x69, 0x15, + 0xff, 0xff, + }, + "777myonionurl777.onion", + string(torv2), + }, + + // Torv3 encoding + { + []byte{ + 0xca, 0xd2, 0xd3, 0xc8, 0xdc, 0x9c, 0xc4, 0xd3, + 0x70, 0x33, 0x30, 0xc5, 0x23, 0xaf, 0x02, 0xed, + 0xc4, 0x9d, 0xf8, 0xc6, 0xb0, 0x4e, 0x74, 0x6d, + 0x3b, 0x51, 0x57, 0xa7, 0x15, 0xfe, 0x98, 0x35, + }, + "zljnhsg4ttcng4btgdcshlyc5xcj36ggwbhhi3j3kfl2ofp6ta26jlid.onion", + string(torv3), + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + na := NetAddressV2FromBytes(time.Time{}, 0, test.addrBytes, 0) + + if test.expectedNetwork != string(torv3) { + if na.ToLegacy() == nil { + t.Errorf("Test #%d has nil legacy encoding", i) + } + } else { + if !na.IsTorV3() { + t.Errorf("Test #%d is not torv3 address", i) + } + } + + if na.Addr.String() != test.expectedString { + t.Errorf("Test #%d did not match expected string", i) + } + + if na.Addr.Network() != test.expectedNetwork { + t.Errorf("Test #%d did not match expected network", i) + } + + var b bytes.Buffer + if err := writeNetAddressV2(&b, 0, na); err != nil { + t.Errorf("Test #%d failed writing address %v", i, err) + } + + // Assert that the written netID is equivalent to the above. + if string(b.Bytes()[5]) != test.expectedNetwork { + t.Errorf("Test #%d did not match expected network", i) + } + } +} + +// TestReadNetAddressV2 tests that readNetAddressV2 behaves as expected in +// different scenarios. +func TestReadNetAddressV2(t *testing.T) { + tests := []struct { + buf []byte + expectedNetwork string + expectedError error + }{ + // Invalid address size for unknown netID. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xfd, 0xff, + 0xff, + }, + "", + ErrInvalidAddressSize, + }, + + // Valid address size for unknown netID. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x20, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x22, + 0x22, + }, + "", + ErrSkippedNetworkID, + }, + + // Invalid ipv4 size. + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x05}, + "", + ErrInvalidAddressSize, + }, + + // Valid ipv4 encoding. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x7f, + 0x00, 0x00, 0x01, 0x22, 0x22, + }, + string(ipv4), + nil, + }, + + // Invalid ipv6 size. + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xfc}, + "", + ErrInvalidAddressSize, + }, + + // OnionCat encoding is skipped. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0xfd, + 0x87, 0xd8, 0x7e, 0xeb, 0x43, 0xff, 0xfe, 0xcc, + 0x39, 0xa8, 0x73, 0x69, 0x15, 0xff, 0xff, 0x22, + 0x22, + }, + "", + ErrSkippedNetworkID, + }, + + // Valid ipv6 encoding. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x10, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, + 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x22, + 0x22, + }, + string(ipv6), + nil, + }, + + // Invalid torv2 size. + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x02}, + "", + ErrInvalidAddressSize, + }, + + // Valid torv2 encoding. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x0a, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x22, 0x22, + }, + string(torv2), + nil, + }, + + // Invalid torv3 size. + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02}, + "", + ErrInvalidAddressSize, + }, + + // Valid torv3 encoding. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x20, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x22, + 0x22, + }, + string(torv3), + nil, + }, + + // Invalid i2p size. + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x02}, + "", + ErrInvalidAddressSize, + }, + + // Valid i2p encoding. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x20, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, + 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x22, + 0x22, + }, + string(i2p), + ErrSkippedNetworkID, + }, + + // Invalid cjdns size. + { + []byte{0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x02}, + "", + ErrInvalidAddressSize, + }, + + // Valid cjdns encoding. + { + []byte{ + 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x10, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, + 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x22, + 0x22, + }, + string(cjdns), + ErrSkippedNetworkID, + }, + } + + t.Logf("Running %d tests", len(tests)) + for i, test := range tests { + r := bytes.NewReader(test.buf) + na := &NetAddressV2{} + + err := readNetAddressV2(r, 0, na) + if err != test.expectedError { + t.Errorf("Test #%d had unexpected error %v", i, err) + } else if err != nil { + continue + } + + // Trying to read more should give EOF. + var b [1]byte + if _, err := r.Read(b[:]); err != io.EOF { + t.Errorf("Test #%d did not cleanly finish reading", i) + } + + if na.Addr.Network() != test.expectedNetwork { + t.Errorf("Test #%d had unexpected network %v", i, + na.Addr.Network()) + } + } +} diff --git a/wire/protocol.go b/wire/protocol.go index 8cc9838a55..3b414ec3f1 100644 --- a/wire/protocol.go +++ b/wire/protocol.go @@ -13,7 +13,7 @@ import ( // XXX pedro: we will probably need to bump this. const ( // ProtocolVersion is the latest protocol version this package supports. - ProtocolVersion uint32 = 70013 + ProtocolVersion uint32 = 70016 // MultipleAddressVersion is the protocol version which added multiple // addresses per message (pver >= MultipleAddressVersion). @@ -51,6 +51,13 @@ const ( // FeeFilterVersion is the protocol version which added a new // feefilter message. FeeFilterVersion uint32 = 70013 + + // AddrV2Version is the protocol version which added two new messages. + // sendaddrv2 is sent during the version-verack handshake and signals + // support for sending and receiving the addrv2 message. In the future, + // new messages that occur during the version-verack handshake will not + // come with a protocol version bump. + AddrV2Version uint32 = 70016 ) // ServiceFlag identifies services supported by a bitcoin peer.